massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / core-js / internals / redefine.js
1 var global = require('../internals/global');
2 var isCallable = require('../internals/is-callable');
3 var hasOwn = require('../internals/has-own-property');
4 var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
5 var setGlobal = require('../internals/set-global');
6 var inspectSource = require('../internals/inspect-source');
7 var InternalStateModule = require('../internals/internal-state');
8 var CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;
9
10 var getInternalState = InternalStateModule.get;
11 var enforceInternalState = InternalStateModule.enforce;
12 var TEMPLATE = String(String).split('String');
13
14 (module.exports = function (O, key, value, options) {
15   var unsafe = options ? !!options.unsafe : false;
16   var simple = options ? !!options.enumerable : false;
17   var noTargetGet = options ? !!options.noTargetGet : false;
18   var name = options && options.name !== undefined ? options.name : key;
19   var state;
20   if (isCallable(value)) {
21     if (String(name).slice(0, 7) === 'Symbol(') {
22       name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
23     }
24     if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {
25       createNonEnumerableProperty(value, 'name', name);
26     }
27     state = enforceInternalState(value);
28     if (!state.source) {
29       state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
30     }
31   }
32   if (O === global) {
33     if (simple) O[key] = value;
34     else setGlobal(key, value);
35     return;
36   } else if (!unsafe) {
37     delete O[key];
38   } else if (!noTargetGet && O[key]) {
39     simple = true;
40   }
41   if (simple) O[key] = value;
42   else createNonEnumerableProperty(O, key, value);
43 // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
44 })(Function.prototype, 'toString', function toString() {
45   return isCallable(this) && getInternalState(this).source || inspectSource(this);
46 });