@loaders.gl/gltf 4.0.0-alpha.4 → 4.0.0-alpha.5

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 (98) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/dist.min.js +4541 -0
  4. package/dist/glb-loader.d.ts +13 -0
  5. package/dist/glb-loader.d.ts.map +1 -0
  6. package/dist/glb-writer.d.ts +22 -0
  7. package/dist/glb-writer.d.ts.map +1 -0
  8. package/dist/gltf-loader.d.ts +18 -0
  9. package/dist/gltf-loader.d.ts.map +1 -0
  10. package/dist/gltf-writer.d.ts +25 -0
  11. package/dist/gltf-writer.d.ts.map +1 -0
  12. package/dist/index.d.ts +11 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/api/gltf-extensions.d.ts +26 -0
  16. package/dist/lib/api/gltf-extensions.d.ts.map +1 -0
  17. package/dist/lib/api/gltf-scenegraph.d.ts +183 -0
  18. package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -0
  19. package/dist/lib/api/gltf-scenegraph.js.map +1 -1
  20. package/dist/lib/api/normalize-gltf-v1.d.ts +2 -0
  21. package/dist/lib/api/normalize-gltf-v1.d.ts.map +1 -0
  22. package/dist/lib/api/normalize-gltf-v1.js +6 -3
  23. package/dist/lib/api/normalize-gltf-v1.js.map +1 -1
  24. package/dist/lib/api/post-process-gltf.d.ts +2 -0
  25. package/dist/lib/api/post-process-gltf.d.ts.map +1 -0
  26. package/dist/lib/api/post-process-gltf.js +37 -7
  27. package/dist/lib/api/post-process-gltf.js.map +1 -1
  28. package/dist/lib/encoders/encode-glb.d.ts +2 -0
  29. package/dist/lib/encoders/encode-glb.d.ts.map +1 -0
  30. package/dist/lib/encoders/encode-glb.js.map +1 -1
  31. package/dist/lib/encoders/encode-gltf.d.ts +2 -0
  32. package/dist/lib/encoders/encode-gltf.d.ts.map +1 -0
  33. package/dist/lib/encoders/encode-gltf.js.map +1 -1
  34. package/dist/lib/extensions/EXT_meshopt_compression.d.ts +10 -0
  35. package/dist/lib/extensions/EXT_meshopt_compression.d.ts.map +1 -0
  36. package/dist/lib/extensions/EXT_texture_webp.d.ts +12 -0
  37. package/dist/lib/extensions/EXT_texture_webp.d.ts.map +1 -0
  38. package/dist/lib/extensions/KHR_binary_gltf.d.ts +7 -0
  39. package/dist/lib/extensions/KHR_binary_gltf.d.ts.map +1 -0
  40. package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts +13 -0
  41. package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -0
  42. package/dist/lib/extensions/KHR_texture_basisu.d.ts +12 -0
  43. package/dist/lib/extensions/KHR_texture_basisu.d.ts.map +1 -0
  44. package/dist/lib/extensions/KHR_texture_basisu.js.map +1 -1
  45. package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts +7 -0
  46. package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts.map +1 -0
  47. package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts +7 -0
  48. package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts.map +1 -0
  49. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts +7 -0
  50. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -0
  51. package/dist/lib/gltf-utils/get-typed-array.d.ts +3 -0
  52. package/dist/lib/gltf-utils/get-typed-array.d.ts.map +1 -0
  53. package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts +6 -0
  54. package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts.map +1 -0
  55. package/dist/lib/gltf-utils/gltf-constants.d.ts +4 -0
  56. package/dist/lib/gltf-utils/gltf-constants.d.ts.map +1 -0
  57. package/dist/lib/gltf-utils/gltf-utils.d.ts +8 -0
  58. package/dist/lib/gltf-utils/gltf-utils.d.ts.map +1 -0
  59. package/dist/lib/gltf-utils/resolve-url.d.ts +2 -0
  60. package/dist/lib/gltf-utils/resolve-url.d.ts.map +1 -0
  61. package/dist/lib/parsers/parse-glb.d.ts +8 -0
  62. package/dist/lib/parsers/parse-glb.d.ts.map +1 -0
  63. package/dist/lib/parsers/parse-gltf.d.ts +14 -0
  64. package/dist/lib/parsers/parse-gltf.d.ts.map +1 -0
  65. package/dist/lib/parsers/parse-gltf.js +2 -2
  66. package/dist/lib/parsers/parse-gltf.js.map +1 -1
  67. package/dist/lib/types/glb-types.d.ts +17 -0
  68. package/dist/lib/types/glb-types.d.ts.map +1 -0
  69. package/dist/lib/types/gltf-json-schema.d.ts +720 -0
  70. package/dist/lib/types/gltf-json-schema.d.ts.map +1 -0
  71. package/dist/lib/types/gltf-postprocessed-schema.d.ts +686 -0
  72. package/dist/lib/types/gltf-postprocessed-schema.d.ts.map +1 -0
  73. package/dist/lib/types/gltf-types.d.ts +11 -0
  74. package/dist/lib/types/gltf-types.d.ts.map +1 -0
  75. package/dist/lib/utils/assert.d.ts +2 -0
  76. package/dist/lib/utils/assert.d.ts.map +1 -0
  77. package/dist/lib/utils/assert.js.map +1 -1
  78. package/dist/lib/utils/version.d.ts +2 -0
  79. package/dist/lib/utils/version.d.ts.map +1 -0
  80. package/dist/lib/utils/version.js +1 -1
  81. package/dist/lib/utils/version.js.map +1 -1
  82. package/dist/meshopt/meshopt-decoder.d.ts +6 -0
  83. package/dist/meshopt/meshopt-decoder.d.ts.map +1 -0
  84. package/dist/webp/webp.d.ts +7 -0
  85. package/dist/webp/webp.d.ts.map +1 -0
  86. package/package.json +8 -11
  87. package/src/index.ts +1 -0
  88. package/src/lib/api/gltf-scenegraph.ts +2 -2
  89. package/src/lib/api/{normalize-gltf-v1.js → normalize-gltf-v1.ts} +18 -16
  90. package/src/lib/api/{post-process-gltf.js → post-process-gltf.ts} +52 -9
  91. package/src/lib/encoders/{encode-glb.js → encode-glb.ts} +0 -0
  92. package/src/lib/encoders/{encode-gltf.js → encode-gltf.ts} +0 -0
  93. package/src/lib/extensions/KHR_texture_basisu.ts +2 -2
  94. package/src/lib/parsers/parse-gltf.ts +2 -2
  95. package/src/lib/types/gltf-postprocessed-schema.ts +3 -2
  96. package/src/lib/types/gltf-types.ts +4 -1
  97. package/src/lib/utils/{assert.js → assert.ts} +1 -1
  98. /package/src/lib/utils/{version.js → version.ts} +0 -0
