@loaders.gl/pointclouds 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 (372) hide show
  1. package/LAS-README.md +1 -1
  2. package/PCD-README.md +1 -1
  3. package/PLY-README.md +1 -1
  4. package/README.md +5 -1
  5. package/dist/dist.dev.js +3584 -2211
  6. package/dist/dist.min.js +20 -20
  7. package/dist/index.cjs +0 -6
  8. package/dist/index.cjs.map +2 -2
  9. package/dist/index.d.ts +3 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -3
  12. package/dist/index.js.map +1 -1
  13. package/dist/las/bundled.cjs +0 -3
  14. package/dist/las/bundled.cjs.map +2 -2
  15. package/dist/las/bundled.d.ts +0 -1
  16. package/dist/las/bundled.d.ts.map +1 -1
  17. package/dist/las/bundled.js +0 -1
  18. package/dist/las/bundled.js.map +1 -1
  19. package/dist/las/index.cjs +0 -3
  20. package/dist/las/index.cjs.map +3 -3
  21. package/dist/las/index.d.ts +0 -2
  22. package/dist/las/index.d.ts.map +1 -1
  23. package/dist/las/index.js +0 -3
  24. package/dist/las/index.js.map +1 -1
  25. package/dist/las/las-copc-loader-types.cjs +1 -1
  26. package/dist/las/las-copc-loader-types.cjs.map +2 -2
  27. package/dist/las/las-copc-loader-types.d.ts +13 -9
  28. package/dist/las/las-copc-loader-types.d.ts.map +1 -1
  29. package/dist/las/las-copc-loader-types.js +1 -1
  30. package/dist/las/las-copc-loader-types.js.map +1 -1
  31. package/dist/las/las-copc-loader.cjs +8 -5
  32. package/dist/las/las-copc-loader.cjs.map +2 -2
  33. package/dist/las/las-copc-loader.d.ts +8 -6
  34. package/dist/las/las-copc-loader.d.ts.map +1 -1
  35. package/dist/las/las-copc-loader.js +11 -6
  36. package/dist/las/las-copc-loader.js.map +1 -1
  37. package/dist/las/las-loader-shared.cjs +4 -2
  38. package/dist/las/las-loader-shared.cjs.map +2 -2
  39. package/dist/las/las-loader-shared.d.ts +9 -7
  40. package/dist/las/las-loader-shared.d.ts.map +1 -1
  41. package/dist/las/las-loader-shared.js +4 -2
  42. package/dist/las/las-loader-shared.js.map +1 -1
  43. package/dist/las/las-loader-types.cjs +3 -6
  44. package/dist/las/las-loader-types.cjs.map +2 -2
  45. package/dist/las/las-loader-types.d.ts +18 -45
  46. package/dist/las/las-loader-types.d.ts.map +1 -1
  47. package/dist/las/las-loader-types.js +1 -3
  48. package/dist/las/las-loader-types.js.map +1 -1
  49. package/dist/las/las-loader.cjs +61 -13
  50. package/dist/las/las-loader.cjs.map +3 -3
  51. package/dist/las/las-loader.d.ts +51 -5
  52. package/dist/las/las-loader.d.ts.map +1 -1
  53. package/dist/las/las-loader.js +56 -6
  54. package/dist/las/las-loader.js.map +1 -1
  55. package/dist/las/las-writer.cjs +3 -3
  56. package/dist/las/las-writer.cjs.map +2 -2
  57. package/dist/las/las-writer.d.ts +4 -3
  58. package/dist/las/las-writer.d.ts.map +1 -1
  59. package/dist/las/las-writer.js +4 -6
  60. package/dist/las/las-writer.js.map +1 -1
  61. package/dist/las/laz-rs-loader-types.cjs +1 -1
  62. package/dist/las/laz-rs-loader-types.cjs.map +2 -2
  63. package/dist/las/laz-rs-loader-types.d.ts +13 -9
  64. package/dist/las/laz-rs-loader-types.d.ts.map +1 -1
  65. package/dist/las/laz-rs-loader-types.js +1 -1
  66. package/dist/las/laz-rs-loader-types.js.map +1 -1
  67. package/dist/las/laz-rs-loader.cjs +8 -5
  68. package/dist/las/laz-rs-loader.cjs.map +2 -2
  69. package/dist/las/laz-rs-loader.d.ts +8 -6
  70. package/dist/las/laz-rs-loader.d.ts.map +1 -1
  71. package/dist/las/laz-rs-loader.js +11 -6
  72. package/dist/las/laz-rs-loader.js.map +1 -1
  73. package/dist/las/lazperf-loader-types.cjs +1 -1
  74. package/dist/las/lazperf-loader-types.cjs.map +2 -2
  75. package/dist/las/lazperf-loader-types.d.ts +14 -10
  76. package/dist/las/lazperf-loader-types.d.ts.map +1 -1
  77. package/dist/las/lazperf-loader-types.js +1 -1
  78. package/dist/las/lazperf-loader-types.js.map +1 -1
  79. package/dist/las/lazperf-loader.cjs +9 -6
  80. package/dist/las/lazperf-loader.cjs.map +2 -2
  81. package/dist/las/lazperf-loader.d.ts +9 -7
  82. package/dist/las/lazperf-loader.d.ts.map +1 -1
  83. package/dist/las/lazperf-loader.js +12 -7
  84. package/dist/las/lazperf-loader.js.map +1 -1
  85. package/dist/las/lib/copc/parse-las.cjs +1 -1
  86. package/dist/las/lib/copc/parse-las.cjs.map +2 -2
  87. package/dist/las/lib/copc/parse-las.js +1 -1
  88. package/dist/las/lib/copc/parse-las.js.map +1 -1
  89. package/dist/las/lib/get-las-schema.cjs +5 -0
  90. package/dist/las/lib/get-las-schema.cjs.map +2 -2
  91. package/dist/las/lib/get-las-schema.d.ts.map +1 -1
  92. package/dist/las/lib/get-las-schema.js +6 -0
  93. package/dist/las/lib/get-las-schema.js.map +1 -1
  94. package/dist/las/lib/las-extra-bytes.cjs +6 -1
  95. package/dist/las/lib/las-extra-bytes.cjs.map +2 -2
  96. package/dist/las/lib/las-extra-bytes.d.ts.map +1 -1
  97. package/dist/las/lib/las-extra-bytes.js +6 -4
  98. package/dist/las/lib/las-extra-bytes.js.map +1 -1
  99. package/dist/las/lib/laz-perf/parse-las.cjs +9 -8
  100. package/dist/las/lib/laz-perf/parse-las.cjs.map +3 -3
  101. package/dist/las/lib/laz-perf/parse-las.js +9 -8
  102. package/dist/las/lib/laz-perf/parse-las.js.map +1 -1
  103. package/dist/las/lib/laz-rs-wasm/parse-las.cjs +9 -8
  104. package/dist/las/lib/laz-rs-wasm/parse-las.cjs.map +3 -3
  105. package/dist/las/lib/laz-rs-wasm/parse-las.js +9 -8
  106. package/dist/las/lib/laz-rs-wasm/parse-las.js.map +1 -1
  107. package/dist/las/lib/typescript/parse-las.cjs +135 -13
  108. package/dist/las/lib/typescript/parse-las.cjs.map +3 -3
  109. package/dist/las/lib/typescript/parse-las.d.ts.map +1 -1
  110. package/dist/las/lib/typescript/parse-las.js +106 -10
  111. package/dist/las/lib/typescript/parse-las.js.map +1 -1
  112. package/dist/las/unbundled.cjs +0 -2
  113. package/dist/las/unbundled.cjs.map +2 -2
  114. package/dist/las/unbundled.d.ts +1 -1
  115. package/dist/las/unbundled.d.ts.map +1 -1
  116. package/dist/las/unbundled.js +1 -1
  117. package/dist/las/unbundled.js.map +1 -1
  118. package/dist/las/workers/las-worker.cjs +5 -5
  119. package/dist/las/workers/las-worker.cjs.map +2 -2
  120. package/dist/las/workers/las-worker.js +6 -6
  121. package/dist/las/workers/las-worker.js.map +1 -1
  122. package/dist/las-copc-loader-types.cjs +51 -0
  123. package/dist/las-copc-loader-types.cjs.map +7 -0
  124. package/dist/las-copc-loader-types.d.ts +2 -0
  125. package/dist/las-copc-loader-types.d.ts.map +1 -0
  126. package/dist/las-copc-loader-types.js +2 -0
  127. package/dist/las-copc-loader-types.js.map +1 -0
  128. package/dist/las-copc-loader.cjs +62 -0
  129. package/dist/las-copc-loader.cjs.map +7 -0
  130. package/dist/las-copc-loader.d.ts +2 -0
  131. package/dist/las-copc-loader.d.ts.map +1 -0
  132. package/dist/las-copc-loader.js +2 -0
  133. package/dist/las-copc-loader.js.map +1 -0
  134. package/dist/las-loader-types.cjs +53 -0
  135. package/dist/las-loader-types.cjs.map +7 -0
  136. package/dist/las-loader-types.d.ts +2 -0
  137. package/dist/las-loader-types.d.ts.map +1 -0
  138. package/dist/las-loader-types.js +2 -0
  139. package/dist/las-loader-types.js.map +1 -0
  140. package/dist/las-loader.cjs +130 -0
  141. package/dist/las-loader.cjs.map +7 -0
  142. package/dist/las-loader.d.ts +2 -0
  143. package/dist/las-loader.d.ts.map +1 -0
  144. package/dist/las-loader.js +2 -0
  145. package/dist/las-loader.js.map +1 -0
  146. package/dist/las-worker.js +1219 -253
  147. package/dist/las-writer.cjs +1056 -0
  148. package/dist/las-writer.cjs.map +7 -0
  149. package/dist/las-writer.d.ts +2 -0
  150. package/dist/las-writer.d.ts.map +1 -0
  151. package/dist/las-writer.js +2 -0
  152. package/dist/las-writer.js.map +1 -0
  153. package/dist/laz-rs-loader-types.cjs +51 -0
  154. package/dist/laz-rs-loader-types.cjs.map +7 -0
  155. package/dist/laz-rs-loader-types.d.ts +2 -0
  156. package/dist/laz-rs-loader-types.d.ts.map +1 -0
  157. package/dist/laz-rs-loader-types.js +2 -0
  158. package/dist/laz-rs-loader-types.js.map +1 -0
  159. package/dist/laz-rs-loader.cjs +277 -0
  160. package/dist/laz-rs-loader.cjs.map +7 -0
  161. package/dist/laz-rs-loader.d.ts +2 -0
  162. package/dist/laz-rs-loader.d.ts.map +1 -0
  163. package/dist/laz-rs-loader.js +2 -0
  164. package/dist/laz-rs-loader.js.map +1 -0
  165. package/dist/lazperf-loader-types.cjs +51 -0
  166. package/dist/lazperf-loader-types.cjs.map +7 -0
  167. package/dist/lazperf-loader-types.d.ts +2 -0
  168. package/dist/lazperf-loader-types.d.ts.map +1 -0
  169. package/dist/lazperf-loader-types.js +2 -0
  170. package/dist/lazperf-loader-types.js.map +1 -0
  171. package/dist/lazperf-loader.cjs +65 -0
  172. package/dist/lazperf-loader.cjs.map +7 -0
  173. package/dist/lazperf-loader.d.ts +2 -0
  174. package/dist/lazperf-loader.d.ts.map +1 -0
  175. package/dist/lazperf-loader.js +2 -0
  176. package/dist/lazperf-loader.js.map +1 -0
  177. package/dist/pcd/bundled.cjs +2 -4
  178. package/dist/pcd/bundled.cjs.map +2 -2
  179. package/dist/pcd/bundled.d.ts +1 -1
  180. package/dist/pcd/bundled.d.ts.map +1 -1
  181. package/dist/pcd/bundled.js +1 -1
  182. package/dist/pcd/bundled.js.map +1 -1
  183. package/dist/pcd/index.cjs +0 -3
  184. package/dist/pcd/index.cjs.map +3 -3
  185. package/dist/pcd/index.d.ts +0 -2
  186. package/dist/pcd/index.d.ts.map +1 -1
  187. package/dist/pcd/index.js +0 -3
  188. package/dist/pcd/index.js.map +1 -1
  189. package/dist/pcd/pcd-loader-types.cjs +9 -10
  190. package/dist/pcd/pcd-loader-types.cjs.map +2 -2
  191. package/dist/pcd/pcd-loader-types.d.ts +18 -41
  192. package/dist/pcd/pcd-loader-types.d.ts.map +1 -1
  193. package/dist/pcd/pcd-loader-types.js +6 -6
  194. package/dist/pcd/pcd-loader-types.js.map +1 -1
  195. package/dist/pcd/pcd-loader.cjs +82 -25
  196. package/dist/pcd/pcd-loader.cjs.map +3 -3
  197. package/dist/pcd/pcd-loader.d.ts +42 -6
  198. package/dist/pcd/pcd-loader.d.ts.map +1 -1
  199. package/dist/pcd/pcd-loader.js +72 -21
  200. package/dist/pcd/pcd-loader.js.map +1 -1
  201. package/dist/pcd/pcd-writer.cjs +3 -3
  202. package/dist/pcd/pcd-writer.cjs.map +2 -2
  203. package/dist/pcd/pcd-writer.d.ts +5 -4
  204. package/dist/pcd/pcd-writer.d.ts.map +1 -1
  205. package/dist/pcd/pcd-writer.js +4 -4
  206. package/dist/pcd/pcd-writer.js.map +1 -1
  207. package/dist/pcd/unbundled.cjs +2 -4
  208. package/dist/pcd/unbundled.cjs.map +2 -2
  209. package/dist/pcd/unbundled.d.ts +1 -1
  210. package/dist/pcd/unbundled.d.ts.map +1 -1
  211. package/dist/pcd/unbundled.js +1 -1
  212. package/dist/pcd/unbundled.js.map +1 -1
  213. package/dist/pcd/workers/pcd-worker.cjs +5 -5
  214. package/dist/pcd/workers/pcd-worker.cjs.map +2 -2
  215. package/dist/pcd/workers/pcd-worker.js +6 -6
  216. package/dist/pcd/workers/pcd-worker.js.map +1 -1
  217. package/dist/pcd-loader-types.cjs +65 -0
  218. package/dist/pcd-loader-types.cjs.map +7 -0
  219. package/dist/pcd-loader-types.d.ts +2 -0
  220. package/dist/pcd-loader-types.d.ts.map +1 -0
  221. package/dist/pcd-loader-types.js +2 -0
  222. package/dist/pcd-loader-types.js.map +1 -0
  223. package/dist/pcd-loader.cjs +203 -0
  224. package/dist/pcd-loader.cjs.map +7 -0
  225. package/dist/pcd-loader.d.ts +2 -0
  226. package/dist/pcd-loader.d.ts.map +1 -0
  227. package/dist/pcd-loader.js +2 -0
  228. package/dist/pcd-loader.js.map +1 -0
  229. package/dist/pcd-worker.js +1457 -418
  230. package/dist/pcd-writer.cjs +136 -0
  231. package/dist/pcd-writer.cjs.map +7 -0
  232. package/dist/pcd-writer.d.ts +2 -0
  233. package/dist/pcd-writer.d.ts.map +1 -0
  234. package/dist/pcd-writer.js +2 -0
  235. package/dist/pcd-writer.js.map +1 -0
  236. package/dist/ply/bundled.cjs +2 -4
  237. package/dist/ply/bundled.cjs.map +2 -2
  238. package/dist/ply/bundled.d.ts +1 -1
  239. package/dist/ply/bundled.d.ts.map +1 -1
  240. package/dist/ply/bundled.js +1 -1
  241. package/dist/ply/bundled.js.map +1 -1
  242. package/dist/ply/index.cjs +0 -3
  243. package/dist/ply/index.cjs.map +3 -3
  244. package/dist/ply/index.d.ts +0 -2
  245. package/dist/ply/index.d.ts.map +1 -1
  246. package/dist/ply/index.js +0 -3
  247. package/dist/ply/index.js.map +1 -1
  248. package/dist/ply/lib/get-ply-schema.cjs +4 -2
  249. package/dist/ply/lib/get-ply-schema.cjs.map +2 -2
  250. package/dist/ply/lib/get-ply-schema.d.ts +6 -0
  251. package/dist/ply/lib/get-ply-schema.d.ts.map +1 -1
  252. package/dist/ply/lib/get-ply-schema.js +1 -1
  253. package/dist/ply/lib/get-ply-schema.js.map +1 -1
  254. package/dist/ply/lib/parse-ply-arrow.cjs +1 -1
  255. package/dist/ply/lib/parse-ply-arrow.cjs.map +2 -2
  256. package/dist/ply/lib/parse-ply-arrow.js +2 -2
  257. package/dist/ply/lib/parse-ply-arrow.js.map +1 -1
  258. package/dist/ply/lib/parse-ply-in-batches.cjs +14 -8
  259. package/dist/ply/lib/parse-ply-in-batches.cjs.map +3 -3
  260. package/dist/ply/lib/parse-ply-in-batches.d.ts.map +1 -1
  261. package/dist/ply/lib/parse-ply-in-batches.js +9 -4
  262. package/dist/ply/lib/parse-ply-in-batches.js.map +1 -1
  263. package/dist/ply/lib/parse-ply.cjs +3 -0
  264. package/dist/ply/lib/parse-ply.cjs.map +2 -2
  265. package/dist/ply/lib/parse-ply.d.ts +1 -1
  266. package/dist/ply/lib/parse-ply.d.ts.map +1 -1
  267. package/dist/ply/lib/parse-ply.js +4 -0
  268. package/dist/ply/lib/parse-ply.js.map +1 -1
  269. package/dist/ply/ply-loader-types.cjs +9 -10
  270. package/dist/ply/ply-loader-types.cjs.map +2 -2
  271. package/dist/ply/ply-loader-types.d.ts +19 -42
  272. package/dist/ply/ply-loader-types.d.ts.map +1 -1
  273. package/dist/ply/ply-loader-types.js +6 -6
  274. package/dist/ply/ply-loader-types.js.map +1 -1
  275. package/dist/ply/ply-loader.cjs +82 -24
  276. package/dist/ply/ply-loader.cjs.map +3 -3
  277. package/dist/ply/ply-loader.d.ts +43 -6
  278. package/dist/ply/ply-loader.d.ts.map +1 -1
  279. package/dist/ply/ply-loader.js +71 -19
  280. package/dist/ply/ply-loader.js.map +1 -1
  281. package/dist/ply/ply-writer.cjs +3 -3
  282. package/dist/ply/ply-writer.cjs.map +2 -2
  283. package/dist/ply/ply-writer.d.ts +5 -4
  284. package/dist/ply/ply-writer.d.ts.map +1 -1
  285. package/dist/ply/ply-writer.js +4 -4
  286. package/dist/ply/ply-writer.js.map +1 -1
  287. package/dist/ply/unbundled.cjs +2 -4
  288. package/dist/ply/unbundled.cjs.map +2 -2
  289. package/dist/ply/unbundled.d.ts +1 -1
  290. package/dist/ply/unbundled.d.ts.map +1 -1
  291. package/dist/ply/unbundled.js +1 -1
  292. package/dist/ply/unbundled.js.map +1 -1
  293. package/dist/ply/workers/ply-worker.cjs +6 -6
  294. package/dist/ply/workers/ply-worker.cjs.map +2 -2
  295. package/dist/ply/workers/ply-worker.js +8 -8
  296. package/dist/ply/workers/ply-worker.js.map +1 -1
  297. package/dist/ply-loader-types.cjs +66 -0
  298. package/dist/ply-loader-types.cjs.map +7 -0
  299. package/dist/ply-loader-types.d.ts +2 -0
  300. package/dist/ply-loader-types.d.ts.map +1 -0
  301. package/dist/ply-loader-types.js +2 -0
  302. package/dist/ply-loader-types.js.map +1 -0
  303. package/dist/ply-loader.cjs +194 -0
  304. package/dist/ply-loader.cjs.map +7 -0
  305. package/dist/ply-loader.d.ts +2 -0
  306. package/dist/ply-loader.d.ts.map +1 -0
  307. package/dist/ply-loader.js +2 -0
  308. package/dist/ply-loader.js.map +1 -0
  309. package/dist/ply-worker.js +2099 -312
  310. package/dist/ply-writer.cjs +177 -0
  311. package/dist/ply-writer.cjs.map +7 -0
  312. package/dist/ply-writer.d.ts +2 -0
  313. package/dist/ply-writer.d.ts.map +1 -0
  314. package/dist/ply-writer.js +2 -0
  315. package/dist/ply-writer.js.map +1 -0
  316. package/package.json +75 -71
  317. package/src/index.ts +3 -3
  318. package/src/las/bundled.ts +0 -1
  319. package/src/las/index.ts +0 -4
  320. package/src/las/las-copc-loader-types.ts +3 -3
  321. package/src/las/las-copc-loader.ts +12 -12
  322. package/src/las/las-loader-shared.ts +9 -7
  323. package/src/las/las-loader-types.ts +3 -6
  324. package/src/las/las-loader.ts +63 -9
  325. package/src/las/las-writer.ts +17 -13
  326. package/src/las/laz-rs-loader-types.ts +3 -3
  327. package/src/las/laz-rs-loader.ts +11 -11
  328. package/src/las/lazperf-loader-types.ts +3 -3
  329. package/src/las/lazperf-loader.ts +13 -13
  330. package/src/las/lib/copc/parse-las.ts +1 -1
  331. package/src/las/lib/get-las-schema.ts +5 -0
  332. package/src/las/lib/las-extra-bytes.ts +6 -4
  333. package/src/las/lib/laz-perf/parse-las.ts +8 -9
  334. package/src/las/lib/laz-rs-wasm/parse-las.ts +8 -9
  335. package/src/las/lib/typescript/parse-las.ts +143 -11
  336. package/src/las/libs/laz-rs-wasm/README.md +5 -0
  337. package/src/las/libs/laz-rs-wasm/package.json +6 -0
  338. package/src/las/unbundled.ts +1 -1
  339. package/src/las/workers/las-worker.ts +6 -6
  340. package/src/las-copc-loader-types.ts +1 -0
  341. package/src/las-copc-loader.ts +1 -0
  342. package/src/las-loader-types.ts +1 -0
  343. package/src/las-loader.ts +1 -0
  344. package/src/las-writer.ts +1 -0
  345. package/src/laz-rs-loader-types.ts +1 -0
  346. package/src/laz-rs-loader.ts +1 -0
  347. package/src/lazperf-loader-types.ts +1 -0
  348. package/src/lazperf-loader.ts +1 -0
  349. package/src/pcd/bundled.ts +1 -4
  350. package/src/pcd/index.ts +0 -4
  351. package/src/pcd/pcd-loader-types.ts +10 -11
  352. package/src/pcd/pcd-loader.ts +97 -29
  353. package/src/pcd/pcd-writer.ts +12 -8
  354. package/src/pcd/unbundled.ts +1 -1
  355. package/src/pcd/workers/pcd-worker.ts +6 -6
  356. package/src/pcd-loader-types.ts +1 -0
  357. package/src/pcd-loader.ts +1 -0
  358. package/src/pcd-writer.ts +1 -0
  359. package/src/ply/bundled.ts +1 -4
  360. package/src/ply/index.ts +0 -4
  361. package/src/ply/lib/get-ply-schema.ts +1 -1
  362. package/src/ply/lib/parse-ply-arrow.ts +2 -2
  363. package/src/ply/lib/parse-ply-in-batches.ts +9 -4
  364. package/src/ply/lib/parse-ply.ts +4 -1
  365. package/src/ply/ply-loader-types.ts +10 -11
  366. package/src/ply/ply-loader.ts +94 -24
  367. package/src/ply/ply-writer.ts +12 -8
  368. package/src/ply/unbundled.ts +1 -1
  369. package/src/ply/workers/ply-worker.ts +8 -8
  370. package/src/ply-loader-types.ts +1 -0
  371. package/src/ply-loader.ts +1 -0
  372. package/src/ply-writer.ts +1 -0
