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