@loaders.gl/scene 5.0.0-beta.1 → 5.0.0-beta.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 (675) hide show
  1. package/DRACO-README.md +15 -0
  2. package/GLTF-README.md +1 -1
  3. package/OBJ-README.md +1 -1
  4. package/README.md +13 -2
  5. package/THIRD-PARTY-NOTICES.md +10 -1
  6. package/dist/dist.dev.js +21207 -14204
  7. package/dist/dist.min.js +32 -24
  8. package/dist/draco/bundled.cjs +34 -0
  9. package/dist/draco/bundled.cjs.map +7 -0
  10. package/dist/draco/bundled.d.ts +5 -0
  11. package/dist/draco/bundled.d.ts.map +1 -0
  12. package/dist/draco/bundled.js +6 -0
  13. package/dist/draco/bundled.js.map +1 -0
  14. package/dist/draco/draco-format.cjs +41 -0
  15. package/dist/draco/draco-format.cjs.map +7 -0
  16. package/dist/draco/draco-format.d.ts +15 -0
  17. package/dist/draco/draco-format.d.ts.map +1 -0
  18. package/dist/draco/draco-format.js +18 -0
  19. package/dist/draco/draco-format.js.map +1 -0
  20. package/dist/draco/draco-javascript-loader-with-parser.cjs +47 -0
  21. package/dist/draco/draco-javascript-loader-with-parser.cjs.map +7 -0
  22. package/dist/draco/draco-javascript-loader-with-parser.d.ts +36 -0
  23. package/dist/draco/draco-javascript-loader-with-parser.d.ts.map +1 -0
  24. package/dist/draco/draco-javascript-loader-with-parser.js +14 -0
  25. package/dist/draco/draco-javascript-loader-with-parser.js.map +1 -0
  26. package/dist/draco/draco-libraries.cjs +61 -0
  27. package/dist/draco/draco-libraries.cjs.map +7 -0
  28. package/dist/draco/draco-libraries.d.ts +28 -0
  29. package/dist/draco/draco-libraries.d.ts.map +1 -0
  30. package/dist/draco/draco-libraries.js +33 -0
  31. package/dist/draco/draco-libraries.js.map +1 -0
  32. package/dist/draco/draco-library-options.cjs +80 -0
  33. package/dist/draco/draco-library-options.cjs.map +7 -0
  34. package/dist/draco/draco-library-options.d.ts +16 -0
  35. package/dist/draco/draco-library-options.d.ts.map +1 -0
  36. package/dist/draco/draco-library-options.js +52 -0
  37. package/dist/draco/draco-library-options.js.map +1 -0
  38. package/dist/draco/draco-loader-options.cjs +37 -0
  39. package/dist/draco/draco-loader-options.cjs.map +7 -0
  40. package/dist/draco/draco-loader-options.d.ts +27 -0
  41. package/dist/draco/draco-loader-options.d.ts.map +1 -0
  42. package/dist/draco/draco-loader-options.js +12 -0
  43. package/dist/draco/draco-loader-options.js.map +1 -0
  44. package/dist/draco/draco-loader-types.cjs +87 -0
  45. package/dist/draco/draco-loader-types.cjs.map +7 -0
  46. package/dist/draco/draco-loader-types.d.ts +41 -0
  47. package/dist/draco/draco-loader-types.d.ts.map +1 -0
  48. package/dist/draco/draco-loader-types.js +54 -0
  49. package/dist/draco/draco-loader-types.js.map +1 -0
  50. package/dist/draco/draco-loader.cjs +51 -0
  51. package/dist/draco/draco-loader.cjs.map +7 -0
  52. package/dist/draco/draco-loader.d.ts +41 -0
  53. package/dist/draco/draco-loader.d.ts.map +1 -0
  54. package/dist/draco/draco-loader.js +22 -0
  55. package/dist/draco/draco-loader.js.map +1 -0
  56. package/dist/draco/draco-wasm-loader-with-parser.cjs +48 -0
  57. package/dist/draco/draco-wasm-loader-with-parser.cjs.map +7 -0
  58. package/dist/draco/draco-wasm-loader-with-parser.d.ts +36 -0
  59. package/dist/draco/draco-wasm-loader-with-parser.d.ts.map +1 -0
  60. package/dist/draco/draco-wasm-loader-with-parser.js +14 -0
  61. package/dist/draco/draco-wasm-loader-with-parser.js.map +1 -0
  62. package/dist/draco/draco-writer.cjs +183 -0
  63. package/dist/draco/draco-writer.cjs.map +7 -0
  64. package/dist/draco/draco-writer.d.ts +98 -0
  65. package/dist/draco/draco-writer.d.ts.map +1 -0
  66. package/dist/draco/draco-writer.js +166 -0
  67. package/dist/draco/draco-writer.js.map +1 -0
  68. package/dist/draco/draco3d/draco3d-types.cjs +76 -0
  69. package/dist/draco/draco3d/draco3d-types.cjs.map +7 -0
  70. package/dist/draco/draco3d/draco3d-types.d.ts +303 -0
  71. package/dist/draco/draco3d/draco3d-types.d.ts.map +1 -0
  72. package/dist/draco/draco3d/draco3d-types.js +47 -0
  73. package/dist/draco/draco3d/draco3d-types.js.map +1 -0
  74. package/dist/draco/draco3d-loader-with-parser.cjs +50 -0
  75. package/dist/draco/draco3d-loader-with-parser.cjs.map +7 -0
  76. package/dist/draco/draco3d-loader-with-parser.d.ts +36 -0
  77. package/dist/draco/draco3d-loader-with-parser.d.ts.map +1 -0
  78. package/dist/draco/draco3d-loader-with-parser.js +21 -0
  79. package/dist/draco/draco3d-loader-with-parser.js.map +1 -0
  80. package/dist/draco/index.cjs +51 -0
  81. package/dist/draco/index.cjs.map +7 -0
  82. package/dist/draco/index.d.ts +11 -0
  83. package/dist/draco/index.d.ts.map +1 -0
  84. package/dist/draco/index.js +10 -0
  85. package/dist/draco/index.js.map +1 -0
  86. package/dist/draco/lib/draco-builder.cjs +660 -0
  87. package/dist/draco/lib/draco-builder.cjs.map +7 -0
  88. package/dist/draco/lib/draco-builder.d.ts +175 -0
  89. package/dist/draco/lib/draco-builder.d.ts.map +1 -0
  90. package/dist/draco/lib/draco-builder.js +612 -0
  91. package/dist/draco/lib/draco-builder.js.map +1 -0
  92. package/dist/draco/lib/draco-library-loader.cjs +47 -0
  93. package/dist/draco/lib/draco-library-loader.cjs.map +7 -0
  94. package/dist/draco/lib/draco-library-loader.d.ts +5 -0
  95. package/dist/draco/lib/draco-library-loader.d.ts.map +1 -0
  96. package/dist/draco/lib/draco-library-loader.js +23 -0
  97. package/dist/draco/lib/draco-library-loader.js.map +1 -0
  98. package/dist/draco/lib/draco-module-loader.cjs +281 -0
  99. package/dist/draco/lib/draco-module-loader.cjs.map +7 -0
  100. package/dist/draco/lib/draco-module-loader.d.ts +25 -0
  101. package/dist/draco/lib/draco-module-loader.d.ts.map +1 -0
  102. package/dist/draco/lib/draco-module-loader.js +220 -0
  103. package/dist/draco/lib/draco-module-loader.js.map +1 -0
  104. package/dist/draco/lib/draco-parser.cjs +601 -0
  105. package/dist/draco/lib/draco-parser.cjs.map +7 -0
  106. package/dist/draco/lib/draco-parser.d.ts +143 -0
  107. package/dist/draco/lib/draco-parser.d.ts.map +1 -0
  108. package/dist/draco/lib/draco-parser.js +598 -0
  109. package/dist/draco/lib/draco-parser.js.map +1 -0
  110. package/dist/draco/lib/draco-types.cjs +19 -0
  111. package/dist/draco/lib/draco-types.cjs.map +7 -0
  112. package/dist/draco/lib/draco-types.d.ts +59 -0
  113. package/dist/draco/lib/draco-types.d.ts.map +1 -0
  114. package/dist/draco/lib/draco-types.js +5 -0
  115. package/dist/draco/lib/draco-types.js.map +1 -0
  116. package/dist/draco/lib/parse-draco.cjs +60 -0
  117. package/dist/draco/lib/parse-draco.cjs.map +7 -0
  118. package/dist/draco/lib/parse-draco.d.ts +22 -0
  119. package/dist/draco/lib/parse-draco.d.ts.map +1 -0
  120. package/dist/draco/lib/parse-draco.js +33 -0
  121. package/dist/draco/lib/parse-draco.js.map +1 -0
  122. package/dist/draco/lib/utils/get-draco-schema.cjs +74 -0
  123. package/dist/draco/lib/utils/get-draco-schema.cjs.map +7 -0
  124. package/dist/draco/lib/utils/get-draco-schema.d.ts +7 -0
  125. package/dist/draco/lib/utils/get-draco-schema.d.ts.map +1 -0
  126. package/dist/draco/lib/utils/get-draco-schema.js +45 -0
  127. package/dist/draco/lib/utils/get-draco-schema.js.map +1 -0
  128. package/dist/draco/lib/utils/version.cjs +31 -0
  129. package/dist/draco/lib/utils/version.cjs.map +7 -0
  130. package/dist/draco/lib/utils/version.d.ts +2 -0
  131. package/dist/draco/lib/utils/version.d.ts.map +1 -0
  132. package/dist/draco/lib/utils/version.js +8 -0
  133. package/dist/draco/lib/utils/version.js.map +1 -0
  134. package/dist/draco/unbundled.cjs +31 -0
  135. package/dist/draco/unbundled.cjs.map +7 -0
  136. package/dist/draco/unbundled.d.ts +3 -0
  137. package/dist/draco/unbundled.d.ts.map +1 -0
  138. package/dist/draco/unbundled.js +5 -0
  139. package/dist/draco/unbundled.js.map +1 -0
  140. package/dist/draco/workers/draco-worker-node.cjs +8 -0
  141. package/dist/draco/workers/draco-worker-node.cjs.map +7 -0
  142. package/dist/draco/workers/draco-worker-node.d.ts +2 -0
  143. package/dist/draco/workers/draco-worker-node.d.ts.map +1 -0
  144. package/dist/draco/workers/draco-worker-node.js +9 -0
  145. package/dist/draco/workers/draco-worker-node.js.map +1 -0
  146. package/dist/draco/workers/draco-worker.cjs +7 -0
  147. package/dist/draco/workers/draco-worker.cjs.map +7 -0
  148. package/dist/draco/workers/draco-worker.d.ts +2 -0
  149. package/dist/draco/workers/draco-worker.d.ts.map +1 -0
  150. package/dist/draco/workers/draco-worker.js +7 -0
  151. package/dist/draco/workers/draco-worker.js.map +1 -0
  152. package/dist/draco/workers/draco-writer-worker-node.cjs +11 -0
  153. package/dist/draco/workers/draco-writer-worker-node.cjs.map +7 -0
  154. package/dist/draco/workers/draco-writer-worker-node.d.cts +2 -0
  155. package/dist/draco/workers/draco-writer-worker-node.d.cts.map +1 -0
  156. package/dist/draco/workers/draco-writer-worker-node.d.ts +2 -0
  157. package/dist/draco/workers/draco-writer-worker-node.d.ts.map +1 -0
  158. package/dist/draco/workers/draco-writer-worker-node.js +9 -0
  159. package/dist/draco/workers/draco-writer-worker-node.js.map +1 -0
  160. package/dist/draco/workers/draco-writer-worker.cjs +10 -0
  161. package/dist/draco/workers/draco-writer-worker.cjs.map +7 -0
  162. package/dist/draco/workers/draco-writer-worker.d.ts +2 -0
  163. package/dist/draco/workers/draco-writer-worker.d.ts.map +1 -0
  164. package/dist/draco/workers/draco-writer-worker.js +7 -0
  165. package/dist/draco/workers/draco-writer-worker.js.map +1 -0
  166. package/dist/draco-javascript-loader.cjs +25 -0
  167. package/dist/draco-javascript-loader.cjs.map +7 -0
  168. package/dist/draco-javascript-loader.d.ts +2 -0
  169. package/dist/draco-javascript-loader.d.ts.map +1 -0
  170. package/dist/draco-javascript-loader.js +3 -0
  171. package/dist/draco-javascript-loader.js.map +1 -0
  172. package/dist/draco-library-options.cjs +36 -0
  173. package/dist/draco-library-options.cjs.map +7 -0
  174. package/dist/draco-library-options.d.ts +3 -0
  175. package/dist/draco-library-options.d.ts.map +1 -0
  176. package/dist/draco-library-options.js +4 -0
  177. package/dist/draco-library-options.js.map +1 -0
  178. package/dist/draco-loader-types.cjs +25 -0
  179. package/dist/draco-loader-types.cjs.map +7 -0
  180. package/dist/draco-loader-types.d.ts +2 -0
  181. package/dist/draco-loader-types.d.ts.map +1 -0
  182. package/dist/draco-loader-types.js +3 -0
  183. package/dist/draco-loader-types.js.map +1 -0
  184. package/dist/draco-loader.cjs +25 -0
  185. package/dist/draco-loader.cjs.map +7 -0
  186. package/dist/draco-loader.d.ts +2 -0
  187. package/dist/draco-loader.d.ts.map +1 -0
  188. package/dist/draco-loader.js +3 -0
  189. package/dist/draco-loader.js.map +1 -0
  190. package/dist/draco-wasm-loader.cjs +25 -0
  191. package/dist/draco-wasm-loader.cjs.map +7 -0
  192. package/dist/draco-wasm-loader.d.ts +2 -0
  193. package/dist/draco-wasm-loader.d.ts.map +1 -0
  194. package/dist/draco-wasm-loader.js +3 -0
  195. package/dist/draco-wasm-loader.js.map +1 -0
  196. package/dist/draco-worker-node.js +29842 -0
  197. package/dist/draco-worker-node.js.map +7 -0
  198. package/dist/draco-worker.js +19668 -0
  199. package/dist/draco-worker.js.map +7 -0
  200. package/dist/draco-writer-worker-node.cjs +30022 -0
  201. package/dist/draco-writer-worker-node.cjs.map +7 -0
  202. package/dist/draco-writer-worker.js +19767 -0
  203. package/dist/draco-writer-worker.js.map +7 -0
  204. package/dist/draco-writer.cjs +25 -0
  205. package/dist/draco-writer.cjs.map +7 -0
  206. package/dist/draco-writer.d.ts +2 -0
  207. package/dist/draco-writer.d.ts.map +1 -0
  208. package/dist/draco-writer.js +3 -0
  209. package/dist/draco-writer.js.map +1 -0
  210. package/dist/draco3d-loader.cjs +25 -0
  211. package/dist/draco3d-loader.cjs.map +7 -0
  212. package/dist/draco3d-loader.d.ts +2 -0
  213. package/dist/draco3d-loader.d.ts.map +1 -0
  214. package/dist/draco3d-loader.js +3 -0
  215. package/dist/draco3d-loader.js.map +1 -0
  216. package/dist/glb-loader-types.cjs +61 -0
  217. package/dist/glb-loader-types.cjs.map +7 -0
  218. package/dist/glb-loader-types.d.ts +2 -0
  219. package/dist/glb-loader-types.d.ts.map +1 -0
  220. package/dist/glb-loader-types.js +2 -0
  221. package/dist/glb-loader-types.js.map +1 -0
  222. package/dist/glb-loader.cjs +48 -0
  223. package/dist/glb-loader.cjs.map +7 -0
  224. package/dist/glb-loader.d.ts +2 -0
  225. package/dist/glb-loader.d.ts.map +1 -0
  226. package/dist/glb-loader.js +2 -0
  227. package/dist/glb-loader.js.map +1 -0
  228. package/dist/glb-writer.cjs +53 -0
  229. package/dist/glb-writer.cjs.map +7 -0
  230. package/dist/glb-writer.d.ts +2 -0
  231. package/dist/glb-writer.d.ts.map +1 -0
  232. package/dist/glb-writer.js +2 -0
  233. package/dist/glb-writer.js.map +1 -0
  234. package/dist/gltf/glb-loader-types.cjs +1 -1
  235. package/dist/gltf/glb-loader-types.cjs.map +2 -2
  236. package/dist/gltf/glb-loader-types.d.ts +2 -2
  237. package/dist/gltf/glb-loader-types.js +1 -1
  238. package/dist/gltf/glb-loader-types.js.map +1 -1
  239. package/dist/gltf/gltf-loader-types.cjs +1 -1
  240. package/dist/gltf/gltf-loader-types.cjs.map +2 -2
  241. package/dist/gltf/gltf-loader-types.d.ts +11 -5
  242. package/dist/gltf/gltf-loader-types.d.ts.map +1 -1
  243. package/dist/gltf/gltf-loader-types.js +1 -1
  244. package/dist/gltf/gltf-loader-types.js.map +1 -1
  245. package/dist/gltf/gltf-loader.cjs.map +1 -1
  246. package/dist/gltf/gltf-loader.d.ts +4 -4
  247. package/dist/gltf/gltf-loader.d.ts.map +1 -1
  248. package/dist/gltf/index.cjs +2 -0
  249. package/dist/gltf/index.cjs.map +2 -2
  250. package/dist/gltf/index.d.ts +2 -2
  251. package/dist/gltf/index.d.ts.map +1 -1
  252. package/dist/gltf/index.js +1 -1
  253. package/dist/gltf/index.js.map +1 -1
  254. package/dist/gltf/lib/api/gltf-extensions.cjs +7 -2
  255. package/dist/gltf/lib/api/gltf-extensions.cjs.map +2 -2
  256. package/dist/gltf/lib/api/gltf-extensions.d.ts.map +1 -1
  257. package/dist/gltf/lib/api/gltf-extensions.js +7 -5
  258. package/dist/gltf/lib/api/gltf-extensions.js.map +1 -1
  259. package/dist/gltf/lib/encoders/encode-gltf-draco.cjs +12 -2
  260. package/dist/gltf/lib/encoders/encode-gltf-draco.cjs.map +2 -2
  261. package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts +1 -1
  262. package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts.map +1 -1
  263. package/dist/gltf/lib/encoders/encode-gltf-draco.js +1 -1
  264. package/dist/gltf/lib/encoders/encode-gltf-draco.js.map +1 -1
  265. package/dist/gltf/lib/extensions/EXT_texture_webp.cjs +1 -0
  266. package/dist/gltf/lib/extensions/EXT_texture_webp.cjs.map +2 -2
  267. package/dist/gltf/lib/extensions/EXT_texture_webp.d.ts.map +1 -1
  268. package/dist/gltf/lib/extensions/EXT_texture_webp.js +3 -0
  269. package/dist/gltf/lib/extensions/EXT_texture_webp.js.map +1 -1
  270. package/dist/gltf/lib/extensions/KHR_accessor_float64.cjs +45 -0
  271. package/dist/gltf/lib/extensions/KHR_accessor_float64.cjs.map +7 -0
  272. package/dist/gltf/lib/extensions/KHR_accessor_float64.d.ts +6 -0
  273. package/dist/gltf/lib/extensions/KHR_accessor_float64.d.ts.map +1 -0
  274. package/dist/gltf/lib/extensions/KHR_accessor_float64.js +20 -0
  275. package/dist/gltf/lib/extensions/KHR_accessor_float64.js.map +1 -0
  276. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs +2 -2
  277. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs.map +2 -2
  278. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
  279. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js +1 -1
  280. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  281. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs +23 -7
  282. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs.map +2 -2
  283. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.d.ts +2 -1
  284. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.d.ts.map +1 -1
  285. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js +21 -5
  286. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js.map +1 -1
  287. package/dist/gltf/lib/extensions/MSFT_texture_dds.cjs +64 -0
  288. package/dist/gltf/lib/extensions/MSFT_texture_dds.cjs.map +7 -0
  289. package/dist/gltf/lib/extensions/MSFT_texture_dds.d.ts +12 -0
  290. package/dist/gltf/lib/extensions/MSFT_texture_dds.d.ts.map +1 -0
  291. package/dist/gltf/lib/extensions/MSFT_texture_dds.js +39 -0
  292. package/dist/gltf/lib/extensions/MSFT_texture_dds.js.map +1 -0
  293. package/dist/gltf/lib/extensions/utils/3d-tiles-utils.cjs +1 -1
  294. package/dist/gltf/lib/extensions/utils/3d-tiles-utils.cjs.map +2 -2
  295. package/dist/gltf/lib/extensions/utils/3d-tiles-utils.d.ts.map +1 -1
  296. package/dist/gltf/lib/extensions/utils/3d-tiles-utils.js +3 -1
  297. package/dist/gltf/lib/extensions/utils/3d-tiles-utils.js.map +1 -1
  298. package/dist/gltf/lib/parsers/parse-gltf.cjs +34 -8
  299. package/dist/gltf/lib/parsers/parse-gltf.cjs.map +3 -3
  300. package/dist/gltf/lib/parsers/parse-gltf.d.ts +2 -0
  301. package/dist/gltf/lib/parsers/parse-gltf.d.ts.map +1 -1
  302. package/dist/gltf/lib/parsers/parse-gltf.js +26 -6
  303. package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -1
  304. package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs +22 -0
  305. package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs.map +2 -2
  306. package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts +23 -0
  307. package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts.map +1 -1
  308. package/dist/gltf/lib/types/gltf-additional-extension-schemas.js +22 -0
  309. package/dist/gltf/lib/types/gltf-additional-extension-schemas.js.map +1 -1
  310. package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.cjs.map +1 -1
  311. package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.d.ts +1 -1
  312. package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.d.ts.map +1 -1
  313. package/dist/gltf/lib/types/gltf-extension-schemas.cjs +8 -0
  314. package/dist/gltf/lib/types/gltf-extension-schemas.cjs.map +2 -2
  315. package/dist/gltf/lib/types/gltf-extension-schemas.d.ts +27 -0
  316. package/dist/gltf/lib/types/gltf-extension-schemas.d.ts.map +1 -1
  317. package/dist/gltf/lib/types/gltf-extension-schemas.js +8 -1
  318. package/dist/gltf/lib/types/gltf-extension-schemas.js.map +1 -1
  319. package/dist/gltf/lib/types/gltf-json-schema.cjs.map +1 -1
  320. package/dist/gltf/lib/types/gltf-json-schema.d.ts +2 -2
  321. package/dist/gltf/lib/types/gltf-json-schema.d.ts.map +1 -1
  322. package/dist/gltf/lib/types/gltf-texture-procedurals.cjs +19 -0
  323. package/dist/gltf/lib/types/gltf-texture-procedurals.cjs.map +7 -0
  324. package/dist/gltf/lib/types/gltf-texture-procedurals.d.ts +45 -0
  325. package/dist/gltf/lib/types/gltf-texture-procedurals.d.ts.map +1 -0
  326. package/dist/gltf/lib/types/gltf-texture-procedurals.js +5 -0
  327. package/dist/gltf/lib/types/gltf-texture-procedurals.js.map +1 -0
  328. package/dist/gltf/lib/types/gltf-types.cjs.map +1 -1
  329. package/dist/gltf/lib/types/gltf-types.d.ts +7 -0
  330. package/dist/gltf/lib/types/gltf-types.d.ts.map +1 -1
  331. package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts +34 -0
  332. package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts.map +1 -1
  333. package/dist/gltf/lib/types/gltf-zod-schema.cjs +4 -1
  334. package/dist/gltf/lib/types/gltf-zod-schema.cjs.map +2 -2
  335. package/dist/gltf/lib/types/gltf-zod-schema.d.ts +57 -1
  336. package/dist/gltf/lib/types/gltf-zod-schema.d.ts.map +1 -1
  337. package/dist/gltf/lib/types/gltf-zod-schema.js +6 -2
  338. package/dist/gltf/lib/types/gltf-zod-schema.js.map +1 -1
  339. package/dist/gltf/lib/utils/version.cjs +1 -1
  340. package/dist/gltf/lib/utils/version.cjs.map +1 -1
  341. package/dist/gltf/lib/utils/version.js +1 -1
  342. package/dist/gltf/lib/utils/version.js.map +1 -1
  343. package/dist/gltf/schema.cjs +3 -0
  344. package/dist/gltf/schema.cjs.map +2 -2
  345. package/dist/gltf/schema.d.ts +1 -0
  346. package/dist/gltf/schema.d.ts.map +1 -1
  347. package/dist/gltf/schema.js +1 -0
  348. package/dist/gltf/schema.js.map +1 -1
  349. package/dist/gltf-loader-types.cjs +73 -0
  350. package/dist/gltf-loader-types.cjs.map +7 -0
  351. package/dist/gltf-loader-types.d.ts +2 -0
  352. package/dist/gltf-loader-types.d.ts.map +1 -0
  353. package/dist/gltf-loader-types.js +2 -0
  354. package/dist/gltf-loader-types.js.map +1 -0
  355. package/dist/gltf-loader.cjs +48 -0
  356. package/dist/gltf-loader.cjs.map +7 -0
  357. package/dist/gltf-loader.d.ts +2 -0
  358. package/dist/gltf-loader.d.ts.map +1 -0
  359. package/dist/gltf-loader.js +2 -0
  360. package/dist/gltf-loader.js.map +1 -0
  361. package/dist/gltf-source.cjs +238 -0
  362. package/dist/gltf-source.cjs.map +7 -0
  363. package/dist/gltf-source.d.ts +2 -0
  364. package/dist/gltf-source.d.ts.map +1 -0
  365. package/dist/gltf-source.js +2 -0
  366. package/dist/gltf-source.js.map +1 -0
  367. package/dist/gltf-writer.cjs +69 -0
  368. package/dist/gltf-writer.cjs.map +7 -0
  369. package/dist/gltf-writer.d.ts +2 -0
  370. package/dist/gltf-writer.d.ts.map +1 -0
  371. package/dist/gltf-writer.js +2 -0
  372. package/dist/gltf-writer.js.map +1 -0
  373. package/dist/index.cjs +18 -5
  374. package/dist/index.cjs.map +2 -2
  375. package/dist/index.d.ts +9 -2
  376. package/dist/index.d.ts.map +1 -1
  377. package/dist/index.js +8 -3
  378. package/dist/index.js.map +1 -1
  379. package/dist/libs/DRACO-LICENSE +252 -0
  380. package/dist/libs/README.md +20 -0
  381. package/dist/libs/draco_decoder.js +34 -0
  382. package/dist/libs/draco_decoder.mjs +37 -0
  383. package/dist/libs/draco_decoder.wasm +0 -0
  384. package/dist/libs/draco_decoder_gltf.wasm +0 -0
  385. package/dist/libs/draco_encoder.js +98 -0
  386. package/dist/libs/draco_encoder.mjs +101 -0
  387. package/dist/libs/draco_encoder.wasm +0 -0
  388. package/dist/libs/draco_wasm_wrapper.js +117 -0
  389. package/dist/libs/draco_wasm_wrapper.mjs +120 -0
  390. package/dist/libs/draco_wasm_wrapper_gltf.js +116 -0
  391. package/dist/libs/draco_wasm_wrapper_gltf.mjs +119 -0
  392. package/dist/materialx/parse-materialx.cjs +61 -0
  393. package/dist/materialx/parse-materialx.cjs.map +7 -0
  394. package/dist/materialx/parse-materialx.d.ts +23 -0
  395. package/dist/materialx/parse-materialx.d.ts.map +1 -0
  396. package/dist/materialx/parse-materialx.js +39 -0
  397. package/dist/materialx/parse-materialx.js.map +1 -0
  398. package/dist/materialx/procedural-graph.cjs +77 -0
  399. package/dist/materialx/procedural-graph.cjs.map +7 -0
  400. package/dist/materialx/procedural-graph.d.ts +40 -0
  401. package/dist/materialx/procedural-graph.d.ts.map +1 -0
  402. package/dist/materialx/procedural-graph.js +59 -0
  403. package/dist/materialx/procedural-graph.js.map +1 -0
  404. package/dist/materialx-loader-types.cjs +57 -0
  405. package/dist/materialx-loader-types.cjs.map +7 -0
  406. package/dist/materialx-loader-types.d.ts +34 -0
  407. package/dist/materialx-loader-types.d.ts.map +1 -0
  408. package/dist/materialx-loader-types.js +20 -0
  409. package/dist/materialx-loader-types.js.map +1 -0
  410. package/dist/materialx-loader.cjs +40 -0
  411. package/dist/materialx-loader.cjs.map +7 -0
  412. package/dist/materialx-loader.d.ts +19 -0
  413. package/dist/materialx-loader.d.ts.map +1 -0
  414. package/dist/materialx-loader.js +14 -0
  415. package/dist/materialx-loader.js.map +1 -0
  416. package/dist/mtl-loader-types.cjs +61 -0
  417. package/dist/mtl-loader-types.cjs.map +7 -0
  418. package/dist/mtl-loader-types.d.ts +2 -0
  419. package/dist/mtl-loader-types.d.ts.map +1 -0
  420. package/dist/mtl-loader-types.js +2 -0
  421. package/dist/mtl-loader-types.js.map +1 -0
  422. package/dist/mtl-loader.cjs +47 -0
  423. package/dist/mtl-loader.cjs.map +7 -0
  424. package/dist/mtl-loader.d.ts +2 -0
  425. package/dist/mtl-loader.d.ts.map +1 -0
  426. package/dist/mtl-loader.js +2 -0
  427. package/dist/mtl-loader.js.map +1 -0
  428. package/dist/obj/bundled.cjs +2 -4
  429. package/dist/obj/bundled.cjs.map +2 -2
  430. package/dist/obj/bundled.d.ts +1 -1
  431. package/dist/obj/bundled.d.ts.map +1 -1
  432. package/dist/obj/bundled.js +1 -1
  433. package/dist/obj/bundled.js.map +1 -1
  434. package/dist/obj/index.cjs +0 -6
  435. package/dist/obj/index.cjs.map +3 -3
  436. package/dist/obj/index.d.ts +0 -4
  437. package/dist/obj/index.d.ts.map +1 -1
  438. package/dist/obj/index.js +0 -5
  439. package/dist/obj/index.js.map +1 -1
  440. package/dist/obj/mtl-loader-types.cjs +4 -7
  441. package/dist/obj/mtl-loader-types.cjs.map +2 -2
  442. package/dist/obj/mtl-loader-types.d.ts +2 -22
  443. package/dist/obj/mtl-loader-types.d.ts.map +1 -1
  444. package/dist/obj/mtl-loader-types.js +2 -4
  445. package/dist/obj/mtl-loader-types.js.map +1 -1
  446. package/dist/obj/mtl-loader.cjs +1 -1
  447. package/dist/obj/mtl-loader.cjs.map +2 -2
  448. package/dist/obj/mtl-loader.js +1 -1
  449. package/dist/obj/mtl-loader.js.map +1 -1
  450. package/dist/obj/obj-loader-types.cjs +9 -10
  451. package/dist/obj/obj-loader-types.cjs.map +2 -2
  452. package/dist/obj/obj-loader-types.d.ts +19 -39
  453. package/dist/obj/obj-loader-types.d.ts.map +1 -1
  454. package/dist/obj/obj-loader-types.js +6 -6
  455. package/dist/obj/obj-loader-types.js.map +1 -1
  456. package/dist/obj/obj-loader.cjs +63 -31
  457. package/dist/obj/obj-loader.cjs.map +3 -3
  458. package/dist/obj/obj-loader.d.ts +43 -9
  459. package/dist/obj/obj-loader.d.ts.map +1 -1
  460. package/dist/obj/obj-loader.js +61 -22
  461. package/dist/obj/obj-loader.js.map +1 -1
  462. package/dist/obj/obj-writer.cjs +3 -3
  463. package/dist/obj/obj-writer.cjs.map +2 -2
  464. package/dist/obj/obj-writer.d.ts +5 -4
  465. package/dist/obj/obj-writer.d.ts.map +1 -1
  466. package/dist/obj/obj-writer.js +4 -4
  467. package/dist/obj/obj-writer.js.map +1 -1
  468. package/dist/obj/unbundled.cjs +2 -6
  469. package/dist/obj/unbundled.cjs.map +2 -2
  470. package/dist/obj/unbundled.d.ts +2 -2
  471. package/dist/obj/unbundled.d.ts.map +1 -1
  472. package/dist/obj/unbundled.js +2 -2
  473. package/dist/obj/unbundled.js.map +1 -1
  474. package/dist/obj/workers/obj-worker.cjs +5 -5
  475. package/dist/obj/workers/obj-worker.cjs.map +2 -2
  476. package/dist/obj/workers/obj-worker.js +6 -6
  477. package/dist/obj/workers/obj-worker.js.map +1 -1
  478. package/dist/obj-loader-types.cjs +70 -0
  479. package/dist/obj-loader-types.cjs.map +7 -0
  480. package/dist/obj-loader-types.d.ts +2 -0
  481. package/dist/obj-loader-types.d.ts.map +1 -0
  482. package/dist/obj-loader-types.js +2 -0
  483. package/dist/obj-loader-types.js.map +1 -0
  484. package/dist/obj-loader.cjs +195 -0
  485. package/dist/obj-loader.cjs.map +7 -0
  486. package/dist/obj-loader.d.ts +2 -0
  487. package/dist/obj-loader.d.ts.map +1 -0
  488. package/dist/obj-loader.js +2 -0
  489. package/dist/obj-loader.js.map +1 -0
  490. package/dist/obj-worker.js +1420 -406
  491. package/dist/obj-writer.cjs +167 -0
  492. package/dist/obj-writer.cjs.map +7 -0
  493. package/dist/obj-writer.d.ts +2 -0
  494. package/dist/obj-writer.d.ts.map +1 -0
  495. package/dist/obj-writer.js +2 -0
  496. package/dist/obj-writer.js.map +1 -0
  497. package/dist/stl/parse-stl.cjs +100 -0
  498. package/dist/stl/parse-stl.cjs.map +7 -0
  499. package/dist/stl/parse-stl.d.ts +4 -0
  500. package/dist/stl/parse-stl.d.ts.map +1 -0
  501. package/dist/stl/parse-stl.js +84 -0
  502. package/dist/stl/parse-stl.js.map +1 -0
  503. package/dist/stl-loader-types.cjs +58 -0
  504. package/dist/stl-loader-types.cjs.map +7 -0
  505. package/dist/stl-loader-types.d.ts +32 -0
  506. package/dist/stl-loader-types.d.ts.map +1 -0
  507. package/dist/stl-loader-types.js +25 -0
  508. package/dist/stl-loader-types.js.map +1 -0
  509. package/dist/stl-loader.cjs +38 -0
  510. package/dist/stl-loader.cjs.map +7 -0
  511. package/dist/stl-loader.d.ts +17 -0
  512. package/dist/stl-loader.d.ts.map +1 -0
  513. package/dist/stl-loader.js +13 -0
  514. package/dist/stl-loader.js.map +1 -0
  515. package/dist/usd/index.cjs.map +1 -1
  516. package/dist/usd/index.d.ts +1 -1
  517. package/dist/usd/index.d.ts.map +1 -1
  518. package/dist/usd/lib/parse-usd.cjs +42 -5
  519. package/dist/usd/lib/parse-usd.cjs.map +2 -2
  520. package/dist/usd/lib/parse-usd.d.ts.map +1 -1
  521. package/dist/usd/lib/parse-usd.js +53 -6
  522. package/dist/usd/lib/parse-usd.js.map +1 -1
  523. package/dist/usd/lib/parse-usdc.cjs +187 -0
  524. package/dist/usd/lib/parse-usdc.cjs.map +7 -0
  525. package/dist/usd/lib/parse-usdc.d.ts +4 -0
  526. package/dist/usd/lib/parse-usdc.d.ts.map +1 -0
  527. package/dist/usd/lib/parse-usdc.js +176 -0
  528. package/dist/usd/lib/parse-usdc.js.map +1 -0
  529. package/dist/usd/lib/parse-usdz.cjs +22 -0
  530. package/dist/usd/lib/parse-usdz.cjs.map +2 -2
  531. package/dist/usd/lib/parse-usdz.d.ts.map +1 -1
  532. package/dist/usd/lib/parse-usdz.js +26 -0
  533. package/dist/usd/lib/parse-usdz.js.map +1 -1
  534. package/dist/usd/lib/usd-types.cjs.map +1 -1
  535. package/dist/usd/lib/usd-types.d.ts +14 -1
  536. package/dist/usd/lib/usd-types.d.ts.map +1 -1
  537. package/dist/usd/lib/usd-types.js +1 -1
  538. package/dist/usd/lib/usd-types.js.map +1 -1
  539. package/dist/usd/libs/README.md +27 -0
  540. package/dist/usd/libs/THREE-LICENSE +21 -0
  541. package/dist/usd/libs/usdc-parser.d.ts +78 -0
  542. package/dist/usd/libs/usdc-parser.d.ts.map +1 -0
  543. package/dist/usd/libs/usdc-parser.js +1669 -0
  544. package/dist/usd/libs/usdc-parser.js.map +1 -0
  545. package/dist/usd/usd-loader-types.cjs +5 -5
  546. package/dist/usd/usd-loader-types.cjs.map +2 -2
  547. package/dist/usd/usd-loader-types.d.ts +7 -7
  548. package/dist/usd/usd-loader-types.d.ts.map +1 -1
  549. package/dist/usd/usd-loader-types.js +7 -7
  550. package/dist/usd/usd-loader-types.js.map +1 -1
  551. package/dist/usd/usd-loader.cjs.map +1 -1
  552. package/dist/usd/usd-loader.d.ts +4 -4
  553. package/dist/usd/usd-loader.d.ts.map +1 -1
  554. package/dist/usd/usd-loader.js +2 -2
  555. package/dist/usd/usd-loader.js.map +1 -1
  556. package/dist/usd-loader-types.cjs +69 -0
  557. package/dist/usd-loader-types.cjs.map +7 -0
  558. package/dist/usd-loader-types.d.ts +2 -0
  559. package/dist/usd-loader-types.d.ts.map +1 -0
  560. package/dist/usd-loader-types.js +2 -0
  561. package/dist/usd-loader-types.js.map +1 -0
  562. package/dist/usd-loader.cjs +43 -0
  563. package/dist/usd-loader.cjs.map +7 -0
  564. package/dist/usd-loader.d.ts +2 -0
  565. package/dist/usd-loader.d.ts.map +1 -0
  566. package/dist/usd-loader.js +2 -0
  567. package/dist/usd-loader.js.map +1 -0
  568. package/package.json +144 -72
  569. package/src/draco/bundled.ts +9 -0
  570. package/src/draco/draco-format.ts +20 -0
  571. package/src/draco/draco-javascript-loader-with-parser.ts +30 -0
  572. package/src/draco/draco-libraries.ts +35 -0
  573. package/src/draco/draco-library-options.ts +76 -0
  574. package/src/draco/draco-loader-options.ts +33 -0
  575. package/src/draco/draco-loader-types.ts +77 -0
  576. package/src/draco/draco-loader.ts +45 -0
  577. package/src/draco/draco-wasm-loader-with-parser.ts +31 -0
  578. package/src/draco/draco-writer.ts +254 -0
  579. package/src/draco/draco3d/draco3d-types.ts +498 -0
  580. package/src/draco/draco3d-loader-with-parser.ts +34 -0
  581. package/src/draco/index.ts +42 -0
  582. package/src/draco/lib/draco-builder.ts +935 -0
  583. package/src/draco/lib/draco-library-loader.ts +38 -0
  584. package/src/draco/lib/draco-module-loader.ts +370 -0
  585. package/src/draco/lib/draco-parser.ts +779 -0
  586. package/src/draco/lib/draco-types.ts +72 -0
  587. package/src/draco/lib/parse-draco.ts +52 -0
  588. package/src/draco/lib/utils/get-draco-schema.ts +65 -0
  589. package/src/draco/lib/utils/version.ts +8 -0
  590. package/src/draco/libs/DRACO-LICENSE +252 -0
  591. package/src/draco/libs/README.md +20 -0
  592. package/src/draco/libs/draco_decoder.js +34 -0
  593. package/src/draco/libs/draco_decoder.wasm +0 -0
  594. package/src/draco/libs/draco_decoder_gltf.wasm +0 -0
  595. package/src/draco/libs/draco_encoder.js +98 -0
  596. package/src/draco/libs/draco_encoder.wasm +0 -0
  597. package/src/draco/libs/draco_wasm_wrapper.js +117 -0
  598. package/src/draco/libs/draco_wasm_wrapper_gltf.js +116 -0
  599. package/src/draco/unbundled.ts +6 -0
  600. package/src/draco/workers/draco-worker-node.ts +10 -0
  601. package/src/draco/workers/draco-worker.ts +8 -0
  602. package/src/draco/workers/draco-writer-worker-node.cjs +21 -0
  603. package/src/draco/workers/draco-writer-worker-node.ts +13 -0
  604. package/src/draco/workers/draco-writer-worker.ts +11 -0
  605. package/src/draco-javascript-loader.ts +2 -0
  606. package/src/draco-library-options.ts +6 -0
  607. package/src/draco-loader-types.ts +2 -0
  608. package/src/draco-loader.ts +2 -0
  609. package/src/draco-wasm-loader.ts +2 -0
  610. package/src/draco-writer.ts +2 -0
  611. package/src/draco3d-loader.ts +2 -0
  612. package/src/glb-loader-types.ts +1 -0
  613. package/src/glb-loader.ts +1 -0
  614. package/src/glb-writer.ts +1 -0
  615. package/src/gltf/glb-loader-types.ts +1 -1
  616. package/src/gltf/gltf-loader-types.ts +11 -5
  617. package/src/gltf/gltf-loader.ts +4 -4
  618. package/src/gltf/index.ts +4 -1
  619. package/src/gltf/lib/api/gltf-extensions.ts +7 -2
  620. package/src/gltf/lib/encoders/encode-gltf-draco.ts +2 -2
  621. package/src/gltf/lib/extensions/EXT_texture_webp.ts +3 -0
  622. package/src/gltf/lib/extensions/KHR_accessor_float64.ts +22 -0
  623. package/src/gltf/lib/extensions/KHR_draco_mesh_compression.ts +2 -1
  624. package/src/gltf/lib/extensions/KHR_gaussian_splatting.ts +31 -7
  625. package/src/gltf/lib/extensions/MSFT_texture_dds.ts +52 -0
  626. package/src/gltf/lib/extensions/utils/3d-tiles-utils.ts +5 -1
  627. package/src/gltf/lib/parsers/parse-gltf.ts +38 -6
  628. package/src/gltf/lib/types/gltf-additional-extension-schemas.ts +32 -0
  629. package/src/gltf/lib/types/gltf-ext-gaussian-splatting-schema.ts +1 -1
  630. package/src/gltf/lib/types/gltf-extension-schemas.ts +12 -0
  631. package/src/gltf/lib/types/gltf-json-schema.ts +2 -1
  632. package/src/gltf/lib/types/gltf-texture-procedurals.ts +67 -0
  633. package/src/gltf/lib/types/gltf-types.ts +8 -0
  634. package/src/gltf/lib/types/gltf-zod-schema.ts +7 -1
  635. package/src/gltf/schema.ts +1 -0
  636. package/src/gltf-loader-types.ts +1 -0
  637. package/src/gltf-loader.ts +1 -0
  638. package/src/gltf-source.ts +1 -0
  639. package/src/gltf-writer.ts +1 -0
  640. package/src/index.ts +13 -3
  641. package/src/materialx/README.md +5 -0
  642. package/src/materialx/parse-materialx.ts +70 -0
  643. package/src/materialx/procedural-graph.ts +94 -0
  644. package/src/materialx-loader-types.ts +24 -0
  645. package/src/materialx-loader.ts +15 -0
  646. package/src/mtl-loader-types.ts +1 -0
  647. package/src/mtl-loader.ts +1 -0
  648. package/src/obj/bundled.ts +1 -4
  649. package/src/obj/index.ts +0 -6
  650. package/src/obj/mtl-loader-types.ts +1 -4
  651. package/src/obj/mtl-loader.ts +1 -1
  652. package/src/obj/obj-loader-types.ts +11 -11
  653. package/src/obj/obj-loader.ts +87 -37
  654. package/src/obj/obj-writer.ts +12 -8
  655. package/src/obj/unbundled.ts +2 -2
  656. package/src/obj/workers/obj-worker.ts +6 -6
  657. package/src/obj-loader-types.ts +1 -0
  658. package/src/obj-loader.ts +1 -0
  659. package/src/obj-writer.ts +1 -0
  660. package/src/stl/parse-stl.ts +90 -0
  661. package/src/stl-loader-types.ts +28 -0
  662. package/src/stl-loader.ts +12 -0
  663. package/src/usd/index.ts +1 -0
  664. package/src/usd/lib/parse-usd.ts +68 -7
  665. package/src/usd/lib/parse-usdc.ts +188 -0
  666. package/src/usd/lib/parse-usdz.ts +28 -0
  667. package/src/usd/lib/usd-types.ts +16 -2
  668. package/src/usd/libs/README.md +27 -0
  669. package/src/usd/libs/THREE-LICENSE +21 -0
  670. package/src/usd/libs/usdc-parser.d.ts +18 -0
  671. package/src/usd/libs/usdc-parser.js +1669 -0
  672. package/src/usd/usd-loader-types.ts +6 -6
  673. package/src/usd/usd-loader.ts +2 -2
  674. package/src/usd-loader-types.ts +1 -0
  675. package/src/usd-loader.ts +1 -0
