1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 'use strict';
- // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
- require('../modules/es.map');
- require('../modules/es.weak-map');
- var getBuiltIn = require('../internals/get-built-in');
- var uncurryThis = require('../internals/function-uncurry-this');
- var shared = require('../internals/shared');
-
- var Map = getBuiltIn('Map');
- var WeakMap = getBuiltIn('WeakMap');
- var push = uncurryThis([].push);
-
- var metadata = shared('metadata');
- var store = metadata.store || (metadata.store = new WeakMap());
-
- var getOrCreateMetadataMap = function (target, targetKey, create) {
- var targetMetadata = store.get(target);
- if (!targetMetadata) {
- if (!create) return;
- store.set(target, targetMetadata = new Map());
- }
- var keyMetadata = targetMetadata.get(targetKey);
- if (!keyMetadata) {
- if (!create) return;
- targetMetadata.set(targetKey, keyMetadata = new Map());
- } return keyMetadata;
- };
-
- var ordinaryHasOwnMetadata = function (MetadataKey, O, P) {
- var metadataMap = getOrCreateMetadataMap(O, P, false);
- return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
- };
-
- var ordinaryGetOwnMetadata = function (MetadataKey, O, P) {
- var metadataMap = getOrCreateMetadataMap(O, P, false);
- return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
- };
-
- var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {
- getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
- };
-
- var ordinaryOwnMetadataKeys = function (target, targetKey) {
- var metadataMap = getOrCreateMetadataMap(target, targetKey, false);
- var keys = [];
- if (metadataMap) metadataMap.forEach(function (_, key) { push(keys, key); });
- return keys;
- };
-
- var toMetadataKey = function (it) {
- return it === undefined || typeof it == 'symbol' ? it : String(it);
- };
-
- module.exports = {
- store: store,
- getMap: getOrCreateMetadataMap,
- has: ordinaryHasOwnMetadata,
- get: ordinaryGetOwnMetadata,
- set: ordinaryDefineOwnMetadata,
- keys: ordinaryOwnMetadataKeys,
- toKey: toMetadataKey
- };
|