@loaders.gl/draco 4.3.4 → 4.4.0-alpha.10

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 (76) hide show
  1. package/dist/dist.dev.js +13059 -1021
  2. package/dist/dist.min.js +12 -3
  3. package/dist/draco-arrow-loader.d.ts +30 -0
  4. package/dist/draco-arrow-loader.d.ts.map +1 -0
  5. package/dist/draco-arrow-loader.js +20 -0
  6. package/dist/draco-arrow-loader.js.map +1 -0
  7. package/dist/draco-format.d.ts +13 -0
  8. package/dist/draco-format.d.ts.map +1 -0
  9. package/dist/draco-format.js +16 -0
  10. package/dist/draco-format.js.map +1 -0
  11. package/dist/draco-loader.d.ts +29 -2
  12. package/dist/draco-loader.d.ts.map +1 -1
  13. package/dist/draco-loader.js +21 -1
  14. package/dist/draco-loader.js.map +1 -0
  15. package/dist/draco-worker-node.js +429 -185
  16. package/dist/draco-worker-node.js.map +4 -4
  17. package/dist/draco-worker.js +188 -116
  18. package/dist/draco-worker.js.map +4 -4
  19. package/dist/draco-writer-worker-node.js +301 -76
  20. package/dist/draco-writer-worker-node.js.map +4 -4
  21. package/dist/draco-writer-worker.js +61 -7
  22. package/dist/draco-writer-worker.js.map +2 -2
  23. package/dist/draco-writer.d.ts +16 -0
  24. package/dist/draco-writer.d.ts.map +1 -1
  25. package/dist/draco-writer.js +21 -1
  26. package/dist/draco-writer.js.map +1 -0
  27. package/dist/draco3d/draco3d-types.js +1 -0
  28. package/dist/draco3d/draco3d-types.js.map +1 -0
  29. package/dist/index.cjs +865 -811
  30. package/dist/index.cjs.map +4 -4
  31. package/dist/index.d.ts +5 -48
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +7 -38
  34. package/dist/index.js.map +1 -0
  35. package/dist/lib/draco-builder.d.ts.map +1 -1
  36. package/dist/lib/draco-builder.js +1 -0
  37. package/dist/lib/draco-builder.js.map +1 -0
  38. package/dist/lib/draco-module-loader.d.ts +3 -2
  39. package/dist/lib/draco-module-loader.d.ts.map +1 -1
  40. package/dist/lib/draco-module-loader.js +53 -10
  41. package/dist/lib/draco-module-loader.js.map +1 -0
  42. package/dist/lib/draco-parser.d.ts.map +1 -1
  43. package/dist/lib/draco-parser.js +4 -1
  44. package/dist/lib/draco-parser.js.map +1 -0
  45. package/dist/lib/draco-types.js +1 -0
  46. package/dist/lib/draco-types.js.map +1 -0
  47. package/dist/lib/utils/get-draco-schema.d.ts.map +1 -1
  48. package/dist/lib/utils/get-draco-schema.js +2 -1
  49. package/dist/lib/utils/get-draco-schema.js.map +1 -0
  50. package/dist/lib/utils/version.js +2 -1
  51. package/dist/lib/utils/version.js.map +1 -0
  52. package/dist/libs/libs/draco_decoder.wasm +0 -0
  53. package/dist/libs/libs/draco_encoder.js +52 -0
  54. package/dist/libs/libs/draco_wasm_wrapper.js +117 -0
  55. package/dist/workers/draco-worker-node.js +1 -0
  56. package/dist/workers/draco-worker-node.js.map +1 -0
  57. package/dist/workers/draco-worker.js +1 -0
  58. package/dist/workers/draco-worker.js.map +1 -0
  59. package/dist/workers/draco-writer-worker-node.cjs +18 -0
  60. package/dist/workers/draco-writer-worker-node.cjs.map +1 -0
  61. package/dist/workers/draco-writer-worker-node.d.cts +2 -0
  62. package/dist/workers/draco-writer-worker-node.d.cts.map +1 -0
  63. package/dist/workers/draco-writer-worker-node.js +1 -0
  64. package/dist/workers/draco-writer-worker-node.js.map +1 -0
  65. package/dist/workers/draco-writer-worker.js +1 -0
  66. package/dist/workers/draco-writer-worker.js.map +1 -0
  67. package/package.json +19 -6
  68. package/src/draco-arrow-loader.ts +25 -0
  69. package/src/draco-format.ts +18 -0
  70. package/src/draco-loader.ts +26 -3
  71. package/src/draco-writer.ts +22 -1
  72. package/src/index.ts +5 -45
  73. package/src/lib/draco-module-loader.ts +87 -23
  74. package/src/lib/draco-parser.ts +3 -1
  75. package/src/lib/utils/get-draco-schema.ts +2 -1
  76. package/src/workers/draco-writer-worker-node.cjs +18 -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.3.3";
