// Generated by CoffeeScript 1.12.7 var ParsedError, PrettyError, RenderKid, arrayUtils, defaultStyle, fn, instance, isPlainObject, j, len, merge, nodePaths, prop, ref, slice = [].slice, indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; isPlainObject = require('lodash/isPlainObject'); defaultStyle = require('./defaultStyle'); ParsedError = require('./ParsedError'); nodePaths = require('./nodePaths'); RenderKid = require('renderkid'); merge = require('lodash/merge'); arrayUtils = { pluckByCallback: function(a, cb) { var index, j, len, removed, value; if (a.length < 1) { return a; } removed = 0; for (index = j = 0, len = a.length; j < len; index = ++j) { value = a[index]; if (cb(value, index)) { removed++; continue; } if (removed !== 0) { a[index - removed] = a[index]; } } if (removed > 0) { a.length = a.length - removed; } return a; }, pluckOneItem: function(a, item) { var index, j, len, reached, value; if (a.length < 1) { return a; } reached = false; for (index = j = 0, len = a.length; j < len; index = ++j) { value = a[index]; if (!reached) { if (value === item) { reached = true; continue; } } else { a[index - 1] = a[index]; } } if (reached) { a.length = a.length - 1; } return a; } }; instance = null; module.exports = PrettyError = (function() { var self; self = PrettyError; PrettyError._filters = { 'module.exports': function(item) { if (item.what == null) { return; } item.what = item.what.replace(/\.module\.exports\./g, ' - '); } }; PrettyError._getDefaultStyle = function() { return defaultStyle(); }; PrettyError.start = function() { if (instance == null) { instance = new self; instance.start(); } return instance; }; PrettyError.stop = function() { return instance != null ? instance.stop() : void 0; }; function PrettyError() { this._useColors = true; this._maxItems = 50; this._packagesToSkip = []; this._pathsToSkip = []; this._skipCallbacks = []; this._filterCallbacks = []; this._parsedErrorFilters = []; this._aliases = []; this._renderer = new RenderKid; this._style = self._getDefaultStyle(); this._renderer.style(this._style); } PrettyError.prototype.start = function() { var prepeare; this._oldPrepareStackTrace = Error.prepareStackTrace; prepeare = this._oldPrepareStackTrace || function(exc, frames) { var result; result = exc.toString(); frames = frames.map(function(frame) { return " at " + (frame.toString()); }); return result + "\n" + frames.join("\n"); }; Error.prepareStackTrace = (function(_this) { return function(exc, trace) { var stack; stack = prepeare.apply(null, arguments); return _this.render({ stack: stack, message: exc.toString().replace(/^.*: /, '') }, false); }; })(this); return this; }; PrettyError.prototype.stop = function() { Error.prepareStackTrace = this._oldPrepareStackTrace; return this._oldPrepareStackTrace = null; }; PrettyError.prototype.config = function(c) { var alias, path, ref; if (c.skipPackages != null) { if (c.skipPackages === false) { this.unskipAllPackages(); } else { this.skipPackage.apply(this, c.skipPackages); } } if (c.skipPaths != null) { if (c.skipPaths === false) { this.unskipAllPaths(); } else { this.skipPath.apply(this, c.skipPaths); } } if (c.skip != null) { if (c.skip === false) { this.unskipAll(); } else { this.skip.apply(this, c.skip); } } if (c.maxItems != null) { this.setMaxItems(c.maxItems); } if (c.skipNodeFiles === true) { this.skipNodeFiles(); } else if (c.skipNodeFiles === false) { this.unskipNodeFiles(); } if (c.filters != null) { if (c.filters === false) { this.removeAllFilters(); } else { this.filter.apply(this, c.filters); } } if (c.parsedErrorFilters != null) { if (c.parsedErrorFilters === false) { this.removeAllParsedErrorFilters(); } else { this.filterParsedError.apply(this, c.parsedErrorFilters); } } if (c.aliases != null) { if (isPlainObject(c.aliases)) { ref = c.aliases; for (path in ref) { alias = ref[path]; this.alias(path, alias); } } else if (c.aliases === false) { this.removeAllAliases(); } } return this; }; PrettyError.prototype.withoutColors = function() { this._useColors = false; return this; }; PrettyError.prototype.withColors = function() { this._useColors = true; return this; }; PrettyError.prototype.skipPackage = function() { var j, len, packages, pkg; packages = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = packages.length; j < len; j++) { pkg = packages[j]; this._packagesToSkip.push(String(pkg)); } return this; }; PrettyError.prototype.unskipPackage = function() { var j, len, packages, pkg; packages = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = packages.length; j < len; j++) { pkg = packages[j]; arrayUtils.pluckOneItem(this._packagesToSkip, pkg); } return this; }; PrettyError.prototype.unskipAllPackages = function() { this._packagesToSkip.length = 0; return this; }; PrettyError.prototype.skipPath = function() { var j, len, path, paths; paths = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = paths.length; j < len; j++) { path = paths[j]; this._pathsToSkip.push(path); } return this; }; PrettyError.prototype.unskipPath = function() { var j, len, path, paths; paths = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = paths.length; j < len; j++) { path = paths[j]; arrayUtils.pluckOneItem(this._pathsToSkip, path); } return this; }; PrettyError.prototype.unskipAllPaths = function() { this._pathsToSkip.length = 0; return this; }; PrettyError.prototype.skip = function() { var callbacks, cb, j, len; callbacks = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = callbacks.length; j < len; j++) { cb = callbacks[j]; this._skipCallbacks.push(cb); } return this; }; PrettyError.prototype.unskip = function() { var callbacks, cb, j, len; callbacks = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = callbacks.length; j < len; j++) { cb = callbacks[j]; arrayUtils.pluckOneItem(this._skipCallbacks, cb); } return this; }; PrettyError.prototype.unskipAll = function() { this._skipCallbacks.length = 0; return this; }; PrettyError.prototype.skipNodeFiles = function() { return this.skipPath.apply(this, nodePaths); }; PrettyError.prototype.unskipNodeFiles = function() { return this.unskipPath.apply(this, nodePaths); }; PrettyError.prototype.filter = function() { var callbacks, cb, j, len; callbacks = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = callbacks.length; j < len; j++) { cb = callbacks[j]; this._filterCallbacks.push(cb); } return this; }; PrettyError.prototype.removeFilter = function() { var callbacks, cb, j, len; callbacks = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = callbacks.length; j < len; j++) { cb = callbacks[j]; arrayUtils.pluckOneItem(this._filterCallbacks, cb); } return this; }; PrettyError.prototype.removeAllFilters = function() { this._filterCallbacks.length = 0; return this; }; PrettyError.prototype.filterParsedError = function() { var callbacks, cb, j, len; callbacks = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = callbacks.length; j < len; j++) { cb = callbacks[j]; this._parsedErrorFilters.push(cb); } return this; }; PrettyError.prototype.removeParsedErrorFilter = function() { var callbacks, cb, j, len; callbacks = 1 <= arguments.length ? slice.call(arguments, 0) : []; for (j = 0, len = callbacks.length; j < len; j++) { cb = callbacks[j]; arrayUtils.pluckOneItem(this._parsedErrorFilters, cb); } return this; }; PrettyError.prototype.removeAllParsedErrorFilters = function() { this._parsedErrorFilters.length = 0; return this; }; PrettyError.prototype.setMaxItems = function(maxItems) { if (maxItems == null) { maxItems = 50; } if (maxItems === 0) { maxItems = 50; } this._maxItems = maxItems | 0; return this; }; PrettyError.prototype.alias = function(stringOrRx, alias) { this._aliases.push({ stringOrRx: stringOrRx, alias: alias }); return this; }; PrettyError.prototype.removeAlias = function(stringOrRx) { arrayUtils.pluckByCallback(this._aliases, function(pair) { return pair.stringOrRx === stringOrRx; }); return this; }; PrettyError.prototype.removeAllAliases = function() { this._aliases.length = 0; return this; }; PrettyError.prototype._getStyle = function() { return this._style; }; PrettyError.prototype.appendStyle = function(toAppend) { merge(this._style, toAppend); this._renderer.style(toAppend); return this; }; PrettyError.prototype._getRenderer = function() { return this._renderer; }; PrettyError.prototype.render = function(e, logIt, useColors) { var obj, rendered; if (logIt == null) { logIt = false; } if (useColors == null) { useColors = this._useColors; } obj = this.getObject(e); rendered = this._renderer.render(obj, useColors); if (logIt === true) { console.error(rendered); } return rendered; }; PrettyError.prototype.getObject = function(e) { var count, header, i, item, j, len, obj, ref, traceItems; if (!(e instanceof ParsedError)) { e = new ParsedError(e); } this._applyParsedErrorFiltersOn(e); header = { title: (function() { var ret; ret = {}; if (e.wrapper !== '') { ret.wrapper = "" + e.wrapper; } ret.kind = e.kind; return ret; })(), colon: ':', message: String(e.message).trim() }; traceItems = []; count = -1; ref = e.trace; for (i = j = 0, len = ref.length; j < len; i = ++j) { item = ref[i]; if (item == null) { continue; } if (this._skipOrFilter(item, i) === true) { continue; } count++; if (count > this._maxItems) { break; } if (typeof item === 'string') { traceItems.push({ item: { custom: item } }); continue; } traceItems.push((function() { var markupItem; markupItem = { item: { header: { pointer: (function() { if (item.file == null) { return ''; } return { file: item.file, colon: ':', line: item.line }; })() }, footer: (function() { var foooter; foooter = { addr: item.shortenedAddr }; if (item.extra != null) { foooter.extra = item.extra; } return foooter; })() } }; if (typeof item.what === 'string' && item.what.trim().length > 0) { markupItem.item.header.what = item.what; } return markupItem; })()); } obj = { 'pretty-error': { header: header } }; if (traceItems.length > 0) { obj['pretty-error'].trace = traceItems; } return obj; }; PrettyError.prototype._skipOrFilter = function(item, itemNumber) { var cb, j, k, l, len, len1, len2, len3, m, modName, pair, ref, ref1, ref2, ref3, ref4, ref5; if (typeof item === 'object') { if (ref = item.modName, indexOf.call(this._packagesToSkip, ref) >= 0) { return true; } if (ref1 = item.path, indexOf.call(this._pathsToSkip, ref1) >= 0) { return true; } ref2 = item.packages; for (j = 0, len = ref2.length; j < len; j++) { modName = ref2[j]; if (indexOf.call(this._packagesToSkip, modName) >= 0) { return true; } } if (typeof item.shortenedAddr === 'string') { ref3 = this._aliases; for (k = 0, len1 = ref3.length; k < len1; k++) { pair = ref3[k]; item.shortenedAddr = item.shortenedAddr.replace(pair.stringOrRx, pair.alias); } } } ref4 = this._skipCallbacks; for (l = 0, len2 = ref4.length; l < len2; l++) { cb = ref4[l]; if (cb(item, itemNumber) === true) { return true; } } ref5 = this._filterCallbacks; for (m = 0, len3 = ref5.length; m < len3; m++) { cb = ref5[m]; cb(item, itemNumber); } return false; }; PrettyError.prototype._applyParsedErrorFiltersOn = function(error) { var cb, j, len, ref; ref = this._parsedErrorFilters; for (j = 0, len = ref.length; j < len; j++) { cb = ref[j]; cb(error); } }; return PrettyError; })(); ref = ['renderer', 'style']; fn = function() { var methodName; methodName = '_get' + prop[0].toUpperCase() + prop.substr(1, prop.length); return PrettyError.prototype.__defineGetter__(prop, function() { return this[methodName](); }); }; for (j = 0, len = ref.length; j < len; j++) { prop = ref[j]; fn(); }