UNPKG

maddis-tsc-junit

Version:

JUnit report generator for typescript

74 lines (73 loc) 2.51 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createXML = exports.parseStdin = void 0; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const tsc_output_parser_1 = require("@aivenio/tsc-output-parser"); const junit_xml_1 = require("junit-xml"); const config_1 = require("./config"); /** * Get junit-xml from stdin */ function parseStdin(stdin, config) { try { const parsed = (0, tsc_output_parser_1.parse)(stdin); const testCases = []; for (const item of parsed) { const filename = item.value.path.value; const col = item.value.cursor.value.col; const line = item.value.cursor.value.col; const errorType = item.value.tsError.value.errorString; const errorMessage = item.value.message.value.trim(); testCases.push({ name: filename, classname: `${filename}:${col}:${line}`, failures: [ { type: errorType, message: errorMessage, }, ], }); } const timestamp = new Date(); let suites; if (config && config.references.length) { suites = config.references.map(({ path }) => ({ name: path, timestamp, testCases: testCases.filter((t) => t.name.startsWith(path)), })); } else { suites = [ { name: 'Typecheck', timestamp, testCases, }, ]; } return { suites, }; } catch (e) { throw new Error('Cannot parse input. Are you sure this is `tsc` output?'); } } exports.parseStdin = parseStdin; /** * Create junit xml from stdin and write it */ async function createXML(outputFileName, stdin, configFile) { const outputPath = path_1.default.resolve(process.cwd(), outputFileName); const config = await (0, config_1.loadConfig)(configFile); const report = parseStdin(stdin, config); const xml = (0, junit_xml_1.getJunitXml)(report); await fs_1.default.promises.writeFile(outputPath, xml, 'utf8'); } exports.createXML = createXML;