@itwin/core-frontend 3.7.0-dev.5 → 3.7.0-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/lib/cjs/ElementLocateManager.js +1 -1
  2. package/lib/cjs/ElementLocateManager.js.map +1 -1
  3. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  4. package/lib/cjs/SpatialViewState.js +2 -0
  5. package/lib/cjs/SpatialViewState.js.map +1 -1
  6. package/lib/cjs/ViewState.d.ts +2 -0
  7. package/lib/cjs/ViewState.d.ts.map +1 -1
  8. package/lib/cjs/ViewState.js.map +1 -1
  9. package/lib/cjs/Viewport.d.ts +2 -0
  10. package/lib/cjs/Viewport.d.ts.map +1 -1
  11. package/lib/cjs/Viewport.js +10 -6
  12. package/lib/cjs/Viewport.js.map +1 -1
  13. package/lib/cjs/core-frontend.d.ts +1 -0
  14. package/lib/cjs/core-frontend.d.ts.map +1 -1
  15. package/lib/cjs/core-frontend.js +1 -0
  16. package/lib/cjs/core-frontend.js.map +1 -1
  17. package/lib/cjs/gltf/GltfModel.d.ts +91 -0
  18. package/lib/cjs/gltf/GltfModel.d.ts.map +1 -0
  19. package/lib/cjs/gltf/GltfModel.js +10 -0
  20. package/lib/cjs/gltf/GltfModel.js.map +1 -0
  21. package/lib/cjs/gltf/GltfParser.d.ts +26 -0
  22. package/lib/cjs/gltf/GltfParser.d.ts.map +1 -0
  23. package/lib/cjs/gltf/GltfParser.js +357 -0
  24. package/lib/cjs/gltf/GltfParser.js.map +1 -0
  25. package/lib/cjs/gltf/GltfSchema.d.ts +557 -0
  26. package/lib/cjs/gltf/GltfSchema.d.ts.map +1 -0
  27. package/lib/cjs/gltf/GltfSchema.js +138 -0
  28. package/lib/cjs/gltf/GltfSchema.js.map +1 -0
  29. package/lib/cjs/render/GraphicBuilder.d.ts +5 -2
  30. package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
  31. package/lib/cjs/render/GraphicBuilder.js +12 -3
  32. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  33. package/lib/cjs/render/MockRender.d.ts +4 -4
  34. package/lib/cjs/render/MockRender.js.map +1 -1
  35. package/lib/cjs/render/Pixel.d.ts +13 -4
  36. package/lib/cjs/render/Pixel.d.ts.map +1 -1
  37. package/lib/cjs/render/Pixel.js +20 -13
  38. package/lib/cjs/render/Pixel.js.map +1 -1
  39. package/lib/cjs/render/RenderSystem.d.ts +2 -2
  40. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  41. package/lib/cjs/render/RenderSystem.js.map +1 -1
  42. package/lib/cjs/render/VisibleFeature.js +2 -2
  43. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  44. package/lib/cjs/render/webgl/BatchState.d.ts +3 -2
  45. package/lib/cjs/render/webgl/BatchState.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/BatchState.js +4 -3
  47. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  48. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/DrawCommand.js +4 -2
  50. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  51. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +3 -3
  52. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/FeatureOverrides.js +24 -28
  54. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  55. package/lib/cjs/render/webgl/Graphic.d.ts +3 -3
  56. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  57. package/lib/cjs/render/webgl/RenderCommands.js +1 -1
  58. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  59. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  60. package/lib/cjs/render/webgl/SceneCompositor.js +13 -4
  61. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  62. package/lib/cjs/render/webgl/System.d.ts +2 -2
  63. package/lib/cjs/render/webgl/System.js.map +1 -1
  64. package/lib/cjs/render/webgl/VisibleTileFeatures.js +6 -7
  65. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  66. package/lib/cjs/tile/B3dmReader.d.ts +2 -1
  67. package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
  68. package/lib/cjs/tile/B3dmReader.js +2 -1
  69. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  70. package/lib/cjs/tile/GltfReader.d.ts +13 -420
  71. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  72. package/lib/cjs/tile/GltfReader.js +121 -192
  73. package/lib/cjs/tile/GltfReader.js.map +1 -1
  74. package/lib/cjs/tile/ImdlReader.d.ts +3 -2
  75. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  76. package/lib/cjs/tile/ImdlReader.js +34 -25
  77. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  78. package/lib/cjs/tile/PrimaryTileTree.d.ts +5 -1
  79. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  80. package/lib/cjs/tile/PrimaryTileTree.js +2 -0
  81. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  82. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  83. package/lib/cjs/tile/RealityTileLoader.js +14 -2
  84. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  85. package/lib/cjs/tile/Tile.d.ts +10 -1
  86. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  87. package/lib/cjs/tile/Tile.js +22 -2
  88. package/lib/cjs/tile/Tile.js.map +1 -1
  89. package/lib/esm/ElementLocateManager.js +1 -1
  90. package/lib/esm/ElementLocateManager.js.map +1 -1
  91. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  92. package/lib/esm/SpatialViewState.js +2 -0
  93. package/lib/esm/SpatialViewState.js.map +1 -1
  94. package/lib/esm/ViewState.d.ts +2 -0
  95. package/lib/esm/ViewState.d.ts.map +1 -1
  96. package/lib/esm/ViewState.js.map +1 -1
  97. package/lib/esm/Viewport.d.ts +2 -0
  98. package/lib/esm/Viewport.d.ts.map +1 -1
  99. package/lib/esm/Viewport.js +10 -6
  100. package/lib/esm/Viewport.js.map +1 -1
  101. package/lib/esm/core-frontend.d.ts +1 -0
  102. package/lib/esm/core-frontend.d.ts.map +1 -1
  103. package/lib/esm/core-frontend.js +1 -0
  104. package/lib/esm/core-frontend.js.map +1 -1
  105. package/lib/esm/gltf/GltfModel.d.ts +91 -0
  106. package/lib/esm/gltf/GltfModel.d.ts.map +1 -0
  107. package/lib/esm/gltf/GltfModel.js +9 -0
  108. package/lib/esm/gltf/GltfModel.js.map +1 -0
  109. package/lib/esm/gltf/GltfParser.d.ts +26 -0
  110. package/lib/esm/gltf/GltfParser.d.ts.map +1 -0
  111. package/lib/esm/gltf/GltfParser.js +334 -0
  112. package/lib/esm/gltf/GltfParser.js.map +1 -0
  113. package/lib/esm/gltf/GltfSchema.d.ts +557 -0
  114. package/lib/esm/gltf/GltfSchema.d.ts.map +1 -0
  115. package/lib/esm/gltf/GltfSchema.js +131 -0
  116. package/lib/esm/gltf/GltfSchema.js.map +1 -0
  117. package/lib/esm/render/GraphicBuilder.d.ts +5 -2
  118. package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
  119. package/lib/esm/render/GraphicBuilder.js +13 -4
  120. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  121. package/lib/esm/render/MockRender.d.ts +4 -4
  122. package/lib/esm/render/MockRender.js.map +1 -1
  123. package/lib/esm/render/Pixel.d.ts +13 -4
  124. package/lib/esm/render/Pixel.d.ts.map +1 -1
  125. package/lib/esm/render/Pixel.js +21 -14
  126. package/lib/esm/render/Pixel.js.map +1 -1
  127. package/lib/esm/render/RenderSystem.d.ts +2 -2
  128. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  129. package/lib/esm/render/RenderSystem.js.map +1 -1
  130. package/lib/esm/render/VisibleFeature.js +2 -2
  131. package/lib/esm/render/VisibleFeature.js.map +1 -1
  132. package/lib/esm/render/webgl/BatchState.d.ts +3 -2
  133. package/lib/esm/render/webgl/BatchState.d.ts.map +1 -1
  134. package/lib/esm/render/webgl/BatchState.js +4 -3
  135. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  136. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  137. package/lib/esm/render/webgl/DrawCommand.js +4 -2
  138. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  139. package/lib/esm/render/webgl/FeatureOverrides.d.ts +3 -3
  140. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  141. package/lib/esm/render/webgl/FeatureOverrides.js +24 -28
  142. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  143. package/lib/esm/render/webgl/Graphic.d.ts +3 -3
  144. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  145. package/lib/esm/render/webgl/RenderCommands.js +1 -1
  146. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  147. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  148. package/lib/esm/render/webgl/SceneCompositor.js +14 -5
  149. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  150. package/lib/esm/render/webgl/System.d.ts +2 -2
  151. package/lib/esm/render/webgl/System.js.map +1 -1
  152. package/lib/esm/render/webgl/VisibleTileFeatures.js +7 -8
  153. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  154. package/lib/esm/tile/B3dmReader.d.ts +2 -1
  155. package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
  156. package/lib/esm/tile/B3dmReader.js +2 -1
  157. package/lib/esm/tile/B3dmReader.js.map +1 -1
  158. package/lib/esm/tile/GltfReader.d.ts +13 -420
  159. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  160. package/lib/esm/tile/GltfReader.js +78 -149
  161. package/lib/esm/tile/GltfReader.js.map +1 -1
  162. package/lib/esm/tile/ImdlReader.d.ts +3 -2
  163. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  164. package/lib/esm/tile/ImdlReader.js +35 -26
  165. package/lib/esm/tile/ImdlReader.js.map +1 -1
  166. package/lib/esm/tile/PrimaryTileTree.d.ts +5 -1
  167. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  168. package/lib/esm/tile/PrimaryTileTree.js +2 -0
  169. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  170. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  171. package/lib/esm/tile/RealityTileLoader.js +14 -2
  172. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  173. package/lib/esm/tile/Tile.d.ts +10 -1
  174. package/lib/esm/tile/Tile.d.ts.map +1 -1
  175. package/lib/esm/tile/Tile.js +22 -2
  176. package/lib/esm/tile/Tile.js.map +1 -1
  177. package/package.json +20 -20
