Files
next.js/turbopack/crates/turbopack-node/tests/pool_test_worker.js
Arian Tron 61f56f997c
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
first commit
2026-03-10 19:37:31 +03:30

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 })
}