UNPKG

mist

Version:
117 lines (104 loc) 3.63 kB
var betterStack, chalk, col, compileExpected, compileFileMarker, compileSourceMarker, fs, line, paragraph, path, slice = [].slice; chalk = require('chalk'); fs = require('fs'); path = require('path'); col = ["\x1b[0G", "\x1b[3G", "\x1b[13G", "\x1b[35G"]; paragraph = function() { var lines; lines = 1 <= arguments.length ? slice.call(arguments, 0) : []; return lines.filter(function(a) { return a != null; }).join('\n'); }; line = function() { var args, l; args = 1 <= arguments.length ? slice.call(arguments, 0) : []; l = args.filter(function(a) { return a != null; }).join(''); if (l && l.length) { return l; } }; compileExpected = function(expected) { var e, first, l, results; first = true; results = (function() { var j, len, ref, results1; ref = expected.filter(function(i) { return i.type !== 'other' || (i.description != null); }); results1 = []; for (j = 0, len = ref.length; j < len; j++) { e = ref[j]; l = [first ? (first = false, col[1] + "expected" + col[2]) : col[1] + "or" + col[2], chalk.cyan.bold(e.description), col[3], e.type ? " " + (chalk.dim.grey(e.type)) : void 0, e.value ? " " + (chalk.dim.grey(e.value)) : void 0].filter(function(a) { return a != null; }).join(''); if (l && l.length) { results1.push(l); } else { results1.push(void 0); } } return results1; })(); return results.join('\n'); }; compileFileMarker = function(filename, line, column) { try { return compileSourceMarker(fs.readFileSync(filename).toString(), line, column); } catch (_error) {} }; compileSourceMarker = function(src, line, column) { var lines, result; lines = src.split(/\r?\n/g); line = lines[line - 1]; if (!(line && line.length)) { return; } result = ['\n', line]; if (column) { result.push("\x1b[1D\x1b[" + column + "C" + (chalk.red.bold('^'))); } return result.join("\n" + col[1]); }; betterStack = function(stack) { var found, lines; lines = stack.split(/\r?\n/g); lines = lines.slice(1); lines = lines.map(function(line) { var m; return m = line.match(/^\s*at\s+(?:(?:([^\s(]+(?:\s+[^\s(]+)*)\s*\(([^:]+)(:\d+:\d+)?\))|(?:([^:]+)(:\d+:\d+)))$/); }); found = false; lines = lines.filter(function(line) { var abs; if (abs = path.isAbsolute(line[2] || line[4])) { found = true; } return abs || !found; }); lines = lines.map(function(line) { if (line[1]) { return col[1] + "in" + col[2] + line[1] + " (" + line[2] + (line[3] || '') + ")"; } else { return col[1] + "in" + col[2] + line[4] + (line[5] || ''); } }); return lines.join('\n'); }; module.exports = function(e) { if (e.constructor === String) { e = { message: e }; } if ((e.line != null) && (e.map != null)) { e.sourceLine = e.line; e.line = e.map[e.line - 1]; } console.error(paragraph(null, line(null, chalk.red.bold('ERROR: '), e.message || 'unexpected error'), line(null, e.filename || e.line ? col[1] + "at" + col[2] : void 0, e.filename || e.line ? e.filename || '[unknown]' : void 0, e.line ? ":" + e.line : void 0, e.line && e.column ? ":" + e.column : void 0), line(null, e.expected ? compileExpected(e.expected) : void 0), line(null, e.source && e.line ? compileSourceMarker(e.source, (e.sourced ? e.sourceLine : e.line), e.column) : e.filename && e.line ? compileFileMarker(e.filename, e.line, e.column) : void 0), line(null), e.stack ? chalk.dim.grey(betterStack(e.stack)) : void 0)); return process.exit(10); }; //# sourceMappingURL=pretty-error.js.map