12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 'use strict';
- module.exports = makeError;
- function makeError(code, message, options) {
- var line = options.line;
- var column = options.column;
- var filename = options.filename;
- var src = options.src;
- var fullMessage;
- var location = line + (column ? ':' + column : '');
- if (src && line >= 1 && line <= src.split('\n').length) {
- var lines = src.split('\n');
- var start = Math.max(line - 3, 0);
- var end = Math.min(lines.length, line + 3);
- // Error context
- var context = lines
- .slice(start, end)
- .map(function(text, i) {
- var curr = i + start + 1;
- var preamble = (curr == line ? ' > ' : ' ') + curr + '| ';
- var out = preamble + text;
- if (curr === line && column > 0) {
- out += '\n';
- out += Array(preamble.length + column).join('-') + '^';
- }
- return out;
- })
- .join('\n');
- fullMessage =
- (filename || 'Pug') + ':' + location + '\n' + context + '\n\n' + message;
- } else {
- fullMessage = (filename || 'Pug') + ':' + location + '\n\n' + message;
- }
- var err = new Error(fullMessage);
- err.code = 'PUG:' + code;
- err.msg = message;
- err.line = line;
- err.column = column;
- err.filename = filename;
- err.src = src;
- err.toJSON = function() {
- return {
- code: this.code,
- msg: this.msg,
- line: this.line,
- column: this.column,
- filename: this.filename,
- };
- };
- return err;
- }
|