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

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;
};