Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
67 lines
1.9 KiB
JavaScript
67 lines
1.9 KiB
JavaScript
// Minimal Node.js worker that implements the turbopack-node pool wire protocol.
|
|
// Used by pool.rs integration tests.
|
|
//
|
|
// Wire protocol:
|
|
// - Messages are framed as [u32 BE length][payload bytes]
|
|
// - The ready signal is a 0-length message
|
|
// - After each TCP send, write "TURBOPACK_OUTPUT_D\n" to both stdout and stderr
|
|
// to signal the Rust side that console output for this operation is done.
|
|
|
|
const net = require('node:net')
|
|
|
|
const port = parseInt(process.argv[2], 10)
|
|
|
|
const socket = net.createConnection({ port, host: '127.0.0.1' }, () => {
|
|
socket.setNoDelay(true)
|
|
// Send empty ready signal (0-length message).
|
|
const readyBuf = Buffer.alloc(4)
|
|
readyBuf.writeUInt32BE(0, 0)
|
|
socket.write(readyBuf)
|
|
signalOutputDone()
|
|
})
|
|
|
|
// When the socket closes, exit cleanly.
|
|
socket.once('close', () => {
|
|
process.exit(0)
|
|
})
|
|
|
|
function signalOutputDone() {
|
|
process.stdout.write('TURBOPACK_OUTPUT_D\n')
|
|
process.stderr.write('TURBOPACK_OUTPUT_D\n')
|
|
}
|
|
|
|
function sendMessage(obj) {
|
|
const json = JSON.stringify(obj)
|
|
const payload = Buffer.from(json, 'utf8')
|
|
const header = Buffer.alloc(4)
|
|
header.writeUInt32BE(payload.length, 0)
|
|
socket.write(Buffer.concat([header, payload]))
|
|
signalOutputDone()
|
|
}
|
|
|
|
// --- Receive loop ---
|
|
// Read framed messages: 4-byte BE length prefix, then payload.
|
|
let recvBuf = Buffer.alloc(0)
|
|
|
|
socket.on('data', (chunk) => {
|
|
recvBuf = Buffer.concat([recvBuf, chunk])
|
|
drainMessages()
|
|
})
|
|
|
|
function drainMessages() {
|
|
while (true) {
|
|
if (recvBuf.length < 4) return
|
|
const len = recvBuf.readUInt32BE(0)
|
|
if (recvBuf.length < 4 + len) return
|
|
const payload = recvBuf.subarray(4, 4 + len)
|
|
recvBuf = recvBuf.subarray(4 + len)
|
|
handleMessage(JSON.parse(payload.toString('utf8')))
|
|
}
|
|
}
|
|
|
|
function handleMessage(msg) {
|
|
// Echo the message back along with this worker's PID so tests can verify
|
|
// whether the same process was reused across operations.
|
|
sendMessage({ echo: msg, pid: process.pid })
|
|
}
|