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