@wdio/json-reporter
Version:
A WebdriverIO plugin to report results in json format.
96 lines (94 loc) • 4.02 kB
JavaScript
const __importMetaUrl = require('url').pathToFileURL(__filename).href;
;
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;
}