UNPKG

approvals

Version:

Approval Tests Library - Capturing Human Intelligence

68 lines (67 loc) 3.04 kB
"use strict"; 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;