@@ -0,0 +1,94 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+
4
+ /** Typed connection to one node output. */
5
+ export interface ProceduralConnection {
6
+ /** Stable identifier of the upstream node. */
7
+ node: string;
8
+ /** Name of its output port. */
9
+ output: string;
10
+ }
11
+
12
+ /** Input supplied by a constant or another node. */
13
+ export interface ProceduralInput {
14
+ /** Declared value type. */
15
+ type: string;
16
+ /** Constant value, retained without implicit conversion. */
17
+ value?: unknown;
18
+ /** Optional upstream connection. */
19
+ connection?: ProceduralConnection;
20
+ }
21
+
22
+ /** Renderer-independent operation with explicitly declared ports. */
23
+ export interface ProceduralNode {
24
+ /** Stable node identifier, unique within the graph. */
25
+ id: string;
26
+ /** Operation identifier for a downstream implementation registry. */
27
+ operation: string;
28
+ /** Named inputs. */
29
+ inputs: Record<string, ProceduralInput>;
30
+ /** Named output value types. */
31
+ outputs: Record<string, string>;
32
+ }
33
+
34
+ /** Graph contract independent of GPU resources or shader languages. */
35
+ export interface ProceduralGraph {
36
+ /** Nodes in authored order. */
37
+ nodes: ProceduralNode[];
38
+ /** Named graph outputs and their upstream connections. */
39
+ outputs: Record<string, ProceduralConnection>;
40
+ }
41
+
42
+ /**
43
+ * Validates explicit references and exact port types, returning dependency-first nodes.
44
+ * Does not infer conversions, resolve MaterialX definitions, or evaluate operations.
45
+ */
46
+ export function orderProceduralGraph(graph: ProceduralGraph): ProceduralNode[] {
47
+ const nodes = new Map<string, ProceduralNode>();
48
+ for (const node of graph.nodes) {
49
+ if (!node.id || nodes.has(node.id))
50
+ throw new Error('Procedural graph: duplicate or empty node ID.');
51
+ nodes.set(node.id, node);
52
+ }
53
+ const dependencies = new Map<string, Set<string>>();
54
+ const dependents = new Map<string, string[]>();
55
+ for (const node of graph.nodes) {
56
+ const upstream = new Set<string>();
57
+ for (const input of Object.values(node.inputs)) {
58
+ if (!input.connection) continue;
59
+ if (Object.hasOwn(input, 'value'))
60
+ throw new Error('Procedural graph: connected input also has a value.');
61
+ const source = resolveOutput(input.connection);
62
+ if (source.outputs[input.connection.output] !== input.type) {
63
+ throw new Error('Procedural graph: incompatible connection types.');
64
+ }
65
+ upstream.add(source.id);
66
+ }
67
+ dependencies.set(node.id, upstream);
68
+ for (const identifier of upstream) {
69
+ const downstream = dependents.get(identifier) || [];
70
+ downstream.push(node.id);
71
+ dependents.set(identifier, downstream);
72
+ }
73
+ }
74
+ for (const output of Object.values(graph.outputs)) resolveOutput(output);
75
+ const ordered = graph.nodes.filter(node => dependencies.get(node.id)!.size === 0);
76
+ for (let index = 0; index < ordered.length; index++) {
77
+ for (const identifier of dependents.get(ordered[index].id) || []) {
78
+ const upstream = dependencies.get(identifier)!;
79
+ upstream.delete(ordered[index].id);
80
+ if (!upstream.size) ordered.push(nodes.get(identifier)!);
81
+ }
82
+ }
83
+ if (ordered.length !== graph.nodes.length) throw new Error('Procedural graph: cycle detected.');
84
+ return ordered;
85
+
86
+ /** Resolves an explicitly named output without accepting inherited properties. */
87
+ function resolveOutput(connection: ProceduralConnection): ProceduralNode {
88
+ const node = nodes.get(connection.node);
89
+ if (!node || !Object.hasOwn(node.outputs, connection.output)) {
90
+ throw new Error('Procedural graph: missing node or output.');
91
+ }
92
+ return node;
93
+ }
94
+ }
@@ -0,0 +1,24 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ import type {MaterialXDocument} from './materialx/parse-materialx';
4
+
5
+ /** Loads the parser-bearing MaterialX implementation. */
6
+ async function preload() {
7
+ const {MaterialXLoaderWithParser} = await import('@loaders.gl/scene/materialx-loader');
8
+ return MaterialXLoaderWithParser;
9
+ }
10
+
11
+ /** Metadata-only loader for MaterialX XML documents. */
12
+ export const MaterialXLoader = {
13
+ name: 'MaterialX',
14
+ id: 'materialx',
15
+ module: 'scene',
16
+ version: 'latest',
17
+ extensions: ['mtlx'],
18
+ mimeTypes: ['application/xml'],
19
+ text: true,
20
+ dataType: null as unknown as MaterialXDocument,
21
+ batchType: null as never,
22
+ options: {},
23
+ preload
24
+ } as const;
@@ -0,0 +1,15 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ import {MaterialXLoader} from './materialx-loader-types';
4
+ import {parseMaterialX} from './materialx/parse-materialx';
5
+
6
+ const {preload: _preload, ...metadata} = MaterialXLoader;
7
+
8
+ /** Parser-bearing loader for MaterialX XML, using the native XML parser. */
9
+ export const MaterialXLoaderWithParser = {
10
+ ...metadata,
11
+ parse: async (data: ArrayBuffer) => parseMaterialX(new TextDecoder().decode(data)),
12
+ parseSync: (data: ArrayBuffer) => parseMaterialX(new TextDecoder().decode(data)),
13
+ parseText: async (text: string) => parseMaterialX(text),
14
+ parseTextSync: parseMaterialX
15
+ } as const;
@@ -0,0 +1 @@
1
+ export * from './obj/mtl-loader-types.js';
@@ -0,0 +1 @@
1
+ export * from './obj/mtl-loader.js';
@@ -4,10 +4,7 @@
4
4
 
