@loaders.gl/draco 4.4.0-alpha.2 → 4.4.0

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 (64) hide show
  1. package/dist/dist.dev.js +3185 -2745
  2. package/dist/dist.min.js +6 -6
  3. package/dist/draco-arrow-loader.d.ts +1 -2
  4. package/dist/draco-arrow-loader.d.ts.map +1 -1
  5. package/dist/draco-arrow-loader.js +1 -0
  6. package/dist/draco-arrow-loader.js.map +1 -0
  7. package/dist/draco-format.js +1 -0
  8. package/dist/draco-format.js.map +1 -0
  9. package/dist/draco-loader.d.ts +4 -8
  10. package/dist/draco-loader.d.ts.map +1 -1
  11. package/dist/draco-loader.js +3 -2
  12. package/dist/draco-loader.js.map +1 -0
  13. package/dist/draco-worker-node.js +638 -9852
  14. package/dist/draco-worker-node.js.map +4 -4
  15. package/dist/draco-worker.js +108 -27
  16. package/dist/draco-worker.js.map +2 -2
  17. package/dist/draco-writer-worker-node.js +599 -9832
  18. package/dist/draco-writer-worker-node.js.map +4 -4
  19. package/dist/draco-writer-worker.js +70 -7
  20. package/dist/draco-writer-worker.js.map +2 -2
  21. package/dist/draco-writer.d.ts.map +1 -1
  22. package/dist/draco-writer.js +3 -1
  23. package/dist/draco-writer.js.map +1 -0
  24. package/dist/draco3d/draco3d-types.js +1 -0
  25. package/dist/draco3d/draco3d-types.js.map +1 -0
  26. package/dist/index.cjs +55 -12
  27. package/dist/index.cjs.map +4 -4
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/draco-builder.js +1 -0
  31. package/dist/lib/draco-builder.js.map +1 -0
  32. package/dist/lib/draco-module-loader.d.ts +7 -3
  33. package/dist/lib/draco-module-loader.d.ts.map +1 -1
  34. package/dist/lib/draco-module-loader.js +53 -10
  35. package/dist/lib/draco-module-loader.js.map +1 -0
  36. package/dist/lib/draco-parser.d.ts +2 -2
  37. package/dist/lib/draco-parser.js +1 -0
  38. package/dist/lib/draco-parser.js.map +1 -0
  39. package/dist/lib/draco-types.js +1 -0
  40. package/dist/lib/draco-types.js.map +1 -0
  41. package/dist/lib/utils/get-draco-schema.js +1 -0
  42. package/dist/lib/utils/get-draco-schema.js.map +1 -0
  43. package/dist/lib/utils/version.js +2 -1
  44. package/dist/lib/utils/version.js.map +1 -0
  45. package/dist/libs/libs/draco_decoder.wasm +0 -0
  46. package/dist/libs/libs/draco_encoder.js +52 -0
  47. package/dist/libs/libs/draco_wasm_wrapper.js +117 -0
  48. package/dist/workers/draco-worker-node.js +1 -0
  49. package/dist/workers/draco-worker-node.js.map +1 -0
  50. package/dist/workers/draco-worker.js +1 -0
  51. package/dist/workers/draco-worker.js.map +1 -0
  52. package/dist/workers/draco-writer-worker-node.cjs +17 -0
  53. package/dist/workers/draco-writer-worker-node.cjs.map +1 -0
  54. package/dist/workers/draco-writer-worker-node.d.cts +2 -0
  55. package/dist/workers/draco-writer-worker-node.d.cts.map +1 -0
  56. package/dist/workers/draco-writer-worker-node.js +1 -0
  57. package/dist/workers/draco-writer-worker-node.js.map +1 -0
  58. package/dist/workers/draco-writer-worker.js +1 -0
  59. package/dist/workers/draco-writer-worker.js.map +1 -0
  60. package/package.json +18 -6
  61. package/src/draco-loader.ts +7 -6
  62. package/src/draco-writer.ts +2 -1
  63. package/src/lib/draco-module-loader.ts +87 -23
  64. package/src/workers/draco-writer-worker-node.cjs +17 -0
@@ -9,8 +9,9 @@
9
9
  "loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN."
10
10
  );
11
11
  globalThis._loadersgl_.version = NPM_TAG;
12
+ warningIssued = true;
12
13
  } else {
13
- globalThis._loadersgl_.version = "4.4.0-alpha.1";
14
+ globalThis._loadersgl_.version = "4.4.0";
14
15
  }