14
+ globalThis._loadersgl_.version = "4.4.0-alpha.10";
14
15
  }
15
16
  }
16
17
  return globalThis._loadersgl_.version;
@@ -173,6 +174,9 @@
173
174
  return await loadLibraryPromises[libraryUrl];
174
175
  }
175
176
  function getLibraryUrl(library, moduleName, options = {}, libraryName = null) {
177
+ if (options?.core) {
178
+ throw new Error("loadLibrary: options.core must be pre-normalized");
179
+ }
176
180
  if (!options.useLocalLibraries && library.startsWith("http")) {
177
181
  return library;
178
182
  }
@@ -198,10 +202,20 @@
198
202
  return await loadAsArrayBuffer(libraryUrl);
199
203
  }
200
204
  if (!isBrowser) {
205
+ const { requireFromFile } = globalThis.loaders || {};
201
206
  try {
202
- const { requireFromFile } = globalThis.loaders || {};
203
- return await requireFromFile?.(libraryUrl);
207
+ const result = await requireFromFile?.(libraryUrl);
208
+ if (result || !libraryUrl.includes("/dist/libs/")) {
209
+ return result;
210
+ }
211
+ return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
204
212
  } catch (error) {
213
+ if (libraryUrl.includes("/dist/libs/")) {
214
+ try {
215
+ return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
216
+ } catch {
217
+ }
218
+ }
205
219
  console.error(error);
206
220
  return null;
207
221
  }
@@ -237,7 +251,14 @@
237
251
  const response = await fetch(url);
238
252
  return await response.arrayBuffer();
239
253
  }
240
- return await readFileAsArrayBuffer(url);
254
+ try {
255
+ return await readFileAsArrayBuffer(url);
256
+ } catch {
257
+ if (url.includes("/dist/libs/")) {
258
+ return await readFileAsArrayBuffer(url.replace("/dist/libs/", "/src/libs/"));
259
+ }
260
+ throw new Error(`Failed to load ArrayBuffer from ${url}`);
261
+ }
241
262
  }
242
263
  async function loadAsText(url) {
243
264
  const { readFileAsText } = globalThis.loaders || {};
@@ -245,7 +266,14 @@
245
266
  const response = await fetch(url);
246
267
  return await response.text();
247
268
  }
248
- return await readFileAsText(url);
269
+ try {
270
+ return await readFileAsText(url);
271
+ } catch {
272
+ if (url.includes("/dist/libs/")) {
273
+ return await readFileAsText(url.replace("/dist/libs/", "/src/libs/"));
274
+ }
275
+ throw new Error(`Failed to load text from ${url}`);
276
+ }
249
277
  }
250
278
 
251
279
  // ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
@@ -324,40 +352,134 @@
324
352
  options = {
325
353
  ...options,
326
354
  modules: loader && loader.options && loader.options.modules || {},
327
- worker: false
355
+ core: {
356
+ ...options.core,
357
+ worker: false
358
+ }
328
359
  };
329
360
  return await parser(data, { ...options }, context, loader);
330
361
  }
331
362
 
