1 // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
2 var Map = require('../modules/es.map');
3 var WeakMap = require('../modules/es.weak-map');
4 var shared = require('../internals/shared');
6 var metadata = shared('metadata');
7 var store = metadata.store || (metadata.store = new WeakMap());
9 var getOrCreateMetadataMap = function (target, targetKey, create) {
10 var targetMetadata = store.get(target);
11 if (!targetMetadata) {
13 store.set(target, targetMetadata = new Map());
15 var keyMetadata = targetMetadata.get(targetKey);
18 targetMetadata.set(targetKey, keyMetadata = new Map());
22 var ordinaryHasOwnMetadata = function (MetadataKey, O, P) {
23 var metadataMap = getOrCreateMetadataMap(O, P, false);
24 return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
27 var ordinaryGetOwnMetadata = function (MetadataKey, O, P) {
28 var metadataMap = getOrCreateMetadataMap(O, P, false);
29 return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
32 var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {
33 getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
36 var ordinaryOwnMetadataKeys = function (target, targetKey) {
37 var metadataMap = getOrCreateMetadataMap(target, targetKey, false);
39 if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });
43 var toMetadataKey = function (it) {
44 return it === undefined || typeof it == 'symbol' ? it : String(it);
49 getMap: getOrCreateMetadataMap,
50 has: ordinaryHasOwnMetadata,
51 get: ordinaryGetOwnMetadata,
52 set: ordinaryDefineOwnMetadata,
53 keys: ordinaryOwnMetadataKeys,