Files
gdown/tools/native-host/smoke.mjs

42 lines
1.1 KiB
JavaScript

import { spawn } from 'node:child_process'
function encodeMessage(payload) {
const body = Buffer.from(JSON.stringify(payload), 'utf8')
const len = Buffer.alloc(4)
len.writeUInt32LE(body.length, 0)
return Buffer.concat([len, body])
}
function decodeMessages(buffer) {
const messages = []
let offset = 0
while (offset + 4 <= buffer.length) {
const len = buffer.readUInt32LE(offset)
if (offset + 4 + len > buffer.length) break
const body = buffer.subarray(offset + 4, offset + 4 + len)
messages.push(JSON.parse(body.toString('utf8')))
offset += 4 + len
}
return messages
}
const child = spawn(process.execPath, ['host.mjs'], {
cwd: process.cwd(),
stdio: ['pipe', 'pipe', 'inherit'],
})
const chunks = []
child.stdout.on('data', (chunk) => chunks.push(chunk))
child.stdin.write(encodeMessage({ action: 'ping' }))
setTimeout(() => {
child.stdin.end()
}, 120)
child.on('exit', () => {
const out = Buffer.concat(chunks)
const messages = decodeMessages(out)
// eslint-disable-next-line no-console
console.log(JSON.stringify(messages, null, 2))
})