@badeball/cypress-cucumber-preprocessor
Version:
[](https://github.com/badeball/cypress-cucumber-preprocessor/actions/workflows/build.yml) [ • 2.83 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeMessages = mergeMessages;
exports.mergeMessagesFiles = mergeMessagesFiles;
exports.mergeMessagesArgs = mergeMessagesArgs;
const promises_1 = __importDefault(require("node:fs/promises"));
const assertions_1 = require("./assertions");
const error_1 = require("./error");
const messages_1 = require("./messages");
const type_guards_1 = require("./type-guards");
function identity(value) {
return value;
}
function sortByTimestamp(a, b) {
return ((0, messages_1.durationToNanoseconds)(a.timestamp) - (0, messages_1.durationToNanoseconds)(b.timestamp));
}
function mergeMessages(messagesCols) {
const messages = messagesCols.flat();
const sourcesSeen = new Set();
const sources = messages.map((message) => message.source).filter(type_guards_1.notNull);
for (const { uri } of sources) {
if (sourcesSeen.has(uri)) {
throw new error_1.CypressCucumberError(`Found duplicate sources in collections: ${uri} (this usually means you're trying to merge unrelated reports)"`);
}
else {
sourcesSeen.add(uri);
}
}
const meta = (0, assertions_1.ensure)(messages.map((message) => message.meta).find(type_guards_1.notNull), "Expected to find a meta envelope");
const testRunStarted = (0, assertions_1.ensure)(messages
.map((message) => message.testRunStarted)
.filter(type_guards_1.notNull)
.sort(sortByTimestamp)
.find(identity), "Expected to find a testRunStarted envelope");
const testRunFinished = (0, assertions_1.ensure)(messages
.map((message) => message.testRunFinished)
.filter(type_guards_1.notNull)
.sort(sortByTimestamp)
.findLast(identity), "Expected to find a testRunFinished envelope");
const isPassThroughMessage = (message) => message.meta == null &&
message.testRunStarted == null &&
message.testRunFinished == null;
return (0, messages_1.orderMessages)([
{ meta },
{ testRunStarted },
...messages.filter(isPassThroughMessage),
{ testRunFinished },
]);
}
async function mergeMessagesFiles(files) {
const contents = await Promise.all(files.map((file) => promises_1.default.readFile(file)));
const messages = mergeMessages(contents.map((content) => content
.toString()
.trim()
.split("\n")
.map((line) => JSON.parse(line))));
return messages.map((message) => JSON.stringify(message)).join("\n");
}
async function mergeMessagesArgs(options) {
const [, , ...files] = options.argv;
options.stdout.write(await mergeMessagesFiles(files));
}