Spaces:
Paused
Paused
| /*! | |
| * assertion-error | |
| * Copyright(c) 2013 Jake Luer <jake@qualiancy.com> | |
| * MIT Licensed | |
| */ | |
| /*! | |
| * Return a function that will copy properties from | |
| * one object to another excluding any originally | |
| * listed. Returned function will create a new `{}`. | |
| * | |
| * @param {String} excluded properties ... | |
| * @return {Function} | |
| */ | |
| function exclude () { | |
| var excludes = [].slice.call(arguments); | |
| function excludeProps (res, obj) { | |
| Object.keys(obj).forEach(function (key) { | |
| if (!~excludes.indexOf(key)) res[key] = obj[key]; | |
| }); | |
| } | |
| return function extendExclude () { | |
| var args = [].slice.call(arguments) | |
| , i = 0 | |
| , res = {}; | |
| for (; i < args.length; i++) { | |
| excludeProps(res, args[i]); | |
| } | |
| return res; | |
| }; | |
| }; | |
| /*! | |
| * Primary Exports | |
| */ | |
| module.exports = AssertionError; | |
| /** | |
| * ### AssertionError | |
| * | |
| * An extension of the JavaScript `Error` constructor for | |
| * assertion and validation scenarios. | |
| * | |
| * @param {String} message | |
| * @param {Object} properties to include (optional) | |
| * @param {callee} start stack function (optional) | |
| */ | |
| function AssertionError (message, _props, ssf) { | |
| var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON') | |
| , props = extend(_props || {}); | |
| // default values | |
| this.message = message || 'Unspecified AssertionError'; | |
| this.showDiff = false; | |
| // copy from properties | |
| for (var key in props) { | |
| this[key] = props[key]; | |
| } | |
| // capture stack trace | |
| ssf = ssf || AssertionError; | |
| if (Error.captureStackTrace) { | |
| Error.captureStackTrace(this, ssf); | |
| } else { | |
| try { | |
| throw new Error(); | |
| } catch(e) { | |
| this.stack = e.stack; | |
| } | |
| } | |
| } | |
| /*! | |
| * Inherit from Error.prototype | |
| */ | |
| AssertionError.prototype = Object.create(Error.prototype); | |
| /*! | |
| * Statically set name | |
| */ | |
| AssertionError.prototype.name = 'AssertionError'; | |
| /*! | |
| * Ensure correct constructor | |
| */ | |
| AssertionError.prototype.constructor = AssertionError; | |
| /** | |
| * Allow errors to be converted to JSON for static transfer. | |
| * | |
| * @param {Boolean} include stack (default: `true`) | |
| * @return {Object} object that can be `JSON.stringify` | |
| */ | |
| AssertionError.prototype.toJSON = function (stack) { | |
| var extend = exclude('constructor', 'toJSON', 'stack') | |
| , props = extend({ name: this.name }, this); | |
| // include stack if exists and not turned off | |
| if (false !== stack && this.stack) { | |
| props.stack = this.stack; | |
| } | |
| return props; | |
| }; | |