| 'use strict'; | 
| var globalThis = require('../internals/global-this'); | 
| var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f; | 
| var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); | 
| var defineBuiltIn = require('../internals/define-built-in'); | 
| var defineGlobalProperty = require('../internals/define-global-property'); | 
| var copyConstructorProperties = require('../internals/copy-constructor-properties'); | 
| var isForced = require('../internals/is-forced'); | 
|   | 
| /* | 
|   options.target         - name of the target object | 
|   options.global         - target is the global object | 
|   options.stat           - export as static methods of target | 
|   options.proto          - export as prototype methods of target | 
|   options.real           - real prototype method for the `pure` version | 
|   options.forced         - export even if the native feature is available | 
|   options.bind           - bind methods to the target, required for the `pure` version | 
|   options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version | 
|   options.unsafe         - use the simple assignment of property instead of delete + defineProperty | 
|   options.sham           - add a flag to not completely full polyfills | 
|   options.enumerable     - export as enumerable property | 
|   options.dontCallGetSet - prevent calling a getter on target | 
|   options.name           - the .name of the function if it does not match the key | 
| */ | 
| module.exports = function (options, source) { | 
|   var TARGET = options.target; | 
|   var GLOBAL = options.global; | 
|   var STATIC = options.stat; | 
|   var FORCED, target, key, targetProperty, sourceProperty, descriptor; | 
|   if (GLOBAL) { | 
|     target = globalThis; | 
|   } else if (STATIC) { | 
|     target = globalThis[TARGET] || defineGlobalProperty(TARGET, {}); | 
|   } else { | 
|     target = globalThis[TARGET] && globalThis[TARGET].prototype; | 
|   } | 
|   if (target) for (key in source) { | 
|     sourceProperty = source[key]; | 
|     if (options.dontCallGetSet) { | 
|       descriptor = getOwnPropertyDescriptor(target, key); | 
|       targetProperty = descriptor && descriptor.value; | 
|     } else targetProperty = target[key]; | 
|     FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); | 
|     // contained in target | 
|     if (!FORCED && targetProperty !== undefined) { | 
|       if (typeof sourceProperty == typeof targetProperty) continue; | 
|       copyConstructorProperties(sourceProperty, targetProperty); | 
|     } | 
|     // add a flag to not completely full polyfills | 
|     if (options.sham || (targetProperty && targetProperty.sham)) { | 
|       createNonEnumerableProperty(sourceProperty, 'sham', true); | 
|     } | 
|     defineBuiltIn(target, key, sourceProperty, options); | 
|   } | 
| }; |