5
5
  export {OBJFormat} from './obj-format';
6
6
  export type {OBJLoaderOptions} from './obj-loader-types';
7
- export {
8
- OBJLoaderWithParser as OBJWorkerLoader,
9
- OBJLoaderWithParser as OBJLoader
10
- } from './obj-loader';
7
+ export {OBJLoaderWithParser as OBJLoader} from './obj-loader';
11
8
  export {MTLFormat} from './mtl-format';
12
9
  export type {MTLLoaderOptions} from './mtl-loader';
13
10
  export {
package/src/obj/index.ts CHANGED
@@ -15,9 +15,3 @@ export {OBJWriter} from './obj-writer';
15
15
  export {MTLFormat} from './mtl-format';
16
16
  export type {MTLLoaderOptions} from './mtl-loader-types';
17
17
  export {MTLLoader} from './mtl-loader-types';
18
-
19
- // DEPRECATED EXPORTS
20
- /** @deprecated Use OBJLoader. */
21
- export {OBJWorkerLoader} from './obj-loader-types';
22
- /** @deprecated Use MTLLoader. */
23
- export {MTLWorkerLoader} from './mtl-loader-types';
@@ -18,7 +18,7 @@ export type MTLLoaderOptions = LoaderOptions & {
18
18
  * Preloads the parser-bearing MTL loader implementation.
19
19
  */
20
20
  async function preload() {
21
- const {MTLLoaderWithParser} = await import('@loaders.gl/scene/obj/mtl-loader');
21
+ const {MTLLoaderWithParser} = await import('@loaders.gl/scene/mtl-loader');
22
22
  return MTLLoaderWithParser;
23
23
  }
24
24
 
@@ -41,6 +41,3 @@ export const MTLLoader = {
41
41
  },
42
42
  preload
43
43
  } as const satisfies Loader<MTLMaterial[], never, LoaderOptions>;
44
-
45
- /** @deprecated Use MTLLoader. */
46
- export const MTLWorkerLoader = MTLLoader;
@@ -5,7 +5,7 @@
5
5
  import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/core/loader-utils';
6
6
  import type {MTLMaterial, ParseMTLOptions} from './lib/parse-mtl';
7
7
  import {parseMTL} from './lib/parse-mtl';
8
- import {MTLWorkerLoader as MTLWorkerLoaderMetadata} from './mtl-loader-types';
8
+ import {MTLLoader as MTLWorkerLoaderMetadata} from './mtl-loader-types';
9
9
  import {MTLLoader as MTLLoaderMetadata} from './mtl-loader-types';
10
10
 
11
11
  const {preload: _MTLWorkerLoaderPreload, ...MTLWorkerLoaderMetadataWithoutPreload} =
@@ -2,10 +2,11 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
+ import type {Table, RecordBatch} from 'apache-arrow';
5
6
  import type {Loader, LoaderOptions} from '@loaders.gl/core/loader-utils';
6
- import type {Mesh, MeshArrowTable, ArrowTableBatch} from '@loaders.gl/core/schema';
7
+ import type {Mesh} from '@loaders.gl/core/schema';
7
8
  import {OBJFormat} from './obj-format';
8
- import {serializeArrowWorkerTable} from '@loaders.gl/core/schema-utils/arrow-transport';
9
+ import {serializeArrowWorkerTable} from '@loaders.gl/core/arrow-worker-transport';
9
10
 
10
11
  // __VERSION__ is injected by babel-plugin-version-inline
11
12
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -14,7 +15,7 @@ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
14
15
  export type OBJLoaderOptions = LoaderOptions & {
15
16
  obj?: {
16
17
  /** Output shape. Defaults to a Mesh Arrow table. */
17
- shape?: 'mesh' | 'arrow-table';
18
+ shape?: 'mesh' | 'arrow';
18
19
  /** Treat OBJ vertex records as a point cloud and stream `v` rows in batches. */
19
20
  pointCloud?: boolean;
20
21
  /** Override the URL to the worker bundle (by default loads from unpkg.com) */
@@ -35,13 +36,13 @@ export type OBJMeshBatch = {
35
36
  };
36
37
 
37
38
  /** Public OBJ batch output shapes. */
38
- export type OBJParsedBatch = OBJMeshBatch | ArrowTableBatch;
39
+ export type OBJParsedBatch = OBJMeshBatch | RecordBatch;
39
40
 
40
41
  /**
41
42
  * Preloads the parser-bearing OBJ loader implementation.
42
43
  */
43
44
  async function preload() {
44
- const {OBJLoaderWithParser} = await import('@loaders.gl/scene/obj/obj-loader');
45
+ const {OBJLoaderWithParser} = await import('@loaders.gl/scene/obj-loader');
45
46
  return OBJLoaderWithParser;
46
47
  }
47
48
 
@@ -49,9 +50,11 @@ async function preload() {
49
50
  * Metadata-only worker loader for the OBJ geometry format
50
51
  */
51
52
  export const OBJLoader = {
53
+ defaultShape: 'arrow',
54
+ supportsNativeArrow: true,
52
55
  ...OBJFormat,
53
56
 
54
- dataType: null as unknown as Mesh | MeshArrowTable,
57
+ dataType: null as unknown as Mesh | Table,
55
58
  batchType: null as unknown as OBJParsedBatch,
56
59
  version: VERSION,
57
60
  worker: true,
@@ -61,15 +64,12 @@ export const OBJLoader = {
61
64
  text: true,
62
65
  testText: testOBJFile,
63
66
  options: {
64
- obj: {shape: 'arrow-table'}
67
+ obj: {shape: 'arrow'}
65
68
  },
66
69
  preload
67
- } as const satisfies Loader<Mesh | MeshArrowTable, OBJParsedBatch, OBJLoaderOptions>;
70
+ } as const satisfies Loader<Mesh | Table, OBJParsedBatch, OBJLoaderOptions>;
68
71
 
69
72
  function testOBJFile(text: string): boolean {
70
73
  // TODO - There could be comment line first
71
74
  return text[0] === 'v';
72
75
  }
73
-
74
- /** @deprecated Use OBJLoader. */
75
- export const OBJWorkerLoader = OBJLoader;
@@ -2,7 +2,9 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {OBJLoaderOptions, OBJParsedBatch} from './obj-loader-types';
5
+ import {refineArrowTableBatches, makeArrowMetadataBatch} from '@loaders.gl/core/schema-utils';
6
+ import type {Table} from 'apache-arrow';
7
+ import type {OBJLoaderOptions, OBJMeshBatch, OBJParsedBatch} from './obj-loader-types';
6
8
 
7
9
  import {
8
10
  concatenateArrayBuffersAsync,
@@ -11,13 +13,13 @@ import {
11
13
  makeTableScanBatch,
12
14
  type LoaderWithParser
13
15
  } from '@loaders.gl/core/loader-utils';
14
- import type {Mesh, MeshArrowTable} from '@loaders.gl/core/schema';
16
+ import type {Mesh, MeshArrowTable, ArrowTableBatch} from '@loaders.gl/core/schema';
15
17
  import {
16
18
  deserializeArrowWorkerTable,
17
19
  serializeArrowWorkerTable
18
- } from '@loaders.gl/core/schema-utils/arrow-transport';
20
+ } from '@loaders.gl/core/arrow-worker-transport';
19
21
  import {
20
- convertMeshToTable,
22
+ convertMeshToArrowTableWrapper,
21
23
  convertTableToMesh,
22
24
  getMeshBoundingBox
23
25
  } from '@loaders.gl/core/schema-utils';
@@ -28,7 +30,7 @@ import {OBJLoader as OBJLoaderMetadata} from './obj-loader-types';
28
30
  const {preload: _OBJLoaderPreload, ...OBJLoaderMetadataWithoutPreload} = OBJLoaderMetadata;
29
31
 
30
32
  function convertOBJMesh(mesh: Mesh, options?: OBJLoaderOptions): Mesh | MeshArrowTable {
31
- const table = convertMeshToTable(mesh, 'arrow-table');
33
+ const table = convertMeshToArrowTableWrapper(mesh);
32
34
  return options?.obj?.shape === 'mesh' ? convertTableToMesh(table) : table;
33
35
  }
34
36
 
@@ -37,44 +39,29 @@ function convertOBJMesh(mesh: Mesh, options?: OBJLoaderOptions): Mesh | MeshArro
37
39
  /**
38
40
  * Loader for the OBJ geometry format
39
41
  */
40
- export const OBJLoaderWithParser = {
42
+ export const OBJColumnLoader = {
41
43
  ...OBJLoaderMetadataWithoutPreload,
44
+ dataType: null as unknown as Mesh | MeshArrowTable,
45
+ batchType: null as unknown as OBJMeshBatch | ArrowTableBatch,
42
46
  parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>
43
47
  convertOBJMesh(parseOBJ(new TextDecoder().decode(arrayBuffer), options), options),
44
48
  parseTextSync: (text: string, options?: OBJLoaderOptions) =>
45
49
  convertOBJMesh(parseOBJ(text, options), options),
46
- parseInBatches: async function* (
47
- arrayBuffer:
48
- | AsyncIterable<ArrayBufferLike | ArrayBufferView>
49
- | Iterable<ArrayBufferLike | ArrayBufferView>,
50
- options
51
- ): AsyncIterable<OBJParsedBatch> {
52
- const batchSize = getNumericBatchSize(options);
53
- if (options?.obj?.pointCloud) {
54
- const textIterator = makeTextDecoderIterator(arrayBuffer as AsyncIterable<ArrayBuffer>);
55
- const lineIterator = makeLineIterator(textIterator);
56
- yield* parseOBJPointCloudLinesInBatches(lineIterator, options, batchSize);
57
- return;
58
- }
59
-
60
- const data = await concatenateArrayBuffersAsync(arrayBuffer);
61
- const text = new TextDecoder().decode(data);
62
- if (hasOBJGeometryRecords(text)) {
63
- yield makeOBJBatch(parseOBJ(text, options), options);
64
- return;
65
- }
66
-
67
- yield* parseOBJPointCloudInBatches(text, options, batchSize);
68
- },
50
+ parseInBatches: (input, options) =>
51
+ refineArrowTableBatches(parseOBJWithMetadataInBatches(input, options)),
69
52
  serializeWorkerResult: serializeArrowWorkerTable,
70
53
  deserializeWorkerResult: deserializeOBJWorkerResult,
71
54
  serializeWorkerBatch: serializeArrowWorkerTable,
72
55
  deserializeWorkerBatch: deserializeOBJWorkerBatch
73
- } as const satisfies LoaderWithParser<Mesh | MeshArrowTable, OBJParsedBatch, OBJLoaderOptions>;
56
+ } as const satisfies LoaderWithParser<
57
+ Mesh | MeshArrowTable,
58
+ OBJMeshBatch | ArrowTableBatch,
59
+ OBJLoaderOptions
60
+ >;
74
61
 
75
62
  /** Returns a numeric batch size when batching has an explicit row count. */
76
63
  function getNumericBatchSize(options?: OBJLoaderOptions): number | undefined {
77
- const batchSize = options?.batchSize ?? options?.core?.batchSize;
64
+ const batchSize = options?.core?.batchSize;
78
65
  return typeof batchSize === 'number' ? batchSize : undefined;
79
66
  }
80
67
 
@@ -89,7 +76,7 @@ function* parseOBJPointCloudInBatches(
89
76
  text: string,
90
77
  options?: OBJLoaderOptions,
91
78
  batchSize?: number
92
- ): Iterable<OBJParsedBatch> {
79
+ ): Iterable<OBJMeshBatch | ArrowTableBatch> {
93
80
  const vertexLines = text.split(/\r?\n/).filter(line => line.trimStart().startsWith('v '));
94
81
  yield* makeOBJPointCloudBatches(vertexLines, options, batchSize);
95
82
  }
@@ -98,7 +85,7 @@ async function* parseOBJPointCloudLinesInBatches(
98
85
  lines: AsyncIterable<string>,
99
86
  options?: OBJLoaderOptions,
100
87
  batchSize?: number
101
- ): AsyncIterable<OBJParsedBatch> {
88
+ ): AsyncIterable<OBJMeshBatch | ArrowTableBatch> {
102
89
  const normalizedBatchSize = batchSize || 1000;
103
90
  let vertexLines: string[] = [];
104
91
 
@@ -122,7 +109,7 @@ function* makeOBJPointCloudBatches(
122
109
  vertexLines: string[],
123
110
  options?: OBJLoaderOptions,
124
111
  batchSize?: number
125
- ): Iterable<OBJParsedBatch> {
112
+ ): Iterable<OBJMeshBatch | ArrowTableBatch> {
126
113
  const normalizedBatchSize = batchSize || vertexLines.length || 1;
127
114
 
128
115
  for (let rowIndex = 0; rowIndex < vertexLines.length; rowIndex += normalizedBatchSize) {
@@ -170,8 +157,8 @@ function parseOBJPointCloudMesh(vertexLines: string[]): Mesh {
170
157
  };
171
158
  }
172
159
 
173
- function makeOBJBatch(mesh: Mesh, options?: OBJLoaderOptions): OBJParsedBatch {
174
- const table = convertMeshToTable(mesh, 'arrow-table');
160
+ function makeOBJBatch(mesh: Mesh, options?: OBJLoaderOptions): OBJMeshBatch | ArrowTableBatch {
161
+ const table = convertMeshToArrowTableWrapper(mesh);
175
162
  if (options?.obj?.shape === 'mesh') {
176
163
  const convertedMesh = convertTableToMesh(table);
177
164
  return {
@@ -195,9 +182,72 @@ function deserializeOBJWorkerResult(
195
182
  }
196
183
 
197
184
  /** Restores the OBJ mesh batch envelope after caller-side conversion. */
198
- function deserializeOBJWorkerBatch(result: unknown, options?: OBJLoaderOptions): OBJParsedBatch {
185
+ function deserializeOBJWorkerBatch(
186
+ result: unknown,
187
+ options?: OBJLoaderOptions
188
+ ): OBJMeshBatch | ArrowTableBatch {
199
189
  const table = deserializeArrowWorkerTable(result);
200
190
  if (options?.obj?.shape !== 'mesh') return table;
201
191
  const mesh = convertTableToMesh(table);
202
192
  return {shape: 'mesh', batchType: 'data', data: mesh, length: table.length};
203
193
  }
194
+
195
+ /** Parses OBJ batches before shared cumulative metadata refinement. */
196
+ async function* parseOBJWithMetadataInBatches(
197
+ arrayBuffer:
198
+ | AsyncIterable<ArrayBufferLike | ArrayBufferView>
199
+ | Iterable<ArrayBufferLike | ArrayBufferView>,
200
+ options?: OBJLoaderOptions
201
+ ): AsyncIterable<OBJMeshBatch | ArrowTableBatch> {
202
+ const batchSize = getNumericBatchSize(options);
203
+ if (options?.obj?.pointCloud) {
204
+ const textIterator = makeTextDecoderIterator(arrayBuffer as AsyncIterable<ArrayBuffer>);
205
+ const lineIterator = makeLineIterator(textIterator);
206
+ yield* parseOBJPointCloudLinesInBatches(lineIterator, options, batchSize);
207
+ return;
208
+ }
209
+
210
+ const data = await concatenateArrayBuffersAsync(arrayBuffer);
211
+ const text = new TextDecoder().decode(data);
212
+ if (hasOBJGeometryRecords(text)) {
213
+ yield makeOBJBatch(parseOBJ(text, options), options);
214
+ return;
215
+ }
216
+
217
+ yield* parseOBJPointCloudInBatches(text, options, batchSize);
218
+ }
219
+
220
+ /** Exposes native Arrow output while retaining the worker's column protocol. */
221
+ export const OBJLoaderWithParser = {
222
+ ...OBJColumnLoader,
223
+ dataType: OBJLoaderMetadata.dataType,
224
+ batchType: OBJLoaderMetadata.batchType,
225
+ parse: async (input: ArrayBuffer, options?: OBJLoaderOptions) =>
226
+ unwrapOBJTable(await OBJColumnLoader.parse(input, options)),
227
+ parseTextSync: (input: string, options?: OBJLoaderOptions) =>
228
+ unwrapOBJTable(OBJColumnLoader.parseTextSync(input, options)),
229
+ async *parseInBatches(input, options) {
230
+ for await (const batch of OBJColumnLoader.parseInBatches(input, options)) {
231
+ if ('shape' in batch && batch.shape === 'arrow-table') {
232
+ if (batch.data.batches.length) yield* batch.data.batches;
233
+ else yield makeArrowMetadataBatch(batch.data.schema);
234
+ } else yield batch;
235
+ }
236
+ },
237
+ deserializeWorkerResult: (result: unknown, options?: OBJLoaderOptions) =>
238
+ unwrapOBJTable(OBJColumnLoader.deserializeWorkerResult(result, options)),
239
+ deserializeWorkerBatch(result: unknown, options?: OBJLoaderOptions) {
240
+ const batch = OBJColumnLoader.deserializeWorkerBatch(result, options);
241
+ return 'shape' in batch && batch.shape === 'arrow-table'
242
+ ? (batch.data.batches[0] ?? makeArrowMetadataBatch(batch.data.schema))
243
+ : batch;
244
+ }
245
+ } as const satisfies LoaderWithParser<Mesh | Table, OBJParsedBatch, OBJLoaderOptions>;
246
+
247
+ /** Returns the Arrow table with its file metadata or the requested mesh. */
248
+ function unwrapOBJTable(result: Mesh | MeshArrowTable): Mesh | Table {
249
+ if ('shape' in result && result.shape === 'arrow-table') {
250
+ return result.data;
251
+ }
252
+ return result as Mesh;
253
+ }
@@ -2,9 +2,10 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
+ import type {Table} from 'apache-arrow';
5
6
  import type {WriterOptions, WriterWithEncoder} from '@loaders.gl/core/loader-utils';
6
7
  import type {Mesh, MeshArrowTable, MeshAttribute} from '@loaders.gl/core/schema';
7
- import {convertMeshToTable, convertTableToMesh} from '@loaders.gl/core/schema-utils';
8
+ import {convertMeshToArrowTableWrapper, convertTableToMesh} from '@loaders.gl/core/schema-utils';
8
9
  import {OBJFormat} from './obj-format';
9
10
 
10
11
  // __VERSION__ is injected by babel-plugin-version-inline
@@ -22,7 +23,7 @@ export type OBJWriterOptions = WriterOptions & {
22
23
  */
23
24
  export const OBJWriter = {
24
25
  ...OBJFormat,
25
- dataType: null as unknown as Mesh | MeshArrowTable,
26
+ dataType: null as unknown as Mesh | MeshArrowTable | Table,
26
27
  batchType: null as never,
27
28
  version: VERSION,
28
29
  options: {
@@ -32,16 +33,19 @@ export const OBJWriter = {
32
33
  encode: async (data, options) => encodeOBJSync(data, options),
33
34
  encodeSync: encodeOBJSync,
34
35
  encodeTextSync: encodeOBJ
35
- } as const satisfies WriterWithEncoder<Mesh | MeshArrowTable, never, OBJWriterOptions>;
36
+ } as const satisfies WriterWithEncoder<Mesh | MeshArrowTable | Table, never, OBJWriterOptions>;
36
37
 
37
38
  /** Encode mesh category data as OBJ bytes. */
38
- function encodeOBJSync(data: Mesh | MeshArrowTable, options?: OBJWriterOptions): ArrayBuffer {
39
+ function encodeOBJSync(
40
+ data: Mesh | MeshArrowTable | Table,
41
+ options?: OBJWriterOptions
42
+ ): ArrayBuffer {
39
43
  const text = encodeOBJ(data, options);
40
44
  return new TextEncoder().encode(text).buffer;
41
45
  }
42
46
 
43
47
  /** Encode mesh category data as OBJ text. */
44
- function encodeOBJ(data: Mesh | MeshArrowTable, options?: OBJWriterOptions): string {
48
+ function encodeOBJ(data: Mesh | MeshArrowTable | Table, options?: OBJWriterOptions): string {
45
49
  const mesh = convertTableToMesh(normalizeMeshArrowTable(data));
46
50
  const positionAttribute = getRequiredAttribute(mesh, 'POSITION');
47
51
  const normalAttribute = mesh.attributes.NORMAL;
@@ -118,11 +122,11 @@ function encodeOBJ(data: Mesh | MeshArrowTable, options?: OBJWriterOptions): str
118
122
  }
119
123
 
120
124
  /** Return mesh data as a MeshArrowTable, converting plain Mesh data first. */
121
- function normalizeMeshArrowTable(data: Mesh | MeshArrowTable): MeshArrowTable {
122
- if ('shape' in data && data.shape === 'arrow-table') {
125
+ function normalizeMeshArrowTable(data: Mesh | MeshArrowTable | Table): MeshArrowTable | Table {
126
+ if (!('attributes' in data)) {
123
127
  return data;
124
128
  }
125
- return convertMeshToTable(data as Mesh, 'arrow-table');
129
+ return convertMeshToArrowTableWrapper(data as Mesh);
126
130
  }
127
131
 
128
132
  /** Return a required mesh attribute or throw a format-specific error. */
@@ -4,7 +4,7 @@
4
4
 
5
5
  export {OBJFormat} from './obj-format';
6
6
  export type {OBJLoaderOptions} from './obj-loader-types';
7
- export {OBJWorkerLoader, OBJLoader} from './obj-loader-types';
7
+ export {OBJLoader} from './obj-loader-types';
8
8
  export {MTLFormat} from './mtl-format';
9
9
  export type {MTLLoaderOptions} from './mtl-loader-types';
10
- export {MTLWorkerLoader, MTLLoader} from './mtl-loader-types';
10
+ export {MTLLoader} from './mtl-loader-types';
@@ -3,22 +3,22 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import {createLoaderWorker} from '@loaders.gl/core/loader-utils';
6
- import {OBJLoaderWithParser} from '../obj-loader';
6
+ import {OBJColumnLoader} from '../obj-loader';
7
7
 
8
8
  createLoaderWorker({
9
- ...OBJLoaderWithParser,
9
+ ...OBJColumnLoader,
10
10
  /** Always returns columnar data; legacy mesh conversion runs on the caller. */
11
11
  parse(input, options) {
12
- return OBJLoaderWithParser.parse(input, {
12
+ return OBJColumnLoader.parse(input, {
13
13
  ...options,
14
- obj: {...options?.obj, shape: 'arrow-table'}
14
+ obj: {...options?.obj, shape: 'arrow'}
15
15
  });
16
16
  },
17
17
  /** Keeps one columnar parser alive for the entire worker input stream. */
18
18
  parseInBatches(input, options) {
19
- return OBJLoaderWithParser.parseInBatches(input, {
19
+ return OBJColumnLoader.parseInBatches(input, {
20
20
  ...options,
21
- obj: {...options?.obj, shape: 'arrow-table'}
21
+ obj: {...options?.obj, shape: 'arrow'}
22
22
  });
23
23
  }
24
24
  });
@@ -0,0 +1 @@
1
+ export * from './obj/obj-loader-types.js';
@@ -0,0 +1 @@
1
+ export * from './obj/obj-loader.js';
@@ -0,0 +1 @@
1
+ export * from './obj/obj-writer.js';
@@ -0,0 +1,90 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) vis.gl contributors
3
+ // loaders.gl
4
+ import type {Mesh} from '@loaders.gl/core/schema';
5
+ import {deduceMeshSchema, getMeshBoundingBox} from '@loaders.gl/core/schema-utils';
6
+
7
+ /** Parses ASCII or little-endian binary STL without changing authored normals. */
8
+ export function parseSTL(data: ArrayBuffer): Mesh {
9
+ const view = new DataView(data);
10
+ const binary = data.byteLength >= 84 && 84 + view.getUint32(80, true) * 50 === data.byteLength;
11
+ let positions: Float32Array;
12
+ let normals: Float32Array;
13
+ let header: string;
14
+ if (binary) {
15
+ const triangleCount = view.getUint32(80, true);
16
+ positions = new Float32Array(triangleCount * 9);
17
+ normals = new Float32Array(triangleCount * 9);
18
+ header = new TextDecoder().decode(data.slice(0, 80));
19
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
20
+ const offset = 84 + triangle * 50;
21
+ for (let component = 0; component < 9; component++) {
22
+ positions[triangle * 9 + component] = view.getFloat32(offset + 12 + component * 4, true);
23
+ normals[triangle * 9 + component] = view.getFloat32(offset + (component % 3) * 4, true);
24
+ }
25
+ }
26
+ } else {
27
+ const lines = new TextDecoder()
28
+ .decode(data)
29
+ .trim()
30
+ .split(/\r?\n/)
31
+ .map(line => line.trim())
32
+ .filter(Boolean);
33
+ const vertices: number[] = [];
34
+ const normalValues: number[] = [];
35
+ header = lines[0] || '';
36
+ let lineIndex = 0;
37
+ while (lineIndex < lines.length) {
38
+ if (!/^solid(?:\s|$)/i.test(lines[lineIndex++]))
39
+ throw new Error('STL: expected solid header or exact binary length');
40
+ while (lineIndex < lines.length && !/^endsolid(?:\s|$)/i.test(lines[lineIndex])) {
41
+ const normal = parseVector(lines[lineIndex++], 'facet normal');
42
+ if (!/^outer\s+loop$/i.test(lines[lineIndex++] || ''))
43
+ throw new Error('STL: expected outer loop');
44
+ for (let vertex = 0; vertex < 3; vertex++) {
45
+ vertices.push(...parseVector(lines[lineIndex++], 'vertex'));
46
+ normalValues.push(...normal);
47
+ }
48
+ if (
49
+ !/^endloop$/i.test(lines[lineIndex++] || '') ||
50
+ !/^endfacet$/i.test(lines[lineIndex++] || '')
51
+ )
52
+ throw new Error('STL: incomplete facet');
53
+ }
54
+ if (lineIndex >= lines.length) throw new Error('STL: missing endsolid');
55
+ lineIndex++;
56
+ }
57
+ if (!lines.length) throw new Error('STL: empty input');
58
+ positions = new Float32Array(vertices);
59
+ normals = new Float32Array(normalValues);
60
+ }
61
+ if (!positions.every(Number.isFinite) || !normals.every(Number.isFinite))
62
+ throw new Error('STL: non-finite coordinates');
63
+ const attributes = {POSITION: {value: positions, size: 3}, NORMAL: {value: normals, size: 3}};
64
+ return {
65
+ topology: 'triangle-list',
66
+ mode: 4,
67
+ attributes,
68
+ schema: deduceMeshSchema(attributes),
69
+ header: {
70
+ vertexCount: positions.length / 3,
71
+ boundingBox: getMeshBoundingBox(attributes) ?? undefined
72
+ },
73
+ loaderData: {header, format: binary ? 'binary' : 'ascii'}
74
+ };
75
+ }
76
+
77
+ /** Reads exactly three finite decimal components after an ASCII record prefix. */
78
+ function parseVector(line: string | undefined, prefix: string): number[] {
79
+ const tokens = line?.split(/\s+/) || [];
80
+ const prefixTokens = prefix.split(' ');
81
+ const components = tokens.slice(prefixTokens.length);
82
+ if (
83
+ prefixTokens.some((token, index) => tokens[index]?.toLowerCase() !== token) ||
84
+ components.length !== 3 ||
85
+ components.some(value => !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(value))
86
+ ) {
87
+ throw new Error(`STL: invalid ${prefix} record`);
88
+ }
89
+ return components.map(Number);
90
+ }