@@ -0,0 +1,4541 @@
1
+ (() => {
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
9
+ var __esm = (fn, res) => function __init() {
10
+ return fn && (res = (0, fn[Object.keys(fn)[0]])(fn = 0)), res;
11
+ };
12
+ var __commonJS = (cb, mod) => function __require() {
13
+ return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
14
+ };
15
+ var __export = (target, all) => {
16
+ __markAsModule(target);
17
+ for (var name8 in all)
18
+ __defProp(target, name8, { get: all[name8], enumerable: true });
19
+ };
20
+ var __reExport = (target, module, desc) => {
21
+ if (module && typeof module === "object" || typeof module === "function") {
22
+ for (let key of __getOwnPropNames(module))
23
+ if (!__hasOwnProp.call(target, key) && key !== "default")
24
+ __defProp(target, key, { get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable });
25
+ }
26
+ return target;
27
+ };
28
+ var __toModule = (module) => {
29
+ return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
30
+ };
31
+
32
+ // src/lib/utils/version.ts
33
+ var VERSION;
34
+ var init_version = __esm({
35
+ "src/lib/utils/version.ts"() {
36
+ VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
37
+ }
38
+ });
39
+
40
+ // ../textures/src/lib/utils/version.ts
41
+ var VERSION2;
42
+ var init_version2 = __esm({
43
+ "../textures/src/lib/utils/version.ts"() {
44
+ VERSION2 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
45
+ }
46
+ });
47
+
48
+ // ../worker-utils/src/lib/env-utils/version.ts
49
+ var DEFAULT_VERSION, VERSION3;
50
+ var init_version3 = __esm({
51
+ "../worker-utils/src/lib/env-utils/version.ts"() {
52
+ DEFAULT_VERSION = "beta";
53
+ VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : DEFAULT_VERSION;
54
+ if (typeof __VERSION__ === "undefined") {
55
+ console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
56
+ }
57
+ }
58
+ });
59
+
60
+ // ../worker-utils/src/lib/env-utils/assert.ts
61
+ function assert(condition, message) {
62
+ if (!condition) {
63
+ throw new Error(message || "loaders.gl assertion failed.");
64
+ }
65
+ }
66
+ var init_assert = __esm({
67
+ "../worker-utils/src/lib/env-utils/assert.ts"() {
68
+ }
69
+ });
70
+
71
+ // ../worker-utils/src/lib/env-utils/globals.ts
72
+ var globals, self_, window_, global_, document_, isBrowser, isWorker, isMobile, matches, nodeVersion;
73
+ var init_globals = __esm({
74
+ "../worker-utils/src/lib/env-utils/globals.ts"() {
75
+ globals = {
76
+ self: typeof self !== "undefined" && self,
77
+ window: typeof window !== "undefined" && window,
78
+ global: typeof global !== "undefined" && global,
79
+ document: typeof document !== "undefined" && document
80
+ };
81
+ self_ = globals.self || globals.window || globals.global || {};
82
+ window_ = globals.window || globals.self || globals.global || {};
83
+ global_ = globals.global || globals.self || globals.window || {};
84
+ document_ = globals.document || {};
85
+ isBrowser = typeof process !== "object" || String(process) !== "[object process]" || process.browser;
86
+ isWorker = typeof importScripts === "function";
87
+ isMobile = typeof window !== "undefined" && typeof window.orientation !== "undefined";
88
+ matches = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
89
+ nodeVersion = matches && parseFloat(matches[1]) || 0;
90
+ }
91
+ });
92
+
93
+ // (disabled):../worker-utils/src/lib/node/require-utils.node
94
+ var require_require_utils = __commonJS({
95
+ "(disabled):../worker-utils/src/lib/node/require-utils.node"() {
96
+ }
97
+ });
98
+
99
+ // ../worker-utils/src/lib/library-utils/library-utils.ts
100
+ async function loadLibrary(libraryUrl, moduleName = null, options = {}) {
101
+ if (moduleName) {
102
+ libraryUrl = getLibraryUrl(libraryUrl, moduleName, options);
103
+ }
104
+ loadLibraryPromises[libraryUrl] = loadLibraryPromises[libraryUrl] || loadLibraryFromFile(libraryUrl);
105
+ return await loadLibraryPromises[libraryUrl];
106
+ }
107
+ function getLibraryUrl(library, moduleName, options) {
108
+ if (library.startsWith("http")) {
109
+ return library;
110
+ }
111
+ const modules = options.modules || {};
112
+ if (modules[library]) {
113
+ return modules[library];
114
+ }
115
+ if (!isBrowser) {
116
+ return `modules/${moduleName}/dist/libs/${library}`;
117
+ }
118
+ if (options.CDN) {
119
+ assert(options.CDN.startsWith("http"));
120
+ return `${options.CDN}/${moduleName}@${VERSION4}/dist/libs/${library}`;
121
+ }
122
+ if (isWorker) {
123
+ return `../src/libs/${library}`;
124
+ }
125
+ return `modules/${moduleName}/src/libs/${library}`;
126
+ }
127
+ async function loadLibraryFromFile(libraryUrl) {
128
+ if (libraryUrl.endsWith("wasm")) {
129
+ const response2 = await fetch(libraryUrl);
130
+ return await response2.arrayBuffer();
131
+ }
132
+ if (!isBrowser) {
133
+ try {
134
+ return node && node.requireFromFile && await node.requireFromFile(libraryUrl);
135
+ } catch {
136
+ return null;
137
+ }
138
+ }
139
+ if (isWorker) {
140
+ return importScripts(libraryUrl);
141
+ }
142
+ const response = await fetch(libraryUrl);
143
+ const scriptSource = await response.text();
144
+ return loadLibraryFromString(scriptSource, libraryUrl);
145
+ }
146
+ function loadLibraryFromString(scriptSource, id) {
147
+ if (!isBrowser) {
148
+ return node.requireFromString && node.requireFromString(scriptSource, id);
149
+ }
150
+ if (isWorker) {
151
+ eval.call(global_, scriptSource);
152
+ return null;
153
+ }
154
+ const script = document.createElement("script");
155
+ script.id = id;
156
+ try {
157
+ script.appendChild(document.createTextNode(scriptSource));
158
+ } catch (e) {
159
+ script.text = scriptSource;
160
+ }
161
+ document.body.appendChild(script);
162
+ return null;
163
+ }
164
+ var node, LATEST, VERSION4, loadLibraryPromises;
165
+ var init_library_utils = __esm({
166
+ "../worker-utils/src/lib/library-utils/library-utils.ts"() {
167
+ init_globals();
168
+ node = __toModule(require_require_utils());
169
+ init_assert();
170
+ init_version3();
171
+ LATEST = "beta";
172
+ VERSION4 = typeof VERSION3 !== "undefined" ? VERSION3 : LATEST;
173
+ loadLibraryPromises = {};
174
+ }
175
+ });
176
+
177
+ // ../worker-utils/src/index.ts
178
+ var init_src = __esm({
179
+ "../worker-utils/src/index.ts"() {
180
+ init_library_utils();
181
+ }
182
+ });
183
+
184
+ // ../textures/src/lib/parsers/basis-module-loader.ts
185
+ async function loadBasisTrascoderModule(options) {
186
+ const modules = options.modules || {};
187
+ if (modules.basis) {
188
+ return modules.basis;
189
+ }
190
+ loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTrascoder(options);
191
+ return await loadBasisTranscoderPromise;
192
+ }
193
+ async function loadBasisTrascoder(options) {
194
+ let BASIS = null;
195
+ let wasmBinary = null;
196
+ [BASIS, wasmBinary] = await Promise.all([
197
+ await loadLibrary("basis_transcoder.js", "textures", options),
198
+ await loadLibrary("basis_transcoder.wasm", "textures", options)
199
+ ]);
200
+ BASIS = BASIS || globalThis.BASIS;
201
+ return await initializeBasisTrascoderModule(BASIS, wasmBinary);
202
+ }
203
+ function initializeBasisTrascoderModule(BasisModule, wasmBinary) {
204
+ const options = {};
205
+ if (wasmBinary) {
206
+ options.wasmBinary = wasmBinary;
207
+ }
208
+ return new Promise((resolve) => {
209
+ BasisModule(options).then((module) => {
210
+ const { BasisFile, initializeBasis } = module;
211
+ initializeBasis();
212
+ resolve({ BasisFile });
213
+ });
214
+ });
215
+ }
216
+ async function loadBasisEncoderModule(options) {
217
+ const modules = options.modules || {};
218
+ if (modules.basisEncoder) {
219
+ return modules.basisEncoder;
220
+ }
221
+ loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);
222
+ return await loadBasisEncoderPromise;
223
+ }
224
+ async function loadBasisEncoder(options) {
225
+ let BASIS_ENCODER = null;
226
+ let wasmBinary = null;
227
+ [BASIS_ENCODER, wasmBinary] = await Promise.all([
228
+ await loadLibrary(BASIS_CDN_ENCODER_JS, "textures", options),
229
+ await loadLibrary(BASIS_CDN_ENCODER_WASM, "textures", options)
230
+ ]);
231
+ BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;
232
+ return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);
233
+ }
234
+ function initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {
235
+ const options = {};
236
+ if (wasmBinary) {
237
+ options.wasmBinary = wasmBinary;
238
+ }
239
+ return new Promise((resolve) => {
240
+ BasisEncoderModule(options).then((module) => {
241
+ const { BasisFile, KTX2File, initializeBasis, BasisEncoder } = module;
242
+ initializeBasis();
243
+ resolve({ BasisFile, KTX2File, BasisEncoder });
244
+ });
245
+ });
246
+ }
247
+ var VERSION5, BASIS_CDN_ENCODER_WASM, BASIS_CDN_ENCODER_JS, loadBasisTranscoderPromise, loadBasisEncoderPromise;
248
+ var init_basis_module_loader = __esm({
249
+ "../textures/src/lib/parsers/basis-module-loader.ts"() {
250
+ init_src();
251
+ VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
252
+ BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION5}/dist/libs/basis_encoder.wasm`;
253
+ BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION5}/dist/libs/basis_encoder.js`;
254
+ }
255
+ });
256
+
257
+ // ../textures/src/lib/gl-extensions.ts
258
+ var GL_EXTENSIONS_CONSTANTS;
259
+ var init_gl_extensions = __esm({
260
+ "../textures/src/lib/gl-extensions.ts"() {
261
+ GL_EXTENSIONS_CONSTANTS = {
262
+ COMPRESSED_RGB_S3TC_DXT1_EXT: 33776,
263
+ COMPRESSED_RGBA_S3TC_DXT1_EXT: 33777,
264
+ COMPRESSED_RGBA_S3TC_DXT3_EXT: 33778,
265
+ COMPRESSED_RGBA_S3TC_DXT5_EXT: 33779,
266
+ COMPRESSED_R11_EAC: 37488,
267
+ COMPRESSED_SIGNED_R11_EAC: 37489,
268
+ COMPRESSED_RG11_EAC: 37490,
269
+ COMPRESSED_SIGNED_RG11_EAC: 37491,
270
+ COMPRESSED_RGB8_ETC2: 37492,
271
+ COMPRESSED_RGBA8_ETC2_EAC: 37493,
272
+ COMPRESSED_SRGB8_ETC2: 37494,
273
+ COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 37495,
274
+ COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37496,
275
+ COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37497,
276
+ COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 35840,
277
+ COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 35842,
278
+ COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 35841,
279
+ COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 35843,
280
+ COMPRESSED_RGB_ETC1_WEBGL: 36196,
281
+ COMPRESSED_RGB_ATC_WEBGL: 35986,
282
+ COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 35987,
283
+ COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 34798,
284
+ COMPRESSED_RGBA_ASTC_4X4_KHR: 37808,
285
+ COMPRESSED_RGBA_ASTC_5X4_KHR: 37809,
286
+ COMPRESSED_RGBA_ASTC_5X5_KHR: 37810,
287
+ COMPRESSED_RGBA_ASTC_6X5_KHR: 37811,
288
+ COMPRESSED_RGBA_ASTC_6X6_KHR: 37812,
289
+ COMPRESSED_RGBA_ASTC_8X5_KHR: 37813,
290
+ COMPRESSED_RGBA_ASTC_8X6_KHR: 37814,
291
+ COMPRESSED_RGBA_ASTC_8X8_KHR: 37815,
292
+ COMPRESSED_RGBA_ASTC_10X5_KHR: 37816,
293
+ COMPRESSED_RGBA_ASTC_10X6_KHR: 37817,
294
+ COMPRESSED_RGBA_ASTC_10X8_KHR: 37818,
295
+ COMPRESSED_RGBA_ASTC_10X10_KHR: 37819,
296
+ COMPRESSED_RGBA_ASTC_12X10_KHR: 37820,
297
+ COMPRESSED_RGBA_ASTC_12X12_KHR: 37821,
298
+ COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 37840,
299
+ COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 37841,
300
+ COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 37842,
301
+ COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 37843,
302
+ COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 37844,
303
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 37845,
304
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 37846,
305
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 37847,
306
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 37848,
307
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 37849,
308
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 37850,
309
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 37851,
310
+ COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 37852,
311
+ COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 37853,
312
+ COMPRESSED_RED_RGTC1_EXT: 36283,
313
+ COMPRESSED_SIGNED_RED_RGTC1_EXT: 36284,
314
+ COMPRESSED_RED_GREEN_RGTC2_EXT: 36285,
315
+ COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 36286,
316
+ COMPRESSED_SRGB_S3TC_DXT1_EXT: 35916,
317
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 35917,
318
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 35918,
319
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 35919
320
+ };
321
+ }
322
+ });
323
+
324
+ // ../textures/src/lib/utils/texture-formats.ts
325
+ function getSupportedGPUTextureFormats(gl) {
326
+ if (!formats) {
327
+ gl = gl || getWebGLContext() || void 0;
328
+ formats = new Set();
329
+ for (const prefix of BROWSER_PREFIXES) {
330
+ for (const extension in WEBGL_EXTENSIONS) {
331
+ if (gl && gl.getExtension(`${prefix}${extension}`)) {
332
+ const gpuTextureFormat = WEBGL_EXTENSIONS[extension];
333
+ formats.add(gpuTextureFormat);
334
+ }
335
+ }
336
+ }
337
+ }
338
+ return formats;
339
+ }
340
+ function getWebGLContext() {
341
+ try {
342
+ const canvas = document.createElement("canvas");
343
+ return canvas.getContext("webgl");
344
+ } catch (error) {
345
+ return null;
346
+ }
347
+ }
348
+ var BROWSER_PREFIXES, WEBGL_EXTENSIONS, formats;
349
+ var init_texture_formats = __esm({
350
+ "../textures/src/lib/utils/texture-formats.ts"() {
351
+ BROWSER_PREFIXES = ["", "WEBKIT_", "MOZ_"];
352
+ WEBGL_EXTENSIONS = {
353
+ WEBGL_compressed_texture_s3tc: "dxt",
354
+ WEBGL_compressed_texture_s3tc_srgb: "dxt-srgb",
355
+ WEBGL_compressed_texture_etc1: "etc1",
356
+ WEBGL_compressed_texture_etc: "etc2",
357
+ WEBGL_compressed_texture_pvrtc: "pvrtc",
358
+ WEBGL_compressed_texture_atc: "atc",
359
+ WEBGL_compressed_texture_astc: "astc",
360
+ EXT_texture_compression_rgtc: "rgtc"
361
+ };
362
+ formats = null;
363
+ }
364
+ });
365
+
366
+ // ../../node_modules/ktx-parse/dist/ktx-parse.modern.js
367
+ var t, n, i, s, a, r, o, l, f;
368
+ var init_ktx_parse_modern = __esm({
369
+ "../../node_modules/ktx-parse/dist/ktx-parse.modern.js"() {
370
+ t = new Uint8Array([0]);
371
+ !function(t2) {
372
+ t2[t2.NONE = 0] = "NONE", t2[t2.BASISLZ = 1] = "BASISLZ", t2[t2.ZSTD = 2] = "ZSTD", t2[t2.ZLIB = 3] = "ZLIB";
373
+ }(n || (n = {})), function(t2) {
374
+ t2[t2.BASICFORMAT = 0] = "BASICFORMAT";
375
+ }(i || (i = {})), function(t2) {
376
+ t2[t2.UNSPECIFIED = 0] = "UNSPECIFIED", t2[t2.ETC1S = 163] = "ETC1S", t2[t2.UASTC = 166] = "UASTC";
377
+ }(s || (s = {})), function(t2) {
378
+ t2[t2.UNSPECIFIED = 0] = "UNSPECIFIED", t2[t2.SRGB = 1] = "SRGB";
379
+ }(a || (a = {})), function(t2) {
380
+ t2[t2.UNSPECIFIED = 0] = "UNSPECIFIED", t2[t2.LINEAR = 1] = "LINEAR", t2[t2.SRGB = 2] = "SRGB", t2[t2.ITU = 3] = "ITU", t2[t2.NTSC = 4] = "NTSC", t2[t2.SLOG = 5] = "SLOG", t2[t2.SLOG2 = 6] = "SLOG2";
381
+ }(r || (r = {})), function(t2) {
382
+ t2[t2.ALPHA_STRAIGHT = 0] = "ALPHA_STRAIGHT", t2[t2.ALPHA_PREMULTIPLIED = 1] = "ALPHA_PREMULTIPLIED";
383
+ }(o || (o = {})), function(t2) {
384
+ t2[t2.RGB = 0] = "RGB", t2[t2.RRR = 3] = "RRR", t2[t2.GGG = 4] = "GGG", t2[t2.AAA = 15] = "AAA";
385
+ }(l || (l = {})), function(t2) {
386
+ t2[t2.RGB = 0] = "RGB", t2[t2.RGBA = 3] = "RGBA", t2[t2.RRR = 4] = "RRR", t2[t2.RRRG = 5] = "RRRG";
387
+ }(f || (f = {}));
388
+ }
389
+ });
390
+
391
+ // ../textures/src/lib/parsers/parse-ktx.ts
392
+ function isKTX(data) {
393
+ const id = new Uint8Array(data);
394
+ const notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11];
395
+ return !notKTX;
396
+ }
397
+ var KTX2_ID;
398
+ var init_parse_ktx = __esm({
399
+ "../textures/src/lib/parsers/parse-ktx.ts"() {
400
+ init_ktx_parse_modern();
401
+ KTX2_ID = [
402
+ 171,
403
+ 75,
404
+ 84,
405
+ 88,
406
+ 32,
407
+ 50,
408
+ 48,
409
+ 187,
410
+ 13,
411
+ 10,
412
+ 26,
413
+ 10
414
+ ];
415
+ }
416
+ });
417
+
418
+ // ../textures/src/lib/parsers/parse-basis.ts
419
+ async function parseBasis(data, options) {
420
+ if (options.basis.containerFormat === "auto") {
421
+ if (isKTX(data)) {
422
+ const fileConstructors = await loadBasisEncoderModule(options);
423
+ return parseKTX2File(fileConstructors.KTX2File, data, options);
424
+ }
425
+ const { BasisFile } = await loadBasisTrascoderModule(options);
426
+ return parseBasisFile(BasisFile, data, options);
427
+ }
428
+ switch (options.basis.module) {
429
+ case "encoder":
430
+ const fileConstructors = await loadBasisEncoderModule(options);
431
+ switch (options.basis.containerFormat) {
432
+ case "ktx2":
433
+ return parseKTX2File(fileConstructors.KTX2File, data, options);
434
+ case "basis":
435
+ default:
436
+ return parseBasisFile(fileConstructors.BasisFile, data, options);
437
+ }
438
+ case "transcoder":
439
+ default:
440
+ const { BasisFile } = await loadBasisTrascoderModule(options);
441
+ return parseBasisFile(BasisFile, data, options);
442
+ }
443
+ }
444
+ function parseBasisFile(BasisFile, data, options) {
445
+ const basisFile = new BasisFile(new Uint8Array(data));
446
+ try {
447
+ if (!basisFile.startTranscoding()) {
448
+ throw new Error("Failed to start basis transcoding");
449
+ }
450
+ const imageCount = basisFile.getNumImages();
451
+ const images = [];
452
+ for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {
453
+ const levelsCount = basisFile.getNumLevels(imageIndex);
454
+ const levels = [];
455
+ for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
456
+ levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
457
+ }
458
+ images.push(levels);
459
+ }
460
+ return images;
461
+ } finally {
462
+ basisFile.close();
463
+ basisFile.delete();
464
+ }
465
+ }
466
+ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
467
+ const width = basisFile.getImageWidth(imageIndex, levelIndex);
468
+ const height = basisFile.getImageHeight(imageIndex, levelIndex);
469
+ const hasAlpha = basisFile.getHasAlpha();
470
+ const { compressed, format, basisFormat } = getBasisOptions(options, hasAlpha);
471
+ const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
472
+ const decodedData = new Uint8Array(decodedSize);
473
+ if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
474
+ throw new Error("failed to start Basis transcoding");
475
+ }
476
+ return {
477
+ width,
478
+ height,
479
+ data: decodedData,
480
+ compressed,
481
+ format,
482
+ hasAlpha
483
+ };
484
+ }
485
+ function parseKTX2File(KTX2File, data, options) {
486
+ const ktx2File = new KTX2File(new Uint8Array(data));
487
+ try {
488
+ if (!ktx2File.startTranscoding()) {
489
+ throw new Error("failed to start KTX2 transcoding");
490
+ }
491
+ const levelsCount = ktx2File.getLevels();
492
+ const levels = [];
493
+ for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
494
+ levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));
495
+ break;
496
+ }
497
+ return [levels];
498
+ } finally {
499
+ ktx2File.close();
500
+ ktx2File.delete();
501
+ }
502
+ }
503
+ function transcodeKTX2Image(ktx2File, levelIndex, options) {
504
+ const { alphaFlag, height, width } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);
505
+ const { compressed, format, basisFormat } = getBasisOptions(options, alphaFlag);
506
+ const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0, 0, basisFormat);
507
+ const decodedData = new Uint8Array(decodedSize);
508
+ if (!ktx2File.transcodeImage(decodedData, levelIndex, 0, 0, basisFormat, 0, -1, -1)) {
509
+ throw new Error("Failed to transcode KTX2 image");
510
+ }
511
+ return {
512
+ width,
513
+ height,
514
+ data: decodedData,
515
+ compressed,
516
+ hasAlpha: alphaFlag,
517
+ format
518
+ };
519
+ }
520
+ function getBasisOptions(options, hasAlpha) {
521
+ let format = options && options.basis && options.basis.format;
522
+ if (format === "auto") {
523
+ format = selectSupportedBasisFormat();
524
+ }
525
+ if (typeof format === "object") {
526
+ format = hasAlpha ? format.alpha : format.noAlpha;
527
+ }
528
+ format = format.toLowerCase();
529
+ return OutputFormat[format];
530
+ }
531
+ function selectSupportedBasisFormat() {
532
+ const supportedFormats = getSupportedGPUTextureFormats();
533
+ if (supportedFormats.has("astc")) {
534
+ return "astc-4x4";
535
+ } else if (supportedFormats.has("dxt")) {
536
+ return {
537
+ alpha: "bc3",
538
+ noAlpha: "bc1"
539
+ };
540
+ } else if (supportedFormats.has("pvrtc")) {
541
+ return {
542
+ alpha: "pvrtc1-4-rgba",
543
+ noAlpha: "pvrtc1-4-rgb"
544
+ };
545
+ } else if (supportedFormats.has("etc1")) {
546
+ return "etc1";
547
+ } else if (supportedFormats.has("etc2")) {
548
+ return "etc2";
549
+ }
550
+ return "rgb565";
551
+ }
552
+ var OutputFormat;
553
+ var init_parse_basis = __esm({
554
+ "../textures/src/lib/parsers/parse-basis.ts"() {
555
+ init_basis_module_loader();
556
+ init_gl_extensions();
557
+ init_texture_formats();
558
+ init_parse_ktx();
559
+ OutputFormat = {
560
+ etc1: {
561
+ basisFormat: 0,
562
+ compressed: true,
563
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL
564
+ },
565
+ etc2: { basisFormat: 1, compressed: true },
566
+ bc1: {
567
+ basisFormat: 2,
568
+ compressed: true,
569
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT
570
+ },
571
+ bc3: {
572
+ basisFormat: 3,
573
+ compressed: true,
574
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT
575
+ },
576
+ bc4: { basisFormat: 4, compressed: true },
577
+ bc5: { basisFormat: 5, compressed: true },
578
+ "bc7-m6-opaque-only": { basisFormat: 6, compressed: true },
579
+ "bc7-m5": { basisFormat: 7, compressed: true },
580
+ "pvrtc1-4-rgb": {
581
+ basisFormat: 8,
582
+ compressed: true,
583
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG
584
+ },
585
+ "pvrtc1-4-rgba": {
586
+ basisFormat: 9,
587
+ compressed: true,
588
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
589
+ },
590
+ "astc-4x4": {
591
+ basisFormat: 10,
592
+ compressed: true,
593
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR
594
+ },
595
+ "atc-rgb": { basisFormat: 11, compressed: true },
596
+ "atc-rgba-interpolated-alpha": { basisFormat: 12, compressed: true },
597
+ rgba32: { basisFormat: 13, compressed: false },
598
+ rgb565: { basisFormat: 14, compressed: false },
599
+ bgr565: { basisFormat: 15, compressed: false },
600
+ rgba4444: { basisFormat: 16, compressed: false }
601
+ };
602
+ }
603
+ });
604
+
605
+ // ../textures/src/basis-loader.ts
606
+ var BasisWorkerLoader, BasisLoader;
607
+ var init_basis_loader = __esm({
608
+ "../textures/src/basis-loader.ts"() {
609
+ init_version2();
610
+ init_parse_basis();
611
+ BasisWorkerLoader = {
612
+ name: "Basis",
613
+ id: "basis",
614
+ module: "textures",
615
+ version: VERSION2,
616
+ worker: true,
617
+ extensions: ["basis", "ktx2"],
618
+ mimeTypes: ["application/octet-stream", "image/ktx2"],
619
+ tests: ["sB"],
620
+ binary: true,
621
+ options: {
622
+ basis: {
623
+ format: "auto",
624
+ libraryPath: "libs/",
625
+ containerFormat: "auto",
626
+ module: "transcoder"
627
+ }
628
+ }
629
+ };
630
+ BasisLoader = {
631
+ ...BasisWorkerLoader,
632
+ parse: parseBasis
633
+ };
634
+ }
635
+ });
636
+
637
+ // ../loader-utils/src/lib/env-utils/assert.ts
638
+ function assert2(condition, message) {
639
+ if (!condition) {
640
+ throw new Error(message || "loader assertion failed.");
641
+ }
642
+ }
643
+ var init_assert2 = __esm({
644
+ "../loader-utils/src/lib/env-utils/assert.ts"() {
645
+ }
646
+ });
647
+
648
+ // ../loader-utils/src/lib/env-utils/globals.ts
649
+ var globals2, self_2, window_2, global_2, document_2, isBrowser2, matches2, nodeVersion2;
650
+ var init_globals2 = __esm({
651
+ "../loader-utils/src/lib/env-utils/globals.ts"() {
652
+ globals2 = {
653
+ self: typeof self !== "undefined" && self,
654
+ window: typeof window !== "undefined" && window,
655
+ global: typeof global !== "undefined" && global,
656
+ document: typeof document !== "undefined" && document
657
+ };
658
+ self_2 = globals2.self || globals2.window || globals2.global || {};
659
+ window_2 = globals2.window || globals2.self || globals2.global || {};
660
+ global_2 = globals2.global || globals2.self || globals2.window || {};
661
+ document_2 = globals2.document || {};
662
+ isBrowser2 = Boolean(typeof process !== "object" || String(process) !== "[object process]" || process.browser);
663
+ matches2 = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
664
+ nodeVersion2 = matches2 && parseFloat(matches2[1]) || 0;
665
+ }
666
+ });
667
+
668
+ // ../loader-utils/src/lib/binary-utils/get-first-characters.ts
669
+ function getFirstCharacters(data, length = 5) {
670
+ if (typeof data === "string") {
671
+ return data.slice(0, length);
672
+ } else if (ArrayBuffer.isView(data)) {
673
+ return getMagicString(data.buffer, data.byteOffset, length);
674
+ } else if (data instanceof ArrayBuffer) {
675
+ const byteOffset = 0;
676
+ return getMagicString(data, byteOffset, length);
677
+ }
678
+ return "";
679
+ }
680
+ function getMagicString(arrayBuffer, byteOffset, length) {
681
+ if (arrayBuffer.byteLength <= byteOffset + length) {
682
+ return "";
683
+ }
684
+ const dataView = new DataView(arrayBuffer);
685
+ let magic = "";
686
+ for (let i2 = 0; i2 < length; i2++) {
687
+ magic += String.fromCharCode(dataView.getUint8(byteOffset + i2));
688
+ }
689
+ return magic;
690
+ }
691
+ var init_get_first_characters = __esm({
692
+ "../loader-utils/src/lib/binary-utils/get-first-characters.ts"() {
693
+ }
694
+ });
695
+
696
+ // ../loader-utils/src/lib/parser-utils/parse-json.ts
697
+ function parseJSON(string) {
698
+ try {
699
+ return JSON.parse(string);
700
+ } catch (_) {
701
+ throw new Error(`Failed to parse JSON from data starting with "${getFirstCharacters(string)}"`);
702
+ }
703
+ }
704
+ var init_parse_json = __esm({
705
+ "../loader-utils/src/lib/parser-utils/parse-json.ts"() {
706
+ init_get_first_characters();
707
+ }
708
+ });
709
+
710
+ // ../loader-utils/src/lib/binary-utils/array-buffer-utils.ts
711
+ function sliceArrayBuffer(arrayBuffer, byteOffset, byteLength) {
712
+ const subArray = byteLength !== void 0 ? new Uint8Array(arrayBuffer).subarray(byteOffset, byteOffset + byteLength) : new Uint8Array(arrayBuffer).subarray(byteOffset);
713
+ const arrayCopy = new Uint8Array(subArray);
714
+ return arrayCopy.buffer;
715
+ }
716
+ var init_array_buffer_utils = __esm({
717
+ "../loader-utils/src/lib/binary-utils/array-buffer-utils.ts"() {
718
+ }
719
+ });
720
+
721
+ // ../loader-utils/src/lib/binary-utils/memory-copy-utils.ts
722
+ function padToNBytes(byteLength, padding) {
723
+ assert2(byteLength >= 0);
724
+ assert2(padding > 0);
725
+ return byteLength + (padding - 1) & ~(padding - 1);
726
+ }
727
+ function copyToArray(source, target, targetOffset) {
728
+ let sourceArray;
729
+ if (source instanceof ArrayBuffer) {
730
+ sourceArray = new Uint8Array(source);
731
+ } else {
732
+ const srcByteOffset = source.byteOffset;
733
+ const srcByteLength = source.byteLength;
734
+ sourceArray = new Uint8Array(source.buffer || source.arrayBuffer, srcByteOffset, srcByteLength);
735
+ }
736
+ target.set(sourceArray, targetOffset);
737
+ return targetOffset + padToNBytes(sourceArray.byteLength, 4);
738
+ }
739
+ var init_memory_copy_utils = __esm({
740
+ "../loader-utils/src/lib/binary-utils/memory-copy-utils.ts"() {
741
+ init_assert2();
742
+ }
743
+ });
744
+
745
+ // ../loader-utils/src/lib/binary-utils/binary-copy-utils.ts
746
+ function copyPaddedArrayBufferToDataView(dataView, byteOffset, sourceBuffer, padding) {
747
+ const paddedLength = padToNBytes(sourceBuffer.byteLength, padding);
748
+ const padLength = paddedLength - sourceBuffer.byteLength;
749
+ if (dataView) {
750
+ const targetArray = new Uint8Array(dataView.buffer, dataView.byteOffset + byteOffset, sourceBuffer.byteLength);
751
+ const sourceArray = new Uint8Array(sourceBuffer);
752
+ targetArray.set(sourceArray);
753
+ for (let i2 = 0; i2 < padLength; ++i2) {
754
+ dataView.setUint8(byteOffset + sourceBuffer.byteLength + i2, 32);
755
+ }
756
+ }
757
+ byteOffset += paddedLength;
758
+ return byteOffset;
759
+ }
760
+ function copyPaddedStringToDataView(dataView, byteOffset, string, padding) {
761
+ const textEncoder = new TextEncoder();
762
+ const stringBuffer = textEncoder.encode(string);
763
+ byteOffset = copyPaddedArrayBufferToDataView(dataView, byteOffset, stringBuffer, padding);
764
+ return byteOffset;
765
+ }
766
+ var init_binary_copy_utils = __esm({
767
+ "../loader-utils/src/lib/binary-utils/binary-copy-utils.ts"() {
768
+ init_memory_copy_utils();
769
+ }
770
+ });
771
+
772
+ // ../loader-utils/src/index.ts
773
+ var init_src2 = __esm({
774
+ "../loader-utils/src/index.ts"() {
775
+ init_assert2();
776
+ init_globals2();
777
+ init_parse_json();
778
+ init_array_buffer_utils();
779
+ init_memory_copy_utils();
780
+ init_binary_copy_utils();
781
+ }
782
+ });
783
+
784
+ // ../images/src/lib/utils/version.ts
785
+ var VERSION6;
786
+ var init_version4 = __esm({
787
+ "../images/src/lib/utils/version.ts"() {
788
+ VERSION6 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
789
+ }
790
+ });
791
+
792
+ // ../images/src/lib/category-api/image-type.ts
793
+ function isImageTypeSupported(type) {
794
+ switch (type) {
795
+ case "auto":
796
+ return IMAGE_BITMAP_SUPPORTED || IMAGE_SUPPORTED || DATA_SUPPORTED;
797
+ case "imagebitmap":
798
+ return IMAGE_BITMAP_SUPPORTED;
799
+ case "image":
800
+ return IMAGE_SUPPORTED;
801
+ case "data":
802
+ return DATA_SUPPORTED;
803
+ default:
804
+ throw new Error(`@loaders.gl/images: image ${type} not supported in this environment`);
805
+ }
806
+ }
807
+ function getDefaultImageType() {
808
+ if (IMAGE_BITMAP_SUPPORTED) {
809
+ return "imagebitmap";
810
+ }
811
+ if (IMAGE_SUPPORTED) {
812
+ return "image";
813
+ }
814
+ if (DATA_SUPPORTED) {
815
+ return "data";
816
+ }
817
+ throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js");
818
+ }
819
+ var _parseImageNode, IMAGE_SUPPORTED, IMAGE_BITMAP_SUPPORTED, NODE_IMAGE_SUPPORTED, DATA_SUPPORTED;
820
+ var init_image_type = __esm({
821
+ "../images/src/lib/category-api/image-type.ts"() {
822
+ init_src2();
823
+ ({ _parseImageNode } = globalThis);
824
+ IMAGE_SUPPORTED = typeof Image !== "undefined";
825
+ IMAGE_BITMAP_SUPPORTED = typeof ImageBitmap !== "undefined";
826
+ NODE_IMAGE_SUPPORTED = Boolean(_parseImageNode);
827
+ DATA_SUPPORTED = isBrowser2 ? true : NODE_IMAGE_SUPPORTED;
828
+ }
829
+ });
830
+
831
+ // ../images/src/lib/category-api/parsed-image-api.ts
832
+ function getImageType(image) {
833
+ const format = getImageTypeOrNull(image);
834
+ if (!format) {
835
+ throw new Error("Not an image");
836
+ }
837
+ return format;
838
+ }
839
+ function getImageData(image) {
840
+ switch (getImageType(image)) {
841
+ case "data":
842
+ return image;
843
+ case "image":
844
+ case "imagebitmap":
845
+ const canvas = document.createElement("canvas");
846
+ const context = canvas.getContext("2d");
847
+ if (!context) {
848
+ throw new Error("getImageData");
849
+ }
850
+ canvas.width = image.width;
851
+ canvas.height = image.height;
852
+ context.drawImage(image, 0, 0);
853
+ return context.getImageData(0, 0, image.width, image.height);
854
+ default:
855
+ throw new Error("getImageData");
856
+ }
857
+ }
858
+ function getImageTypeOrNull(image) {
859
+ if (typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) {
860
+ return "imagebitmap";
861
+ }
862
+ if (typeof Image !== "undefined" && image instanceof Image) {
863
+ return "image";
864
+ }
865
+ if (image && typeof image === "object" && image.data && image.width && image.height) {
866
+ return "data";
867
+ }
868
+ return null;
869
+ }
870
+ var init_parsed_image_api = __esm({
871
+ "../images/src/lib/category-api/parsed-image-api.ts"() {
872
+ }
873
+ });
874
+
875
+ // ../images/src/lib/parsers/svg-utils.ts
876
+ function isSVG(url) {
877
+ return url && (SVG_DATA_URL_PATTERN.test(url) || SVG_URL_PATTERN.test(url));
878
+ }
879
+ function getBlobOrSVGDataUrl(arrayBuffer, url) {
880
+ if (isSVG(url)) {
881
+ const textDecoder = new TextDecoder();
882
+ let xmlText = textDecoder.decode(arrayBuffer);
883
+ try {
884
+ if (typeof unescape === "function" && typeof encodeURIComponent === "function") {
885
+ xmlText = unescape(encodeURIComponent(xmlText));
886
+ }
887
+ } catch (error) {
888
+ throw new Error(error.message);
889
+ }
890
+ const src = `data:image/svg+xml;base64,${btoa(xmlText)}`;
891
+ return src;
892
+ }
893
+ return getBlob(arrayBuffer, url);
894
+ }
895
+ function getBlob(arrayBuffer, url) {
896
+ if (isSVG(url)) {
897
+ throw new Error("SVG cannot be parsed directly to imagebitmap");
898
+ }
899
+ return new Blob([new Uint8Array(arrayBuffer)]);
900
+ }
901
+ var SVG_DATA_URL_PATTERN, SVG_URL_PATTERN;
902
+ var init_svg_utils = __esm({
903
+ "../images/src/lib/parsers/svg-utils.ts"() {
904
+ SVG_DATA_URL_PATTERN = /^data:image\/svg\+xml/;
905
+ SVG_URL_PATTERN = /\.svg((\?|#).*)?$/;
906
+ }
907
+ });
908
+
909
+ // ../images/src/lib/parsers/parse-to-image.ts
910
+ async function parseToImage(arrayBuffer, options, url) {
911
+ const blobOrDataUrl = getBlobOrSVGDataUrl(arrayBuffer, url);
912
+ const URL = self.URL || self.webkitURL;
913
+ const objectUrl = typeof blobOrDataUrl !== "string" && URL.createObjectURL(blobOrDataUrl);
914
+ try {
915
+ return await loadToImage(objectUrl || blobOrDataUrl, options);
916
+ } finally {
917
+ if (objectUrl) {
918
+ URL.revokeObjectURL(objectUrl);
919
+ }
920
+ }
921
+ }
922
+ async function loadToImage(url, options) {
923
+ const image = new Image();
924
+ image.src = url;
925
+ if (options.image && options.image.decode && image.decode) {
926
+ await image.decode();
927
+ return image;
928
+ }
929
+ return await new Promise((resolve, reject) => {
930
+ try {
931
+ image.onload = () => resolve(image);
932
+ image.onerror = (err) => reject(new Error(`Could not load image ${url}: ${err}`));
933
+ } catch (error) {
934
+ reject(error);
935
+ }
936
+ });
937
+ }
938
+ var init_parse_to_image = __esm({
939
+ "../images/src/lib/parsers/parse-to-image.ts"() {
940
+ init_svg_utils();
941
+ }
942
+ });
943
+
944
+ // ../images/src/lib/parsers/parse-to-image-bitmap.ts
945
+ async function parseToImageBitmap(arrayBuffer, options, url) {
946
+ let blob;
947
+ if (isSVG(url)) {
948
+ const image = await parseToImage(arrayBuffer, options, url);
949
+ blob = image;
950
+ } else {
951
+ blob = getBlob(arrayBuffer, url);
952
+ }
953
+ const imagebitmapOptions = options && options.imagebitmap;
954
+ return await safeCreateImageBitmap(blob, imagebitmapOptions);
955
+ }
956
+ async function safeCreateImageBitmap(blob, imagebitmapOptions = null) {
957
+ if (isEmptyObject(imagebitmapOptions) || !imagebitmapOptionsSupported) {
958
+ imagebitmapOptions = null;
959
+ }
960
+ if (imagebitmapOptions) {
961
+ try {
962
+ return await createImageBitmap(blob, imagebitmapOptions);
963
+ } catch (error) {
964
+ console.warn(error);
965
+ imagebitmapOptionsSupported = false;
966
+ }
967
+ }
968
+ return await createImageBitmap(blob);
969
+ }
970
+ function isEmptyObject(object) {
971
+ for (const key in object || EMPTY_OBJECT) {
972
+ return false;
973
+ }
974
+ return true;
975
+ }
976
+ var EMPTY_OBJECT, imagebitmapOptionsSupported;
977
+ var init_parse_to_image_bitmap = __esm({
978
+ "../images/src/lib/parsers/parse-to-image-bitmap.ts"() {
979
+ init_svg_utils();
980
+ init_parse_to_image();
981
+ EMPTY_OBJECT = {};
982
+ imagebitmapOptionsSupported = true;
983
+ }
984
+ });
985
+
986
+ // ../images/src/lib/category-api/binary-image-api.ts
987
+ function getBinaryImageMetadata(binaryData) {
988
+ const dataView = toDataView(binaryData);
989
+ return getPngMetadata(dataView) || getJpegMetadata(dataView) || getGifMetadata(dataView) || getBmpMetadata(dataView);
990
+ }
991
+ function getPngMetadata(binaryData) {
992
+ const dataView = toDataView(binaryData);
993
+ const isPng = dataView.byteLength >= 24 && dataView.getUint32(0, BIG_ENDIAN) === 2303741511;
994
+ if (!isPng) {
995
+ return null;
996
+ }
997
+ return {
998
+ mimeType: "image/png",
999
+ width: dataView.getUint32(16, BIG_ENDIAN),
1000
+ height: dataView.getUint32(20, BIG_ENDIAN)
1001
+ };
1002
+ }
1003
+ function getGifMetadata(binaryData) {
1004
+ const dataView = toDataView(binaryData);
1005
+ const isGif = dataView.byteLength >= 10 && dataView.getUint32(0, BIG_ENDIAN) === 1195984440;
1006
+ if (!isGif) {
1007
+ return null;
1008
+ }
1009
+ return {
1010
+ mimeType: "image/gif",
1011
+ width: dataView.getUint16(6, LITTLE_ENDIAN),
1012
+ height: dataView.getUint16(8, LITTLE_ENDIAN)
1013
+ };
1014
+ }
1015
+ function getBmpMetadata(binaryData) {
1016
+ const dataView = toDataView(binaryData);
1017
+ const isBmp = dataView.byteLength >= 14 && dataView.getUint16(0, BIG_ENDIAN) === 16973 && dataView.getUint32(2, LITTLE_ENDIAN) === dataView.byteLength;
1018
+ if (!isBmp) {
1019
+ return null;
1020
+ }
1021
+ return {
1022
+ mimeType: "image/bmp",
1023
+ width: dataView.getUint32(18, LITTLE_ENDIAN),
1024
+ height: dataView.getUint32(22, LITTLE_ENDIAN)
1025
+ };
1026
+ }
1027
+ function getJpegMetadata(binaryData) {
1028
+ const dataView = toDataView(binaryData);
1029
+ const isJpeg = dataView.byteLength >= 3 && dataView.getUint16(0, BIG_ENDIAN) === 65496 && dataView.getUint8(2) === 255;
1030
+ if (!isJpeg) {
1031
+ return null;
1032
+ }
1033
+ const { tableMarkers, sofMarkers } = getJpegMarkers();
1034
+ let i2 = 2;
1035
+ while (i2 + 9 < dataView.byteLength) {
1036
+ const marker = dataView.getUint16(i2, BIG_ENDIAN);
1037
+ if (sofMarkers.has(marker)) {
1038
+ return {
1039
+ mimeType: "image/jpeg",
1040
+ height: dataView.getUint16(i2 + 5, BIG_ENDIAN),
1041
+ width: dataView.getUint16(i2 + 7, BIG_ENDIAN)
1042
+ };
1043
+ }
1044
+ if (!tableMarkers.has(marker)) {
1045
+ return null;
1046
+ }
1047
+ i2 += 2;
1048
+ i2 += dataView.getUint16(i2, BIG_ENDIAN);
1049
+ }
1050
+ return null;
1051
+ }
1052
+ function getJpegMarkers() {
1053
+ const tableMarkers = new Set([65499, 65476, 65484, 65501, 65534]);
1054
+ for (let i2 = 65504; i2 < 65520; ++i2) {
1055
+ tableMarkers.add(i2);
1056
+ }
1057
+ const sofMarkers = new Set([
1058
+ 65472,
1059
+ 65473,
1060
+ 65474,
1061
+ 65475,
1062
+ 65477,
1063
+ 65478,
1064
+ 65479,
1065
+ 65481,
1066
+ 65482,
1067
+ 65483,
1068
+ 65485,
1069
+ 65486,
1070
+ 65487,
1071
+ 65502
1072
+ ]);
1073
+ return { tableMarkers, sofMarkers };
1074
+ }
1075
+ function toDataView(data) {
1076
+ if (data instanceof DataView) {
1077
+ return data;
1078
+ }
1079
+ if (ArrayBuffer.isView(data)) {
1080
+ return new DataView(data.buffer);
1081
+ }
1082
+ if (data instanceof ArrayBuffer) {
1083
+ return new DataView(data);
1084
+ }
1085
+ throw new Error("toDataView");
1086
+ }
1087
+ var BIG_ENDIAN, LITTLE_ENDIAN;
1088
+ var init_binary_image_api = __esm({
1089
+ "../images/src/lib/category-api/binary-image-api.ts"() {
1090
+ BIG_ENDIAN = false;
1091
+ LITTLE_ENDIAN = true;
1092
+ }
1093
+ });
1094
+
1095
+ // ../images/src/lib/parsers/parse-to-node-image.ts
1096
+ async function parseToNodeImage(arrayBuffer, options) {
1097
+ const { mimeType } = getBinaryImageMetadata(arrayBuffer) || {};
1098
+ const _parseImageNode2 = globalThis._parseImageNode;
1099
+ assert2(_parseImageNode2);
1100
+ return await _parseImageNode2(arrayBuffer, mimeType);
1101
+ }
1102
+ var init_parse_to_node_image = __esm({
1103
+ "../images/src/lib/parsers/parse-to-node-image.ts"() {
1104
+ init_src2();
1105
+ init_binary_image_api();
1106
+ }
1107
+ });
1108
+
1109
+ // ../images/src/lib/parsers/parse-image.ts
1110
+ async function parseImage(arrayBuffer, options, context) {
1111
+ options = options || {};
1112
+ const imageOptions = options.image || {};
1113
+ const imageType = imageOptions.type || "auto";
1114
+ const { url } = context || {};
1115
+ const loadType = getLoadableImageType(imageType);
1116
+ let image;
1117
+ switch (loadType) {
1118
+ case "imagebitmap":
1119
+ image = await parseToImageBitmap(arrayBuffer, options, url);
1120
+ break;
1121
+ case "image":
1122
+ image = await parseToImage(arrayBuffer, options, url);
1123
+ break;
1124
+ case "data":
1125
+ image = await parseToNodeImage(arrayBuffer, options);
1126
+ break;
1127
+ default:
1128
+ assert2(false);
1129
+ }
1130
+ if (imageType === "data") {
1131
+ image = getImageData(image);
1132
+ }
1133
+ return image;
1134
+ }
1135
+ function getLoadableImageType(type) {
1136
+ switch (type) {
1137
+ case "auto":
1138
+ case "data":
1139
+ return getDefaultImageType();
1140
+ default:
1141
+ isImageTypeSupported(type);
1142
+ return type;
1143
+ }
1144
+ }
1145
+ var init_parse_image = __esm({
1146
+ "../images/src/lib/parsers/parse-image.ts"() {
1147
+ init_src2();
1148
+ init_image_type();
1149
+ init_parsed_image_api();
1150
+ init_parse_to_image();
1151
+ init_parse_to_image_bitmap();
1152
+ init_parse_to_node_image();
1153
+ }
1154
+ });
1155
+
1156
+ // ../images/src/image-loader.ts
1157
+ var EXTENSIONS, MIME_TYPES, DEFAULT_IMAGE_LOADER_OPTIONS, ImageLoader;
1158
+ var init_image_loader = __esm({
1159
+ "../images/src/image-loader.ts"() {
1160
+ init_version4();
1161
+ init_parse_image();
1162
+ init_binary_image_api();
1163
+ EXTENSIONS = ["png", "jpg", "jpeg", "gif", "webp", "bmp", "ico", "svg"];
1164
+ MIME_TYPES = [
1165
+ "image/png",
1166
+ "image/jpeg",
1167
+ "image/gif",
1168
+ "image/webp",
1169
+ "image/bmp",
1170
+ "image/vnd.microsoft.icon",
1171
+ "image/svg+xml"
1172
+ ];
1173
+ DEFAULT_IMAGE_LOADER_OPTIONS = {
1174
+ image: {
1175
+ type: "auto",
1176
+ decode: true
1177
+ }
1178
+ };
1179
+ ImageLoader = {
1180
+ id: "image",
1181
+ module: "images",
1182
+ name: "Images",
1183
+ version: VERSION6,
1184
+ mimeTypes: MIME_TYPES,
1185
+ extensions: EXTENSIONS,
1186
+ parse: parseImage,
1187
+ tests: [(arrayBuffer) => Boolean(getBinaryImageMetadata(new DataView(arrayBuffer)))],
1188
+ options: DEFAULT_IMAGE_LOADER_OPTIONS
1189
+ };
1190
+ }
1191
+ });
1192
+
1193
+ // ../images/src/lib/category-api/image-format.ts
1194
+ function _isImageFormatSupported(mimeType) {
1195
+ if (mimeTypeSupported[mimeType] === void 0) {
1196
+ mimeTypeSupported[mimeType] = checkFormatSupport(mimeType);
1197
+ }
1198
+ return mimeTypeSupported[mimeType];
1199
+ }
1200
+ function checkFormatSupport(mimeType) {
1201
+ switch (mimeType) {
1202
+ case "image/webp":
1203
+ return checkWebPSupport();
1204
+ case "image/svg":
1205
+ return isBrowser2;
1206
+ default:
1207
+ if (!isBrowser2) {
1208
+ const { _parseImageNode: _parseImageNode2 } = globalThis;
1209
+ return Boolean(_parseImageNode2) && NODE_FORMAT_SUPPORT.includes(mimeType);
1210
+ }
1211
+ return true;
1212
+ }
1213
+ }
1214
+ function checkWebPSupport() {
1215
+ if (!isBrowser2) {
1216
+ return false;
1217
+ }
1218
+ try {
1219
+ const element = document.createElement("canvas");
1220
+ return element.toDataURL("image/webp").indexOf("data:image/webp") === 0;
1221
+ } catch {
1222
+ return false;
1223
+ }
1224
+ }
1225
+ var NODE_FORMAT_SUPPORT, mimeTypeSupported;
1226
+ var init_image_format = __esm({
1227
+ "../images/src/lib/category-api/image-format.ts"() {
1228
+ init_src2();
1229
+ NODE_FORMAT_SUPPORT = ["image/png", "image/jpeg", "image/gif"];
1230
+ mimeTypeSupported = {};
1231
+ }
1232
+ });
1233
+
1234
+ // ../images/src/index.ts
1235
+ var init_src3 = __esm({
1236
+ "../images/src/index.ts"() {
1237
+ init_image_loader();
1238
+ init_binary_image_api();
1239
+ init_image_format();
1240
+ }
1241
+ });
1242
+
1243
+ // ../textures/src/index.ts
1244
+ var init_src4 = __esm({
1245
+ "../textures/src/index.ts"() {
1246
+ init_basis_loader();
1247
+ init_parse_basis();
1248
+ }
1249
+ });
1250
+
1251
+ // src/lib/utils/assert.ts
1252
+ function assert3(condition, message) {
1253
+ if (!condition) {
1254
+ throw new Error(message || "assert failed: gltf");
1255
+ }
1256
+ }
1257
+ var init_assert3 = __esm({
1258
+ "src/lib/utils/assert.ts"() {
1259
+ }
1260
+ });
1261
+
1262
+ // src/lib/gltf-utils/resolve-url.ts
1263
+ function resolveUrl(url, options) {
1264
+ const absolute = url.startsWith("data:") || url.startsWith("http:") || url.startsWith("https:");
1265
+ if (absolute) {
1266
+ return url;
1267
+ }
1268
+ const baseUrl = options.baseUri || options.uri;
1269
+ if (!baseUrl) {
1270
+ throw new Error(`'baseUri' must be provided to resolve relative url ${url}`);
1271
+ }
1272
+ return baseUrl.substr(0, baseUrl.lastIndexOf("/") + 1) + url;
1273
+ }
1274
+ var init_resolve_url = __esm({
1275
+ "src/lib/gltf-utils/resolve-url.ts"() {
1276
+ }
1277
+ });
1278
+
1279
+ // src/lib/gltf-utils/get-typed-array.ts
1280
+ function getTypedArrayForBufferView(json, buffers, bufferViewIndex) {
1281
+ const bufferView = json.bufferViews[bufferViewIndex];
1282
+ assert3(bufferView);
1283
+ const bufferIndex = bufferView.buffer;
1284
+ const binChunk = buffers[bufferIndex];
1285
+ assert3(binChunk);
1286
+ const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;
1287
+ return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);
1288
+ }
1289
+ var init_get_typed_array = __esm({
1290
+ "src/lib/gltf-utils/get-typed-array.ts"() {
1291
+ init_assert3();
1292
+ }
1293
+ });
1294
+
1295
+ // src/lib/gltf-utils/gltf-utils.ts
1296
+ function getAccessorTypeFromSize(size) {
1297
+ const type = TYPES[size - 1];
1298
+ return type || TYPES[0];
1299
+ }
1300
+ function getComponentTypeFromArray(typedArray) {
1301
+ const componentType = ARRAY_TO_COMPONENT_TYPE.get(typedArray.constructor);
1302
+ if (!componentType) {
1303
+ throw new Error("Illegal typed array");
1304
+ }
1305
+ return componentType;
1306
+ }
1307
+ function getAccessorArrayTypeAndLength(accessor, bufferView) {
1308
+ const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY[accessor.componentType];
1309
+ const components = ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type];
1310
+ const bytesPerComponent = ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE[accessor.componentType];
1311
+ const length = accessor.count * components;
1312
+ const byteLength = accessor.count * components * bytesPerComponent;
1313
+ assert3(byteLength >= 0 && byteLength <= bufferView.byteLength);
1314
+ return { ArrayType, length, byteLength };
1315
+ }
1316
+ var TYPES, ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT, ARRAY_TO_COMPONENT_TYPE, ATTRIBUTE_TYPE_TO_COMPONENTS, ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE, ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY;
1317
+ var init_gltf_utils = __esm({
1318
+ "src/lib/gltf-utils/gltf-utils.ts"() {
1319
+ init_assert3();
1320
+ TYPES = ["SCALAR", "VEC2", "VEC3", "VEC4"];
1321
+ ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT = [
1322
+ [Int8Array, 5120],
1323
+ [Uint8Array, 5121],
1324
+ [Int16Array, 5122],
1325
+ [Uint16Array, 5123],
1326
+ [Uint32Array, 5125],
1327
+ [Float32Array, 5126],
1328
+ [Float64Array, 5130]
1329
+ ];
1330
+ ARRAY_TO_COMPONENT_TYPE = new Map(ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT);
1331
+ ATTRIBUTE_TYPE_TO_COMPONENTS = {
1332
+ SCALAR: 1,
1333
+ VEC2: 2,
1334
+ VEC3: 3,
1335
+ VEC4: 4,
1336
+ MAT2: 4,
1337
+ MAT3: 9,
1338
+ MAT4: 16
1339
+ };
1340
+ ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE = {
1341
+ 5120: 1,
1342
+ 5121: 1,
1343
+ 5122: 2,
1344
+ 5123: 2,
1345
+ 5125: 4,
1346
+ 5126: 4
1347
+ };
1348
+ ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY = {
1349
+ 5120: Int8Array,
1350
+ 5121: Uint8Array,
1351
+ 5122: Int16Array,
1352
+ 5123: Uint16Array,
1353
+ 5125: Uint32Array,
1354
+ 5126: Float32Array
1355
+ };
1356
+ }
1357
+ });
1358
+
1359
+ // src/lib/api/gltf-scenegraph.ts
1360
+ var DEFAULT_GLTF_JSON, GLTFScenegraph;
1361
+ var init_gltf_scenegraph = __esm({
1362
+ "src/lib/api/gltf-scenegraph.ts"() {
1363
+ init_src3();
1364
+ init_src2();
1365
+ init_assert3();
1366
+ init_gltf_utils();
1367
+ DEFAULT_GLTF_JSON = {
1368
+ asset: {
1369
+ version: "2.0",
1370
+ generator: "loaders.gl"
1371
+ },
1372
+ buffers: []
1373
+ };
1374
+ GLTFScenegraph = class {
1375
+ constructor(gltf) {
1376
+ this.gltf = gltf || {
1377
+ json: { ...DEFAULT_GLTF_JSON },
1378
+ buffers: []
1379
+ };
1380
+ this.sourceBuffers = [];
1381
+ this.byteLength = 0;
1382
+ if (this.gltf.buffers && this.gltf.buffers[0]) {
1383
+ this.byteLength = this.gltf.buffers[0].byteLength;
1384
+ this.sourceBuffers = [this.gltf.buffers[0]];
1385
+ }
1386
+ }
1387
+ get json() {
1388
+ return this.gltf.json;
1389
+ }
1390
+ getApplicationData(key) {
1391
+ const data = this.json[key];
1392
+ return data;
1393
+ }
1394
+ getExtraData(key) {
1395
+ const extras = this.json.extras || {};
1396
+ return extras[key];
1397
+ }
1398
+ getExtension(extensionName) {
1399
+ const isExtension = this.getUsedExtensions().find((name8) => name8 === extensionName);
1400
+ const extensions = this.json.extensions || {};
1401
+ return isExtension ? extensions[extensionName] || true : null;
1402
+ }
1403
+ getRequiredExtension(extensionName) {
1404
+ const isRequired = this.getRequiredExtensions().find((name8) => name8 === extensionName);
1405
+ return isRequired ? this.getExtension(extensionName) : null;
1406
+ }
1407
+ getRequiredExtensions() {
1408
+ return this.json.extensionsRequired || [];
1409
+ }
1410
+ getUsedExtensions() {
1411
+ return this.json.extensionsUsed || [];
1412
+ }
1413
+ getObjectExtension(object, extensionName) {
1414
+ const extensions = object.extensions || {};
1415
+ return extensions[extensionName];
1416
+ }
1417
+ getScene(index) {
1418
+ return this.getObject("scenes", index);
1419
+ }
1420
+ getNode(index) {
1421
+ return this.getObject("nodes", index);
1422
+ }
1423
+ getSkin(index) {
1424
+ return this.getObject("skins", index);
1425
+ }
1426
+ getMesh(index) {
1427
+ return this.getObject("meshes", index);
1428
+ }
1429
+ getMaterial(index) {
1430
+ return this.getObject("materials", index);
1431
+ }
1432
+ getAccessor(index) {
1433
+ return this.getObject("accessors", index);
1434
+ }
1435
+ getTexture(index) {
1436
+ return this.getObject("textures", index);
1437
+ }
1438
+ getSampler(index) {
1439
+ return this.getObject("samplers", index);
1440
+ }
1441
+ getImage(index) {
1442
+ return this.getObject("images", index);
1443
+ }
1444
+ getBufferView(index) {
1445
+ return this.getObject("bufferViews", index);
1446
+ }
1447
+ getBuffer(index) {
1448
+ return this.getObject("buffers", index);
1449
+ }
1450
+ getObject(array, index) {
1451
+ if (typeof index === "object") {
1452
+ return index;
1453
+ }
1454
+ const object = this.json[array] && this.json[array][index];
1455
+ if (!object) {
1456
+ throw new Error(`glTF file error: Could not find ${array}[${index}]`);
1457
+ }
1458
+ return object;
1459
+ }
1460
+ getTypedArrayForBufferView(bufferView) {
1461
+ bufferView = this.getBufferView(bufferView);
1462
+ const bufferIndex = bufferView.buffer;
1463
+ const binChunk = this.gltf.buffers[bufferIndex];
1464
+ assert3(binChunk);
1465
+ const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;
1466
+ return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);
1467
+ }
1468
+ getTypedArrayForAccessor(accessor) {
1469
+ accessor = this.getAccessor(accessor);
1470
+ const bufferView = this.getBufferView(accessor.bufferView);
1471
+ const buffer = this.getBuffer(bufferView.buffer);
1472
+ const arrayBuffer = buffer.data;
1473
+ const { ArrayType, length } = getAccessorArrayTypeAndLength(accessor, bufferView);
1474
+ const byteOffset = bufferView.byteOffset + accessor.byteOffset;
1475
+ return new ArrayType(arrayBuffer, byteOffset, length);
1476
+ }
1477
+ getTypedArrayForImageData(image) {
1478
+ image = this.getAccessor(image);
1479
+ const bufferView = this.getBufferView(image.bufferView);
1480
+ const buffer = this.getBuffer(bufferView.buffer);
1481
+ const arrayBuffer = buffer.data;
1482
+ const byteOffset = bufferView.byteOffset || 0;
1483
+ return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);
1484
+ }
1485
+ addApplicationData(key, data) {
1486
+ this.json[key] = data;
1487
+ return this;
1488
+ }
1489
+ addExtraData(key, data) {
1490
+ this.json.extras = this.json.extras || {};
1491
+ this.json.extras[key] = data;
1492
+ return this;
1493
+ }
1494
+ addObjectExtension(object, extensionName, data) {
1495
+ object.extensions = object.extensions || {};
1496
+ object.extensions[extensionName] = data;
1497
+ this.registerUsedExtension(extensionName);
1498
+ return this;
1499
+ }
1500
+ setObjectExtension(object, extensionName, data) {
1501
+ const extensions = object.extensions || {};
1502
+ extensions[extensionName] = data;
1503
+ }
1504
+ removeObjectExtension(object, extensionName) {
1505
+ const extensions = object.extensions || {};
1506
+ const extension = extensions[extensionName];
1507
+ delete extensions[extensionName];
1508
+ return extension;
1509
+ }
1510
+ addExtension(extensionName, extensionData = {}) {
1511
+ assert3(extensionData);
1512
+ this.json.extensions = this.json.extensions || {};
1513
+ this.json.extensions[extensionName] = extensionData;
1514
+ this.registerUsedExtension(extensionName);
1515
+ return extensionData;
1516
+ }
1517
+ addRequiredExtension(extensionName, extensionData = {}) {
1518
+ assert3(extensionData);
1519
+ this.addExtension(extensionName, extensionData);
1520
+ this.registerRequiredExtension(extensionName);
1521
+ return extensionData;
1522
+ }
1523
+ registerUsedExtension(extensionName) {
1524
+ this.json.extensionsUsed = this.json.extensionsUsed || [];
1525
+ if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {
1526
+ this.json.extensionsUsed.push(extensionName);
1527
+ }
1528
+ }
1529
+ registerRequiredExtension(extensionName) {
1530
+ this.registerUsedExtension(extensionName);
1531
+ this.json.extensionsRequired = this.json.extensionsRequired || [];
1532
+ if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {
1533
+ this.json.extensionsRequired.push(extensionName);
1534
+ }
1535
+ }
1536
+ removeExtension(extensionName) {
1537
+ if (this.json.extensionsRequired) {
1538
+ this._removeStringFromArray(this.json.extensionsRequired, extensionName);
1539
+ }
1540
+ if (this.json.extensionsUsed) {
1541
+ this._removeStringFromArray(this.json.extensionsUsed, extensionName);
1542
+ }
1543
+ if (this.json.extensions) {
1544
+ delete this.json.extensions[extensionName];
1545
+ }
1546
+ }
1547
+ setDefaultScene(sceneIndex) {
1548
+ this.json.scene = sceneIndex;
1549
+ }
1550
+ addScene(scene) {
1551
+ const { nodeIndices } = scene;
1552
+ this.json.scenes = this.json.scenes || [];
1553
+ this.json.scenes.push({ nodes: nodeIndices });
1554
+ return this.json.scenes.length - 1;
1555
+ }
1556
+ addNode(node2) {
1557
+ const { meshIndex, matrix } = node2;
1558
+ this.json.nodes = this.json.nodes || [];
1559
+ const nodeData = { mesh: meshIndex };
1560
+ if (matrix) {
1561
+ nodeData.matrix = matrix;
1562
+ }
1563
+ this.json.nodes.push(nodeData);
1564
+ return this.json.nodes.length - 1;
1565
+ }
1566
+ addMesh(mesh) {
1567
+ const { attributes, indices, material, mode = 4 } = mesh;
1568
+ const accessors = this._addAttributes(attributes);
1569
+ const glTFMesh = {
1570
+ primitives: [
1571
+ {
1572
+ attributes: accessors,
1573
+ mode
1574
+ }
1575
+ ]
1576
+ };
1577
+ if (indices) {
1578
+ const indicesAccessor = this._addIndices(indices);
1579
+ glTFMesh.primitives[0].indices = indicesAccessor;
1580
+ }
1581
+ if (Number.isFinite(material)) {
1582
+ glTFMesh.primitives[0].material = material;
1583
+ }
1584
+ this.json.meshes = this.json.meshes || [];
1585
+ this.json.meshes.push(glTFMesh);
1586
+ return this.json.meshes.length - 1;
1587
+ }
1588
+ addPointCloud(attributes) {
1589
+ const accessorIndices = this._addAttributes(attributes);
1590
+ const glTFMesh = {
1591
+ primitives: [
1592
+ {
1593
+ attributes: accessorIndices,
1594
+ mode: 0
1595
+ }
1596
+ ]
1597
+ };
1598
+ this.json.meshes = this.json.meshes || [];
1599
+ this.json.meshes.push(glTFMesh);
1600
+ return this.json.meshes.length - 1;
1601
+ }
1602
+ addImage(imageData, mimeTypeOpt) {
1603
+ const metadata = getBinaryImageMetadata(imageData);
1604
+ const mimeType = mimeTypeOpt || metadata?.mimeType;
1605
+ const bufferViewIndex = this.addBufferView(imageData);
1606
+ const glTFImage = {
1607
+ bufferView: bufferViewIndex,
1608
+ mimeType
1609
+ };
1610
+ this.json.images = this.json.images || [];
1611
+ this.json.images.push(glTFImage);
1612
+ return this.json.images.length - 1;
1613
+ }
1614
+ addBufferView(buffer) {
1615
+ const byteLength = buffer.byteLength;
1616
+ assert3(Number.isFinite(byteLength));
1617
+ this.sourceBuffers = this.sourceBuffers || [];
1618
+ this.sourceBuffers.push(buffer);
1619
+ const glTFBufferView = {
1620
+ buffer: 0,
1621
+ byteOffset: this.byteLength,
1622
+ byteLength
1623
+ };
1624
+ this.byteLength += padToNBytes(byteLength, 4);
1625
+ this.json.bufferViews = this.json.bufferViews || [];
1626
+ this.json.bufferViews.push(glTFBufferView);
1627
+ return this.json.bufferViews.length - 1;
1628
+ }
1629
+ addAccessor(bufferViewIndex, accessor) {
1630
+ const glTFAccessor = {
1631
+ bufferView: bufferViewIndex,
1632
+ type: getAccessorTypeFromSize(accessor.size),
1633
+ componentType: accessor.componentType,
1634
+ count: accessor.count,
1635
+ max: accessor.max,
1636
+ min: accessor.min
1637
+ };
1638
+ this.json.accessors = this.json.accessors || [];
1639
+ this.json.accessors.push(glTFAccessor);
1640
+ return this.json.accessors.length - 1;
1641
+ }
1642
+ addBinaryBuffer(sourceBuffer, accessor = { size: 3 }) {
1643
+ const bufferViewIndex = this.addBufferView(sourceBuffer);
1644
+ let minMax = { min: accessor.min, max: accessor.max };
1645
+ if (!minMax.min || !minMax.max) {
1646
+ minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);
1647
+ }
1648
+ const accessorDefaults = {
1649
+ size: accessor.size,
1650
+ componentType: getComponentTypeFromArray(sourceBuffer),
1651
+ count: Math.round(sourceBuffer.length / accessor.size),
1652
+ min: minMax.min,
1653
+ max: minMax.max
1654
+ };
1655
+ return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));
1656
+ }
1657
+ addTexture(texture) {
1658
+ const { imageIndex } = texture;
1659
+ const glTFTexture = {
1660
+ source: imageIndex
1661
+ };
1662
+ this.json.textures = this.json.textures || [];
1663
+ this.json.textures.push(glTFTexture);
1664
+ return this.json.textures.length - 1;
1665
+ }
1666
+ addMaterial(pbrMaterialInfo) {
1667
+ this.json.materials = this.json.materials || [];
1668
+ this.json.materials.push(pbrMaterialInfo);
1669
+ return this.json.materials.length - 1;
1670
+ }
1671
+ createBinaryChunk() {
1672
+ this.gltf.buffers = [];
1673
+ const totalByteLength = this.byteLength;
1674
+ const arrayBuffer = new ArrayBuffer(totalByteLength);
1675
+ const targetArray = new Uint8Array(arrayBuffer);
1676
+ let dstByteOffset = 0;
1677
+ for (const sourceBuffer of this.sourceBuffers || []) {
1678
+ dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);
1679
+ }
1680
+ if (this.json?.buffers?.[0]) {
1681
+ this.json.buffers[0].byteLength = totalByteLength;
1682
+ } else {
1683
+ this.json.buffers = [{ byteLength: totalByteLength }];
1684
+ }
1685
+ this.gltf.binary = arrayBuffer;
1686
+ this.sourceBuffers = [arrayBuffer];
1687
+ }
1688
+ _removeStringFromArray(array, string) {
1689
+ let found = true;
1690
+ while (found) {
1691
+ const index = array.indexOf(string);
1692
+ if (index > -1) {
1693
+ array.splice(index, 1);
1694
+ } else {
1695
+ found = false;
1696
+ }
1697
+ }
1698
+ }
1699
+ _addAttributes(attributes = {}) {
1700
+ const result = {};
1701
+ for (const attributeKey in attributes) {
1702
+ const attributeData = attributes[attributeKey];
1703
+ const attrName = this._getGltfAttributeName(attributeKey);
1704
+ const accessor = this.addBinaryBuffer(attributeData.value, attributeData);
1705
+ result[attrName] = accessor;
1706
+ }
1707
+ return result;
1708
+ }
1709
+ _addIndices(indices) {
1710
+ return this.addBinaryBuffer(indices, { size: 1 });
1711
+ }
1712
+ _getGltfAttributeName(attributeName) {
1713
+ switch (attributeName.toLowerCase()) {
1714
+ case "position":
1715
+ case "positions":
1716
+ case "vertices":
1717
+ return "POSITION";
1718
+ case "normal":
1719
+ case "normals":
1720
+ return "NORMAL";
1721
+ case "color":
1722
+ case "colors":
1723
+ return "COLOR_0";
1724
+ case "texcoord":
1725
+ case "texcoords":
1726
+ return "TEXCOORD_0";
1727
+ default:
1728
+ return attributeName;
1729
+ }
1730
+ }
1731
+ _getAccessorMinMax(buffer, size) {
1732
+ const result = { min: null, max: null };
1733
+ if (buffer.length < size) {
1734
+ return result;
1735
+ }
1736
+ result.min = [];
1737
+ result.max = [];
1738
+ const initValues = buffer.subarray(0, size);
1739
+ for (const value of initValues) {
1740
+ result.min.push(value);
1741
+ result.max.push(value);
1742
+ }
1743
+ for (let index = size; index < buffer.length; index += size) {
1744
+ for (let componentIndex = 0; componentIndex < size; componentIndex++) {
1745
+ result.min[0 + componentIndex] = Math.min(result.min[0 + componentIndex], buffer[index + componentIndex]);
1746
+ result.max[0 + componentIndex] = Math.max(result.max[0 + componentIndex], buffer[index + componentIndex]);
1747
+ }
1748
+ }
1749
+ return result;
1750
+ }
1751
+ };
1752
+ }
1753
+ });
1754
+
1755
+ // src/meshopt/meshopt-decoder.ts
1756
+ function isMeshoptSupported() {
1757
+ return isWebAssemblySupported;
1758
+ }
1759
+ async function meshoptDecodeGltfBuffer(target, count, size, source, mode, filter = "NONE") {
1760
+ const instance = await loadWasmInstance();
1761
+ decode(instance, instance.exports[DECODERS[mode]], target, count, size, source, instance.exports[FILTERS[filter || "NONE"]]);
1762
+ }
1763
+ async function loadWasmInstance() {
1764
+ if (!wasmPromise) {
1765
+ wasmPromise = loadWasmModule();
1766
+ }
1767
+ return wasmPromise;
1768
+ }
1769
+ async function loadWasmModule() {
1770
+ let wasm = wasm_base;
1771
+ if (WebAssembly.validate(detector)) {
1772
+ wasm = wasm_simd;
1773
+ console.log("Warning: meshopt_decoder is using experimental SIMD support");
1774
+ }
1775
+ const result = await WebAssembly.instantiate(unpack(wasm), {});
1776
+ await result.instance.exports.__wasm_call_ctors();
1777
+ return result.instance;
1778
+ }
1779
+ function unpack(data) {
1780
+ const result = new Uint8Array(data.length);
1781
+ for (let i2 = 0; i2 < data.length; ++i2) {
1782
+ const ch = data.charCodeAt(i2);
1783
+ result[i2] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62;
1784
+ }
1785
+ let write = 0;
1786
+ for (let i2 = 0; i2 < data.length; ++i2) {
1787
+ result[write++] = result[i2] < 60 ? wasmpack[result[i2]] : (result[i2] - 60) * 64 + result[++i2];
1788
+ }
1789
+ return result.buffer.slice(0, write);
1790
+ }
1791
+ function decode(instance, fun, target, count, size, source, filter) {
1792
+ const sbrk = instance.exports.sbrk;
1793
+ const count4 = count + 3 & ~3;
1794
+ const tp = sbrk(count4 * size);
1795
+ const sp = sbrk(source.length);
1796
+ const heap = new Uint8Array(instance.exports.memory.buffer);
1797
+ heap.set(source, sp);
1798
+ const res = fun(tp, count, size, sp, source.length);
1799
+ if (res === 0 && filter) {
1800
+ filter(tp, count4, size);
1801
+ }
1802
+ target.set(heap.subarray(tp, tp + count * size));
1803
+ sbrk(tp - sbrk(0));
1804
+ if (res !== 0) {
1805
+ throw new Error(`Malformed buffer data: ${res}`);
1806
+ }
1807
+ }
1808
+ var isWebAssemblySupported, wasm_base, wasm_simd, detector, wasmpack, FILTERS, DECODERS, wasmPromise;
1809
+ var init_meshopt_decoder = __esm({
1810
+ "src/meshopt/meshopt-decoder.ts"() {
1811
+ isWebAssemblySupported = typeof WebAssembly !== "object";
1812
+ wasm_base = "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";
1813
+ wasm_simd = "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";
1814
+ detector = new Uint8Array([
1815
+ 0,
1816
+ 97,
1817
+ 115,
1818
+ 109,
1819
+ 1,
1820
+ 0,
1821
+ 0,
1822
+ 0,
1823
+ 1,
1824
+ 4,
1825
+ 1,
1826
+ 96,
1827
+ 0,
1828
+ 0,
1829
+ 3,
1830
+ 3,
1831
+ 2,
1832
+ 0,
1833
+ 0,
1834
+ 5,
1835
+ 3,
1836
+ 1,
1837
+ 0,
1838
+ 1,
1839
+ 12,
1840
+ 1,
1841
+ 0,
1842
+ 10,
1843
+ 22,
1844
+ 2,
1845
+ 12,
1846
+ 0,
1847
+ 65,
1848
+ 0,
1849
+ 65,
1850
+ 0,
1851
+ 65,
1852
+ 0,
1853
+ 252,
1854
+ 10,
1855
+ 0,
1856
+ 0,
1857
+ 11,
1858
+ 7,
1859
+ 0,
1860
+ 65,
1861
+ 0,
1862
+ 253,
1863
+ 15,
1864
+ 26,
1865
+ 11
1866
+ ]);
1867
+ wasmpack = new Uint8Array([
1868
+ 32,
1869
+ 0,
1870
+ 65,
1871
+ 253,
1872
+ 3,
1873
+ 1,
1874
+ 2,
1875
+ 34,
1876
+ 4,
1877
+ 106,
1878
+ 6,
1879
+ 5,
1880
+ 11,
1881
+ 8,
1882
+ 7,
1883
+ 20,
1884
+ 13,
1885
+ 33,
1886
+ 12,
1887
+ 16,
1888
+ 128,
1889
+ 9,
1890
+ 116,
1891
+ 64,
1892
+ 19,
1893
+ 113,
1894
+ 127,
1895
+ 15,
1896
+ 10,
1897
+ 21,
1898
+ 22,
1899
+ 14,
1900
+ 255,
1901
+ 66,
1902
+ 24,
1903
+ 54,
1904
+ 136,
1905
+ 107,
1906
+ 18,
1907
+ 23,
1908
+ 192,
1909
+ 26,
1910
+ 114,
1911
+ 118,
1912
+ 132,
1913
+ 17,
1914
+ 77,
1915
+ 101,
1916
+ 130,
1917
+ 144,
1918
+ 27,
1919
+ 87,
1920
+ 131,
1921
+ 44,
1922
+ 45,
1923
+ 74,
1924
+ 156,
1925
+ 154,
1926
+ 70,
1927
+ 167
1928
+ ]);
1929
+ FILTERS = {
1930
+ 0: "",
1931
+ 1: "meshopt_decodeFilterOct",
1932
+ 2: "meshopt_decodeFilterQuat",
1933
+ 3: "meshopt_decodeFilterExp",
1934
+ NONE: "",
1935
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
1936
+ QUATERNION: "meshopt_decodeFilterQuat",
1937
+ EXPONENTIAL: "meshopt_decodeFilterExp"
1938
+ };
1939
+ DECODERS = {
1940
+ 0: "meshopt_decodeVertexBuffer",
1941
+ 1: "meshopt_decodeIndexBuffer",
1942
+ 2: "meshopt_decodeIndexSequence",
1943
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
1944
+ TRIANGLES: "meshopt_decodeIndexBuffer",
1945
+ INDICES: "meshopt_decodeIndexSequence"
1946
+ };
1947
+ }
1948
+ });
1949
+
1950
+ // src/lib/extensions/EXT_meshopt_compression.ts
1951
+ var EXT_meshopt_compression_exports = {};
1952
+ __export(EXT_meshopt_compression_exports, {
1953
+ decode: () => decode2,
1954
+ name: () => name,
1955
+ preprocess: () => preprocess
1956
+ });
1957
+ function preprocess(gltfData) {
1958
+ const scenegraph = new GLTFScenegraph(gltfData);
1959
+ if (scenegraph.getRequiredExtensions().includes(EXT_MESHOPT_COMPRESSION) && !isMeshoptSupported()) {
1960
+ throw new Error(`gltf: Required extension ${EXT_MESHOPT_COMPRESSION} not supported by browser`);
1961
+ }
1962
+ }
1963
+ async function decode2(gltfData, options) {
1964
+ const scenegraph = new GLTFScenegraph(gltfData);
1965
+ if (!options?.gltf?.decompressMeshes) {
1966
+ return;
1967
+ }
1968
+ const promises = [];
1969
+ for (const bufferViewIndex of gltfData.json.bufferViews || []) {
1970
+ promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));
1971
+ }
1972
+ await Promise.all(promises);
1973
+ scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);
1974
+ }
1975
+ async function decodeMeshoptBufferView(scenegraph, bufferView) {
1976
+ const meshoptExtension = scenegraph.getObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);
1977
+ if (meshoptExtension) {
1978
+ const buffer = bufferView.buffer;
1979
+ const {
1980
+ byteOffset = 0,
1981
+ byteLength = 0,
1982
+ byteStride,
1983
+ count,
1984
+ mode,
1985
+ filter = "NONE"
1986
+ } = meshoptExtension;
1987
+ const source = new Uint8Array(buffer, byteOffset, byteLength);
1988
+ const result = new ArrayBuffer(count * byteStride);
1989
+ await meshoptDecodeGltfBuffer(new Uint8Array(result), count, byteStride, source, mode, filter);
1990
+ return result;
1991
+ }
1992
+ return null;
1993
+ }
1994
+ var EXT_MESHOPT_COMPRESSION, name;
1995
+ var init_EXT_meshopt_compression = __esm({
1996
+ "src/lib/extensions/EXT_meshopt_compression.ts"() {
1997
+ init_gltf_scenegraph();
1998
+ init_meshopt_decoder();
1999
+ EXT_MESHOPT_COMPRESSION = "EXT_meshopt_compression";
2000
+ name = EXT_MESHOPT_COMPRESSION;
2001
+ }
2002
+ });
2003
+
2004
+ // src/lib/extensions/EXT_texture_webp.ts
2005
+ var EXT_texture_webp_exports = {};
2006
+ __export(EXT_texture_webp_exports, {
2007
+ name: () => name2,
2008
+ preprocess: () => preprocess2
2009
+ });
2010
+ function preprocess2(gltfData, options) {
2011
+ const scenegraph = new GLTFScenegraph(gltfData);
2012
+ if (!_isImageFormatSupported("image/webp")) {
2013
+ if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {
2014
+ throw new Error(`gltf: Required extension ${EXT_TEXTURE_WEBP} not supported by browser`);
2015
+ }
2016
+ return;
2017
+ }
2018
+ const { json } = scenegraph;
2019
+ for (const texture of json.textures || []) {
2020
+ const extension = scenegraph.getObjectExtension(texture, EXT_TEXTURE_WEBP);
2021
+ if (extension) {
2022
+ texture.source = extension.source;
2023
+ }
2024
+ scenegraph.removeObjectExtension(texture, EXT_TEXTURE_WEBP);
2025
+ }
2026
+ scenegraph.removeExtension(EXT_TEXTURE_WEBP);
2027
+ }
2028
+ var EXT_TEXTURE_WEBP, name2;
2029
+ var init_EXT_texture_webp = __esm({
2030
+ "src/lib/extensions/EXT_texture_webp.ts"() {
2031
+ init_src3();
2032
+ init_gltf_scenegraph();
2033
+ EXT_TEXTURE_WEBP = "EXT_texture_webp";
2034
+ name2 = EXT_TEXTURE_WEBP;
2035
+ }
2036
+ });
2037
+
2038
+ // src/lib/extensions/KHR_texture_basisu.ts
2039
+ var KHR_texture_basisu_exports = {};
2040
+ __export(KHR_texture_basisu_exports, {
2041
+ name: () => name3,
2042
+ preprocess: () => preprocess3
2043
+ });
2044
+ function preprocess3(gltfData, options) {
2045
+ const scene = new GLTFScenegraph(gltfData);
2046
+ const { json } = scene;
2047
+ for (const texture of json.textures || []) {
2048
+ const extension = scene.getObjectExtension(texture, KHR_TEXTURE_BASISU);
2049
+ if (extension) {
2050
+ texture.source = extension.source;
2051
+ }
2052
+ scene.removeObjectExtension(texture, KHR_TEXTURE_BASISU);
2053
+ }
2054
+ scene.removeExtension(KHR_TEXTURE_BASISU);
2055
+ }
2056
+ var KHR_TEXTURE_BASISU, name3;
2057
+ var init_KHR_texture_basisu = __esm({
2058
+ "src/lib/extensions/KHR_texture_basisu.ts"() {
2059
+ init_gltf_scenegraph();
2060
+ KHR_TEXTURE_BASISU = "KHR_texture_basisu";
2061
+ name3 = KHR_TEXTURE_BASISU;
2062
+ }
2063
+ });
2064
+
2065
+ // ../draco/src/lib/utils/version.ts
2066
+ var VERSION7;
2067
+ var init_version5 = __esm({
2068
+ "../draco/src/lib/utils/version.ts"() {
2069
+ VERSION7 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
2070
+ }
2071
+ });
2072
+
2073
+ // ../draco/src/draco-loader.ts
2074
+ var DEFAULT_DRACO_OPTIONS, DracoLoader;
2075
+ var init_draco_loader = __esm({
2076
+ "../draco/src/draco-loader.ts"() {
2077
+ init_version5();
2078
+ DEFAULT_DRACO_OPTIONS = {
2079
+ draco: {
2080
+ decoderType: typeof WebAssembly === "object" ? "wasm" : "js",
2081
+ libraryPath: "libs/",
2082
+ extraAttributes: {},
2083
+ attributeNameEntry: void 0
2084
+ }
2085
+ };
2086
+ DracoLoader = {
2087
+ name: "Draco",
2088
+ id: "draco",
2089
+ module: "draco",
2090
+ shapes: ["mesh"],
2091
+ version: VERSION7,
2092
+ worker: true,
2093
+ extensions: ["drc"],
2094
+ mimeTypes: ["application/octet-stream"],
2095
+ binary: true,
2096
+ tests: ["DRACO"],
2097
+ options: DEFAULT_DRACO_OPTIONS
2098
+ };
2099
+ }
2100
+ });
2101
+
2102
+ // ../schema/src/category/mesh/mesh-utils.ts
2103
+ function getMeshBoundingBox(attributes) {
2104
+ let minX = Infinity;
2105
+ let minY = Infinity;
2106
+ let minZ = Infinity;
2107
+ let maxX = -Infinity;
2108
+ let maxY = -Infinity;
2109
+ let maxZ = -Infinity;
2110
+ const positions = attributes.POSITION ? attributes.POSITION.value : [];
2111
+ const len = positions && positions.length;
2112
+ for (let i2 = 0; i2 < len; i2 += 3) {
2113
+ const x = positions[i2];
2114
+ const y = positions[i2 + 1];
2115
+ const z = positions[i2 + 2];
2116
+ minX = x < minX ? x : minX;
2117
+ minY = y < minY ? y : minY;
2118
+ minZ = z < minZ ? z : minZ;
2119
+ maxX = x > maxX ? x : maxX;
2120
+ maxY = y > maxY ? y : maxY;
2121
+ maxZ = z > maxZ ? z : maxZ;
2122
+ }
2123
+ return [
2124
+ [minX, minY, minZ],
2125
+ [maxX, maxY, maxZ]
2126
+ ];
2127
+ }
2128
+ var init_mesh_utils = __esm({
2129
+ "../schema/src/category/mesh/mesh-utils.ts"() {
2130
+ }
2131
+ });
2132
+
2133
+ // ../schema/src/lib/utils/assert.ts
2134
+ function assert4(condition, message) {
2135
+ if (!condition) {
2136
+ throw new Error(message || "loader assertion failed.");
2137
+ }
2138
+ }
2139
+ var init_assert4 = __esm({
2140
+ "../schema/src/lib/utils/assert.ts"() {
2141
+ }
2142
+ });
2143
+
2144
+ // ../schema/src/lib/schema/impl/schema.ts
2145
+ function checkNames(fields) {
2146
+ const usedNames = {};
2147
+ for (const field of fields) {
2148
+ if (usedNames[field.name]) {
2149
+ console.warn("Schema: duplicated field name", field.name, field);
2150
+ }
2151
+ usedNames[field.name] = true;
2152
+ }
2153
+ }
2154
+ function mergeMaps(m1, m2) {
2155
+ return new Map([...m1 || new Map(), ...m2 || new Map()]);
2156
+ }
2157
+ var Schema;
2158
+ var init_schema = __esm({
2159
+ "../schema/src/lib/schema/impl/schema.ts"() {
2160
+ init_assert4();
2161
+ Schema = class {
2162
+ constructor(fields, metadata) {
2163
+ assert4(Array.isArray(fields));
2164
+ checkNames(fields);
2165
+ this.fields = fields;
2166
+ this.metadata = metadata || new Map();
2167
+ }
2168
+ compareTo(other) {
2169
+ if (this.metadata !== other.metadata) {
2170
+ return false;
2171
+ }
2172
+ if (this.fields.length !== other.fields.length) {
2173
+ return false;
2174
+ }
2175
+ for (let i2 = 0; i2 < this.fields.length; ++i2) {
2176
+ if (!this.fields[i2].compareTo(other.fields[i2])) {
2177
+ return false;
2178
+ }
2179
+ }
2180
+ return true;
2181
+ }
2182
+ select(...columnNames) {
2183
+ const nameMap = Object.create(null);
2184
+ for (const name8 of columnNames) {
2185
+ nameMap[name8] = true;
2186
+ }
2187
+ const selectedFields = this.fields.filter((field) => nameMap[field.name]);
2188
+ return new Schema(selectedFields, this.metadata);
2189
+ }
2190
+ selectAt(...columnIndices) {
2191
+ const selectedFields = columnIndices.map((index) => this.fields[index]).filter(Boolean);
2192
+ return new Schema(selectedFields, this.metadata);
2193
+ }
2194
+ assign(schemaOrFields) {
2195
+ let fields;
2196
+ let metadata = this.metadata;
2197
+ if (schemaOrFields instanceof Schema) {
2198
+ const otherSchema = schemaOrFields;
2199
+ fields = otherSchema.fields;
2200
+ metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);
2201
+ } else {
2202
+ fields = schemaOrFields;
2203
+ }
2204
+ const fieldMap = Object.create(null);
2205
+ for (const field of this.fields) {
2206
+ fieldMap[field.name] = field;
2207
+ }
2208
+ for (const field of fields) {
2209
+ fieldMap[field.name] = field;
2210
+ }
2211
+ const mergedFields = Object.values(fieldMap);
2212
+ return new Schema(mergedFields, metadata);
2213
+ }
2214
+ };
2215
+ }
2216
+ });
2217
+
2218
+ // ../schema/src/lib/schema/impl/field.ts
2219
+ var Field;
2220
+ var init_field = __esm({
2221
+ "../schema/src/lib/schema/impl/field.ts"() {
2222
+ Field = class {
2223
+ constructor(name8, type, nullable = false, metadata = new Map()) {
2224
+ this.name = name8;
2225
+ this.type = type;
2226
+ this.nullable = nullable;
2227
+ this.metadata = metadata;
2228
+ }
2229
+ get typeId() {
2230
+ return this.type && this.type.typeId;
2231
+ }
2232
+ clone() {
2233
+ return new Field(this.name, this.type, this.nullable, this.metadata);
2234
+ }
2235
+ compareTo(other) {
2236
+ return this.name === other.name && this.type === other.type && this.nullable === other.nullable && this.metadata === other.metadata;
2237
+ }
2238
+ toString() {
2239
+ return `${this.type}${this.nullable ? ", nullable" : ""}${this.metadata ? `, metadata: ${this.metadata}` : ""}`;
2240
+ }
2241
+ };
2242
+ }
2243
+ });
2244
+
2245
+ // ../schema/src/lib/schema/impl/enum.ts
2246
+ var Type;
2247
+ var init_enum = __esm({
2248
+ "../schema/src/lib/schema/impl/enum.ts"() {
2249
+ (function(Type2) {
2250
+ Type2[Type2["NONE"] = 0] = "NONE";
2251
+ Type2[Type2["Null"] = 1] = "Null";
2252
+ Type2[Type2["Int"] = 2] = "Int";
2253
+ Type2[Type2["Float"] = 3] = "Float";
2254
+ Type2[Type2["Binary"] = 4] = "Binary";
2255
+ Type2[Type2["Utf8"] = 5] = "Utf8";
2256
+ Type2[Type2["Bool"] = 6] = "Bool";
2257
+ Type2[Type2["Decimal"] = 7] = "Decimal";
2258
+ Type2[Type2["Date"] = 8] = "Date";
2259
+ Type2[Type2["Time"] = 9] = "Time";
2260
+ Type2[Type2["Timestamp"] = 10] = "Timestamp";
2261
+ Type2[Type2["Interval"] = 11] = "Interval";
2262
+ Type2[Type2["List"] = 12] = "List";
2263
+ Type2[Type2["Struct"] = 13] = "Struct";
2264
+ Type2[Type2["Union"] = 14] = "Union";
2265
+ Type2[Type2["FixedSizeBinary"] = 15] = "FixedSizeBinary";
2266
+ Type2[Type2["FixedSizeList"] = 16] = "FixedSizeList";
2267
+ Type2[Type2["Map"] = 17] = "Map";
2268
+ Type2[Type2["Dictionary"] = -1] = "Dictionary";
2269
+ Type2[Type2["Int8"] = -2] = "Int8";
2270
+ Type2[Type2["Int16"] = -3] = "Int16";
2271
+ Type2[Type2["Int32"] = -4] = "Int32";
2272
+ Type2[Type2["Int64"] = -5] = "Int64";
2273
+ Type2[Type2["Uint8"] = -6] = "Uint8";
2274
+ Type2[Type2["Uint16"] = -7] = "Uint16";
2275
+ Type2[Type2["Uint32"] = -8] = "Uint32";
2276
+ Type2[Type2["Uint64"] = -9] = "Uint64";
2277
+ Type2[Type2["Float16"] = -10] = "Float16";
2278
+ Type2[Type2["Float32"] = -11] = "Float32";
2279
+ Type2[Type2["Float64"] = -12] = "Float64";
2280
+ Type2[Type2["DateDay"] = -13] = "DateDay";
2281
+ Type2[Type2["DateMillisecond"] = -14] = "DateMillisecond";
2282
+ Type2[Type2["TimestampSecond"] = -15] = "TimestampSecond";
2283
+ Type2[Type2["TimestampMillisecond"] = -16] = "TimestampMillisecond";
2284
+ Type2[Type2["TimestampMicrosecond"] = -17] = "TimestampMicrosecond";
2285
+ Type2[Type2["TimestampNanosecond"] = -18] = "TimestampNanosecond";
2286
+ Type2[Type2["TimeSecond"] = -19] = "TimeSecond";
2287
+ Type2[Type2["TimeMillisecond"] = -20] = "TimeMillisecond";
2288
+ Type2[Type2["TimeMicrosecond"] = -21] = "TimeMicrosecond";
2289
+ Type2[Type2["TimeNanosecond"] = -22] = "TimeNanosecond";
2290
+ Type2[Type2["DenseUnion"] = -23] = "DenseUnion";
2291
+ Type2[Type2["SparseUnion"] = -24] = "SparseUnion";
2292
+ Type2[Type2["IntervalDayTime"] = -25] = "IntervalDayTime";
2293
+ Type2[Type2["IntervalYearMonth"] = -26] = "IntervalYearMonth";
2294
+ })(Type || (Type = {}));
2295
+ }
2296
+ });
2297
+
2298
+ // ../schema/src/lib/schema/impl/type.ts
2299
+ var DataType, Null, Bool, Int, Int8, Int16, Int32, Uint8, Uint16, Uint32, Precision, Float, Float32, Float64, Binary, Utf8, DateUnit, Date, TimeUnit, Time, Timestamp, IntervalUnit, Interval, FixedSizeList, Struct;
2300
+ var init_type = __esm({
2301
+ "../schema/src/lib/schema/impl/type.ts"() {
2302
+ init_enum();
2303
+ DataType = class {
2304
+ static isNull(x) {
2305
+ return x && x.typeId === Type.Null;
2306
+ }
2307
+ static isInt(x) {
2308
+ return x && x.typeId === Type.Int;
2309
+ }
2310
+ static isFloat(x) {
2311
+ return x && x.typeId === Type.Float;
2312
+ }
2313
+ static isBinary(x) {
2314
+ return x && x.typeId === Type.Binary;
2315
+ }
2316
+ static isUtf8(x) {
2317
+ return x && x.typeId === Type.Utf8;
2318
+ }
2319
+ static isBool(x) {
2320
+ return x && x.typeId === Type.Bool;
2321
+ }
2322
+ static isDecimal(x) {
2323
+ return x && x.typeId === Type.Decimal;
2324
+ }
2325
+ static isDate(x) {
2326
+ return x && x.typeId === Type.Date;
2327
+ }
2328
+ static isTime(x) {
2329
+ return x && x.typeId === Type.Time;
2330
+ }
2331
+ static isTimestamp(x) {
2332
+ return x && x.typeId === Type.Timestamp;
2333
+ }
2334
+ static isInterval(x) {
2335
+ return x && x.typeId === Type.Interval;
2336
+ }
2337
+ static isList(x) {
2338
+ return x && x.typeId === Type.List;
2339
+ }
2340
+ static isStruct(x) {
2341
+ return x && x.typeId === Type.Struct;
2342
+ }
2343
+ static isUnion(x) {
2344
+ return x && x.typeId === Type.Union;
2345
+ }
2346
+ static isFixedSizeBinary(x) {
2347
+ return x && x.typeId === Type.FixedSizeBinary;
2348
+ }
2349
+ static isFixedSizeList(x) {
2350
+ return x && x.typeId === Type.FixedSizeList;
2351
+ }
2352
+ static isMap(x) {
2353
+ return x && x.typeId === Type.Map;
2354
+ }
2355
+ static isDictionary(x) {
2356
+ return x && x.typeId === Type.Dictionary;
2357
+ }
2358
+ get typeId() {
2359
+ return Type.NONE;
2360
+ }
2361
+ compareTo(other) {
2362
+ return this === other;
2363
+ }
2364
+ };
2365
+ Null = class extends DataType {
2366
+ get typeId() {
2367
+ return Type.Null;
2368
+ }
2369
+ get [Symbol.toStringTag]() {
2370
+ return "Null";
2371
+ }
2372
+ toString() {
2373
+ return "Null";
2374
+ }
2375
+ };
2376
+ Bool = class extends DataType {
2377
+ get typeId() {
2378
+ return Type.Bool;
2379
+ }
2380
+ get [Symbol.toStringTag]() {
2381
+ return "Bool";
2382
+ }
2383
+ toString() {
2384
+ return "Bool";
2385
+ }
2386
+ };
2387
+ Int = class extends DataType {
2388
+ constructor(isSigned, bitWidth) {
2389
+ super();
2390
+ this.isSigned = isSigned;
2391
+ this.bitWidth = bitWidth;
2392
+ }
2393
+ get typeId() {
2394
+ return Type.Int;
2395
+ }
2396
+ get [Symbol.toStringTag]() {
2397
+ return "Int";
2398
+ }
2399
+ toString() {
2400
+ return `${this.isSigned ? "I" : "Ui"}nt${this.bitWidth}`;
2401
+ }
2402
+ };
2403
+ Int8 = class extends Int {
2404
+ constructor() {
2405
+ super(true, 8);
2406
+ }
2407
+ };
2408
+ Int16 = class extends Int {
2409
+ constructor() {
2410
+ super(true, 16);
2411
+ }
2412
+ };
2413
+ Int32 = class extends Int {
2414
+ constructor() {
2415
+ super(true, 32);
2416
+ }
2417
+ };
2418
+ Uint8 = class extends Int {
2419
+ constructor() {
2420
+ super(false, 8);
2421
+ }
2422
+ };
2423
+ Uint16 = class extends Int {
2424
+ constructor() {
2425
+ super(false, 16);
2426
+ }
2427
+ };
2428
+ Uint32 = class extends Int {
2429
+ constructor() {
2430
+ super(false, 32);
2431
+ }
2432
+ };
2433
+ Precision = {
2434
+ HALF: 16,
2435
+ SINGLE: 32,
2436
+ DOUBLE: 64
2437
+ };
2438
+ Float = class extends DataType {
2439
+ constructor(precision) {
2440
+ super();
2441
+ this.precision = precision;
2442
+ }
2443
+ get typeId() {
2444
+ return Type.Float;
2445
+ }
2446
+ get [Symbol.toStringTag]() {
2447
+ return "Float";
2448
+ }
2449
+ toString() {
2450
+ return `Float${this.precision}`;
2451
+ }
2452
+ };
2453
+ Float32 = class extends Float {
2454
+ constructor() {
2455
+ super(Precision.SINGLE);
2456
+ }
2457
+ };
2458
+ Float64 = class extends Float {
2459
+ constructor() {
2460
+ super(Precision.DOUBLE);
2461
+ }
2462
+ };
2463
+ Binary = class extends DataType {
2464
+ constructor() {
2465
+ super();
2466
+ }
2467
+ get typeId() {
2468
+ return Type.Binary;
2469
+ }
2470
+ toString() {
2471
+ return "Binary";
2472
+ }
2473
+ get [Symbol.toStringTag]() {
2474
+ return "Binary";
2475
+ }
2476
+ };
2477
+ Utf8 = class extends DataType {
2478
+ get typeId() {
2479
+ return Type.Utf8;
2480
+ }
2481
+ get [Symbol.toStringTag]() {
2482
+ return "Utf8";
2483
+ }
2484
+ toString() {
2485
+ return "Utf8";
2486
+ }
2487
+ };
2488
+ DateUnit = {
2489
+ DAY: 0,
2490
+ MILLISECOND: 1
2491
+ };
2492
+ Date = class extends DataType {
2493
+ constructor(unit) {
2494
+ super();
2495
+ this.unit = unit;
2496
+ }
2497
+ get typeId() {
2498
+ return Type.Date;
2499
+ }
2500
+ get [Symbol.toStringTag]() {
2501
+ return "Date";
2502
+ }
2503
+ toString() {
2504
+ return `Date${(this.unit + 1) * 32}<${DateUnit[this.unit]}>`;
2505
+ }
2506
+ };
2507
+ TimeUnit = {
2508
+ SECOND: 1,
2509
+ MILLISECOND: 1e3,
2510
+ MICROSECOND: 1e6,
2511
+ NANOSECOND: 1e9
2512
+ };
2513
+ Time = class extends DataType {
2514
+ constructor(unit, bitWidth) {
2515
+ super();
2516
+ this.unit = unit;
2517
+ this.bitWidth = bitWidth;
2518
+ }
2519
+ get typeId() {
2520
+ return Type.Time;
2521
+ }
2522
+ toString() {
2523
+ return `Time${this.bitWidth}<${TimeUnit[this.unit]}>`;
2524
+ }
2525
+ get [Symbol.toStringTag]() {
2526
+ return "Time";
2527
+ }
2528
+ };
2529
+ Timestamp = class extends DataType {
2530
+ constructor(unit, timezone = null) {
2531
+ super();
2532
+ this.unit = unit;
2533
+ this.timezone = timezone;
2534
+ }
2535
+ get typeId() {
2536
+ return Type.Timestamp;
2537
+ }
2538
+ get [Symbol.toStringTag]() {
2539
+ return "Timestamp";
2540
+ }
2541
+ toString() {
2542
+ return `Timestamp<${TimeUnit[this.unit]}${this.timezone ? `, ${this.timezone}` : ""}>`;
2543
+ }
2544
+ };
2545
+ IntervalUnit = {
2546
+ DAY_TIME: 0,
2547
+ YEAR_MONTH: 1
2548
+ };
2549
+ Interval = class extends DataType {
2550
+ constructor(unit) {
2551
+ super();
2552
+ this.unit = unit;
2553
+ }
2554
+ get typeId() {
2555
+ return Type.Interval;
2556
+ }
2557
+ get [Symbol.toStringTag]() {
2558
+ return "Interval";
2559
+ }
2560
+ toString() {
2561
+ return `Interval<${IntervalUnit[this.unit]}>`;
2562
+ }
2563
+ };
2564
+ FixedSizeList = class extends DataType {
2565
+ constructor(listSize, child) {
2566
+ super();
2567
+ this.listSize = listSize;
2568
+ this.children = [child];
2569
+ }
2570
+ get typeId() {
2571
+ return Type.FixedSizeList;
2572
+ }
2573
+ get valueType() {
2574
+ return this.children[0].type;
2575
+ }
2576
+ get valueField() {
2577
+ return this.children[0];
2578
+ }
2579
+ get [Symbol.toStringTag]() {
2580
+ return "FixedSizeList";
2581
+ }
2582
+ toString() {
2583
+ return `FixedSizeList[${this.listSize}]<${this.valueType}>`;
2584
+ }
2585
+ };
2586
+ Struct = class extends DataType {
2587
+ constructor(children) {
2588
+ super();
2589
+ this.children = children;
2590
+ }
2591
+ get typeId() {
2592
+ return Type.Struct;
2593
+ }
2594
+ toString() {
2595
+ return `Struct<{${this.children.map((f2) => `${f2.name}:${f2.type}`).join(", ")}}>`;
2596
+ }
2597
+ get [Symbol.toStringTag]() {
2598
+ return "Struct";
2599
+ }
2600
+ };
2601
+ }
2602
+ });
2603
+
2604
+ // ../schema/src/lib/schema/schema.ts
2605
+ var init_schema2 = __esm({
2606
+ "../schema/src/lib/schema/schema.ts"() {
2607
+ init_schema();
2608
+ init_field();
2609
+ init_type();
2610
+ }
2611
+ });
2612
+
2613
+ // ../schema/src/lib/arrow/arrow-like-type-utils.ts
2614
+ function getArrowTypeFromTypedArray(array) {
2615
+ switch (array.constructor) {
2616
+ case Int8Array:
2617
+ return new Int8();
2618
+ case Uint8Array:
2619
+ return new Uint8();
2620
+ case Int16Array:
2621
+ return new Int16();
2622
+ case Uint16Array:
2623
+ return new Uint16();
2624
+ case Int32Array:
2625
+ return new Int32();
2626
+ case Uint32Array:
2627
+ return new Uint32();
2628
+ case Float32Array:
2629
+ return new Float32();
2630
+ case Float64Array:
2631
+ return new Float64();
2632
+ default:
2633
+ throw new Error("array type not supported");
2634
+ }
2635
+ }
2636
+ var init_arrow_like_type_utils = __esm({
2637
+ "../schema/src/lib/arrow/arrow-like-type-utils.ts"() {
2638
+ init_schema2();
2639
+ }
2640
+ });
2641
+
2642
+ // ../schema/src/category/mesh/deduce-mesh-schema.ts
2643
+ function deduceMeshField(attributeName, attribute, optionalMetadata) {
2644
+ const type = getArrowTypeFromTypedArray(attribute.value);
2645
+ const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);
2646
+ const field = new Field(attributeName, new FixedSizeList(attribute.size, new Field("value", type)), false, metadata);
2647
+ return field;
2648
+ }
2649
+ function makeMeshAttributeMetadata(attribute) {
2650
+ const result = new Map();
2651
+ if ("byteOffset" in attribute) {
2652
+ result.set("byteOffset", attribute.byteOffset.toString(10));
2653
+ }
2654
+ if ("byteStride" in attribute) {
2655
+ result.set("byteStride", attribute.byteStride.toString(10));
2656
+ }
2657
+ if ("normalized" in attribute) {
2658
+ result.set("normalized", attribute.normalized.toString());
2659
+ }
2660
+ return result;
2661
+ }
2662
+ var init_deduce_mesh_schema = __esm({
2663
+ "../schema/src/category/mesh/deduce-mesh-schema.ts"() {
2664
+ init_schema2();
2665
+ init_arrow_like_type_utils();
2666
+ }
2667
+ });
2668
+
2669
+ // ../schema/src/index.ts
2670
+ var init_src5 = __esm({
2671
+ "../schema/src/index.ts"() {
2672
+ init_mesh_utils();
2673
+ init_deduce_mesh_schema();
2674
+ init_schema2();
2675
+ }
2676
+ });
2677
+
2678
+ // ../draco/src/lib/utils/get-draco-schema.ts
2679
+ function getDracoSchema(attributes, loaderData, indices) {
2680
+ const metadataMap = makeMetadata(loaderData.metadata);
2681
+ const fields = [];
2682
+ const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);
2683
+ for (const attributeName in attributes) {
2684
+ const attribute = attributes[attributeName];
2685
+ const field = getArrowFieldFromAttribute(attributeName, attribute, namedLoaderDataAttributes[attributeName]);
2686
+ fields.push(field);
2687
+ }
2688
+ if (indices) {
2689
+ const indicesField = getArrowFieldFromAttribute("indices", indices);
2690
+ fields.push(indicesField);
2691
+ }
2692
+ return new Schema(fields, metadataMap);
2693
+ }
2694
+ function transformAttributesLoaderData(loaderData) {
2695
+ const result = {};
2696
+ for (const key in loaderData) {
2697
+ const dracoAttribute = loaderData[key];
2698
+ result[dracoAttribute.name || "undefined"] = dracoAttribute;
2699
+ }
2700
+ return result;
2701
+ }
2702
+ function getArrowFieldFromAttribute(attributeName, attribute, loaderData) {
2703
+ const metadataMap = loaderData ? makeMetadata(loaderData.metadata) : void 0;
2704
+ const field = deduceMeshField(attributeName, attribute, metadataMap);
2705
+ return field;
2706
+ }
2707
+ function makeMetadata(metadata) {
2708
+ const metadataMap = new Map();
2709
+ for (const key in metadata) {
2710
+ metadataMap.set(`${key}.string`, JSON.stringify(metadata[key]));
2711
+ }
2712
+ return metadataMap;
2713
+ }
2714
+ var init_get_draco_schema = __esm({
2715
+ "../draco/src/lib/utils/get-draco-schema.ts"() {
2716
+ init_src5();
2717
+ init_src5();
2718
+ }
2719
+ });
2720
+
2721
+ // ../draco/src/lib/draco-parser.ts
2722
+ function getDracoDataType(draco, attributeType) {
2723
+ switch (attributeType) {
2724
+ case Float32Array:
2725
+ return draco.DT_FLOAT32;
2726
+ case Int8Array:
2727
+ return draco.DT_INT8;
2728
+ case Int16Array:
2729
+ return draco.DT_INT16;
2730
+ case Int32Array:
2731
+ return draco.DT_INT32;
2732
+ case Uint8Array:
2733
+ return draco.DT_UINT8;
2734
+ case Uint16Array:
2735
+ return draco.DT_UINT16;
2736
+ case Uint32Array:
2737
+ return draco.DT_UINT32;
2738
+ default:
2739
+ return draco.DT_INVALID;
2740
+ }
2741
+ }
2742
+ function getInt32Array(dracoArray) {
2743
+ const numValues = dracoArray.size();
2744
+ const intArray = new Int32Array(numValues);
2745
+ for (let i2 = 0; i2 < numValues; i2++) {
2746
+ intArray[i2] = dracoArray.GetValue(i2);
2747
+ }
2748
+ return intArray;
2749
+ }
2750
+ function getUint32Array(dracoArray) {
2751
+ const numValues = dracoArray.size();
2752
+ const intArray = new Int32Array(numValues);
2753
+ for (let i2 = 0; i2 < numValues; i2++) {
2754
+ intArray[i2] = dracoArray.GetValue(i2);
2755
+ }
2756
+ return intArray;
2757
+ }
2758
+ var DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP, DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP, INDEX_ITEM_SIZE, DracoParser;
2759
+ var init_draco_parser = __esm({
2760
+ "../draco/src/lib/draco-parser.ts"() {
2761
+ init_src5();
2762
+ init_get_draco_schema();
2763
+ DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP = {
2764
+ POSITION: "POSITION",
2765
+ NORMAL: "NORMAL",
2766
+ COLOR: "COLOR_0",
2767
+ TEX_COORD: "TEXCOORD_0"
2768
+ };
2769
+ DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP = {
2770
+ 1: Int8Array,
2771
+ 2: Uint8Array,
2772
+ 3: Int16Array,
2773
+ 4: Uint16Array,
2774
+ 5: Int32Array,
2775
+ 6: Uint32Array,
2776
+ 9: Float32Array
2777
+ };
2778
+ INDEX_ITEM_SIZE = 4;
2779
+ DracoParser = class {
2780
+ constructor(draco) {
2781
+ this.draco = draco;
2782
+ this.decoder = new this.draco.Decoder();
2783
+ this.metadataQuerier = new this.draco.MetadataQuerier();
2784
+ }
2785
+ destroy() {
2786
+ this.draco.destroy(this.decoder);
2787
+ this.draco.destroy(this.metadataQuerier);
2788
+ }
2789
+ parseSync(arrayBuffer, options = {}) {
2790
+ const buffer = new this.draco.DecoderBuffer();
2791
+ buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);
2792
+ this._disableAttributeTransforms(options);
2793
+ const geometry_type = this.decoder.GetEncodedGeometryType(buffer);
2794
+ const dracoGeometry = geometry_type === this.draco.TRIANGULAR_MESH ? new this.draco.Mesh() : new this.draco.PointCloud();
2795
+ try {
2796
+ let dracoStatus;
2797
+ switch (geometry_type) {
2798
+ case this.draco.TRIANGULAR_MESH:
2799
+ dracoStatus = this.decoder.DecodeBufferToMesh(buffer, dracoGeometry);
2800
+ break;
2801
+ case this.draco.POINT_CLOUD:
2802
+ dracoStatus = this.decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);
2803
+ break;
2804
+ default:
2805
+ throw new Error("DRACO: Unknown geometry type.");
2806
+ }
2807
+ if (!dracoStatus.ok() || !dracoGeometry.ptr) {
2808
+ const message = `DRACO decompression failed: ${dracoStatus.error_msg()}`;
2809
+ throw new Error(message);
2810
+ }
2811
+ const loaderData = this._getDracoLoaderData(dracoGeometry, geometry_type, options);
2812
+ const geometry = this._getMeshData(dracoGeometry, loaderData, options);
2813
+ const boundingBox = getMeshBoundingBox(geometry.attributes);
2814
+ const schema = getDracoSchema(geometry.attributes, loaderData, geometry.indices);
2815
+ const data = {
2816
+ loader: "draco",
2817
+ loaderData,
2818
+ header: {
2819
+ vertexCount: dracoGeometry.num_points(),
2820
+ boundingBox
2821
+ },
2822
+ ...geometry,
2823
+ schema
2824
+ };
2825
+ return data;
2826
+ } finally {
2827
+ this.draco.destroy(buffer);
2828
+ if (dracoGeometry) {
2829
+ this.draco.destroy(dracoGeometry);
2830
+ }
2831
+ }
2832
+ }
2833
+ _getDracoLoaderData(dracoGeometry, geometry_type, options) {
2834
+ const metadata = this._getTopLevelMetadata(dracoGeometry);
2835
+ const attributes = this._getDracoAttributes(dracoGeometry, options);
2836
+ return {
2837
+ geometry_type,
2838
+ num_attributes: dracoGeometry.num_attributes(),
2839
+ num_points: dracoGeometry.num_points(),
2840
+ num_faces: dracoGeometry instanceof this.draco.Mesh ? dracoGeometry.num_faces() : 0,
2841
+ metadata,
2842
+ attributes
2843
+ };
2844
+ }
2845
+ _getDracoAttributes(dracoGeometry, options) {
2846
+ const dracoAttributes = {};
2847
+ for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {
2848
+ const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);
2849
+ const metadata = this._getAttributeMetadata(dracoGeometry, attributeId);
2850
+ dracoAttributes[dracoAttribute.unique_id()] = {
2851
+ unique_id: dracoAttribute.unique_id(),
2852
+ attribute_type: dracoAttribute.attribute_type(),
2853
+ data_type: dracoAttribute.data_type(),
2854
+ num_components: dracoAttribute.num_components(),
2855
+ byte_offset: dracoAttribute.byte_offset(),
2856
+ byte_stride: dracoAttribute.byte_stride(),
2857
+ normalized: dracoAttribute.normalized(),
2858
+ attribute_index: attributeId,
2859
+ metadata
2860
+ };
2861
+ const quantization = this._getQuantizationTransform(dracoAttribute, options);
2862
+ if (quantization) {
2863
+ dracoAttributes[dracoAttribute.unique_id()].quantization_transform = quantization;
2864
+ }
2865
+ const octahedron = this._getOctahedronTransform(dracoAttribute, options);
2866
+ if (octahedron) {
2867
+ dracoAttributes[dracoAttribute.unique_id()].octahedron_transform = octahedron;
2868
+ }
2869
+ }
2870
+ return dracoAttributes;
2871
+ }
2872
+ _getMeshData(dracoGeometry, loaderData, options) {
2873
+ const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);
2874
+ const positionAttribute = attributes.POSITION;
2875
+ if (!positionAttribute) {
2876
+ throw new Error("DRACO: No position attribute found.");
2877
+ }
2878
+ if (dracoGeometry instanceof this.draco.Mesh) {
2879
+ switch (options.topology) {
2880
+ case "triangle-strip":
2881
+ return {
2882
+ topology: "triangle-strip",
2883
+ mode: 4,
2884
+ attributes,
2885
+ indices: {
2886
+ value: this._getTriangleStripIndices(dracoGeometry),
2887
+ size: 1
2888
+ }
2889
+ };
2890
+ case "triangle-list":
2891
+ default:
2892
+ return {
2893
+ topology: "triangle-list",
2894
+ mode: 5,
2895
+ attributes,
2896
+ indices: {
2897
+ value: this._getTriangleListIndices(dracoGeometry),
2898
+ size: 1
2899
+ }
2900
+ };
2901
+ }
2902
+ }
2903
+ return {
2904
+ topology: "point-list",
2905
+ mode: 0,
2906
+ attributes
2907
+ };
2908
+ }
2909
+ _getMeshAttributes(loaderData, dracoGeometry, options) {
2910
+ const attributes = {};
2911
+ for (const loaderAttribute of Object.values(loaderData.attributes)) {
2912
+ const attributeName = this._deduceAttributeName(loaderAttribute, options);
2913
+ loaderAttribute.name = attributeName;
2914
+ const { value, size } = this._getAttributeValues(dracoGeometry, loaderAttribute);
2915
+ attributes[attributeName] = {
2916
+ value,
2917
+ size,
2918
+ byteOffset: loaderAttribute.byte_offset,
2919
+ byteStride: loaderAttribute.byte_stride,
2920
+ normalized: loaderAttribute.normalized
2921
+ };
2922
+ }
2923
+ return attributes;
2924
+ }
2925
+ _getTriangleListIndices(dracoGeometry) {
2926
+ const numFaces = dracoGeometry.num_faces();
2927
+ const numIndices = numFaces * 3;
2928
+ const byteLength = numIndices * INDEX_ITEM_SIZE;
2929
+ const ptr = this.draco._malloc(byteLength);
2930
+ try {
2931
+ this.decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);
2932
+ return new Uint32Array(this.draco.HEAPF32.buffer, ptr, numIndices).slice();
2933
+ } finally {
2934
+ this.draco._free(ptr);
2935
+ }
2936
+ }
2937
+ _getTriangleStripIndices(dracoGeometry) {
2938
+ const dracoArray = new this.draco.DracoInt32Array();
2939
+ try {
2940
+ this.decoder.GetTriangleStripsFromMesh(dracoGeometry, dracoArray);
2941
+ return getUint32Array(dracoArray);
2942
+ } finally {
2943
+ this.draco.destroy(dracoArray);
2944
+ }
2945
+ }
2946
+ _getAttributeValues(dracoGeometry, attribute) {
2947
+ const TypedArrayCtor = DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP[attribute.data_type];
2948
+ const numComponents = attribute.num_components;
2949
+ const numPoints = dracoGeometry.num_points();
2950
+ const numValues = numPoints * numComponents;
2951
+ const byteLength = numValues * TypedArrayCtor.BYTES_PER_ELEMENT;
2952
+ const dataType = getDracoDataType(this.draco, TypedArrayCtor);
2953
+ let value;
2954
+ const ptr = this.draco._malloc(byteLength);
2955
+ try {
2956
+ const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);
2957
+ this.decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, dracoAttribute, dataType, byteLength, ptr);
2958
+ value = new TypedArrayCtor(this.draco.HEAPF32.buffer, ptr, numValues).slice();
2959
+ } finally {
2960
+ this.draco._free(ptr);
2961
+ }
2962
+ return { value, size: numComponents };
2963
+ }
2964
+ _deduceAttributeName(attribute, options) {
2965
+ const uniqueId = attribute.unique_id;
2966
+ for (const [attributeName, attributeUniqueId] of Object.entries(options.extraAttributes || {})) {
2967
+ if (attributeUniqueId === uniqueId) {
2968
+ return attributeName;
2969
+ }
2970
+ }
2971
+ const thisAttributeType = attribute.attribute_type;
2972
+ for (const dracoAttributeConstant in DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP) {
2973
+ const attributeType = this.draco[dracoAttributeConstant];
2974
+ if (attributeType === thisAttributeType) {
2975
+ return DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP[dracoAttributeConstant];
2976
+ }
2977
+ }
2978
+ const entryName = options.attributeNameEntry || "name";
2979
+ if (attribute.metadata[entryName]) {
2980
+ return attribute.metadata[entryName].string;
2981
+ }
2982
+ return `CUSTOM_ATTRIBUTE_${uniqueId}`;
2983
+ }
2984
+ _getTopLevelMetadata(dracoGeometry) {
2985
+ const dracoMetadata = this.decoder.GetMetadata(dracoGeometry);
2986
+ return this._getDracoMetadata(dracoMetadata);
2987
+ }
2988
+ _getAttributeMetadata(dracoGeometry, attributeId) {
2989
+ const dracoMetadata = this.decoder.GetAttributeMetadata(dracoGeometry, attributeId);
2990
+ return this._getDracoMetadata(dracoMetadata);
2991
+ }
2992
+ _getDracoMetadata(dracoMetadata) {
2993
+ if (!dracoMetadata || !dracoMetadata.ptr) {
2994
+ return {};
2995
+ }
2996
+ const result = {};
2997
+ const numEntries = this.metadataQuerier.NumEntries(dracoMetadata);
2998
+ for (let entryIndex = 0; entryIndex < numEntries; entryIndex++) {
2999
+ const entryName = this.metadataQuerier.GetEntryName(dracoMetadata, entryIndex);
3000
+ result[entryName] = this._getDracoMetadataField(dracoMetadata, entryName);
3001
+ }
3002
+ return result;
3003
+ }
3004
+ _getDracoMetadataField(dracoMetadata, entryName) {
3005
+ const dracoArray = new this.draco.DracoInt32Array();
3006
+ try {
3007
+ this.metadataQuerier.GetIntEntryArray(dracoMetadata, entryName, dracoArray);
3008
+ const intArray = getInt32Array(dracoArray);
3009
+ return {
3010
+ int: this.metadataQuerier.GetIntEntry(dracoMetadata, entryName),
3011
+ string: this.metadataQuerier.GetStringEntry(dracoMetadata, entryName),
3012
+ double: this.metadataQuerier.GetDoubleEntry(dracoMetadata, entryName),
3013
+ intArray
3014
+ };
3015
+ } finally {
3016
+ this.draco.destroy(dracoArray);
3017
+ }
3018
+ }
3019
+ _disableAttributeTransforms(options) {
3020
+ const { quantizedAttributes = [], octahedronAttributes = [] } = options;
3021
+ const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];
3022
+ for (const dracoAttributeName of skipAttributes) {
3023
+ this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);
3024
+ }
3025
+ }
3026
+ _getQuantizationTransform(dracoAttribute, options) {
3027
+ const { quantizedAttributes = [] } = options;
3028
+ const attribute_type = dracoAttribute.attribute_type();
3029
+ const skip = quantizedAttributes.map((type) => this.decoder[type]).includes(attribute_type);
3030
+ if (skip) {
3031
+ const transform = new this.draco.AttributeQuantizationTransform();
3032
+ try {
3033
+ if (transform.InitFromAttribute(dracoAttribute)) {
3034
+ return {
3035
+ quantization_bits: transform.quantization_bits(),
3036
+ range: transform.range(),
3037
+ min_values: new Float32Array([1, 2, 3]).map((i2) => transform.min_value(i2))
3038
+ };
3039
+ }
3040
+ } finally {
3041
+ this.draco.destroy(transform);
3042
+ }
3043
+ }
3044
+ return null;
3045
+ }
3046
+ _getOctahedronTransform(dracoAttribute, options) {
3047
+ const { octahedronAttributes = [] } = options;
3048
+ const attribute_type = dracoAttribute.attribute_type();
3049
+ const octahedron = octahedronAttributes.map((type) => this.decoder[type]).includes(attribute_type);
3050
+ if (octahedron) {
3051
+ const transform = new this.draco.AttributeQuantizationTransform();
3052
+ try {
3053
+ if (transform.InitFromAttribute(dracoAttribute)) {
3054
+ return {
3055
+ quantization_bits: transform.quantization_bits()
3056
+ };
3057
+ }
3058
+ } finally {
3059
+ this.draco.destroy(transform);
3060
+ }
3061
+ }
3062
+ return null;
3063
+ }
3064
+ };
3065
+ }
3066
+ });
3067
+
3068
+ // ../draco/src/lib/draco-module-loader.ts
3069
+ async function loadDracoDecoderModule(options) {
3070
+ const modules = options.modules || {};
3071
+ if (modules.draco3d) {
3072
+ loadDecoderPromise = loadDecoderPromise || modules.draco3d.createDecoderModule({}).then((draco) => {
3073
+ return { draco };
3074
+ });
3075
+ } else {
3076
+ loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);
3077
+ }
3078
+ return await loadDecoderPromise;
3079
+ }
3080
+ async function loadDracoDecoder(options) {
3081
+ let DracoDecoderModule;
3082
+ let wasmBinary;
3083
+ switch (options.draco && options.draco.decoderType) {
3084
+ case "js":
3085
+ DracoDecoderModule = await loadLibrary(DRACO_JS_DECODER_URL, "draco", options);
3086
+ break;
3087
+ case "wasm":
3088
+ default:
3089
+ [DracoDecoderModule, wasmBinary] = await Promise.all([
3090
+ await loadLibrary(DRACO_WASM_WRAPPER_URL, "draco", options),
3091
+ await loadLibrary(DRACO_WASM_DECODER_URL, "draco", options)
3092
+ ]);
3093
+ }
3094
+ DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
3095
+ return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
3096
+ }
3097
+ function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
3098
+ const options = {};
3099
+ if (wasmBinary) {
3100
+ options.wasmBinary = wasmBinary;
3101
+ }
3102
+ return new Promise((resolve) => {
3103
+ DracoDecoderModule({
3104
+ ...options,
3105
+ onModuleLoaded: (draco) => resolve({ draco })
3106
+ });
3107
+ });
3108
+ }
3109
+ var DRACO_VERSION, DRACO_JS_DECODER_URL, DRACO_WASM_WRAPPER_URL, DRACO_WASM_DECODER_URL, DRACO_ENCODER_URL, loadDecoderPromise;
3110
+ var init_draco_module_loader = __esm({
3111
+ "../draco/src/lib/draco-module-loader.ts"() {
3112
+ init_src();
3113
+ DRACO_VERSION = "1.4.1";
3114
+ DRACO_JS_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.js`;
3115
+ DRACO_WASM_WRAPPER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_wasm_wrapper.js`;
3116
+ DRACO_WASM_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.wasm`;
3117
+ DRACO_ENCODER_URL = `https://raw.githubusercontent.com/google/draco/${DRACO_VERSION}/javascript/draco_encoder.js`;
3118
+ }
3119
+ });
3120
+
3121
+ // ../draco/src/index.ts
3122
+ async function parse(arrayBuffer, options) {
3123
+ const { draco } = await loadDracoDecoderModule(options);
3124
+ const dracoParser = new DracoParser(draco);
3125
+ try {
3126
+ return dracoParser.parseSync(arrayBuffer, options?.draco);
3127
+ } finally {
3128
+ dracoParser.destroy();
3129
+ }
3130
+ }
3131
+ var DracoLoader2;
3132
+ var init_src6 = __esm({
3133
+ "../draco/src/index.ts"() {
3134
+ init_draco_loader();
3135
+ init_draco_parser();
3136
+ init_draco_module_loader();
3137
+ DracoLoader2 = {
3138
+ ...DracoLoader,
3139
+ parse
3140
+ };
3141
+ }
3142
+ });
3143
+
3144
+ // src/lib/gltf-utils/gltf-attribute-utils.ts
3145
+ function getGLTFAccessors(attributes) {
3146
+ const accessors = {};
3147
+ for (const name8 in attributes) {
3148
+ const attribute = attributes[name8];
3149
+ if (name8 !== "indices") {
3150
+ const glTFAccessor = getGLTFAccessor(attribute);
3151
+ accessors[name8] = glTFAccessor;
3152
+ }
3153
+ }
3154
+ return accessors;
3155
+ }
3156
+ function getGLTFAccessor(attribute) {
3157
+ const { buffer, size, count } = getAccessorData(attribute);
3158
+ const glTFAccessor = {
3159
+ value: buffer,
3160
+ size,
3161
+ byteOffset: 0,
3162
+ count,
3163
+ type: getAccessorTypeFromSize(size),
3164
+ componentType: getComponentTypeFromArray(buffer)
3165
+ };
3166
+ return glTFAccessor;
3167
+ }
3168
+ function getAccessorData(attribute) {
3169
+ let buffer = attribute;
3170
+ let size = 1;
3171
+ let count = 0;
3172
+ if (attribute && attribute.value) {
3173
+ buffer = attribute.value;
3174
+ size = attribute.size || 1;
3175
+ }
3176
+ if (buffer) {
3177
+ if (!ArrayBuffer.isView(buffer)) {
3178
+ buffer = toTypedArray(buffer, Float32Array);
3179
+ }
3180
+ count = buffer.length / size;
3181
+ }
3182
+ return { buffer, size, count };
3183
+ }
3184
+ function toTypedArray(array, ArrayType, convertTypedArrays = false) {
3185
+ if (!array) {
3186
+ return null;
3187
+ }
3188
+ if (Array.isArray(array)) {
3189
+ return new ArrayType(array);
3190
+ }
3191
+ if (convertTypedArrays && !(array instanceof ArrayType)) {
3192
+ return new ArrayType(array);
3193
+ }
3194
+ return array;
3195
+ }
3196
+ var init_gltf_attribute_utils = __esm({
3197
+ "src/lib/gltf-utils/gltf-attribute-utils.ts"() {
3198
+ init_gltf_utils();
3199
+ }
3200
+ });
3201
+
3202
+ // src/lib/extensions/KHR_draco_mesh_compression.ts
3203
+ var KHR_draco_mesh_compression_exports = {};
3204
+ __export(KHR_draco_mesh_compression_exports, {
3205
+ decode: () => decode3,
3206
+ encode: () => encode,
3207
+ name: () => name4,
3208
+ preprocess: () => preprocess4
3209
+ });
3210
+ function preprocess4(gltfData, options, context) {
3211
+ const scenegraph = new GLTFScenegraph(gltfData);
3212
+ for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {
3213
+ if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {
3214
+ }
3215
+ }
3216
+ }
3217
+ async function decode3(gltfData, options, context) {
3218
+ if (!options?.gltf?.decompressMeshes) {
3219
+ return;
3220
+ }
3221
+ const scenegraph = new GLTFScenegraph(gltfData);
3222
+ const promises = [];
3223
+ for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {
3224
+ if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {
3225
+ promises.push(decompressPrimitive(scenegraph, primitive, options, context));
3226
+ }
3227
+ }
3228
+ await Promise.all(promises);
3229
+ scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);
3230
+ }
3231
+ function encode(gltfData, options = {}) {
3232
+ const scenegraph = new GLTFScenegraph(gltfData);
3233
+ for (const mesh of scenegraph.json.meshes || []) {
3234
+ compressMesh(mesh, options);
3235
+ scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);
3236
+ }
3237
+ }
3238
+ async function decompressPrimitive(scenegraph, primitive, options, context) {
3239
+ const dracoExtension = scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);
3240
+ if (!dracoExtension) {
3241
+ return;
3242
+ }
3243
+ const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);
3244
+ const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset);
3245
+ const { parse: parse4 } = context;
3246
+ const dracoOptions = { ...options };
3247
+ delete dracoOptions["3d-tiles"];
3248
+ const decodedData = await parse4(bufferCopy, DracoLoader2, dracoOptions, context);
3249
+ const decodedAttributes = getGLTFAccessors(decodedData.attributes);
3250
+ for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
3251
+ if (attributeName in primitive.attributes) {
3252
+ const accessorIndex = primitive.attributes[attributeName];
3253
+ const accessor = scenegraph.getAccessor(accessorIndex);
3254
+ if (accessor?.min && accessor?.max) {
3255
+ decodedAttribute.min = accessor.min;
3256
+ decodedAttribute.max = accessor.max;
3257
+ }
3258
+ }
3259
+ }
3260
+ primitive.attributes = decodedAttributes;
3261
+ if (decodedData.indices) {
3262
+ primitive.indices = getGLTFAccessor(decodedData.indices);
3263
+ }
3264
+ checkPrimitive(primitive);
3265
+ }
3266
+ function compressMesh(attributes, indices, mode = 4, options, context) {
3267
+ if (!options.DracoWriter) {
3268
+ throw new Error("options.gltf.DracoWriter not provided");
3269
+ }
3270
+ const compressedData = options.DracoWriter.encodeSync({ attributes });
3271
+ const decodedData = context?.parseSync?.({ attributes });
3272
+ const fauxAccessors = options._addFauxAttributes(decodedData.attributes);
3273
+ const bufferViewIndex = options.addBufferView(compressedData);
3274
+ const glTFMesh = {
3275
+ primitives: [
3276
+ {
3277
+ attributes: fauxAccessors,
3278
+ mode,
3279
+ extensions: {
3280
+ [KHR_DRACO_MESH_COMPRESSION]: {
3281
+ bufferView: bufferViewIndex,
3282
+ attributes: fauxAccessors
3283
+ }
3284
+ }
3285
+ }
3286
+ ]
3287
+ };
3288
+ return glTFMesh;
3289
+ }
3290
+ function checkPrimitive(primitive) {
3291
+ if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {
3292
+ throw new Error("glTF: Empty primitive detected: Draco decompression failure?");
3293
+ }
3294
+ }
3295
+ function* makeMeshPrimitiveIterator(scenegraph) {
3296
+ for (const mesh of scenegraph.json.meshes || []) {
3297
+ for (const primitive of mesh.primitives) {
3298
+ yield primitive;
3299
+ }
3300
+ }
3301
+ }
3302
+ var KHR_DRACO_MESH_COMPRESSION, name4;
3303
+ var init_KHR_draco_mesh_compression = __esm({
3304
+ "src/lib/extensions/KHR_draco_mesh_compression.ts"() {
3305
+ init_src6();
3306
+ init_src2();
3307
+ init_gltf_scenegraph();
3308
+ init_gltf_attribute_utils();
3309
+ KHR_DRACO_MESH_COMPRESSION = "KHR_draco_mesh_compression";
3310
+ name4 = KHR_DRACO_MESH_COMPRESSION;
3311
+ }
3312
+ });
3313
+
3314
+ // src/lib/extensions/deprecated/KHR_lights_punctual.ts
3315
+ var KHR_lights_punctual_exports = {};
3316
+ __export(KHR_lights_punctual_exports, {
3317
+ decode: () => decode4,
3318
+ encode: () => encode2,
3319
+ name: () => name5
3320
+ });
3321
+ async function decode4(gltfData) {
3322
+ const gltfScenegraph = new GLTFScenegraph(gltfData);
3323
+ const { json } = gltfScenegraph;
3324
+ const extension = gltfScenegraph.getExtension(KHR_LIGHTS_PUNCTUAL);
3325
+ if (extension) {
3326
+ gltfScenegraph.json.lights = extension.lights;
3327
+ gltfScenegraph.removeExtension(KHR_LIGHTS_PUNCTUAL);
3328
+ }
3329
+ for (const node2 of json.nodes || []) {
3330
+ const nodeExtension = gltfScenegraph.getObjectExtension(node2, KHR_LIGHTS_PUNCTUAL);
3331
+ if (nodeExtension) {
3332
+ node2.light = nodeExtension.light;
3333
+ }
3334
+ gltfScenegraph.removeObjectExtension(node2, KHR_LIGHTS_PUNCTUAL);
3335
+ }
3336
+ }
3337
+ async function encode2(gltfData) {
3338
+ const gltfScenegraph = new GLTFScenegraph(gltfData);
3339
+ const { json } = gltfScenegraph;
3340
+ if (json.lights) {
3341
+ const extension = gltfScenegraph.addExtension(KHR_LIGHTS_PUNCTUAL);
3342
+ assert3(!extension.lights);
3343
+ extension.lights = json.lights;
3344
+ delete json.lights;
3345
+ }
3346
+ if (gltfScenegraph.json.lights) {
3347
+ for (const light of gltfScenegraph.json.lights) {
3348
+ const node2 = light.node;
3349
+ gltfScenegraph.addObjectExtension(node2, KHR_LIGHTS_PUNCTUAL, light);
3350
+ }
3351
+ delete gltfScenegraph.json.lights;
3352
+ }
3353
+ }
3354
+ var KHR_LIGHTS_PUNCTUAL, name5;
3355
+ var init_KHR_lights_punctual = __esm({
3356
+ "src/lib/extensions/deprecated/KHR_lights_punctual.ts"() {
3357
+ init_assert3();
3358
+ init_gltf_scenegraph();
3359
+ KHR_LIGHTS_PUNCTUAL = "KHR_lights_punctual";
3360
+ name5 = KHR_LIGHTS_PUNCTUAL;
3361
+ }
3362
+ });
3363
+
3364
+ // src/lib/extensions/deprecated/KHR_materials_unlit.ts
3365
+ var KHR_materials_unlit_exports = {};
3366
+ __export(KHR_materials_unlit_exports, {
3367
+ decode: () => decode5,
3368
+ encode: () => encode3,
3369
+ name: () => name6
3370
+ });
3371
+ async function decode5(gltfData) {
3372
+ const gltfScenegraph = new GLTFScenegraph(gltfData);
3373
+ const { json } = gltfScenegraph;
3374
+ gltfScenegraph.removeExtension(KHR_MATERIALS_UNLIT);
3375
+ for (const material of json.materials || []) {
3376
+ const extension = material.extensions && material.extensions.KHR_materials_unlit;
3377
+ if (extension) {
3378
+ material.unlit = true;
3379
+ }
3380
+ gltfScenegraph.removeObjectExtension(material, KHR_MATERIALS_UNLIT);
3381
+ }
3382
+ }
3383
+ function encode3(gltfData) {
3384
+ const gltfScenegraph = new GLTFScenegraph(gltfData);
3385
+ const { json } = gltfScenegraph;
3386
+ if (gltfScenegraph.materials) {
3387
+ for (const material of json.materials || []) {
3388
+ if (material.unlit) {
3389
+ delete material.unlit;
3390
+ gltfScenegraph.addObjectExtension(material, KHR_MATERIALS_UNLIT, {});
3391
+ gltfScenegraph.addExtension(KHR_MATERIALS_UNLIT);
3392
+ }
3393
+ }
3394
+ }
3395
+ }
3396
+ var KHR_MATERIALS_UNLIT, name6;
3397
+ var init_KHR_materials_unlit = __esm({
3398
+ "src/lib/extensions/deprecated/KHR_materials_unlit.ts"() {
3399
+ init_gltf_scenegraph();
3400
+ KHR_MATERIALS_UNLIT = "KHR_materials_unlit";
3401
+ name6 = KHR_MATERIALS_UNLIT;
3402
+ }
3403
+ });
3404
+
3405
+ // src/lib/extensions/deprecated/KHR_techniques_webgl.ts
3406
+ var KHR_techniques_webgl_exports = {};
3407
+ __export(KHR_techniques_webgl_exports, {
3408
+ decode: () => decode6,
3409
+ encode: () => encode4,
3410
+ name: () => name7
3411
+ });
3412
+ async function decode6(gltfData) {
3413
+ const gltfScenegraph = new GLTFScenegraph(gltfData);
3414
+ const { json } = gltfScenegraph;
3415
+ const extension = gltfScenegraph.getExtension(KHR_TECHNIQUES_WEBGL);
3416
+ if (extension) {
3417
+ const techniques = resolveTechniques(extension, gltfScenegraph);
3418
+ for (const material of json.materials || []) {
3419
+ const materialExtension = gltfScenegraph.getObjectExtension(material, KHR_TECHNIQUES_WEBGL);
3420
+ if (materialExtension) {
3421
+ material.technique = Object.assign({}, materialExtension, techniques[materialExtension.technique]);
3422
+ material.technique.values = resolveValues(material.technique, gltfScenegraph);
3423
+ }
3424
+ gltfScenegraph.removeObjectExtension(material, KHR_TECHNIQUES_WEBGL);
3425
+ }
3426
+ gltfScenegraph.removeExtension(KHR_TECHNIQUES_WEBGL);
3427
+ }
3428
+ }
3429
+ async function encode4(gltfData, options) {
3430
+ }
3431
+ function resolveTechniques(techniquesExtension, gltfScenegraph) {
3432
+ const { programs = [], shaders = [], techniques = [] } = techniquesExtension;
3433
+ const textDecoder = new TextDecoder();
3434
+ shaders.forEach((shader) => {
3435
+ if (Number.isFinite(shader.bufferView)) {
3436
+ shader.code = textDecoder.decode(gltfScenegraph.getTypedArrayForBufferView(shader.bufferView));
3437
+ } else {
3438
+ throw new Error("KHR_techniques_webgl: no shader code");
3439
+ }
3440
+ });
3441
+ programs.forEach((program) => {
3442
+ program.fragmentShader = shaders[program.fragmentShader];
3443
+ program.vertexShader = shaders[program.vertexShader];
3444
+ });
3445
+ techniques.forEach((technique) => {
3446
+ technique.program = programs[technique.program];
3447
+ });
3448
+ return techniques;
3449
+ }
3450
+ function resolveValues(technique, gltfScenegraph) {
3451
+ const values = Object.assign({}, technique.values);
3452
+ Object.keys(technique.uniforms || {}).forEach((uniform) => {
3453
+ if (technique.uniforms[uniform].value && !(uniform in values)) {
3454
+ values[uniform] = technique.uniforms[uniform].value;
3455
+ }
3456
+ });
3457
+ Object.keys(values).forEach((uniform) => {
3458
+ if (typeof values[uniform] === "object" && values[uniform].index !== void 0) {
3459
+ values[uniform].texture = gltfScenegraph.getTexture(values[uniform].index);
3460
+ }
3461
+ });
3462
+ return values;
3463
+ }
3464
+ var KHR_TECHNIQUES_WEBGL, name7;
3465
+ var init_KHR_techniques_webgl = __esm({
3466
+ "src/lib/extensions/deprecated/KHR_techniques_webgl.ts"() {
3467
+ init_gltf_scenegraph();
3468
+ KHR_TECHNIQUES_WEBGL = "KHR_techniques_webgl";
3469
+ name7 = KHR_TECHNIQUES_WEBGL;
3470
+ }
3471
+ });
3472
+
3473
+ // src/lib/api/gltf-extensions.ts
3474
+ function preprocessExtensions(gltf, options = {}, context) {
3475
+ const extensions = EXTENSIONS2.filter((extension) => useExtension(extension.name, options));
3476
+ for (const extension of extensions) {
3477
+ extension.preprocess?.(gltf, options, context);
3478
+ }
3479
+ }
3480
+ async function decodeExtensions(gltf, options = {}, context) {
3481
+ const extensions = EXTENSIONS2.filter((extension) => useExtension(extension.name, options));
3482
+ for (const extension of extensions) {
3483
+ await extension.decode?.(gltf, options, context);
3484
+ }
3485
+ }
3486
+ function useExtension(extensionName, options) {
3487
+ const excludes = options?.gltf?.excludeExtensions || {};
3488
+ const exclude = extensionName in excludes && !excludes[extensionName];
3489
+ return !exclude;
3490
+ }
3491
+ var EXTENSIONS2;
3492
+ var init_gltf_extensions = __esm({
3493
+ "src/lib/api/gltf-extensions.ts"() {
3494
+ init_EXT_meshopt_compression();
3495
+ init_EXT_texture_webp();
3496
+ init_KHR_texture_basisu();
3497
+ init_KHR_draco_mesh_compression();
3498
+ init_KHR_lights_punctual();
3499
+ init_KHR_materials_unlit();
3500
+ init_KHR_techniques_webgl();
3501
+ EXTENSIONS2 = [
3502
+ EXT_meshopt_compression_exports,
3503
+ EXT_texture_webp_exports,
3504
+ KHR_texture_basisu_exports,
3505
+ KHR_draco_mesh_compression_exports,
3506
+ KHR_lights_punctual_exports,
3507
+ KHR_materials_unlit_exports,
3508
+ KHR_techniques_webgl_exports
3509
+ ];
3510
+ }
3511
+ });
3512
+
3513
+ // src/lib/extensions/KHR_binary_gltf.ts
3514
+ function preprocess5(gltfData) {
3515
+ const gltfScenegraph = new GLTFScenegraph(gltfData);
3516
+ const { json } = gltfScenegraph;
3517
+ for (const image of json.images || []) {
3518
+ const extension = gltfScenegraph.getObjectExtension(image, KHR_BINARY_GLTF);
3519
+ if (extension) {
3520
+ Object.assign(image, extension);
3521
+ }
3522
+ gltfScenegraph.removeObjectExtension(image, KHR_BINARY_GLTF);
3523
+ }
3524
+ if (json.buffers && json.buffers[0]) {
3525
+ delete json.buffers[0].uri;
3526
+ }
3527
+ gltfScenegraph.removeExtension(KHR_BINARY_GLTF);
3528
+ }
3529
+ var KHR_BINARY_GLTF;
3530
+ var init_KHR_binary_gltf = __esm({
3531
+ "src/lib/extensions/KHR_binary_gltf.ts"() {
3532
+ init_gltf_scenegraph();
3533
+ KHR_BINARY_GLTF = "KHR_binary_glTF";
3534
+ }
3535
+ });
3536
+
3537
+ // src/lib/api/normalize-gltf-v1.ts
3538
+ function normalizeGLTFV1(gltf, options = {}) {
3539
+ return new GLTFV1Normalizer().normalize(gltf, options);
3540
+ }
3541
+ var GLTF_ARRAYS, GLTF_KEYS, GLTFV1Normalizer;
3542
+ var init_normalize_gltf_v1 = __esm({
3543
+ "src/lib/api/normalize-gltf-v1.ts"() {
3544
+ init_KHR_binary_gltf();
3545
+ GLTF_ARRAYS = {
3546
+ accessors: "accessor",
3547
+ animations: "animation",
3548
+ buffers: "buffer",
3549
+ bufferViews: "bufferView",
3550
+ images: "image",
3551
+ materials: "material",
3552
+ meshes: "mesh",
3553
+ nodes: "node",
3554
+ samplers: "sampler",
3555
+ scenes: "scene",
3556
+ skins: "skin",
3557
+ textures: "texture"
3558
+ };
3559
+ GLTF_KEYS = {
3560
+ accessor: "accessors",
3561
+ animations: "animation",
3562
+ buffer: "buffers",
3563
+ bufferView: "bufferViews",
3564
+ image: "images",
3565
+ material: "materials",
3566
+ mesh: "meshes",
3567
+ node: "nodes",
3568
+ sampler: "samplers",
3569
+ scene: "scenes",
3570
+ skin: "skins",
3571
+ texture: "textures"
3572
+ };
3573
+ GLTFV1Normalizer = class {
3574
+ constructor() {
3575
+ this.idToIndexMap = {
3576
+ animations: {},
3577
+ accessors: {},
3578
+ buffers: {},
3579
+ bufferViews: {},
3580
+ images: {},
3581
+ materials: {},
3582
+ meshes: {},
3583
+ nodes: {},
3584
+ samplers: {},
3585
+ scenes: {},
3586
+ skins: {},
3587
+ textures: {}
3588
+ };
3589
+ }
3590
+ normalize(gltf, options) {
3591
+ this.json = gltf.json;
3592
+ const json = gltf.json;
3593
+ switch (json.asset && json.asset.version) {
3594
+ case "2.0":
3595
+ return;
3596
+ case void 0:
3597
+ case "1.0":
3598
+ break;
3599
+ default:
3600
+ console.warn(`glTF: Unknown version ${json.asset.version}`);
3601
+ return;
3602
+ }
3603
+ if (!options.normalize) {
3604
+ throw new Error("glTF v1 is not supported.");
3605
+ }
3606
+ console.warn("Converting glTF v1 to glTF v2 format. This is experimental and may fail.");
3607
+ this._addAsset(json);
3608
+ this._convertTopLevelObjectsToArrays(json);
3609
+ preprocess5(gltf);
3610
+ this._convertObjectIdsToArrayIndices(json);
3611
+ this._updateObjects(json);
3612
+ this._updateMaterial(json);
3613
+ }
3614
+ _addAsset(json) {
3615
+ json.asset = json.asset || {};
3616
+ json.asset.version = "2.0";
3617
+ json.asset.generator = json.asset.generator || "Normalized to glTF 2.0 by loaders.gl";
3618
+ }
3619
+ _convertTopLevelObjectsToArrays(json) {
3620
+ for (const arrayName in GLTF_ARRAYS) {
3621
+ this._convertTopLevelObjectToArray(json, arrayName);
3622
+ }
3623
+ }
3624
+ _convertTopLevelObjectToArray(json, mapName) {
3625
+ const objectMap = json[mapName];
3626
+ if (!objectMap || Array.isArray(objectMap)) {
3627
+ return;
3628
+ }
3629
+ json[mapName] = [];
3630
+ for (const id in objectMap) {
3631
+ const object = objectMap[id];
3632
+ object.id = object.id || id;
3633
+ const index = json[mapName].length;
3634
+ json[mapName].push(object);
3635
+ this.idToIndexMap[mapName][id] = index;
3636
+ }
3637
+ }
3638
+ _convertObjectIdsToArrayIndices(json) {
3639
+ for (const arrayName in GLTF_ARRAYS) {
3640
+ this._convertIdsToIndices(json, arrayName);
3641
+ }
3642
+ if ("scene" in json) {
3643
+ json.scene = this._convertIdToIndex(json.scene, "scene");
3644
+ }
3645
+ for (const texture of json.textures) {
3646
+ this._convertTextureIds(texture);
3647
+ }
3648
+ for (const mesh of json.meshes) {
3649
+ this._convertMeshIds(mesh);
3650
+ }
3651
+ for (const node2 of json.nodes) {
3652
+ this._convertNodeIds(node2);
3653
+ }
3654
+ for (const node2 of json.scenes) {
3655
+ this._convertSceneIds(node2);
3656
+ }
3657
+ }
3658
+ _convertTextureIds(texture) {
3659
+ if (texture.source) {
3660
+ texture.source = this._convertIdToIndex(texture.source, "image");
3661
+ }
3662
+ }
3663
+ _convertMeshIds(mesh) {
3664
+ for (const primitive of mesh.primitives) {
3665
+ const { attributes, indices, material } = primitive;
3666
+ for (const attributeName in attributes) {
3667
+ attributes[attributeName] = this._convertIdToIndex(attributes[attributeName], "accessor");
3668
+ }
3669
+ if (indices) {
3670
+ primitive.indices = this._convertIdToIndex(indices, "accessor");
3671
+ }
3672
+ if (material) {
3673
+ primitive.material = this._convertIdToIndex(material, "material");
3674
+ }
3675
+ }
3676
+ }
3677
+ _convertNodeIds(node2) {
3678
+ if (node2.children) {
3679
+ node2.children = node2.children.map((child) => this._convertIdToIndex(child, "node"));
3680
+ }
3681
+ if (node2.meshes) {
3682
+ node2.meshes = node2.meshes.map((mesh) => this._convertIdToIndex(mesh, "mesh"));
3683
+ }
3684
+ }
3685
+ _convertSceneIds(scene) {
3686
+ if (scene.nodes) {
3687
+ scene.nodes = scene.nodes.map((node2) => this._convertIdToIndex(node2, "node"));
3688
+ }
3689
+ }
3690
+ _convertIdsToIndices(json, topLevelArrayName) {
3691
+ if (!json[topLevelArrayName]) {
3692
+ console.warn(`gltf v1: json doesn't contain attribute ${topLevelArrayName}`);
3693
+ json[topLevelArrayName] = [];
3694
+ }
3695
+ for (const object of json[topLevelArrayName]) {
3696
+ for (const key in object) {
3697
+ const id = object[key];
3698
+ const index = this._convertIdToIndex(id, key);
3699
+ object[key] = index;
3700
+ }
3701
+ }
3702
+ }
3703
+ _convertIdToIndex(id, key) {
3704
+ const arrayName = GLTF_KEYS[key];
3705
+ if (arrayName in this.idToIndexMap) {
3706
+ const index = this.idToIndexMap[arrayName][id];
3707
+ if (!Number.isFinite(index)) {
3708
+ throw new Error(`gltf v1: failed to resolve ${key} with id ${id}`);
3709
+ }
3710
+ return index;
3711
+ }
3712
+ return id;
3713
+ }
3714
+ _updateObjects(json) {
3715
+ for (const buffer of this.json.buffers) {
3716
+ delete buffer.type;
3717
+ }
3718
+ }
3719
+ _updateMaterial(json) {
3720
+ for (const material of json.materials) {
3721
+ material.pbrMetallicRoughness = {
3722
+ baseColorFactor: [1, 1, 1, 1],
3723
+ metallicFactor: 1,
3724
+ roughnessFactor: 1
3725
+ };
3726
+ const textureId = material.values && material.values.tex;
3727
+ const textureIndex = json.textures.findIndex((texture) => texture.id === textureId);
3728
+ if (textureIndex !== -1) {
3729
+ material.pbrMetallicRoughness.baseColorTexture = { index: textureIndex };
3730
+ }
3731
+ }
3732
+ }
3733
+ };
3734
+ }
3735
+ });
3736
+
3737
+ // src/lib/api/post-process-gltf.ts
3738
+ function getBytesFromComponentType(componentType) {
3739
+ return BYTES[componentType];
3740
+ }
3741
+ function getSizeFromAccessorType(type) {
3742
+ return COMPONENTS[type];
3743
+ }
3744
+ function postProcessGLTF(gltf, options) {
3745
+ return new GLTFPostProcessor().postProcess(gltf, options);
3746
+ }
3747
+ var COMPONENTS, BYTES, GL_SAMPLER, SAMPLER_PARAMETER_GLTF_TO_GL, DEFAULT_SAMPLER, GLTFPostProcessor;
3748
+ var init_post_process_gltf = __esm({
3749
+ "src/lib/api/post-process-gltf.ts"() {
3750
+ init_assert3();
3751
+ init_gltf_utils();
3752
+ COMPONENTS = {
3753
+ SCALAR: 1,
3754
+ VEC2: 2,
3755
+ VEC3: 3,
3756
+ VEC4: 4,
3757
+ MAT2: 4,
3758
+ MAT3: 9,
3759
+ MAT4: 16
3760
+ };
3761
+ BYTES = {
3762
+ 5120: 1,
3763
+ 5121: 1,
3764
+ 5122: 2,
3765
+ 5123: 2,
3766
+ 5125: 4,
3767
+ 5126: 4
3768
+ };
3769
+ GL_SAMPLER = {
3770
+ TEXTURE_MAG_FILTER: 10240,
3771
+ TEXTURE_MIN_FILTER: 10241,
3772
+ TEXTURE_WRAP_S: 10242,
3773
+ TEXTURE_WRAP_T: 10243,
3774
+ REPEAT: 10497,
3775
+ LINEAR: 9729,
3776
+ NEAREST_MIPMAP_LINEAR: 9986
3777
+ };
3778
+ SAMPLER_PARAMETER_GLTF_TO_GL = {
3779
+ magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,
3780
+ minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,
3781
+ wrapS: GL_SAMPLER.TEXTURE_WRAP_S,
3782
+ wrapT: GL_SAMPLER.TEXTURE_WRAP_T
3783
+ };
3784
+ DEFAULT_SAMPLER = {
3785
+ [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,
3786
+ [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,
3787
+ [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,
3788
+ [GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT
3789
+ };
3790
+ GLTFPostProcessor = class {
3791
+ constructor() {
3792
+ this.baseUri = "";
3793
+ this.json = {};
3794
+ this.buffers = [];
3795
+ this.images = [];
3796
+ }
3797
+ postProcess(gltf, options = {}) {
3798
+ const { json, buffers = [], images = [], baseUri = "" } = gltf;
3799
+ assert3(json);
3800
+ this.baseUri = baseUri;
3801
+ this.json = json;
3802
+ this.buffers = buffers;
3803
+ this.images = images;
3804
+ this._resolveTree(this.json, options);
3805
+ return this.json;
3806
+ }
3807
+ _resolveTree(json, options = {}) {
3808
+ if (json.bufferViews) {
3809
+ json.bufferViews = json.bufferViews.map((bufView, i2) => this._resolveBufferView(bufView, i2));
3810
+ }
3811
+ if (json.images) {
3812
+ json.images = json.images.map((image, i2) => this._resolveImage(image, i2));
3813
+ }
3814
+ if (json.samplers) {
3815
+ json.samplers = json.samplers.map((sampler, i2) => this._resolveSampler(sampler, i2));
3816
+ }
3817
+ if (json.textures) {
3818
+ json.textures = json.textures.map((texture, i2) => this._resolveTexture(texture, i2));
3819
+ }
3820
+ if (json.accessors) {
3821
+ json.accessors = json.accessors.map((accessor, i2) => this._resolveAccessor(accessor, i2));
3822
+ }
3823
+ if (json.materials) {
3824
+ json.materials = json.materials.map((material, i2) => this._resolveMaterial(material, i2));
3825
+ }
3826
+ if (json.meshes) {
3827
+ json.meshes = json.meshes.map((mesh, i2) => this._resolveMesh(mesh, i2));
3828
+ }
3829
+ if (json.nodes) {
3830
+ json.nodes = json.nodes.map((node2, i2) => this._resolveNode(node2, i2));
3831
+ }
3832
+ if (json.skins) {
3833
+ json.skins = json.skins.map((skin, i2) => this._resolveSkin(skin, i2));
3834
+ }
3835
+ if (json.scenes) {
3836
+ json.scenes = json.scenes.map((scene, i2) => this._resolveScene(scene, i2));
3837
+ }
3838
+ if (json.scene !== void 0) {
3839
+ json.scene = json.scenes[this.json.scene];
3840
+ }
3841
+ }
3842
+ getScene(index) {
3843
+ return this._get("scenes", index);
3844
+ }
3845
+ getNode(index) {
3846
+ return this._get("nodes", index);
3847
+ }
3848
+ getSkin(index) {
3849
+ return this._get("skins", index);
3850
+ }
3851
+ getMesh(index) {
3852
+ return this._get("meshes", index);
3853
+ }
3854
+ getMaterial(index) {
3855
+ return this._get("materials", index);
3856
+ }
3857
+ getAccessor(index) {
3858
+ return this._get("accessors", index);
3859
+ }
3860
+ getCamera(index) {
3861
+ return null;
3862
+ }
3863
+ getTexture(index) {
3864
+ return this._get("textures", index);
3865
+ }
3866
+ getSampler(index) {
3867
+ return this._get("samplers", index);
3868
+ }
3869
+ getImage(index) {
3870
+ return this._get("images", index);
3871
+ }
3872
+ getBufferView(index) {
3873
+ return this._get("bufferViews", index);
3874
+ }
3875
+ getBuffer(index) {
3876
+ return this._get("buffers", index);
3877
+ }
3878
+ _get(array, index) {
3879
+ if (typeof index === "object") {
3880
+ return index;
3881
+ }
3882
+ const object = this.json[array] && this.json[array][index];
3883
+ if (!object) {
3884
+ console.warn(`glTF file error: Could not find ${array}[${index}]`);
3885
+ }
3886
+ return object;
3887
+ }
3888
+ _resolveScene(scene, index) {
3889
+ scene.id = scene.id || `scene-${index}`;
3890
+ scene.nodes = (scene.nodes || []).map((node2) => this.getNode(node2));
3891
+ return scene;
3892
+ }
3893
+ _resolveNode(node2, index) {
3894
+ node2.id = node2.id || `node-${index}`;
3895
+ if (node2.children) {
3896
+ node2.children = node2.children.map((child) => this.getNode(child));
3897
+ }
3898
+ if (node2.mesh !== void 0) {
3899
+ node2.mesh = this.getMesh(node2.mesh);
3900
+ } else if (node2.meshes !== void 0 && node2.meshes.length) {
3901
+ node2.mesh = node2.meshes.reduce((accum, meshIndex) => {
3902
+ const mesh = this.getMesh(meshIndex);
3903
+ accum.id = mesh.id;
3904
+ accum.primitives = accum.primitives.concat(mesh.primitives);
3905
+ return accum;
3906
+ }, { primitives: [] });
3907
+ }
3908
+ if (node2.camera !== void 0) {
3909
+ node2.camera = this.getCamera(node2.camera);
3910
+ }
3911
+ if (node2.skin !== void 0) {
3912
+ node2.skin = this.getSkin(node2.skin);
3913
+ }
3914
+ return node2;
3915
+ }
3916
+ _resolveSkin(skin, index) {
3917
+ skin.id = skin.id || `skin-${index}`;
3918
+ skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);
3919
+ return skin;
3920
+ }
3921
+ _resolveMesh(mesh, index) {
3922
+ mesh.id = mesh.id || `mesh-${index}`;
3923
+ if (mesh.primitives) {
3924
+ mesh.primitives = mesh.primitives.map((primitive) => {
3925
+ primitive = { ...primitive };
3926
+ const attributes = primitive.attributes;
3927
+ primitive.attributes = {};
3928
+ for (const attribute in attributes) {
3929
+ primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);
3930
+ }
3931
+ if (primitive.indices !== void 0) {
3932
+ primitive.indices = this.getAccessor(primitive.indices);
3933
+ }
3934
+ if (primitive.material !== void 0) {
3935
+ primitive.material = this.getMaterial(primitive.material);
3936
+ }
3937
+ return primitive;
3938
+ });
3939
+ }
3940
+ return mesh;
3941
+ }
3942
+ _resolveMaterial(material, index) {
3943
+ material.id = material.id || `material-${index}`;
3944
+ if (material.normalTexture) {
3945
+ material.normalTexture = { ...material.normalTexture };
3946
+ material.normalTexture.texture = this.getTexture(material.normalTexture.index);
3947
+ }
3948
+ if (material.occlusionTexture) {
3949
+ material.occlustionTexture = { ...material.occlustionTexture };
3950
+ material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);
3951
+ }
3952
+ if (material.emissiveTexture) {
3953
+ material.emmisiveTexture = { ...material.emmisiveTexture };
3954
+ material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);
3955
+ }
3956
+ if (!material.emissiveFactor) {
3957
+ material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];
3958
+ }
3959
+ if (material.pbrMetallicRoughness) {
3960
+ material.pbrMetallicRoughness = { ...material.pbrMetallicRoughness };
3961
+ const mr = material.pbrMetallicRoughness;
3962
+ if (mr.baseColorTexture) {
3963
+ mr.baseColorTexture = { ...mr.baseColorTexture };
3964
+ mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);
3965
+ }
3966
+ if (mr.metallicRoughnessTexture) {
3967
+ mr.metallicRoughnessTexture = { ...mr.metallicRoughnessTexture };
3968
+ mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);
3969
+ }
3970
+ }
3971
+ return material;
3972
+ }
3973
+ _resolveAccessor(accessor, index) {
3974
+ accessor.id = accessor.id || `accessor-${index}`;
3975
+ if (accessor.bufferView !== void 0) {
3976
+ accessor.bufferView = this.getBufferView(accessor.bufferView);
3977
+ }
3978
+ accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);
3979
+ accessor.components = getSizeFromAccessorType(accessor.type);
3980
+ accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;
3981
+ if (accessor.bufferView) {
3982
+ const buffer = accessor.bufferView.buffer;
3983
+ const { ArrayType, byteLength } = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);
3984
+ const byteOffset = (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;
3985
+ let cutBuffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);
3986
+ if (accessor.bufferView.byteStride) {
3987
+ cutBuffer = this._getValueFromInterleavedBuffer(buffer, byteOffset, accessor.bufferView.byteStride, accessor.bytesPerElement, accessor.count);
3988
+ }
3989
+ accessor.value = new ArrayType(cutBuffer);
3990
+ }
3991
+ return accessor;
3992
+ }
3993
+ _getValueFromInterleavedBuffer(buffer, byteOffset, byteStride, bytesPerElement, count) {
3994
+ const result = new Uint8Array(count * bytesPerElement);
3995
+ for (let i2 = 0; i2 < count; i2++) {
3996
+ const elementOffset = byteOffset + i2 * byteStride;
3997
+ result.set(new Uint8Array(buffer.arrayBuffer.slice(elementOffset, elementOffset + bytesPerElement)), i2 * bytesPerElement);
3998
+ }
3999
+ return result.buffer;
4000
+ }
4001
+ _resolveTexture(texture, index) {
4002
+ texture.id = texture.id || `texture-${index}`;
4003
+ texture.sampler = "sampler" in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;
4004
+ texture.source = this.getImage(texture.source);
4005
+ return texture;
4006
+ }
4007
+ _resolveSampler(sampler, index) {
4008
+ sampler.id = sampler.id || `sampler-${index}`;
4009
+ sampler.parameters = {};
4010
+ for (const key in sampler) {
4011
+ const glEnum = this._enumSamplerParameter(key);
4012
+ if (glEnum !== void 0) {
4013
+ sampler.parameters[glEnum] = sampler[key];
4014
+ }
4015
+ }
4016
+ return sampler;
4017
+ }
4018
+ _enumSamplerParameter(key) {
4019
+ return SAMPLER_PARAMETER_GLTF_TO_GL[key];
4020
+ }
4021
+ _resolveImage(image, index) {
4022
+ image.id = image.id || `image-${index}`;
4023
+ if (image.bufferView !== void 0) {
4024
+ image.bufferView = this.getBufferView(image.bufferView);
4025
+ }
4026
+ const preloadedImage = this.images[index];
4027
+ if (preloadedImage) {
4028
+ image.image = preloadedImage;
4029
+ }
4030
+ return image;
4031
+ }
4032
+ _resolveBufferView(bufferView, index) {
4033
+ const bufferIndex = bufferView.buffer;
4034
+ const result = {
4035
+ id: `bufferView-${index}`,
4036
+ ...bufferView,
4037
+ buffer: this.buffers[bufferIndex]
4038
+ };
4039
+ const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;
4040
+ let byteOffset = this.buffers[bufferIndex].byteOffset || 0;
4041
+ if ("byteOffset" in bufferView) {
4042
+ byteOffset += bufferView.byteOffset;
4043
+ }
4044
+ result.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);
4045
+ return result;
4046
+ }
4047
+ _resolveCamera(camera, index) {
4048
+ camera.id = camera.id || `camera-${index}`;
4049
+ if (camera.perspective) {
4050
+ }
4051
+ if (camera.orthographic) {
4052
+ }
4053
+ return camera;
4054
+ }
4055
+ };
4056
+ }
4057
+ });
4058
+
4059
+ // src/lib/parsers/parse-glb.ts
4060
+ function getMagicString2(dataView, byteOffset = 0) {
4061
+ return `${String.fromCharCode(dataView.getUint8(byteOffset + 0))}${String.fromCharCode(dataView.getUint8(byteOffset + 1))}${String.fromCharCode(dataView.getUint8(byteOffset + 2))}${String.fromCharCode(dataView.getUint8(byteOffset + 3))}`;
4062
+ }
4063
+ function isGLB(arrayBuffer, byteOffset = 0, options = {}) {
4064
+ const dataView = new DataView(arrayBuffer);
4065
+ const { magic = MAGIC_glTF } = options;
4066
+ const magic1 = dataView.getUint32(byteOffset, false);
4067
+ return magic1 === magic || magic1 === MAGIC_glTF;
4068
+ }
4069
+ function parseGLBSync(glb, arrayBuffer, byteOffset = 0, options = {}) {
4070
+ const dataView = new DataView(arrayBuffer);
4071
+ const type = getMagicString2(dataView, byteOffset + 0);
4072
+ const version = dataView.getUint32(byteOffset + 4, LE);
4073
+ const byteLength = dataView.getUint32(byteOffset + 8, LE);
4074
+ Object.assign(glb, {
4075
+ header: {
4076
+ byteOffset,
4077
+ byteLength,
4078
+ hasBinChunk: false
4079
+ },
4080
+ type,
4081
+ version,
4082
+ json: {},
4083
+ binChunks: []
4084
+ });
4085
+ byteOffset += GLB_FILE_HEADER_SIZE;
4086
+ switch (glb.version) {
4087
+ case 1:
4088
+ return parseGLBV1(glb, dataView, byteOffset);
4089
+ case 2:
4090
+ return parseGLBV2(glb, dataView, byteOffset, options = {});
4091
+ default:
4092
+ throw new Error(`Invalid GLB version ${glb.version}. Only supports v1 and v2.`);
4093
+ }
4094
+ }
4095
+ function parseGLBV1(glb, dataView, byteOffset) {
4096
+ assert2(glb.header.byteLength > GLB_FILE_HEADER_SIZE + GLB_CHUNK_HEADER_SIZE);
4097
+ const contentLength = dataView.getUint32(byteOffset + 0, LE);
4098
+ const contentFormat = dataView.getUint32(byteOffset + 4, LE);
4099
+ byteOffset += GLB_CHUNK_HEADER_SIZE;
4100
+ assert2(contentFormat === GLB_V1_CONTENT_FORMAT_JSON);
4101
+ parseJSONChunk(glb, dataView, byteOffset, contentLength);
4102
+ byteOffset += contentLength;
4103
+ byteOffset += parseBINChunk(glb, dataView, byteOffset, glb.header.byteLength);
4104
+ return byteOffset;
4105
+ }
4106
+ function parseGLBV2(glb, dataView, byteOffset, options) {
4107
+ assert2(glb.header.byteLength > GLB_FILE_HEADER_SIZE + GLB_CHUNK_HEADER_SIZE);
4108
+ parseGLBChunksSync(glb, dataView, byteOffset, options);
4109
+ return byteOffset + glb.header.byteLength;
4110
+ }
4111
+ function parseGLBChunksSync(glb, dataView, byteOffset, options) {
4112
+ while (byteOffset + 8 <= glb.header.byteLength) {
4113
+ const chunkLength = dataView.getUint32(byteOffset + 0, LE);
4114
+ const chunkFormat = dataView.getUint32(byteOffset + 4, LE);
4115
+ byteOffset += GLB_CHUNK_HEADER_SIZE;
4116
+ switch (chunkFormat) {
4117
+ case GLB_CHUNK_TYPE_JSON:
4118
+ parseJSONChunk(glb, dataView, byteOffset, chunkLength);
4119
+ break;
4120
+ case GLB_CHUNK_TYPE_BIN:
4121
+ parseBINChunk(glb, dataView, byteOffset, chunkLength);
4122
+ break;
4123
+ case GLB_CHUNK_TYPE_JSON_XVIZ_DEPRECATED:
4124
+ if (!options.strict) {
4125
+ parseJSONChunk(glb, dataView, byteOffset, chunkLength);
4126
+ }
4127
+ break;
4128
+ case GLB_CHUNK_TYPE_BIX_XVIZ_DEPRECATED:
4129
+ if (!options.strict) {
4130
+ parseBINChunk(glb, dataView, byteOffset, chunkLength);
4131
+ }
4132
+ break;
4133
+ default:
4134
+ break;
4135
+ }
4136
+ byteOffset += padToNBytes(chunkLength, 4);
4137
+ }
4138
+ return byteOffset;
4139
+ }
4140
+ function parseJSONChunk(glb, dataView, byteOffset, chunkLength) {
4141
+ const jsonChunk = new Uint8Array(dataView.buffer, byteOffset, chunkLength);
4142
+ const textDecoder = new TextDecoder("utf8");
4143
+ const jsonText = textDecoder.decode(jsonChunk);
4144
+ glb.json = JSON.parse(jsonText);
4145
+ return padToNBytes(chunkLength, 4);
4146
+ }
4147
+ function parseBINChunk(glb, dataView, byteOffset, chunkLength) {
4148
+ glb.header.hasBinChunk = true;
4149
+ glb.binChunks.push({
4150
+ byteOffset,
4151
+ byteLength: chunkLength,
4152
+ arrayBuffer: dataView.buffer
4153
+ });
4154
+ return padToNBytes(chunkLength, 4);
4155
+ }
4156
+ var MAGIC_glTF, GLB_FILE_HEADER_SIZE, GLB_CHUNK_HEADER_SIZE, GLB_CHUNK_TYPE_JSON, GLB_CHUNK_TYPE_BIN, GLB_CHUNK_TYPE_JSON_XVIZ_DEPRECATED, GLB_CHUNK_TYPE_BIX_XVIZ_DEPRECATED, GLB_V1_CONTENT_FORMAT_JSON, LE;
4157
+ var init_parse_glb = __esm({
4158
+ "src/lib/parsers/parse-glb.ts"() {
4159
+ init_src2();
4160
+ MAGIC_glTF = 1735152710;
4161
+ GLB_FILE_HEADER_SIZE = 12;
4162
+ GLB_CHUNK_HEADER_SIZE = 8;
4163
+ GLB_CHUNK_TYPE_JSON = 1313821514;
4164
+ GLB_CHUNK_TYPE_BIN = 5130562;
4165
+ GLB_CHUNK_TYPE_JSON_XVIZ_DEPRECATED = 0;
4166
+ GLB_CHUNK_TYPE_BIX_XVIZ_DEPRECATED = 1;
4167
+ GLB_V1_CONTENT_FORMAT_JSON = 0;
4168
+ LE = true;
4169
+ }
4170
+ });
4171
+
4172
+ // src/lib/parsers/parse-gltf.ts
4173
+ async function parseGLTF(gltf, arrayBufferOrString, byteOffset = 0, options, context) {
4174
+ parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);
4175
+ normalizeGLTFV1(gltf, { normalize: options?.gltf?.normalize });
4176
+ preprocessExtensions(gltf, options, context);
4177
+ const promises = [];
4178
+ if (options?.gltf?.loadBuffers && gltf.json.buffers) {
4179
+ await loadBuffers(gltf, options, context);
4180
+ }
4181
+ if (options?.gltf?.loadImages) {
4182
+ const promise2 = loadImages(gltf, options, context);
4183
+ promises.push(promise2);
4184
+ }
4185
+ const promise = decodeExtensions(gltf, options, context);
4186
+ promises.push(promise);
4187
+ await Promise.all(promises);
4188
+ return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;
4189
+ }
4190
+ function parseGLTFContainerSync(gltf, data, byteOffset, options) {
4191
+ if (options.uri) {
4192
+ gltf.baseUri = options.uri;
4193
+ }
4194
+ if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {
4195
+ const textDecoder = new TextDecoder();
4196
+ data = textDecoder.decode(data);
4197
+ }
4198
+ if (typeof data === "string") {
4199
+ gltf.json = parseJSON(data);
4200
+ } else if (data instanceof ArrayBuffer) {
4201
+ const glb = {};
4202
+ byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);
4203
+ assert3(glb.type === "glTF", `Invalid GLB magic string ${glb.type}`);
4204
+ gltf._glb = glb;
4205
+ gltf.json = glb.json;
4206
+ } else {
4207
+ assert3(false, "GLTF: must be ArrayBuffer or string");
4208
+ }
4209
+ const buffers = gltf.json.buffers || [];
4210
+ gltf.buffers = new Array(buffers.length).fill(null);
4211
+ if (gltf._glb && gltf._glb.header.hasBinChunk) {
4212
+ const { binChunks } = gltf._glb;
4213
+ gltf.buffers[0] = {
4214
+ arrayBuffer: binChunks[0].arrayBuffer,
4215
+ byteOffset: binChunks[0].byteOffset,
4216
+ byteLength: binChunks[0].byteLength
4217
+ };
4218
+ }
4219
+ const images = gltf.json.images || [];
4220
+ gltf.images = new Array(images.length).fill({});
4221
+ }
4222
+ async function loadBuffers(gltf, options, context) {
4223
+ const buffers = gltf.json.buffers || [];
4224
+ for (let i2 = 0; i2 < buffers.length; ++i2) {
4225
+ const buffer = buffers[i2];
4226
+ if (buffer.uri) {
4227
+ const { fetch: fetch2 } = context;
4228
+ assert3(fetch2);
4229
+ const uri = resolveUrl(buffer.uri, options);
4230
+ const response = await context?.fetch?.(uri);
4231
+ const arrayBuffer = await response?.arrayBuffer?.();
4232
+ gltf.buffers[i2] = {
4233
+ arrayBuffer,
4234
+ byteOffset: 0,
4235
+ byteLength: arrayBuffer.byteLength
4236
+ };
4237
+ delete buffer.uri;
4238
+ }
4239
+ }
4240
+ }
4241
+ async function loadImages(gltf, options, context) {
4242
+ const imageIndices = getReferencesImageIndices(gltf);
4243
+ const images = gltf.json.images || [];
4244
+ const promises = [];
4245
+ for (const imageIndex of imageIndices) {
4246
+ promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));
4247
+ }
4248
+ return await Promise.all(promises);
4249
+ }
4250
+ function getReferencesImageIndices(gltf) {
4251
+ const imageIndices = new Set();
4252
+ const textures = gltf.json.textures || [];
4253
+ for (const texture of textures) {
4254
+ if (texture.source !== void 0) {
4255
+ imageIndices.add(texture.source);
4256
+ }
4257
+ }
4258
+ return Array.from(imageIndices).sort();
4259
+ }
4260
+ async function loadImage(gltf, image, index, options, context) {
4261
+ const { fetch: fetch2, parse: parse4 } = context;
4262
+ let arrayBuffer;
4263
+ if (image.uri) {
4264
+ const uri = resolveUrl(image.uri, options);
4265
+ const response = await fetch2(uri);
4266
+ arrayBuffer = await response.arrayBuffer();
4267
+ }
4268
+ if (Number.isFinite(image.bufferView)) {
4269
+ const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);
4270
+ arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);
4271
+ }
4272
+ assert3(arrayBuffer, "glTF image has no data");
4273
+ let parsedImage = await parse4(arrayBuffer, [ImageLoader, BasisLoader], { mimeType: image.mimeType, basis: options.basis || { format: selectSupportedBasisFormat() } }, context);
4274
+ if (parsedImage && parsedImage[0]) {
4275
+ parsedImage = {
4276
+ compressed: true,
4277
+ mipmaps: false,
4278
+ width: parsedImage[0].width,
4279
+ height: parsedImage[0].height,
4280
+ data: parsedImage[0]
4281
+ };
4282
+ }
4283
+ gltf.images = gltf.images || [];
4284
+ gltf.images[index] = parsedImage;
4285
+ }
4286
+ var init_parse_gltf = __esm({
4287
+ "src/lib/parsers/parse-gltf.ts"() {
4288
+ init_src4();
4289
+ init_src3();
4290
+ init_src2();
4291
+ init_assert3();
4292
+ init_resolve_url();
4293
+ init_get_typed_array();
4294
+ init_gltf_extensions();
4295
+ init_normalize_gltf_v1();
4296
+ init_post_process_gltf();
4297
+ init_parse_glb();
4298
+ }
4299
+ });
4300
+
4301
+ // src/gltf-loader.ts
4302
+ async function parse2(arrayBuffer, options = {}, context) {
4303
+ options = { ...GLTFLoader.options, ...options };
4304
+ options.gltf = { ...GLTFLoader.options.gltf, ...options.gltf };
4305
+ const { byteOffset = 0 } = options;
4306
+ const gltf = {};
4307
+ return await parseGLTF(gltf, arrayBuffer, byteOffset, options, context);
4308
+ }
4309
+ var GLTFLoader;
4310
+ var init_gltf_loader = __esm({
4311
+ "src/gltf-loader.ts"() {
4312
+ init_version();
4313
+ init_parse_gltf();
4314
+ GLTFLoader = {
4315
+ name: "glTF",
4316
+ id: "gltf",
4317
+ module: "gltf",
4318
+ version: VERSION,
4319
+ extensions: ["gltf", "glb"],
4320
+ mimeTypes: ["model/gltf+json", "model/gltf-binary"],
4321
+ text: true,
4322
+ binary: true,
4323
+ tests: ["glTF"],
4324
+ parse: parse2,
4325
+ options: {
4326
+ gltf: {
4327
+ normalize: true,
4328
+ loadBuffers: true,
4329
+ loadImages: true,
4330
+ decompressMeshes: true,
4331
+ postProcess: true
4332
+ },
4333
+ log: console
4334
+ },
4335
+ deprecatedOptions: {
4336
+ fetchImages: "gltf.loadImages",
4337
+ createImages: "gltf.loadImages",
4338
+ decompress: "gltf.decompressMeshes",
4339
+ postProcess: "gltf.postProcess",
4340
+ gltf: {
4341
+ decompress: "gltf.decompressMeshes"
4342
+ }
4343
+ }
4344
+ };
4345
+ }
4346
+ });
4347
+
4348
+ // src/lib/encoders/encode-glb.ts
4349
+ function encodeGLBSync(glb, dataView, byteOffset = 0, options = {}) {
4350
+ const { magic = MAGIC_glTF2, version = 2, json = {}, binary } = glb;
4351
+ const byteOffsetStart = byteOffset;
4352
+ if (dataView) {
4353
+ dataView.setUint32(byteOffset + 0, magic, LE2);
4354
+ dataView.setUint32(byteOffset + 4, version, LE2);
4355
+ dataView.setUint32(byteOffset + 8, 0, LE2);
4356
+ }
4357
+ const byteOffsetFileLength = byteOffset + 8;
4358
+ byteOffset += 12;
4359
+ const byteOffsetJsonHeader = byteOffset;
4360
+ if (dataView) {
4361
+ dataView.setUint32(byteOffset + 0, 0, LE2);
4362
+ dataView.setUint32(byteOffset + 4, MAGIC_JSON, LE2);
4363
+ }
4364
+ byteOffset += 8;
4365
+ const jsonString = JSON.stringify(json);
4366
+ byteOffset = copyPaddedStringToDataView(dataView, byteOffset, jsonString, 4);
4367
+ if (dataView) {
4368
+ const jsonByteLength = byteOffset - byteOffsetJsonHeader - 8;
4369
+ dataView.setUint32(byteOffsetJsonHeader + 0, jsonByteLength, LE2);
4370
+ }
4371
+ if (binary) {
4372
+ const byteOffsetBinHeader = byteOffset;
4373
+ if (dataView) {
4374
+ dataView.setUint32(byteOffset + 0, 0, LE2);
4375
+ dataView.setUint32(byteOffset + 4, MAGIC_BIN, LE2);
4376
+ }
4377
+ byteOffset += 8;
4378
+ byteOffset = copyPaddedArrayBufferToDataView(dataView, byteOffset, binary, 4);
4379
+ if (dataView) {
4380
+ const binByteLength = byteOffset - byteOffsetBinHeader - 8;
4381
+ dataView.setUint32(byteOffsetBinHeader + 0, binByteLength, LE2);
4382
+ }
4383
+ }
4384
+ if (dataView) {
4385
+ const fileByteLength = byteOffset - byteOffsetStart;
4386
+ dataView.setUint32(byteOffsetFileLength, fileByteLength, LE2);
4387
+ }
4388
+ return byteOffset;
4389
+ }
4390
+ var MAGIC_glTF2, MAGIC_JSON, MAGIC_BIN, LE2;
4391
+ var init_encode_glb = __esm({
4392
+ "src/lib/encoders/encode-glb.ts"() {
4393
+ init_src2();
4394
+ MAGIC_glTF2 = 1179937895;
4395
+ MAGIC_JSON = 1313821514;
4396
+ MAGIC_BIN = 5130562;
4397
+ LE2 = true;
4398
+ }
4399
+ });
4400
+
4401
+ // src/lib/encoders/encode-gltf.ts
4402
+ function encodeGLTFSync(gltf, arrayBuffer, byteOffset, options) {
4403
+ convertBuffersToBase64(gltf);
4404
+ return encodeGLBSync(gltf, arrayBuffer, byteOffset, options);
4405
+ }
4406
+ function convertBuffersToBase64(gltf, { firstBuffer = 0 } = {}) {
4407
+ if (gltf.buffers && gltf.buffers.length > firstBuffer) {
4408
+ throw new Error("encodeGLTF: multiple buffers not yet implemented");
4409
+ }
4410
+ }
4411
+ var init_encode_gltf = __esm({
4412
+ "src/lib/encoders/encode-gltf.ts"() {
4413
+ init_encode_glb();
4414
+ }
4415
+ });
4416
+
4417
+ // src/gltf-writer.ts
4418
+ function encodeSync(gltf, options = {}) {
4419
+ const { byteOffset = 0 } = options;
4420
+ const byteLength = encodeGLTFSync(gltf, null, byteOffset, options);
4421
+ const arrayBuffer = new ArrayBuffer(byteLength);
4422
+ const dataView = new DataView(arrayBuffer);
4423
+ encodeGLTFSync(gltf, dataView, byteOffset, options);
4424
+ return arrayBuffer;
4425
+ }
4426
+ var GLTFWriter;
4427
+ var init_gltf_writer = __esm({
4428
+ "src/gltf-writer.ts"() {
4429
+ init_version();
4430
+ init_encode_gltf();
4431
+ GLTFWriter = {
4432
+ name: "glTF",
4433
+ id: "gltf",
4434
+ module: "gltf",
4435
+ version: VERSION,
4436
+ extensions: ["glb"],
4437
+ mimeTypes: ["model/gltf-binary"],
4438
+ binary: true,
4439
+ encodeSync,
4440
+ options: {
4441
+ gltf: {}
4442
+ }
4443
+ };
4444
+ }
4445
+ });
4446
+
4447
+ // src/glb-loader.ts
4448
+ async function parse3(arrayBuffer, options) {
4449
+ return parseSync(arrayBuffer, options);
4450
+ }
4451
+ function parseSync(arrayBuffer, options) {
4452
+ const { byteOffset = 0 } = options || {};
4453
+ const glb = {};
4454
+ parseGLBSync(glb, arrayBuffer, byteOffset, options?.glb);
4455
+ return glb;
4456
+ }
4457
+ var GLBLoader;
4458
+ var init_glb_loader = __esm({
4459
+ "src/glb-loader.ts"() {
4460
+ init_version();
4461
+ init_parse_glb();
4462
+ GLBLoader = {
4463
+ name: "GLB",
4464
+ id: "glb",
4465
+ module: "gltf",
4466
+ version: VERSION,
4467
+ extensions: ["glb"],
4468
+ mimeTypes: ["model/gltf-binary"],
4469
+ binary: true,
4470
+ parse: parse3,
4471
+ parseSync,
4472
+ options: {
4473
+ glb: {
4474
+ strict: false
4475
+ }
4476
+ }
4477
+ };
4478
+ }
4479
+ });
4480
+
4481
+ // src/glb-writer.ts
4482
+ function encodeSync2(glb, options) {
4483
+ const { byteOffset = 0 } = options;
4484
+ const byteLength = encodeGLBSync(glb, null, byteOffset, options);
4485
+ const arrayBuffer = new ArrayBuffer(byteLength);
4486
+ const dataView = new DataView(arrayBuffer);
4487
+ encodeGLBSync(glb, dataView, byteOffset, options);
4488
+ return arrayBuffer;
4489
+ }
4490
+ var GLBWriter;
4491
+ var init_glb_writer = __esm({
4492
+ "src/glb-writer.ts"() {
4493
+ init_version();
4494
+ init_encode_glb();
4495
+ GLBWriter = {
4496
+ name: "GLB",
4497
+ id: "glb",
4498
+ module: "gltf",
4499
+ version: VERSION,
4500
+ extensions: ["glb"],
4501
+ mimeTypes: ["model/gltf-binary"],
4502
+ binary: true,
4503
+ encodeSync: encodeSync2,
4504
+ options: {
4505
+ glb: {}
4506
+ }
4507
+ };
4508
+ }
4509
+ });
4510
+
4511
+ // src/index.ts
4512
+ var src_exports = {};
4513
+ __export(src_exports, {
4514
+ GLBLoader: () => GLBLoader,
4515
+ GLBWriter: () => GLBWriter,
4516
+ GLTFLoader: () => GLTFLoader,
4517
+ GLTFScenegraph: () => GLTFScenegraph,
4518
+ GLTFWriter: () => GLTFWriter,
4519
+ postProcessGLTF: () => postProcessGLTF
4520
+ });
4521
+ var init_src7 = __esm({
4522
+ "src/index.ts"() {
4523
+ init_gltf_loader();
4524
+ init_gltf_writer();
4525
+ init_glb_loader();
4526
+ init_glb_writer();
4527
+ init_gltf_scenegraph();
4528
+ init_post_process_gltf();
4529
+ }
4530
+ });
4531
+
4532
+ // src/bundle.ts
4533
+ var require_bundle = __commonJS({
4534
+ "src/bundle.ts"(exports, module) {
4535
+ var moduleExports = (init_src7(), src_exports);
4536
+ globalThis.loaders = globalThis.loaders || {};
4537
+ module.exports = Object.assign(globalThis.loaders, moduleExports);
4538
+ }
4539
+ });
4540
+ require_bundle();
4541
+ })();