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.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							61 lines
						
					
					
						
							1.5 KiB
						
					
					
				var NATIVE_WEAK_MAP = require('../internals/native-weak-map'); | 
						|
var global = require('../internals/global'); | 
						|
var isObject = require('../internals/is-object'); | 
						|
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); | 
						|
var objectHas = require('../internals/has'); | 
						|
var sharedKey = require('../internals/shared-key'); | 
						|
var hiddenKeys = require('../internals/hidden-keys'); | 
						|
 | 
						|
var WeakMap = global.WeakMap; | 
						|
var set, get, has; | 
						|
 | 
						|
var enforce = function (it) { | 
						|
  return has(it) ? get(it) : set(it, {}); | 
						|
}; | 
						|
 | 
						|
var getterFor = function (TYPE) { | 
						|
  return function (it) { | 
						|
    var state; | 
						|
    if (!isObject(it) || (state = get(it)).type !== TYPE) { | 
						|
      throw TypeError('Incompatible receiver, ' + TYPE + ' required'); | 
						|
    } return state; | 
						|
  }; | 
						|
}; | 
						|
 | 
						|
if (NATIVE_WEAK_MAP) { | 
						|
  var store = new WeakMap(); | 
						|
  var wmget = store.get; | 
						|
  var wmhas = store.has; | 
						|
  var wmset = store.set; | 
						|
  set = function (it, metadata) { | 
						|
    wmset.call(store, it, metadata); | 
						|
    return metadata; | 
						|
  }; | 
						|
  get = function (it) { | 
						|
    return wmget.call(store, it) || {}; | 
						|
  }; | 
						|
  has = function (it) { | 
						|
    return wmhas.call(store, it); | 
						|
  }; | 
						|
} else { | 
						|
  var STATE = sharedKey('state'); | 
						|
  hiddenKeys[STATE] = true; | 
						|
  set = function (it, metadata) { | 
						|
    createNonEnumerableProperty(it, STATE, metadata); | 
						|
    return metadata; | 
						|
  }; | 
						|
  get = function (it) { | 
						|
    return objectHas(it, STATE) ? it[STATE] : {}; | 
						|
  }; | 
						|
  has = function (it) { | 
						|
    return objectHas(it, STATE); | 
						|
  }; | 
						|
} | 
						|
 | 
						|
module.exports = { | 
						|
  set: set, | 
						|
  get: get, | 
						|
  has: has, | 
						|
  enforce: enforce, | 
						|
  getterFor: getterFor | 
						|
};
 | 
						|
 |