"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createReporter = createReporter; const event_stream_1 = __importDefault(require("event-stream")); const fancy_log_1 = __importDefault(require("fancy-log")); const ansi_colors_1 = __importDefault(require("ansi-colors")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); class ErrorLog { id; constructor(id) { this.id = id; } allErrors = []; startTime = null; count = 0; onStart() { if (this.count++ > 0) { return; } this.startTime = new Date().getTime(); (0, fancy_log_1.default)(`Starting ${ansi_colors_1.default.green('compilation')}${this.id ? ansi_colors_1.default.blue(` ${this.id}`) : ''}...`); } onEnd() { if (--this.count > 0) { return; } this.log(); } log() { const errors = this.allErrors.flat(); const seen = new Set(); errors.map(err => { if (!seen.has(err)) { seen.add(err); (0, fancy_log_1.default)(`${ansi_colors_1.default.red('Error')}: ${err}`); } }); (0, fancy_log_1.default)(`Finished ${ansi_colors_1.default.green('compilation')}${this.id ? ansi_colors_1.default.blue(` ${this.id}`) : ''} with ${errors.length} errors after ${ansi_colors_1.default.magenta((new Date().getTime() - this.startTime) + ' ms')}`); const regex = /^([^(]+)\((\d+),(\d+)\): (.*)$/s; const messages = errors .map(err => regex.exec(err)) .filter(match => !!match) .map(x => x) .map(([, path, line, column, message]) => ({ path, line: parseInt(line), column: parseInt(column), message })); try { const logFileName = 'log' + (this.id ? `_${this.id}` : ''); fs_1.default.writeFileSync(path_1.default.join(buildLogFolder, logFileName), JSON.stringify(messages)); } catch (err) { //noop } } } const errorLogsById = new Map(); function getErrorLog(id = '') { let errorLog = errorLogsById.get(id); if (!errorLog) { errorLog = new ErrorLog(id); errorLogsById.set(id, errorLog); } return errorLog; } const buildLogFolder = path_1.default.join(path_1.default.dirname(path_1.default.dirname(__dirname)), '.build'); try { fs_1.default.mkdirSync(buildLogFolder); } catch (err) { // ignore } function createReporter(id) { const errorLog = getErrorLog(id); const errors = []; errorLog.allErrors.push(errors); const result = (err) => errors.push(err); result.hasErrors = () => errors.length > 0; result.end = (emitError) => { errors.length = 0; errorLog.onStart(); return event_stream_1.default.through(undefined, function () { errorLog.onEnd(); if (emitError && errors.length > 0) { if (!errors.__logged__) { errorLog.log(); } errors.__logged__ = true; const err = new Error(`Found ${errors.length} errors`); err.__reporter__ = true; this.emit('error', err); } else { this.emit('end'); } }); }; return result; } //# sourceMappingURL=reporter.js.map