You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
915 B
44 lines
915 B
'use strict'; |
|
var captureStackTrace = require('capture-stack-trace'); |
|
|
|
function inherits(ctor, superCtor) { |
|
ctor.super_ = superCtor; |
|
ctor.prototype = Object.create(superCtor.prototype, { |
|
constructor: { |
|
value: ctor, |
|
enumerable: false, |
|
writable: true, |
|
configurable: true |
|
} |
|
}); |
|
} |
|
|
|
module.exports = function createErrorClass(className, setup) { |
|
if (typeof className !== 'string') { |
|
throw new TypeError('Expected className to be a string'); |
|
} |
|
|
|
if (/[^0-9a-zA-Z_$]/.test(className)) { |
|
throw new Error('className contains invalid characters'); |
|
} |
|
|
|
setup = setup || function (message) { |
|
this.message = message; |
|
}; |
|
|
|
var ErrorClass = function () { |
|
Object.defineProperty(this, 'name', { |
|
configurable: true, |
|
value: className, |
|
writable: true |
|
}); |
|
|
|
captureStackTrace(this, this.constructor); |
|
|
|
setup.apply(this, arguments); |
|
}; |
|
|
|
inherits(ErrorClass, Error); |
|
|
|
return ErrorClass; |
|
};
|
|
|