nstdlib-nightly
Version:
Node.js standard library converted to runtime-agnostic ES modules.
46 lines (39 loc) • 1.55 kB
JavaScript
// Source: https://github.com/nodejs/node/blob/65eff1eb/lib/internal/test_runner/reporter/v8-serializer.js
import { DefaultSerializer } from "nstdlib/lib/v8";
import { Buffer } from "nstdlib/lib/buffer";
import { serializeError } from "nstdlib/lib/internal/error_serdes";
export default (async function* v8Reporter(source) {
const serializer = new DefaultSerializer();
serializer.writeHeader();
const headerLength = TypedArrayPrototypeGetLength(serializer.releaseBuffer());
for await (const item of source) {
const originalError = item.data.details?.error;
if (originalError) {
// Error is overriden with a serialized version, so that it can be
// deserialized in the parent process.
// Error is restored after serialization.
item.data.details.error = serializeError(originalError);
}
serializer.writeHeader();
// Add 4 bytes, to later populate with message length
serializer.writeRawBytes(Buffer.allocUnsafe(4));
serializer.writeHeader();
serializer.writeValue(item);
if (originalError) {
item.data.details.error = originalError;
}
const serializedMessage = serializer.releaseBuffer();
const serializedMessageLength =
serializedMessage.length - (4 + headerLength);
serializedMessage.set(
[
(serializedMessageLength >> 24) & 0xff,
(serializedMessageLength >> 16) & 0xff,
(serializedMessageLength >> 8) & 0xff,
serializedMessageLength & 0xff,
],
headerLength,
);
yield serializedMessage;
}
});