@@ -2,15 +2,15 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { PLYFormat } from "./ply-format.js";
5
- import { serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
5
+ import { serializeArrowWorkerTable } from '@loaders.gl/core/arrow-worker-transport';
6
6
  // __VERSION__ is injected by babel-plugin-version-inline
7
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
- const VERSION = typeof "5.0.0-beta.1" !== 'undefined' ? "5.0.0-beta.1" : 'latest';
8
+ const VERSION = typeof "5.0.0-beta.10" !== 'undefined' ? "5.0.0-beta.10" : 'latest';
9
9
  /**
10
10
  * Preloads the parser-bearing PLY loader implementation.
11
11
  */
12
12
  async function preload() {
13
- const { PLYLoaderWithParser } = await import('@loaders.gl/pointclouds/ply/ply-loader');
13
+ const { PLYLoaderWithParser } = await import('@loaders.gl/pointclouds/ply-loader');
14
14
  return PLYLoaderWithParser;
15
15
  }
16
16
  /**
@@ -19,6 +19,8 @@ async function preload() {
19
19
  * 'https://en.wikipedia.org/wiki/PLY_(file_format)']
20
20
  */
21
21
  export const PLYLoader = {
22
+ defaultShape: 'arrow',
23
+ supportsNativeArrow: true,
22
24
  dataType: null,
23
25
  batchType: null,
24
26
  ...PLYFormat,
@@ -29,10 +31,8 @@ export const PLYLoader = {
29
31
  workerInBatches: true,
30
32
  serializeWorkerResult: serializeArrowWorkerTable,
31
33
  options: {
32
- ply: { shape: 'arrow-table', colorFormat: 'uint8norm' }
34
+ ply: { shape: 'arrow', colorFormat: 'uint8norm' }
33
35
  },
34
36
  preload
35
37
  };
36
- /** @deprecated Use PLYLoader. */
37
- export const PLYWorkerLoader = PLYLoader;
38
38
  //# sourceMappingURL=ply-loader-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ply-loader-types.js","sourceRoot":"","sources":["../../src/ply/ply-loader-types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAOpC,OAAO,EAAC,SAAS,EAAC,wBAAqB;AACvC,OAAO,EAAC,yBAAyB,EAAC,MAAM,+CAA+C,CAAC;AAExF,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,qBAAkB,KAAK,WAAW,CAAC,CAAC,gBAAa,CAAC,CAAC,QAAQ,CAAC;AAe5E;;GAEG;AACH,KAAK,UAAU,OAAO;IACpB,MAAM,EAAC,mBAAmB,EAAC,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;IACrF,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,IAA2C;IACrD,SAAS,EAAE,IAA4C;IAEvD,GAAG,SAAS;IACZ,8CAA8C;IAC9C,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,IAAI;IACZ,+EAA+E;IAC/E,eAAe,EAAE,IAAI;IACrB,qBAAqB,EAAE,yBAAyB;IAChD,OAAO,EAAE;QACP,GAAG,EAAE,EAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAC;KACtD;IACD,OAAO;CACsF,CAAC;AAEhG,iCAAiC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"ply-loader-types.js","sourceRoot":"","sources":["../../src/ply/ply-loader-types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAOpC,OAAO,EAAC,SAAS,EAAC,wBAAqB;AACvC,OAAO,EAAC,yBAAyB,EAAC,MAAM,yCAAyC,CAAC;AAElF,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,sBAAkB,KAAK,WAAW,CAAC,CAAC,iBAAa,CAAC,CAAC,QAAQ,CAAC;AAe5E;;GAEG;AACH,KAAK,UAAU,OAAO;IACpB,MAAM,EAAC,mBAAmB,EAAC,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IACjF,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,OAAO;IACrB,mBAAmB,EAAE,IAAI;IACzB,QAAQ,EAAE,IAAkC;IAC5C,SAAS,EAAE,IAAwC;IAEnD,GAAG,SAAS;IACZ,8CAA8C;IAC9C,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,IAAI;IACZ,+EAA+E;IAC/E,eAAe,EAAE,IAAI;IACrB,qBAAqB,EAAE,yBAAyB;IAChD,OAAO,EAAE;QACP,GAAG,EAAE,EAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAC;KAChD;IACD,OAAO;CACyE,CAAC"}
@@ -20,20 +20,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/ply/ply-loader.ts
21
21
  var ply_loader_exports = {};
22
22
  __export(ply_loader_exports, {
23
+ PLYColumnLoader: () => PLYColumnLoader,
23
24
  PLYLoaderWithParser: () => PLYLoaderWithParser
24
25
  });
25
26
  module.exports = __toCommonJS(ply_loader_exports);
27
+ var import_schema_utils = require("@loaders.gl/core/schema-utils");
26
28
  var import_loader_utils = require("@loaders.gl/core/loader-utils");
27
29
  var import_schema = require("@loaders.gl/core/schema");
28
- var import_arrow_transport = require("@loaders.gl/core/schema-utils/arrow-transport");
29
- var import_schema_utils = require("@loaders.gl/core/schema-utils");
30
+ var import_arrow_worker_transport = require("@loaders.gl/core/arrow-worker-transport");
31
+ var import_schema_utils2 = require("@loaders.gl/core/schema-utils");
30
32
  var import_parse_ply = require("./lib/parse-ply.cjs");
31
33
  var import_parse_ply_arrow = require("./lib/parse-ply-arrow.cjs");
32
34
  var import_parse_ply_in_batches = require("./lib/parse-ply-in-batches.cjs");
33
35
  var import_ply_loader_types = require("./ply-loader-types.cjs");
34
36
  var { preload: _PLYLoaderPreload, ...PLYLoaderMetadataWithoutPreload } = import_ply_loader_types.PLYLoader;
35
37
  function convertPLYMesh(mesh, options) {
36
- const table = (0, import_schema_utils.convertMeshToTable)(mesh, "arrow-table");
38
+ const table = (0, import_schema_utils2.convertMeshToArrowTableWrapper)(mesh);
37
39
  return convertPLYTable(table, options, mesh.loaderData);
38
40
  }
39
41
  function parsePLYData(data, options) {
@@ -51,30 +53,23 @@ function parsePLYData(data, options) {
51
53
  elementTables.header
52
54
  );
53
55
  }
54
- var PLYLoaderWithParser = {
56
+ var PLYColumnLoader = {
55
57
  ...PLYLoaderMetadataWithoutPreload,
58
+ dataType: null,
59
+ batchType: null,
56
60
  parse: async (arrayBuffer, options) => parsePLYData(arrayBuffer, options),
57
61
  parseTextSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),
58
62
  parseSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),
59
- parseInBatches: async function* (arrayBuffer, options) {
60
- const plyOptions = {
61
- ...options?.ply,
62
- batchSize: options?.batchSize ?? options?.core?.batchSize
63
- };
64
- for await (const meshOrTable of (0, import_parse_ply_in_batches.parsePLYInBatches)(arrayBuffer, plyOptions)) {
65
- const convertedData = isMeshArrowTable(meshOrTable) ? convertPLYTable(meshOrTable, options) : convertPLYMesh(meshOrTable, options);
66
- yield isMeshArrowTable(convertedData) ? (0, import_loader_utils.makeTableScanBatch)(convertedData) : convertedData;
67
- }
68
- },
69
- serializeWorkerResult: import_arrow_transport.serializeArrowWorkerTable,
63
+ parseInBatches: (input, options) => (0, import_schema_utils.refineArrowTableBatches)(parsePLYWithMetadataInBatches(input, options)),
64
+ serializeWorkerResult: import_arrow_worker_transport.serializeArrowWorkerTable,
70
65
  deserializeWorkerResult: deserializePLYWorkerResult,
71
- serializeWorkerBatch: import_arrow_transport.serializeArrowWorkerTable,
66
+ serializeWorkerBatch: import_arrow_worker_transport.serializeArrowWorkerTable,
72
67
  deserializeWorkerBatch: deserializePLYWorkerBatch
73
68
  };
74
69
  function convertPLYTable(table, options, header) {
75
70
  const loaderData = header || table.loaderData || { comments: [], elements: [] };
76
- const result = options?.ply?.shape === "arrow-table" ? { ...table, loader: "ply", loaderData } : {
77
- ...(0, import_schema_utils.convertTableToMesh)(table),
71
+ const result = options?.ply?.shape === "arrow" ? { ...table, loader: "ply", loaderData } : {
72
+ ...(0, import_schema_utils2.convertTableToMesh)(table),
78
73
  loader: "ply",
79
74
  loaderData
80
75
  };
@@ -84,11 +79,11 @@ function convertPLYTable(table, options, header) {
84
79
  }
85
80
  const resultData = result;
86
81
  const formattedMesh = formatPLYMeshColors(
87
- isMeshArrowTable(resultData) ? (0, import_schema_utils.convertTableToMesh)(resultData) : resultData,
82
+ isMeshArrowTable(resultData) ? (0, import_schema_utils2.convertTableToMesh)(resultData) : resultData,
88
83
  colorFormat
89
84
  );
90
- return options?.ply?.shape === "arrow-table" ? {
91
- ...(0, import_schema_utils.convertMeshToTable)(formattedMesh, "arrow-table"),
85
+ return options?.ply?.shape === "arrow" ? {
86
+ ...(0, import_schema_utils2.convertMeshToArrowTableWrapper)(formattedMesh),
92
87
  loader: "ply",
93
88
  loaderData
94
89
  } : formattedMesh;
@@ -114,21 +109,84 @@ function formatPLYMeshColors(mesh, colorFormat) {
114
109
  return {
115
110
  ...mesh,
116
111
  attributes,
117
- schema: (0, import_schema_utils.deduceMeshSchema)(attributes, mesh.schema.metadata)
112
+ schema: (0, import_schema_utils2.deduceMeshSchema)(attributes, mesh.schema.metadata)
118
113
  };
119
114
  }
120
115
  function isMeshArrowTable(data) {
121
116
  return "shape" in data && data.shape === "arrow-table";
122
117
  }
123
118
  function deserializePLYWorkerResult(result, options) {
124
- const table = (0, import_arrow_transport.deserializeArrowWorkerTable)(result);
125
- return options?.ply?.shape === "mesh" ? { ...(0, import_schema_utils.convertTableToMesh)(table), loader: "ply", loaderData: table.loaderData } : table;
119
+ const table = (0, import_arrow_worker_transport.deserializeArrowWorkerTable)(result);
120
+ return options?.ply?.shape === "mesh" ? { ...(0, import_schema_utils2.convertTableToMesh)(table), loader: "ply", loaderData: table.loaderData } : table;
126
121
  }
127
122
  function deserializePLYWorkerBatch(result, options) {
128
123
  return deserializePLYWorkerResult(result, options);
129
124
  }
125
+ async function* parsePLYWithMetadataInBatches(arrayBuffer, options) {
126
+ const plyOptions = {
127
+ ...options?.ply,
128
+ batchSize: options?.core?.batchSize
129
+ };
130
+ for await (const meshOrTable of (0, import_parse_ply_in_batches.parsePLYInBatches)(arrayBuffer, plyOptions)) {
131
+ const convertedData = isMeshArrowTable(meshOrTable) ? convertPLYTable(meshOrTable, options) : convertPLYMesh(meshOrTable, options);
132
+ yield isMeshArrowTable(convertedData) ? (0, import_loader_utils.makeTableScanBatch)(convertedData) : convertedData;
133
+ }
134
+ }
135
+ var PLYLoaderWithParser = {
136
+ ...PLYColumnLoader,
137
+ dataType: import_ply_loader_types.PLYLoader.dataType,
138
+ batchType: import_ply_loader_types.PLYLoader.batchType,
139
+ parse: async (input, options) => unwrapPLYTable(await PLYColumnLoader.parse(input, options)),
140
+ parseTextSync: (input, options) => unwrapPLYTable(PLYColumnLoader.parseTextSync(input, options)),
141
+ parseSync: (input, options) => unwrapPLYTable(PLYColumnLoader.parseSync(input, options)),
142
+ async *parseInBatches(input, options) {
143
+ for await (const batch of PLYColumnLoader.parseInBatches(input, options)) {
144
+ if (isColumnBatch(batch)) {
145
+ batch.data.schema.metadata.set(
146
+ "loaders.gl.ply.header",
147
+ JSON.stringify(batch.loaderData)
148
+ );
149
+ for (const recordBatch of batch.data.batches) {
150
+ recordBatch.schema.metadata.set(
151
+ "loaders.gl.ply.header",
152
+ batch.data.schema.metadata.get("loaders.gl.ply.header")
153
+ );
154
+ }
155
+ if (batch.data.batches.length) yield* batch.data.batches;
156
+ else yield (0, import_schema_utils.makeArrowMetadataBatch)(batch.data.schema);
157
+ } else yield batch;
158
+ }
159
+ },
160
+ deserializeWorkerResult: (result, options) => unwrapPLYTable(PLYColumnLoader.deserializeWorkerResult(result, options)),
161
+ deserializeWorkerBatch(result, options) {
162
+ const batch = PLYColumnLoader.deserializeWorkerBatch(result, options);
163
+ if (isColumnBatch(batch)) {
164
+ const recordBatch = batch.data.batches[0] ?? (0, import_schema_utils.makeArrowMetadataBatch)(batch.data.schema);
165
+ recordBatch.schema.metadata.set(
166
+ "loaders.gl.ply.header",
167
+ JSON.stringify(batch.loaderData)
168
+ );
169
+ return recordBatch;
170
+ }
171
+ return batch;
172
+ }
173
+ };
174
+ function unwrapPLYTable(result) {
175
+ if ("shape" in result && result.shape === "arrow-table") {
176
+ result.data.schema.metadata.set(
177
+ "loaders.gl.ply.header",
178
+ JSON.stringify(result.loaderData)
179
+ );
180
+ return result.data;
181
+ }
182
+ return result;
183
+ }
184
+ function isColumnBatch(batch) {
185
+ return "shape" in batch && batch.shape === "arrow-table";
186
+ }
130
187
  // Annotate the CommonJS export names for ESM import in node:
131
188
  0 && (module.exports = {
189
+ PLYColumnLoader,
132
190
  PLYLoaderWithParser
133
191
  });
134
192
  //# sourceMappingURL=ply-loader.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/ply/ply-loader.ts"],
4
- "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {PLYLoaderOptions} from './ply-loader-types';\n\n// PLY Loader\nimport {makeTableScanBatch, type LoaderWithParser} from '@loaders.gl/core/loader-utils';\nimport {convertColorArrayToFloat16, convertColorArrayToFloat32} from '@loaders.gl/core/schema';\nimport type {MeshArrowTable, ArrowTableBatch} from '@loaders.gl/core/schema';\nimport {\n deserializeArrowWorkerTable,\n serializeArrowWorkerTable\n} from '@loaders.gl/core/schema-utils/arrow-transport';\nimport type {PLYHeader, PLYMesh} from './lib/ply-types';\nimport {\n convertMeshToTable,\n convertTableToMesh,\n deduceMeshSchema\n} from '@loaders.gl/core/schema-utils';\nimport {parsePLY, parsePLYHeader, parsePLYToArrowTable} from './lib/parse-ply';\nimport {\n convertPLYElementTablesToMeshArrowTable,\n parsePLYToElementTables\n} from './lib/parse-ply-arrow';\nimport {parsePLYInBatches} from './lib/parse-ply-in-batches';\nimport {PLYLoader as PLYLoaderMetadata} from './ply-loader-types';\n\nconst {preload: _PLYLoaderPreload, ...PLYLoaderMetadataWithoutPreload} = PLYLoaderMetadata;\n\nfunction convertPLYMesh(mesh: PLYMesh, options?: PLYLoaderOptions): PLYMesh | MeshArrowTable {\n const table = convertMeshToTable(mesh, 'arrow-table');\n return convertPLYTable(table, options, mesh.loaderData);\n}\n\n/** Parse PLY data using a direct Arrow path when requested and supported. */\nfunction parsePLYData(\n data: ArrayBuffer | string,\n options?: PLYLoaderOptions\n): PLYMesh | MeshArrowTable {\n if (options?.ply?._useLegacyParser) {\n return convertPLYMesh(parsePLY(data, options?.ply), options);\n }\n\n const arrowTable = parsePLYToArrowTable(data, options?.ply);\n if (arrowTable) {\n return convertPLYTable(arrowTable, options, parsePLYHeader(data, options?.ply));\n }\n\n const elementTables = parsePLYToElementTables(data, options?.ply);\n return convertPLYTable(\n convertPLYElementTablesToMeshArrowTable(elementTables),\n options,\n elementTables.header\n );\n}\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYLoaderWithParser = {\n ...PLYLoaderMetadataWithoutPreload,\n parse: async (arrayBuffer, options) => parsePLYData(arrayBuffer, options),\n parseTextSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),\n parseSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),\n parseInBatches: async function* (\n arrayBuffer:\n | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n | Iterable<ArrayBufferLike | ArrayBufferView>,\n options\n ) {\n const plyOptions = {\n ...options?.ply,\n batchSize: options?.batchSize ?? options?.core?.batchSize\n };\n for await (const meshOrTable of parsePLYInBatches(arrayBuffer, plyOptions)) {\n const convertedData = isMeshArrowTable(meshOrTable)\n ? convertPLYTable(meshOrTable, options)\n : convertPLYMesh(meshOrTable, options);\n yield isMeshArrowTable(convertedData) ? makeTableScanBatch(convertedData) : convertedData;\n }\n },\n serializeWorkerResult: serializeArrowWorkerTable,\n deserializeWorkerResult: deserializePLYWorkerResult,\n serializeWorkerBatch: serializeArrowWorkerTable,\n deserializeWorkerBatch: deserializePLYWorkerBatch\n} as const satisfies LoaderWithParser<\n PLYMesh | MeshArrowTable,\n PLYMesh | ArrowTableBatch,\n PLYLoaderOptions\n>;\n\n/** Return requested public PLY shape from the parser's Arrow table. */\nfunction convertPLYTable(\n table: MeshArrowTable & {\n /** Original source header retained by the streaming parser. */\n loaderData?: PLYHeader;\n },\n options?: PLYLoaderOptions,\n header?: PLYHeader\n): PLYMesh | MeshArrowTable {\n const loaderData = header || table.loaderData || {comments: [], elements: []};\n const result =\n options?.ply?.shape === 'arrow-table'\n ? {...table, loader: 'ply' as const, loaderData}\n : {\n ...(convertTableToMesh(table) as PLYMesh),\n loader: 'ply',\n loaderData\n };\n const colorFormat = options?.ply?.colorFormat || 'uint8norm';\n if (colorFormat === 'uint8norm') {\n return result as PLYMesh | MeshArrowTable;\n }\n\n const resultData = result as PLYMesh | MeshArrowTable;\n const formattedMesh = formatPLYMeshColors(\n (isMeshArrowTable(resultData) ? convertTableToMesh(resultData) : resultData) as PLYMesh,\n colorFormat\n );\n return options?.ply?.shape === 'arrow-table'\n ? {\n ...convertMeshToTable(formattedMesh, 'arrow-table'),\n loader: 'ply' as const,\n loaderData\n }\n : (formattedMesh as PLYMesh);\n}\n\n/** Apply the requested normalized color representation to a decoded PLY mesh. */\nfunction formatPLYMeshColors(\n mesh: PLYMesh,\n colorFormat: 'uint8norm' | 'float16' | 'float32'\n): PLYMesh {\n const colorAttribute = mesh.attributes.COLOR_0;\n if (!colorAttribute) {\n return mesh;\n }\n\n const sourceScale = colorAttribute.value instanceof Uint16Array ? 65535 : 255;\n const value =\n colorFormat === 'float16'\n ? convertColorArrayToFloat16(colorAttribute.value, sourceScale)\n : convertColorArrayToFloat32(colorAttribute.value, sourceScale);\n const attributes = {...mesh.attributes};\n for (const [attributeName, attribute] of Object.entries(attributes)) {\n if (attribute.value === colorAttribute.value) {\n attributes[attributeName] = {\n ...attribute,\n value,\n normalized: false,\n ...(colorFormat === 'float16' ? {componentType: 'float16' as const} : {})\n };\n }\n }\n return {\n ...mesh,\n attributes,\n schema: deduceMeshSchema(attributes, mesh.schema.metadata)\n };\n}\n\n/** Return true if a parsed PLY batch is already a Mesh Arrow table. */\nfunction isMeshArrowTable(data: PLYMesh | MeshArrowTable): data is MeshArrowTable {\n return 'shape' in data && data.shape === 'arrow-table';\n}\n\n/** Hydrates worker columns and applies the requested PLY shape on the caller. */\nfunction deserializePLYWorkerResult(\n result: unknown,\n options?: PLYLoaderOptions\n): PLYMesh | MeshArrowTable {\n const table = deserializeArrowWorkerTable(result);\n return options?.ply?.shape === 'mesh'\n ? {...convertTableToMesh(table), loader: 'ply', loaderData: table.loaderData}\n : table;\n}\n\n/** Converts mesh batches only after the Arrow column buffers reach the caller. */\nfunction deserializePLYWorkerBatch(\n result: unknown,\n options?: PLYLoaderOptions\n): PLYMesh | ArrowTableBatch {\n return deserializePLYWorkerResult(result, options) as PLYMesh | ArrowTableBatch;\n}\n"],
5
- "mappings": "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",
6
- "names": ["PLYLoaderMetadata"]
4
+ "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {refineArrowTableBatches, makeArrowMetadataBatch} from '@loaders.gl/core/schema-utils';\nimport type {Table, RecordBatch} from 'apache-arrow';\nimport type {PLYLoaderOptions} from './ply-loader-types';\n\n// PLY Loader\nimport {makeTableScanBatch, type LoaderWithParser} from '@loaders.gl/core/loader-utils';\nimport {convertColorArrayToFloat16, convertColorArrayToFloat32} from '@loaders.gl/core/schema';\nimport type {MeshArrowTable, ArrowTableBatch} from '@loaders.gl/core/schema';\nimport {\n deserializeArrowWorkerTable,\n serializeArrowWorkerTable\n} from '@loaders.gl/core/arrow-worker-transport';\nimport type {PLYHeader, PLYMesh} from './lib/ply-types';\nimport {\n convertMeshToArrowTableWrapper,\n convertTableToMesh,\n deduceMeshSchema\n} from '@loaders.gl/core/schema-utils';\nimport {parsePLY, parsePLYHeader, parsePLYToArrowTable} from './lib/parse-ply';\nimport {\n convertPLYElementTablesToMeshArrowTable,\n parsePLYToElementTables\n} from './lib/parse-ply-arrow';\nimport {parsePLYInBatches} from './lib/parse-ply-in-batches';\nimport {PLYLoader as PLYLoaderMetadata} from './ply-loader-types';\n\nconst {preload: _PLYLoaderPreload, ...PLYLoaderMetadataWithoutPreload} = PLYLoaderMetadata;\n\nfunction convertPLYMesh(mesh: PLYMesh, options?: PLYLoaderOptions): PLYMesh | MeshArrowTable {\n const table = convertMeshToArrowTableWrapper(mesh);\n return convertPLYTable(table, options, mesh.loaderData);\n}\n\n/** Parse PLY data using a direct Arrow path when requested and supported. */\nfunction parsePLYData(\n data: ArrayBuffer | string,\n options?: PLYLoaderOptions\n): PLYMesh | MeshArrowTable {\n if (options?.ply?._useLegacyParser) {\n return convertPLYMesh(parsePLY(data, options?.ply), options);\n }\n\n const arrowTable = parsePLYToArrowTable(data, options?.ply);\n if (arrowTable) {\n return convertPLYTable(arrowTable, options, parsePLYHeader(data, options?.ply));\n }\n\n const elementTables = parsePLYToElementTables(data, options?.ply);\n return convertPLYTable(\n convertPLYElementTablesToMeshArrowTable(elementTables),\n options,\n elementTables.header\n );\n}\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYColumnLoader = {\n ...PLYLoaderMetadataWithoutPreload,\n dataType: null as unknown as PLYMesh | MeshArrowTable,\n batchType: null as unknown as PLYMesh | ArrowTableBatch,\n parse: async (arrayBuffer, options) => parsePLYData(arrayBuffer, options),\n parseTextSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),\n parseSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),\n parseInBatches: (input, options) =>\n refineArrowTableBatches(parsePLYWithMetadataInBatches(input, options)),\n serializeWorkerResult: serializeArrowWorkerTable,\n deserializeWorkerResult: deserializePLYWorkerResult,\n serializeWorkerBatch: serializeArrowWorkerTable,\n deserializeWorkerBatch: deserializePLYWorkerBatch\n} as const satisfies LoaderWithParser<\n PLYMesh | MeshArrowTable,\n PLYMesh | ArrowTableBatch,\n PLYLoaderOptions\n>;\n\n/** Return requested public PLY shape from the parser's Arrow table. */\nfunction convertPLYTable(\n table: MeshArrowTable & {\n /** Original source header retained by the streaming parser. */\n loaderData?: PLYHeader;\n },\n options?: PLYLoaderOptions,\n header?: PLYHeader\n): PLYMesh | MeshArrowTable {\n const loaderData = header || table.loaderData || {comments: [], elements: []};\n const result =\n options?.ply?.shape === 'arrow'\n ? {...table, loader: 'ply' as const, loaderData}\n : {\n ...(convertTableToMesh(table) as PLYMesh),\n loader: 'ply',\n loaderData\n };\n const colorFormat = options?.ply?.colorFormat || 'uint8norm';\n if (colorFormat === 'uint8norm') {\n return result as PLYMesh | MeshArrowTable;\n }\n\n const resultData = result as PLYMesh | MeshArrowTable;\n const formattedMesh = formatPLYMeshColors(\n (isMeshArrowTable(resultData) ? convertTableToMesh(resultData) : resultData) as PLYMesh,\n colorFormat\n );\n return options?.ply?.shape === 'arrow'\n ? {\n ...convertMeshToArrowTableWrapper(formattedMesh),\n loader: 'ply' as const,\n loaderData\n }\n : (formattedMesh as PLYMesh);\n}\n\n/** Apply the requested normalized color representation to a decoded PLY mesh. */\nfunction formatPLYMeshColors(\n mesh: PLYMesh,\n colorFormat: 'uint8norm' | 'float16' | 'float32'\n): PLYMesh {\n const colorAttribute = mesh.attributes.COLOR_0;\n if (!colorAttribute) {\n return mesh;\n }\n\n const sourceScale = colorAttribute.value instanceof Uint16Array ? 65535 : 255;\n const value =\n colorFormat === 'float16'\n ? convertColorArrayToFloat16(colorAttribute.value, sourceScale)\n : convertColorArrayToFloat32(colorAttribute.value, sourceScale);\n const attributes = {...mesh.attributes};\n for (const [attributeName, attribute] of Object.entries(attributes)) {\n if (attribute.value === colorAttribute.value) {\n attributes[attributeName] = {\n ...attribute,\n value,\n normalized: false,\n ...(colorFormat === 'float16' ? {componentType: 'float16' as const} : {})\n };\n }\n }\n return {\n ...mesh,\n attributes,\n schema: deduceMeshSchema(attributes, mesh.schema.metadata)\n };\n}\n\n/** Return true if a parsed PLY batch is already a Mesh Arrow table. */\nfunction isMeshArrowTable(data: PLYMesh | MeshArrowTable): data is MeshArrowTable {\n return 'shape' in data && data.shape === 'arrow-table';\n}\n\n/** Hydrates worker columns and applies the requested PLY shape on the caller. */\nfunction deserializePLYWorkerResult(\n result: unknown,\n options?: PLYLoaderOptions\n): PLYMesh | MeshArrowTable {\n const table = deserializeArrowWorkerTable(result);\n return options?.ply?.shape === 'mesh'\n ? {...convertTableToMesh(table), loader: 'ply', loaderData: table.loaderData}\n : table;\n}\n\n/** Converts mesh batches only after the Arrow column buffers reach the caller. */\nfunction deserializePLYWorkerBatch(\n result: unknown,\n options?: PLYLoaderOptions\n): PLYMesh | ArrowTableBatch {\n return deserializePLYWorkerResult(result, options) as PLYMesh | ArrowTableBatch;\n}\n\n/** Parses PLY batches before shared cumulative metadata refinement. */\nasync function* parsePLYWithMetadataInBatches(\n arrayBuffer:\n | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n | Iterable<ArrayBufferLike | ArrayBufferView>,\n options?: PLYLoaderOptions\n) {\n const plyOptions = {\n ...options?.ply,\n batchSize: options?.core?.batchSize\n };\n for await (const meshOrTable of parsePLYInBatches(arrayBuffer, plyOptions)) {\n const convertedData = isMeshArrowTable(meshOrTable)\n ? convertPLYTable(meshOrTable, options)\n : convertPLYMesh(meshOrTable, options);\n yield isMeshArrowTable(convertedData) ? makeTableScanBatch(convertedData) : convertedData;\n }\n}\n\n/** Exposes native Arrow output while retaining the worker's column protocol. */\nexport const PLYLoaderWithParser = {\n ...PLYColumnLoader,\n dataType: PLYLoaderMetadata.dataType,\n batchType: PLYLoaderMetadata.batchType,\n parse: async (input: ArrayBuffer, options?: PLYLoaderOptions) =>\n unwrapPLYTable(await PLYColumnLoader.parse(input, options)),\n parseTextSync: (input: string, options?: PLYLoaderOptions) =>\n unwrapPLYTable(PLYColumnLoader.parseTextSync(input, options)),\n parseSync: (input: ArrayBuffer, options?: PLYLoaderOptions) =>\n unwrapPLYTable(PLYColumnLoader.parseSync(input, options)),\n async *parseInBatches(input, options) {\n for await (const batch of PLYColumnLoader.parseInBatches(input, options)) {\n if (isColumnBatch(batch)) {\n batch.data.schema.metadata.set(\n 'loaders.gl.ply.header',\n JSON.stringify((batch as ArrowTableBatch & {loaderData?: unknown}).loaderData)\n );\n for (const recordBatch of batch.data.batches) {\n recordBatch.schema.metadata.set(\n 'loaders.gl.ply.header',\n batch.data.schema.metadata.get('loaders.gl.ply.header')!\n );\n }\n if (batch.data.batches.length) yield* batch.data.batches;\n else yield makeArrowMetadataBatch(batch.data.schema);\n } else yield batch;\n }\n },\n deserializeWorkerResult: (result: unknown, options?: PLYLoaderOptions) =>\n unwrapPLYTable(PLYColumnLoader.deserializeWorkerResult(result, options)),\n deserializeWorkerBatch(result: unknown, options?: PLYLoaderOptions) {\n const batch = PLYColumnLoader.deserializeWorkerBatch(result, options);\n if (isColumnBatch(batch)) {\n const recordBatch = batch.data.batches[0] ?? makeArrowMetadataBatch(batch.data.schema);\n recordBatch.schema.metadata.set(\n 'loaders.gl.ply.header',\n JSON.stringify((batch as ArrowTableBatch & {loaderData?: unknown}).loaderData)\n );\n return recordBatch;\n }\n return batch;\n }\n} as const satisfies LoaderWithParser<PLYMesh | Table, PLYMesh | RecordBatch, PLYLoaderOptions>;\n\n/** Returns the Arrow table with its file metadata or the requested mesh. */\nfunction unwrapPLYTable(result: PLYMesh | MeshArrowTable): PLYMesh | Table {\n if ('shape' in result && result.shape === 'arrow-table') {\n result.data.schema.metadata.set(\n 'loaders.gl.ply.header',\n JSON.stringify((result as MeshArrowTable & {loaderData?: unknown}).loaderData)\n );\n return result.data;\n }\n return result as PLYMesh;\n}\n\n/** Identifies the private Arrow batch envelope. */\nfunction isColumnBatch(batch: PLYMesh | ArrowTableBatch): batch is ArrowTableBatch {\n return 'shape' in batch && batch.shape === 'arrow-table';\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_schema_utils", "PLYLoaderMetadata"]
7
7
  }
@@ -1,15 +1,18 @@
1
+ import type { Table, RecordBatch } from 'apache-arrow';
1
2
  import type { PLYLoaderOptions } from "./ply-loader-types.js";
2
3
  import type { MeshArrowTable, ArrowTableBatch } from '@loaders.gl/core/schema';
3
- import { serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
4
+ import { serializeArrowWorkerTable } from '@loaders.gl/core/arrow-worker-transport';
4
5
  import type { PLYMesh } from "./lib/ply-types.js";
5
6
  /**
6
7
  * Loader for PLY - Polygon File Format
7
8
  */
8
- export declare const PLYLoaderWithParser: {
9
+ export declare const PLYColumnLoader: {
10
+ readonly dataType: PLYMesh | MeshArrowTable;
11
+ readonly batchType: PLYMesh | ArrowTableBatch;
9
12
  readonly parse: (arrayBuffer: ArrayBuffer, options: PLYLoaderOptions | undefined) => Promise<MeshArrowTable | PLYMesh>;
10
13
  readonly parseTextSync: (arrayBuffer: string, options: PLYLoaderOptions | undefined) => MeshArrowTable | PLYMesh;
11
14
  readonly parseSync: (arrayBuffer: ArrayBuffer, options: PLYLoaderOptions | undefined) => MeshArrowTable | PLYMesh;
12
- readonly parseInBatches: (arrayBuffer: AsyncIterable<ArrayBufferLike | ArrayBufferView> | Iterable<ArrayBufferLike | ArrayBufferView>, options: PLYLoaderOptions | undefined) => AsyncGenerator<ArrowTableBatch | PLYMesh, void, any>;
15
+ readonly parseInBatches: (input: AsyncIterable<ArrayBufferLike | ArrayBufferView<ArrayBufferLike>> | Iterable<ArrayBufferLike | ArrayBufferView<ArrayBufferLike>>, options: PLYLoaderOptions | undefined) => AsyncIterable<ArrowTableBatch | PLYMesh>;
13
16
  readonly serializeWorkerResult: typeof serializeArrowWorkerTable;
14
17
  readonly deserializeWorkerResult: typeof deserializePLYWorkerResult;
15
18
  readonly serializeWorkerBatch: typeof serializeArrowWorkerTable;
@@ -19,7 +22,7 @@ export declare const PLYLoaderWithParser: {
19
22
  readonly workerInBatches: true;
20
23
  readonly options: {
21
24
  readonly ply: {
22
- readonly shape: "arrow-table";
25
+ readonly shape: "arrow";
23
26
  readonly colorFormat: "uint8norm";
24
27
  };
25
28
  };
@@ -33,12 +36,46 @@ export declare const PLYLoaderWithParser: {
33
36
  readonly text: true;
34
37
  readonly binary: true;
35
38
  readonly tests: ["ply"];
36
- readonly dataType: PLYMesh | MeshArrowTable;
37
- readonly batchType: PLYMesh | ArrowTableBatch;
39
+ readonly defaultShape: "arrow";
40
+ readonly supportsNativeArrow: true;
38
41
  };
39
42
  /** Hydrates worker columns and applies the requested PLY shape on the caller. */
40
43
  declare function deserializePLYWorkerResult(result: unknown, options?: PLYLoaderOptions): PLYMesh | MeshArrowTable;
41
44
  /** Converts mesh batches only after the Arrow column buffers reach the caller. */
42
45
  declare function deserializePLYWorkerBatch(result: unknown, options?: PLYLoaderOptions): PLYMesh | ArrowTableBatch;
46
+ /** Exposes native Arrow output while retaining the worker's column protocol. */
47
+ export declare const PLYLoaderWithParser: {
48
+ readonly dataType: Table<any> | PLYMesh;
49
+ readonly batchType: RecordBatch<any> | PLYMesh;
50
+ readonly parse: (input: ArrayBuffer, options?: PLYLoaderOptions) => Promise<Table<any> | PLYMesh>;
51
+ readonly parseTextSync: (input: string, options?: PLYLoaderOptions) => Table<any> | PLYMesh;
52
+ readonly parseSync: (input: ArrayBuffer, options?: PLYLoaderOptions) => Table<any> | PLYMesh;
53
+ readonly parseInBatches: (input: AsyncIterable<ArrayBufferLike | ArrayBufferView<ArrayBufferLike>> | Iterable<ArrayBufferLike | ArrayBufferView<ArrayBufferLike>>, options: PLYLoaderOptions | undefined) => AsyncGenerator<RecordBatch<any> | PLYMesh, void, unknown>;
54
+ readonly deserializeWorkerResult: (result: unknown, options?: PLYLoaderOptions) => Table<any> | PLYMesh;
55
+ readonly deserializeWorkerBatch: (result: unknown, options?: PLYLoaderOptions) => RecordBatch<any> | PLYMesh;
56
+ readonly serializeWorkerResult: typeof serializeArrowWorkerTable;
57
+ readonly serializeWorkerBatch: typeof serializeArrowWorkerTable;
58
+ readonly version: any;
59
+ readonly worker: true;
60
+ readonly workerInBatches: true;
61
+ readonly options: {
62
+ readonly ply: {
63
+ readonly shape: "arrow";
64
+ readonly colorFormat: "uint8norm";
65
+ };
66
+ };
67
+ readonly name: "PLY";
68
+ readonly id: "ply";
69
+ readonly module: "pointclouds";
70
+ readonly encoding: "text";
71
+ readonly format: "ply";
72
+ readonly extensions: ["ply"];
73
+ readonly mimeTypes: ["text/plain", "application/octet-stream"];
74
+ readonly text: true;
75
+ readonly binary: true;
76
+ readonly tests: ["ply"];
77
+ readonly defaultShape: "arrow";
78
+ readonly supportsNativeArrow: true;
79
+ };
43
80
  export {};
44
81
  //# sourceMappingURL=ply-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ply-loader.d.ts","sourceRoot":"","sources":["../../src/ply/ply-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,gBAAgB,EAAC,8BAA2B;AAKzD,OAAO,KAAK,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAEL,yBAAyB,EAC1B,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAY,OAAO,EAAC,2BAAwB;AA2CxD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;2CAOxB,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC,GAChD,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBlD,CAAC;AA6EF,iFAAiF;AACjF,iBAAS,0BAA0B,CACjC,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,GAAG,cAAc,CAK1B;AAED,kFAAkF;AAClF,iBAAS,yBAAyB,CAChC,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,GAAG,eAAe,CAE3B"}
1
+ {"version":3,"file":"ply-loader.d.ts","sourceRoot":"","sources":["../../src/ply/ply-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,KAAK,EAAE,WAAW,EAAC,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAC,gBAAgB,EAAC,8BAA2B;AAKzD,OAAO,KAAK,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAEL,yBAAyB,EAC1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAY,OAAO,EAAC,2BAAwB;AA2CxD;;GAEG;AACH,eAAO,MAAM,eAAe;uBAEG,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAcxD,CAAC;AA6EF,iFAAiF;AACjF,iBAAS,0BAA0B,CACjC,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,GAAG,cAAc,CAK1B;AAED,kFAAkF;AAClF,iBAAS,yBAAyB,CAChC,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,GAAG,eAAe,CAE3B;AAqBD,gFAAgF;AAChF,eAAO,MAAM,mBAAmB;;;4BAIT,WAAW,YAAY,gBAAgB;oCAErC,MAAM,YAAY,gBAAgB;gCAEtC,WAAW,YAAY,gBAAgB;;+CAoBxB,OAAO,YAAY,gBAAgB;8CAEtC,OAAO,YAAY,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;CAY2B,CAAC"}
@@ -1,18 +1,19 @@
1
1
  // loaders.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
+ import { refineArrowTableBatches, makeArrowMetadataBatch } from '@loaders.gl/core/schema-utils';
4
5
  // PLY Loader
5
6
  import { makeTableScanBatch } from '@loaders.gl/core/loader-utils';
6
7
  import { convertColorArrayToFloat16, convertColorArrayToFloat32 } from '@loaders.gl/core/schema';
7
- import { deserializeArrowWorkerTable, serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
8
- import { convertMeshToTable, convertTableToMesh, deduceMeshSchema } from '@loaders.gl/core/schema-utils';
8
+ import { deserializeArrowWorkerTable, serializeArrowWorkerTable } from '@loaders.gl/core/arrow-worker-transport';
9
+ import { convertMeshToArrowTableWrapper, convertTableToMesh, deduceMeshSchema } from '@loaders.gl/core/schema-utils';
9
10
  import { parsePLY, parsePLYHeader, parsePLYToArrowTable } from "./lib/parse-ply.js";
10
11
  import { convertPLYElementTablesToMeshArrowTable, parsePLYToElementTables } from "./lib/parse-ply-arrow.js";
11
12
  import { parsePLYInBatches } from "./lib/parse-ply-in-batches.js";
12
13
  import { PLYLoader as PLYLoaderMetadata } from "./ply-loader-types.js";
13
14
  const { preload: _PLYLoaderPreload, ...PLYLoaderMetadataWithoutPreload } = PLYLoaderMetadata;
14
15
  function convertPLYMesh(mesh, options) {
15
- const table = convertMeshToTable(mesh, 'arrow-table');
16
+ const table = convertMeshToArrowTableWrapper(mesh);
16
17
  return convertPLYTable(table, options, mesh.loaderData);
17
18
  }
18
19
  /** Parse PLY data using a direct Arrow path when requested and supported. */
@@ -30,23 +31,14 @@ function parsePLYData(data, options) {
30
31
  /**
31
32
  * Loader for PLY - Polygon File Format
32
33
  */
33
- export const PLYLoaderWithParser = {
34
+ export const PLYColumnLoader = {
34
35
  ...PLYLoaderMetadataWithoutPreload,
36
+ dataType: null,
37
+ batchType: null,
35
38
  parse: async (arrayBuffer, options) => parsePLYData(arrayBuffer, options),
36
39
  parseTextSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),
37
40
  parseSync: (arrayBuffer, options) => parsePLYData(arrayBuffer, options),
38
- parseInBatches: async function* (arrayBuffer, options) {
39
- const plyOptions = {
40
- ...options?.ply,
41
- batchSize: options?.batchSize ?? options?.core?.batchSize
42
- };
43
- for await (const meshOrTable of parsePLYInBatches(arrayBuffer, plyOptions)) {
44
- const convertedData = isMeshArrowTable(meshOrTable)
45
- ? convertPLYTable(meshOrTable, options)
46
- : convertPLYMesh(meshOrTable, options);
47
- yield isMeshArrowTable(convertedData) ? makeTableScanBatch(convertedData) : convertedData;
48
- }
49
- },
41
+ parseInBatches: (input, options) => refineArrowTableBatches(parsePLYWithMetadataInBatches(input, options)),
50
42
  serializeWorkerResult: serializeArrowWorkerTable,
51
43
  deserializeWorkerResult: deserializePLYWorkerResult,
52
44
  serializeWorkerBatch: serializeArrowWorkerTable,
@@ -55,7 +47,7 @@ export const PLYLoaderWithParser = {
55
47
  /** Return requested public PLY shape from the parser's Arrow table. */
56
48
  function convertPLYTable(table, options, header) {
57
49
  const loaderData = header || table.loaderData || { comments: [], elements: [] };
58
- const result = options?.ply?.shape === 'arrow-table'
50
+ const result = options?.ply?.shape === 'arrow'
59
51
  ? { ...table, loader: 'ply', loaderData }
60
52
  : {
61
53
  ...convertTableToMesh(table),
@@ -68,9 +60,9 @@ function convertPLYTable(table, options, header) {
68
60
  }
69
61
  const resultData = result;
70
62
  const formattedMesh = formatPLYMeshColors((isMeshArrowTable(resultData) ? convertTableToMesh(resultData) : resultData), colorFormat);
71
- return options?.ply?.shape === 'arrow-table'
63
+ return options?.ply?.shape === 'arrow'
72
64
  ? {
73
- ...convertMeshToTable(formattedMesh, 'arrow-table'),
65
+ ...convertMeshToArrowTableWrapper(formattedMesh),
74
66
  loader: 'ply',
75
67
  loaderData
76
68
  }
@@ -118,4 +110,64 @@ function deserializePLYWorkerResult(result, options) {
118
110
  function deserializePLYWorkerBatch(result, options) {
119
111
  return deserializePLYWorkerResult(result, options);
120
112
  }
113
+ /** Parses PLY batches before shared cumulative metadata refinement. */
114
+ async function* parsePLYWithMetadataInBatches(arrayBuffer, options) {
115
+ const plyOptions = {
116
+ ...options?.ply,
117
+ batchSize: options?.core?.batchSize
118
+ };
119
+ for await (const meshOrTable of parsePLYInBatches(arrayBuffer, plyOptions)) {
120
+ const convertedData = isMeshArrowTable(meshOrTable)
121
+ ? convertPLYTable(meshOrTable, options)
122
+ : convertPLYMesh(meshOrTable, options);
123
+ yield isMeshArrowTable(convertedData) ? makeTableScanBatch(convertedData) : convertedData;
124
+ }
125
+ }
126
+ /** Exposes native Arrow output while retaining the worker's column protocol. */
127
+ export const PLYLoaderWithParser = {
128
+ ...PLYColumnLoader,
129
+ dataType: PLYLoaderMetadata.dataType,
130
+ batchType: PLYLoaderMetadata.batchType,
131
+ parse: async (input, options) => unwrapPLYTable(await PLYColumnLoader.parse(input, options)),
132
+ parseTextSync: (input, options) => unwrapPLYTable(PLYColumnLoader.parseTextSync(input, options)),
133
+ parseSync: (input, options) => unwrapPLYTable(PLYColumnLoader.parseSync(input, options)),
134
+ async *parseInBatches(input, options) {
135
+ for await (const batch of PLYColumnLoader.parseInBatches(input, options)) {
136
+ if (isColumnBatch(batch)) {
137
+ batch.data.schema.metadata.set('loaders.gl.ply.header', JSON.stringify(batch.loaderData));
138
+ for (const recordBatch of batch.data.batches) {
139
+ recordBatch.schema.metadata.set('loaders.gl.ply.header', batch.data.schema.metadata.get('loaders.gl.ply.header'));
140
+ }
141
+ if (batch.data.batches.length)
142
+ yield* batch.data.batches;
143
+ else
144
+ yield makeArrowMetadataBatch(batch.data.schema);
145
+ }
146
+ else
147
+ yield batch;
148
+ }
149
+ },
150
+ deserializeWorkerResult: (result, options) => unwrapPLYTable(PLYColumnLoader.deserializeWorkerResult(result, options)),
151
+ deserializeWorkerBatch(result, options) {
152
+ const batch = PLYColumnLoader.deserializeWorkerBatch(result, options);
153
+ if (isColumnBatch(batch)) {
154
+ const recordBatch = batch.data.batches[0] ?? makeArrowMetadataBatch(batch.data.schema);
155
+ recordBatch.schema.metadata.set('loaders.gl.ply.header', JSON.stringify(batch.loaderData));
156
+ return recordBatch;
157
+ }
158
+ return batch;
159
+ }
160
+ };
161
+ /** Returns the Arrow table with its file metadata or the requested mesh. */
162
+ function unwrapPLYTable(result) {
163
+ if ('shape' in result && result.shape === 'arrow-table') {
164
+ result.data.schema.metadata.set('loaders.gl.ply.header', JSON.stringify(result.loaderData));
165
+ return result.data;
166
+ }
167
+ return result;
168
+ }
169
+ /** Identifies the private Arrow batch envelope. */
170
+ function isColumnBatch(batch) {
171
+ return 'shape' in batch && batch.shape === 'arrow-table';
172
+ }
121
173
  //# sourceMappingURL=ply-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ply-loader.js","sourceRoot":"","sources":["../../src/ply/ply-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ply-loader.js","sourceRoot":"","sources":["../../src/ply/ply-loader.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ __export(ply_writer_exports, {
25
25
  module.exports = __toCommonJS(ply_writer_exports);
26
26
  var import_schema_utils = require("@loaders.gl/core/schema-utils");
27
27
  var import_ply_format = require("./ply-format.cjs");
28
- var VERSION = true ? "5.0.0-beta.1" : "latest";
28
+ var VERSION = true ? "5.0.0-beta.10" : "latest";
29
29
  var PLYWriter = {
30
30
  ...import_ply_format.PLYFormat,
31
31
  dataType: null,
@@ -101,10 +101,10 @@ function encodePLY(data, options) {
101
101
  `;
102
102
  }
103
103
  function normalizeMeshArrowTable(data) {
104
- if ("shape" in data && data.shape === "arrow-table") {
104
+ if (!("attributes" in data)) {
105
105
  return data;
106
106
  }
107
- return (0, import_schema_utils.convertMeshToTable)(data, "arrow-table");
107
+ return (0, import_schema_utils.convertMeshToArrowTableWrapper)(data);
108
108
  }
109
109
  function getRequiredAttribute(mesh, attributeName) {
110
110
  const attribute = mesh.attributes[attributeName];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/ply/ply-writer.ts"],
4
- "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {WriterOptions, WriterWithEncoder} from '@loaders.gl/core/loader-utils';\nimport type {Mesh, MeshArrowTable, MeshAttribute} from '@loaders.gl/core/schema';\nimport {convertMeshToTable, convertTableToMesh} from '@loaders.gl/core/schema-utils';\nimport {PLYFormat} from './ply-format';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/** Options for `PLYWriter`. */\nexport type PLYWriterOptions = WriterOptions & {\n /** Reserved for future PLY writer options. */\n ply?: Record<string, never>;\n};\n\n/**\n * Writer for the PLY geometry format.\n */\nexport const PLYWriter = {\n ...PLYFormat,\n dataType: null as unknown as Mesh | MeshArrowTable,\n batchType: null as never,\n version: VERSION,\n options: {\n ply: {}\n },\n text: true,\n encode: async (data, options) => encodePLYSync(data, options),\n encodeSync: encodePLYSync,\n encodeTextSync: encodePLY\n} as const satisfies WriterWithEncoder<Mesh | MeshArrowTable, never, PLYWriterOptions>;\n\n/** Encode mesh category data as PLY bytes. */\nfunction encodePLYSync(data: Mesh | MeshArrowTable, options?: PLYWriterOptions): ArrayBuffer {\n const text = encodePLY(data, options);\n return new TextEncoder().encode(text).buffer;\n}\n\n/** Encode mesh category data as ASCII PLY text. */\nfunction encodePLY(data: Mesh | MeshArrowTable, options?: PLYWriterOptions): string {\n const mesh = convertTableToMesh(normalizeMeshArrowTable(data));\n const positionAttribute = getRequiredAttribute(mesh, 'POSITION');\n const normalAttribute = mesh.attributes.NORMAL;\n const textureCoordinateAttribute = mesh.attributes.TEXCOORD_0;\n const colorAttribute = mesh.attributes.COLOR_0;\n const customScalarAttributes = getCustomScalarAttributes(mesh);\n const vertexCount = positionAttribute.value.length / positionAttribute.size;\n const triangleIndices = getTriangleIndices(mesh, vertexCount);\n const header = getPLYHeader(\n vertexCount,\n triangleIndices.length / 3,\n Boolean(normalAttribute),\n Boolean(textureCoordinateAttribute),\n Boolean(colorAttribute),\n customScalarAttributes\n );\n const rows: string[] = [];\n\n for (let vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) {\n const row = [\n getComponent(positionAttribute, vertexIndex, 0),\n getComponent(positionAttribute, vertexIndex, 1),\n getComponent(positionAttribute, vertexIndex, 2)\n ];\n\n if (normalAttribute) {\n row.push(\n getComponent(normalAttribute, vertexIndex, 0),\n getComponent(normalAttribute, vertexIndex, 1),\n getComponent(normalAttribute, vertexIndex, 2)\n );\n }\n\n if (textureCoordinateAttribute) {\n row.push(\n getComponent(textureCoordinateAttribute, vertexIndex, 0),\n getComponent(textureCoordinateAttribute, vertexIndex, 1)\n );\n }\n\n if (colorAttribute) {\n row.push(\n getColorByte(colorAttribute, vertexIndex, 0),\n getColorByte(colorAttribute, vertexIndex, 1),\n getColorByte(colorAttribute, vertexIndex, 2)\n );\n }\n\n for (const [, attribute] of customScalarAttributes) {\n row.push(getComponent(attribute, vertexIndex, 0));\n }\n\n rows.push(row.join(' '));\n }\n\n for (let triangleIndex = 0; triangleIndex < triangleIndices.length; triangleIndex += 3) {\n rows.push(\n `3 ${triangleIndices[triangleIndex]} ${triangleIndices[triangleIndex + 1]} ${\n triangleIndices[triangleIndex + 2]\n }`\n );\n }\n\n return `${header.concat(rows).join('\\n')}\\n`;\n}\n\n/** Return mesh data as a MeshArrowTable, converting plain Mesh data first. */\nfunction normalizeMeshArrowTable(data: Mesh | MeshArrowTable): MeshArrowTable {\n if ('shape' in data && data.shape === 'arrow-table') {\n return data;\n }\n return convertMeshToTable(data as Mesh, 'arrow-table');\n}\n\n/** Return a required mesh attribute or throw a format-specific error. */\nfunction getRequiredAttribute(mesh: Mesh, attributeName: string): MeshAttribute {\n const attribute = mesh.attributes[attributeName];\n if (!attribute) {\n throw new Error(`PLYWriter: ${attributeName} attribute is required`);\n }\n return attribute;\n}\n\n/** Return the ASCII PLY header lines. */\nfunction getPLYHeader(\n vertexCount: number,\n faceCount: number,\n hasNormals: boolean,\n hasTextureCoordinates: boolean,\n hasColors: boolean,\n customScalarAttributes: [string, MeshAttribute][]\n): string[] {\n const header = [\n 'ply',\n 'format ascii 1.0',\n 'comment generated by loaders.gl',\n `element vertex ${vertexCount}`,\n 'property float x',\n 'property float y',\n 'property float z'\n ];\n\n if (hasNormals) {\n header.push('property float nx', 'property float ny', 'property float nz');\n }\n\n if (hasTextureCoordinates) {\n header.push('property float s', 'property float t');\n }\n\n if (hasColors) {\n header.push('property uchar red', 'property uchar green', 'property uchar blue');\n }\n\n for (const [attributeName] of customScalarAttributes) {\n header.push(`property float ${attributeName}`);\n }\n\n if (faceCount > 0) {\n header.push(`element face ${faceCount}`, 'property list uchar int vertex_indices');\n }\n\n header.push('end_header');\n return header;\n}\n\n/** Return additional one-component attributes that can be represented as scalar PLY properties. */\nfunction getCustomScalarAttributes(mesh: Mesh): [string, MeshAttribute][] {\n const reservedAttributeNames = new Set(['POSITION', 'NORMAL', 'TEXCOORD_0', 'COLOR_0']);\n return Object.entries(mesh.attributes).filter(\n ([attributeName, attribute]) =>\n !reservedAttributeNames.has(attributeName) && attribute.size === 1\n );\n}\n\n/** Return a single attribute component with 0 as the missing component fallback. */\nfunction getComponent(\n attribute: MeshAttribute,\n vertexIndex: number,\n componentIndex: number\n): number {\n return attribute.value[vertexIndex * attribute.size + componentIndex] || 0;\n}\n\n/** Return one color component as an unsigned byte. */\nfunction getColorByte(\n attribute: MeshAttribute,\n vertexIndex: number,\n componentIndex: number\n): number {\n const value = getComponent(attribute, vertexIndex, componentIndex);\n const byteValue = attribute.normalized || value <= 1 ? value * 255 : value;\n return Math.max(0, Math.min(255, Math.round(byteValue)));\n}\n\n/** Return triangle indices for indexed or sequential triangle-list meshes. */\nfunction getTriangleIndices(mesh: Mesh, vertexCount: number): number[] {\n if (mesh.indices?.value?.length) {\n return Array.from(mesh.indices.value);\n }\n\n if (mesh.mode !== 4 && mesh.topology !== 'triangle-list') {\n return [];\n }\n\n const triangleIndices: number[] = [];\n for (let vertexIndex = 0; vertexIndex + 2 < vertexCount; vertexIndex += 3) {\n triangleIndices.push(vertexIndex, vertexIndex + 1, vertexIndex + 2);\n }\n return triangleIndices;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Table} from 'apache-arrow';\nimport type {WriterOptions, WriterWithEncoder} from '@loaders.gl/core/loader-utils';\nimport type {Mesh, MeshArrowTable, MeshAttribute} from '@loaders.gl/core/schema';\nimport {convertMeshToArrowTableWrapper, convertTableToMesh} from '@loaders.gl/core/schema-utils';\nimport {PLYFormat} from './ply-format';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/** Options for `PLYWriter`. */\nexport type PLYWriterOptions = WriterOptions & {\n /** Reserved for future PLY writer options. */\n ply?: Record<string, never>;\n};\n\n/**\n * Writer for the PLY geometry format.\n */\nexport const PLYWriter = {\n ...PLYFormat,\n dataType: null as unknown as Mesh | MeshArrowTable | Table,\n batchType: null as never,\n version: VERSION,\n options: {\n ply: {}\n },\n text: true,\n encode: async (data, options) => encodePLYSync(data, options),\n encodeSync: encodePLYSync,\n encodeTextSync: encodePLY\n} as const satisfies WriterWithEncoder<Mesh | MeshArrowTable | Table, never, PLYWriterOptions>;\n\n/** Encode mesh category data as PLY bytes. */\nfunction encodePLYSync(\n data: Mesh | MeshArrowTable | Table,\n options?: PLYWriterOptions\n): ArrayBuffer {\n const text = encodePLY(data, options);\n return new TextEncoder().encode(text).buffer;\n}\n\n/** Encode mesh category data as ASCII PLY text. */\nfunction encodePLY(data: Mesh | MeshArrowTable | Table, options?: PLYWriterOptions): string {\n const mesh = convertTableToMesh(normalizeMeshArrowTable(data));\n const positionAttribute = getRequiredAttribute(mesh, 'POSITION');\n const normalAttribute = mesh.attributes.NORMAL;\n const textureCoordinateAttribute = mesh.attributes.TEXCOORD_0;\n const colorAttribute = mesh.attributes.COLOR_0;\n const customScalarAttributes = getCustomScalarAttributes(mesh);\n const vertexCount = positionAttribute.value.length / positionAttribute.size;\n const triangleIndices = getTriangleIndices(mesh, vertexCount);\n const header = getPLYHeader(\n vertexCount,\n triangleIndices.length / 3,\n Boolean(normalAttribute),\n Boolean(textureCoordinateAttribute),\n Boolean(colorAttribute),\n customScalarAttributes\n );\n const rows: string[] = [];\n\n for (let vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) {\n const row = [\n getComponent(positionAttribute, vertexIndex, 0),\n getComponent(positionAttribute, vertexIndex, 1),\n getComponent(positionAttribute, vertexIndex, 2)\n ];\n\n if (normalAttribute) {\n row.push(\n getComponent(normalAttribute, vertexIndex, 0),\n getComponent(normalAttribute, vertexIndex, 1),\n getComponent(normalAttribute, vertexIndex, 2)\n );\n }\n\n if (textureCoordinateAttribute) {\n row.push(\n getComponent(textureCoordinateAttribute, vertexIndex, 0),\n getComponent(textureCoordinateAttribute, vertexIndex, 1)\n );\n }\n\n if (colorAttribute) {\n row.push(\n getColorByte(colorAttribute, vertexIndex, 0),\n getColorByte(colorAttribute, vertexIndex, 1),\n getColorByte(colorAttribute, vertexIndex, 2)\n );\n }\n\n for (const [, attribute] of customScalarAttributes) {\n row.push(getComponent(attribute, vertexIndex, 0));\n }\n\n rows.push(row.join(' '));\n }\n\n for (let triangleIndex = 0; triangleIndex < triangleIndices.length; triangleIndex += 3) {\n rows.push(\n `3 ${triangleIndices[triangleIndex]} ${triangleIndices[triangleIndex + 1]} ${\n triangleIndices[triangleIndex + 2]\n }`\n );\n }\n\n return `${header.concat(rows).join('\\n')}\\n`;\n}\n\n/** Return mesh data as a MeshArrowTable, converting plain Mesh data first. */\nfunction normalizeMeshArrowTable(data: Mesh | MeshArrowTable | Table): MeshArrowTable | Table {\n if (!('attributes' in data)) {\n return data;\n }\n return convertMeshToArrowTableWrapper(data as Mesh);\n}\n\n/** Return a required mesh attribute or throw a format-specific error. */\nfunction getRequiredAttribute(mesh: Mesh, attributeName: string): MeshAttribute {\n const attribute = mesh.attributes[attributeName];\n if (!attribute) {\n throw new Error(`PLYWriter: ${attributeName} attribute is required`);\n }\n return attribute;\n}\n\n/** Return the ASCII PLY header lines. */\nfunction getPLYHeader(\n vertexCount: number,\n faceCount: number,\n hasNormals: boolean,\n hasTextureCoordinates: boolean,\n hasColors: boolean,\n customScalarAttributes: [string, MeshAttribute][]\n): string[] {\n const header = [\n 'ply',\n 'format ascii 1.0',\n 'comment generated by loaders.gl',\n `element vertex ${vertexCount}`,\n 'property float x',\n 'property float y',\n 'property float z'\n ];\n\n if (hasNormals) {\n header.push('property float nx', 'property float ny', 'property float nz');\n }\n\n if (hasTextureCoordinates) {\n header.push('property float s', 'property float t');\n }\n\n if (hasColors) {\n header.push('property uchar red', 'property uchar green', 'property uchar blue');\n }\n\n for (const [attributeName] of customScalarAttributes) {\n header.push(`property float ${attributeName}`);\n }\n\n if (faceCount > 0) {\n header.push(`element face ${faceCount}`, 'property list uchar int vertex_indices');\n }\n\n header.push('end_header');\n return header;\n}\n\n/** Return additional one-component attributes that can be represented as scalar PLY properties. */\nfunction getCustomScalarAttributes(mesh: Mesh): [string, MeshAttribute][] {\n const reservedAttributeNames = new Set(['POSITION', 'NORMAL', 'TEXCOORD_0', 'COLOR_0']);\n return Object.entries(mesh.attributes).filter(\n ([attributeName, attribute]) =>\n !reservedAttributeNames.has(attributeName) && attribute.size === 1\n );\n}\n\n/** Return a single attribute component with 0 as the missing component fallback. */\nfunction getComponent(\n attribute: MeshAttribute,\n vertexIndex: number,\n componentIndex: number\n): number {\n return attribute.value[vertexIndex * attribute.size + componentIndex] || 0;\n}\n\n/** Return one color component as an unsigned byte. */\nfunction getColorByte(\n attribute: MeshAttribute,\n vertexIndex: number,\n componentIndex: number\n): number {\n const value = getComponent(attribute, vertexIndex, componentIndex);\n const byteValue = attribute.normalized || value <= 1 ? value * 255 : value;\n return Math.max(0, Math.min(255, Math.round(byteValue)));\n}\n\n/** Return triangle indices for indexed or sequential triangle-list meshes. */\nfunction getTriangleIndices(mesh: Mesh, vertexCount: number): number[] {\n if (mesh.indices?.value?.length) {\n return Array.from(mesh.indices.value);\n }\n\n if (mesh.mode !== 4 && mesh.topology !== 'triangle-list') {\n return [];\n }\n\n const triangleIndices: number[] = [];\n for (let vertexIndex = 0; vertexIndex + 2 < vertexCount; vertexIndex += 3) {\n triangleIndices.push(vertexIndex, vertexIndex + 1, vertexIndex + 2);\n }\n return triangleIndices;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }