[6a3a178] | 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');
|
---|
| 5 |
|
---|
| 6 | var metadata = shared('metadata');
|
---|
| 7 | var store = metadata.store || (metadata.store = new WeakMap());
|
---|
| 8 |
|
---|
| 9 | var getOrCreateMetadataMap = function (target, targetKey, create) {
|
---|
| 10 | var targetMetadata = store.get(target);
|
---|
| 11 | if (!targetMetadata) {
|
---|
| 12 | if (!create) return;
|
---|
| 13 | store.set(target, targetMetadata = new Map());
|
---|
| 14 | }
|
---|
| 15 | var keyMetadata = targetMetadata.get(targetKey);
|
---|
| 16 | if (!keyMetadata) {
|
---|
| 17 | if (!create) return;
|
---|
| 18 | targetMetadata.set(targetKey, keyMetadata = new Map());
|
---|
| 19 | } return keyMetadata;
|
---|
| 20 | };
|
---|
| 21 |
|
---|
| 22 | var ordinaryHasOwnMetadata = function (MetadataKey, O, P) {
|
---|
| 23 | var metadataMap = getOrCreateMetadataMap(O, P, false);
|
---|
| 24 | return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
|
---|
| 25 | };
|
---|
| 26 |
|
---|
| 27 | var ordinaryGetOwnMetadata = function (MetadataKey, O, P) {
|
---|
| 28 | var metadataMap = getOrCreateMetadataMap(O, P, false);
|
---|
| 29 | return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
|
---|
| 30 | };
|
---|
| 31 |
|
---|
| 32 | var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {
|
---|
| 33 | getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
|
---|
| 34 | };
|
---|
| 35 |
|
---|
| 36 | var ordinaryOwnMetadataKeys = function (target, targetKey) {
|
---|
| 37 | var metadataMap = getOrCreateMetadataMap(target, targetKey, false);
|
---|
| 38 | var keys = [];
|
---|
| 39 | if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });
|
---|
| 40 | return keys;
|
---|
| 41 | };
|
---|
| 42 |
|
---|
| 43 | var toMetadataKey = function (it) {
|
---|
| 44 | return it === undefined || typeof it == 'symbol' ? it : String(it);
|
---|
| 45 | };
|
---|
| 46 |
|
---|
| 47 | module.exports = {
|
---|
| 48 | store: store,
|
---|
| 49 | getMap: getOrCreateMetadataMap,
|
---|
| 50 | has: ordinaryHasOwnMetadata,
|
---|
| 51 | get: ordinaryGetOwnMetadata,
|
---|
| 52 | set: ordinaryDefineOwnMetadata,
|
---|
| 53 | keys: ordinaryOwnMetadataKeys,
|
---|
| 54 | toKey: toMetadataKey
|
---|
| 55 | };
|
---|