You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.8 KiB
51 lines
1.8 KiB
var Map = require('./es6.map'); |
|
var $export = require('./_export'); |
|
var shared = require('./_shared')('metadata'); |
|
var 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); |
|
var 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 |
|
};
|
|
|