@@ -26,7 +26,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
26
26
  return result;
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.GltfGraphicsReader = exports.readGltfGraphics = exports.GltfReader = exports.GltfMeshData = exports.GltfReaderProps = exports.GltfBufferData = exports.GltfWrapMode = exports.GltfDataType = void 0;
29
+ exports.GltfGraphicsReader = exports.readGltfGraphics = exports.GltfReader = exports.GltfMeshData = exports.GltfReaderProps = exports.GltfBufferData = void 0;
30
30
  const core_bentley_1 = require("@itwin/core-bentley");
31
31
  const core_geometry_1 = require("@itwin/core-geometry");
32
32
  const core_common_1 = require("@itwin/core-common");
@@ -38,102 +38,7 @@ const RealityMeshParams_1 = require("../render/RealityMeshParams");
38
38
  const DisplayParams_1 = require("../render/primitives/DisplayParams");
39
39
  const MeshPrimitives_1 = require("../render/primitives/mesh/MeshPrimitives");
40
40
  const Primitives_1 = require("../render/primitives/Primitives");
41
- /* eslint-disable no-restricted-syntax */
42
- /** Enumerates the types of [[GltfMeshPrimitive]] topologies. */
43
- var GltfMeshMode;
44
- (function (GltfMeshMode) {
45
- GltfMeshMode[GltfMeshMode["Points"] = 0] = "Points";
46
- GltfMeshMode[GltfMeshMode["Lines"] = 1] = "Lines";
47
- GltfMeshMode[GltfMeshMode["LineStrip"] = 3] = "LineStrip";
48
- GltfMeshMode[GltfMeshMode["Triangles"] = 4] = "Triangles";
49
- /** Not currently supported. */
50
- GltfMeshMode[GltfMeshMode["TriangleStrip"] = 5] = "TriangleStrip";
51
- /** Not currently supported. */
52
- GltfMeshMode[GltfMeshMode["TriangleFan"] = 6] = "TriangleFan";
53
- })(GltfMeshMode || (GltfMeshMode = {}));
54
- /** Enumerates the basic data types supported by accessors, material values, technique uniforms, etc.
55
- * @internal
56
- */
57
- var GltfDataType;
58
- (function (GltfDataType) {
59
- GltfDataType[GltfDataType["SignedByte"] = 5120] = "SignedByte";
60
- GltfDataType[GltfDataType["UnsignedByte"] = 5121] = "UnsignedByte";
61
- GltfDataType[GltfDataType["SignedShort"] = 5122] = "SignedShort";
62
- GltfDataType[GltfDataType["UnsignedShort"] = 5123] = "UnsignedShort";
63
- GltfDataType[GltfDataType["UInt32"] = 5125] = "UInt32";
64
- GltfDataType[GltfDataType["Float"] = 5126] = "Float";
65
- GltfDataType[GltfDataType["Rgb"] = 6407] = "Rgb";
66
- GltfDataType[GltfDataType["Rgba"] = 6408] = "Rgba";
67
- GltfDataType[GltfDataType["IntVec2"] = 35667] = "IntVec2";
68
- GltfDataType[GltfDataType["IntVec3"] = 35668] = "IntVec3";
69
- GltfDataType[GltfDataType["FloatVec2"] = 35664] = "FloatVec2";
70
- GltfDataType[GltfDataType["FloatVec3"] = 35665] = "FloatVec3";
71
- GltfDataType[GltfDataType["FloatVec4"] = 35666] = "FloatVec4";
72
- GltfDataType[GltfDataType["FloatMat3"] = 35675] = "FloatMat3";
73
- GltfDataType[GltfDataType["FloatMat4"] = 35676] = "FloatMat4";
74
- GltfDataType[GltfDataType["Sampler2d"] = 35678] = "Sampler2d";
75
- })(GltfDataType = exports.GltfDataType || (exports.GltfDataType = {}));
76
- /** @internal */
77
- var GltfMagFilter;
78
- (function (GltfMagFilter) {
79
- GltfMagFilter[GltfMagFilter["Nearest"] = 9728] = "Nearest";
80
- GltfMagFilter[GltfMagFilter["Linear"] = 9729] = "Linear";
81
- })(GltfMagFilter || (GltfMagFilter = {}));
82
- /** @internal */
83
- var GltfMinFilter;
84
- (function (GltfMinFilter) {
85
- GltfMinFilter[GltfMinFilter["Nearest"] = 9728] = "Nearest";
86
- GltfMinFilter[GltfMinFilter["Linear"] = 9729] = "Linear";
87
- GltfMinFilter[GltfMinFilter["NearestMipMapNearest"] = 9984] = "NearestMipMapNearest";
88
- GltfMinFilter[GltfMinFilter["LinearMipMapNearest"] = 9985] = "LinearMipMapNearest";
89
- GltfMinFilter[GltfMinFilter["NearestMipMapLinear"] = 9986] = "NearestMipMapLinear";
90
- GltfMinFilter[GltfMinFilter["LinearMipMapLinear"] = 9987] = "LinearMipMapLinear";
91
- })(GltfMinFilter || (GltfMinFilter = {}));
92
- /** Describes how texture coordinates outside of the range [0..1] are handled.
93
- * @internal
94
- */
95
- var GltfWrapMode;
96
- (function (GltfWrapMode) {
97
- GltfWrapMode[GltfWrapMode["ClampToEdge"] = 33071] = "ClampToEdge";
98
- GltfWrapMode[GltfWrapMode["MirroredRepeat"] = 33648] = "MirroredRepeat";
99
- GltfWrapMode[GltfWrapMode["Repeat"] = 10497] = "Repeat";
100
- })(GltfWrapMode = exports.GltfWrapMode || (exports.GltfWrapMode = {}));
101
- /** Describes the intended target of a [[GltfBufferViewProps]]. */
102
- var GltfBufferTarget;
103
- (function (GltfBufferTarget) {
104
- GltfBufferTarget[GltfBufferTarget["ArrayBuffer"] = 34962] = "ArrayBuffer";
105
- GltfBufferTarget[GltfBufferTarget["ElementArrayBuffer"] = 24963] = "ElementArrayBuffer";
106
- })(GltfBufferTarget || (GltfBufferTarget = {}));
107
- function* dictionaryIterator(dict) {
108
- if (Array.isArray(dict)) {
109
- for (const elem of dict)
110
- yield elem;
111
- }
112
- else {
113
- for (const key of Object.keys(dict)) {
114
- const value = dict[key];
115
- if (undefined !== value)
116
- yield value;
117
- }
118
- }
119
- }
120
- function getNodeMeshIds(node) {
121
- if (undefined !== node.meshes)
122
- return typeof node.meshes === "string" ? [node.meshes] : node.meshes;
123
- else if (undefined !== node.mesh)
124
- return [node.mesh];
125
- return [];
126
- }
127
- /** GL states that can be enabled by a [[GltfTechnique]]. Only those queried by this implementation are enumerated. */
128
- var GltfTechniqueState;
129
- (function (GltfTechniqueState) {
130
- /** Enables alpha blending. */
131
- GltfTechniqueState[GltfTechniqueState["Blend"] = 3042] = "Blend";
132
- })(GltfTechniqueState || (GltfTechniqueState = {}));
133
- function isGltf1Material(material) {
134
- const mat1 = material;
135
- return undefined !== mat1.technique || undefined !== mat1.values;
136
- }
41
+ const GltfSchema_1 = require("../gltf/GltfSchema");
137
42
  /**
138
43
  * A chunk of binary data exposed as a typed array.
139
44
  * The count member indicates how many elements exist. This may be less than this.buffer.length due to padding added to the
@@ -154,15 +59,15 @@ class GltfBufferData {
154
59
  if (expectedType !== actualType) {
155
60
  // Some data is stored in smaller data types to save space if no values exceed the maximum of the smaller type.
156
61
  switch (expectedType) {
157
- case GltfDataType.Float:
158
- case GltfDataType.UnsignedByte:
62
+ case GltfSchema_1.GltfDataType.Float:
63
+ case GltfSchema_1.GltfDataType.UnsignedByte:
159
64
  return undefined;
160
- case GltfDataType.UnsignedShort:
161
- if (GltfDataType.UnsignedByte !== actualType)
65
+ case GltfSchema_1.GltfDataType.UnsignedShort:
66
+ if (GltfSchema_1.GltfDataType.UnsignedByte !== actualType)
162
67
  return undefined;
163
68
  break;
164
- case GltfDataType.UInt32:
165
- if (GltfDataType.UnsignedByte !== actualType && GltfDataType.UnsignedShort !== actualType)
69
+ case GltfSchema_1.GltfDataType.UInt32:
70
+ if (GltfSchema_1.GltfDataType.UnsignedByte !== actualType && GltfSchema_1.GltfDataType.UnsignedShort !== actualType)
166
71
  return undefined;
167
72
  break;
168
73
  }
@@ -174,13 +79,13 @@ class GltfBufferData {
174
79
  // NB: Endianness of typed array data is determined by the 'platform byte order'. Actual data is always little-endian.
175
80
  // We are assuming little-endian platform. If we find a big-endian platform, we'll need to use a DataView instead.
176
81
  switch (actualType) {
177
- case GltfDataType.UnsignedByte:
82
+ case GltfSchema_1.GltfDataType.UnsignedByte:
178
83
  return bytes;
179
- case GltfDataType.UnsignedShort:
84
+ case GltfSchema_1.GltfDataType.UnsignedShort:
180
85
  return new Uint16Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 2);
181
- case GltfDataType.UInt32:
86
+ case GltfSchema_1.GltfDataType.UInt32:
182
87
  return new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);
183
- case GltfDataType.Float:
88
+ case GltfSchema_1.GltfDataType.Float:
184
89
  return new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);
185
90
  default:
186
91
  return undefined;
@@ -320,7 +225,7 @@ function colorFromJson(values) {
320
225
  function colorFromMaterial(material, isTransparent) {
321
226
  var _a, _b, _c, _d, _e;
322
227
  let color = core_common_1.ColorDef.white;
323
- if (isGltf1Material(material)) {
228
+ if ((0, GltfSchema_1.isGltf1Material)(material)) {
324
229
  if (((_a = material.values) === null || _a === void 0 ? void 0 : _a.color) && Array.isArray(material.values.color))
325
230
  color = colorFromJson(material.values.color);
326
231
  }
@@ -375,20 +280,6 @@ class TransformStack {
375
280
  this._stack.pop();
376
281
  }
377
282
  }
378
- function* traverseNodes(ids, nodes, traversed) {
379
- for (const id of ids) {
380
- if (traversed.has(id))
381
- throw new Error("Cycle detected while traversing glTF nodes");
382
- const node = nodes[id];
383
- if (!node)
384
- continue;
385
- traversed.add(id);
386
- yield node;
387
- if (node.children)
388
- for (const child of traverseNodes(node.children, nodes, traversed))
389
- yield child;
390
- }
391
- }
392
283
  function compareTextureKeys(lhs, rhs) {
393
284
  const cmp = (0, core_bentley_1.compareBooleans)(lhs.isTransparent, rhs.isTransparent);
394
285
  if (0 !== cmp)
@@ -414,7 +305,7 @@ class GltfReader {
414
305
  * (We also don't want to produce mip-maps for them, which is determined indirectly from the wrap mode).
415
306
  * Allow the default to be optionally overridden.
416
307
  */
