@nodetool-ai/base-nodes 0.7.0-rc.23 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/README.md +21 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/builtin-packs.d.ts +17 -0
  4. package/dist/builtin-packs.d.ts.map +1 -0
  5. package/dist/builtin-packs.js +95 -0
  6. package/dist/builtin-packs.js.map +1 -0
  7. package/dist/index.d.ts +63 -67
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +186 -173
  10. package/dist/index.js.map +1 -1
  11. package/dist/platforms/browser.d.ts +19 -0
  12. package/dist/platforms/browser.d.ts.map +1 -0
  13. package/dist/platforms/browser.js +29 -0
  14. package/dist/platforms/browser.js.map +1 -0
  15. package/package.json +72 -65
  16. package/dist/lib/audio-wav.d.ts +0 -66
  17. package/dist/lib/audio-wav.d.ts.map +0 -1
  18. package/dist/lib/audio-wav.js +0 -215
  19. package/dist/lib/audio-wav.js.map +0 -1
  20. package/dist/nodes/agent-tool-hydration.d.ts +0 -10
  21. package/dist/nodes/agent-tool-hydration.d.ts.map +0 -1
  22. package/dist/nodes/agent-tool-hydration.js +0 -43
  23. package/dist/nodes/agent-tool-hydration.js.map +0 -1
  24. package/dist/nodes/agents.d.ts +0 -262
  25. package/dist/nodes/agents.d.ts.map +0 -1
  26. package/dist/nodes/agents.js +0 -2856
  27. package/dist/nodes/agents.js.map +0 -1
  28. package/dist/nodes/anthropic.d.ts +0 -26
  29. package/dist/nodes/anthropic.d.ts.map +0 -1
  30. package/dist/nodes/anthropic.js +0 -133
  31. package/dist/nodes/anthropic.js.map +0 -1
  32. package/dist/nodes/apify.d.ts +0 -120
  33. package/dist/nodes/apify.d.ts.map +0 -1
  34. package/dist/nodes/apify.js +0 -618
  35. package/dist/nodes/apify.js.map +0 -1
  36. package/dist/nodes/audio.d.ts +0 -301
  37. package/dist/nodes/audio.d.ts.map +0 -1
  38. package/dist/nodes/audio.js +0 -1274
  39. package/dist/nodes/audio.js.map +0 -1
  40. package/dist/nodes/code-node.d.ts +0 -34
  41. package/dist/nodes/code-node.d.ts.map +0 -1
  42. package/dist/nodes/code-node.js +0 -343
  43. package/dist/nodes/code-node.js.map +0 -1
  44. package/dist/nodes/code.d.ts +0 -301
  45. package/dist/nodes/code.d.ts.map +0 -1
  46. package/dist/nodes/code.js +0 -850
  47. package/dist/nodes/code.js.map +0 -1
  48. package/dist/nodes/compare.d.ts +0 -18
  49. package/dist/nodes/compare.d.ts.map +0 -1
  50. package/dist/nodes/compare.js +0 -122
  51. package/dist/nodes/compare.js.map +0 -1
  52. package/dist/nodes/constant.d.ts +0 -315
  53. package/dist/nodes/constant.d.ts.map +0 -1
  54. package/dist/nodes/constant.js +0 -715
  55. package/dist/nodes/constant.js.map +0 -1
  56. package/dist/nodes/control.d.ts +0 -83
  57. package/dist/nodes/control.d.ts.map +0 -1
  58. package/dist/nodes/control.js +0 -212
  59. package/dist/nodes/control.js.map +0 -1
  60. package/dist/nodes/data.d.ts +0 -369
  61. package/dist/nodes/data.d.ts.map +0 -1
  62. package/dist/nodes/data.js +0 -1590
  63. package/dist/nodes/data.js.map +0 -1
  64. package/dist/nodes/document.d.ts +0 -134
  65. package/dist/nodes/document.d.ts.map +0 -1
  66. package/dist/nodes/document.js +0 -984
  67. package/dist/nodes/document.js.map +0 -1
  68. package/dist/nodes/extended-placeholders.d.ts +0 -6
  69. package/dist/nodes/extended-placeholders.d.ts.map +0 -1
  70. package/dist/nodes/extended-placeholders.js +0 -19
  71. package/dist/nodes/extended-placeholders.js.map +0 -1
  72. package/dist/nodes/gemini.d.ts +0 -110
  73. package/dist/nodes/gemini.d.ts.map +0 -1
  74. package/dist/nodes/gemini.js +0 -871
  75. package/dist/nodes/gemini.js.map +0 -1
  76. package/dist/nodes/generators.d.ts +0 -84
  77. package/dist/nodes/generators.d.ts.map +0 -1
  78. package/dist/nodes/generators.js +0 -968
  79. package/dist/nodes/generators.js.map +0 -1
  80. package/dist/nodes/image.d.ts +0 -232
  81. package/dist/nodes/image.d.ts.map +0 -1
  82. package/dist/nodes/image.js +0 -1395
  83. package/dist/nodes/image.js.map +0 -1
  84. package/dist/nodes/input.d.ts +0 -445
  85. package/dist/nodes/input.d.ts.map +0 -1
  86. package/dist/nodes/input.js +0 -1459
  87. package/dist/nodes/input.js.map +0 -1
  88. package/dist/nodes/kie-dynamic.d.ts +0 -31
  89. package/dist/nodes/kie-dynamic.d.ts.map +0 -1
  90. package/dist/nodes/kie-dynamic.js +0 -270
  91. package/dist/nodes/kie-dynamic.js.map +0 -1
  92. package/dist/nodes/lib-audio-dsp.d.ts +0 -85
  93. package/dist/nodes/lib-audio-dsp.d.ts.map +0 -1
  94. package/dist/nodes/lib-audio-dsp.js +0 -450
  95. package/dist/nodes/lib-audio-dsp.js.map +0 -1
  96. package/dist/nodes/lib-audio-effects.d.ts +0 -116
  97. package/dist/nodes/lib-audio-effects.d.ts.map +0 -1
  98. package/dist/nodes/lib-audio-effects.js +0 -905
  99. package/dist/nodes/lib-audio-effects.js.map +0 -1
  100. package/dist/nodes/lib-browser.d.ts +0 -99
  101. package/dist/nodes/lib-browser.d.ts.map +0 -1
  102. package/dist/nodes/lib-browser.js +0 -692
  103. package/dist/nodes/lib-browser.js.map +0 -1
  104. package/dist/nodes/lib-charts.d.ts +0 -20
  105. package/dist/nodes/lib-charts.d.ts.map +0 -1
  106. package/dist/nodes/lib-charts.js +0 -245
  107. package/dist/nodes/lib-charts.js.map +0 -1
  108. package/dist/nodes/lib-datetime.d.ts +0 -108
  109. package/dist/nodes/lib-datetime.d.ts.map +0 -1
  110. package/dist/nodes/lib-datetime.js +0 -421
  111. package/dist/nodes/lib-datetime.js.map +0 -1
  112. package/dist/nodes/lib-doc-convert.d.ts +0 -19
  113. package/dist/nodes/lib-doc-convert.d.ts.map +0 -1
  114. package/dist/nodes/lib-doc-convert.js +0 -257
  115. package/dist/nodes/lib-doc-convert.js.map +0 -1
  116. package/dist/nodes/lib-doc-transform.d.ts +0 -39
  117. package/dist/nodes/lib-doc-transform.d.ts.map +0 -1
  118. package/dist/nodes/lib-doc-transform.js +0 -335
  119. package/dist/nodes/lib-doc-transform.js.map +0 -1
  120. package/dist/nodes/lib-docx.d.ts +0 -106
  121. package/dist/nodes/lib-docx.d.ts.map +0 -1
  122. package/dist/nodes/lib-docx.js +0 -595
  123. package/dist/nodes/lib-docx.js.map +0 -1
  124. package/dist/nodes/lib-epub.d.ts +0 -55
  125. package/dist/nodes/lib-epub.d.ts.map +0 -1
  126. package/dist/nodes/lib-epub.js +0 -220
  127. package/dist/nodes/lib-epub.js.map +0 -1
  128. package/dist/nodes/lib-excel.d.ts +0 -74
  129. package/dist/nodes/lib-excel.d.ts.map +0 -1
  130. package/dist/nodes/lib-excel.js +0 -448
  131. package/dist/nodes/lib-excel.js.map +0 -1
  132. package/dist/nodes/lib-graphql.d.ts +0 -66
  133. package/dist/nodes/lib-graphql.d.ts.map +0 -1
  134. package/dist/nodes/lib-graphql.js +0 -333
  135. package/dist/nodes/lib-graphql.js.map +0 -1
  136. package/dist/nodes/lib-grid.d.ts +0 -27
  137. package/dist/nodes/lib-grid.d.ts.map +0 -1
  138. package/dist/nodes/lib-grid.js +0 -172
  139. package/dist/nodes/lib-grid.js.map +0 -1
  140. package/dist/nodes/lib-html-parse.d.ts +0 -108
  141. package/dist/nodes/lib-html-parse.d.ts.map +0 -1
  142. package/dist/nodes/lib-html-parse.js +0 -365
  143. package/dist/nodes/lib-html-parse.js.map +0 -1
  144. package/dist/nodes/lib-http.d.ts +0 -98
  145. package/dist/nodes/lib-http.d.ts.map +0 -1
  146. package/dist/nodes/lib-http.js +0 -267
  147. package/dist/nodes/lib-http.js.map +0 -1
  148. package/dist/nodes/lib-image-color-grading.d.ts +0 -3
  149. package/dist/nodes/lib-image-color-grading.d.ts.map +0 -1
  150. package/dist/nodes/lib-image-color-grading.js +0 -1386
  151. package/dist/nodes/lib-image-color-grading.js.map +0 -1
  152. package/dist/nodes/lib-image-draw.d.ts +0 -3
  153. package/dist/nodes/lib-image-draw.d.ts.map +0 -1
  154. package/dist/nodes/lib-image-draw.js +0 -470
  155. package/dist/nodes/lib-image-draw.js.map +0 -1
  156. package/dist/nodes/lib-image-enhance.d.ts +0 -3
  157. package/dist/nodes/lib-image-enhance.d.ts.map +0 -1
  158. package/dist/nodes/lib-image-enhance.js +0 -731
  159. package/dist/nodes/lib-image-enhance.js.map +0 -1
  160. package/dist/nodes/lib-image-filter.d.ts +0 -3
  161. package/dist/nodes/lib-image-filter.d.ts.map +0 -1
  162. package/dist/nodes/lib-image-filter.js +0 -684
  163. package/dist/nodes/lib-image-filter.js.map +0 -1
  164. package/dist/nodes/lib-image-utils.d.ts +0 -24
  165. package/dist/nodes/lib-image-utils.d.ts.map +0 -1
  166. package/dist/nodes/lib-image-utils.js +0 -150
  167. package/dist/nodes/lib-image-utils.js.map +0 -1
  168. package/dist/nodes/lib-mail.d.ts +0 -74
  169. package/dist/nodes/lib-mail.d.ts.map +0 -1
  170. package/dist/nodes/lib-mail.js +0 -452
  171. package/dist/nodes/lib-mail.js.map +0 -1
  172. package/dist/nodes/lib-markdown.d.ts +0 -70
  173. package/dist/nodes/lib-markdown.d.ts.map +0 -1
  174. package/dist/nodes/lib-markdown.js +0 -236
  175. package/dist/nodes/lib-markdown.js.map +0 -1
  176. package/dist/nodes/lib-nlp.d.ts +0 -98
  177. package/dist/nodes/lib-nlp.d.ts.map +0 -1
  178. package/dist/nodes/lib-nlp.js +0 -374
  179. package/dist/nodes/lib-nlp.js.map +0 -1
  180. package/dist/nodes/lib-notion.d.ts +0 -99
  181. package/dist/nodes/lib-notion.d.ts.map +0 -1
  182. package/dist/nodes/lib-notion.js +0 -601
  183. package/dist/nodes/lib-notion.js.map +0 -1
  184. package/dist/nodes/lib-ocr.d.ts +0 -31
  185. package/dist/nodes/lib-ocr.d.ts.map +0 -1
  186. package/dist/nodes/lib-ocr.js +0 -143
  187. package/dist/nodes/lib-ocr.js.map +0 -1
  188. package/dist/nodes/lib-os.d.ts +0 -312
  189. package/dist/nodes/lib-os.d.ts.map +0 -1
  190. package/dist/nodes/lib-os.js +0 -909
  191. package/dist/nodes/lib-os.js.map +0 -1
  192. package/dist/nodes/lib-pdf.d.ts +0 -142
  193. package/dist/nodes/lib-pdf.d.ts.map +0 -1
  194. package/dist/nodes/lib-pdf.js +0 -871
  195. package/dist/nodes/lib-pdf.js.map +0 -1
  196. package/dist/nodes/lib-pptx.d.ts +0 -29
  197. package/dist/nodes/lib-pptx.d.ts.map +0 -1
  198. package/dist/nodes/lib-pptx.js +0 -122
  199. package/dist/nodes/lib-pptx.js.map +0 -1
  200. package/dist/nodes/lib-rss.d.ts +0 -31
  201. package/dist/nodes/lib-rss.d.ts.map +0 -1
  202. package/dist/nodes/lib-rss.js +0 -163
  203. package/dist/nodes/lib-rss.js.map +0 -1
  204. package/dist/nodes/lib-s3.d.ts +0 -112
  205. package/dist/nodes/lib-s3.d.ts.map +0 -1
  206. package/dist/nodes/lib-s3.js +0 -521
  207. package/dist/nodes/lib-s3.js.map +0 -1
  208. package/dist/nodes/lib-secret.d.ts +0 -15
  209. package/dist/nodes/lib-secret.d.ts.map +0 -1
  210. package/dist/nodes/lib-secret.js +0 -42
  211. package/dist/nodes/lib-secret.js.map +0 -1
  212. package/dist/nodes/lib-sqlite.d.ts +0 -102
  213. package/dist/nodes/lib-sqlite.d.ts.map +0 -1
  214. package/dist/nodes/lib-sqlite.js +0 -532
  215. package/dist/nodes/lib-sqlite.js.map +0 -1
  216. package/dist/nodes/lib-supabase.d.ts +0 -86
  217. package/dist/nodes/lib-supabase.d.ts.map +0 -1
  218. package/dist/nodes/lib-supabase.js +0 -425
  219. package/dist/nodes/lib-supabase.js.map +0 -1
  220. package/dist/nodes/lib-svg.d.ts +0 -199
  221. package/dist/nodes/lib-svg.d.ts.map +0 -1
  222. package/dist/nodes/lib-svg.js +0 -1027
  223. package/dist/nodes/lib-svg.js.map +0 -1
  224. package/dist/nodes/lib-tensorflow.d.ts +0 -71
  225. package/dist/nodes/lib-tensorflow.d.ts.map +0 -1
  226. package/dist/nodes/lib-tensorflow.js +0 -351
  227. package/dist/nodes/lib-tensorflow.js.map +0 -1
  228. package/dist/nodes/lib-twilio.d.ts +0 -71
  229. package/dist/nodes/lib-twilio.d.ts.map +0 -1
  230. package/dist/nodes/lib-twilio.js +0 -469
  231. package/dist/nodes/lib-twilio.js.map +0 -1
  232. package/dist/nodes/lib-validate.d.ts +0 -84
  233. package/dist/nodes/lib-validate.d.ts.map +0 -1
  234. package/dist/nodes/lib-validate.js +0 -215
  235. package/dist/nodes/lib-validate.js.map +0 -1
  236. package/dist/nodes/lib-video-download.d.ts +0 -26
  237. package/dist/nodes/lib-video-download.d.ts.map +0 -1
  238. package/dist/nodes/lib-video-download.js +0 -299
  239. package/dist/nodes/lib-video-download.js.map +0 -1
  240. package/dist/nodes/messaging.d.ts +0 -88
  241. package/dist/nodes/messaging.d.ts.map +0 -1
  242. package/dist/nodes/messaging.js +0 -418
  243. package/dist/nodes/messaging.js.map +0 -1
  244. package/dist/nodes/mistral.d.ts +0 -83
  245. package/dist/nodes/mistral.d.ts.map +0 -1
  246. package/dist/nodes/mistral.js +0 -450
  247. package/dist/nodes/mistral.js.map +0 -1
  248. package/dist/nodes/model3d/analysis.d.ts +0 -13
  249. package/dist/nodes/model3d/analysis.d.ts.map +0 -1
  250. package/dist/nodes/model3d/analysis.js +0 -36
  251. package/dist/nodes/model3d/analysis.js.map +0 -1
  252. package/dist/nodes/model3d/base.d.ts +0 -11
  253. package/dist/nodes/model3d/base.d.ts.map +0 -1
  254. package/dist/nodes/model3d/base.js +0 -20
  255. package/dist/nodes/model3d/base.js.map +0 -1
  256. package/dist/nodes/model3d/boolean-ops.d.ts +0 -2
  257. package/dist/nodes/model3d/boolean-ops.d.ts.map +0 -1
  258. package/dist/nodes/model3d/boolean-ops.js +0 -172
  259. package/dist/nodes/model3d/boolean-ops.js.map +0 -1
  260. package/dist/nodes/model3d/cleanup.d.ts +0 -47
  261. package/dist/nodes/model3d/cleanup.d.ts.map +0 -1
  262. package/dist/nodes/model3d/cleanup.js +0 -136
  263. package/dist/nodes/model3d/cleanup.js.map +0 -1
  264. package/dist/nodes/model3d/convert.d.ts +0 -14
  265. package/dist/nodes/model3d/convert.d.ts.map +0 -1
  266. package/dist/nodes/model3d/convert.js +0 -64
  267. package/dist/nodes/model3d/convert.js.map +0 -1
  268. package/dist/nodes/model3d/defaults.d.ts +0 -34
  269. package/dist/nodes/model3d/defaults.d.ts.map +0 -1
  270. package/dist/nodes/model3d/defaults.js +0 -28
  271. package/dist/nodes/model3d/defaults.js.map +0 -1
  272. package/dist/nodes/model3d/document-ops.d.ts +0 -4
  273. package/dist/nodes/model3d/document-ops.d.ts.map +0 -1
  274. package/dist/nodes/model3d/document-ops.js +0 -40
  275. package/dist/nodes/model3d/document-ops.js.map +0 -1
  276. package/dist/nodes/model3d/generation.d.ts +0 -39
  277. package/dist/nodes/model3d/generation.d.ts.map +0 -1
  278. package/dist/nodes/model3d/generation.js +0 -179
  279. package/dist/nodes/model3d/generation.js.map +0 -1
  280. package/dist/nodes/model3d/glb.d.ts +0 -29
  281. package/dist/nodes/model3d/glb.d.ts.map +0 -1
  282. package/dist/nodes/model3d/glb.js +0 -255
  283. package/dist/nodes/model3d/glb.js.map +0 -1
  284. package/dist/nodes/model3d/index.d.ts +0 -20
  285. package/dist/nodes/model3d/index.d.ts.map +0 -1
  286. package/dist/nodes/model3d/index.js +0 -38
  287. package/dist/nodes/model3d/index.js.map +0 -1
  288. package/dist/nodes/model3d/io.d.ts +0 -38
  289. package/dist/nodes/model3d/io.d.ts.map +0 -1
  290. package/dist/nodes/model3d/io.js +0 -162
  291. package/dist/nodes/model3d/io.js.map +0 -1
  292. package/dist/nodes/model3d/mesh-ops.d.ts +0 -40
  293. package/dist/nodes/model3d/mesh-ops.d.ts.map +0 -1
  294. package/dist/nodes/model3d/mesh-ops.js +0 -775
  295. package/dist/nodes/model3d/mesh-ops.js.map +0 -1
  296. package/dist/nodes/model3d/nodes.d.ts +0 -2
  297. package/dist/nodes/model3d/nodes.d.ts.map +0 -1
  298. package/dist/nodes/model3d/nodes.js +0 -2
  299. package/dist/nodes/model3d/nodes.js.map +0 -1
  300. package/dist/nodes/model3d/ops.d.ts +0 -37
  301. package/dist/nodes/model3d/ops.d.ts.map +0 -1
  302. package/dist/nodes/model3d/ops.js +0 -137
  303. package/dist/nodes/model3d/ops.js.map +0 -1
  304. package/dist/nodes/model3d/transforms.d.ts +0 -49
  305. package/dist/nodes/model3d/transforms.d.ts.map +0 -1
  306. package/dist/nodes/model3d/transforms.js +0 -142
  307. package/dist/nodes/model3d/transforms.js.map +0 -1
  308. package/dist/nodes/model3d/types.d.ts +0 -81
  309. package/dist/nodes/model3d/types.d.ts.map +0 -1
  310. package/dist/nodes/model3d/types.js +0 -2
  311. package/dist/nodes/model3d/types.js.map +0 -1
  312. package/dist/nodes/model3d/utils.d.ts +0 -34
  313. package/dist/nodes/model3d/utils.d.ts.map +0 -1
  314. package/dist/nodes/model3d/utils.js +0 -185
  315. package/dist/nodes/model3d/utils.js.map +0 -1
  316. package/dist/nodes/model3d.d.ts +0 -2
  317. package/dist/nodes/model3d.d.ts.map +0 -1
  318. package/dist/nodes/model3d.js +0 -2
  319. package/dist/nodes/model3d.js.map +0 -1
  320. package/dist/nodes/openai.d.ts +0 -172
  321. package/dist/nodes/openai.d.ts.map +0 -1
  322. package/dist/nodes/openai.js +0 -1294
  323. package/dist/nodes/openai.js.map +0 -1
  324. package/dist/nodes/output.d.ts +0 -29
  325. package/dist/nodes/output.d.ts.map +0 -1
  326. package/dist/nodes/output.js +0 -87
  327. package/dist/nodes/output.js.map +0 -1
  328. package/dist/nodes/sandbox.d.ts +0 -63
  329. package/dist/nodes/sandbox.d.ts.map +0 -1
  330. package/dist/nodes/sandbox.js +0 -633
  331. package/dist/nodes/sandbox.js.map +0 -1
  332. package/dist/nodes/search.d.ts +0 -117
  333. package/dist/nodes/search.d.ts.map +0 -1
  334. package/dist/nodes/search.js +0 -607
  335. package/dist/nodes/search.js.map +0 -1
  336. package/dist/nodes/team.d.ts +0 -74
  337. package/dist/nodes/team.d.ts.map +0 -1
  338. package/dist/nodes/team.js +0 -309
  339. package/dist/nodes/team.js.map +0 -1
  340. package/dist/nodes/text-extra.d.ts +0 -633
  341. package/dist/nodes/text-extra.d.ts.map +0 -1
  342. package/dist/nodes/text-extra.js +0 -2226
  343. package/dist/nodes/text-extra.js.map +0 -1
  344. package/dist/nodes/tool-agents.d.ts +0 -334
  345. package/dist/nodes/tool-agents.d.ts.map +0 -1
  346. package/dist/nodes/tool-agents.js +0 -1861
  347. package/dist/nodes/tool-agents.js.map +0 -1
  348. package/dist/nodes/triggers.d.ts +0 -107
  349. package/dist/nodes/triggers.d.ts.map +0 -1
  350. package/dist/nodes/triggers.js +0 -706
  351. package/dist/nodes/triggers.js.map +0 -1
  352. package/dist/nodes/vector.d.ts +0 -168
  353. package/dist/nodes/vector.d.ts.map +0 -1
  354. package/dist/nodes/vector.js +0 -1121
  355. package/dist/nodes/vector.js.map +0 -1
  356. package/dist/nodes/video.d.ts +0 -387
  357. package/dist/nodes/video.d.ts.map +0 -1
  358. package/dist/nodes/video.js +0 -2383
  359. package/dist/nodes/video.js.map +0 -1
  360. package/dist/nodes/workflow.d.ts +0 -24
  361. package/dist/nodes/workflow.d.ts.map +0 -1
  362. package/dist/nodes/workflow.js +0 -146
  363. package/dist/nodes/workflow.js.map +0 -1
  364. package/dist/nodes/workspace.d.ts +0 -203
  365. package/dist/nodes/workspace.d.ts.map +0 -1
  366. package/dist/nodes/workspace.js +0 -795
  367. package/dist/nodes/workspace.js.map +0 -1
