UNPKG

pretty-print-error

Version:

Formats errors as nice strings with colors

189 lines (170 loc) 5.49 kB
(function(global) { function factory() { var modules = { /* --- src/index.ts --- */ "src/index.ts": (function (exports, _kame_require_, module, __filename, __dirname, _kame_dynamic_import_) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatError = formatError; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } var isNode = false; try { isNode = process.argv0 != null; } catch (err) { // ignored } var fakeKleur = { red: function red(value) { return value; }, gray: function gray(value) { return value; }, magenta: function magenta(value) { return value; } }; var autoDetectedKleur = fakeKleur; if (isNode) { try { // I use eval("require") here instead of just require, // so that webpack et. al don't try to bundle kleur into // browser stuff, cause it's not very useful there. autoDetectedKleur = eval("require")("kleur"); } catch (err) { // ignored } } var util = {}; if (isNode) { // I use eval("require") here instead of just require, // so that webpack et. al don't try to bundle util into // browser stuff, since it won't be used even if it's // bundled, and because most util shims for browsers // are huge. try { util = eval("require")("util"); } catch (err) { // ignored } } /** * Formats an Error into a string suitable for printing. * * @param err The Error object to format. If the value you pass in isn't error-like, it'll get formatted via `String()`. * @param options Options that affect the format of the returned string. * @returns A formatted string containing information about the error. */ function formatError(err) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$color = _ref.color, color = _ref$color === void 0 ? true : _ref$color, _ref$lineFilter = _ref.lineFilter, lineFilter = _ref$lineFilter === void 0 ? function (line) { return !/\(node:/.test(line); } : _ref$lineFilter; var kleur = color ? autoDetectedKleur : fakeKleur; var prettyErr = String(err); if (_typeof(err) === "object" && err != null && // @ts-ignore typeof err.name === "string" && // @ts-ignore typeof err.message === "string" && // @ts-ignore typeof err.stack === "string") { var error = err; prettyErr = kleur.red(error.name) + ": " + error.message.replace(new RegExp("^".concat(error.name, "[: ]*")), "") + "\n" + (error.stack || "").split("\n").map(function (line) { return line.trim(); }).filter(lineFilter).map(function (line) { if (line.startsWith(error.name + ": " + error.message)) return null; if (line.startsWith("at")) { return " " + kleur.gray(line); } return line; }).filter(Boolean).join("\n"); } if (_typeof(err) === "object" && err != null) { var propNames = Object.getOwnPropertyNames(err).filter(function (name) { return name !== "stack" && name !== "message"; }); if (propNames.length > 0) { var props = {}; propNames.forEach(function (name) { props[name] = err[name]; }); var propertiesString; if (typeof util.inspect === "function") { propertiesString = util.inspect(props, { depth: Infinity, colors: color }); } else { try { propertiesString = JSON.stringify(props); } catch (err) { propertiesString = ["{", " the properties object couldn't be converted to JSON :(", "", " the error that happened while stringifying it was:", formatError(err).split("\n").map(function (line) { return " " + line; }).join("\n"), "}"].join("\n"); } } prettyErr += kleur.magenta("\nThe above error also had these properties on it:\n") + propertiesString; } } return prettyErr; } }) /* --- end of modules --- */}; var __kame__ = { basedir: typeof __dirname === 'string' ? __dirname : "", cache: {}, runModule: function runModule(name, isMain) { var exports = {}; var module = { id: name, exports: exports, }; __kame__.cache[name] = module; var _kame_require_ = function require(id) { if (__kame__.cache[id]) { return __kame__.cache[id].exports; } else { __kame__.runModule(id, false); return __kame__.cache[id].exports; } }; _kame_require_.cache = __kame__.cache; if (isMain) { _kame_require_.main = module; } var __filename = __kame__.basedir + "/" + name; var __dirname = __kame__.basedir + "/" + name.split("/").slice(0, -1).join("/"); __kame__.modules[name](exports, _kame_require_, module, __filename, __dirname ); return module.exports; }, modules: modules, }; return __kame__.runModule("src/index.ts", true); } if (typeof exports === 'object' && typeof module !== 'undefined') { module.exports = factory(); } else if (typeof define === 'function' && define.amd) { define([], factory); } else { global["PrettyPrintError"] = factory(); } })( typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : typeof this === "object" ? this : new Function("return this")() );