| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 | // Generated by CoffeeScript 1.8.0var 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();}
 |