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.
		
		
		
		
		
			
		
			
				
					
					
						
							55 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							55 lines
						
					
					
						
							1.8 KiB
						
					
					
				// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` | 
						|
var Map = require('../modules/es.map'); | 
						|
var WeakMap = require('../modules/es.weak-map'); | 
						|
var shared = require('../internals/shared'); | 
						|
 | 
						|
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) { keys.push(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 | 
						|
};
 | 
						|
 |