332
- // src/lib/utils/version.ts
333
- var VERSION2 = true ? "4.3.3" : "latest";
334
-
335
- // src/draco-loader.ts
336
- var DracoLoader = {
337
- dataType: null,
338
- batchType: null,
339
- name: "Draco",
340
- id: "draco",
341
- module: "draco",
342
- // shapes: ['mesh'],
343
- version: VERSION2,
344
- worker: true,
345
- extensions: ["drc"],
346
- mimeTypes: ["application/octet-stream"],
347
- binary: true,
348
- tests: ["DRACO"],
349
- options: {
350
- draco: {
351
- decoderType: typeof WebAssembly === "object" ? "wasm" : "js",
352
- // 'js' for IE11
353
- libraryPath: "libs/",
354
- extraAttributes: {},
355
- attributeNameEntry: void 0
363
+ // src/lib/draco-module-loader.ts
364
+ var DRACO_DECODER_VERSION = "1.5.6";
365
+ var DRACO_ENCODER_VERSION = "1.4.1";
366
+ var STATIC_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_DECODER_VERSION}`;
367
+ var DRACO_EXTERNAL_LIBRARIES = {
368
+ /** The primary Draco3D encoder, javascript wrapper part */
369
+ DECODER: "draco_wasm_wrapper.js",
370
+ /** The primary draco decoder, compiled web assembly part */
371
+ DECODER_WASM: "draco_decoder.wasm",
372
+ /** Fallback decoder for non-webassebly environments. Very big bundle, lower performance */
373
+ FALLBACK_DECODER: "draco_decoder.js",
374
+ /** Draco encoder */
375
+ ENCODER: "draco_encoder.js"
376
+ };
377
+ var DRACO_EXTERNAL_LIBRARY_URLS = {
378
+ [DRACO_EXTERNAL_LIBRARIES.DECODER]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.DECODER}`,
379
+ [DRACO_EXTERNAL_LIBRARIES.DECODER_WASM]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.DECODER_WASM}`,
380
+ [DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER}`,
381
+ [DRACO_EXTERNAL_LIBRARIES.ENCODER]: `https://raw.githubusercontent.com/google/draco/${DRACO_ENCODER_VERSION}/javascript/${DRACO_EXTERNAL_LIBRARIES.ENCODER}`
382
+ };
383
+ var loadDecoderPromise;
384
+ async function loadDracoDecoderModule(options = {}, type) {
385
+ const modules = options.modules || {};
386
+ if (modules.draco3d) {
387
+ loadDecoderPromise ||= modules.draco3d.createDecoderModule({}).then((draco) => {
388
+ return { draco };
389
+ });
390
+ } else {
391
+ loadDecoderPromise ||= loadDracoDecoder(options, type);
392
+ }
393
+ return await loadDecoderPromise;
394
+ }
395
+ function getLibraryExport(library, exportName) {
396
+ if (library && typeof library === "object") {
397
+ if (library.default) {
398
+ return library.default;
399
+ }
400
+ if (library[exportName]) {
401
+ return library[exportName];
356
402
  }
357
403
  }
358
- };
404
+ return library;
405
+ }
406
+ async function loadDracoDecoder(options, type) {
407
+ let DracoDecoderModule;
408
+ let wasmBinary;
409
+ switch (type) {
410
+ case "js":
411
+ DracoDecoderModule = await loadLibrary(
412
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
413
+ "draco",
414
+ options,
415
+ DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER
416
+ );
417
+ break;
418
+ case "wasm":
419
+ default:
420
+ try {
421
+ [DracoDecoderModule, wasmBinary] = await Promise.all([
422
+ await loadLibrary(
423
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
424
+ "draco",
425
+ options,
426
+ DRACO_EXTERNAL_LIBRARIES.DECODER
427
+ ),
428
+ await loadLibrary(
429
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
430
+ "draco",
431
+ options,
432
+ DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
433
+ )
434
+ ]);
435
+ } catch {
436
+ DracoDecoderModule = null;
437
+ wasmBinary = null;
438
+ }
439
+ }
440
+ DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
441
+ DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
442
+ if (!DracoDecoderModule && !isBrowser) {
443
+ [DracoDecoderModule, wasmBinary] = await Promise.all([
444
+ await loadLibrary(
445
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
446
+ "draco",
447
+ { ...options, useLocalLibraries: true },
448
+ DRACO_EXTERNAL_LIBRARIES.DECODER
449
+ ),
450
+ await loadLibrary(
451
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
452
+ "draco",
453
+ { ...options, useLocalLibraries: true },
454
+ DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
455
+ )
456
+ ]);
457
+ DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
458
+ DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
459
+ }
460
+ return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
461
+ }
462
+ function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
463
+ if (typeof DracoDecoderModule !== "function") {
464
+ throw new Error("DracoDecoderModule could not be loaded");
465
+ }
466
+ const options = {};
467
+ if (wasmBinary) {
468
+ options.wasmBinary = wasmBinary;
469
+ }
470
+ return new Promise((resolve) => {
471
+ DracoDecoderModule({
472
+ ...options,
473
+ onModuleLoaded: (draco) => resolve({ draco })
474
+ // Module is Promise-like. Wrap in object to avoid loop.
475
+ });
476
+ });
477
+ }
478
+
479
+ // src/lib/utils/version.ts
480
+ var VERSION2 = true ? "4.4.0-alpha.10" : "latest";
359
481
 
