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.
		
		
		
		
			
				
					72 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					72 lines
				
				2.0 KiB
			| 
											11 months ago
										 | 'use strict'; | ||
|  | var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection'); | ||
|  | var global = require('../internals/global'); | ||
|  | var isObject = require('../internals/is-object'); | ||
|  | var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); | ||
|  | var hasOwn = require('../internals/has-own-property'); | ||
|  | var shared = require('../internals/shared-store'); | ||
|  | var sharedKey = require('../internals/shared-key'); | ||
|  | var hiddenKeys = require('../internals/hidden-keys'); | ||
|  | 
 | ||
|  | var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; | ||
|  | var TypeError = global.TypeError; | ||
|  | 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 new TypeError('Incompatible receiver, ' + TYPE + ' required'); | ||
|  |     } return state; | ||
|  |   }; | ||
|  | }; | ||
|  | 
 | ||
|  | if (NATIVE_WEAK_MAP || shared.state) { | ||
|  |   var store = shared.state || (shared.state = new WeakMap()); | ||
|  |   /* eslint-disable no-self-assign -- prototype methods protection */ | ||
|  |   store.get = store.get; | ||
|  |   store.has = store.has; | ||
|  |   store.set = store.set; | ||
|  |   /* eslint-enable no-self-assign -- prototype methods protection */ | ||
|  |   set = function (it, metadata) { | ||
|  |     if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); | ||
|  |     metadata.facade = it; | ||
|  |     store.set(it, metadata); | ||
|  |     return metadata; | ||
|  |   }; | ||
|  |   get = function (it) { | ||
|  |     return store.get(it) || {}; | ||
|  |   }; | ||
|  |   has = function (it) { | ||
|  |     return store.has(it); | ||
|  |   }; | ||
|  | } else { | ||
|  |   var STATE = sharedKey('state'); | ||
|  |   hiddenKeys[STATE] = true; | ||
|  |   set = function (it, metadata) { | ||
|  |     if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); | ||
|  |     metadata.facade = it; | ||
|  |     createNonEnumerableProperty(it, STATE, metadata); | ||
|  |     return metadata; | ||
|  |   }; | ||
|  |   get = function (it) { | ||
|  |     return hasOwn(it, STATE) ? it[STATE] : {}; | ||
|  |   }; | ||
|  |   has = function (it) { | ||
|  |     return hasOwn(it, STATE); | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = { | ||
|  |   set: set, | ||
|  |   get: get, | ||
|  |   has: has, | ||
|  |   enforce: enforce, | ||
|  |   getterFor: getterFor | ||
|  | }; |