15
16
  }
16
17
  return globalThis._loadersgl_.version;
@@ -164,6 +165,16 @@
164
165
 
165
166
  // ../worker-utils/src/lib/library-utils/library-utils.ts
166
167
  var loadLibraryPromises = {};
168
+ function extractLoadLibraryOptions(options = {}) {
169
+ const useLocalLibraries = options.useLocalLibraries ?? options.core?.useLocalLibraries;
170
+ const CDN = options.CDN ?? options.core?.CDN;
171
+ const modules = options.modules;
172
+ return {
173
+ ...useLocalLibraries !== void 0 ? { useLocalLibraries } : {},
174
+ ...CDN !== void 0 ? { CDN } : {},
175
+ ...modules !== void 0 ? { modules } : {}
176
+ };
177
+ }
167
178
  async function loadLibrary(libraryUrl, moduleName = null, options = {}, libraryName = null) {
168
179
  if (moduleName) {
169
180
  libraryUrl = getLibraryUrl(libraryUrl, moduleName, options, libraryName);
@@ -173,6 +184,9 @@
173
184
  return await loadLibraryPromises[libraryUrl];
174
185
  }
175
186
  function getLibraryUrl(library, moduleName, options = {}, libraryName = null) {
187
+ if (options?.core) {
188
+ throw new Error("loadLibrary: options.core must be pre-normalized");
189
+ }
176
190
  if (!options.useLocalLibraries && library.startsWith("http")) {
177
191
  return library;
178
192
  }
@@ -198,10 +212,20 @@
198
212
  return await loadAsArrayBuffer(libraryUrl);
199
213
  }
200
214
  if (!isBrowser) {
215
+ const { requireFromFile } = globalThis.loaders || {};
201
216
  try {
202
- const { requireFromFile } = globalThis.loaders || {};
203
- return await requireFromFile?.(libraryUrl);
217
+ const result = await requireFromFile?.(libraryUrl);
218
+ if (result || !libraryUrl.includes("/dist/libs/")) {
219
+ return result;
220
+ }
221
+ return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
204
222
  } catch (error) {
223
+ if (libraryUrl.includes("/dist/libs/")) {
224
+ try {
225
+ return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
226
+ } catch {
227
+ }
228
+ }
205
229
  console.error(error);
206
230
  return null;
207
231
  }
@@ -237,7 +261,14 @@
237
261
  const response = await fetch(url);
238
262
  return await response.arrayBuffer();
239
263
  }
240
- return await readFileAsArrayBuffer(url);
264
+ try {
265
+ return await readFileAsArrayBuffer(url);
266
+ } catch {
267
+ if (url.includes("/dist/libs/")) {
268
+ return await readFileAsArrayBuffer(url.replace("/dist/libs/", "/src/libs/"));
269
+ }
270
+ throw new Error(`Failed to load ArrayBuffer from ${url}`);
271
+ }
241
272
  }
242
273
  async function loadAsText(url) {
243
274
  const { readFileAsText } = globalThis.loaders || {};
@@ -245,7 +276,14 @@
245
276
  const response = await fetch(url);
246
277
  return await response.text();
247
278
  }
248
- return await readFileAsText(url);
279
+ try {
280
+ return await readFileAsText(url);
281
+ } catch {
282
+ if (url.includes("/dist/libs/")) {
283
+ return await readFileAsText(url.replace("/dist/libs/", "/src/libs/"));
284
+ }
285
+ throw new Error(`Failed to load text from ${url}`);
286
+ }
249
287
  }
250
288
 
251
289
  // ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
@@ -324,7 +362,10 @@
324
362
  options = {
325
363
  ...options,
326
364
  modules: loader && loader.options && loader.options.modules || {},
327
- worker: false
365
+ core: {
366
+ ...options.core,
367
+ worker: false
368
+ }
328
369
  };
329
370
  return await parser(data, { ...options }, context, loader);
330
371
  }
@@ -350,21 +391,32 @@
350
391
  [DRACO_EXTERNAL_LIBRARIES.ENCODER]: `https://raw.githubusercontent.com/google/draco/${DRACO_ENCODER_VERSION}/javascript/${DRACO_EXTERNAL_LIBRARIES.ENCODER}`
351
392
  };
352
393
  var loadDecoderPromise;
