first
This commit is contained in:
90
node_modules/core-js/internals/internal-metadata.js
generated
vendored
Normal file
90
node_modules/core-js/internals/internal-metadata.js
generated
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
'use strict';
|
||||
var $ = require('../internals/export');
|
||||
var uncurryThis = require('../internals/function-uncurry-this');
|
||||
var hiddenKeys = require('../internals/hidden-keys');
|
||||
var isObject = require('../internals/is-object');
|
||||
var hasOwn = require('../internals/has-own-property');
|
||||
var defineProperty = require('../internals/object-define-property').f;
|
||||
var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
|
||||
var getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');
|
||||
var isExtensible = require('../internals/object-is-extensible');
|
||||
var uid = require('../internals/uid');
|
||||
var FREEZING = require('../internals/freezing');
|
||||
|
||||
var REQUIRED = false;
|
||||
var METADATA = uid('meta');
|
||||
var id = 0;
|
||||
|
||||
var setMetadata = function (it) {
|
||||
defineProperty(it, METADATA, { value: {
|
||||
objectID: 'O' + id++, // object ID
|
||||
weakData: {} // weak collections IDs
|
||||
} });
|
||||
};
|
||||
|
||||
var fastKey = function (it, create) {
|
||||
// return a primitive with prefix
|
||||
if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
|
||||
if (!hasOwn(it, METADATA)) {
|
||||
// can't set metadata to uncaught frozen object
|
||||
if (!isExtensible(it)) return 'F';
|
||||
// not necessary to add metadata
|
||||
if (!create) return 'E';
|
||||
// add missing metadata
|
||||
setMetadata(it);
|
||||
// return object ID
|
||||
} return it[METADATA].objectID;
|
||||
};
|
||||
|
||||
var getWeakData = function (it, create) {
|
||||
if (!hasOwn(it, METADATA)) {
|
||||
// can't set metadata to uncaught frozen object
|
||||
if (!isExtensible(it)) return true;
|
||||
// not necessary to add metadata
|
||||
if (!create) return false;
|
||||
// add missing metadata
|
||||
setMetadata(it);
|
||||
// return the store of weak collections IDs
|
||||
} return it[METADATA].weakData;
|
||||
};
|
||||
|
||||
// add metadata on freeze-family methods calling
|
||||
var onFreeze = function (it) {
|
||||
if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
|
||||
return it;
|
||||
};
|
||||
|
||||
var enable = function () {
|
||||
meta.enable = function () { /* empty */ };
|
||||
REQUIRED = true;
|
||||
var getOwnPropertyNames = getOwnPropertyNamesModule.f;
|
||||
var splice = uncurryThis([].splice);
|
||||
var test = {};
|
||||
test[METADATA] = 1;
|
||||
|
||||
// prevent exposing of metadata key
|
||||
if (getOwnPropertyNames(test).length) {
|
||||
getOwnPropertyNamesModule.f = function (it) {
|
||||
var result = getOwnPropertyNames(it);
|
||||
for (var i = 0, length = result.length; i < length; i++) {
|
||||
if (result[i] === METADATA) {
|
||||
splice(result, i, 1);
|
||||
break;
|
||||
}
|
||||
} return result;
|
||||
};
|
||||
|
||||
$({ target: 'Object', stat: true, forced: true }, {
|
||||
getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var meta = module.exports = {
|
||||
enable: enable,
|
||||
fastKey: fastKey,
|
||||
getWeakData: getWeakData,
|
||||
onFreeze: onFreeze
|
||||
};
|
||||
|
||||
hiddenKeys[METADATA] = true;
|
Reference in New Issue
Block a user