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.
		
		
		
		
		
			
		
			
				
					
					
						
							127 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
	
	
							127 lines
						
					
					
						
							3.4 KiB
						
					
					
				"use strict"; | 
						|
 | 
						|
// Returns "Type(value) is Object" in ES terminology. | 
						|
function isObject(value) { | 
						|
  return typeof value === "object" && value !== null || typeof value === "function"; | 
						|
} | 
						|
 | 
						|
function hasOwn(obj, prop) { | 
						|
  return Object.prototype.hasOwnProperty.call(obj, prop); | 
						|
} | 
						|
 | 
						|
const getOwnPropertyDescriptors = typeof Object.getOwnPropertyDescriptors === "function" ? | 
						|
  Object.getOwnPropertyDescriptors : | 
						|
  // Polyfill exists until we require Node.js v8.x | 
						|
  // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors | 
						|
  obj => { | 
						|
    if (obj === undefined || obj === null) { | 
						|
      throw new TypeError("Cannot convert undefined or null to object"); | 
						|
    } | 
						|
    obj = Object(obj); | 
						|
    const ownKeys = Reflect.ownKeys(obj); | 
						|
    const descriptors = {}; | 
						|
    for (const key of ownKeys) { | 
						|
      const descriptor = Reflect.getOwnPropertyDescriptor(obj, key); | 
						|
      if (descriptor !== undefined) { | 
						|
        Reflect.defineProperty(descriptors, key, { | 
						|
          value: descriptor, | 
						|
          writable: true, | 
						|
          enumerable: true, | 
						|
          configurable: true | 
						|
        }); | 
						|
      } | 
						|
    } | 
						|
    return descriptors; | 
						|
  }; | 
						|
 | 
						|
const wrapperSymbol = Symbol("wrapper"); | 
						|
const implSymbol = Symbol("impl"); | 
						|
const sameObjectCaches = Symbol("SameObject caches"); | 
						|
 | 
						|
function getSameObject(wrapper, prop, creator) { | 
						|
  if (!wrapper[sameObjectCaches]) { | 
						|
    wrapper[sameObjectCaches] = Object.create(null); | 
						|
  } | 
						|
 | 
						|
  if (prop in wrapper[sameObjectCaches]) { | 
						|
    return wrapper[sameObjectCaches][prop]; | 
						|
  } | 
						|
 | 
						|
  wrapper[sameObjectCaches][prop] = creator(); | 
						|
  return wrapper[sameObjectCaches][prop]; | 
						|
} | 
						|
 | 
						|
function wrapperForImpl(impl) { | 
						|
  return impl ? impl[wrapperSymbol] : null; | 
						|
} | 
						|
 | 
						|
function implForWrapper(wrapper) { | 
						|
  return wrapper ? wrapper[implSymbol] : null; | 
						|
} | 
						|
 | 
						|
function tryWrapperForImpl(impl) { | 
						|
  const wrapper = wrapperForImpl(impl); | 
						|
  return wrapper ? wrapper : impl; | 
						|
} | 
						|
 | 
						|
function tryImplForWrapper(wrapper) { | 
						|
  const impl = implForWrapper(wrapper); | 
						|
  return impl ? impl : wrapper; | 
						|
} | 
						|
 | 
						|
const iterInternalSymbol = Symbol("internal"); | 
						|
const IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); | 
						|
 | 
						|
function isArrayIndexPropName(P) { | 
						|
  if (typeof P !== "string") { | 
						|
    return false; | 
						|
  } | 
						|
  const i = P >>> 0; | 
						|
  if (i === Math.pow(2, 32) - 1) { | 
						|
    return false; | 
						|
  } | 
						|
  const s = `${i}`; | 
						|
  if (P !== s) { | 
						|
    return false; | 
						|
  } | 
						|
  return true; | 
						|
} | 
						|
 | 
						|
const supportsPropertyIndex = Symbol("supports property index"); | 
						|
const supportedPropertyIndices = Symbol("supported property indices"); | 
						|
const supportsPropertyName = Symbol("supports property name"); | 
						|
const supportedPropertyNames = Symbol("supported property names"); | 
						|
const indexedGet = Symbol("indexed property get"); | 
						|
const indexedSetNew = Symbol("indexed property set new"); | 
						|
const indexedSetExisting = Symbol("indexed property set existing"); | 
						|
const namedGet = Symbol("named property get"); | 
						|
const namedSetNew = Symbol("named property set new"); | 
						|
const namedSetExisting = Symbol("named property set existing"); | 
						|
const namedDelete = Symbol("named property delete"); | 
						|
 | 
						|
module.exports = exports = { | 
						|
  isObject, | 
						|
  hasOwn, | 
						|
  getOwnPropertyDescriptors, | 
						|
  wrapperSymbol, | 
						|
  implSymbol, | 
						|
  getSameObject, | 
						|
  wrapperForImpl, | 
						|
  implForWrapper, | 
						|
  tryWrapperForImpl, | 
						|
  tryImplForWrapper, | 
						|
  iterInternalSymbol, | 
						|
  IteratorPrototype, | 
						|
  isArrayIndexPropName, | 
						|
  supportsPropertyIndex, | 
						|
  supportedPropertyIndices, | 
						|
  supportsPropertyName, | 
						|
  supportedPropertyNames, | 
						|
  indexedGet, | 
						|
  indexedSetNew, | 
						|
  indexedSetExisting, | 
						|
  namedGet, | 
						|
  namedSetNew, | 
						|
  namedSetExisting, | 
						|
  namedDelete | 
						|
};
 | 
						|
 |