38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { decodeWorkerRequest, readWorkerRequestText, writeWorkerMessage } from "../../src/worker.ts";
|
|
|
|
const req = decodeWorkerRequest(await readWorkerRequestText(4096));
|
|
const send = (type: "result", result: unknown) => writeWorkerMessage({ id: req.id, type, result }, 4096);
|
|
switch (req.task) {
|
|
case "normal":
|
|
writeWorkerMessage({ id: req.id, type: "progress", value: { bytes: 2 } }, 4096);
|
|
send("result", req.input);
|
|
break;
|
|
case "large":
|
|
writeWorkerMessage({ id: req.id, type: "result", result: "中文".repeat(200_000) }, 2 * 1024 * 1024);
|
|
break;
|
|
case "wrong-id":
|
|
writeWorkerMessage({ id: "other", type: "result", result: true }, 4096);
|
|
break;
|
|
case "truncated":
|
|
process.stdout.write('{"id":"1"');
|
|
break;
|
|
case "oversized":
|
|
process.stdout.write("x".repeat(8192));
|
|
break;
|
|
case "after-result":
|
|
send("result", true);
|
|
send("result", false);
|
|
break;
|
|
case "failed-exit":
|
|
send("result", true);
|
|
process.exitCode = 1;
|
|
break;
|
|
case "hang":
|
|
setInterval(() => {}, 1000);
|
|
break;
|
|
case "stderr":
|
|
process.stderr.write("x".repeat(65536));
|
|
send("result", true);
|
|
break;
|
|
}
|