diff options
author | Joel Kronqvist <work.joelkronqvist@pm.me> | 2022-03-11 20:46:06 +0200 |
---|---|---|
committer | Joel Kronqvist <work.joelkronqvist@pm.me> | 2022-03-11 20:46:06 +0200 |
commit | 080c5819d87b933816d724a83f3bf4f1686770a7 (patch) | |
tree | 4a2ccc68b27edf7d4cbc586c932cc7542b655e19 /node_modules/makeerror/lib/makeerror.js | |
parent | 5ac7049a9d30733165cc212dee308163c2a14644 (diff) | |
parent | d003b82235a9329f912522a2f70aa950dfce4998 (diff) | |
download | LYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.tar.gz LYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.zip |
Merge branch 'master' of https://github.com/JoelHMikael/FoodJS
Updating remote changes
Diffstat (limited to 'node_modules/makeerror/lib/makeerror.js')
-rw-r--r-- | node_modules/makeerror/lib/makeerror.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/node_modules/makeerror/lib/makeerror.js b/node_modules/makeerror/lib/makeerror.js new file mode 100644 index 0000000..9dd6d1f --- /dev/null +++ b/node_modules/makeerror/lib/makeerror.js @@ -0,0 +1,87 @@ +var tmpl = require('tmpl') + +module.exports = makeError + +function BaseError() {} +BaseError.prototype = new Error() +BaseError.prototype.toString = function() { + return this.message +} + + +/** + * Makes an Error function with the signature: + * + * function(message, data) + * + * You'll typically do something like: + * + * var UnknownFileTypeError = makeError( + * 'UnknownFileTypeError', + * 'The specified type is not known.' + * ) + * var er = UnknownFileTypeError() + * + * `er` will have a prototype chain that ensures: + * + * er instanceof Error + * er instanceof UnknownFileTypeError + * + * You can also do `var er = new UnknownFileTypeError()` if you really like the + * `new` keyword. + * + * @param String The name of the error. + * @param String The default message string. + * @param Object The default data object, merged with per instance data. + */ +function makeError(name, defaultMessage, defaultData) { + defaultMessage = tmpl(defaultMessage || '') + defaultData = defaultData || {} + if (defaultData.proto && !(defaultData.proto instanceof BaseError)) + throw new Error('The custom "proto" must be an Error created via makeError') + + var CustomError = function(message, data) { + if (!(this instanceof CustomError)) return new CustomError(message, data) + + if (typeof message !== 'string' && !data) { + data = message + message = null + } + + this.name = name + this.data = data || defaultData + + if (typeof message === 'string') { + this.message = tmpl(message, this.data) + } else { + this.message = defaultMessage(this.data) + } + + var er = new Error() + this.stack = er.stack + if (this.stack) { + // remove TWO stack level: + if (typeof Components !== 'undefined') { + // Mozilla: + this.stack = this.stack.substring(this.stack.indexOf('\n') + 2) + } else if (typeof chrome !== 'undefined' || typeof process !== 'undefined') { + // Google Chrome/Node.js: + this.stack = this.stack.replace(/\n[^\n]*/, '') + this.stack = this.stack.replace(/\n[^\n]*/, '') + this.stack = ( + this.name + + (this.message ? (': ' + this.message) : '') + + this.stack.substring(5) + ) + } + } + + if ('fileName' in er) this.fileName = er.fileName + if ('lineNumber' in er) this.lineNumber = er.lineNumber + } + + CustomError.prototype = defaultData.proto || new BaseError() + delete defaultData.proto + + return CustomError +} |