@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.
Files changed (437) hide show
  1. package/DRACO-README.md +15 -0
  2. package/README.md +7 -1
  3. package/THIRD-PARTY-NOTICES.md +4 -1
  4. package/dist/dist.dev.js +5708 -4937
  5. package/dist/dist.min.js +24 -24
  6. package/dist/draco/bundled.cjs +37 -0
  7. package/dist/draco/bundled.cjs.map +7 -0
  8. package/dist/draco/bundled.d.ts +6 -0
  9. package/dist/draco/bundled.d.ts.map +1 -0
  10. package/dist/draco/bundled.js +7 -0
  11. package/dist/draco/bundled.js.map +1 -0
  12. package/dist/draco/draco-format.cjs +41 -0
  13. package/dist/draco/draco-format.cjs.map +7 -0
  14. package/dist/draco/draco-format.d.ts +15 -0
  15. package/dist/draco/draco-format.d.ts.map +1 -0
  16. package/dist/draco/draco-format.js +18 -0
  17. package/dist/draco/draco-format.js.map +1 -0
  18. package/dist/draco/draco-javascript-loader-with-parser.cjs +44 -0
  19. package/dist/draco/draco-javascript-loader-with-parser.cjs.map +7 -0
  20. package/dist/draco/draco-javascript-loader-with-parser.d.ts +34 -0
  21. package/dist/draco/draco-javascript-loader-with-parser.d.ts.map +1 -0
  22. package/dist/draco/draco-javascript-loader-with-parser.js +14 -0
  23. package/dist/draco/draco-javascript-loader-with-parser.js.map +1 -0
  24. package/dist/draco/draco-libraries.cjs +61 -0
  25. package/dist/draco/draco-libraries.cjs.map +7 -0
  26. package/dist/draco/draco-libraries.d.ts +28 -0
  27. package/dist/draco/draco-libraries.d.ts.map +1 -0
  28. package/dist/draco/draco-libraries.js +33 -0
  29. package/dist/draco/draco-libraries.js.map +1 -0
  30. package/dist/draco/draco-library-options.cjs +80 -0
  31. package/dist/draco/draco-library-options.cjs.map +7 -0
  32. package/dist/draco/draco-library-options.d.ts +16 -0
  33. package/dist/draco/draco-library-options.d.ts.map +1 -0
  34. package/dist/draco/draco-library-options.js +52 -0
  35. package/dist/draco/draco-library-options.js.map +1 -0
  36. package/dist/draco/draco-loader-options.cjs +37 -0
  37. package/dist/draco/draco-loader-options.cjs.map +7 -0
  38. package/dist/draco/draco-loader-options.d.ts +27 -0
  39. package/dist/draco/draco-loader-options.d.ts.map +1 -0
  40. package/dist/draco/draco-loader-options.js +12 -0
  41. package/dist/draco/draco-loader-options.js.map +1 -0
  42. package/dist/draco/draco-loader-types.cjs +88 -0
  43. package/dist/draco/draco-loader-types.cjs.map +7 -0
  44. package/dist/draco/draco-loader-types.d.ts +69 -0
  45. package/dist/draco/draco-loader-types.d.ts.map +1 -0
  46. package/dist/draco/draco-loader-types.js +54 -0
  47. package/dist/draco/draco-loader-types.js.map +1 -0
  48. package/dist/draco/draco-loader.cjs +51 -0
  49. package/dist/draco/draco-loader.cjs.map +7 -0
  50. package/dist/draco/draco-loader.d.ts +39 -0
  51. package/dist/draco/draco-loader.d.ts.map +1 -0
  52. package/dist/draco/draco-loader.js +22 -0
  53. package/dist/draco/draco-loader.js.map +1 -0
  54. package/dist/draco/draco-wasm-loader-with-parser.cjs +48 -0
  55. package/dist/draco/draco-wasm-loader-with-parser.cjs.map +7 -0
  56. package/dist/draco/draco-wasm-loader-with-parser.d.ts +34 -0
  57. package/dist/draco/draco-wasm-loader-with-parser.d.ts.map +1 -0
  58. package/dist/draco/draco-wasm-loader-with-parser.js +14 -0
  59. package/dist/draco/draco-wasm-loader-with-parser.js.map +1 -0
  60. package/dist/draco/draco-writer.cjs +183 -0
  61. package/dist/draco/draco-writer.cjs.map +7 -0
  62. package/dist/draco/draco-writer.d.ts +97 -0
  63. package/dist/draco/draco-writer.d.ts.map +1 -0
  64. package/dist/draco/draco-writer.js +166 -0
  65. package/dist/draco/draco-writer.js.map +1 -0
  66. package/dist/draco/draco3d/draco3d-types.cjs +76 -0
  67. package/dist/draco/draco3d/draco3d-types.cjs.map +7 -0
  68. package/dist/draco/draco3d/draco3d-types.d.ts +303 -0
  69. package/dist/draco/draco3d/draco3d-types.d.ts.map +1 -0
  70. package/dist/draco/draco3d/draco3d-types.js +47 -0
  71. package/dist/draco/draco3d/draco3d-types.js.map +1 -0
  72. package/dist/draco/draco3d-loader-with-parser.cjs +50 -0
  73. package/dist/draco/draco3d-loader-with-parser.cjs.map +7 -0
  74. package/dist/draco/draco3d-loader-with-parser.d.ts +34 -0
  75. package/dist/draco/draco3d-loader-with-parser.d.ts.map +1 -0
  76. package/dist/draco/draco3d-loader-with-parser.js +21 -0
  77. package/dist/draco/draco3d-loader-with-parser.js.map +1 -0
  78. package/dist/draco/index.cjs +54 -0
  79. package/dist/draco/index.cjs.map +7 -0
  80. package/dist/draco/index.d.ts +13 -0
  81. package/dist/draco/index.d.ts.map +1 -0
  82. package/dist/draco/index.js +13 -0
  83. package/dist/draco/index.js.map +1 -0
  84. package/dist/draco/lib/draco-builder.cjs +660 -0
  85. package/dist/draco/lib/draco-builder.cjs.map +7 -0
  86. package/dist/draco/lib/draco-builder.d.ts +175 -0
  87. package/dist/draco/lib/draco-builder.d.ts.map +1 -0
  88. package/dist/draco/lib/draco-builder.js +612 -0
  89. package/dist/draco/lib/draco-builder.js.map +1 -0
  90. package/dist/draco/lib/draco-library-loader.cjs +47 -0
  91. package/dist/draco/lib/draco-library-loader.cjs.map +7 -0
  92. package/dist/draco/lib/draco-library-loader.d.ts +5 -0
  93. package/dist/draco/lib/draco-library-loader.d.ts.map +1 -0
  94. package/dist/draco/lib/draco-library-loader.js +23 -0
  95. package/dist/draco/lib/draco-library-loader.js.map +1 -0
  96. package/dist/draco/lib/draco-module-loader.cjs +281 -0
  97. package/dist/draco/lib/draco-module-loader.cjs.map +7 -0
  98. package/dist/draco/lib/draco-module-loader.d.ts +25 -0
  99. package/dist/draco/lib/draco-module-loader.d.ts.map +1 -0
  100. package/dist/draco/lib/draco-module-loader.js +220 -0
  101. package/dist/draco/lib/draco-module-loader.js.map +1 -0
  102. package/dist/draco/lib/draco-parser.cjs +598 -0
  103. package/dist/draco/lib/draco-parser.cjs.map +7 -0
  104. package/dist/draco/lib/draco-parser.d.ts +142 -0
  105. package/dist/draco/lib/draco-parser.d.ts.map +1 -0
  106. package/dist/draco/lib/draco-parser.js +595 -0
  107. package/dist/draco/lib/draco-parser.js.map +1 -0
  108. package/dist/draco/lib/draco-types.cjs +19 -0
  109. package/dist/draco/lib/draco-types.cjs.map +7 -0
  110. package/dist/draco/lib/draco-types.d.ts +59 -0
  111. package/dist/draco/lib/draco-types.d.ts.map +1 -0
  112. package/dist/draco/lib/draco-types.js +5 -0
  113. package/dist/draco/lib/draco-types.js.map +1 -0
  114. package/dist/draco/lib/parse-draco.cjs +59 -0
  115. package/dist/draco/lib/parse-draco.cjs.map +7 -0
  116. package/dist/draco/lib/parse-draco.d.ts +22 -0
  117. package/dist/draco/lib/parse-draco.d.ts.map +1 -0
  118. package/dist/draco/lib/parse-draco.js +32 -0
  119. package/dist/draco/lib/parse-draco.js.map +1 -0
  120. package/dist/draco/lib/utils/get-draco-schema.cjs +74 -0
  121. package/dist/draco/lib/utils/get-draco-schema.cjs.map +7 -0
  122. package/dist/draco/lib/utils/get-draco-schema.d.ts +7 -0
  123. package/dist/draco/lib/utils/get-draco-schema.d.ts.map +1 -0
  124. package/dist/draco/lib/utils/get-draco-schema.js +45 -0
  125. package/dist/draco/lib/utils/get-draco-schema.js.map +1 -0
  126. package/dist/draco/lib/utils/version.cjs +31 -0
  127. package/dist/draco/lib/utils/version.cjs.map +7 -0
  128. package/dist/draco/lib/utils/version.d.ts +2 -0
  129. package/dist/draco/lib/utils/version.d.ts.map +1 -0
  130. package/dist/draco/lib/utils/version.js +8 -0
  131. package/dist/draco/lib/utils/version.js.map +1 -0
  132. package/dist/draco/unbundled.cjs +33 -0
  133. package/dist/draco/unbundled.cjs.map +7 -0
  134. package/dist/draco/unbundled.d.ts +3 -0
  135. package/dist/draco/unbundled.d.ts.map +1 -0
  136. package/dist/draco/unbundled.js +5 -0
  137. package/dist/draco/unbundled.js.map +1 -0
  138. package/dist/draco/workers/draco-worker-node.cjs +8 -0
  139. package/dist/draco/workers/draco-worker-node.cjs.map +7 -0
  140. package/dist/draco/workers/draco-worker-node.d.ts +2 -0
  141. package/dist/draco/workers/draco-worker-node.d.ts.map +1 -0
  142. package/dist/draco/workers/draco-worker-node.js +9 -0
  143. package/dist/draco/workers/draco-worker-node.js.map +1 -0
  144. package/dist/draco/workers/draco-worker.cjs +7 -0
  145. package/dist/draco/workers/draco-worker.cjs.map +7 -0
  146. package/dist/draco/workers/draco-worker.d.ts +2 -0
  147. package/dist/draco/workers/draco-worker.d.ts.map +1 -0
  148. package/dist/draco/workers/draco-worker.js +7 -0
  149. package/dist/draco/workers/draco-worker.js.map +1 -0
  150. package/dist/draco/workers/draco-writer-worker-node.cjs +11 -0
  151. package/dist/draco/workers/draco-writer-worker-node.cjs.map +7 -0
  152. package/dist/draco/workers/draco-writer-worker-node.d.cts +2 -0
  153. package/dist/draco/workers/draco-writer-worker-node.d.cts.map +1 -0
  154. package/dist/draco/workers/draco-writer-worker-node.d.ts +2 -0
  155. package/dist/draco/workers/draco-writer-worker-node.d.ts.map +1 -0
  156. package/dist/draco/workers/draco-writer-worker-node.js +9 -0
  157. package/dist/draco/workers/draco-writer-worker-node.js.map +1 -0
  158. package/dist/draco/workers/draco-writer-worker.cjs +10 -0
  159. package/dist/draco/workers/draco-writer-worker.cjs.map +7 -0
  160. package/dist/draco/workers/draco-writer-worker.d.ts +2 -0
  161. package/dist/draco/workers/draco-writer-worker.d.ts.map +1 -0
  162. package/dist/draco/workers/draco-writer-worker.js +7 -0
  163. package/dist/draco/workers/draco-writer-worker.js.map +1 -0
  164. package/dist/draco-javascript-loader.cjs +25 -0
  165. package/dist/draco-javascript-loader.cjs.map +7 -0
  166. package/dist/draco-javascript-loader.d.ts +2 -0
  167. package/dist/draco-javascript-loader.d.ts.map +1 -0
  168. package/dist/draco-javascript-loader.js +3 -0
  169. package/dist/draco-javascript-loader.js.map +1 -0
  170. package/dist/draco-library-options.cjs +36 -0
  171. package/dist/draco-library-options.cjs.map +7 -0
  172. package/dist/draco-library-options.d.ts +3 -0
  173. package/dist/draco-library-options.d.ts.map +1 -0
  174. package/dist/draco-library-options.js +4 -0
  175. package/dist/draco-library-options.js.map +1 -0
  176. package/dist/draco-loader-types.cjs +25 -0
  177. package/dist/draco-loader-types.cjs.map +7 -0
  178. package/dist/draco-loader-types.d.ts +2 -0
  179. package/dist/draco-loader-types.d.ts.map +1 -0
  180. package/dist/draco-loader-types.js +3 -0
  181. package/dist/draco-loader-types.js.map +1 -0
  182. package/dist/draco-loader.cjs +25 -0
  183. package/dist/draco-loader.cjs.map +7 -0
  184. package/dist/draco-loader.d.ts +2 -0
  185. package/dist/draco-loader.d.ts.map +1 -0
  186. package/dist/draco-loader.js +3 -0
  187. package/dist/draco-loader.js.map +1 -0
  188. package/dist/draco-wasm-loader.cjs +25 -0
  189. package/dist/draco-wasm-loader.cjs.map +7 -0
  190. package/dist/draco-wasm-loader.d.ts +2 -0
  191. package/dist/draco-wasm-loader.d.ts.map +1 -0
  192. package/dist/draco-wasm-loader.js +3 -0
  193. package/dist/draco-wasm-loader.js.map +1 -0
  194. package/dist/draco-worker-node.js +28279 -0
  195. package/dist/draco-worker-node.js.map +7 -0
  196. package/dist/draco-worker.js +18145 -0
  197. package/dist/draco-worker.js.map +7 -0
  198. package/dist/draco-writer-worker-node.cjs +27521 -0
  199. package/dist/draco-writer-worker-node.cjs.map +7 -0
  200. package/dist/draco-writer-worker.js +17339 -0
  201. package/dist/draco-writer-worker.js.map +7 -0
  202. package/dist/draco-writer.cjs +25 -0
  203. package/dist/draco-writer.cjs.map +7 -0
  204. package/dist/draco-writer.d.ts +2 -0
  205. package/dist/draco-writer.d.ts.map +1 -0
  206. package/dist/draco-writer.js +3 -0
  207. package/dist/draco-writer.js.map +1 -0
  208. package/dist/draco3d-loader.cjs +25 -0
  209. package/dist/draco3d-loader.cjs.map +7 -0
  210. package/dist/draco3d-loader.d.ts +2 -0
  211. package/dist/draco3d-loader.d.ts.map +1 -0
  212. package/dist/draco3d-loader.js +3 -0
  213. package/dist/draco3d-loader.js.map +1 -0
  214. package/dist/glb-loader-types.cjs +61 -0
  215. package/dist/glb-loader-types.cjs.map +7 -0
  216. package/dist/glb-loader-types.d.ts +2 -0
  217. package/dist/glb-loader-types.d.ts.map +1 -0
  218. package/dist/glb-loader-types.js +2 -0
  219. package/dist/glb-loader-types.js.map +1 -0
  220. package/dist/glb-loader.cjs +48 -0
  221. package/dist/glb-loader.cjs.map +7 -0
  222. package/dist/glb-loader.d.ts +2 -0
  223. package/dist/glb-loader.d.ts.map +1 -0
  224. package/dist/glb-loader.js +2 -0
  225. package/dist/glb-loader.js.map +1 -0
  226. package/dist/glb-writer.cjs +53 -0
  227. package/dist/glb-writer.cjs.map +7 -0
  228. package/dist/glb-writer.d.ts +2 -0
  229. package/dist/glb-writer.d.ts.map +1 -0
  230. package/dist/glb-writer.js +2 -0
  231. package/dist/glb-writer.js.map +1 -0
  232. package/dist/gltf/glb-loader-types.cjs +1 -1
  233. package/dist/gltf/glb-loader-types.cjs.map +2 -2
  234. package/dist/gltf/glb-loader-types.d.ts +2 -2
  235. package/dist/gltf/glb-loader-types.js +1 -1
  236. package/dist/gltf/glb-loader-types.js.map +1 -1
  237. package/dist/gltf/gltf-loader-types.cjs +1 -1
  238. package/dist/gltf/gltf-loader-types.cjs.map +2 -2
  239. package/dist/gltf/gltf-loader-types.d.ts +5 -5
  240. package/dist/gltf/gltf-loader-types.d.ts.map +1 -1
  241. package/dist/gltf/gltf-loader-types.js +1 -1
  242. package/dist/gltf/gltf-loader-types.js.map +1 -1
  243. package/dist/gltf/gltf-loader.cjs.map +1 -1
  244. package/dist/gltf/gltf-loader.d.ts +4 -4
  245. package/dist/gltf/gltf-loader.d.ts.map +1 -1
  246. package/dist/gltf/lib/encoders/encode-gltf-draco.cjs +12 -2
  247. package/dist/gltf/lib/encoders/encode-gltf-draco.cjs.map +2 -2
  248. package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts +1 -1
  249. package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts.map +1 -1
  250. package/dist/gltf/lib/encoders/encode-gltf-draco.js +1 -1
  251. package/dist/gltf/lib/encoders/encode-gltf-draco.js.map +1 -1
  252. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs +2 -2
  253. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs.map +2 -2
  254. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
  255. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js +1 -1
  256. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  257. package/dist/gltf/lib/parsers/parse-gltf.cjs +2 -2
  258. package/dist/gltf/lib/parsers/parse-gltf.cjs.map +3 -3
  259. package/dist/gltf/lib/parsers/parse-gltf.js +5 -5
  260. package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -1
  261. package/dist/gltf/lib/types/gltf-zod-schema.d.ts +1 -1
  262. package/dist/gltf/lib/utils/version.cjs +1 -1
  263. package/dist/gltf/lib/utils/version.js +1 -1
  264. package/dist/gltf-loader-types.cjs +73 -0
  265. package/dist/gltf-loader-types.cjs.map +7 -0
  266. package/dist/gltf-loader-types.d.ts +2 -0
  267. package/dist/gltf-loader-types.d.ts.map +1 -0
  268. package/dist/gltf-loader-types.js +2 -0
  269. package/dist/gltf-loader-types.js.map +1 -0
  270. package/dist/gltf-loader.cjs +48 -0
  271. package/dist/gltf-loader.cjs.map +7 -0
  272. package/dist/gltf-loader.d.ts +2 -0
  273. package/dist/gltf-loader.d.ts.map +1 -0
  274. package/dist/gltf-loader.js +2 -0
  275. package/dist/gltf-loader.js.map +1 -0
  276. package/dist/gltf-source.cjs +238 -0
  277. package/dist/gltf-source.cjs.map +7 -0
  278. package/dist/gltf-source.d.ts +2 -0
  279. package/dist/gltf-source.d.ts.map +1 -0
  280. package/dist/gltf-source.js +2 -0
  281. package/dist/gltf-source.js.map +1 -0
  282. package/dist/gltf-writer.cjs +69 -0
  283. package/dist/gltf-writer.cjs.map +7 -0
  284. package/dist/gltf-writer.d.ts +2 -0
  285. package/dist/gltf-writer.d.ts.map +1 -0
  286. package/dist/gltf-writer.js +2 -0
  287. package/dist/gltf-writer.js.map +1 -0
  288. package/dist/index.cjs +13 -0
  289. package/dist/index.cjs.map +2 -2
  290. package/dist/index.d.ts +4 -0
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +3 -0
  293. package/dist/index.js.map +1 -1
  294. package/dist/libs/DRACO-LICENSE +252 -0
  295. package/dist/libs/README.md +20 -0
  296. package/dist/libs/draco_decoder.js +34 -0
  297. package/dist/libs/draco_decoder.mjs +37 -0
  298. package/dist/libs/draco_decoder.wasm +0 -0
  299. package/dist/libs/draco_decoder_gltf.wasm +0 -0
  300. package/dist/libs/draco_encoder.js +98 -0
  301. package/dist/libs/draco_encoder.mjs +101 -0
  302. package/dist/libs/draco_encoder.wasm +0 -0
  303. package/dist/libs/draco_wasm_wrapper.js +117 -0
  304. package/dist/libs/draco_wasm_wrapper.mjs +120 -0
  305. package/dist/libs/draco_wasm_wrapper_gltf.js +116 -0
  306. package/dist/libs/draco_wasm_wrapper_gltf.mjs +119 -0
  307. package/dist/mtl-loader-types.cjs +64 -0
  308. package/dist/mtl-loader-types.cjs.map +7 -0
  309. package/dist/mtl-loader-types.d.ts +2 -0
  310. package/dist/mtl-loader-types.d.ts.map +1 -0
  311. package/dist/mtl-loader-types.js +2 -0
  312. package/dist/mtl-loader-types.js.map +1 -0
  313. package/dist/mtl-loader.cjs +47 -0
  314. package/dist/mtl-loader.cjs.map +7 -0
  315. package/dist/mtl-loader.d.ts +2 -0
  316. package/dist/mtl-loader.d.ts.map +1 -0
  317. package/dist/mtl-loader.js +2 -0
  318. package/dist/mtl-loader.js.map +1 -0
  319. package/dist/obj/mtl-loader-types.cjs +2 -2
  320. package/dist/obj/mtl-loader-types.cjs.map +2 -2
  321. package/dist/obj/mtl-loader-types.d.ts +2 -2
  322. package/dist/obj/mtl-loader-types.js +2 -2
  323. package/dist/obj/mtl-loader-types.js.map +1 -1
  324. package/dist/obj/mtl-loader.cjs +1 -1
  325. package/dist/obj/mtl-loader.cjs.map +2 -2
  326. package/dist/obj/mtl-loader.js +1 -1
  327. package/dist/obj/mtl-loader.js.map +1 -1
  328. package/dist/obj/obj-loader-types.cjs +2 -2
  329. package/dist/obj/obj-loader-types.cjs.map +2 -2
  330. package/dist/obj/obj-loader-types.js +2 -2
  331. package/dist/obj/obj-loader-types.js.map +1 -1
  332. package/dist/obj/obj-writer.cjs +1 -1
  333. package/dist/obj/obj-writer.js +1 -1
  334. package/dist/obj-loader-types.cjs +71 -0
  335. package/dist/obj-loader-types.cjs.map +7 -0
  336. package/dist/obj-loader-types.d.ts +2 -0
  337. package/dist/obj-loader-types.d.ts.map +1 -0
  338. package/dist/obj-loader-types.js +2 -0
  339. package/dist/obj-loader-types.js.map +1 -0
  340. package/dist/obj-loader.cjs +163 -0
  341. package/dist/obj-loader.cjs.map +7 -0
  342. package/dist/obj-loader.d.ts +2 -0
  343. package/dist/obj-loader.d.ts.map +1 -0
  344. package/dist/obj-loader.js +2 -0
  345. package/dist/obj-loader.js.map +1 -0
  346. package/dist/obj-worker.js +204 -71
  347. package/dist/obj-writer.cjs +167 -0
  348. package/dist/obj-writer.cjs.map +7 -0
  349. package/dist/obj-writer.d.ts +2 -0
  350. package/dist/obj-writer.d.ts.map +1 -0
  351. package/dist/obj-writer.js +2 -0
  352. package/dist/obj-writer.js.map +1 -0
  353. package/dist/usd/usd-loader-types.cjs +2 -2
  354. package/dist/usd/usd-loader-types.cjs.map +2 -2
  355. package/dist/usd/usd-loader-types.js +2 -2
  356. package/dist/usd/usd-loader-types.js.map +1 -1
  357. package/dist/usd-loader-types.cjs +69 -0
  358. package/dist/usd-loader-types.cjs.map +7 -0
  359. package/dist/usd-loader-types.d.ts +2 -0
  360. package/dist/usd-loader-types.d.ts.map +1 -0
  361. package/dist/usd-loader-types.js +2 -0
  362. package/dist/usd-loader-types.js.map +1 -0
  363. package/dist/usd-loader.cjs +43 -0
  364. package/dist/usd-loader.cjs.map +7 -0
  365. package/dist/usd-loader.d.ts +2 -0
  366. package/dist/usd-loader.d.ts.map +1 -0
  367. package/dist/usd-loader.js +2 -0
  368. package/dist/usd-loader.js.map +1 -0
  369. package/package.json +130 -71
  370. package/src/draco/bundled.ts +10 -0
  371. package/src/draco/draco-format.ts +20 -0
  372. package/src/draco/draco-javascript-loader-with-parser.ts +26 -0
  373. package/src/draco/draco-libraries.ts +35 -0
  374. package/src/draco/draco-library-options.ts +76 -0
  375. package/src/draco/draco-loader-options.ts +33 -0
  376. package/src/draco/draco-loader-types.ts +78 -0
  377. package/src/draco/draco-loader.ts +45 -0
  378. package/src/draco/draco-wasm-loader-with-parser.ts +31 -0
  379. package/src/draco/draco-writer.ts +252 -0
  380. package/src/draco/draco3d/draco3d-types.ts +498 -0
  381. package/src/draco/draco3d-loader-with-parser.ts +34 -0
  382. package/src/draco/index.ts +46 -0
  383. package/src/draco/lib/draco-builder.ts +935 -0
  384. package/src/draco/lib/draco-library-loader.ts +38 -0
  385. package/src/draco/lib/draco-module-loader.ts +370 -0
  386. package/src/draco/lib/draco-parser.ts +776 -0
  387. package/src/draco/lib/draco-types.ts +72 -0
  388. package/src/draco/lib/parse-draco.ts +51 -0
  389. package/src/draco/lib/utils/get-draco-schema.ts +65 -0
  390. package/src/draco/lib/utils/version.ts +8 -0
  391. package/src/draco/libs/DRACO-LICENSE +252 -0
  392. package/src/draco/libs/README.md +20 -0
  393. package/src/draco/libs/draco_decoder.js +34 -0
  394. package/src/draco/libs/draco_decoder.wasm +0 -0
  395. package/src/draco/libs/draco_decoder_gltf.wasm +0 -0
  396. package/src/draco/libs/draco_encoder.js +98 -0
  397. package/src/draco/libs/draco_encoder.wasm +0 -0
  398. package/src/draco/libs/draco_wasm_wrapper.js +117 -0
  399. package/src/draco/libs/draco_wasm_wrapper_gltf.js +116 -0
  400. package/src/draco/unbundled.ts +6 -0
  401. package/src/draco/workers/draco-worker-node.ts +10 -0
  402. package/src/draco/workers/draco-worker.ts +8 -0
  403. package/src/draco/workers/draco-writer-worker-node.cjs +21 -0
  404. package/src/draco/workers/draco-writer-worker-node.ts +13 -0
  405. package/src/draco/workers/draco-writer-worker.ts +11 -0
  406. package/src/draco-javascript-loader.ts +2 -0
  407. package/src/draco-library-options.ts +6 -0
  408. package/src/draco-loader-types.ts +2 -0
  409. package/src/draco-loader.ts +2 -0
  410. package/src/draco-wasm-loader.ts +2 -0
  411. package/src/draco-writer.ts +2 -0
  412. package/src/draco3d-loader.ts +2 -0
  413. package/src/glb-loader-types.ts +1 -0
  414. package/src/glb-loader.ts +1 -0
  415. package/src/glb-writer.ts +1 -0
  416. package/src/gltf/glb-loader-types.ts +1 -1
  417. package/src/gltf/gltf-loader-types.ts +5 -5
  418. package/src/gltf/gltf-loader.ts +4 -4
  419. package/src/gltf/lib/encoders/encode-gltf-draco.ts +2 -2
  420. package/src/gltf/lib/extensions/KHR_draco_mesh_compression.ts +2 -1
  421. package/src/gltf/lib/parsers/parse-gltf.ts +5 -5
  422. package/src/gltf-loader-types.ts +1 -0
  423. package/src/gltf-loader.ts +1 -0
  424. package/src/gltf-source.ts +1 -0
  425. package/src/gltf-writer.ts +1 -0
  426. package/src/index.ts +5 -0
  427. package/src/mtl-loader-types.ts +1 -0
  428. package/src/mtl-loader.ts +1 -0
  429. package/src/obj/mtl-loader-types.ts +1 -1
  430. package/src/obj/mtl-loader.ts +1 -1
  431. package/src/obj/obj-loader-types.ts +1 -1
  432. package/src/obj-loader-types.ts +1 -0
  433. package/src/obj-loader.ts +1 -0
  434. package/src/obj-writer.ts +1 -0
  435. package/src/usd/usd-loader-types.ts +1 -1
  436. package/src/usd-loader-types.ts +1 -0
  437. package/src/usd-loader.ts +1 -0
