maddis-tsc-junit
Version:
JUnit report generator for typescript
74 lines (73 loc) • 2.51 kB
JavaScript
;
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;