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