@loaders.gl/scene 5.0.0-beta.1 → 5.0.0-beta.2
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.
- package/DRACO-README.md +15 -0
- package/README.md +7 -1
- package/THIRD-PARTY-NOTICES.md +4 -1
- package/dist/dist.dev.js +5708 -4937
- package/dist/dist.min.js +24 -24
- package/dist/draco/bundled.cjs +37 -0
- package/dist/draco/bundled.cjs.map +7 -0
- package/dist/draco/bundled.d.ts +6 -0
- package/dist/draco/bundled.d.ts.map +1 -0
- package/dist/draco/bundled.js +7 -0
- package/dist/draco/bundled.js.map +1 -0
- package/dist/draco/draco-format.cjs +41 -0
- package/dist/draco/draco-format.cjs.map +7 -0
- package/dist/draco/draco-format.d.ts +15 -0
- package/dist/draco/draco-format.d.ts.map +1 -0
- package/dist/draco/draco-format.js +18 -0
- package/dist/draco/draco-format.js.map +1 -0
- package/dist/draco/draco-javascript-loader-with-parser.cjs +44 -0
- package/dist/draco/draco-javascript-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco-javascript-loader-with-parser.d.ts +34 -0
- package/dist/draco/draco-javascript-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco-javascript-loader-with-parser.js +14 -0
- package/dist/draco/draco-javascript-loader-with-parser.js.map +1 -0
- package/dist/draco/draco-libraries.cjs +61 -0
- package/dist/draco/draco-libraries.cjs.map +7 -0
- package/dist/draco/draco-libraries.d.ts +28 -0
- package/dist/draco/draco-libraries.d.ts.map +1 -0
- package/dist/draco/draco-libraries.js +33 -0
- package/dist/draco/draco-libraries.js.map +1 -0
- package/dist/draco/draco-library-options.cjs +80 -0
- package/dist/draco/draco-library-options.cjs.map +7 -0
- package/dist/draco/draco-library-options.d.ts +16 -0
- package/dist/draco/draco-library-options.d.ts.map +1 -0
- package/dist/draco/draco-library-options.js +52 -0
- package/dist/draco/draco-library-options.js.map +1 -0
- package/dist/draco/draco-loader-options.cjs +37 -0
- package/dist/draco/draco-loader-options.cjs.map +7 -0
- package/dist/draco/draco-loader-options.d.ts +27 -0
- package/dist/draco/draco-loader-options.d.ts.map +1 -0
- package/dist/draco/draco-loader-options.js +12 -0
- package/dist/draco/draco-loader-options.js.map +1 -0
- package/dist/draco/draco-loader-types.cjs +88 -0
- package/dist/draco/draco-loader-types.cjs.map +7 -0
- package/dist/draco/draco-loader-types.d.ts +69 -0
- package/dist/draco/draco-loader-types.d.ts.map +1 -0
- package/dist/draco/draco-loader-types.js +54 -0
- package/dist/draco/draco-loader-types.js.map +1 -0
- package/dist/draco/draco-loader.cjs +51 -0
- package/dist/draco/draco-loader.cjs.map +7 -0
- package/dist/draco/draco-loader.d.ts +39 -0
- package/dist/draco/draco-loader.d.ts.map +1 -0
- package/dist/draco/draco-loader.js +22 -0
- package/dist/draco/draco-loader.js.map +1 -0
- package/dist/draco/draco-wasm-loader-with-parser.cjs +48 -0
- package/dist/draco/draco-wasm-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco-wasm-loader-with-parser.d.ts +34 -0
- package/dist/draco/draco-wasm-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco-wasm-loader-with-parser.js +14 -0
- package/dist/draco/draco-wasm-loader-with-parser.js.map +1 -0
- package/dist/draco/draco-writer.cjs +183 -0
- package/dist/draco/draco-writer.cjs.map +7 -0
- package/dist/draco/draco-writer.d.ts +97 -0
- package/dist/draco/draco-writer.d.ts.map +1 -0
- package/dist/draco/draco-writer.js +166 -0
- package/dist/draco/draco-writer.js.map +1 -0
- package/dist/draco/draco3d/draco3d-types.cjs +76 -0
- package/dist/draco/draco3d/draco3d-types.cjs.map +7 -0
- package/dist/draco/draco3d/draco3d-types.d.ts +303 -0
- package/dist/draco/draco3d/draco3d-types.d.ts.map +1 -0
- package/dist/draco/draco3d/draco3d-types.js +47 -0
- package/dist/draco/draco3d/draco3d-types.js.map +1 -0
- package/dist/draco/draco3d-loader-with-parser.cjs +50 -0
- package/dist/draco/draco3d-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco3d-loader-with-parser.d.ts +34 -0
- package/dist/draco/draco3d-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco3d-loader-with-parser.js +21 -0
- package/dist/draco/draco3d-loader-with-parser.js.map +1 -0
- package/dist/draco/index.cjs +54 -0
- package/dist/draco/index.cjs.map +7 -0
- package/dist/draco/index.d.ts +13 -0
- package/dist/draco/index.d.ts.map +1 -0
- package/dist/draco/index.js +13 -0
- package/dist/draco/index.js.map +1 -0
- package/dist/draco/lib/draco-builder.cjs +660 -0
- package/dist/draco/lib/draco-builder.cjs.map +7 -0
- package/dist/draco/lib/draco-builder.d.ts +175 -0
- package/dist/draco/lib/draco-builder.d.ts.map +1 -0
- package/dist/draco/lib/draco-builder.js +612 -0
- package/dist/draco/lib/draco-builder.js.map +1 -0
- package/dist/draco/lib/draco-library-loader.cjs +47 -0
- package/dist/draco/lib/draco-library-loader.cjs.map +7 -0
- package/dist/draco/lib/draco-library-loader.d.ts +5 -0
- package/dist/draco/lib/draco-library-loader.d.ts.map +1 -0
- package/dist/draco/lib/draco-library-loader.js +23 -0
- package/dist/draco/lib/draco-library-loader.js.map +1 -0
- package/dist/draco/lib/draco-module-loader.cjs +281 -0
- package/dist/draco/lib/draco-module-loader.cjs.map +7 -0
- package/dist/draco/lib/draco-module-loader.d.ts +25 -0
- package/dist/draco/lib/draco-module-loader.d.ts.map +1 -0
- package/dist/draco/lib/draco-module-loader.js +220 -0
- package/dist/draco/lib/draco-module-loader.js.map +1 -0
- package/dist/draco/lib/draco-parser.cjs +598 -0
- package/dist/draco/lib/draco-parser.cjs.map +7 -0
- package/dist/draco/lib/draco-parser.d.ts +142 -0
- package/dist/draco/lib/draco-parser.d.ts.map +1 -0
- package/dist/draco/lib/draco-parser.js +595 -0
- package/dist/draco/lib/draco-parser.js.map +1 -0
- package/dist/draco/lib/draco-types.cjs +19 -0
- package/dist/draco/lib/draco-types.cjs.map +7 -0
- package/dist/draco/lib/draco-types.d.ts +59 -0
- package/dist/draco/lib/draco-types.d.ts.map +1 -0
- package/dist/draco/lib/draco-types.js +5 -0
- package/dist/draco/lib/draco-types.js.map +1 -0
- package/dist/draco/lib/parse-draco.cjs +59 -0
- package/dist/draco/lib/parse-draco.cjs.map +7 -0
- package/dist/draco/lib/parse-draco.d.ts +22 -0
- package/dist/draco/lib/parse-draco.d.ts.map +1 -0
- package/dist/draco/lib/parse-draco.js +32 -0
- package/dist/draco/lib/parse-draco.js.map +1 -0
- package/dist/draco/lib/utils/get-draco-schema.cjs +74 -0
- package/dist/draco/lib/utils/get-draco-schema.cjs.map +7 -0
- package/dist/draco/lib/utils/get-draco-schema.d.ts +7 -0
- package/dist/draco/lib/utils/get-draco-schema.d.ts.map +1 -0
- package/dist/draco/lib/utils/get-draco-schema.js +45 -0
- package/dist/draco/lib/utils/get-draco-schema.js.map +1 -0
- package/dist/draco/lib/utils/version.cjs +31 -0
- package/dist/draco/lib/utils/version.cjs.map +7 -0
- package/dist/draco/lib/utils/version.d.ts +2 -0
- package/dist/draco/lib/utils/version.d.ts.map +1 -0
- package/dist/draco/lib/utils/version.js +8 -0
- package/dist/draco/lib/utils/version.js.map +1 -0
- package/dist/draco/unbundled.cjs +33 -0
- package/dist/draco/unbundled.cjs.map +7 -0
- package/dist/draco/unbundled.d.ts +3 -0
- package/dist/draco/unbundled.d.ts.map +1 -0
- package/dist/draco/unbundled.js +5 -0
- package/dist/draco/unbundled.js.map +1 -0
- package/dist/draco/workers/draco-worker-node.cjs +8 -0
- package/dist/draco/workers/draco-worker-node.cjs.map +7 -0
- package/dist/draco/workers/draco-worker-node.d.ts +2 -0
- package/dist/draco/workers/draco-worker-node.d.ts.map +1 -0
- package/dist/draco/workers/draco-worker-node.js +9 -0
- package/dist/draco/workers/draco-worker-node.js.map +1 -0
- package/dist/draco/workers/draco-worker.cjs +7 -0
- package/dist/draco/workers/draco-worker.cjs.map +7 -0
- package/dist/draco/workers/draco-worker.d.ts +2 -0
- package/dist/draco/workers/draco-worker.d.ts.map +1 -0
- package/dist/draco/workers/draco-worker.js +7 -0
- package/dist/draco/workers/draco-worker.js.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.cjs +11 -0
- package/dist/draco/workers/draco-writer-worker-node.cjs.map +7 -0
- package/dist/draco/workers/draco-writer-worker-node.d.cts +2 -0
- package/dist/draco/workers/draco-writer-worker-node.d.cts.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.d.ts +2 -0
- package/dist/draco/workers/draco-writer-worker-node.d.ts.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.js +9 -0
- package/dist/draco/workers/draco-writer-worker-node.js.map +1 -0
- package/dist/draco/workers/draco-writer-worker.cjs +10 -0
- package/dist/draco/workers/draco-writer-worker.cjs.map +7 -0
- package/dist/draco/workers/draco-writer-worker.d.ts +2 -0
- package/dist/draco/workers/draco-writer-worker.d.ts.map +1 -0
- package/dist/draco/workers/draco-writer-worker.js +7 -0
- package/dist/draco/workers/draco-writer-worker.js.map +1 -0
- package/dist/draco-javascript-loader.cjs +25 -0
- package/dist/draco-javascript-loader.cjs.map +7 -0
- package/dist/draco-javascript-loader.d.ts +2 -0
- package/dist/draco-javascript-loader.d.ts.map +1 -0
- package/dist/draco-javascript-loader.js +3 -0
- package/dist/draco-javascript-loader.js.map +1 -0
- package/dist/draco-library-options.cjs +36 -0
- package/dist/draco-library-options.cjs.map +7 -0
- package/dist/draco-library-options.d.ts +3 -0
- package/dist/draco-library-options.d.ts.map +1 -0
- package/dist/draco-library-options.js +4 -0
- package/dist/draco-library-options.js.map +1 -0
- package/dist/draco-loader-types.cjs +25 -0
- package/dist/draco-loader-types.cjs.map +7 -0
- package/dist/draco-loader-types.d.ts +2 -0
- package/dist/draco-loader-types.d.ts.map +1 -0
- package/dist/draco-loader-types.js +3 -0
- package/dist/draco-loader-types.js.map +1 -0
- package/dist/draco-loader.cjs +25 -0
- package/dist/draco-loader.cjs.map +7 -0
- package/dist/draco-loader.d.ts +2 -0
- package/dist/draco-loader.d.ts.map +1 -0
- package/dist/draco-loader.js +3 -0
- package/dist/draco-loader.js.map +1 -0
- package/dist/draco-wasm-loader.cjs +25 -0
- package/dist/draco-wasm-loader.cjs.map +7 -0
- package/dist/draco-wasm-loader.d.ts +2 -0
- package/dist/draco-wasm-loader.d.ts.map +1 -0
- package/dist/draco-wasm-loader.js +3 -0
- package/dist/draco-wasm-loader.js.map +1 -0
- package/dist/draco-worker-node.js +28279 -0
- package/dist/draco-worker-node.js.map +7 -0
- package/dist/draco-worker.js +18145 -0
- package/dist/draco-worker.js.map +7 -0
- package/dist/draco-writer-worker-node.cjs +27521 -0
- package/dist/draco-writer-worker-node.cjs.map +7 -0
- package/dist/draco-writer-worker.js +17339 -0
- package/dist/draco-writer-worker.js.map +7 -0
- package/dist/draco-writer.cjs +25 -0
- package/dist/draco-writer.cjs.map +7 -0
- package/dist/draco-writer.d.ts +2 -0
- package/dist/draco-writer.d.ts.map +1 -0
- package/dist/draco-writer.js +3 -0
- package/dist/draco-writer.js.map +1 -0
- package/dist/draco3d-loader.cjs +25 -0
- package/dist/draco3d-loader.cjs.map +7 -0
- package/dist/draco3d-loader.d.ts +2 -0
- package/dist/draco3d-loader.d.ts.map +1 -0
- package/dist/draco3d-loader.js +3 -0
- package/dist/draco3d-loader.js.map +1 -0
- package/dist/glb-loader-types.cjs +61 -0
- package/dist/glb-loader-types.cjs.map +7 -0
- package/dist/glb-loader-types.d.ts +2 -0
- package/dist/glb-loader-types.d.ts.map +1 -0
- package/dist/glb-loader-types.js +2 -0
- package/dist/glb-loader-types.js.map +1 -0
- package/dist/glb-loader.cjs +48 -0
- package/dist/glb-loader.cjs.map +7 -0
- package/dist/glb-loader.d.ts +2 -0
- package/dist/glb-loader.d.ts.map +1 -0
- package/dist/glb-loader.js +2 -0
- package/dist/glb-loader.js.map +1 -0
- package/dist/glb-writer.cjs +53 -0
- package/dist/glb-writer.cjs.map +7 -0
- package/dist/glb-writer.d.ts +2 -0
- package/dist/glb-writer.d.ts.map +1 -0
- package/dist/glb-writer.js +2 -0
- package/dist/glb-writer.js.map +1 -0
- package/dist/gltf/glb-loader-types.cjs +1 -1
- package/dist/gltf/glb-loader-types.cjs.map +2 -2
- package/dist/gltf/glb-loader-types.d.ts +2 -2
- package/dist/gltf/glb-loader-types.js +1 -1
- package/dist/gltf/glb-loader-types.js.map +1 -1
- package/dist/gltf/gltf-loader-types.cjs +1 -1
- package/dist/gltf/gltf-loader-types.cjs.map +2 -2
- package/dist/gltf/gltf-loader-types.d.ts +5 -5
- package/dist/gltf/gltf-loader-types.d.ts.map +1 -1
- package/dist/gltf/gltf-loader-types.js +1 -1
- package/dist/gltf/gltf-loader-types.js.map +1 -1
- package/dist/gltf/gltf-loader.cjs.map +1 -1
- package/dist/gltf/gltf-loader.d.ts +4 -4
- package/dist/gltf/gltf-loader.d.ts.map +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs +12 -2
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs.map +2 -2
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts.map +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.js +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.js.map +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs +2 -2
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs.map +2 -2
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/gltf/lib/parsers/parse-gltf.cjs +2 -2
- package/dist/gltf/lib/parsers/parse-gltf.cjs.map +3 -3
- package/dist/gltf/lib/parsers/parse-gltf.js +5 -5
- package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/gltf/lib/types/gltf-zod-schema.d.ts +1 -1
- package/dist/gltf/lib/utils/version.cjs +1 -1
- package/dist/gltf/lib/utils/version.js +1 -1
- package/dist/gltf-loader-types.cjs +73 -0
- package/dist/gltf-loader-types.cjs.map +7 -0
- package/dist/gltf-loader-types.d.ts +2 -0
- package/dist/gltf-loader-types.d.ts.map +1 -0
- package/dist/gltf-loader-types.js +2 -0
- package/dist/gltf-loader-types.js.map +1 -0
- package/dist/gltf-loader.cjs +48 -0
- package/dist/gltf-loader.cjs.map +7 -0
- package/dist/gltf-loader.d.ts +2 -0
- package/dist/gltf-loader.d.ts.map +1 -0
- package/dist/gltf-loader.js +2 -0
- package/dist/gltf-loader.js.map +1 -0
- package/dist/gltf-source.cjs +238 -0
- package/dist/gltf-source.cjs.map +7 -0
- package/dist/gltf-source.d.ts +2 -0
- package/dist/gltf-source.d.ts.map +1 -0
- package/dist/gltf-source.js +2 -0
- package/dist/gltf-source.js.map +1 -0
- package/dist/gltf-writer.cjs +69 -0
- package/dist/gltf-writer.cjs.map +7 -0
- package/dist/gltf-writer.d.ts +2 -0
- package/dist/gltf-writer.d.ts.map +1 -0
- package/dist/gltf-writer.js +2 -0
- package/dist/gltf-writer.js.map +1 -0
- package/dist/index.cjs +13 -0
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/libs/DRACO-LICENSE +252 -0
- package/dist/libs/README.md +20 -0
- package/dist/libs/draco_decoder.js +34 -0
- package/dist/libs/draco_decoder.mjs +37 -0
- package/dist/libs/draco_decoder.wasm +0 -0
- package/dist/libs/draco_decoder_gltf.wasm +0 -0
- package/dist/libs/draco_encoder.js +98 -0
- package/dist/libs/draco_encoder.mjs +101 -0
- package/dist/libs/draco_encoder.wasm +0 -0
- package/dist/libs/draco_wasm_wrapper.js +117 -0
- package/dist/libs/draco_wasm_wrapper.mjs +120 -0
- package/dist/libs/draco_wasm_wrapper_gltf.js +116 -0
- package/dist/libs/draco_wasm_wrapper_gltf.mjs +119 -0
- package/dist/mtl-loader-types.cjs +64 -0
- package/dist/mtl-loader-types.cjs.map +7 -0
- package/dist/mtl-loader-types.d.ts +2 -0
- package/dist/mtl-loader-types.d.ts.map +1 -0
- package/dist/mtl-loader-types.js +2 -0
- package/dist/mtl-loader-types.js.map +1 -0
- package/dist/mtl-loader.cjs +47 -0
- package/dist/mtl-loader.cjs.map +7 -0
- package/dist/mtl-loader.d.ts +2 -0
- package/dist/mtl-loader.d.ts.map +1 -0
- package/dist/mtl-loader.js +2 -0
- package/dist/mtl-loader.js.map +1 -0
- package/dist/obj/mtl-loader-types.cjs +2 -2
- package/dist/obj/mtl-loader-types.cjs.map +2 -2
- package/dist/obj/mtl-loader-types.d.ts +2 -2
- package/dist/obj/mtl-loader-types.js +2 -2
- package/dist/obj/mtl-loader-types.js.map +1 -1
- package/dist/obj/mtl-loader.cjs +1 -1
- package/dist/obj/mtl-loader.cjs.map +2 -2
- package/dist/obj/mtl-loader.js +1 -1
- package/dist/obj/mtl-loader.js.map +1 -1
- package/dist/obj/obj-loader-types.cjs +2 -2
- package/dist/obj/obj-loader-types.cjs.map +2 -2
- package/dist/obj/obj-loader-types.js +2 -2
- package/dist/obj/obj-loader-types.js.map +1 -1
- package/dist/obj/obj-writer.cjs +1 -1
- package/dist/obj/obj-writer.js +1 -1
- package/dist/obj-loader-types.cjs +71 -0
- package/dist/obj-loader-types.cjs.map +7 -0
- package/dist/obj-loader-types.d.ts +2 -0
- package/dist/obj-loader-types.d.ts.map +1 -0
- package/dist/obj-loader-types.js +2 -0
- package/dist/obj-loader-types.js.map +1 -0
- package/dist/obj-loader.cjs +163 -0
- package/dist/obj-loader.cjs.map +7 -0
- package/dist/obj-loader.d.ts +2 -0
- package/dist/obj-loader.d.ts.map +1 -0
- package/dist/obj-loader.js +2 -0
- package/dist/obj-loader.js.map +1 -0
- package/dist/obj-worker.js +204 -71
- package/dist/obj-writer.cjs +167 -0
- package/dist/obj-writer.cjs.map +7 -0
- package/dist/obj-writer.d.ts +2 -0
- package/dist/obj-writer.d.ts.map +1 -0
- package/dist/obj-writer.js +2 -0
- package/dist/obj-writer.js.map +1 -0
- package/dist/usd/usd-loader-types.cjs +2 -2
- package/dist/usd/usd-loader-types.cjs.map +2 -2
- package/dist/usd/usd-loader-types.js +2 -2
- package/dist/usd/usd-loader-types.js.map +1 -1
- package/dist/usd-loader-types.cjs +69 -0
- package/dist/usd-loader-types.cjs.map +7 -0
- package/dist/usd-loader-types.d.ts +2 -0
- package/dist/usd-loader-types.d.ts.map +1 -0
- package/dist/usd-loader-types.js +2 -0
- package/dist/usd-loader-types.js.map +1 -0
- package/dist/usd-loader.cjs +43 -0
- package/dist/usd-loader.cjs.map +7 -0
- package/dist/usd-loader.d.ts +2 -0
- package/dist/usd-loader.d.ts.map +1 -0
- package/dist/usd-loader.js +2 -0
- package/dist/usd-loader.js.map +1 -0
- package/package.json +130 -71
- package/src/draco/bundled.ts +10 -0
- package/src/draco/draco-format.ts +20 -0
- package/src/draco/draco-javascript-loader-with-parser.ts +26 -0
- package/src/draco/draco-libraries.ts +35 -0
- package/src/draco/draco-library-options.ts +76 -0
- package/src/draco/draco-loader-options.ts +33 -0
- package/src/draco/draco-loader-types.ts +78 -0
- package/src/draco/draco-loader.ts +45 -0
- package/src/draco/draco-wasm-loader-with-parser.ts +31 -0
- package/src/draco/draco-writer.ts +252 -0
- package/src/draco/draco3d/draco3d-types.ts +498 -0
- package/src/draco/draco3d-loader-with-parser.ts +34 -0
- package/src/draco/index.ts +46 -0
- package/src/draco/lib/draco-builder.ts +935 -0
- package/src/draco/lib/draco-library-loader.ts +38 -0
- package/src/draco/lib/draco-module-loader.ts +370 -0
- package/src/draco/lib/draco-parser.ts +776 -0
- package/src/draco/lib/draco-types.ts +72 -0
- package/src/draco/lib/parse-draco.ts +51 -0
- package/src/draco/lib/utils/get-draco-schema.ts +65 -0
- package/src/draco/lib/utils/version.ts +8 -0
- package/src/draco/libs/DRACO-LICENSE +252 -0
- package/src/draco/libs/README.md +20 -0
- package/src/draco/libs/draco_decoder.js +34 -0
- package/src/draco/libs/draco_decoder.wasm +0 -0
- package/src/draco/libs/draco_decoder_gltf.wasm +0 -0
- package/src/draco/libs/draco_encoder.js +98 -0
- package/src/draco/libs/draco_encoder.wasm +0 -0
- package/src/draco/libs/draco_wasm_wrapper.js +117 -0
- package/src/draco/libs/draco_wasm_wrapper_gltf.js +116 -0
- package/src/draco/unbundled.ts +6 -0
- package/src/draco/workers/draco-worker-node.ts +10 -0
- package/src/draco/workers/draco-worker.ts +8 -0
- package/src/draco/workers/draco-writer-worker-node.cjs +21 -0
- package/src/draco/workers/draco-writer-worker-node.ts +13 -0
- package/src/draco/workers/draco-writer-worker.ts +11 -0
- package/src/draco-javascript-loader.ts +2 -0
- package/src/draco-library-options.ts +6 -0
- package/src/draco-loader-types.ts +2 -0
- package/src/draco-loader.ts +2 -0
- package/src/draco-wasm-loader.ts +2 -0
- package/src/draco-writer.ts +2 -0
- package/src/draco3d-loader.ts +2 -0
- package/src/glb-loader-types.ts +1 -0
- package/src/glb-loader.ts +1 -0
- package/src/glb-writer.ts +1 -0
- package/src/gltf/glb-loader-types.ts +1 -1
- package/src/gltf/gltf-loader-types.ts +5 -5
- package/src/gltf/gltf-loader.ts +4 -4
- package/src/gltf/lib/encoders/encode-gltf-draco.ts +2 -2
- package/src/gltf/lib/extensions/KHR_draco_mesh_compression.ts +2 -1
- package/src/gltf/lib/parsers/parse-gltf.ts +5 -5
- package/src/gltf-loader-types.ts +1 -0
- package/src/gltf-loader.ts +1 -0
- package/src/gltf-source.ts +1 -0
- package/src/gltf-writer.ts +1 -0
- package/src/index.ts +5 -0
- package/src/mtl-loader-types.ts +1 -0
- package/src/mtl-loader.ts +1 -0
- package/src/obj/mtl-loader-types.ts +1 -1
- package/src/obj/mtl-loader.ts +1 -1
- package/src/obj/obj-loader-types.ts +1 -1
- package/src/obj-loader-types.ts +1 -0
- package/src/obj-loader.ts +1 -0
- package/src/obj-writer.ts +1 -0
- package/src/usd/usd-loader-types.ts +1 -1
- package/src/usd-loader-types.ts +1 -0
- package/src/usd-loader.ts +1 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
isBrowser,
|
|
5
|
+
isWorker,
|
|
6
|
+
loadLibrary as loadCoreLibrary,
|
|
7
|
+
type LoadLibraryOptions
|
|
8
|
+
} from '@loaders.gl/core/worker-utils';
|
|
9
|
+
|
|
10
|
+
export {isBrowser, type LoadLibraryOptions};
|
|
11
|
+
|
|
12
|
+
/** Resolves local Draco assets inside scene without changing core's format-neutral library paths. */
|
|
13
|
+
export async function loadLibrary(
|
|
14
|
+
libraryUrl: string,
|
|
15
|
+
moduleName: string | null = null,
|
|
16
|
+
options: LoadLibraryOptions = {},
|
|
17
|
+
libraryName: string | null = null,
|
|
18
|
+
moduleLibraryName: string | null = null
|
|
19
|
+
): Promise<unknown> {
|
|
20
|
+
if (
|
|
21
|
+
isBrowser &&
|
|
22
|
+
options.useLocalLibraries &&
|
|
23
|
+
!options.CDN &&
|
|
24
|
+
libraryName &&
|
|
25
|
+
options.modules?.[libraryName] === undefined
|
|
26
|
+
) {
|
|
27
|
+
const directory = isWorker ? './libs' : `modules/${moduleName}/dist/libs`;
|
|
28
|
+
options = {
|
|
29
|
+
...options,
|
|
30
|
+
modules: {
|
|
31
|
+
[libraryName]: `${directory}/${libraryName}`,
|
|
32
|
+
...(moduleLibraryName ? {[moduleLibraryName]: `${directory}/${moduleLibraryName}`} : {}),
|
|
33
|
+
...options.modules
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return await loadCoreLibrary(libraryUrl, moduleName, options, libraryName, moduleLibraryName);
|
|
38
|
+
}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
// Dynamic DRACO module loading inspired by THREE.DRACOLoader
|
|
4
|
+
// https://github.com/mrdoob/three.js/blob/dev/examples/jsm/loaders/DRACOLoader.js
|
|
5
|
+
// by Don McCurdy / https://www.donmccurdy.com / MIT license
|
|
6
|
+
|
|
7
|
+
import {initializeWasmModule} from '@loaders.gl/core/loader-utils';
|
|
8
|
+
import {isBrowser, loadLibrary, type LoadLibraryOptions} from './draco-library-loader';
|
|
9
|
+
import type {Draco3D} from '../draco3d/draco3d-types';
|
|
10
|
+
|
|
11
|
+
import {DRACO_EXTERNAL_LIBRARIES, DRACO_EXTERNAL_LIBRARY_URLS} from '../draco-libraries';
|
|
12
|
+
export {DRACO_EXTERNAL_LIBRARIES, DRACO_EXTERNAL_LIBRARY_URLS} from '../draco-libraries';
|
|
13
|
+
|
|
14
|
+
/** Initialized Draco module returned to the parser or builder. */
|
|
15
|
+
export type LoadedDracoModule = {draco: Draco3D};
|
|
16
|
+
|
|
17
|
+
/** Draco decoder build selected for general data or glTF-compatible bitstreams. */
|
|
18
|
+
export type DracoDecoderProfile = 'full' | 'gltf';
|
|
19
|
+
|
|
20
|
+
/** Subset of the `draco3d` npm package accepted through `options.modules`. */
|
|
21
|
+
export type Draco3DModule = {
|
|
22
|
+
/** Creates an initialized decoder module. */
|
|
23
|
+
createDecoderModule?: (options?: Record<string, unknown>) => Promise<Draco3D>;
|
|
24
|
+
/** Creates an initialized encoder module. */
|
|
25
|
+
createEncoderModule?: (options?: Record<string, unknown>) => Promise<Draco3D>;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
type DracoDecoderModule = Required<Pick<Draco3DModule, 'createDecoderModule'>>;
|
|
29
|
+
type DracoEncoderModule = Required<Pick<Draco3DModule, 'createEncoderModule'>>;
|
|
30
|
+
|
|
31
|
+
type DracoModuleInitializerOptions = {
|
|
32
|
+
/** Optional preloaded WASM bytes. */
|
|
33
|
+
wasmBinary?: ArrayBuffer;
|
|
34
|
+
/** Reports an initialized Emscripten module. */
|
|
35
|
+
onModuleLoaded?: (draco: Draco3D) => void;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
type DracoModuleInitializer = (
|
|
39
|
+
options: DracoModuleInitializerOptions
|
|
40
|
+
) => Promise<Draco3D> | undefined;
|
|
41
|
+
|
|
42
|
+
type DracoGlobal = typeof globalThis & {
|
|
43
|
+
DracoDecoderModule?: DracoModuleInitializer;
|
|
44
|
+
DracoEncoderModule?: DracoModuleInitializer;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const libraryDecoderPromises = new Map<string, Promise<LoadedDracoModule>>();
|
|
48
|
+
const libraryEncoderPromises = new Map<string, Promise<LoadedDracoModule>>();
|
|
49
|
+
const injectedDecoderPromises = new WeakMap<DracoDecoderModule, Promise<LoadedDracoModule>>();
|
|
50
|
+
const injectedEncoderPromises = new WeakMap<DracoEncoderModule, Promise<LoadedDracoModule>>();
|
|
51
|
+
|
|
52
|
+
/** Loads a Draco decoder from either an injected `draco3d` package or external libraries. */
|
|
53
|
+
export async function loadDracoDecoderModule(
|
|
54
|
+
options: LoadLibraryOptions = {},
|
|
55
|
+
type: 'wasm' | 'js',
|
|
56
|
+
profile: DracoDecoderProfile = 'full'
|
|
57
|
+
): Promise<LoadedDracoModule> {
|
|
58
|
+
const draco3DModule = getInjectedDraco3DModule(options);
|
|
59
|
+
if (draco3DModule) {
|
|
60
|
+
return await loadDracoDecoderModuleFromDraco3D(draco3DModule);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return await loadDracoDecoderModuleFromLibrary(
|
|
64
|
+
options,
|
|
65
|
+
type === 'js' ? 'javascript' : type,
|
|
66
|
+
profile
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Loads a Draco decoder from external WASM or JavaScript fallback libraries. */
|
|
71
|
+
export async function loadDracoDecoderModuleFromLibrary(
|
|
72
|
+
options: LoadLibraryOptions = {},
|
|
73
|
+
type: 'wasm' | 'javascript',
|
|
74
|
+
profile: DracoDecoderProfile = 'full'
|
|
75
|
+
): Promise<LoadedDracoModule> {
|
|
76
|
+
const cacheKey = getLibraryCacheKey(`${type}:${profile}`, options);
|
|
77
|
+
let decoderPromise = libraryDecoderPromises.get(cacheKey);
|
|
78
|
+
if (!decoderPromise) {
|
|
79
|
+
decoderPromise = loadDracoDecoderWithFallback(options, type, profile);
|
|
80
|
+
libraryDecoderPromises.set(cacheKey, decoderPromise);
|
|
81
|
+
}
|
|
82
|
+
return await decoderPromise;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Loads a decoder from an injected `draco3d` npm package. */
|
|
86
|
+
export async function loadDracoDecoderModuleFromDraco3D(
|
|
87
|
+
draco3DModule: unknown
|
|
88
|
+
): Promise<LoadedDracoModule> {
|
|
89
|
+
const typedDraco3DModule = validateDracoDecoderModule(draco3DModule);
|
|
90
|
+
let decoderPromise = injectedDecoderPromises.get(typedDraco3DModule);
|
|
91
|
+
if (!decoderPromise) {
|
|
92
|
+
decoderPromise = initializeWasmModule(
|
|
93
|
+
() => typedDraco3DModule.createDecoderModule({}),
|
|
94
|
+
draco => ({draco})
|
|
95
|
+
);
|
|
96
|
+
injectedDecoderPromises.set(typedDraco3DModule, decoderPromise);
|
|
97
|
+
}
|
|
98
|
+
return await decoderPromise;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Loads a Draco encoder from an injected `draco3d` package or external WASM libraries. */
|
|
102
|
+
export async function loadDracoEncoderModule(
|
|
103
|
+
options: LoadLibraryOptions = {}
|
|
104
|
+
): Promise<LoadedDracoModule> {
|
|
105
|
+
const draco3DModule = getInjectedDraco3DModule(options);
|
|
106
|
+
if (draco3DModule) {
|
|
107
|
+
const typedDraco3DModule = validateDracoEncoderModule(draco3DModule);
|
|
108
|
+
let encoderPromise = injectedEncoderPromises.get(typedDraco3DModule);
|
|
109
|
+
if (!encoderPromise) {
|
|
110
|
+
encoderPromise = initializeWasmModule(
|
|
111
|
+
() => typedDraco3DModule.createEncoderModule({}),
|
|
112
|
+
draco => ({draco})
|
|
113
|
+
);
|
|
114
|
+
injectedEncoderPromises.set(typedDraco3DModule, encoderPromise);
|
|
115
|
+
}
|
|
116
|
+
return await encoderPromise;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const cacheKey = getLibraryCacheKey('encoder', options);
|
|
120
|
+
let encoderPromise = libraryEncoderPromises.get(cacheKey);
|
|
121
|
+
if (!encoderPromise) {
|
|
122
|
+
encoderPromise = loadDracoEncoder(options);
|
|
123
|
+
libraryEncoderPromises.set(cacheKey, encoderPromise);
|
|
124
|
+
}
|
|
125
|
+
return await encoderPromise;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Loads the selected decoder and retries with the JavaScript backend after a WASM failure. */
|
|
129
|
+
async function loadDracoDecoderWithFallback(
|
|
130
|
+
options: LoadLibraryOptions,
|
|
131
|
+
type: 'wasm' | 'javascript',
|
|
132
|
+
profile: DracoDecoderProfile
|
|
133
|
+
): Promise<LoadedDracoModule> {
|
|
134
|
+
try {
|
|
135
|
+
return await loadDracoDecoder(options, type, profile);
|
|
136
|
+
} catch (wasmError) {
|
|
137
|
+
if (type === 'javascript') {
|
|
138
|
+
throw wasmError;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
return await loadDracoDecoder(options, 'javascript', 'full');
|
|
142
|
+
} catch (javascriptError) {
|
|
143
|
+
throw new AggregateError(
|
|
144
|
+
[wasmError, javascriptError],
|
|
145
|
+
'Draco decoder could not load either the WebAssembly or JavaScript backend'
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let decoderInitializationQueue = Promise.resolve();
|
|
152
|
+
|
|
153
|
+
/** Loads and initializes one external Draco decoder backend. */
|
|
154
|
+
async function loadDracoDecoder(
|
|
155
|
+
options: LoadLibraryOptions,
|
|
156
|
+
type: 'wasm' | 'javascript',
|
|
157
|
+
profile: DracoDecoderProfile
|
|
158
|
+
): Promise<LoadedDracoModule> {
|
|
159
|
+
const initialization = decoderInitializationQueue.then(() =>
|
|
160
|
+
loadDracoDecoderInternal(options, type, profile)
|
|
161
|
+
);
|
|
162
|
+
decoderInitializationQueue = initialization.then(
|
|
163
|
+
() => undefined,
|
|
164
|
+
() => undefined
|
|
165
|
+
);
|
|
166
|
+
return await initialization;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Performs decoder loading after preceding global initializers have completed. */
|
|
170
|
+
async function loadDracoDecoderInternal(
|
|
171
|
+
options: LoadLibraryOptions,
|
|
172
|
+
type: 'wasm' | 'javascript',
|
|
173
|
+
profile: DracoDecoderProfile
|
|
174
|
+
): Promise<LoadedDracoModule> {
|
|
175
|
+
if (type === 'javascript') {
|
|
176
|
+
let decoderLibrary: unknown;
|
|
177
|
+
try {
|
|
178
|
+
decoderLibrary = await loadLibrary(
|
|
179
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
|
|
180
|
+
'scene',
|
|
181
|
+
options,
|
|
182
|
+
DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER,
|
|
183
|
+
'draco_decoder.mjs'
|
|
184
|
+
);
|
|
185
|
+
} catch (error) {
|
|
186
|
+
if (isBrowser || options.useLocalLibraries) {
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
decoderLibrary = await loadLibrary(
|
|
190
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
|
|
191
|
+
'scene',
|
|
192
|
+
{...options, useLocalLibraries: true},
|
|
193
|
+
DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER,
|
|
194
|
+
'draco_decoder.mjs'
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
const decoderInitializer =
|
|
198
|
+
getLibraryExport(decoderLibrary, 'DracoDecoderModule') ||
|
|
199
|
+
(globalThis as DracoGlobal).DracoDecoderModule;
|
|
200
|
+
return await initializeDracoModule(decoderInitializer);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
let decoderLibrary: unknown;
|
|
204
|
+
let wasmBinary: ArrayBuffer;
|
|
205
|
+
try {
|
|
206
|
+
[decoderLibrary, wasmBinary] = await loadDecoderWasmAssets(options, profile);
|
|
207
|
+
} catch (error) {
|
|
208
|
+
if (isBrowser || options.useLocalLibraries) {
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
[decoderLibrary, wasmBinary] = await loadDecoderWasmAssets(
|
|
212
|
+
{...options, useLocalLibraries: true},
|
|
213
|
+
profile
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
const decoderInitializer =
|
|
217
|
+
getLibraryExport(decoderLibrary, 'DracoDecoderModule') ||
|
|
218
|
+
(globalThis as DracoGlobal).DracoDecoderModule;
|
|
219
|
+
return await initializeDracoModule(decoderInitializer, wasmBinary);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** Loads the decoder wrapper and WASM binary concurrently. */
|
|
223
|
+
async function loadDecoderWasmAssets(
|
|
224
|
+
options: LoadLibraryOptions,
|
|
225
|
+
profile: DracoDecoderProfile
|
|
226
|
+
): Promise<[unknown, ArrayBuffer]> {
|
|
227
|
+
const decoderLibrary =
|
|
228
|
+
profile === 'gltf' ? DRACO_EXTERNAL_LIBRARIES.GLTF_DECODER : DRACO_EXTERNAL_LIBRARIES.DECODER;
|
|
229
|
+
const decoderWasm =
|
|
230
|
+
profile === 'gltf'
|
|
231
|
+
? DRACO_EXTERNAL_LIBRARIES.GLTF_DECODER_WASM
|
|
232
|
+
: DRACO_EXTERNAL_LIBRARIES.DECODER_WASM;
|
|
233
|
+
return await Promise.all([
|
|
234
|
+
loadLibrary(
|
|
235
|
+
DRACO_EXTERNAL_LIBRARY_URLS[decoderLibrary],
|
|
236
|
+
'scene',
|
|
237
|
+
options,
|
|
238
|
+
decoderLibrary,
|
|
239
|
+
profile === 'gltf' ? 'draco_wasm_wrapper_gltf.mjs' : 'draco_wasm_wrapper.mjs'
|
|
240
|
+
),
|
|
241
|
+
loadLibrary(
|
|
242
|
+
DRACO_EXTERNAL_LIBRARY_URLS[decoderWasm],
|
|
243
|
+
'scene',
|
|
244
|
+
options,
|
|
245
|
+
decoderWasm
|
|
246
|
+
) as Promise<ArrayBuffer>
|
|
247
|
+
]);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** Loads and initializes the external Draco WASM encoder. */
|
|
251
|
+
async function loadDracoEncoder(options: LoadLibraryOptions): Promise<LoadedDracoModule> {
|
|
252
|
+
let encoderLibrary: unknown;
|
|
253
|
+
let wasmBinary: ArrayBuffer;
|
|
254
|
+
try {
|
|
255
|
+
[encoderLibrary, wasmBinary] = await loadEncoderWasmAssets(options);
|
|
256
|
+
} catch (error) {
|
|
257
|
+
if (isBrowser || options.useLocalLibraries) {
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
[encoderLibrary, wasmBinary] = await loadEncoderWasmAssets({
|
|
261
|
+
...options,
|
|
262
|
+
useLocalLibraries: true
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
const encoderInitializer =
|
|
266
|
+
getLibraryExport(encoderLibrary, 'DracoEncoderModule') ||
|
|
267
|
+
(globalThis as DracoGlobal).DracoEncoderModule;
|
|
268
|
+
return await initializeDracoModule(encoderInitializer, wasmBinary);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/** Loads the encoder wrapper and WASM binary concurrently. */
|
|
272
|
+
async function loadEncoderWasmAssets(options: LoadLibraryOptions): Promise<[unknown, ArrayBuffer]> {
|
|
273
|
+
return await Promise.all([
|
|
274
|
+
loadLibrary(
|
|
275
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.ENCODER],
|
|
276
|
+
'scene',
|
|
277
|
+
options,
|
|
278
|
+
DRACO_EXTERNAL_LIBRARIES.ENCODER,
|
|
279
|
+
'draco_encoder.mjs'
|
|
280
|
+
),
|
|
281
|
+
loadLibrary(
|
|
282
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.ENCODER_WASM],
|
|
283
|
+
'scene',
|
|
284
|
+
options,
|
|
285
|
+
DRACO_EXTERNAL_LIBRARIES.ENCODER_WASM
|
|
286
|
+
) as Promise<ArrayBuffer>
|
|
287
|
+
]);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** Initializes an Emscripten Draco factory that may use callbacks, promises, or both. */
|
|
291
|
+
function initializeDracoModule(
|
|
292
|
+
initializer: DracoModuleInitializer | undefined,
|
|
293
|
+
wasmBinary?: ArrayBuffer
|
|
294
|
+
): Promise<LoadedDracoModule> {
|
|
295
|
+
if (typeof initializer !== 'function') {
|
|
296
|
+
throw new Error('Draco module initializer could not be loaded');
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return initializeWasmModule(
|
|
300
|
+
onInitialized =>
|
|
301
|
+
initializer({
|
|
302
|
+
...(wasmBinary ? {wasmBinary} : {}),
|
|
303
|
+
onModuleLoaded: onInitialized
|
|
304
|
+
}),
|
|
305
|
+
(draco: Draco3D) => ({draco})
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** Resolves a Draco initializer from a direct, named, or default library export. */
|
|
310
|
+
function getLibraryExport(
|
|
311
|
+
library: unknown,
|
|
312
|
+
exportName: 'DracoDecoderModule' | 'DracoEncoderModule'
|
|
313
|
+
): DracoModuleInitializer | undefined {
|
|
314
|
+
if (typeof library === 'function') {
|
|
315
|
+
return library as DracoModuleInitializer;
|
|
316
|
+
}
|
|
317
|
+
if (library && typeof library === 'object') {
|
|
318
|
+
const exports = library as Record<string, unknown>;
|
|
319
|
+
const exportedInitializer = exports[exportName] || exports.default;
|
|
320
|
+
return typeof exportedInitializer === 'function'
|
|
321
|
+
? (exportedInitializer as DracoModuleInitializer)
|
|
322
|
+
: undefined;
|
|
323
|
+
}
|
|
324
|
+
return undefined;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/** Returns and validates the optional injected `draco3d` package reference. */
|
|
328
|
+
function getInjectedDraco3DModule(options: LoadLibraryOptions): Draco3DModule | undefined {
|
|
329
|
+
const module = options.modules?.draco3d;
|
|
330
|
+
if (!module) {
|
|
331
|
+
return undefined;
|
|
332
|
+
}
|
|
333
|
+
if (typeof module !== 'object' && typeof module !== 'function') {
|
|
334
|
+
throw new Error('Invalid draco3d module');
|
|
335
|
+
}
|
|
336
|
+
return module as Draco3DModule;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/** Narrows an injected package to the decoder factory interface. */
|
|
340
|
+
function validateDracoDecoderModule(module: unknown): DracoDecoderModule {
|
|
341
|
+
const typedModule = module as Draco3DModule;
|
|
342
|
+
if (typeof typedModule?.createDecoderModule !== 'function') {
|
|
343
|
+
throw new Error('Invalid draco3d decoder module');
|
|
344
|
+
}
|
|
345
|
+
return typedModule as DracoDecoderModule;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/** Narrows an injected package to the encoder factory interface. */
|
|
349
|
+
function validateDracoEncoderModule(module: unknown): DracoEncoderModule {
|
|
350
|
+
const typedModule = module as Draco3DModule;
|
|
351
|
+
if (typeof typedModule?.createEncoderModule !== 'function') {
|
|
352
|
+
throw new Error('Invalid draco3d encoder module');
|
|
353
|
+
}
|
|
354
|
+
return typedModule as DracoEncoderModule;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/** Builds a stable cache key from the backend and external-library configuration. */
|
|
358
|
+
function getLibraryCacheKey(type: string, options: LoadLibraryOptions): string {
|
|
359
|
+
const libraryOverrides = Object.entries(options.modules || {})
|
|
360
|
+
.filter(([name]) => name !== 'draco3d')
|
|
361
|
+
.map(([name, value]) => `${name}:${String(value)}`)
|
|
362
|
+
.sort()
|
|
363
|
+
.join('|');
|
|
364
|
+
return [
|
|
365
|
+
type,
|
|
366
|
+
options.useLocalLibraries ? 'local' : 'remote',
|
|
367
|
+
options.CDN || '',
|
|
368
|
+
libraryOverrides
|
|
369
|
+
].join('|');
|
|
370
|
+
}
|