UNPKG

nstdlib-nightly

Version:

Node.js standard library converted to runtime-agnostic ES modules.

46 lines (39 loc) 1.55 kB
// 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; } });