417
- this.defaultWrapMode = GltfWrapMode.Repeat;
308
+ this.defaultWrapMode = GltfSchema_1.GltfWrapMode.Repeat;
418
309
  this._glTF = args.props.glTF;
419
310
  this._version = args.props.version;
420
311
  this._yAxisUp = args.props.yAxisUp;
@@ -463,7 +354,7 @@ class GltfReader {
463
354
  * @throws Error if a node appears more than once during traversal
464
355
  */
465
356
  traverseNodes(nodeIds) {
466
- return traverseNodes(nodeIds, this._nodes, new Set());
357
+ return (0, GltfSchema_1.traverseGltfNodes)(nodeIds, this._nodes, new Set());
467
358
  }
468
359
  /** Traverse the nodes specified by their scene, recursing into their child nodes.
469
360
  * @throws Error if a node appears more than once during traversal
@@ -586,7 +477,7 @@ class GltfReader {
586
477
  let thisBias;
587
478
  if (undefined !== pseudoRtcBias)
588
479
  thisBias = (undefined === thisTransform) ? pseudoRtcBias : thisTransform.matrix.multiplyInverse(pseudoRtcBias);
589
- for (const meshKey of getNodeMeshIds(node)) {
480
+ for (const meshKey of (0, GltfSchema_1.getGltfNodeMeshIds)(node)) {
590
481
  const nodeMesh = this._meshes[meshKey];
591
482
  if (nodeMesh === null || nodeMesh === void 0 ? void 0 : nodeMesh.primitives) {
592
483
  const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias);
@@ -692,14 +583,14 @@ class GltfReader {
692
583
  const type = accessor.componentType;
693
584
  let dataSize = 0;
694
585
  switch (type) {
695
- case GltfDataType.UnsignedByte:
586
+ case GltfSchema_1.GltfDataType.UnsignedByte:
696
587
  dataSize = 1;
697
588
  break;
698
- case GltfDataType.UnsignedShort:
589
+ case GltfSchema_1.GltfDataType.UnsignedShort:
699
590
  dataSize = 2;
700
591
  break;
701
- case GltfDataType.UInt32:
702
- case GltfDataType.Float:
592
+ case GltfSchema_1.GltfDataType.UInt32:
593
+ case GltfSchema_1.GltfDataType.Float:
703
594
  dataSize = 4;
704
595
  break;
705
596
  default:
@@ -726,10 +617,10 @@ class GltfReader {
726
617
  return undefined;
727
618
  }
728
619
  }
729
- readBufferData32(json, accessorName) { return this.readBufferData(json, accessorName, GltfDataType.UInt32); }
730
- readBufferData16(json, accessorName) { return this.readBufferData(json, accessorName, GltfDataType.UnsignedShort); }
731
- readBufferData8(json, accessorName) { return this.readBufferData(json, accessorName, GltfDataType.UnsignedByte); }
732
- readBufferDataFloat(json, accessorName) { return this.readBufferData(json, accessorName, GltfDataType.Float); }
620
+ readBufferData32(json, accessorName) { return this.readBufferData(json, accessorName, GltfSchema_1.GltfDataType.UInt32); }
621
+ readBufferData16(json, accessorName) { return this.readBufferData(json, accessorName, GltfSchema_1.GltfDataType.UnsignedShort); }
622
+ readBufferData8(json, accessorName) { return this.readBufferData(json, accessorName, GltfSchema_1.GltfDataType.UnsignedByte); }
623
+ readBufferDataFloat(json, accessorName) { return this.readBufferData(json, accessorName, GltfSchema_1.GltfDataType.Float); }
733
624
  readBufferData(json, accessorName, type) {
734
625
  const view = this.getBufferView(json, accessorName);
735
626
  return undefined !== view ? view.toBufferData(type) : undefined;
@@ -750,7 +641,7 @@ class GltfReader {
750
641
  if (typeof material !== "object")
751
642
  return undefined;
752
643
  // Bimium's shader value...almost certainly obsolete at this point.
753
- if (isGltf1Material(material))
644
+ if ((0, GltfSchema_1.isGltf1Material)(material))
754
645
  return (_a = material.diffuse) !== null && _a !== void 0 ? _a : this.extractId((_b = material.values) === null || _b === void 0 ? void 0 : _b.tex);
755
646
  // KHR_techniques_webgl extension
756
647
  const techniques = (_d = (_c = this._glTF.extensions) === null || _c === void 0 ? void 0 : _c.KHR_techniques_webgl) === null || _d === void 0 ? void 0 : _d.techniques;
@@ -760,7 +651,7 @@ class GltfReader {
760
651
  if (typeof uniforms === "object") {
761
652
  for (const uniformName of Object.keys(uniforms)) {
762
653
  const uniform = uniforms[uniformName];
763
- if (typeof uniform === "object" && uniform.type === GltfDataType.Sampler2d)
654
+ if (typeof uniform === "object" && uniform.type === GltfSchema_1.GltfDataType.Sampler2d)
764
655
  return this.extractId((_f = ext.values[uniformName]) === null || _f === void 0 ? void 0 : _f.index);
765
656
  }
766
657
  }
@@ -772,16 +663,16 @@ class GltfReader {
772
663
  var _a;
773
664
  if (typeof material !== "object")
774
665
  return undefined;
775
- if (isGltf1Material(material))
666
+ if ((0, GltfSchema_1.isGltf1Material)(material))
776
667
  return undefined;
777
668
  return this.extractId((_a = material.normalTexture) === null || _a === void 0 ? void 0 : _a.index);
778
669
  }
779
670
  isMaterialTransparent(material) {
780
671
  var _a, _b;
781
- if (isGltf1Material(material)) {
672
+ if ((0, GltfSchema_1.isGltf1Material)(material)) {
782
673
  if (this._glTF.techniques && undefined !== material.technique) {
783
674
  const technique = this._glTF.techniques[material.technique];
784
- if ((_b = (_a = technique === null || technique === void 0 ? void 0 : technique.states) === null || _a === void 0 ? void 0 : _a.enable) === null || _b === void 0 ? void 0 : _b.some((state) => state === GltfTechniqueState.Blend))
675
+ if ((_b = (_a = technique === null || technique === void 0 ? void 0 : technique.states) === null || _a === void 0 ? void 0 : _a.enable) === null || _b === void 0 ? void 0 : _b.some((state) => state === GltfSchema_1.GltfTechniqueState.Blend))
785
676
  return true;
786
677
  }
787
678
  return false;
@@ -807,7 +698,7 @@ class GltfReader {
807
698
  }
808
699
  readMeshPrimitives(node, featureTable, thisTransform, thisBias) {
809
700
  const meshes = [];
810
- for (const meshKey of getNodeMeshIds(node)) {
701
+ for (const meshKey of (0, GltfSchema_1.getGltfNodeMeshIds)(node)) {
811
702
  const nodeMesh = this._meshes[meshKey];
812
703
  if (nodeMesh === null || nodeMesh === void 0 ? void 0 : nodeMesh.primitives) {
813
704
  for (const primitive of nodeMesh.primitives) {
@@ -836,15 +727,15 @@ class GltfReader {
836
727
  if (!displayParams)
837
728
  return undefined;
838
729
  let primitiveType = -1;
839
- const meshMode = core_bentley_1.JsonUtils.asInt(primitive.mode, GltfMeshMode.Triangles);
730
+ const meshMode = core_bentley_1.JsonUtils.asInt(primitive.mode, GltfSchema_1.GltfMeshMode.Triangles);
840
731
  switch (meshMode) {
841
- case GltfMeshMode.Lines:
732
+ case GltfSchema_1.GltfMeshMode.Lines:
842
733
  primitiveType = MeshPrimitives_1.Mesh.PrimitiveType.Polyline;
843
734
  break;
844
- case GltfMeshMode.Points:
735
+ case GltfSchema_1.GltfMeshMode.Points:
845
736
  primitiveType = MeshPrimitives_1.Mesh.PrimitiveType.Point;
846
737
  break;
847
- case GltfMeshMode.Triangles:
738
+ case GltfSchema_1.GltfMeshMode.Triangles:
848
739
  primitiveType = MeshPrimitives_1.Mesh.PrimitiveType.Mesh;
849
740
  break;
850
741
  default:
@@ -864,30 +755,43 @@ class GltfReader {
864
755
  quantizePositions: true,
865
756
  });
866
757
  const mesh = new GltfMeshData(meshPrimitive);
867
- // We don't have real colormap - just load material color. This will be used if non-Bentley
868
- // tile or fit the color table is uniform. For a non-Bentley, non-Uniform, we'll set the
869
- // uv parameters to pick the colors out of the color map texture.
870
- meshPrimitive.colorMap.insert(displayParams.fillColor.tbgr); // White...
871
- const colorIndices = this.readBufferData16(primitive.attributes, "_COLORINDEX");
872
- if (undefined !== colorIndices && material) {
873
- let texStep;
874
- if (isGltf1Material(material))
875
- texStep = (_b = material.values) === null || _b === void 0 ? void 0 : _b.texStep;
876
- else
877
- texStep = (_e = (_d = (_c = material.extensions) === null || _c === void 0 ? void 0 : _c.KHR_techniques_webgl) === null || _d === void 0 ? void 0 : _d.values) === null || _e === void 0 ? void 0 : _e.u_texStep;
878
- if (texStep) {
879
- const uvParams = [];
880
- for (let i = 0; i < colorIndices.count; i++)
881
- uvParams.push(new core_geometry_1.Point2d(texStep[1] + texStep[0] * colorIndices.buffer[i], .5));
882
- const paramList = core_common_1.QPoint2dList.fromPoints(uvParams);
883
- mesh.uvs = paramList.toTypedArray();
884
- mesh.uvQParams = paramList.params;
758
+ // ###TODO_GLTF: There can be more than one color attribute; COLOR_0 might not be the one we want.
759
+ if (!this.readColors(mesh, primitive.attributes, "COLOR_0")) {
760
+ // We don't have real colormap - just load material color. This will be used if non-Bentley
761
+ // tile or fit the color table is uniform. For a non-Bentley, non-Uniform, we'll set the
762
+ // uv parameters to pick the colors out of the color map texture.
763
+ meshPrimitive.colorMap.insert(displayParams.fillColor.tbgr); // White...
764
+ // _COLORINDEX is an ancient holdover from glTF 1.0 and Bimium...unlikely to actually encounter it in the wild.
765
+ const colorIndices = this.readBufferData16(primitive.attributes, "_COLORINDEX");
766
+ if (undefined !== colorIndices && material) {
767
+ let texStep;
768
+ if ((0, GltfSchema_1.isGltf1Material)(material))
769
+ texStep = (_b = material.values) === null || _b === void 0 ? void 0 : _b.texStep;
770
+ else
771
+ texStep = (_e = (_d = (_c = material.extensions) === null || _c === void 0 ? void 0 : _c.KHR_techniques_webgl) === null || _d === void 0 ? void 0 : _d.values) === null || _e === void 0 ? void 0 : _e.u_texStep;
772
+ if (texStep) {
773
+ const uvParams = [];
774
+ for (let i = 0; i < colorIndices.count; i++)
775
+ uvParams.push(new core_geometry_1.Point2d(texStep[1] + texStep[0] * colorIndices.buffer[i], .5));
776
+ const paramList = core_common_1.QPoint2dList.fromPoints(uvParams);
777
+ mesh.uvs = paramList.toTypedArray();
778
+ mesh.uvQParams = paramList.params;
779
+ }
885
780
  }
886
781
  }
887
782
  const draco = (_f = primitive.extensions) === null || _f === void 0 ? void 0 : _f.KHR_draco_mesh_compression;
888
783
  if (draco)
889
784
  return this.readDracoMeshPrimitive(mesh.primitive, draco) ? mesh : undefined;
890
785
  this.readBatchTable(mesh.primitive, primitive);
786
+ if (mesh.primitive.features) {
787
+ const features = this.readPrimitiveFeatures(primitive);
788
+ if (features) {
789
+ if (features instanceof core_common_1.Feature)
790
+ mesh.primitive.features.add(features, 1);
791
+ else
792
+ mesh.primitive.features.setIndices(features);
793
+ }
794
+ }
891
795
  if (!this.readVertices(mesh, primitive, pseudoRtcBias))
892
796
  return undefined;
893
797
  switch (primitiveType) {
@@ -898,7 +802,7 @@ class GltfReader {
898
802
  return undefined;
899
803
  if (!mesh.uvs) {
900
804
  let texCoordIndex = 0;
901
- if (!isGltf1Material(material) && undefined !== ((_h = (_g = material.pbrMetallicRoughness) === null || _g === void 0 ? void 0 : _g.baseColorTexture) === null || _h === void 0 ? void 0 : _h.texCoord))
805
+ if (!(0, GltfSchema_1.isGltf1Material)(material) && undefined !== ((_h = (_g = material.pbrMetallicRoughness) === null || _g === void 0 ? void 0 : _g.baseColorTexture) === null || _h === void 0 ? void 0 : _h.texCoord))
902
806
  texCoordIndex = core_bentley_1.JsonUtils.asInt(material.pbrMetallicRoughness.baseColorTexture.texCoord);
903
807
  this.readUVParams(mesh, primitive.attributes, `TEXCOORD_${texCoordIndex}`);
904
808
  }
@@ -1025,11 +929,12 @@ class GltfReader {
1025
929
  * capacity of 32 bit integers. This is essentially an ad hoc RTC applied at read time.
1026
930
  */
1027
931
  readVertices(mesh, primitive, pseudoRtcBias) {
932
+ var _a;
1028
933
  const view = this.getBufferView(primitive.attributes, "POSITION");
1029
934
  if (undefined === view)
1030
935
  return false;
1031
- if (GltfDataType.Float === view.type) {
1032
- const buffer = view.toBufferData(GltfDataType.Float);
936
+ if (GltfSchema_1.GltfDataType.Float === view.type) {
937
+ const buffer = view.toBufferData(GltfSchema_1.GltfDataType.Float);
1033
938
  if (undefined === buffer)
1034
939
  return false;
1035
940
  const strideSkip = view.stride - 3;
@@ -1048,17 +953,15 @@ class GltfReader {
1048
953
  mesh.points = positions.toTypedArray();
1049
954
  }
1050
955
  else {
1051
- if (GltfDataType.UnsignedShort !== view.type)
956
+ if (GltfSchema_1.GltfDataType.UnsignedShort !== view.type)
1052
957
  return false;
1053
- const extensions = core_bentley_1.JsonUtils.asObject(view.accessor.extensions);
1054
- const quantized = undefined !== extensions ? core_bentley_1.JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;
1055
- if (undefined === quantized)
958
+ const quantized = (_a = view.accessor.extensions) === null || _a === void 0 ? void 0 : _a.WEB3D_quantized_attributes;
959
+ const rangeMin = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMin;
960
+ const rangeMax = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMax;
961
+ if (!rangeMin || !rangeMax) // required by spec...
1056
962
  return false;
1057
- const rangeMin = core_bentley_1.JsonUtils.asArray(quantized.decodedMin);
1058
- const rangeMax = core_bentley_1.JsonUtils.asArray(quantized.decodedMax);
1059
- if (undefined === rangeMin || undefined === rangeMax)
1060
- return false;
1061
- const buffer = view.toBufferData(GltfDataType.UnsignedShort);
963
+ // ###TODO apply WEB3D_quantized_attributes.decodeMatrix? Have not encountered in the wild; glTF 1.0 only.
964
+ const buffer = view.toBufferData(GltfSchema_1.GltfDataType.UnsignedShort);
1062
965
  if (undefined === buffer || !(buffer.buffer instanceof Uint16Array))
1063
966
  return false;
1064
967
  (0, core_bentley_1.assert)(buffer.buffer instanceof Uint16Array);
@@ -1094,6 +997,9 @@ class GltfReader {
1094
997
  }
1095
998
  readBatchTable(_mesh, _json) {
1096
999
  }
1000
+ readPrimitiveFeatures(_primitive) {
1001
+ return undefined;
1002
+ }
1097
1003
  readMeshIndices(mesh, json) {
1098
1004
  var _a;
1099
1005
  if (undefined !== json.indices) {
@@ -1118,8 +1024,8 @@ class GltfReader {
1118
1024
  if (undefined === view)
1119
1025
  return false;
1120
1026
  switch (view.type) {
1121
- case GltfDataType.Float: {
1122
- const data = view.toBufferData(GltfDataType.Float);
1027
+ case GltfSchema_1.GltfDataType.Float: {
1028
+ const data = view.toBufferData(GltfSchema_1.GltfDataType.Float);
1123
1029
  if (undefined === data)
1124
1030
  return false;
1125
1031
  mesh.normals = new Uint16Array(data.count);
@@ -1131,8 +1037,8 @@ class GltfReader {
1131
1037
  }
1132
1038
  return true;
1133
1039
  }
1134
- case GltfDataType.UnsignedByte: {
1135
- const data = view.toBufferData(GltfDataType.UnsignedByte);
1040
+ case GltfSchema_1.GltfDataType.UnsignedByte: {
1041
+ const data = view.toBufferData(GltfSchema_1.GltfDataType.UnsignedByte);
1136
1042
  if (undefined === data)
1137
1043
  return false;
1138
1044
  // ###TODO: we shouldn't have to allocate OctEncodedNormal objects...just use uint16s / numbers...
@@ -1149,12 +1055,34 @@ class GltfReader {
1149
1055
  return false;
1150
1056
  }
1151
1057
  }
1058
+ readColors(mesh, attribute, accessorName) {
1059
+ const view = this.getBufferView(attribute, accessorName);
1060
+ if (!view || (GltfSchema_1.GltfDataType.Float !== view.type && GltfSchema_1.GltfDataType.UnsignedByte !== view.type && GltfSchema_1.GltfDataType.SignedByte !== view.type))
1061
+ return false;
1062
+ const data = view.toBufferData(view.type);
1063
+ if (!data)
1064
+ return false;
1065
+ const hasAlpha = "VEC4" === view.accessor.type;
1066
+ const factor = view.type === GltfSchema_1.GltfDataType.Float ? 255 : 1;
1067
+ const rgbt = new Uint8Array(4);
1068
+ const color = new Uint32Array(rgbt.buffer);
1069
+ for (let i = 0; i < data.count; i++) {
1070
+ const index = view.stride * i;
1071
+ rgbt[0] = data.buffer[index] * factor;
1072
+ rgbt[1] = data.buffer[index + 1] * factor;
1073
+ rgbt[2] = data.buffer[index + 2] * factor;
1074
+ rgbt[3] = hasAlpha ? (255 - data.buffer[index + 3] * factor) : 0;
1075
+ mesh.primitive.colors.push(mesh.primitive.colorMap.insert(color[0]));
1076
+ }
1077
+ return true;
1078
+ }
1152
1079
  readUVParams(mesh, json, accessorName) {
1080
+ var _a;
1153
1081
  const view = this.getBufferView(json, accessorName);
1154
1082
  if (view === undefined)
1155
1083
  return false;
1156
1084
  switch (view.type) {
1157
- case GltfDataType.Float: {
1085
+ case GltfSchema_1.GltfDataType.Float: {
1158
1086
  const data = this.readBufferDataFloat(json, accessorName);
1159
1087
  if (!data)
1160
1088
  return false;
@@ -1172,16 +1100,13 @@ class GltfReader {
1172
1100
  }
1173
1101
  return true;
1174
1102
  }
1175
- case GltfDataType.UnsignedShort: {
1176
- const extensions = core_bentley_1.JsonUtils.asObject(view.accessor.extensions);
1177
- const quantized = undefined !== extensions ? core_bentley_1.JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;
1178
- if (undefined === quantized)
1179
- return false;
1180
- const rangeMin = core_bentley_1.JsonUtils.asArray(quantized.decodedMin);
1181
- const rangeMax = core_bentley_1.JsonUtils.asArray(quantized.decodedMax);
1103
+ case GltfSchema_1.GltfDataType.UnsignedShort: {
1104
+ const quantized = (_a = view.accessor.extensions) === null || _a === void 0 ? void 0 : _a.WEB3D_quantized_attributes;
1105
+ const rangeMin = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMin;
1106
+ const rangeMax = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMax;
1182
1107
  if (undefined === rangeMin || undefined === rangeMax)
1183
1108
  return false;
1184
- const qData = view.toBufferData(GltfDataType.UnsignedShort);
1109
+ const qData = view.toBufferData(GltfSchema_1.GltfDataType.UnsignedShort);
1185
1110
  if (undefined === qData || !(qData.buffer instanceof Uint16Array))
1186
1111
  return false;
1187
1112
  mesh.uvRange = core_geometry_1.Range2d.createXYXY(rangeMin[0], rangeMin[1], rangeMax[0], rangeMax[1]);
@@ -1239,7 +1164,7 @@ class GltfReader {
1239
1164
  // If any meshes are draco-compressed, dynamically load the decoder module and then decode the meshes.
1240
1165
  const dracoMeshes = [];
1241
1166
  for (const node of this.traverseScene()) {
1242
- for (const meshId of getNodeMeshIds(node)) {
1167
+ for (const meshId of (0, GltfSchema_1.getGltfNodeMeshIds)(node)) {
1243
1168
  const mesh = this._meshes[meshId];
1244
1169
  if (mesh === null || mesh === void 0 ? void 0 : mesh.primitives)
1245
1170
  for (const primitive of mesh.primitives)
@@ -1263,14 +1188,14 @@ class GltfReader {
1263
1188
  // be required for the scene.
1264
1189
  const promises = [];
1265
1190
  try {
1266
- for (const buffer of dictionaryIterator(this._buffers))
1191
+ for (const buffer of (0, GltfSchema_1.gltfDictionaryIterator)(this._buffers))
1267
1192
  if (!buffer.resolvedBuffer)
1268
1193
  promises.push(this.resolveBuffer(buffer));
1269
1194
  await Promise.all(promises);
1270
1195
  if (this._isCanceled)
1271
1196
  return;
1272
1197
  promises.length = 0;
1273
- for (const image of dictionaryIterator(this._images))
1198
+ for (const image of (0, GltfSchema_1.gltfDictionaryIterator)(this._images))
1274
1199
  if (!image.resolvedImage)
1275
1200
  promises.push(this.resolveImage(image));
1276
1201
  await Promise.all(promises);
@@ -1293,8 +1218,11 @@ class GltfReader {
1293
1218
  this._dracoMeshes.set(ext, mesh);
1294
1219
  }
1295
1220
  resolveUrl(uri) {
1221
+ var _a, _b;
1296
1222
  try {
1297
- return new URL(uri, this._baseUrl).toString();
1223
+ const resolved = new URL(uri, this._baseUrl);
1224
+ resolved.search = (_b = (_a = this._baseUrl) === null || _a === void 0 ? void 0 : _a.search) !== null && _b !== void 0 ? _b : "";
1225
+ return resolved.toString();
1298
1226
  }
1299
1227
  catch (_) {
1300
1228
  return undefined;
@@ -1356,7 +1284,7 @@ class GltfReader {
1356
1284
  let wrapT = sampler === null || sampler === void 0 ? void 0 : sampler.wrapT;
1357
1285
  if (undefined === wrapS && undefined === wrapT)
1358
1286
  wrapS = wrapT = this.defaultWrapMode;
1359
- if (GltfWrapMode.ClampToEdge === wrapS || GltfWrapMode.ClampToEdge === wrapT)
1287
+ if (GltfSchema_1.GltfWrapMode.ClampToEdge === wrapS || GltfSchema_1.GltfWrapMode.ClampToEdge === wrapT)
1360
1288
  return core_common_1.RenderTexture.Type.TileSection;
1361
1289
  return core_common_1.RenderTexture.Type.Normal;
1362
1290
  }
@@ -1426,7 +1354,8 @@ exports.GltfReader = GltfReader;
1426
1354
  * @public
1427
1355
  */
1428
1356
  async function readGltfGraphics(args) {
1429
- const props = GltfReaderProps.create(args.gltf, true, args.baseUrl); // glTF supports exactly one coordinate system with y axis up.
1357
+ const baseUrl = typeof args.baseUrl === "string" ? new URL(args.baseUrl) : args.baseUrl;
1358
+ const props = GltfReaderProps.create(args.gltf, true, baseUrl); // glTF supports exactly one coordinate system with y axis up.
1430
1359
  const reader = props ? new GltfGraphicsReader(props, args) : undefined;
1431
1360
  if (!reader)
1432
1361
  return undefined;