| /** @license MIT License (c) copyright 2010-2014 original author or authors */ |
| /** @author Brian Cavalier */ |
| /** @author John Hann */ |
| |
| (function(define) { 'use strict'; |
| define(function() { |
| |
| return { |
| formatError: formatError, |
| formatObject: formatObject, |
| tryStringify: tryStringify |
| }; |
| |
| /** |
| * Format an error into a string. If e is an Error and has a stack property, |
| * it's returned. Otherwise, e is formatted using formatObject, with a |
| * warning added about e not being a proper Error. |
| * @param {*} e |
| * @returns {String} formatted string, suitable for output to developers |
| */ |
| function formatError(e) { |
| var s = typeof e === 'object' && e !== null && (e.stack || e.message) ? e.stack || e.message : formatObject(e); |
| return e instanceof Error ? s : s + ' (WARNING: non-Error used)'; |
| } |
| |
| /** |
| * Format an object, detecting "plain" objects and running them through |
| * JSON.stringify if possible. |
| * @param {Object} o |
| * @returns {string} |
| */ |
| function formatObject(o) { |
| var s = String(o); |
| if(s === '[object Object]' && typeof JSON !== 'undefined') { |
| s = tryStringify(o, s); |
| } |
| return s; |
| } |
| |
| /** |
| * Try to return the result of JSON.stringify(x). If that fails, return |
| * defaultValue |
| * @param {*} x |
| * @param {*} defaultValue |
| * @returns {String|*} JSON.stringify(x) or defaultValue |
| */ |
| function tryStringify(x, defaultValue) { |
| try { |
| return JSON.stringify(x); |
| } catch(e) { |
| return defaultValue; |
| } |
| } |
| |
| }); |
| }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); |