You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
915 B
JavaScript
45 lines
915 B
JavaScript
6 years ago
|
'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;
|
||
|
};
|