"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("../util/helpers"); var highlight_1 = require("../highlight/highlight"); var path_1 = require("path"); var logger_1 = require("./logger"); var fs_1 = require("fs"); var chalk = require("chalk"); function printDiagnostics(context, diagnosticsType, diagnostics, consoleLogDiagnostics, writeHtmlDiagnostics) { if (diagnostics && diagnostics.length) { if (consoleLogDiagnostics) { diagnostics.forEach(consoleLogDiagnostic); } if (writeHtmlDiagnostics) { var content = diagnostics.map(generateDiagnosticHtml); var fileName = getDiagnosticsFileName(context.buildDir, diagnosticsType); fs_1.writeFileSync(fileName, content.join('\n'), { encoding: 'utf8' }); } } } exports.printDiagnostics = printDiagnostics; function consoleLogDiagnostic(d) { if (d.level === 'warn') { logger_1.Logger.warn(d.header); } else { logger_1.Logger.error(d.header); } logger_1.Logger.wordWrap([d.messageText]).forEach(function (m) { console.log(m); }); console.log(''); if (d.lines && d.lines.length) { var lines = prepareLines(d.lines, 'text'); lines.forEach(function (l) { if (!isMeaningfulLine(l.text)) { return; } var msg = "L" + l.lineNumber + ": "; while (msg.length < logger_1.Logger.INDENT.length) { msg = ' ' + msg; } var text = l.text; if (l.errorCharStart > -1) { text = consoleHighlightError(text, l.errorCharStart, l.errorLength); } msg = chalk.dim(msg); if (d.language === 'javascript') { msg += jsConsoleSyntaxHighlight(text); } else if (d.language === 'scss') { msg += cssConsoleSyntaxHighlight(text, l.errorCharStart); } else { msg += text; } console.log(msg); }); console.log(''); } } function consoleHighlightError(errorLine, errorCharStart, errorLength) { var rightSideChars = errorLine.length - errorCharStart + errorLength - 1; while (errorLine.length + logger_1.Logger.INDENT.length > logger_1.Logger.MAX_LEN) { if (errorCharStart > (errorLine.length - errorCharStart + errorLength) && errorCharStart > 5) { // larger on left side errorLine = errorLine.substr(1); errorCharStart--; } else if (rightSideChars > 1) { // larger on right side errorLine = errorLine.substr(0, errorLine.length - 1); rightSideChars--; } else { break; } } var lineChars = []; var lineLength = Math.max(errorLine.length, errorCharStart + errorLength); for (var i = 0; i < lineLength; i++) { var chr = errorLine.charAt(i); if (i >= errorCharStart && i < errorCharStart + errorLength) { chr = chalk.bgRed(chr === '' ? ' ' : chr); } lineChars.push(chr); } return lineChars.join(''); } var diagnosticsHtmlCache = {}; function clearDiagnosticsCache() { diagnosticsHtmlCache = {}; } exports.clearDiagnosticsCache = clearDiagnosticsCache; function clearDiagnostics(context, type) { try { delete diagnosticsHtmlCache[type]; fs_1.unlinkSync(getDiagnosticsFileName(context.buildDir, type)); } catch (e) { } } exports.clearDiagnostics = clearDiagnostics; function hasDiagnostics(buildDir) { loadBuildDiagnosticsHtml(buildDir); var keys = Object.keys(diagnosticsHtmlCache); for (var i = 0; i < keys.length; i++) { if (typeof diagnosticsHtmlCache[keys[i]] === 'string') { return true; } } return false; } exports.hasDiagnostics = hasDiagnostics; function loadBuildDiagnosticsHtml(buildDir) { try { if (diagnosticsHtmlCache[exports.DiagnosticsType.TypeScript] === undefined) { diagnosticsHtmlCache[exports.DiagnosticsType.TypeScript] = fs_1.readFileSync(getDiagnosticsFileName(buildDir, exports.DiagnosticsType.TypeScript), 'utf8'); } } catch (e) { diagnosticsHtmlCache[exports.DiagnosticsType.TypeScript] = false; } try { if (diagnosticsHtmlCache[exports.DiagnosticsType.Sass] === undefined) { diagnosticsHtmlCache[exports.DiagnosticsType.Sass] = fs_1.readFileSync(getDiagnosticsFileName(buildDir, exports.DiagnosticsType.Sass), 'utf8'); } } catch (e) { diagnosticsHtmlCache[exports.DiagnosticsType.Sass] = false; } } function injectDiagnosticsHtml(buildDir, content) { if (!hasDiagnostics(buildDir)) { return content; } var contentStr = content.toString(); var c = []; c.push("
| "); c.push(" | " + highlight_1.highlightError(l.html, l.errorCharStart, l.errorLength) + " | "); c.push("