@@ -1,775 +0,0 @@
1
- import { buildGlb, COMP_FLOAT, COMP_UNSIGNED_INT, glbGetIndexAccessor, glbGetVec3Accessor, glbReadIndices, glbReadVec3, glbUpdateMinMax, glbWriteIndices, glbWriteVec3, parseGlb } from "./glb.js";
2
- function buildSequentialIndices(vertexCount) {
3
- const indices = new Uint32Array(vertexCount);
4
- for (let i = 0; i < vertexCount; i++) {
5
- indices[i] = i;
6
- }
7
- return indices;
8
- }
9
- function transformNormal(data, r00, r01, r02, r10, r11, r12, r20, r21, r22) {
10
- for (let i = 0; i < data.length; i += 3) {
11
- const x = data[i];
12
- const y = data[i + 1];
13
- const z = data[i + 2];
14
- const nx = r00 * x + r01 * y + r02 * z;
15
- const ny = r10 * x + r11 * y + r12 * z;
16
- const nz = r20 * x + r21 * y + r22 * z;
17
- const len = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;
18
- data[i] = nx / len;
19
- data[i + 1] = ny / len;
20
- data[i + 2] = nz / len;
21
- }
22
- }
23
- function applyAxisPreset(data, axisPreset) {
24
- if (axisPreset === "keep")
25
- return;
26
- for (let i = 0; i < data.length; i += 3) {
27
- const x = data[i];
28
- const y = data[i + 1];
29
- const z = data[i + 2];
30
- if (axisPreset === "z_to_y") {
31
- data[i] = x;
32
- data[i + 1] = z;
33
- data[i + 2] = -y;
34
- }
35
- else {
36
- data[i] = x;
37
- data[i + 1] = -z;
38
- data[i + 2] = y;
39
- }
40
- }
41
- }
42
- function computeBoundsAndCentroid(glb) {
43
- let sumX = 0;
44
- let sumY = 0;
45
- let sumZ = 0;
46
- let totalVerts = 0;
47
- let minX = Infinity;
48
- let minY = Infinity;
49
- let minZ = Infinity;
50
- let maxX = -Infinity;
51
- let maxY = -Infinity;
52
- let maxZ = -Infinity;
53
- for (const mesh of glb.json.meshes ?? []) {
54
- for (const primitive of mesh.primitives) {
55
- const posIdx = primitive.attributes["POSITION"];
56
- if (posIdx === undefined)
57
- continue;
58
- const position = glbGetVec3Accessor(glb.json, posIdx);
59
- if (!position)
60
- continue;
61
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
62
- for (let i = 0; i < data.length; i += 3) {
63
- sumX += data[i];
64
- sumY += data[i + 1];
65
- sumZ += data[i + 2];
66
- minX = Math.min(minX, data[i]);
67
- minY = Math.min(minY, data[i + 1]);
68
- minZ = Math.min(minZ, data[i + 2]);
69
- maxX = Math.max(maxX, data[i]);
70
- maxY = Math.max(maxY, data[i + 1]);
71
- maxZ = Math.max(maxZ, data[i + 2]);
72
- totalVerts++;
73
- }
74
- }
75
- }
76
- return {
77
- minX,
78
- minY,
79
- minZ,
80
- maxX,
81
- maxY,
82
- maxZ,
83
- centroidX: totalVerts > 0 ? sumX / totalVerts : 0,
84
- centroidY: totalVerts > 0 ? sumY / totalVerts : 0,
85
- centroidZ: totalVerts > 0 ? sumZ / totalVerts : 0,
86
- totalVerts
87
- };
88
- }
89
- function collectTriangleMeshData(glb) {
90
- const positions = [];
91
- const indices = [];
92
- let vertexOffset = 0;
93
- for (const mesh of glb.json.meshes ?? []) {
94
- for (const primitive of mesh.primitives) {
95
- const mode = primitive.mode ?? 4;
96
- if (mode !== 4) {
97
- continue;
98
- }
99
- const posIdx = primitive.attributes["POSITION"];
100
- if (posIdx === undefined) {
101
- continue;
102
- }
103
- const position = glbGetVec3Accessor(glb.json, posIdx);
104
- if (!position) {
105
- continue;
106
- }
107
- const primitivePositions = glbReadVec3(glb.bin, position.acc, position.bv);
108
- positions.push(...primitivePositions);
109
- let primitiveIndices;
110
- if (primitive.indices !== undefined) {
111
- const indexAccessor = glbGetIndexAccessor(glb.json, primitive.indices);
112
- const read = indexAccessor &&
113
- glbReadIndices(glb.bin, indexAccessor.acc, indexAccessor.bv);
114
- if (!read) {
115
- vertexOffset += position.acc.count;
116
- continue;
117
- }
118
- primitiveIndices = read;
119
- }
120
- else {
121
- primitiveIndices = buildSequentialIndices(position.acc.count);
122
- }
123
- for (const index of primitiveIndices) {
124
- indices.push(index + vertexOffset);
125
- }
126
- vertexOffset += position.acc.count;
127
- }
128
- }
129
- return { positions, indices };
130
- }
131
- function buildTriangleOnlyGlb(positions, indices) {
132
- const positionsArray = new Float32Array(positions);
133
- const indicesArray = new Uint32Array(indices);
134
- const positionBytes = new Uint8Array(positionsArray.buffer);
135
- const indexBytes = new Uint8Array(indicesArray.buffer);
136
- const min = [Infinity, Infinity, Infinity];
137
- const max = [-Infinity, -Infinity, -Infinity];
138
- for (let i = 0; i < positions.length; i += 3) {
139
- for (let axis = 0; axis < 3; axis++) {
140
- min[axis] = Math.min(min[axis], positions[i + axis]);
141
- max[axis] = Math.max(max[axis], positions[i + axis]);
142
- }
143
- }
144
- const json = {
145
- asset: { version: "2.0" },
146
- scenes: [{ nodes: [0] }],
147
- scene: 0,
148
- nodes: [{ mesh: 0 }],
149
- meshes: [
150
- {
151
- primitives: [
152
- {
153
- attributes: { POSITION: 0 },
154
- indices: 1
155
- }
156
- ]
157
- }
158
- ],
159
- buffers: [{ byteLength: positionBytes.byteLength + indexBytes.byteLength }],
160
- bufferViews: [
161
- { buffer: 0, byteOffset: 0, byteLength: positionBytes.byteLength },
162
- {
163
- buffer: 0,
164
- byteOffset: positionBytes.byteLength,
165
- byteLength: indexBytes.byteLength
166
- }
167
- ],
168
- accessors: [
169
- {
170
- bufferView: 0,
171
- componentType: COMP_FLOAT,
172
- count: positions.length / 3,
173
- type: "VEC3",
174
- min,
175
- max
176
- },
177
- {
178
- bufferView: 1,
179
- componentType: COMP_UNSIGNED_INT,
180
- count: indices.length,
181
- type: "SCALAR"
182
- }
183
- ]
184
- };
185
- const bin = new Uint8Array(positionBytes.byteLength + indexBytes.byteLength);
186
- bin.set(positionBytes, 0);
187
- bin.set(indexBytes, positionBytes.byteLength);
188
- return buildGlb(json, bin);
189
- }
190
- function compactTriangleMesh(mesh) {
191
- const remap = new Map();
192
- const positions = [];
193
- const indices = [];
194
- for (const sourceIndex of mesh.indices) {
195
- if (!remap.has(sourceIndex)) {
196
- const targetIndex = remap.size;
197
- remap.set(sourceIndex, targetIndex);
198
- positions.push(mesh.positions[sourceIndex * 3], mesh.positions[sourceIndex * 3 + 1], mesh.positions[sourceIndex * 3 + 2]);
199
- }
200
- indices.push(remap.get(sourceIndex));
201
- }
202
- return { positions, indices };
203
- }
204
- function quantizedKey(x, y, z, tolerance) {
205
- if (tolerance <= 0) {
206
- return `${x}:${y}:${z}`;
207
- }
208
- return [
209
- Math.round(x / tolerance),
210
- Math.round(y / tolerance),
211
- Math.round(z / tolerance)
212
- ].join(":");
213
- }
214
- function mergeDuplicateVertices(mesh, tolerance) {
215
- const indexMap = new Map();
216
- const remap = new Uint32Array(Math.floor(mesh.positions.length / 3));
217
- const positions = [];
218
- for (let i = 0; i < remap.length; i++) {
219
- const x = mesh.positions[i * 3];
220
- const y = mesh.positions[i * 3 + 1];
221
- const z = mesh.positions[i * 3 + 2];
222
- const key = quantizedKey(x, y, z, tolerance);
223
- const existing = indexMap.get(key);
224
- if (existing !== undefined) {
225
- remap[i] = existing;
226
- continue;
227
- }
228
- const next = Math.floor(positions.length / 3);
229
- indexMap.set(key, next);
230
- remap[i] = next;
231
- positions.push(x, y, z);
232
- }
233
- const indices = mesh.indices.map((index) => remap[index]);
234
- return compactTriangleMesh({ positions, indices });
235
- }
236
- function removeDegenerateFaces(mesh, tolerance) {
237
- const keptIndices = [];
238
- const areaThreshold = tolerance > 0 ? tolerance * tolerance : 0;
239
- for (let i = 0; i < mesh.indices.length; i += 3) {
240
- const a = mesh.indices[i];
241
- const b = mesh.indices[i + 1];
242
- const c = mesh.indices[i + 2];
243
- if (a === b || b === c || a === c) {
244
- continue;
245
- }
246
- const ax = mesh.positions[a * 3];
247
- const ay = mesh.positions[a * 3 + 1];
248
- const az = mesh.positions[a * 3 + 2];
249
- const bx = mesh.positions[b * 3];
250
- const by = mesh.positions[b * 3 + 1];
251
- const bz = mesh.positions[b * 3 + 2];
252
- const cx = mesh.positions[c * 3];
253
- const cy = mesh.positions[c * 3 + 1];
254
- const cz = mesh.positions[c * 3 + 2];
255
- const abx = bx - ax;
256
- const aby = by - ay;
257
- const abz = bz - az;
258
- const acx = cx - ax;
259
- const acy = cy - ay;
260
- const acz = cz - az;
261
- const crossX = aby * acz - abz * acy;
262
- const crossY = abz * acx - abx * acz;
263
- const crossZ = abx * acy - aby * acx;
264
- const areaSquared = crossX * crossX + crossY * crossY + crossZ * crossZ;
265
- if (areaSquared <= areaThreshold) {
266
- continue;
267
- }
268
- keptIndices.push(a, b, c);
269
- }
270
- return compactTriangleMesh({
271
- positions: mesh.positions,
272
- indices: keptIndices
273
- });
274
- }
275
- export function transformGlb(bytes, options) {
276
- const glb = parseGlb(bytes);
277
- if (!glb)
278
- return null;
279
- const tx = options.translateX;
280
- const ty = options.translateY;
281
- const tz = options.translateZ;
282
- const rx = (options.rotateXDeg * Math.PI) / 180;
283
- const ry = (options.rotateYDeg * Math.PI) / 180;
284
- const rz = (options.rotateZDeg * Math.PI) / 180;
285
- const scX = options.scaleX * options.uniformScale;
286
- const scY = options.scaleY * options.uniformScale;
287
- const scZ = options.scaleZ * options.uniformScale;
288
- const cx = Math.cos(rx);
289
- const sx = Math.sin(rx);
290
- const cy = Math.cos(ry);
291
- const sy = Math.sin(ry);
292
- const cz = Math.cos(rz);
293
- const sz = Math.sin(rz);
294
- const r00 = cy * cz;
295
- const r01 = sx * sy * cz - cx * sz;
296
- const r02 = cx * sy * cz + sx * sz;
297
- const r10 = cy * sz;
298
- const r11 = sx * sy * sz + cx * cz;
299
- const r12 = cx * sy * sz - sx * cz;
300
- const r20 = -sy;
301
- const r21 = sx * cy;
302
- const r22 = cx * cy;
303
- for (const mesh of glb.json.meshes ?? []) {
304
- for (const primitive of mesh.primitives) {
305
- const posIdx = primitive.attributes["POSITION"];
306
- if (posIdx !== undefined) {
307
- const position = glbGetVec3Accessor(glb.json, posIdx);
308
- if (position) {
309
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
310
- for (let i = 0; i < data.length; i += 3) {
311
- const x = data[i] * scX;
312
- const y = data[i + 1] * scY;
313
- const z = data[i + 2] * scZ;
314
- data[i] = r00 * x + r01 * y + r02 * z + tx;
315
- data[i + 1] = r10 * x + r11 * y + r12 * z + ty;
316
- data[i + 2] = r20 * x + r21 * y + r22 * z + tz;
317
- }
318
- glbWriteVec3(glb.bin, position.acc, position.bv, data);
319
- glbUpdateMinMax(position.acc, data);
320
- }
321
- }
322
- const normIdx = primitive.attributes["NORMAL"];
323
- if (normIdx !== undefined) {
324
- const normal = glbGetVec3Accessor(glb.json, normIdx);
325
- if (normal) {
326
- const data = glbReadVec3(glb.bin, normal.acc, normal.bv);
327
- transformNormal(data, r00, r01, r02, r10, r11, r12, r20, r21, r22);
328
- glbWriteVec3(glb.bin, normal.acc, normal.bv, data);
329
- }
330
- }
331
- }
332
- }
333
- return buildGlb(glb.json, glb.bin);
334
- }
335
- export function recalculateNormalsGlb(bytes, options) {
336
- const glb = parseGlb(bytes);
337
- if (!glb)
338
- return null;
339
- const mode = options.mode.toLowerCase();
340
- for (const mesh of glb.json.meshes ?? []) {
341
- for (const primitive of mesh.primitives) {
342
- const posIdx = primitive.attributes["POSITION"];
343
- const normIdx = primitive.attributes["NORMAL"];
344
- if (posIdx === undefined || normIdx === undefined)
345
- continue;
346
- const position = glbGetVec3Accessor(glb.json, posIdx);
347
- const normal = glbGetVec3Accessor(glb.json, normIdx);
348
- if (!position || !normal || position.acc.count !== normal.acc.count) {
349
- continue;
350
- }
351
- const pos = glbReadVec3(glb.bin, position.acc, position.bv);
352
- const normals = new Float32Array(pos.length);
353
- const vertexCount = position.acc.count;
354
- let indices;
355
- if (primitive.indices !== undefined) {
356
- const indexAccessor = glbGetIndexAccessor(glb.json, primitive.indices);
357
- if (indexAccessor) {
358
- indices =
359
- glbReadIndices(glb.bin, indexAccessor.acc, indexAccessor.bv) ??
360
- new Uint32Array(0);
361
- }
362
- else {
363
- indices = new Uint32Array(0);
364
- }
365
- }
366
- else {
367
- indices = buildSequentialIndices(vertexCount);
368
- }
369
- const triCount = Math.floor(indices.length / 3);
370
- for (let t = 0; t < triCount; t++) {
371
- const i0 = indices[t * 3];
372
- const i1 = indices[t * 3 + 1];
373
- const i2 = indices[t * 3 + 2];
374
- const ax = pos[i1 * 3] - pos[i0 * 3];
375
- const ay = pos[i1 * 3 + 1] - pos[i0 * 3 + 1];
376
- const az = pos[i1 * 3 + 2] - pos[i0 * 3 + 2];
377
- const bx = pos[i2 * 3] - pos[i0 * 3];
378
- const by = pos[i2 * 3 + 1] - pos[i0 * 3 + 1];
379
- const bz = pos[i2 * 3 + 2] - pos[i0 * 3 + 2];
380
- const nx = ay * bz - az * by;
381
- const ny = az * bx - ax * bz;
382
- const nz = ax * by - ay * bx;
383
- if (mode === "flat") {
384
- const len = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;
385
- for (const idx of [i0, i1, i2]) {
386
- normals[idx * 3] = nx / len;
387
- normals[idx * 3 + 1] = ny / len;
388
- normals[idx * 3 + 2] = nz / len;
389
- }
390
- }
391
- else {
392
- for (const idx of [i0, i1, i2]) {
393
- normals[idx * 3] += nx;
394
- normals[idx * 3 + 1] += ny;
395
- normals[idx * 3 + 2] += nz;
396
- }
397
- }
398
- }
399
- if (mode !== "flat") {
400
- for (let i = 0; i < normals.length; i += 3) {
401
- const len = Math.sqrt(normals[i] * normals[i] +
402
- normals[i + 1] * normals[i + 1] +
403
- normals[i + 2] * normals[i + 2]) || 1;
404
- normals[i] /= len;
405
- normals[i + 1] /= len;
406
- normals[i + 2] /= len;
407
- }
408
- }
409
- glbWriteVec3(glb.bin, normal.acc, normal.bv, normals);
410
- if (options.fixWinding && primitive.indices !== undefined) {
411
- const indexAccessor = glbGetIndexAccessor(glb.json, primitive.indices);
412
- if (indexAccessor) {
413
- const idx = glbReadIndices(glb.bin, indexAccessor.acc, indexAccessor.bv);
414
- if (idx) {
415
- let fixed = false;
416
- for (let t = 0; t < triCount; t++) {
417
- const i0 = idx[t * 3];
418
- const i1 = idx[t * 3 + 1];
419
- const i2 = idx[t * 3 + 2];
420
- const ax = pos[i1 * 3] - pos[i0 * 3];
421
- const ay = pos[i1 * 3 + 1] - pos[i0 * 3 + 1];
422
- const az = pos[i1 * 3 + 2] - pos[i0 * 3 + 2];
423
- const bx = pos[i2 * 3] - pos[i0 * 3];
424
- const by = pos[i2 * 3 + 1] - pos[i0 * 3 + 1];
425
- const bz = pos[i2 * 3 + 2] - pos[i0 * 3 + 2];
426
- const fnx = ay * bz - az * by;
427
- const fny = az * bx - ax * bz;
428
- const fnz = ax * by - ay * bx;
429
- const vn0 = normals[i0 * 3] * fnx +
430
- normals[i0 * 3 + 1] * fny +
431
- normals[i0 * 3 + 2] * fnz;
432
- if (vn0 < 0) {
433
- idx[t * 3 + 1] = i2;
434
- idx[t * 3 + 2] = i1;
435
- fixed = true;
436
- }
437
- }
438
- if (fixed) {
439
- glbWriteIndices(glb.bin, indexAccessor.acc, indexAccessor.bv, idx);
440
- }
441
- }
442
- }
443
- }
444
- }
445
- }
446
- return buildGlb(glb.json, glb.bin);
447
- }
448
- export function centerGlb(bytes, options) {
449
- const glb = parseGlb(bytes);
450
- if (!glb)
451
- return null;
452
- let sumX = 0;
453
- let sumY = 0;
454
- let sumZ = 0;
455
- let totalVerts = 0;
456
- let minX = Infinity;
457
- let minY = Infinity;
458
- let minZ = Infinity;
459
- let maxX = -Infinity;
460
- let maxY = -Infinity;
461
- let maxZ = -Infinity;
462
- for (const mesh of glb.json.meshes ?? []) {
463
- for (const primitive of mesh.primitives) {
464
- const posIdx = primitive.attributes["POSITION"];
465
- if (posIdx === undefined)
466
- continue;
467
- const position = glbGetVec3Accessor(glb.json, posIdx);
468
- if (!position)
469
- continue;
470
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
471
- for (let i = 0; i < data.length; i += 3) {
472
- sumX += data[i];
473
- sumY += data[i + 1];
474
- sumZ += data[i + 2];
475
- minX = Math.min(minX, data[i]);
476
- minY = Math.min(minY, data[i + 1]);
477
- minZ = Math.min(minZ, data[i + 2]);
478
- maxX = Math.max(maxX, data[i]);
479
- maxY = Math.max(maxY, data[i + 1]);
480
- maxZ = Math.max(maxZ, data[i + 2]);
481
- totalVerts++;
482
- }
483
- }
484
- }
485
- if (totalVerts === 0) {
486
- return buildGlb(glb.json, glb.bin);
487
- }
488
- let cx;
489
- let cy;
490
- let cz;
491
- if (options.useCentroid) {
492
- cx = sumX / totalVerts;
493
- cy = sumY / totalVerts;
494
- cz = sumZ / totalVerts;
495
- }
496
- else {
497
- cx = (minX + maxX) / 2;
498
- cy = (minY + maxY) / 2;
499
- cz = (minZ + maxZ) / 2;
500
- }
501
- for (const mesh of glb.json.meshes ?? []) {
502
- for (const primitive of mesh.primitives) {
503
- const posIdx = primitive.attributes["POSITION"];
504
- if (posIdx === undefined)
505
- continue;
506
- const position = glbGetVec3Accessor(glb.json, posIdx);
507
- if (!position)
508
- continue;
509
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
510
- for (let i = 0; i < data.length; i += 3) {
511
- data[i] -= cx;
512
- data[i + 1] -= cy;
513
- data[i + 2] -= cz;
514
- }
515
- glbWriteVec3(glb.bin, position.acc, position.bv, data);
516
- glbUpdateMinMax(position.acc, data);
517
- }
518
- }
519
- return buildGlb(glb.json, glb.bin);
520
- }
521
- export function flipNormalsGlb(bytes) {
522
- const glb = parseGlb(bytes);
523
- if (!glb)
524
- return null;
525
- for (const mesh of glb.json.meshes ?? []) {
526
- for (const primitive of mesh.primitives) {
527
- const normIdx = primitive.attributes["NORMAL"];
528
- if (normIdx !== undefined) {
529
- const normal = glbGetVec3Accessor(glb.json, normIdx);
530
- if (normal) {
531
- const data = glbReadVec3(glb.bin, normal.acc, normal.bv);
532
- for (let i = 0; i < data.length; i++) {
533
- data[i] = -data[i];
534
- }
535
- glbWriteVec3(glb.bin, normal.acc, normal.bv, data);
536
- }
537
- }
538
- if (primitive.indices !== undefined) {
539
- const indexAccessor = glbGetIndexAccessor(glb.json, primitive.indices);
540
- if (indexAccessor) {
541
- const idx = glbReadIndices(glb.bin, indexAccessor.acc, indexAccessor.bv);
542
- if (idx) {
543
- const triCount = Math.floor(idx.length / 3);
544
- for (let t = 0; t < triCount; t++) {
545
- const tmp = idx[t * 3 + 1];
546
- idx[t * 3 + 1] = idx[t * 3 + 2];
547
- idx[t * 3 + 2] = tmp;
548
- }
549
- glbWriteIndices(glb.bin, indexAccessor.acc, indexAccessor.bv, idx);
550
- }
551
- }
552
- }
553
- }
554
- }
555
- return buildGlb(glb.json, glb.bin);
556
- }
557
- export function normalizeGlb(bytes, options) {
558
- const glb = parseGlb(bytes);
559
- if (!glb)
560
- return null;
561
- for (const mesh of glb.json.meshes ?? []) {
562
- for (const primitive of mesh.primitives) {
563
- const posIdx = primitive.attributes["POSITION"];
564
- if (posIdx !== undefined) {
565
- const position = glbGetVec3Accessor(glb.json, posIdx);
566
- if (position) {
567
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
568
- applyAxisPreset(data, options.axisPreset);
569
- glbWriteVec3(glb.bin, position.acc, position.bv, data);
570
- glbUpdateMinMax(position.acc, data);
571
- }
572
- }
573
- const normIdx = primitive.attributes["NORMAL"];
574
- if (normIdx !== undefined) {
575
- const normal = glbGetVec3Accessor(glb.json, normIdx);
576
- if (normal) {
577
- const data = glbReadVec3(glb.bin, normal.acc, normal.bv);
578
- applyAxisPreset(data, options.axisPreset);
579
- glbWriteVec3(glb.bin, normal.acc, normal.bv, data);
580
- }
581
- }
582
- }
583
- }
584
- let summary = computeBoundsAndCentroid(glb);
585
- if (summary.totalVerts === 0) {
586
- return buildGlb(glb.json, glb.bin);
587
- }
588
- let translateX = 0;
589
- let translateY = 0;
590
- let translateZ = 0;
591
- if (options.centerMode === "bounds") {
592
- translateX = -((summary.minX + summary.maxX) / 2);
593
- translateY = -((summary.minY + summary.maxY) / 2);
594
- translateZ = -((summary.minZ + summary.maxZ) / 2);
595
- }
596
- else if (options.centerMode === "centroid") {
597
- translateX = -summary.centroidX;
598
- translateY = -summary.centroidY;
599
- translateZ = -summary.centroidZ;
600
- }
601
- for (const mesh of glb.json.meshes ?? []) {
602
- for (const primitive of mesh.primitives) {
603
- const posIdx = primitive.attributes["POSITION"];
604
- if (posIdx === undefined)
605
- continue;
606
- const position = glbGetVec3Accessor(glb.json, posIdx);
607
- if (!position)
608
- continue;
609
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
610
- for (let i = 0; i < data.length; i += 3) {
611
- data[i] += translateX;
612
- data[i + 1] += translateY;
613
- data[i + 2] += translateZ;
614
- }
615
- glbWriteVec3(glb.bin, position.acc, position.bv, data);
616
- glbUpdateMinMax(position.acc, data);
617
- }
618
- }
619
- summary = computeBoundsAndCentroid(glb);
620
- const sizeX = summary.maxX - summary.minX;
621
- const sizeY = summary.maxY - summary.minY;
622
- const sizeZ = summary.maxZ - summary.minZ;
623
- const longest = Math.max(sizeX, sizeY, sizeZ);
624
- if (options.scaleToSize && options.targetSize > 0 && longest > 0) {
625
- const scale = options.targetSize / longest;
626
- for (const mesh of glb.json.meshes ?? []) {
627
- for (const primitive of mesh.primitives) {
628
- const posIdx = primitive.attributes["POSITION"];
629
- if (posIdx !== undefined) {
630
- const position = glbGetVec3Accessor(glb.json, posIdx);
631
- if (position) {
632
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
633
- for (let i = 0; i < data.length; i++) {
634
- data[i] *= scale;
635
- }
636
- glbWriteVec3(glb.bin, position.acc, position.bv, data);
637
- glbUpdateMinMax(position.acc, data);
638
- }
639
- }
640
- }
641
- }
642
- }
643
- summary = computeBoundsAndCentroid(glb);
644
- if (options.placeOnGround) {
645
- const groundOffset = options.groundAxis === "y" ? -summary.minY : -summary.minZ;
646
- for (const mesh of glb.json.meshes ?? []) {
647
- for (const primitive of mesh.primitives) {
648
- const posIdx = primitive.attributes["POSITION"];
649
- if (posIdx === undefined)
650
- continue;
651
- const position = glbGetVec3Accessor(glb.json, posIdx);
652
- if (!position)
653
- continue;
654
- const data = glbReadVec3(glb.bin, position.acc, position.bv);
655
- for (let i = 0; i < data.length; i += 3) {
656
- if (options.groundAxis === "y") {
657
- data[i + 1] += groundOffset;
658
- }
659
- else {
660
- data[i + 2] += groundOffset;
661
- }
662
- }
663
- glbWriteVec3(glb.bin, position.acc, position.bv, data);
664
- glbUpdateMinMax(position.acc, data);
665
- }
666
- }
667
- }
668
- return buildGlb(glb.json, glb.bin);
669
- }
670
- export function extractLargestComponentGlb(bytes) {
671
- const glb = parseGlb(bytes);
672
- if (!glb)
673
- return null;
674
- const mesh = collectTriangleMeshData(glb);
675
- if (mesh.positions.length === 0 || mesh.indices.length === 0) {
676
- return buildGlb(glb.json, glb.bin);
677
- }
678
- const vertexCount = Math.floor(mesh.positions.length / 3);
679
- const parent = new Uint32Array(vertexCount);
680
- const rank = new Uint8Array(vertexCount);
681
- for (let i = 0; i < vertexCount; i++) {
682
- parent[i] = i;
683
- }
684
- const find = (value) => {
685
- let current = value;
686
- while (parent[current] !== current) {
687
- parent[current] = parent[parent[current]];
688
- current = parent[current];
689
- }
690
- return current;
691
- };
692
- const union = (a, b) => {
693
- const rootA = find(a);
694
- const rootB = find(b);
695
- if (rootA === rootB)
696
- return;
697
- if (rank[rootA] < rank[rootB]) {
698
- parent[rootA] = rootB;
699
- }
700
- else if (rank[rootA] > rank[rootB]) {
701
- parent[rootB] = rootA;
702
- }
703
- else {
704
- parent[rootB] = rootA;
705
- rank[rootA] += 1;
706
- }
707
- };
708
- for (let i = 0; i < mesh.indices.length; i += 3) {
709
- const a = mesh.indices[i];
710
- const b = mesh.indices[i + 1];
711
- const c = mesh.indices[i + 2];
712
- union(a, b);
713
- union(b, c);
714
- union(a, c);
715
- }
716
- const faceCounts = new Map();
717
- for (let i = 0; i < mesh.indices.length; i += 3) {
718
- const root = find(mesh.indices[i]);
719
- faceCounts.set(root, (faceCounts.get(root) ?? 0) + 1);
720
- }
721
- let largestRoot = -1;
722
- let largestFaceCount = -1;
723
- for (const [root, faceCount] of faceCounts.entries()) {
724
- if (faceCount > largestFaceCount) {
725
- largestRoot = root;
726
- largestFaceCount = faceCount;
727
- }
728
- }
729
- if (largestRoot < 0) {
730
- return buildGlb(glb.json, glb.bin);
731
- }
732
- const remap = new Map();
733
- const positions = [];
734
- const indices = [];
735
- for (let i = 0; i < mesh.indices.length; i += 3) {
736
- const a = mesh.indices[i];
737
- const b = mesh.indices[i + 1];
738
- const c = mesh.indices[i + 2];
739
- if (find(a) !== largestRoot)
740
- continue;
741
- for (const sourceIndex of [a, b, c]) {
742
- if (!remap.has(sourceIndex)) {
743
- const targetIndex = remap.size;
744
- remap.set(sourceIndex, targetIndex);
745
- positions.push(mesh.positions[sourceIndex * 3], mesh.positions[sourceIndex * 3 + 1], mesh.positions[sourceIndex * 3 + 2]);
746
- }
747
- indices.push(remap.get(sourceIndex));
748
- }
749
- }
750
- if (positions.length === 0 || indices.length === 0) {
751
- return buildGlb(glb.json, glb.bin);
752
- }
753
- return buildTriangleOnlyGlb(positions, indices);
754
- }
755
- export function repairGlb(bytes, options) {
756
- const glb = parseGlb(bytes);
757
- if (!glb)
758
- return null;
759
- const collected = collectTriangleMeshData(glb);
760
- if (collected.positions.length === 0 || collected.indices.length === 0) {
761
- return buildGlb(glb.json, glb.bin);
762
- }
763
- let repaired = collected;
764
- if (options.mergeDuplicateVertices) {
765
- repaired = mergeDuplicateVertices(repaired, Math.max(0, Number(options.positionTolerance) || 0));
766
- }
767
- if (options.removeDegenerateFaces) {
768
- repaired = removeDegenerateFaces(repaired, Math.max(0, Number(options.positionTolerance) || 0));
769
- }
770
- if (repaired.positions.length === 0 || repaired.indices.length === 0) {
771
- return buildGlb(glb.json, glb.bin);
772
- }
773
- return buildTriangleOnlyGlb(repaired.positions, repaired.indices);
774
- }
775
- //# sourceMappingURL=mesh-ops.js.map