123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- // Generated by CoffeeScript 1.8.0
- var ParsedError, prop, sysPath, _fn, _i, _len, _ref;
- sysPath = require('path');
- module.exports = ParsedError = (function() {
- function ParsedError(error) {
- this.error = error;
- this._parse();
- }
- ParsedError.prototype._parse = function() {
- var m;
- this._trace = [];
- this._kind = 'Error';
- this._wrapper = '';
- if (this.error.wrapper != null) {
- this._wrapper = String(this.error.wrapper);
- }
- if (typeof this.error !== 'object') {
- this._message = String(this.error);
- } else {
- this._stack = this.error.stack;
- if (this.error.kind != null) {
- this._kind = String(this.error.kind);
- } else if (typeof this._stack === 'string') {
- if (m = this._stack.match(/^([a-zA-Z0-9\_\$]+):\ /)) {
- this._kind = m[1];
- }
- }
- if (typeof this._stack === 'string') {
- this._parseStack();
- } else {
- this._message = (this.error.message != null) && String(this.error.message) || '';
- }
- }
- };
- ParsedError.prototype._parseStack = function() {
- var line, message, messageLines, reachedTrace, _i, _len, _ref;
- messageLines = [];
- reachedTrace = false;
- _ref = this._stack.split('\n');
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- line = _ref[_i];
- if (line.trim() === '') {
- continue;
- }
- if (reachedTrace) {
- this._trace.push(this._parseTraceItem(line));
- } else {
- if (line.match(/^\s*at\s.+/)) {
- reachedTrace = true;
- this._trace.push(this._parseTraceItem(line));
- } else {
- messageLines.push(line);
- }
- }
- }
- message = messageLines.join('\n');
- if (message.substr(0, this._kind.length) === this._kind) {
- message = message.substr(this._kind.length, message.length).replace(/^\:\s+/, '');
- }
- this._message = message;
- };
- ParsedError.prototype._parseTraceItem = function(text) {
- var addr, col, d, dir, file, jsCol, jsLine, line, m, original, packageName, packages, path, r, remaining, shortenedAddr, shortenedPath, what;
- text = text.trim();
- if (text === '') {
- return;
- }
- if (!text.match(/^at\ /)) {
- return text;
- }
- text = text.replace(/^at /, '');
- if (text === 'Error (<anonymous>)' || text === 'Error (<anonymous>:null:null)') {
- return;
- }
- original = text;
- what = null;
- addr = null;
- path = null;
- dir = null;
- file = null;
- line = null;
- col = null;
- jsLine = null;
- jsCol = null;
- shortenedPath = null;
- shortenedAddr = null;
- packageName = '[current]';
- if (m = text.match(/\(([^\)]+)\)$/)) {
- addr = m[1].trim();
- }
- if (addr != null) {
- what = text.substr(0, text.length - addr.length - 2);
- what = what.trim();
- }
- if (addr == null) {
- addr = text.trim();
- }
- addr = this._fixPath(addr);
- remaining = addr;
- if (m = remaining.match(/\,\ <js>:(\d+):(\d+)$/)) {
- jsLine = m[1];
- jsCol = m[2];
- remaining = remaining.substr(0, remaining.length - m[0].length);
- }
- if (m = remaining.match(/:(\d+):(\d+)$/)) {
- line = m[1];
- col = m[2];
- remaining = remaining.substr(0, remaining.length - m[0].length);
- path = remaining;
- }
- if (path != null) {
- file = sysPath.basename(path);
- dir = sysPath.dirname(path);
- if (dir === '.') {
- dir = '';
- }
- path = this._fixPath(path);
- file = this._fixPath(file);
- dir = this._fixPath(dir);
- }
- if (dir != null) {
- d = dir.replace(/[\\]{1,2}/g, '/');
- if (m = d.match(/node_modules\/([^\/]+)(?!.*node_modules.*)/)) {
- packageName = m[1];
- }
- }
- if (jsLine == null) {
- jsLine = line;
- jsCol = col;
- }
- if (path != null) {
- r = this._rectifyPath(path);
- shortenedPath = r.path;
- shortenedAddr = shortenedPath + addr.substr(path.length, addr.length);
- packages = r.packages;
- }
- return {
- original: original,
- what: what,
- addr: addr,
- path: path,
- dir: dir,
- file: file,
- line: parseInt(line),
- col: parseInt(col),
- jsLine: parseInt(jsLine),
- jsCol: parseInt(jsCol),
- packageName: packageName,
- shortenedPath: shortenedPath,
- shortenedAddr: shortenedAddr,
- packages: packages || []
- };
- };
- ParsedError.prototype._getMessage = function() {
- return this._message;
- };
- ParsedError.prototype._getKind = function() {
- return this._kind;
- };
- ParsedError.prototype._getWrapper = function() {
- return this._wrapper;
- };
- ParsedError.prototype._getStack = function() {
- return this._stack;
- };
- ParsedError.prototype._getArguments = function() {
- return this.error["arguments"];
- };
- ParsedError.prototype._getType = function() {
- return this.error.type;
- };
- ParsedError.prototype._getTrace = function() {
- return this._trace;
- };
- ParsedError.prototype._fixPath = function(path) {
- return path.replace(/[\\]{1,2}/g, '/');
- };
- ParsedError.prototype._rectifyPath = function(path, nameForCurrentPackage) {
- var m, packages, parts, remaining, rest;
- path = String(path);
- remaining = path;
- if (!(m = path.match(/^(.+?)\/node_modules\/(.+)$/))) {
- return {
- path: path,
- packages: []
- };
- }
- parts = [];
- packages = [];
- if (typeof nameForCurrentPackage === 'string') {
- parts.push("[" + nameForCurrentPackage + "]");
- packages.push("[" + nameForCurrentPackage + "]");
- } else {
- parts.push("[" + (m[1].match(/([^\/]+)$/)[1]) + "]");
- packages.push(m[1].match(/([^\/]+)$/)[1]);
- }
- rest = m[2];
- while (m = rest.match(/([^\/]+)\/node_modules\/(.+)$/)) {
- parts.push("[" + m[1] + "]");
- packages.push(m[1]);
- rest = m[2];
- }
- if (m = rest.match(/([^\/]+)\/(.+)$/)) {
- parts.push("[" + m[1] + "]");
- packages.push(m[1]);
- rest = m[2];
- }
- parts.push(rest);
- return {
- path: parts.join("/"),
- packages: packages
- };
- };
- return ParsedError;
- })();
- _ref = ['message', 'kind', 'arguments', 'type', 'stack', 'trace', 'wrapper'];
- _fn = function() {
- var methodName;
- methodName = '_get' + prop[0].toUpperCase() + prop.substr(1, prop.length);
- return Object.defineProperty(ParsedError.prototype, prop, {
- get: function() {
- return this[methodName]();
- }
- });
- };
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- prop = _ref[_i];
- _fn();
- }
|