@@ -0,0 +1,76 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {LoadLibraryOptions} from '@loaders.gl/core/worker-utils';
6
+ import type {DracoDecoderProfile} from './lib/draco-module-loader';
7
+
8
+ /** Bundled Draco runtime selection and optional application overrides. */
9
+ export type DracoLibraryOptions = LoadLibraryOptions & {
10
+ /** Selects the full decoder or the smaller glTF-compatible subset. Defaults to full. */
11
+ decoderProfile?: DracoDecoderProfile;
12
+ };
13
+
14
+ /**
15
+ * Creates browser-bundler URL overrides for vendored Draco encoder and decoder runtimes.
16
+ * Classic and generated ESM assets live in the scene package’s dist/libs directory.
17
+ * Explicit application modules override the bundled defaults.
18
+ */
19
+ export function getDracoLibraryOptions(
20
+ options: DracoLibraryOptions = {}
21
+ ): DracoLibraryOptions & {decoderProfile: DracoDecoderProfile} {
22
+ const decoderProfile = options.decoderProfile ?? 'full';
23
+ const decoderModules =
24
+ decoderProfile === 'gltf'
25
+ ? {
26
+ 'draco_wasm_wrapper_gltf.js': new URL(
27
+ '../../dist/libs/draco_wasm_wrapper_gltf.js',
28
+ import.meta.url
29
+ ).href,
30
+ 'draco_decoder_gltf.wasm': new URL(
31
+ '../../dist/libs/draco_decoder_gltf.wasm',
32
+ import.meta.url
33
+ ).href
34
+ }
35
+ : {
36
+ 'draco_wasm_wrapper.js': new URL('../../dist/libs/draco_wasm_wrapper.js', import.meta.url)
37
+ .href,
38
+ 'draco_decoder.wasm': new URL('../../dist/libs/draco_decoder.wasm', import.meta.url).href
39
+ };
40
+ const moduleLibraries: Record<string, string> = {
41
+ 'draco_encoder.mjs': new URL('../../dist/libs/draco_encoder.mjs', import.meta.url).href,
42
+ 'draco_decoder.mjs': new URL('../../dist/libs/draco_decoder.mjs', import.meta.url).href,
43
+ ...(decoderProfile === 'gltf'
44
+ ? {
45
+ 'draco_wasm_wrapper_gltf.mjs': new URL(
46
+ '../../dist/libs/draco_wasm_wrapper_gltf.mjs',
47
+ import.meta.url
48
+ ).href
49
+ }
50
+ : {
51
+ 'draco_wasm_wrapper.mjs': new URL(
52
+ '../../dist/libs/draco_wasm_wrapper.mjs',
53
+ import.meta.url
54
+ ).href
55
+ })
56
+ };
57
+ // Do not substitute bundled ESM assets for an application's classic-name override.
58
+ for (const libraryName of Object.keys(moduleLibraries)) {
59
+ const classicName = libraryName.replace(/\.mjs$/, '.js');
60
+ if (options.modules?.[classicName] !== undefined) {
61
+ delete moduleLibraries[libraryName];
62
+ }
63
+ }
64
+ return {
65
+ ...options,
66
+ decoderProfile,
67
+ modules: {
68
+ 'draco_encoder.js': new URL('../../dist/libs/draco_encoder.js', import.meta.url).href,
69
+ 'draco_encoder.wasm': new URL('../../dist/libs/draco_encoder.wasm', import.meta.url).href,
70
+ 'draco_decoder.js': new URL('../../dist/libs/draco_decoder.js', import.meta.url).href,
71
+ ...decoderModules,
72
+ ...moduleLibraries,
73
+ ...options.modules
74
+ }
75
+ };
76
+ }
@@ -0,0 +1,33 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {StrictLoaderOptions} from '@loaders.gl/core/loader-utils';
6
+ import type {DracoParseOptions} from './lib/draco-parser';
7
+ import type {DracoDecoderProfile} from './lib/draco-module-loader';
8
+
9
+ /** Draco decoder backend selected by the metadata loader. */
10
+ export type DracoDecoderBackend = 'wasm' | 'javascript' | 'draco3d';
11
+
12
+ /** Options for the Draco loader. */
13
+ export type DracoLoaderOptions = StrictLoaderOptions & {
14
+ draco?: DracoParseOptions & {
15
+ /** Decoder backend. Defaults to WASM when available and JavaScript otherwise. */
16
+ backend?: DracoDecoderBackend | 'js';
17
+ /** Selects mesh output or Apache Arrow output. */
18
+ shape?: 'mesh' | 'arrow-table';
19
+ /** Selects the full decoder or the smaller glTF-compatible decoder build. */
20
+ decoderProfile?: DracoDecoderProfile;
21
+ /** Override the URL to the worker bundle (by default loads from unpkg.com) */
22
+ workerUrl?: string;
23
+ };
24
+ };
25
+
26
+ /** Default option bag for the Draco loader. */
27
+ export const DRACO_LOADER_DEFAULT_OPTIONS = {
28
+ backend: typeof WebAssembly === 'object' ? 'wasm' : 'javascript',
29
+ extraAttributes: {},
30
+ attributeNameEntry: undefined,
31
+ shape: 'arrow-table',
32
+ decoderProfile: 'full'
33
+ } as const;
@@ -0,0 +1,78 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Loader, LoaderWithParser} from '@loaders.gl/core/loader-utils';
6
+ import type {ArrowTable} from '@loaders.gl/core/schema';
7
+ import type {DracoMesh} from './lib/draco-types';
8
+ import {
9
+ deserializeArrowWorkerResult,
10
+ serializeArrowWorkerResult
11
+ } from '@loaders.gl/core/schema-utils/arrow-transport';
12
+ import {VERSION} from './lib/utils/version';
13
+ import {DracoFormat} from './draco-format';
14
+ import {
15
+ DRACO_LOADER_DEFAULT_OPTIONS,
16
+ type DracoDecoderBackend,
17
+ type DracoLoaderOptions
18
+ } from './draco-loader-options';
19
+
20
+ export type {DracoLoaderOptions} from './draco-loader-options';
21
+
22
+ /** Preloads the parser-bearing Draco loader implementation. */
23
+ async function preload(
24
+ _url: string,
25
+ options?: Record<string, unknown>
26
+ ): Promise<LoaderWithParser<DracoMesh | ArrowTable, never, DracoLoaderOptions>> {
27
+ const dracoLoaderOptions = options as DracoLoaderOptions | undefined;
28
+ switch (getDracoBackend(dracoLoaderOptions)) {
29
+ case 'wasm': {
30
+ const {DracoWASMLoaderWithParser} = await import('@loaders.gl/scene/draco-wasm-loader');
31
+ return DracoWASMLoaderWithParser;
32
+ }
33
+
34
+ case 'javascript': {
35
+ const {DracoJavaScriptLoaderWithParser} = await import(
36
+ '@loaders.gl/scene/draco-javascript-loader'
37
+ );
38
+ return DracoJavaScriptLoaderWithParser;
39
+ }
40
+
41
+ case 'draco3d': {
42
+ const {Draco3DLoaderWithParser} = await import('@loaders.gl/scene/draco3d-loader');
43
+ return Draco3DLoaderWithParser;
44
+ }
45
+
46
+ default:
47
+ throw new Error(`DracoLoader: unsupported backend "${dracoLoaderOptions?.draco?.backend}"`);
48
+ }
49
+ }
50
+
51
+ /** Metadata-only worker loader for Draco3D compressed geometries. */
52
+ export const DracoLoader = {
53
+ dataType: null as unknown as DracoMesh | ArrowTable,
54
+ batchType: null as never,
55
+ ...DracoFormat,
56
+ // shapes: ['mesh'],
57
+ version: VERSION,
58
+ worker: true,
59
+ /** Node test workers live with the Draco implementation. */
60
+ workerSourceNode: 'draco/workers/draco-worker-node.ts',
61
+ serializeWorkerResult: serializeArrowWorkerResult,
62
+ deserializeWorkerResult: deserializeArrowWorkerResult,
63
+ options: {
64
+ draco: DRACO_LOADER_DEFAULT_OPTIONS
65
+ },
66
+ preload
67
+ } as const satisfies Loader<DracoMesh | ArrowTable, never, DracoLoaderOptions>;
68
+
69
+ /** @deprecated Use DracoLoader. */
70
+ export const DracoWorkerLoader = DracoLoader;
71
+
72
+ /** Resolves the Draco decoder backend from loader options. */
73
+ function getDracoBackend(options?: DracoLoaderOptions): DracoDecoderBackend {
74
+ if (options?.draco?.backend) {
75
+ return options.draco.backend === 'js' ? 'javascript' : options.draco.backend;
76
+ }
77
+ return DracoLoader.options.draco.backend;
78
+ }
@@ -0,0 +1,45 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {LoaderWithParser, LoaderContext} from '@loaders.gl/core/loader-utils';
6
+ import {extractLoadLibraryOptions} from '@loaders.gl/core/worker-utils';
7
+ import type {ArrowTable} from '@loaders.gl/core/schema';
8
+ import type {DracoMesh} from './lib/draco-types';
9
+ import {parseDraco} from './lib/parse-draco';
10
+ import {loadDracoDecoderModule} from './lib/draco-module-loader';
11
+ import {DracoLoader as DracoLoaderMetadata} from './draco-loader-types';
12
+ import type {DracoLoaderOptions} from './draco-loader-options';
13
+
14
+ const {preload: _DracoLoaderPreload, ...DracoLoaderMetadataWithoutPreload} = DracoLoaderMetadata;
15
+
16
+ export type {DracoLoaderOptions} from './draco-loader-options';
17
+
18
+ /**
19
+ * Loader for Draco3D compressed geometries
20
+ */
21
+ export const DracoLoaderWithParser = {
22
+ ...DracoLoaderMetadataWithoutPreload,
23
+ parse
24
+ } as const satisfies LoaderWithParser<DracoMesh | ArrowTable, never, DracoLoaderOptions>;
25
+
26
+ /** Decodes compressed geometry through the selected Draco runtime. */
27
+ async function parse(
28
+ arrayBuffer: ArrayBuffer,
29
+ options?: DracoLoaderOptions,
30
+ context?: LoaderContext
31
+ ): Promise<DracoMesh | ArrowTable> {
32
+ return await parseDraco(
33
+ arrayBuffer,
34
+ options,
35
+ async () =>
36
+ await loadDracoDecoderModule(
37
+ extractLoadLibraryOptions(options),
38
+ options?.draco?.backend === 'javascript' || options?.draco?.backend === 'js'
39
+ ? 'js'
40
+ : 'wasm',
41
+ options?.draco?.decoderProfile
42
+ ),
43
+ context
44
+ );
45
+ }
@@ -0,0 +1,31 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {LoaderWithParser, LoaderContext} from '@loaders.gl/core/loader-utils';
6
+ import {extractLoadLibraryOptions} from '@loaders.gl/core/worker-utils';
7
+ import type {ArrowTable} from '@loaders.gl/core/schema';
8
+ import type {DracoMesh} from './lib/draco-types';
9
+ import {loadDracoDecoderModule} from './lib/draco-module-loader';
10
+ import {parseDraco} from './lib/parse-draco';
11
+ import {DracoLoader as DracoLoaderMetadata} from './draco-loader-types';
12
+ import type {DracoLoaderOptions} from './draco-loader-options';
13
+
14
+ const {preload: _DracoLoaderPreload, ...DracoLoaderMetadataWithoutPreload} = DracoLoaderMetadata;
15
+
16
+ /** Parser-bearing Draco loader backed by the WASM decoder. */
17
+ export const DracoWASMLoaderWithParser = {
18
+ ...DracoLoaderMetadataWithoutPreload,
19
+ parse: async (arrayBuffer: ArrayBuffer, options?: DracoLoaderOptions, context?: LoaderContext) =>
20
+ await parseDraco(
21
+ arrayBuffer,
22
+ options,
23
+ async () =>
24
+ await loadDracoDecoderModule(
25
+ extractLoadLibraryOptions(options),
26
+ 'wasm',
27
+ options?.draco?.decoderProfile
28
+ ),
29
+ context
30
+ )
31
+ } as const satisfies LoaderWithParser<DracoMesh | ArrowTable, never, DracoLoaderOptions>;
@@ -0,0 +1,252 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {
6
+ canEncodeWithWorker,
7
+ type WriterWithEncoder,
8
+ type WriterOptions
9
+ } from '@loaders.gl/core/loader-utils';
10
+ import type {Mesh, MeshArrowTable, TypedArray} from '@loaders.gl/core/schema';
11
+ import {convertTableToMesh} from '@loaders.gl/core/schema-utils';
12
+ import {extractLoadLibraryOptions, processOnWorkerInBatches} from '@loaders.gl/core/worker-utils';
13
+ import type {DracoMesh} from './lib/draco-types';
14
+ import type {DracoBuilderMesh, DracoBuildOptions, DracoEncodingResult} from './lib/draco-builder';
15
+ import DRACOBuilder from './lib/draco-builder';
16
+ import {loadDracoEncoderModule} from './lib/draco-module-loader';
17
+ import {VERSION} from './lib/utils/version';
18
+ import {DracoFormat} from './draco-format';
19
+
20
+ /** Legacy flat attribute map accepted by `DracoWriter`. */
21
+ export type DracoWriterAttributes = Record<string, TypedArray>;
22
+
23
+ /** Inputs accepted by `DracoWriter`. */
24
+ export type DracoWriterInput =
25
+ | DracoMesh
26
+ | Mesh
27
+ | MeshArrowTable
28
+ | DracoBuilderMesh
29
+ | DracoWriterAttributes;
30
+
31
+ /** Options for `DracoWriter`. */
32
+ export type DracoWriterOptions = WriterOptions & {
33
+ /** Draco-specific writer options. */
34
+ draco?: DracoBuildOptions;
35
+ };
36
+
37
+ /** Progress notification emitted after each geometry in a batch. */
38
+ export type DracoBatchProgress = {
39
+ /** Number of geometries completed. */
40
+ completed: number;
41
+ /** Total number of geometries in the batch. */
42
+ total: number;
43
+ };
44
+
45
+ /** Options for cancellable, progress-reporting batch encoding. */
46
+ export type DracoBatchOptions = DracoWriterOptions & {
47
+ /** Abort signal checked between native encoding operations. */
48
+ signal?: AbortSignal;
49
+ /** Called after each geometry is encoded. */
50
+ onProgress?: (progress: DracoBatchProgress) => void;
51
+ };
52
+
53
+ /** A batch of Draco-writable geometries. */
54
+ export type DracoWriterInputBatch = DracoWriterInput[];
55
+
56
+ const DEFAULT_DRACO_WRITER_OPTIONS = {
57
+ pointcloud: false, // Set to true if pointcloud (mode: 0, no indices)
58
+ attributeNameEntry: 'name'
59
+ // Draco Compression Parameters
60
+ // method: 'MESH_EDGEBREAKER_ENCODING', // Use draco defaults
61
+ // speed: [5, 5], // Use draco defaults
62
+ // quantization: { // Use draco defaults
63
+ // POSITION: 10
64
+ // }
65
+ };
66
+
67
+ /** Worker-enabled exporter for Draco3D compressed geometries. */
68
+ export const DracoWriterWorker = {
69
+ ...DracoFormat,
70
+ id: 'draco-writer',
71
+ name: 'Draco compressed geometry writer',
72
+ module: 'scene',
73
+ version: VERSION,
74
+ worker: true,
75
+ workerNode: 'draco-writer-worker-node.cjs',
76
+ /** Node test workers live with the Draco implementation. */
77
+ workerSourceNode: 'draco/workers/draco-writer-worker-node.ts',
78
+ options: {
79
+ draco: {}
80
+ }
81
+ };
82
+
83
+ /**
84
+ * Exporter for Draco3D compressed geometries
85
+ */
86
+ export const DracoWriter = {
87
+ ...DracoFormat,
88
+ name: 'DRACO',
89
+ version: VERSION,
90
+ options: {
91
+ draco: DEFAULT_DRACO_WRITER_OPTIONS
92
+ },
93
+ encode,
94
+ encodeInBatches
95
+ } as const satisfies WriterWithEncoder<DracoWriterInput, unknown, DracoWriterOptions>;
96
+
97
+ /** Encode Draco mesh category data. */
98
+ async function encode(
99
+ data: DracoWriterInput,
100
+ options: DracoWriterOptions = {}
101
+ ): Promise<ArrayBuffer> {
102
+ return (await encodeDraco(data, options)).data;
103
+ }
104
+
105
+ /** Encodes Draco geometry and returns bytes together with native encoding diagnostics. */
106
+ export async function encodeDraco(
107
+ data: DracoWriterInput,
108
+ options: DracoWriterOptions = {}
109
+ ): Promise<DracoEncodingResult> {
110
+ // Dynamically load draco
111
+ const {draco} = await loadDracoEncoderModule(extractLoadLibraryOptions(options));
112
+ const dracoBuilder = new DRACOBuilder(draco);
113
+
114
+ try {
115
+ return dracoBuilder.encodeSyncWithReport(normalizeDracoMesh(data), options.draco);
116
+ } finally {
117
+ dracoBuilder.destroy();
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Encodes multiple geometries while loading and initializing the Draco runtime once.
123
+ *
124
+ * The input geometries are processed sequentially to keep peak native memory bounded.
125
+ * Each result is independent and uses the same writer options.
126
+ */
127
+ export async function encodeDracoBatch(
128
+ data: DracoWriterInput[],
129
+ options: DracoBatchOptions = {}
130
+ ): Promise<DracoEncodingResult[]> {
131
+ throwIfAborted(options.signal);
132
+ const results: DracoEncodingResult[] = [];
133
+ let completed = 0;
134
+ for await (const result of encodeDracoInBatches([data], options)) {
135
+ results.push(result);
136
+ completed++;
137
+ options.onProgress?.({completed, total: data.length});
138
+ }
139
+ return results;
140
+ }
141
+
142
+ /**
143
+ * Encodes geometry batches while retaining one encoder runtime and one worker
144
+ * lease for the complete input iterator.
145
+ *
146
+ * Worker mode is selected with `worker: true` and the normal Draco writer
147
+ * worker options. Set `worker: false` to keep the operation local.
148
+ */
149
+ export function encodeDracoInBatches(
150
+ data: AsyncIterable<DracoWriterInputBatch> | Iterable<DracoWriterInputBatch>,
151
+ options: DracoBatchOptions = {}
152
+ ): AsyncIterable<DracoEncodingResult> {
153
+ const normalizedData = normalizeDracoInputBatches(data);
154
+ if (canEncodeWithWorker(DracoWriterWorker, options)) {
155
+ const {onProgress: _onProgress, ...workerOptions} = options;
156
+ return processOnWorkerInBatches<DracoBuilderMesh[], DracoEncodingResult>(
157
+ DracoWriterWorker,
158
+ normalizedData,
159
+ workerOptions
160
+ );
161
+ }
162
+ return encodeDracoInBatchesLocally(normalizedData, options);
163
+ }
164
+
165
+ /** Encodes batches through the public writer's ArrayBuffer-only batch API. */
166
+ async function* encodeInBatches(
167
+ data: AsyncIterable<DracoWriterInput> | Iterable<DracoWriterInput>,
168
+ options: DracoBatchOptions = {}
169
+ ): AsyncIterable<ArrayBuffer> {
170
+ const geometryBatches = (async function* () {
171
+ for await (const geometry of data) {
172
+ yield [geometry];
173
+ }
174
+ })();
175
+ for await (const result of encodeDracoInBatches(geometryBatches, options)) {
176
+ yield result.data;
177
+ }
178
+ }
179
+
180
+ /** Worker-safe local implementation that initializes Draco exactly once. */
181
+ export async function* encodeDracoInBatchesLocally(
182
+ data: AsyncIterable<DracoBuilderMesh[]> | Iterable<DracoBuilderMesh[]>,
183
+ options: DracoBatchOptions = {}
184
+ ): AsyncIterable<DracoEncodingResult> {
185
+ const {draco} = await loadDracoEncoderModule(extractLoadLibraryOptions(options));
186
+ const dracoBuilder = new DRACOBuilder(draco);
187
+ try {
188
+ for await (const batch of data) {
189
+ for (const geometry of batch) {
190
+ throwIfAborted(options.signal);
191
+ yield dracoBuilder.encodeSyncWithReport(geometry, options.draco);
192
+ }
193
+ }
194
+ } finally {
195
+ dracoBuilder.destroy();
196
+ }
197
+ }
198
+
199
+ /** Converts any accepted input batch into structured-clone-safe builder meshes. */
200
+ async function* normalizeDracoInputBatches(
201
+ data: AsyncIterable<DracoWriterInputBatch> | Iterable<DracoWriterInputBatch>
202
+ ): AsyncIterable<DracoBuilderMesh[]> {
203
+ for await (const batch of data) {
204
+ yield batch.map(normalizeDracoMesh);
205
+ }
206
+ }
207
+
208
+ /** Throws the signal's reason before starting or between native encodes. */
209
+ function throwIfAborted(signal: AbortSignal | undefined): void {
210
+ if (!signal?.aborted) {
211
+ return;
212
+ }
213
+ if (signal.reason !== undefined) {
214
+ throw signal.reason;
215
+ }
216
+ const error = new Error('Draco batch encoding aborted');
217
+ error.name = 'AbortError';
218
+ throw error;
219
+ }
220
+
221
+ /** Returns Draco-writable mesh data without copying ordinary Mesh attributes. */
222
+ function normalizeDracoMesh(data: DracoWriterInput): DracoBuilderMesh {
223
+ if (isMeshArrowTable(data)) {
224
+ return convertTableToMesh(data);
225
+ }
226
+
227
+ if (isDracoBuilderMesh(data)) {
228
+ return data;
229
+ }
230
+
231
+ const {indices, ...attributes} = data;
232
+ return {attributes, ...(indices ? {indices} : {})};
233
+ }
234
+
235
+ /** Return true when the input is MeshArrowTable category data. */
236
+ function isMeshArrowTable(data: unknown): data is MeshArrowTable {
237
+ return (
238
+ typeof data === 'object' && data !== null && 'shape' in data && data.shape === 'arrow-table'
239
+ );
240
+ }
241
+
242
+ /** Returns true when input uses the nested Mesh attribute representation. */
243
+ function isDracoBuilderMesh(data: DracoWriterInput): data is DracoBuilderMesh | Mesh | DracoMesh {
244
+ return (
245
+ typeof data === 'object' &&
246
+ data !== null &&
247
+ 'attributes' in data &&
248
+ typeof data.attributes === 'object' &&
249
+ data.attributes !== null &&
250
+ !ArrayBuffer.isView(data.attributes)
251
+ );
252
+ }