approvals
Version:
Approval Tests Library - Capturing Human Intelligence
68 lines (67 loc) • 3.04 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReporterFactory = void 0;
const DiffReporterAggregate_1 = __importDefault(require("./DiffReporterAggregate"));
const fs_1 = require("fs");
class ReporterFactory {
static loadReporter(name) {
if (Array.isArray(name)) {
const reporters = ReporterFactory.loadAllReporters(name);
return new DiffReporterAggregate_1.default(reporters);
}
name = name.toLowerCase();
try {
const ReporterCtor = require(`./Reporters/${name}Reporter`);
if (!ReporterCtor.default) {
return new ReporterCtor();
}
return new ReporterCtor.default();
}
catch (e) {
const allFiles = (0, fs_1.readdirSync)(__dirname);
const availableReporters = allFiles
.map((item) => item.replace("Reporter.js", ""))
.join(", ");
throw new Error(`Error loading reporter or reporter not found [${name}]. Try one of the following [${availableReporters}]. Original Error: ${e}`);
}
}
static throwUnknownReporterError(reporter) {
throw new Error(`Unknown reporter: typeof= [${typeof reporter}]. Reporters are either a string like "gitdiff" or an object that conforms to the custom reporter interface.`);
}
static assertValidReporter(reporter) {
if (typeof reporter.name !== "string") {
console.error("invalid reporter", reporter);
throw new Error("A valid reporter should have a 'name' property. EX: { name: \"my-custom-reporter\" }");
}
if (typeof reporter.canReportOn !== "function") {
console.error("invalid reporter", reporter);
throw new Error("A valid reporter should have a '{ canReportOn: function(fileName) { return true; // Example } ' function");
}
if (typeof reporter.report !== "function") {
console.error("invalid reporter", reporter);
throw new Error("A valid reporter should have a ' { report: function (approvedFilePath, receivedFilePath) {...} }' function");
}
return true;
}
static loadAllReporters(reporters) {
const reporterInstances = [];
reporters.forEach((reporter) => {
if (typeof reporter === "object") {
ReporterFactory.assertValidReporter(reporter);
reporterInstances.push(reporter);
}
else if (typeof reporter === "string") {
const reporterInstance = ReporterFactory.loadReporter(reporter);
reporterInstances.push(reporterInstance);
}
else {
ReporterFactory.throwUnknownReporterError(reporter);
}
});
return reporterInstances;
}
}
exports.ReporterFactory = ReporterFactory;