mist
Version:
Mist build system
117 lines (104 loc) • 3.63 kB
JavaScript
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