353
- async function loadDracoDecoderModule(options) {
394
+ async function loadDracoDecoderModule(options = {}, type) {
354
395
  const modules = options.modules || {};
355
396
  if (modules.draco3d) {
356
397
  loadDecoderPromise ||= modules.draco3d.createDecoderModule({}).then((draco) => {
357
398
  return { draco };
358
399
  });
359
400
  } else {
360
- loadDecoderPromise ||= loadDracoDecoder(options);
401
+ loadDecoderPromise ||= loadDracoDecoder(options, type);
361
402
  }
362
403
  return await loadDecoderPromise;
363
404
  }
364
- async function loadDracoDecoder(options) {
405
+ function getLibraryExport(library, exportName) {
406
+ if (library && typeof library === "object") {
407
+ if (library.default) {
408
+ return library.default;
409
+ }
410
+ if (library[exportName]) {
411
+ return library[exportName];
412
+ }
413
+ }
414
+ return library;
415
+ }
416
+ async function loadDracoDecoder(options, type) {
365
417
  let DracoDecoderModule;
366
418
  let wasmBinary;
367
- switch (options.draco && options.draco.decoderType) {
419
+ switch (type) {
368
420
  case "js":
369
421
  DracoDecoderModule = await loadLibrary(
370
422
  DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
@@ -375,25 +427,52 @@
375
427
  break;
376
428
  case "wasm":
377
429
  default:
378
- [DracoDecoderModule, wasmBinary] = await Promise.all([
379
- await loadLibrary(
380
- DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
381
- "draco",
382
- options,
383
- DRACO_EXTERNAL_LIBRARIES.DECODER
384
- ),
385
- await loadLibrary(
386
- DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
387
- "draco",
388
- options,
389
- DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
390
- )
391
- ]);
430
+ try {
431
+ [DracoDecoderModule, wasmBinary] = await Promise.all([
432
+ await loadLibrary(
433
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
434
+ "draco",
435
+ options,
436
+ DRACO_EXTERNAL_LIBRARIES.DECODER
437
+ ),
438
+ await loadLibrary(
439
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
440
+ "draco",
441
+ options,
442
+ DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
443
+ )
444
+ ]);
445
+ } catch {
446
+ DracoDecoderModule = null;
447
+ wasmBinary = null;
448
+ }
392
449
  }
450
+ DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
393
451
  DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
452
+ if (!DracoDecoderModule && !isBrowser) {
453
+ [DracoDecoderModule, wasmBinary] = await Promise.all([
454
+ await loadLibrary(
455
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
456
+ "draco",
457
+ { ...options, useLocalLibraries: true },
458
+ DRACO_EXTERNAL_LIBRARIES.DECODER
459
+ ),
460
+ await loadLibrary(
461
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
462
+ "draco",
463
+ { ...options, useLocalLibraries: true },
464
+ DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
465
+ )
466
+ ]);
467
+ DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
468
+ DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
469
+ }
394
470
  return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
395
471
  }
396
472
  function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
473
+ if (typeof DracoDecoderModule !== "function") {
474
+ throw new Error("DracoDecoderModule could not be loaded");
475
+ }
397
476
  const options = {};
398
477
  if (wasmBinary) {
399
478
  options.wasmBinary = wasmBinary;
@@ -408,7 +487,7 @@
408
487
  }
409
488
 
410
489
  // src/lib/utils/version.ts
411
- var VERSION2 = true ? "4.4.0-alpha.1" : "latest";
490
+ var VERSION2 = true ? "4.4.0" : "latest";
412
491
 
413
492
  // ../schema-utils/src/lib/schema/data-type.ts
414
493
  function getDataTypeFromTypedArray(array) {
@@ -1002,7 +1081,6 @@
1002
1081
  draco: {
1003
1082
  decoderType: typeof WebAssembly === "object" ? "wasm" : "js",
1004
1083
  // 'js' for IE11
1005
- libraryPath: "libs/",
1006
1084
  extraAttributes: {},
1007
1085
  attributeNameEntry: void 0
1008
1086
  }
@@ -1013,7 +1091,10 @@
1013
1091
  parse
1014
1092
  };
1015
1093
  async function parse(arrayBuffer, options) {
1016
- const { draco } = await loadDracoDecoderModule(options);
1094
+ const { draco } = await loadDracoDecoderModule(
1095
+ extractLoadLibraryOptions(options),
1096
+ options?.draco?.decoderType || "wasm"
1097
+ );
1017
1098
  const dracoParser = new DracoParser(draco);
1018
1099
  try {
1019
1100
  return dracoParser.parseSync(arrayBuffer, options?.draco);