@tapjs/node-serialize
Version:
Stream TAP test data as a serialized node:test stream
59 lines • 2.31 kB
JavaScript
;
// Serialize the root TAP object, and output a node:test style
// serialized message stream.
Object.defineProperty(exports, "__esModule", { value: true });
exports.serialize = void 0;
const error_serdes_1 = require("@tapjs/error-serdes");
const core_1 = require("@tapjs/core");
const node_util_1 = require("node:util");
const comment_js_1 = require("./comment.js");
const on_add_js_1 = require("./on-add.js");
const print_messages_js_1 = require("./print-messages.js");
const stdio_js_1 = require("./stdio.js");
const test_map_js_1 = require("./test-map.js");
if (!core_1.proc) {
throw new Error('Cannot serialize TAP stream, no process object');
}
const { stdout } = core_1.proc;
const serialize = (tap) => {
if (tap.registered) {
throw new Error('Cannot serialize TAP stream, already registered');
}
tap.register?.();
tap.options.passes = true;
const subsMap = new test_map_js_1.TestMap();
const diagsMap = new test_map_js_1.TestMap([[tap, []]]);
const stream = new error_serdes_1.TestStreamSerialize();
// just for inspecting in dev.
/* c8 ignore start */
if (process.env.TAP_SERIALIZE_DEBUG === '1') {
stream.pipe(new error_serdes_1.TestStreamDeserialize()).on('data', c => stdout.write((0, node_util_1.inspect)(JSON.parse(JSON.stringify(c)), {
colors: true,
depth: Infinity,
}) + '\n'));
}
else {
/* c8 ignore stop */
stream.pipe(stdout);
}
const comment = (0, comment_js_1.commentMethod)(stream, diagsMap);
// unpossible, we already checked on module load
/* c8 ignore start */
if (!core_1.proc) {
throw new Error('Cannot serialize TAP stream, no process object');
}
/* c8 ignore stop */
if (process.env.TAP_SERIALIZE_DEBUG !== '1') {
(0, stdio_js_1.serializeStdio)(stream, core_1.proc, 'stderr');
(0, stdio_js_1.serializeStdio)(stream, core_1.proc, 'stdout');
}
const onAdd = (0, on_add_js_1.onAddFn)(comment, diagsMap, subsMap);
const printMessages = (0, print_messages_js_1.printMessagesFn)(tap, stream, subsMap, diagsMap);
onAdd(tap);
tap.on('complete', () => {
printMessages(tap);
stream.end();
});
};
exports.serialize = serialize;
//# sourceMappingURL=serialize.js.map