|
|
- "use strict";
-
- // Returns "Type(value) is Object" in ES terminology.
- function isObject(value) {
- return typeof value === "object" && value !== null || typeof value === "function";
- }
-
- const hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);
-
- const wrapperSymbol = Symbol("wrapper");
- const implSymbol = Symbol("impl");
- const sameObjectCaches = Symbol("SameObject caches");
- const ctorRegistrySymbol = Symbol.for("[webidl2js] constructor registry");
-
- 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]()));
- const AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {}).prototype);
-
- 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 byteLengthGetter =
- Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get;
- function isArrayBuffer(value) {
- try {
- byteLengthGetter.call(value);
- return true;
- } catch (e) {
- return false;
- }
- }
-
- function iteratorResult([key, value], kind) {
- let result;
- switch (kind) {
- case "key":
- result = key;
- break;
- case "value":
- result = value;
- break;
- case "key+value":
- result = [key, value];
- break;
- }
- return { value: result, done: false };
- }
-
- 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");
-
- const asyncIteratorNext = Symbol("async iterator get the next iteration result");
- const asyncIteratorReturn = Symbol("async iterator return steps");
- const asyncIteratorInit = Symbol("async iterator initialization steps");
- const asyncIteratorEOI = Symbol("async iterator end of iteration");
-
- module.exports = exports = {
- isObject,
- hasOwn,
- wrapperSymbol,
- implSymbol,
- getSameObject,
- ctorRegistrySymbol,
- wrapperForImpl,
- implForWrapper,
- tryWrapperForImpl,
- tryImplForWrapper,
- iterInternalSymbol,
- IteratorPrototype,
- AsyncIteratorPrototype,
- isArrayBuffer,
- isArrayIndexPropName,
- supportsPropertyIndex,
- supportedPropertyIndices,
- supportsPropertyName,
- supportedPropertyNames,
- indexedGet,
- indexedSetNew,
- indexedSetExisting,
- namedGet,
- namedSetNew,
- namedSetExisting,
- namedDelete,
- asyncIteratorNext,
- asyncIteratorReturn,
- asyncIteratorInit,
- asyncIteratorEOI,
- iteratorResult
- };
|