11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ciconst { 41cb0ef41Sopenharmony_ci TypedArrayPrototypeGetLength, 51cb0ef41Sopenharmony_ci} = primordials; 61cb0ef41Sopenharmony_ciconst { DefaultSerializer } = require('v8'); 71cb0ef41Sopenharmony_ciconst { Buffer } = require('buffer'); 81cb0ef41Sopenharmony_ciconst { serializeError } = require('internal/error_serdes'); 91cb0ef41Sopenharmony_ci 101cb0ef41Sopenharmony_ci 111cb0ef41Sopenharmony_cimodule.exports = async function* v8Reporter(source) { 121cb0ef41Sopenharmony_ci const serializer = new DefaultSerializer(); 131cb0ef41Sopenharmony_ci serializer.writeHeader(); 141cb0ef41Sopenharmony_ci const headerLength = TypedArrayPrototypeGetLength(serializer.releaseBuffer()); 151cb0ef41Sopenharmony_ci 161cb0ef41Sopenharmony_ci for await (const item of source) { 171cb0ef41Sopenharmony_ci const originalError = item.data.details?.error; 181cb0ef41Sopenharmony_ci if (originalError) { 191cb0ef41Sopenharmony_ci // Error is overriden with a serialized version, so that it can be 201cb0ef41Sopenharmony_ci // deserialized in the parent process. 211cb0ef41Sopenharmony_ci // Error is restored after serialization. 221cb0ef41Sopenharmony_ci item.data.details.error = serializeError(originalError); 231cb0ef41Sopenharmony_ci } 241cb0ef41Sopenharmony_ci serializer.writeHeader(); 251cb0ef41Sopenharmony_ci // Add 4 bytes, to later populate with message length 261cb0ef41Sopenharmony_ci serializer.writeRawBytes(Buffer.allocUnsafe(4)); 271cb0ef41Sopenharmony_ci serializer.writeHeader(); 281cb0ef41Sopenharmony_ci serializer.writeValue(item); 291cb0ef41Sopenharmony_ci 301cb0ef41Sopenharmony_ci if (originalError) { 311cb0ef41Sopenharmony_ci item.data.details.error = originalError; 321cb0ef41Sopenharmony_ci } 331cb0ef41Sopenharmony_ci 341cb0ef41Sopenharmony_ci const serializedMessage = serializer.releaseBuffer(); 351cb0ef41Sopenharmony_ci const serializedMessageLength = serializedMessage.length - (4 + headerLength); 361cb0ef41Sopenharmony_ci 371cb0ef41Sopenharmony_ci serializedMessage.set([ 381cb0ef41Sopenharmony_ci serializedMessageLength >> 24 & 0xFF, 391cb0ef41Sopenharmony_ci serializedMessageLength >> 16 & 0xFF, 401cb0ef41Sopenharmony_ci serializedMessageLength >> 8 & 0xFF, 411cb0ef41Sopenharmony_ci serializedMessageLength & 0xFF, 421cb0ef41Sopenharmony_ci ], headerLength); 431cb0ef41Sopenharmony_ci yield serializedMessage; 441cb0ef41Sopenharmony_ci } 451cb0ef41Sopenharmony_ci}; 46