| var Map = require('./es6.map') |
| , $export = require('./_export') |
| , shared = require('./_shared')('metadata') |
| , store = shared.store || (shared.store = new (require('./es6.weak-map'))); |
| |
| var getOrCreateMetadataMap = function(target, targetKey, create){ |
| var targetMetadata = store.get(target); |
| if(!targetMetadata){ |
| if(!create)return undefined; |
| store.set(target, targetMetadata = new Map); |
| } |
| var keyMetadata = targetMetadata.get(targetKey); |
| if(!keyMetadata){ |
| if(!create)return undefined; |
| 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) |
| , keys = []; |
| if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); }); |
| return keys; |
| }; |
| var toMetaKey = function(it){ |
| return it === undefined || typeof it == 'symbol' ? it : String(it); |
| }; |
| var exp = function(O){ |
| $export($export.S, 'Reflect', O); |
| }; |
| |
| module.exports = { |
| store: store, |
| map: getOrCreateMetadataMap, |
| has: ordinaryHasOwnMetadata, |
| get: ordinaryGetOwnMetadata, |
| set: ordinaryDefineOwnMetadata, |
| keys: ordinaryOwnMetadataKeys, |
| key: toMetaKey, |
| exp: exp |
| }; |