'use strict'; 
 | 
var getBuiltIn = require('../internals/get-built-in'); 
 | 
var hasOwn = require('../internals/has-own-property'); 
 | 
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); 
 | 
var isPrototypeOf = require('../internals/object-is-prototype-of'); 
 | 
var setPrototypeOf = require('../internals/object-set-prototype-of'); 
 | 
var copyConstructorProperties = require('../internals/copy-constructor-properties'); 
 | 
var proxyAccessor = require('../internals/proxy-accessor'); 
 | 
var inheritIfRequired = require('../internals/inherit-if-required'); 
 | 
var normalizeStringArgument = require('../internals/normalize-string-argument'); 
 | 
var installErrorCause = require('../internals/install-error-cause'); 
 | 
var installErrorStack = require('../internals/error-stack-install'); 
 | 
var DESCRIPTORS = require('../internals/descriptors'); 
 | 
var IS_PURE = require('../internals/is-pure'); 
 | 
  
 | 
module.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { 
 | 
  var STACK_TRACE_LIMIT = 'stackTraceLimit'; 
 | 
  var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; 
 | 
  var path = FULL_NAME.split('.'); 
 | 
  var ERROR_NAME = path[path.length - 1]; 
 | 
  var OriginalError = getBuiltIn.apply(null, path); 
 | 
  
 | 
  if (!OriginalError) return; 
 | 
  
 | 
  var OriginalErrorPrototype = OriginalError.prototype; 
 | 
  
 | 
  // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006 
 | 
  if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause; 
 | 
  
 | 
  if (!FORCED) return OriginalError; 
 | 
  
 | 
  var BaseError = getBuiltIn('Error'); 
 | 
  
 | 
  var WrappedError = wrapper(function (a, b) { 
 | 
    var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined); 
 | 
    var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); 
 | 
    if (message !== undefined) createNonEnumerableProperty(result, 'message', message); 
 | 
    installErrorStack(result, WrappedError, result.stack, 2); 
 | 
    if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError); 
 | 
    if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]); 
 | 
    return result; 
 | 
  }); 
 | 
  
 | 
  WrappedError.prototype = OriginalErrorPrototype; 
 | 
  
 | 
  if (ERROR_NAME !== 'Error') { 
 | 
    if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError); 
 | 
    else copyConstructorProperties(WrappedError, BaseError, { name: true }); 
 | 
  } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { 
 | 
    proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); 
 | 
    proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace'); 
 | 
  } 
 | 
  
 | 
  copyConstructorProperties(WrappedError, OriginalError); 
 | 
  
 | 
  if (!IS_PURE) try { 
 | 
    // Safari 13- bug: WebAssembly errors does not have a proper `.name` 
 | 
    if (OriginalErrorPrototype.name !== ERROR_NAME) { 
 | 
      createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME); 
 | 
    } 
 | 
    OriginalErrorPrototype.constructor = WrappedError; 
 | 
  } catch (error) { /* empty */ } 
 | 
  
 | 
  return WrappedError; 
 | 
}; 
 |