Blame view

lib/jsdom/living/generated/utils.js 2.91 KB
858f2bdf5   Boyan Georgiev   fixes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  "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 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]()));
  
  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;
    }
  }
  
  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,
    wrapperSymbol,
    implSymbol,
    getSameObject,
    ctorRegistrySymbol,
    wrapperForImpl,
    implForWrapper,
    tryWrapperForImpl,
    tryImplForWrapper,
    iterInternalSymbol,
    IteratorPrototype,
    isArrayBuffer,
    isArrayIndexPropName,
    supportsPropertyIndex,
    supportedPropertyIndices,
    supportsPropertyName,
    supportedPropertyNames,
    indexedGet,
    indexedSetNew,
    indexedSetExisting,
    namedGet,
    namedSetNew,
    namedSetExisting,
    namedDelete
  };