@adobe/data 0.9.74 → 0.9.76

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 (317) hide show
  1. package/dist/ecs/database/transactional-store/create-transactional-store.js +7 -1
  2. package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
  3. package/dist/ecs/database/transactional-store/create-transactional-store.test.js +42 -0
  4. package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
  5. package/dist/functions/serialization/codec.js +4 -0
  6. package/dist/functions/serialization/codec.js.map +1 -1
  7. package/dist/functions/serialization/serialization.test.js +10 -0
  8. package/dist/functions/serialization/serialization.test.js.map +1 -1
  9. package/dist/math/i32/public.d.ts +2 -1
  10. package/dist/math/i32/public.js +2 -1
  11. package/dist/math/i32/public.js.map +1 -1
  12. package/dist/math/i32/shift-right.d.ts +2 -0
  13. package/dist/math/i32/shift-right.js +3 -0
  14. package/dist/math/i32/shift-right.js.map +1 -0
  15. package/dist/math/u32/count-leading-zeros.d.ts +2 -0
  16. package/dist/math/u32/count-leading-zeros.js +3 -0
  17. package/dist/math/u32/count-leading-zeros.js.map +1 -0
  18. package/dist/math/u32/count-one-bits.d.ts +2 -0
  19. package/dist/math/u32/count-one-bits.js +11 -0
  20. package/dist/math/u32/count-one-bits.js.map +1 -0
  21. package/dist/math/u32/count-trailing-zeros.d.ts +2 -0
  22. package/dist/math/u32/count-trailing-zeros.js +14 -0
  23. package/dist/math/u32/count-trailing-zeros.js.map +1 -0
  24. package/dist/math/u32/public.d.ts +6 -1
  25. package/dist/math/u32/public.js +6 -1
  26. package/dist/math/u32/public.js.map +1 -1
  27. package/dist/math/u32/reverse-bits.d.ts +2 -0
  28. package/dist/math/u32/reverse-bits.js +11 -0
  29. package/dist/math/u32/reverse-bits.js.map +1 -0
  30. package/dist/math/u32/shift-right.d.ts +2 -0
  31. package/dist/math/u32/shift-right.js +3 -0
  32. package/dist/math/u32/shift-right.js.map +1 -0
  33. package/dist/math/vec2/f32/f32.d.ts +4 -0
  34. package/dist/math/vec2/f32/f32.js +3 -0
  35. package/dist/math/vec2/f32/f32.js.map +1 -0
  36. package/dist/math/vec2/f32/functions.d.ts +50 -0
  37. package/dist/math/vec2/f32/functions.js +87 -0
  38. package/dist/math/vec2/f32/functions.js.map +1 -0
  39. package/dist/math/vec2/f32/layout.d.ts +1 -0
  40. package/dist/math/vec2/f32/layout.js +5 -0
  41. package/dist/math/vec2/f32/layout.js.map +1 -0
  42. package/dist/math/vec2/f32/public.d.ts +3 -0
  43. package/dist/math/vec2/f32/public.js +5 -0
  44. package/dist/math/vec2/f32/public.js.map +1 -0
  45. package/dist/math/vec2/f32/schema.d.ts +11 -0
  46. package/dist/math/vec2/f32/schema.js +10 -0
  47. package/dist/math/vec2/f32/schema.js.map +1 -0
  48. package/dist/math/vec2/i32/functions.d.ts +21 -0
  49. package/dist/math/vec2/i32/functions.js +39 -0
  50. package/dist/math/vec2/i32/functions.js.map +1 -0
  51. package/dist/math/vec2/i32/i32.d.ts +4 -0
  52. package/dist/math/vec2/i32/i32.js +3 -0
  53. package/dist/math/vec2/i32/i32.js.map +1 -0
  54. package/dist/math/vec2/i32/layout.d.ts +1 -0
  55. package/dist/math/vec2/i32/layout.js +5 -0
  56. package/dist/math/vec2/i32/layout.js.map +1 -0
  57. package/dist/math/vec2/i32/public.d.ts +3 -0
  58. package/dist/math/vec2/i32/public.js +5 -0
  59. package/dist/math/vec2/i32/public.js.map +1 -0
  60. package/dist/math/vec2/i32/schema.d.ts +12 -0
  61. package/dist/math/vec2/i32/schema.js +10 -0
  62. package/dist/math/vec2/i32/schema.js.map +1 -0
  63. package/dist/math/vec2/index.d.ts +61 -4
  64. package/dist/math/vec2/index.js +56 -1
  65. package/dist/math/vec2/index.js.map +1 -1
  66. package/dist/math/vec2/public.d.ts +5 -3
  67. package/dist/math/vec2/public.js +6 -3
  68. package/dist/math/vec2/public.js.map +1 -1
  69. package/dist/math/vec2/u32/functions.d.ts +20 -0
  70. package/dist/math/vec2/u32/functions.js +58 -0
  71. package/dist/math/vec2/u32/functions.js.map +1 -0
  72. package/dist/math/vec2/u32/layout.d.ts +1 -0
  73. package/dist/math/vec2/u32/layout.js +5 -0
  74. package/dist/math/vec2/u32/layout.js.map +1 -0
  75. package/dist/math/vec2/u32/public.d.ts +3 -0
  76. package/dist/math/vec2/u32/public.js +5 -0
  77. package/dist/math/vec2/u32/public.js.map +1 -0
  78. package/dist/math/vec2/u32/schema.d.ts +12 -0
  79. package/dist/math/vec2/u32/schema.js +10 -0
  80. package/dist/math/vec2/u32/schema.js.map +1 -0
  81. package/dist/math/vec2/u32/u32.d.ts +4 -0
  82. package/dist/math/vec2/u32/u32.js +3 -0
  83. package/dist/math/vec2/u32/u32.js.map +1 -0
  84. package/dist/math/vec3/f32/f32.d.ts +4 -0
  85. package/dist/math/vec3/f32/f32.js +3 -0
  86. package/dist/math/vec3/f32/f32.js.map +1 -0
  87. package/dist/math/vec3/f32/functions.d.ts +59 -0
  88. package/dist/math/vec3/f32/functions.js +139 -0
  89. package/dist/math/vec3/f32/functions.js.map +1 -0
  90. package/dist/math/vec3/f32/layout.d.ts +1 -0
  91. package/dist/math/vec3/f32/layout.js +5 -0
  92. package/dist/math/vec3/f32/layout.js.map +1 -0
  93. package/dist/math/vec3/f32/public.d.ts +3 -0
  94. package/dist/math/vec3/f32/public.js +5 -0
  95. package/dist/math/vec3/f32/public.js.map +1 -0
  96. package/dist/math/vec3/f32/schema.d.ts +11 -0
  97. package/dist/math/vec3/f32/schema.js +10 -0
  98. package/dist/math/vec3/f32/schema.js.map +1 -0
  99. package/dist/math/vec3/i32/functions.d.ts +23 -0
  100. package/dist/math/vec3/i32/functions.js +78 -0
  101. package/dist/math/vec3/i32/functions.js.map +1 -0
  102. package/dist/math/vec3/i32/i32.d.ts +4 -0
  103. package/dist/math/vec3/i32/i32.js +3 -0
  104. package/dist/math/vec3/i32/i32.js.map +1 -0
  105. package/dist/math/vec3/i32/layout.d.ts +1 -0
  106. package/dist/math/vec3/i32/layout.js +5 -0
  107. package/dist/math/vec3/i32/layout.js.map +1 -0
  108. package/dist/math/vec3/i32/public.d.ts +3 -0
  109. package/dist/math/vec3/i32/public.js +5 -0
  110. package/dist/math/vec3/i32/public.js.map +1 -0
  111. package/dist/math/vec3/i32/schema.d.ts +12 -0
  112. package/dist/math/vec3/i32/schema.js +10 -0
  113. package/dist/math/vec3/i32/schema.js.map +1 -0
  114. package/dist/math/vec3/index.d.ts +67 -4
  115. package/dist/math/vec3/index.js +62 -1
  116. package/dist/math/vec3/index.js.map +1 -1
  117. package/dist/math/vec3/public.d.ts +5 -3
  118. package/dist/math/vec3/public.js +6 -3
  119. package/dist/math/vec3/public.js.map +1 -1
  120. package/dist/math/vec3/u32/functions.d.ts +23 -0
  121. package/dist/math/vec3/u32/functions.js +85 -0
  122. package/dist/math/vec3/u32/functions.js.map +1 -0
  123. package/dist/math/vec3/u32/layout.d.ts +1 -0
  124. package/dist/math/vec3/u32/layout.js +5 -0
  125. package/dist/math/vec3/u32/layout.js.map +1 -0
  126. package/dist/math/vec3/u32/public.d.ts +3 -0
  127. package/dist/math/vec3/u32/public.js +5 -0
  128. package/dist/math/vec3/u32/public.js.map +1 -0
  129. package/dist/math/vec3/u32/schema.d.ts +12 -0
  130. package/dist/math/vec3/u32/schema.js +10 -0
  131. package/dist/math/vec3/u32/schema.js.map +1 -0
  132. package/dist/math/vec3/u32/u32.d.ts +4 -0
  133. package/dist/math/vec3/u32/u32.js +3 -0
  134. package/dist/math/vec3/u32/u32.js.map +1 -0
  135. package/dist/math/vec4/f32/f32.d.ts +4 -0
  136. package/dist/math/vec4/f32/f32.js +3 -0
  137. package/dist/math/vec4/f32/f32.js.map +1 -0
  138. package/dist/math/vec4/f32/functions.d.ts +49 -0
  139. package/dist/math/vec4/f32/functions.js +130 -0
  140. package/dist/math/vec4/f32/functions.js.map +1 -0
  141. package/dist/math/vec4/f32/layout.d.ts +1 -0
  142. package/dist/math/vec4/f32/layout.js +5 -0
  143. package/dist/math/vec4/f32/layout.js.map +1 -0
  144. package/dist/math/vec4/f32/public.d.ts +3 -0
  145. package/dist/math/vec4/f32/public.js +5 -0
  146. package/dist/math/vec4/f32/public.js.map +1 -0
  147. package/dist/math/vec4/f32/schema.d.ts +11 -0
  148. package/dist/math/vec4/f32/schema.js +10 -0
  149. package/dist/math/vec4/f32/schema.js.map +1 -0
  150. package/dist/math/vec4/i32/functions.d.ts +23 -0
  151. package/dist/math/vec4/i32/functions.js +91 -0
  152. package/dist/math/vec4/i32/functions.js.map +1 -0
  153. package/dist/math/vec4/i32/i32.d.ts +4 -0
  154. package/dist/math/vec4/i32/i32.js +3 -0
  155. package/dist/math/vec4/i32/i32.js.map +1 -0
  156. package/dist/math/vec4/i32/layout.d.ts +1 -0
  157. package/dist/math/vec4/i32/layout.js +5 -0
  158. package/dist/math/vec4/i32/layout.js.map +1 -0
  159. package/dist/math/vec4/i32/public.d.ts +3 -0
  160. package/dist/math/vec4/i32/public.js +5 -0
  161. package/dist/math/vec4/i32/public.js.map +1 -0
  162. package/dist/math/vec4/i32/schema.d.ts +12 -0
  163. package/dist/math/vec4/i32/schema.js +10 -0
  164. package/dist/math/vec4/i32/schema.js.map +1 -0
  165. package/dist/math/vec4/index.d.ts +60 -4
  166. package/dist/math/vec4/index.js +55 -1
  167. package/dist/math/vec4/index.js.map +1 -1
  168. package/dist/math/vec4/public.d.ts +5 -3
  169. package/dist/math/vec4/public.js +6 -3
  170. package/dist/math/vec4/public.js.map +1 -1
  171. package/dist/math/vec4/u32/functions.d.ts +22 -0
  172. package/dist/math/vec4/u32/functions.js +99 -0
  173. package/dist/math/vec4/u32/functions.js.map +1 -0
  174. package/dist/math/vec4/u32/layout.d.ts +1 -0
  175. package/dist/math/vec4/u32/layout.js +5 -0
  176. package/dist/math/vec4/u32/layout.js.map +1 -0
  177. package/dist/math/vec4/u32/public.d.ts +3 -0
  178. package/dist/math/vec4/u32/public.js +5 -0
  179. package/dist/math/vec4/u32/public.js.map +1 -0
  180. package/dist/math/vec4/u32/schema.d.ts +12 -0
  181. package/dist/math/vec4/u32/schema.js +10 -0
  182. package/dist/math/vec4/u32/schema.js.map +1 -0
  183. package/dist/math/vec4/u32/u32.d.ts +4 -0
  184. package/dist/math/vec4/u32/u32.js +3 -0
  185. package/dist/math/vec4/u32/u32.js.map +1 -0
  186. package/dist/schema/boolean/schema.d.ts +1 -0
  187. package/dist/schema/boolean/schema.js +2 -1
  188. package/dist/schema/boolean/schema.js.map +1 -1
  189. package/dist/schema/from-archetype.d.ts +14 -0
  190. package/dist/schema/from-archetype.js +9 -0
  191. package/dist/schema/from-archetype.js.map +1 -0
  192. package/dist/schema/from-components.d.ts +14 -0
  193. package/dist/schema/from-components.js +9 -0
  194. package/dist/schema/from-components.js.map +1 -0
  195. package/dist/schema/from-components.test.d.ts +1 -0
  196. package/dist/schema/from-components.test.js +49 -0
  197. package/dist/schema/from-components.test.js.map +1 -0
  198. package/dist/schema/from-components.type-test.d.ts +1 -0
  199. package/dist/schema/from-components.type-test.js +40 -0
  200. package/dist/schema/from-components.type-test.js.map +1 -0
  201. package/dist/schema/public.d.ts +2 -0
  202. package/dist/schema/public.js +2 -0
  203. package/dist/schema/public.js.map +1 -1
  204. package/dist/schema/to-type.d.ts +2 -0
  205. package/dist/schema/to-type.js.map +1 -1
  206. package/dist/table/copy-column-to-gpu-buffer.js +10 -2
  207. package/dist/table/copy-column-to-gpu-buffer.js.map +1 -1
  208. package/dist/tsconfig.tsbuildinfo +1 -1
  209. package/dist/typed-buffer/create-boolean-buffer.d.ts +6 -0
  210. package/dist/typed-buffer/create-boolean-buffer.js +83 -0
  211. package/dist/typed-buffer/create-boolean-buffer.js.map +1 -0
  212. package/dist/typed-buffer/create-boolean-buffer.test.d.ts +1 -0
  213. package/dist/typed-buffer/create-boolean-buffer.test.js +159 -0
  214. package/dist/typed-buffer/create-boolean-buffer.test.js.map +1 -0
  215. package/dist/typed-buffer/create-typed-buffer.js +4 -0
  216. package/dist/typed-buffer/create-typed-buffer.js.map +1 -1
  217. package/dist/typed-buffer/index.d.ts +1 -0
  218. package/dist/typed-buffer/index.js +1 -0
  219. package/dist/typed-buffer/index.js.map +1 -1
  220. package/dist/typed-buffer/register-typed-buffer-codecs.js +20 -2
  221. package/dist/typed-buffer/register-typed-buffer-codecs.js.map +1 -1
  222. package/dist/typed-buffer/typed-buffer.d.ts +4 -1
  223. package/dist/typed-buffer/typed-buffer.js +1 -0
  224. package/dist/typed-buffer/typed-buffer.js.map +1 -1
  225. package/dist/types/volume/axis-line-callback.d.ts +14 -0
  226. package/dist/types/volume/axis-line-callback.js +3 -0
  227. package/dist/types/volume/axis-line-callback.js.map +1 -0
  228. package/dist/types/volume/block-callback.d.ts +9 -0
  229. package/dist/types/volume/block-callback.js +3 -0
  230. package/dist/types/volume/block-callback.js.map +1 -0
  231. package/dist/types/volume/block-span.d.ts +9 -0
  232. package/dist/types/volume/block-span.js +3 -0
  233. package/dist/types/volume/block-span.js.map +1 -0
  234. package/dist/types/volume/create-dense/create-dense.d.ts +6 -0
  235. package/dist/types/volume/create-dense/create-dense.js +9 -0
  236. package/dist/types/volume/create-dense/create-dense.js.map +1 -0
  237. package/dist/types/volume/create-dense/create-dense.test.d.ts +1 -0
  238. package/dist/types/volume/create-dense/create-dense.test.js +121 -0
  239. package/dist/types/volume/create-dense/create-dense.test.js.map +1 -0
  240. package/dist/types/volume/create-dense/dense-volume.d.ts +17 -0
  241. package/dist/types/volume/create-dense/dense-volume.js +51 -0
  242. package/dist/types/volume/create-dense/dense-volume.js.map +1 -0
  243. package/dist/types/volume/create-dense/is-dense-volume.d.ts +2 -0
  244. package/dist/types/volume/create-dense/is-dense-volume.js +4 -0
  245. package/dist/types/volume/create-dense/is-dense-volume.js.map +1 -0
  246. package/dist/types/volume/create-dense/register-dense-volume-codecs.d.ts +1 -0
  247. package/dist/types/volume/create-dense/register-dense-volume-codecs.js +33 -0
  248. package/dist/types/volume/create-dense/register-dense-volume-codecs.js.map +1 -0
  249. package/dist/types/volume/create-sparse-block/block-dims.d.ts +35 -0
  250. package/dist/types/volume/create-sparse-block/block-dims.js +93 -0
  251. package/dist/types/volume/create-sparse-block/block-dims.js.map +1 -0
  252. package/dist/types/volume/create-sparse-block/block-key.d.ts +9 -0
  253. package/dist/types/volume/create-sparse-block/block-key.js +23 -0
  254. package/dist/types/volume/create-sparse-block/block-key.js.map +1 -0
  255. package/dist/types/volume/create-sparse-block/create-sparse-block.d.ts +6 -0
  256. package/dist/types/volume/create-sparse-block/create-sparse-block.js +9 -0
  257. package/dist/types/volume/create-sparse-block/create-sparse-block.js.map +1 -0
  258. package/dist/types/volume/create-sparse-block/create-sparse-block.test.d.ts +1 -0
  259. package/dist/types/volume/create-sparse-block/create-sparse-block.test.js +287 -0
  260. package/dist/types/volume/create-sparse-block/create-sparse-block.test.js.map +1 -0
  261. package/dist/types/volume/create-sparse-block/is-sparse-block-volume.d.ts +2 -0
  262. package/dist/types/volume/create-sparse-block/is-sparse-block-volume.js +4 -0
  263. package/dist/types/volume/create-sparse-block/is-sparse-block-volume.js.map +1 -0
  264. package/dist/types/volume/create-sparse-block/iterate-sparse-block-axis.d.ts +19 -0
  265. package/dist/types/volume/create-sparse-block/iterate-sparse-block-axis.js +160 -0
  266. package/dist/types/volume/create-sparse-block/iterate-sparse-block-axis.js.map +1 -0
  267. package/dist/types/volume/create-sparse-block/pack-block-key.d.ts +1 -0
  268. package/dist/types/volume/create-sparse-block/pack-block-key.js +3 -0
  269. package/dist/types/volume/create-sparse-block/pack-block-key.js.map +1 -0
  270. package/dist/types/volume/create-sparse-block/register-sparse-block-volume-codecs.d.ts +1 -0
  271. package/dist/types/volume/create-sparse-block/register-sparse-block-volume-codecs.js +37 -0
  272. package/dist/types/volume/create-sparse-block/register-sparse-block-volume-codecs.js.map +1 -0
  273. package/dist/types/volume/create-sparse-block/sparse-block-volume.d.ts +29 -0
  274. package/dist/types/volume/create-sparse-block/sparse-block-volume.js +133 -0
  275. package/dist/types/volume/create-sparse-block/sparse-block-volume.js.map +1 -0
  276. package/dist/types/volume/create-sparse-block/unpack-block-key.d.ts +5 -0
  277. package/dist/types/volume/create-sparse-block/unpack-block-key.js +7 -0
  278. package/dist/types/volume/create-sparse-block/unpack-block-key.js.map +1 -0
  279. package/dist/types/volume/get-dense-index.d.ts +2 -0
  280. package/dist/types/volume/get-dense-index.js +6 -0
  281. package/dist/types/volume/get-dense-index.js.map +1 -0
  282. package/dist/types/volume/get-dense-index.test.d.ts +1 -0
  283. package/dist/types/volume/get-dense-index.test.js +17 -0
  284. package/dist/types/volume/get-dense-index.test.js.map +1 -0
  285. package/dist/types/volume/is-in-bounds.d.ts +2 -0
  286. package/dist/types/volume/is-in-bounds.js +6 -0
  287. package/dist/types/volume/is-in-bounds.js.map +1 -0
  288. package/dist/types/volume/is-in-bounds.test.d.ts +1 -0
  289. package/dist/types/volume/is-in-bounds.test.js +12 -0
  290. package/dist/types/volume/is-in-bounds.test.js.map +1 -0
  291. package/dist/types/volume/iterate-axis.d.ts +7 -0
  292. package/dist/types/volume/iterate-axis.js +58 -0
  293. package/dist/types/volume/iterate-axis.js.map +1 -0
  294. package/dist/types/volume/iterate-sparse-block-axis.test.d.ts +1 -0
  295. package/dist/types/volume/iterate-sparse-block-axis.test.js +11 -0
  296. package/dist/types/volume/iterate-sparse-block-axis.test.js.map +1 -0
  297. package/dist/types/volume/iterate-sparse-block.benchmark.test.d.ts +1 -0
  298. package/dist/types/volume/iterate-sparse-block.benchmark.test.js +80 -0
  299. package/dist/types/volume/iterate-sparse-block.benchmark.test.js.map +1 -0
  300. package/dist/types/volume/iterate-test-helpers.d.ts +14 -0
  301. package/dist/types/volume/iterate-test-helpers.js +41 -0
  302. package/dist/types/volume/iterate-test-helpers.js.map +1 -0
  303. package/dist/types/volume/public.d.ts +7 -0
  304. package/dist/types/volume/public.js +6 -0
  305. package/dist/types/volume/public.js.map +1 -0
  306. package/dist/types/volume/sparse-block-iterate-benchmark.d.ts +49 -0
  307. package/dist/types/volume/sparse-block-iterate-benchmark.js +131 -0
  308. package/dist/types/volume/sparse-block-iterate-benchmark.js.map +1 -0
  309. package/dist/types/volume/volume.d.ts +13 -0
  310. package/dist/types/volume/volume.js +3 -0
  311. package/dist/types/volume/volume.js.map +1 -0
  312. package/package.json +1 -1
  313. package/references/data-lit/package.json +1 -1
  314. package/references/data-lit-tictactoe/package.json +1 -1
  315. package/references/data-react/package.json +1 -1
  316. package/references/data-react-hello/package.json +1 -1
  317. package/references/data-react-pixie/package.json +1 -1
