57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
|
/** @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.stack : 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(); }));
|