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