@@ -0,0 +1,121 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { describe, expect, it } from "vitest";
3
+ import { Boolean } from "../../../schema/boolean/index.js";
4
+ import { equals } from "../../../equals.js";
5
+ import { deserialize, serialize } from "../../../functions/serialization/serialize.js";
6
+ import { collectAxisSegments } from "../iterate-test-helpers.js";
7
+ import { getDenseIndex } from "../get-dense-index.js";
8
+ import { createDense } from "./create-dense.js";
9
+ import { DenseVolume } from "./dense-volume.js";
10
+ import { isDenseVolume } from "./is-dense-volume.js";
11
+ describe("createDense", () => {
12
+ it("creates a dense volume with typed buffer capacity matching size", () => {
13
+ const volume = createDense([2, 3, 4], Boolean.schema);
14
+ expect(volume).toBeInstanceOf(DenseVolume);
15
+ expect(isDenseVolume(volume)).toBe(true);
16
+ expect(volume.size).toEqual([2, 3, 4]);
17
+ if (isDenseVolume(volume)) {
18
+ expect(volume.data.capacity).toBe(24);
19
+ }
20
+ });
21
+ it("reads and writes voxels by coordinate", () => {
22
+ const volume = createDense([2, 2, 2], Boolean.schema);
23
+ volume.set(1, 0, 1, true);
24
+ expect(volume.get(1, 0, 1)).toBe(true);
25
+ expect(volume.get(0, 0, 0)).toBe(false);
26
+ });
27
+ it("returns schema default for out-of-bounds get and ignores out-of-bounds set", () => {
28
+ const volume = createDense([1, 1, 1], Boolean.schema);
29
+ volume.set(0, 0, 0, true);
30
+ expect(volume.get(1, 0, 0)).toBe(false);
31
+ volume.set(0, 1, 0, true);
32
+ expect(volume.get(0, 0, 0)).toBe(true);
33
+ });
34
+ it("requires schema default at creation", () => {
35
+ expect(() => createDense([1, 1, 1], { type: "boolean" })).toThrow("DenseVolume schema must include a default value");
36
+ });
37
+ it("iterateX walks each x row with reused segments", () => {
38
+ const volume = createDense([3, 2, 2], Boolean.schema);
39
+ volume.set(0, 0, 0, true);
40
+ volume.set(1, 0, 0, true);
41
+ volume.set(2, 1, 1, true);
42
+ const rows = collectAxisSegments(volume, "x");
43
+ expect(rows).toHaveLength(4);
44
+ expect(rows.every(row => row.step === 1 && row.x === 0)).toBe(true);
45
+ expect(rows[0]).toEqual({ x: 0, y: 0, z: 0, values: [true, true, false], step: 1, pairCount: 1, done: false });
46
+ expect(rows[1]).toEqual({ x: 0, y: 1, z: 0, values: [false, false, false], step: 1, pairCount: 1, done: false });
47
+ expect(rows[2]).toEqual({ x: 0, y: 0, z: 1, values: [false, false, false], step: 1, pairCount: 1, done: false });
48
+ expect(rows[3]).toEqual({ x: 0, y: 1, z: 1, values: [false, false, true], step: 1, pairCount: 1, done: true });
49
+ });
50
+ it("iterateY walks each y column with width stride", () => {
51
+ const volume = createDense([3, 2, 2], Boolean.schema);
52
+ volume.set(0, 0, 0, true);
53
+ volume.set(0, 1, 0, true);
54
+ volume.set(2, 1, 1, true);
55
+ const rows = collectAxisSegments(volume, "y");
56
+ expect(rows).toHaveLength(6);
57
+ expect(rows.every(row => row.step === 3 && row.y === 0)).toBe(true);
58
+ expect(rows[0]).toEqual({ x: 0, y: 0, z: 0, values: [true, true], step: 3, pairCount: 1, done: false });
59
+ expect(rows[1]).toEqual({ x: 1, y: 0, z: 0, values: [false, false], step: 3, pairCount: 1, done: false });
60
+ expect(rows.find(row => row.x === 2 && row.z === 1)).toEqual({
61
+ x: 2, y: 0, z: 1, values: [false, true], step: 3, pairCount: 1, done: true,
62
+ });
63
+ });
64
+ it("iterateZ walks each z column with plane stride", () => {
65
+ const volume = createDense([3, 2, 2], Boolean.schema);
66
+ volume.set(0, 0, 0, true);
67
+ volume.set(0, 0, 1, true);
68
+ volume.set(2, 1, 1, true);
69
+ const rows = collectAxisSegments(volume, "z");
70
+ expect(rows).toHaveLength(6);
71
+ expect(rows.every(row => row.step === 6 && row.z === 0)).toBe(true);
72
+ expect(rows[0]).toEqual({ x: 0, y: 0, z: 0, values: [true, true], step: 6, pairCount: 1, done: false });
73
+ expect(rows.find(row => row.x === 2 && row.y === 1)).toEqual({
74
+ x: 2, y: 1, z: 0, values: [false, true], step: 6, pairCount: 1, done: true,
75
+ });
76
+ });
77
+ it("axis iterators no-op on empty dimensions", () => {
78
+ const volume = createDense([0, 2, 2], Boolean.schema);
79
+ expect(collectAxisSegments(volume, "x")).toEqual([]);
80
+ expect(collectAxisSegments(volume, "y")).toEqual([]);
81
+ expect(collectAxisSegments(volume, "z")).toEqual([]);
82
+ });
83
+ it("iterateBlocks emits one block in standard dense layout", () => {
84
+ const volume = createDense([2, 3, 1], Boolean.schema);
85
+ volume.set(1, 2, 0, true);
86
+ const blocks = [];
87
+ volume.iterateBlocks((buffer, block, done) => {
88
+ blocks.push({ ...block, done });
89
+ expect(buffer.get(block.offset + getDenseIndex(block.size, 1, 2, 0))).toBe(true);
90
+ });
91
+ expect(blocks).toEqual([{
92
+ origin: [0, 0, 0],
93
+ size: [2, 3, 1],
94
+ offset: 0,
95
+ done: true,
96
+ }]);
97
+ });
98
+ it("iterateBlocks no-ops on empty dimensions", () => {
99
+ const volume = createDense([0, 2, 2], Boolean.schema);
100
+ let count = 0;
101
+ volume.iterateBlocks(() => { count++; });
102
+ expect(count).toBe(0);
103
+ });
104
+ it("round-trips through ECS serialization", () => {
105
+ const original = createDense([3, 2, 2], Boolean.schema);
106
+ original.set(0, 0, 0, true);
107
+ original.set(2, 1, 1, true);
108
+ const payload = serialize({ volume: original });
109
+ const roundTrip = deserialize(payload);
110
+ expect(isDenseVolume(roundTrip.volume)).toBe(true);
111
+ expect(roundTrip.volume.size).toEqual([3, 2, 2]);
112
+ if (isDenseVolume(original) && isDenseVolume(roundTrip.volume)) {
113
+ expect(roundTrip.volume.data.capacity).toBe(12);
114
+ expect(equals(roundTrip.volume.data, original.data)).toBe(true);
115
+ }
116
+ expect(roundTrip.volume.get(0, 0, 0)).toBe(true);
117
+ expect(roundTrip.volume.get(2, 1, 1)).toBe(true);
118
+ expect(roundTrip.volume.get(1, 0, 0)).toBe(false);
119
+ });
120
+ });
121
+ //# sourceMappingURL=create-dense.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dense.test.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/create-dense.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Vec3 } from "../../../math/index.js";
2
+ import type { TypedBuffer } from "../../../typed-buffer/typed-buffer.js";
3
+ import type { Volume } from "../volume.js";
4
+ import type { AxisLineCallback } from "../axis-line-callback.js";
5
+ import type { BlockCallback } from "../block-callback.js";
6
+ export declare class DenseVolume<T> implements Volume<T> {
7
+ #private;
8
+ readonly size: Vec3;
9
+ readonly data: TypedBuffer<T>;
10
+ constructor(size: Vec3, data: TypedBuffer<T>);
11
+ get(x: number, y: number, z: number): T;
12
+ set(x: number, y: number, z: number, value: T): void;
13
+ iterateX(callback: AxisLineCallback<T>): void;
14
+ iterateY(callback: AxisLineCallback<T>): void;
15
+ iterateZ(callback: AxisLineCallback<T>): void;
16
+ iterateBlocks(callback: BlockCallback<T>): void;
17
+ }
@@ -0,0 +1,51 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { iterateDenseAxis } from "../iterate-axis.js";
3
+ import { getDenseIndex } from "../get-dense-index.js";
4
+ import { isInBounds } from "../is-in-bounds.js";
5
+ const defaultFromSchema = (schema) => {
6
+ if (!("default" in schema)) {
7
+ throw new Error("DenseVolume schema must include a default value");
8
+ }
9
+ return schema.default;
10
+ };
11
+ export class DenseVolume {
12
+ #defaultValue;
13
+ constructor(size, data) {
14
+ this.#defaultValue = defaultFromSchema(data.schema);
15
+ this.size = size;
16
+ this.data = data;
17
+ }
18
+ get(x, y, z) {
19
+ if (!isInBounds(this.size, x, y, z)) {
20
+ return this.#defaultValue;
21
+ }
22
+ return this.data.get(getDenseIndex(this.size, x, y, z));
23
+ }
24
+ set(x, y, z, value) {
25
+ if (!isInBounds(this.size, x, y, z)) {
26
+ return;
27
+ }
28
+ this.data.set(getDenseIndex(this.size, x, y, z), value);
29
+ }
30
+ iterateX(callback) {
31
+ iterateDenseAxis(this.size, this.data, callback, "x");
32
+ }
33
+ iterateY(callback) {
34
+ iterateDenseAxis(this.size, this.data, callback, "y");
35
+ }
36
+ iterateZ(callback) {
37
+ iterateDenseAxis(this.size, this.data, callback, "z");
38
+ }
39
+ iterateBlocks(callback) {
40
+ const [width, height, depth] = this.size;
41
+ if (width === 0 || height === 0 || depth === 0) {
42
+ return;
43
+ }
44
+ callback(this.data, {
45
+ origin: [0, 0, 0],
46
+ size: this.size,
47
+ offset: 0,
48
+ }, true);
49
+ }
50
+ }
51
+ //# sourceMappingURL=dense-volume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dense-volume.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/dense-volume.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAQvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,iBAAiB,GAAG,CAAI,MAAc,EAAK,EAAE;IAC/C,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC,OAAY,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,OAAO,WAAW;IAGX,aAAa,CAAI;IAE1B,YAAY,IAAU,EAAE,IAAoB;QACxC,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAAQ;QACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ,CAAC,QAA6B;QAClC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,QAA6B;QAClC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,QAA6B;QAClC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa,CAAC,QAA0B;QACpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;YAChB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,CAAC;SACZ,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ import { DenseVolume } from "./dense-volume.js";
2
+ export declare const isDenseVolume: (value: unknown) => value is DenseVolume<unknown>;
@@ -0,0 +1,4 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { DenseVolume } from "./dense-volume.js";
3
+ export const isDenseVolume = (value) => value instanceof DenseVolume;
4
+ //# sourceMappingURL=is-dense-volume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-dense-volume.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/is-dense-volume.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAiC,EAAE,CAC3E,KAAK,YAAY,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const registerDenseVolumeCodecs: () => void;
@@ -0,0 +1,33 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { getCodec, registerCodec } from "../../../functions/serialization/codec.js";
3
+ import { DenseVolume } from "./dense-volume.js";
4
+ import { isDenseVolume } from "./is-dense-volume.js";
5
+ export const registerDenseVolumeCodecs = () => {
6
+ registerCodec({
7
+ name: "dense-volume",
8
+ predicate: isDenseVolume,
9
+ serialize: (volume) => {
10
+ const bufferCodec = getCodec("typed-buffer");
11
+ if (!bufferCodec) {
12
+ throw new Error("typed-buffer codec is not registered");
13
+ }
14
+ const bufferPayload = bufferCodec.serialize(volume.data);
15
+ return {
16
+ json: {
17
+ size: volume.size,
18
+ data: bufferPayload.json,
19
+ },
20
+ binary: bufferPayload.binary,
21
+ };
22
+ },
23
+ deserialize: ({ json, binary }) => {
24
+ const bufferCodec = getCodec("typed-buffer");
25
+ if (!bufferCodec) {
26
+ throw new Error("typed-buffer codec is not registered");
27
+ }
28
+ const data = bufferCodec.deserialize({ json: json.data, binary });
29
+ return new DenseVolume(json.size, data);
30
+ },
31
+ });
32
+ };
33
+ //# sourceMappingURL=register-dense-volume-codecs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-dense-volume-codecs.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/register-dense-volume-codecs.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAS,EAAE;IAChD,aAAa,CAAuB;QAChC,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YAClB,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO;gBACH,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI,EAAE,aAAa,CAAC,IAAI;iBAC3B;gBACD,MAAM,EAAE,aAAa,CAAC,MAAM;aAC/B,CAAC;QACN,CAAC;QACD,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;YAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Vec3 } from "../../../math/index.js";
2
+ import type { IterateAxis } from "../iterate-axis.js";
3
+ export interface AxisIterateLayout {
4
+ readonly step: number;
5
+ readonly blockPlane: number;
6
+ readonly segmentLength: number;
7
+ readonly innerA: number;
8
+ readonly groupKey: (bx: number, by: number, bz: number) => number;
9
+ readonly vary: (bx: number, by: number, bz: number) => number;
10
+ readonly segmentOffset: (offset: number, la: number, lb: number) => number;
11
+ readonly writeOrigin: (bx: number, by: number, bz: number, la: number, lb: number, origins: number[], stepIndex: number) => void;
12
+ }
13
+ export interface BlockDims {
14
+ readonly size: Vec3;
15
+ readonly sx: number;
16
+ readonly sy: number;
17
+ readonly sz: number;
18
+ readonly shiftX: number;
19
+ readonly shiftY: number;
20
+ readonly shiftZ: number;
21
+ readonly volume: number;
22
+ readonly planeYZ: number;
23
+ readonly planeXZ: number;
24
+ readonly planeXY: number;
25
+ readonly strideY: number;
26
+ readonly strideZ: number;
27
+ readonly keyFromWorld: (x: number, y: number, z: number) => number;
28
+ readonly indexFromWorld: (x: number, y: number, z: number, blockOffset: number) => number;
29
+ readonly decodeKey: (key: number) => readonly [bx: number, by: number, bz: number];
30
+ readonly iterate: Record<IterateAxis, AxisIterateLayout>;
31
+ }
32
+ export declare const normalizeBlockSize: (blockSize: number | Vec3) => Vec3;
33
+ export declare const createBlockDims: (size: number | Vec3) => BlockDims;
34
+ export declare const blockCoord: (coordinate: number, shift: number) => number;
35
+ export declare const localCoord: (coordinate: number, blockSize: number, shift: number) => number;
@@ -0,0 +1,93 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { createIndexFromWorld, createKeyFromWorld, decodeBlockKeyInline, packPlaneKeyInline, } from "./block-key.js";
3
+ export const normalizeBlockSize = (blockSize) => typeof blockSize === "number" ? [blockSize, blockSize, blockSize] : blockSize;
4
+ const axisShift = (size, axis) => {
5
+ const shift = Math.log2(size);
6
+ if (!Number.isInteger(shift) || shift < 0) {
7
+ throw new Error(`SparseBlockVolume block size ${axis} must be a power of two`);
8
+ }
9
+ return shift;
10
+ };
11
+ const createIterateLayouts = (sx, sy, sz, shiftX, shiftY, shiftZ, strideY, strideZ, planeYZ, planeXZ, planeXY) => ({
12
+ x: {
13
+ step: 1,
14
+ blockPlane: planeYZ,
15
+ segmentLength: sx,
16
+ innerA: sy,
17
+ groupKey: (_bx, by, bz) => packPlaneKeyInline(bz, by),
18
+ vary: (bx) => bx,
19
+ segmentOffset: (offset, ly, lz) => offset + ly * sx + lz * strideZ,
20
+ writeOrigin: (bx, by, bz, la, lb, origins, stepIndex) => {
21
+ const base = stepIndex * 3;
22
+ origins[base] = bx << shiftX;
23
+ origins[base + 1] = (by << shiftY) + la;
24
+ origins[base + 2] = (bz << shiftZ) + lb;
25
+ },
26
+ },
27
+ y: {
28
+ step: sx,
29
+ blockPlane: planeXZ,
30
+ segmentLength: sy,
31
+ innerA: sx,
32
+ groupKey: (bx, _by, bz) => packPlaneKeyInline(bz, bx),
33
+ vary: (_bx, by) => by,
34
+ segmentOffset: (offset, lx, lz) => offset + lx + lz * strideZ,
35
+ writeOrigin: (bx, by, bz, la, lb, origins, stepIndex) => {
36
+ const base = stepIndex * 3;
37
+ origins[base] = (bx << shiftX) + la;
38
+ origins[base + 1] = by << shiftY;
39
+ origins[base + 2] = (bz << shiftZ) + lb;
40
+ },
41
+ },
42
+ z: {
43
+ step: strideZ,
44
+ blockPlane: planeXY,
45
+ segmentLength: sz,
46
+ innerA: sx,
47
+ groupKey: (bx, by) => packPlaneKeyInline(by, bx),
48
+ vary: (_bx, _by, bz) => bz,
49
+ segmentOffset: (offset, lx, ly) => offset + lx + ly * sx,
50
+ writeOrigin: (bx, by, bz, la, lb, origins, stepIndex) => {
51
+ const base = stepIndex * 3;
52
+ origins[base] = (bx << shiftX) + la;
53
+ origins[base + 1] = (by << shiftY) + lb;
54
+ origins[base + 2] = bz << shiftZ;
55
+ },
56
+ },
57
+ });
58
+ export const createBlockDims = (size) => {
59
+ const [sx, sy, sz] = normalizeBlockSize(size);
60
+ if (sx < 1 || sy < 1 || sz < 1) {
61
+ throw new Error("SparseBlockVolume block sizes must be positive");
62
+ }
63
+ const shiftX = axisShift(sx, "x");
64
+ const shiftY = axisShift(sy, "y");
65
+ const shiftZ = axisShift(sz, "z");
66
+ const strideY = sx;
67
+ const strideZ = sx * sy;
68
+ const planeYZ = sy * sz;
69
+ const planeXZ = sx * sz;
70
+ const planeXY = sx * sy;
71
+ return {
72
+ size: [sx, sy, sz],
73
+ sx,
74
+ sy,
75
+ sz,
76
+ shiftX,
77
+ shiftY,
78
+ shiftZ,
79
+ volume: sx * sy * sz,
80
+ planeYZ,
81
+ planeXZ,
82
+ planeXY,
83
+ strideY,
84
+ strideZ,
85
+ keyFromWorld: createKeyFromWorld(shiftX, shiftY, shiftZ),
86
+ indexFromWorld: createIndexFromWorld(sx, sy, sz, shiftX, shiftY, shiftZ, strideY),
87
+ decodeKey: decodeBlockKeyInline,
88
+ iterate: createIterateLayouts(sx, sy, sz, shiftX, shiftY, shiftZ, strideY, strideZ, planeYZ, planeXZ, planeXY),
89
+ };
90
+ };
91
+ export const blockCoord = (coordinate, shift) => coordinate >> shift;
92
+ export const localCoord = (coordinate, blockSize, shift) => coordinate - (coordinate >> shift) * blockSize;
93
+ //# sourceMappingURL=block-dims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-dims.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/block-dims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const axisRange: number;
2
+ export declare const axisBias: number;
3
+ export declare const encodeAxis: (coordinate: number) => number;
4
+ export declare const decodeAxis: (encoded: number) => number;
5
+ export declare const packBlockKeyInline: (bx: number, by: number, bz: number) => number;
6
+ export declare const packPlaneKeyInline: (outer: number, inner: number) => number;
7
+ export declare const decodeBlockKeyInline: (key: number) => readonly [bx: number, by: number, bz: number];
8
+ export declare const createKeyFromWorld: (shiftX: number, shiftY: number, shiftZ: number) => (x: number, y: number, z: number) => number;
9
+ export declare const createIndexFromWorld: (sx: number, sy: number, sz: number, shiftX: number, shiftY: number, shiftZ: number, strideY: number) => (x: number, y: number, z: number, blockOffset: number) => number;
@@ -0,0 +1,23 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ const bitsPerAxis = Math.floor(Math.log2(Number.MAX_SAFE_INTEGER + 1) / 3);
3
+ export const axisRange = 2 ** bitsPerAxis;
4
+ const axisRangeSq = axisRange * axisRange;
5
+ export const axisBias = 2 ** (bitsPerAxis - 1);
6
+ export const encodeAxis = (coordinate) => coordinate + axisBias;
7
+ export const decodeAxis = (encoded) => encoded - axisBias;
8
+ export const packBlockKeyInline = (bx, by, bz) => encodeAxis(bx) + encodeAxis(by) * axisRange + encodeAxis(bz) * axisRangeSq;
9
+ export const packPlaneKeyInline = (outer, inner) => encodeAxis(outer) * axisRange + encodeAxis(inner);
10
+ export const decodeBlockKeyInline = (key) => {
11
+ const bx = decodeAxis(key % axisRange);
12
+ const by = decodeAxis(((key / axisRange) | 0) % axisRange);
13
+ const bz = decodeAxis(((key / axisRangeSq) | 0) % axisRange);
14
+ return [bx, by, bz];
15
+ };
16
+ export const createKeyFromWorld = (shiftX, shiftY, shiftZ) => (x, y, z) => packBlockKeyInline(x >> shiftX, y >> shiftY, z >> shiftZ);
17
+ export const createIndexFromWorld = (sx, sy, sz, shiftX, shiftY, shiftZ, strideY) => (x, y, z, blockOffset) => {
18
+ const lx = x - (x >> shiftX) * sx;
19
+ const ly = y - (y >> shiftY) * sy;
20
+ const lz = z - (z >> shiftZ) * sz;
21
+ return blockOffset + lx + strideY * (ly + sy * lz);
22
+ };
23
+ //# sourceMappingURL=block-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-key.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/block-key.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI,WAAW,CAAC;AAC1C,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC;AAEhF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,GAAG,QAAQ,CAAC;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAU,EAAE,CAC7E,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE,CACvE,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,GAAW,EACkC,EAAE;IAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,MAAc,EACd,MAAc,EACd,MAAc,EAC6B,EAAE,CAC7C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,EAAU,EACV,EAAU,EACV,EAAU,EACV,MAAc,EACd,MAAc,EACd,MAAc,EACd,OAAe,EACiD,EAAE,CAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE;IACrB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;IAClC,OAAO,WAAW,GAAG,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Vec3 } from "../../../math/index.js";
2
+ import type { Schema } from "../../../schema/index.js";
3
+ import type { Volume } from "../volume.js";
4
+ export declare const createSparseBlock: <S extends Schema & {
5
+ default: Schema.ToType<S>;
6
+ }>(schema: S, blockSize?: number | Vec3) => Volume<Schema.ToType<S>>;
@@ -0,0 +1,9 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { createTypedBuffer } from "../../../typed-buffer/create-typed-buffer.js";
3
+ import { normalizeBlockSize } from "./block-dims.js";
4
+ import { SparseBlockVolume } from "./sparse-block-volume.js";
5
+ export const createSparseBlock = (schema, blockSize = 16) => {
6
+ const data = createTypedBuffer(schema, 0);
7
+ return new SparseBlockVolume(normalizeBlockSize(blockSize), data);
8
+ };
9
+ //# sourceMappingURL=create-sparse-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-sparse-block.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/create-sparse-block.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAIvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,MAAS,EACT,YAA2B,EAAE,EACL,EAAE;IAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC,CAAC"}