UNPKG

@wdio/json-reporter

Version:
96 lines (94 loc) 4.02 kB
const __importMetaUrl = require('url').pathToFileURL(__filename).href; "use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/mergeResults.ts var mergeResults_exports = {}; __export(mergeResults_exports, { default: () => mergeResults }); module.exports = __toCommonJS(mergeResults_exports); var import_promises = __toESM(require("node:fs/promises"), 1); var import_node_path = __toESM(require("node:path"), 1); var import_safe_regex2 = __toESM(require("safe-regex2"), 1); var DEFAULT_FILENAME = "wdio-merged.json"; async function mergeResults(dir = process.argv[2], filePattern = process.argv[3], customFileName = process.argv[4]) { const doesDirExist = import_promises.default.access(dir).then(() => true, () => false); if (!doesDirExist) { throw new Error(`Directory "${dir}" does not exist.`); } const rawData = await getDataFromFiles(dir, filePattern); const mergedResults = mergeData(rawData); if (customFileName) { const fileName = customFileName || DEFAULT_FILENAME; const filePath = import_node_path.default.join(dir, fileName); await import_promises.default.writeFile(filePath, JSON.stringify(mergedResults)); } return mergedResults; } async function getDataFromFiles(dir, filePattern) { let safePattern; if (filePattern instanceof RegExp) { safePattern = (0, import_safe_regex2.default)(filePattern) ? filePattern : /\.json$/; } else if (typeof filePattern === "string") { try { safePattern = (0, import_safe_regex2.default)(filePattern) ? new RegExp(filePattern) : /\.json$/; } catch { safePattern = /\.json$/; } } else { safePattern = /\.json$/; } const fileNames = (await import_promises.default.readdir(dir)).filter((file) => file.match(safePattern)); const data = []; await Promise.all(fileNames.map(async (fileName) => { data.push(JSON.parse((await import_promises.default.readFile(`${dir}/${fileName}`)).toString())); })); return data; } function mergeData(rawData) { if (rawData.length === 0) { return {}; } const mergedResults = { ...rawData[0], capabilities: [rawData[0].capabilities] }; for (const data of rawData.slice(1)) { mergedResults.suites.push(...data.suites); mergedResults.specs.push(...data.specs); mergedResults.state.passed += data.state.passed; mergedResults.state.failed += data.state.failed; mergedResults.state.skipped += data.state.skipped; mergedResults.capabilities.push(data.capabilities); } mergedResults.suites.forEach((suite) => { mergedResults.end = suite.end && mergedResults.end && suite.end > mergedResults.end ? suite.end : mergedResults.end; }); return mergedResults; }