import assert from "node:assert/strict";
|
import {EventEmitter} from "node:events";
|
|
class PendingWriteStream extends EventEmitter {
|
constructor() {
|
super();
|
this.destroyed = false;
|
this.writable = true;
|
this.writableEnded = false;
|
this.writableFinished = false;
|
}
|
|
write(_message, callback = null) {
|
setImmediate(() => {
|
const error = Object.assign(new Error("write EOF"), {code: "EOF"});
|
if (typeof callback === "function") callback(error);
|
else this.emit("error", error);
|
});
|
return true;
|
}
|
}
|
|
async function extractedOrdering() {
|
const stream = new PendingWriteStream();
|
const onError = () => undefined;
|
stream.on("error", onError);
|
stream.write("frame");
|
// Models finishProcessExitIfReady -> cleanupProcessListeners before the
|
// pending Windows WriteWrap completion is delivered.
|
stream.removeListener("error", onError);
|
return await new Promise((resolve) => {
|
process.once("uncaughtException", (error) => resolve(error.message === "write EOF"));
|
});
|
}
|
|
async function boundedOrdering() {
|
const stream = new PendingWriteStream();
|
let fixedCode = null;
|
const onError = () => { fixedCode = "E_NATIVE_PEER_CLOSED"; };
|
stream.on("error", onError);
|
await new Promise((resolve) => {
|
stream.write("frame", (error) => {
|
if (error?.message === "write EOF") fixedCode = "E_NATIVE_PEER_CLOSED";
|
resolve();
|
});
|
});
|
stream.removeListener("error", onError);
|
return fixedCode;
|
}
|
|
assert.equal(true, await extractedOrdering());
|
assert.equal("E_NATIVE_PEER_CLOSED", await boundedOrdering());
|
process.stdout.write(JSON.stringify({old_ordering_uncaught: true, bounded_error_code: "E_NATIVE_PEER_CLOSED"}) + "\n");
|