360
- // ../schema/src/lib/table/simple-table/data-type.ts
482
+ // ../schema-utils/src/lib/schema/data-type.ts
361
483
  function getDataTypeFromTypedArray(array) {
362
484
  switch (array.constructor) {
363
485
  case Int8Array:
@@ -382,7 +504,7 @@
382
504
  }
383
505
  }
384
506
 
385
- // ../schema/src/lib/mesh/mesh-utils.ts
507
+ // ../schema-utils/src/lib/mesh/mesh-utils.ts
386
508
  function getMeshBoundingBox(attributes) {
387
509
  let minX = Infinity;
388
510
  let minY = Infinity;
@@ -409,7 +531,7 @@
409
531
  ];
410
532
  }
411
533
 
412
- // ../schema/src/lib/mesh/deduce-mesh-schema.ts
534
+ // ../schema-utils/src/lib/mesh/deduce-mesh-schema.ts
413
535
  function deduceMeshField(name, attribute, optionalMetadata) {
414
536
  const type = getDataTypeFromTypedArray(attribute.value);
415
537
  const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);
@@ -633,6 +755,7 @@
633
755
  case "triangle-strip":
634
756
  return {
635
757
  topology: "triangle-strip",
758
+ // TODO - mode is wrong?
636
759
  mode: 4,
637
760
  // GL.TRIANGLES
638
761
  attributes,
@@ -645,6 +768,7 @@
645
768
  default:
646
769
  return {
647
770
  topology: "triangle-list",
771
+ // TODO - mode is wrong?
648
772
  mode: 5,
649
773
  // GL.TRIANGLE_STRIP
650
774
  attributes,
@@ -929,91 +1053,39 @@
929
1053
  return intArray;
930
1054
  }
931
1055
 
932
- // src/lib/draco-module-loader.ts
933
- var DRACO_DECODER_VERSION = "1.5.6";
934
- var DRACO_ENCODER_VERSION = "1.4.1";
935
- var STATIC_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_DECODER_VERSION}`;
936
- var DRACO_EXTERNAL_LIBRARIES = {
937
- /** The primary Draco3D encoder, javascript wrapper part */
938
- DECODER: "draco_wasm_wrapper.js",
939
- /** The primary draco decoder, compiled web assembly part */
940
- DECODER_WASM: "draco_decoder.wasm",
941
- /** Fallback decoder for non-webassebly environments. Very big bundle, lower performance */
942
- FALLBACK_DECODER: "draco_decoder.js",
943
- /** Draco encoder */
944
- ENCODER: "draco_encoder.js"
945
- };
946
- var DRACO_EXTERNAL_LIBRARY_URLS = {
947
- [DRACO_EXTERNAL_LIBRARIES.DECODER]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.DECODER}`,
948
- [DRACO_EXTERNAL_LIBRARIES.DECODER_WASM]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.DECODER_WASM}`,
949
- [DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER}`,
950
- [DRACO_EXTERNAL_LIBRARIES.ENCODER]: `https://raw.githubusercontent.com/google/draco/${DRACO_ENCODER_VERSION}/javascript/${DRACO_EXTERNAL_LIBRARIES.ENCODER}`
951
- };
952
- var loadDecoderPromise;
953
- async function loadDracoDecoderModule(options) {
954
- const modules = options.modules || {};
955
- if (modules.draco3d) {
956
- loadDecoderPromise ||= modules.draco3d.createDecoderModule({}).then((draco) => {
957
- return { draco };
958
- });
959
- } else {
960
- loadDecoderPromise ||= loadDracoDecoder(options);
961
- }
962
- return await loadDecoderPromise;
963
- }
964
- async function loadDracoDecoder(options) {
965
- let DracoDecoderModule;
966
- let wasmBinary;
967
- switch (options.draco && options.draco.decoderType) {
968
- case "js":
969
- DracoDecoderModule = await loadLibrary(
970
- DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
971
- "draco",
972
- options,
973
- DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER
974
- );
975
- break;
976
- case "wasm":
977
- default:
978
- [DracoDecoderModule, wasmBinary] = await Promise.all([
979
- await loadLibrary(
980
- DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
981
- "draco",
982
- options,
983
- DRACO_EXTERNAL_LIBRARIES.DECODER
984
- ),
985
- await loadLibrary(
986
- DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
987
- "draco",
988
- options,
989
- DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
990
- )
991
- ]);
992
- }
993
- DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
994
- return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
995
- }
996
- function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
997
- const options = {};
998
- if (wasmBinary) {
999
- options.wasmBinary = wasmBinary;
1056
+ // src/draco-loader.ts
1057
+ var DracoWorkerLoader = {
1058
+ dataType: null,
1059
+ batchType: null,
1060
+ name: "Draco",
1061
+ id: "draco",
1062
+ module: "draco",
1063
+ // shapes: ['mesh'],
1064
+ version: VERSION2,
1065
+ worker: true,
1066
+ extensions: ["drc"],
1067
+ mimeTypes: ["application/octet-stream"],
1068
+ binary: true,
1069
+ tests: ["DRACO"],
1070
+ options: {
1071
+ draco: {
1072
+ decoderType: typeof WebAssembly === "object" ? "wasm" : "js",
1073
+ // 'js' for IE11
1074
+ libraryPath: "libs/",
1075
+ extraAttributes: {},
1076
+ attributeNameEntry: void 0
1077
+ }
1000
1078
  }
1001
- return new Promise((resolve) => {
1002
- DracoDecoderModule({
1003
- ...options,
1004
- onModuleLoaded: (draco) => resolve({ draco })
1005
- // Module is Promise-like. Wrap in object to avoid loop.
1006
- });
1007
- });
1008
- }
1009
-
1010
- // src/index.ts
1011
- var DracoLoader2 = {
1012
- ...DracoLoader,
1079
+ };
1080
+ var DracoLoader = {
1081
+ ...DracoWorkerLoader,
1013
1082
  parse
1014
1083
  };
1015
1084
  async function parse(arrayBuffer, options) {
1016
- const { draco } = await loadDracoDecoderModule(options);
1085
+ const { draco } = await loadDracoDecoderModule(
1086
+ options?.core,
1087
+ options?.draco?.decoderType || "wasm"
1088
+ );
1017
1089
  const dracoParser = new DracoParser(draco);
1018
1090
  try {
1019
1091
  return dracoParser.parseSync(arrayBuffer, options?.draco);
@@ -1023,6 +1095,6 @@
1023
1095
  }
1024
1096
 
1025
1097
  // src/workers/draco-worker.ts
1026
- createLoaderWorker(DracoLoader2);
1098
+ createLoaderWorker(DracoLoader);
1027
1099
  })();
1028
1100
  //# sourceMappingURL=draco-worker.js.map