massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / core-js / internals / internal-metadata.js
1 var $ = require('../internals/export');
2 var uncurryThis = require('../internals/function-uncurry-this');
3 var hiddenKeys = require('../internals/hidden-keys');
4 var isObject = require('../internals/is-object');
5 var hasOwn = require('../internals/has-own-property');
6 var defineProperty = require('../internals/object-define-property').f;
7 var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
8 var getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');
9 var isExtensible = require('../internals/object-is-extensible');
10 var uid = require('../internals/uid');
11 var FREEZING = require('../internals/freezing');
12
13 var REQUIRED = false;
14 var METADATA = uid('meta');
15 var id = 0;
16
17 var setMetadata = function (it) {
18   defineProperty(it, METADATA, { value: {
19     objectID: 'O' + id++, // object ID
20     weakData: {}          // weak collections IDs
21   } });
22 };
23
24 var fastKey = function (it, create) {
25   // return a primitive with prefix
26   if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
27   if (!hasOwn(it, METADATA)) {
28     // can't set metadata to uncaught frozen object
29     if (!isExtensible(it)) return 'F';
30     // not necessary to add metadata
31     if (!create) return 'E';
32     // add missing metadata
33     setMetadata(it);
34   // return object ID
35   } return it[METADATA].objectID;
36 };
37
38 var getWeakData = function (it, create) {
39   if (!hasOwn(it, METADATA)) {
40     // can't set metadata to uncaught frozen object
41     if (!isExtensible(it)) return true;
42     // not necessary to add metadata
43     if (!create) return false;
44     // add missing metadata
45     setMetadata(it);
46   // return the store of weak collections IDs
47   } return it[METADATA].weakData;
48 };
49
50 // add metadata on freeze-family methods calling
51 var onFreeze = function (it) {
52   if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
53   return it;
54 };
55
56 var enable = function () {
57   meta.enable = function () { /* empty */ };
58   REQUIRED = true;
59   var getOwnPropertyNames = getOwnPropertyNamesModule.f;
60   var splice = uncurryThis([].splice);
61   var test = {};
62   test[METADATA] = 1;
63
64   // prevent exposing of metadata key
65   if (getOwnPropertyNames(test).length) {
66     getOwnPropertyNamesModule.f = function (it) {
67       var result = getOwnPropertyNames(it);
68       for (var i = 0, length = result.length; i < length; i++) {
69         if (result[i] === METADATA) {
70           splice(result, i, 1);
71           break;
72         }
73       } return result;
74     };
75
76     $({ target: 'Object', stat: true, forced: true }, {
77       getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
78     });
79   }
80 };
81
82 var meta = module.exports = {
83   enable: enable,
84   fastKey: fastKey,
85   getWeakData: getWeakData,
86   onFreeze: onFreeze
87 };
88
89 hiddenKeys[METADATA] = true;