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