'use strict'; 
 | 
// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` 
 | 
require('../modules/es.map'); 
 | 
require('../modules/es.weak-map'); 
 | 
var getBuiltIn = require('../internals/get-built-in'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var shared = require('../internals/shared'); 
 | 
  
 | 
var Map = getBuiltIn('Map'); 
 | 
var WeakMap = getBuiltIn('WeakMap'); 
 | 
var push = uncurryThis([].push); 
 | 
  
 | 
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) { push(keys, 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 
 | 
}; 
 |