source/create-error-type.js
function createErrorType(initialize = undefined, ErrorClass = undefined, prototype = undefined) {
    ErrorClass = ErrorClass || Error;

    let Constructor = function (message) {
        let error = Object.create(Constructor.prototype);

        error.message = message;
        error.stack   = (new Error).stack;

        if (initialize) {
            initialize(error, message);
        }

        return error;
    };

    Constructor.prototype = Object.assign(Object.create(ErrorClass.prototype), prototype);

    return Constructor;
}
function createErrorType(initialize = undefined, ErrorClass = undefined, prototype = undefined) {
    ErrorClass = ErrorClass || Error;

    let Constructor = function (message) {
        let error = Object.create(Constructor.prototype);

        error.message = message;
        error.stack   = (new Error).stack;

        if (initialize) {
            initialize(error, message);
        }

        return error;
    };

    Constructor.prototype = Object.assign(Object.create(ErrorClass.prototype), prototype);

    return Constructor;
}
function createErrorType ( initialize = undefined , ErrorClass = undefined , prototype = undefined ) { ErrorClass = ErrorClass || Error ; let Constructor = function ( message ) { let error = Object . create ( Constructor . prototype ) ; error . message = message ; error . stack = ( new Error ) . stack ; if ( initialize ) { initialize ( error , message ) ; } return error ; } ; Constructor . prototype = Object . assign ( Object . create ( ErrorClass . prototype ) , prototype ) ; return Constructor ; }
Return a constructor for a new error type.

@function createErrorType

@param initialize {Function} A function that gets passed the constructed error and the passed message and
runs during the construction of new instances.
@param ErrorClass {Function} An error class you wish to subclass. Defaults to Error.
@param prototype  {Object}   Additional properties and methods for the new error type.

@return {Function} The constructor for the new error type.
Return a constructor for a new error type .