@elaraai/east 1.0.79 → 1.0.81

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 (379) hide show
  1. package/README.md +1 -1
  2. package/dist/src/builtins.d.ts +1 -1
  3. package/dist/src/builtins.d.ts.map +1 -1
  4. package/dist/src/builtins.js +19 -0
  5. package/dist/src/builtins.js.map +1 -1
  6. package/dist/src/codegen/spellings.d.ts.map +1 -1
  7. package/dist/src/codegen/spellings.js +3 -0
  8. package/dist/src/codegen/spellings.js.map +1 -1
  9. package/dist/src/comparison.d.ts +54 -0
  10. package/dist/src/comparison.d.ts.map +1 -1
  11. package/dist/src/comparison.equivalent.spec.d.ts +6 -0
  12. package/dist/src/comparison.equivalent.spec.d.ts.map +1 -0
  13. package/dist/src/comparison.equivalent.spec.js +130 -0
  14. package/dist/src/comparison.equivalent.spec.js.map +1 -0
  15. package/dist/src/comparison.js +97 -25
  16. package/dist/src/comparison.js.map +1 -1
  17. package/dist/src/compile/builtins/array.d.ts +60 -0
  18. package/dist/src/compile/builtins/array.d.ts.map +1 -0
  19. package/dist/src/compile/builtins/array.js +691 -0
  20. package/dist/src/compile/builtins/array.js.map +1 -0
  21. package/dist/src/compile/builtins/blob.d.ts +18 -0
  22. package/dist/src/compile/builtins/blob.d.ts.map +1 -0
  23. package/dist/src/compile/builtins/blob.js +150 -0
  24. package/dist/src/compile/builtins/blob.js.map +1 -0
  25. package/dist/src/compile/builtins/compare.d.ts +18 -0
  26. package/dist/src/compile/builtins/compare.d.ts.map +1 -0
  27. package/dist/src/compile/builtins/compare.js +52 -0
  28. package/dist/src/compile/builtins/compare.js.map +1 -0
  29. package/dist/src/compile/builtins/datetime.d.ts +21 -0
  30. package/dist/src/compile/builtins/datetime.d.ts.map +1 -0
  31. package/dist/src/compile/builtins/datetime.js +46 -0
  32. package/dist/src/compile/builtins/datetime.js.map +1 -0
  33. package/dist/src/compile/builtins/dict.d.ts +47 -0
  34. package/dist/src/compile/builtins/dict.d.ts.map +1 -0
  35. package/dist/src/compile/builtins/dict.js +576 -0
  36. package/dist/src/compile/builtins/dict.js.map +1 -0
  37. package/dist/src/compile/builtins/index.d.ts +9 -0
  38. package/dist/src/compile/builtins/index.d.ts.map +1 -0
  39. package/dist/src/compile/builtins/index.js +28 -0
  40. package/dist/src/compile/builtins/index.js.map +1 -0
  41. package/dist/src/compile/builtins/matrix.d.ts +31 -0
  42. package/dist/src/compile/builtins/matrix.d.ts.map +1 -0
  43. package/dist/src/compile/builtins/matrix.js +310 -0
  44. package/dist/src/compile/builtins/matrix.js.map +1 -0
  45. package/dist/src/compile/builtins/primitives.d.ts +36 -0
  46. package/dist/src/compile/builtins/primitives.d.ts.map +1 -0
  47. package/dist/src/compile/builtins/primitives.js +67 -0
  48. package/dist/src/compile/builtins/primitives.js.map +1 -0
  49. package/dist/src/compile/builtins/ref.d.ts +11 -0
  50. package/dist/src/compile/builtins/ref.d.ts.map +1 -0
  51. package/dist/src/compile/builtins/ref.js +30 -0
  52. package/dist/src/compile/builtins/ref.js.map +1 -0
  53. package/dist/src/compile/builtins/set.d.ts +42 -0
  54. package/dist/src/compile/builtins/set.d.ts.map +1 -0
  55. package/dist/src/compile/builtins/set.js +410 -0
  56. package/dist/src/compile/builtins/set.js.map +1 -0
  57. package/dist/src/compile/builtins/sparse.d.ts +19 -0
  58. package/dist/src/compile/builtins/sparse.d.ts.map +1 -0
  59. package/dist/src/compile/builtins/sparse.js +143 -0
  60. package/dist/src/compile/builtins/sparse.js.map +1 -0
  61. package/dist/src/compile/builtins/string.d.ts +34 -0
  62. package/dist/src/compile/builtins/string.d.ts.map +1 -0
  63. package/dist/src/compile/builtins/string.js +238 -0
  64. package/dist/src/compile/builtins/string.js.map +1 -0
  65. package/dist/src/compile/builtins/tree.d.ts +32 -0
  66. package/dist/src/compile/builtins/tree.d.ts.map +1 -0
  67. package/dist/src/compile/builtins/tree.js +108 -0
  68. package/dist/src/compile/builtins/tree.js.map +1 -0
  69. package/dist/src/compile/builtins/vector.d.ts +44 -0
  70. package/dist/src/compile/builtins/vector.d.ts.map +1 -0
  71. package/dist/src/compile/builtins/vector.js +463 -0
  72. package/dist/src/compile/builtins/vector.js.map +1 -0
  73. package/dist/src/compile/constructors.d.ts +13 -0
  74. package/dist/src/compile/constructors.d.ts.map +1 -0
  75. package/dist/src/compile/constructors.js +179 -0
  76. package/dist/src/compile/constructors.js.map +1 -0
  77. package/dist/src/compile/control.d.ts +13 -0
  78. package/dist/src/compile/control.d.ts.map +1 -0
  79. package/dist/src/compile/control.js +513 -0
  80. package/dist/src/compile/control.js.map +1 -0
  81. package/dist/src/compile/functions.d.ts +13 -0
  82. package/dist/src/compile/functions.d.ts.map +1 -0
  83. package/dist/src/compile/functions.js +492 -0
  84. package/dist/src/compile/functions.js.map +1 -0
  85. package/dist/src/compile/ir.d.ts +19 -0
  86. package/dist/src/compile/ir.d.ts.map +1 -0
  87. package/dist/src/compile/ir.js +193 -0
  88. package/dist/src/compile/ir.js.map +1 -0
  89. package/dist/src/compile/runtime.d.ts +75 -0
  90. package/dist/src/compile/runtime.d.ts.map +1 -0
  91. package/dist/src/compile/runtime.js +114 -0
  92. package/dist/src/compile/runtime.js.map +1 -0
  93. package/dist/src/compile/type_parameters.d.ts +4 -0
  94. package/dist/src/compile/type_parameters.d.ts.map +1 -0
  95. package/dist/src/compile/type_parameters.js +55 -0
  96. package/dist/src/compile/type_parameters.js.map +1 -0
  97. package/dist/src/compile/typed_arrays.d.ts +28 -0
  98. package/dist/src/compile/typed_arrays.d.ts.map +1 -0
  99. package/dist/src/compile/typed_arrays.js +77 -0
  100. package/dist/src/compile/typed_arrays.js.map +1 -0
  101. package/dist/src/compile.d.ts +6 -41
  102. package/dist/src/compile.d.ts.map +1 -1
  103. package/dist/src/compile.js +8 -4415
  104. package/dist/src/compile.js.map +1 -1
  105. package/dist/src/compile.open_beast.spec.js +5 -4
  106. package/dist/src/compile.open_beast.spec.js.map +1 -1
  107. package/dist/src/compile.signature.spec.d.ts +6 -0
  108. package/dist/src/compile.signature.spec.d.ts.map +1 -0
  109. package/dist/src/compile.signature.spec.js +53 -0
  110. package/dist/src/compile.signature.spec.js.map +1 -0
  111. package/dist/src/containers/sortedmap.d.ts +2 -1
  112. package/dist/src/containers/sortedmap.d.ts.map +1 -1
  113. package/dist/src/containers/sortedmap.js +4 -2
  114. package/dist/src/containers/sortedmap.js.map +1 -1
  115. package/dist/src/containers/sortedset.d.ts +2 -1
  116. package/dist/src/containers/sortedset.d.ts.map +1 -1
  117. package/dist/src/containers/sortedset.js +4 -2
  118. package/dist/src/containers/sortedset.js.map +1 -1
  119. package/dist/src/error.d.ts +15 -0
  120. package/dist/src/error.d.ts.map +1 -1
  121. package/dist/src/error.js +16 -0
  122. package/dist/src/error.js.map +1 -1
  123. package/dist/src/expr/array.d.ts +158 -81
  124. package/dist/src/expr/array.d.ts.map +1 -1
  125. package/dist/src/expr/array.js +68 -51
  126. package/dist/src/expr/array.js.map +1 -1
  127. package/dist/src/expr/ast.d.ts.map +1 -1
  128. package/dist/src/expr/ast.js +13 -0
  129. package/dist/src/expr/ast.js.map +1 -1
  130. package/dist/src/expr/blob.d.ts +8 -8
  131. package/dist/src/expr/blob.js +8 -8
  132. package/dist/src/expr/block.d.ts +18 -5
  133. package/dist/src/expr/block.d.ts.map +1 -1
  134. package/dist/src/expr/block.js +19 -0
  135. package/dist/src/expr/block.js.map +1 -1
  136. package/dist/src/expr/boolean.d.ts +10 -10
  137. package/dist/src/expr/boolean.js +10 -10
  138. package/dist/src/expr/datetime.d.ts +28 -28
  139. package/dist/src/expr/datetime.js +28 -28
  140. package/dist/src/expr/dict.d.ts +101 -51
  141. package/dist/src/expr/dict.d.ts.map +1 -1
  142. package/dist/src/expr/dict.js +97 -36
  143. package/dist/src/expr/dict.js.map +1 -1
  144. package/dist/src/expr/float.d.ts +23 -23
  145. package/dist/src/expr/float.js +23 -23
  146. package/dist/src/expr/integer.d.ts +17 -17
  147. package/dist/src/expr/integer.js +11 -11
  148. package/dist/src/expr/libs/array.d.ts +6 -6
  149. package/dist/src/expr/libs/array.js +6 -6
  150. package/dist/src/expr/libs/blob.d.ts +2 -2
  151. package/dist/src/expr/libs/blob.js +2 -2
  152. package/dist/src/expr/libs/datetime.d.ts +25 -25
  153. package/dist/src/expr/libs/datetime.js +25 -25
  154. package/dist/src/expr/libs/dict.d.ts +2 -2
  155. package/dist/src/expr/libs/dict.js +2 -2
  156. package/dist/src/expr/libs/float.d.ts +15 -15
  157. package/dist/src/expr/libs/float.js +15 -15
  158. package/dist/src/expr/libs/integer.d.ts +12 -12
  159. package/dist/src/expr/libs/integer.js +12 -12
  160. package/dist/src/expr/libs/set.d.ts +2 -2
  161. package/dist/src/expr/libs/set.js +2 -2
  162. package/dist/src/expr/libs/string.d.ts +4 -4
  163. package/dist/src/expr/libs/string.js +4 -4
  164. package/dist/src/expr/recursive.d.ts +22 -5
  165. package/dist/src/expr/recursive.d.ts.map +1 -1
  166. package/dist/src/expr/recursive.js +22 -5
  167. package/dist/src/expr/recursive.js.map +1 -1
  168. package/dist/src/expr/ref.d.ts +5 -5
  169. package/dist/src/expr/ref.js +5 -5
  170. package/dist/src/expr/set.d.ts +96 -51
  171. package/dist/src/expr/set.d.ts.map +1 -1
  172. package/dist/src/expr/set.js +85 -29
  173. package/dist/src/expr/set.js.map +1 -1
  174. package/dist/src/expr/string.d.ts +28 -28
  175. package/dist/src/expr/string.js +28 -28
  176. package/dist/src/expr/struct.d.ts.map +1 -1
  177. package/dist/src/expr/struct.js +2 -2
  178. package/dist/src/expr/variant.d.ts +12 -12
  179. package/dist/src/expr/variant.js +7 -7
  180. package/dist/src/function_symbols.d.ts +28 -0
  181. package/dist/src/function_symbols.d.ts.map +1 -0
  182. package/dist/src/function_symbols.js +28 -0
  183. package/dist/src/function_symbols.js.map +1 -0
  184. package/dist/src/index.d.ts +1 -0
  185. package/dist/src/index.d.ts.map +1 -1
  186. package/dist/src/index.js +1 -0
  187. package/dist/src/index.js.map +1 -1
  188. package/dist/src/location.d.ts +32 -0
  189. package/dist/src/location.d.ts.map +1 -1
  190. package/dist/src/location.js +38 -0
  191. package/dist/src/location.js.map +1 -1
  192. package/dist/src/location.spec.js +89 -1
  193. package/dist/src/location.spec.js.map +1 -1
  194. package/dist/src/patch/index.d.ts +1 -1
  195. package/dist/src/patch/index.d.ts.map +1 -1
  196. package/dist/src/patch/index.js +1 -1
  197. package/dist/src/patch/index.js.map +1 -1
  198. package/dist/src/patch/type_of_patch.d.ts +25 -1
  199. package/dist/src/patch/type_of_patch.d.ts.map +1 -1
  200. package/dist/src/patch/type_of_patch.js +33 -10
  201. package/dist/src/patch/type_of_patch.js.map +1 -1
  202. package/dist/src/platform.spec.js +19 -1
  203. package/dist/src/platform.spec.js.map +1 -1
  204. package/dist/src/runner_protocol.d.ts +357 -0
  205. package/dist/src/runner_protocol.d.ts.map +1 -0
  206. package/dist/src/runner_protocol.js +154 -0
  207. package/dist/src/runner_protocol.js.map +1 -0
  208. package/dist/src/serialization/beast2/index.d.ts +22 -5
  209. package/dist/src/serialization/beast2/index.d.ts.map +1 -1
  210. package/dist/src/serialization/beast2/index.js +13 -2
  211. package/dist/src/serialization/beast2/index.js.map +1 -1
  212. package/dist/src/serialization/beast2/index.spec.js +84 -3
  213. package/dist/src/serialization/beast2/index.spec.js.map +1 -1
  214. package/dist/src/serialization/beast2/shared.d.ts +32 -3
  215. package/dist/src/serialization/beast2/shared.d.ts.map +1 -1
  216. package/dist/src/serialization/beast2/shared.js +135 -10
  217. package/dist/src/serialization/beast2/shared.js.map +1 -1
  218. package/dist/src/serialization/beast2/v4/container.d.ts.map +1 -1
  219. package/dist/src/serialization/beast2/v4/container.js +5 -3
  220. package/dist/src/serialization/beast2/v4/container.js.map +1 -1
  221. package/dist/src/serialization/beast2/v5/aliasing.spec.d.ts +6 -0
  222. package/dist/src/serialization/beast2/v5/aliasing.spec.d.ts.map +1 -0
  223. package/dist/src/serialization/beast2/v5/aliasing.spec.js +75 -0
  224. package/dist/src/serialization/beast2/v5/aliasing.spec.js.map +1 -0
  225. package/dist/src/serialization/beast2/v5/boundary.d.ts +176 -0
  226. package/dist/src/serialization/beast2/v5/boundary.d.ts.map +1 -0
  227. package/dist/src/serialization/beast2/v5/boundary.js +297 -0
  228. package/dist/src/serialization/beast2/v5/boundary.js.map +1 -0
  229. package/dist/src/serialization/beast2/v5/boundary.spec.d.ts +6 -0
  230. package/dist/src/serialization/beast2/v5/boundary.spec.d.ts.map +1 -0
  231. package/dist/src/serialization/beast2/v5/boundary.spec.js +479 -0
  232. package/dist/src/serialization/beast2/v5/boundary.spec.js.map +1 -0
  233. package/dist/src/serialization/beast2/v5/canonical.d.ts +101 -0
  234. package/dist/src/serialization/beast2/v5/canonical.d.ts.map +1 -0
  235. package/dist/src/serialization/beast2/v5/canonical.js +436 -0
  236. package/dist/src/serialization/beast2/v5/canonical.js.map +1 -0
  237. package/dist/src/serialization/beast2/v5/canonical.spec.d.ts +6 -0
  238. package/dist/src/serialization/beast2/v5/canonical.spec.d.ts.map +1 -0
  239. package/dist/src/serialization/beast2/v5/canonical.spec.js +124 -0
  240. package/dist/src/serialization/beast2/v5/canonical.spec.js.map +1 -0
  241. package/dist/src/serialization/beast2/v5/codec.d.ts +6 -5
  242. package/dist/src/serialization/beast2/v5/codec.d.ts.map +1 -1
  243. package/dist/src/serialization/beast2/v5/codec.js +18 -3
  244. package/dist/src/serialization/beast2/v5/codec.js.map +1 -1
  245. package/dist/src/serialization/beast2/v5/deflate.d.ts +24 -2
  246. package/dist/src/serialization/beast2/v5/deflate.d.ts.map +1 -1
  247. package/dist/src/serialization/beast2/v5/deflate.js +47 -12
  248. package/dist/src/serialization/beast2/v5/deflate.js.map +1 -1
  249. package/dist/src/serialization/beast2/v5/deflate.spec.js +15 -1
  250. package/dist/src/serialization/beast2/v5/deflate.spec.js.map +1 -1
  251. package/dist/src/serialization/beast2/v5/elements.d.ts +66 -0
  252. package/dist/src/serialization/beast2/v5/elements.d.ts.map +1 -0
  253. package/dist/src/serialization/beast2/v5/elements.js +325 -0
  254. package/dist/src/serialization/beast2/v5/elements.js.map +1 -0
  255. package/dist/src/serialization/beast2/v5/elements.spec.d.ts +6 -0
  256. package/dist/src/serialization/beast2/v5/elements.spec.d.ts.map +1 -0
  257. package/dist/src/serialization/beast2/v5/elements.spec.js +161 -0
  258. package/dist/src/serialization/beast2/v5/elements.spec.js.map +1 -0
  259. package/dist/src/serialization/beast2/v5/frame-pool.d.ts +62 -21
  260. package/dist/src/serialization/beast2/v5/frame-pool.d.ts.map +1 -1
  261. package/dist/src/serialization/beast2/v5/frame-pool.js +138 -27
  262. package/dist/src/serialization/beast2/v5/frame-pool.js.map +1 -1
  263. package/dist/src/serialization/beast2/v5/frame-pool.spec.js +198 -71
  264. package/dist/src/serialization/beast2/v5/frame-pool.spec.js.map +1 -1
  265. package/dist/src/serialization/beast2/v5/frame-worker.js +25 -15
  266. package/dist/src/serialization/beast2/v5/frame-worker.js.map +1 -1
  267. package/dist/src/serialization/beast2/v5/frames.d.ts +22 -12
  268. package/dist/src/serialization/beast2/v5/frames.d.ts.map +1 -1
  269. package/dist/src/serialization/beast2/v5/frames.js +52 -27
  270. package/dist/src/serialization/beast2/v5/frames.js.map +1 -1
  271. package/dist/src/serialization/beast2/v5/geometry.d.ts +38 -1
  272. package/dist/src/serialization/beast2/v5/geometry.d.ts.map +1 -1
  273. package/dist/src/serialization/beast2/v5/geometry.js +73 -1
  274. package/dist/src/serialization/beast2/v5/geometry.js.map +1 -1
  275. package/dist/src/serialization/beast2/v5/geometry.spec.js +34 -23
  276. package/dist/src/serialization/beast2/v5/geometry.spec.js.map +1 -1
  277. package/dist/src/serialization/beast2/v5/index.spec.js +32 -28
  278. package/dist/src/serialization/beast2/v5/index.spec.js.map +1 -1
  279. package/dist/src/serialization/beast2/v5/intake.d.ts +98 -0
  280. package/dist/src/serialization/beast2/v5/intake.d.ts.map +1 -0
  281. package/dist/src/serialization/beast2/v5/intake.js +462 -0
  282. package/dist/src/serialization/beast2/v5/intake.js.map +1 -0
  283. package/dist/src/serialization/beast2/v5/intake.spec.d.ts +6 -0
  284. package/dist/src/serialization/beast2/v5/intake.spec.d.ts.map +1 -0
  285. package/dist/src/serialization/beast2/v5/intake.spec.js +202 -0
  286. package/dist/src/serialization/beast2/v5/intake.spec.js.map +1 -0
  287. package/dist/src/serialization/beast2/v5/lazy.d.ts +42 -1
  288. package/dist/src/serialization/beast2/v5/lazy.d.ts.map +1 -1
  289. package/dist/src/serialization/beast2/v5/lazy.js +143 -28
  290. package/dist/src/serialization/beast2/v5/lazy.js.map +1 -1
  291. package/dist/src/serialization/beast2/v5/lazy.spec.js +102 -24
  292. package/dist/src/serialization/beast2/v5/lazy.spec.js.map +1 -1
  293. package/dist/src/serialization/beast2/v5/manifest-writer.d.ts +110 -0
  294. package/dist/src/serialization/beast2/v5/manifest-writer.d.ts.map +1 -0
  295. package/dist/src/serialization/beast2/v5/manifest-writer.js +118 -0
  296. package/dist/src/serialization/beast2/v5/manifest-writer.js.map +1 -0
  297. package/dist/src/serialization/beast2/v5/manifest-writer.spec.d.ts +6 -0
  298. package/dist/src/serialization/beast2/v5/manifest-writer.spec.d.ts.map +1 -0
  299. package/dist/src/serialization/beast2/v5/manifest-writer.spec.js +207 -0
  300. package/dist/src/serialization/beast2/v5/manifest-writer.spec.js.map +1 -0
  301. package/dist/src/serialization/beast2/v5/manifest.d.ts +241 -0
  302. package/dist/src/serialization/beast2/v5/manifest.d.ts.map +1 -0
  303. package/dist/src/serialization/beast2/v5/manifest.js +233 -0
  304. package/dist/src/serialization/beast2/v5/manifest.js.map +1 -0
  305. package/dist/src/serialization/beast2/v5/merge.d.ts +93 -0
  306. package/dist/src/serialization/beast2/v5/merge.d.ts.map +1 -0
  307. package/dist/src/serialization/beast2/v5/merge.js +202 -0
  308. package/dist/src/serialization/beast2/v5/merge.js.map +1 -0
  309. package/dist/src/serialization/beast2/v5/merge.spec.d.ts +6 -0
  310. package/dist/src/serialization/beast2/v5/merge.spec.d.ts.map +1 -0
  311. package/dist/src/serialization/beast2/v5/merge.spec.js +118 -0
  312. package/dist/src/serialization/beast2/v5/merge.spec.js.map +1 -0
  313. package/dist/src/serialization/beast2/v5/recut.d.ts +143 -0
  314. package/dist/src/serialization/beast2/v5/recut.d.ts.map +1 -0
  315. package/dist/src/serialization/beast2/v5/recut.js +365 -0
  316. package/dist/src/serialization/beast2/v5/recut.js.map +1 -0
  317. package/dist/src/serialization/beast2/v5/recut.spec.d.ts +6 -0
  318. package/dist/src/serialization/beast2/v5/recut.spec.d.ts.map +1 -0
  319. package/dist/src/serialization/beast2/v5/recut.spec.js +215 -0
  320. package/dist/src/serialization/beast2/v5/recut.spec.js.map +1 -0
  321. package/dist/src/serialization/beast2/v5/runs.d.ts +148 -0
  322. package/dist/src/serialization/beast2/v5/runs.d.ts.map +1 -0
  323. package/dist/src/serialization/beast2/v5/runs.js +260 -0
  324. package/dist/src/serialization/beast2/v5/runs.js.map +1 -0
  325. package/dist/src/serialization/beast2/v5/runs.spec.d.ts +6 -0
  326. package/dist/src/serialization/beast2/v5/runs.spec.d.ts.map +1 -0
  327. package/dist/src/serialization/beast2/v5/runs.spec.js +182 -0
  328. package/dist/src/serialization/beast2/v5/runs.spec.js.map +1 -0
  329. package/dist/src/serialization/beast2/v5/sha256.d.ts +19 -0
  330. package/dist/src/serialization/beast2/v5/sha256.d.ts.map +1 -0
  331. package/dist/src/serialization/beast2/v5/sha256.js +103 -0
  332. package/dist/src/serialization/beast2/v5/sha256.js.map +1 -0
  333. package/dist/src/serialization/beast2/v5/sha256.spec.d.ts +6 -0
  334. package/dist/src/serialization/beast2/v5/sha256.spec.d.ts.map +1 -0
  335. package/dist/src/serialization/beast2/v5/sha256.spec.js +42 -0
  336. package/dist/src/serialization/beast2/v5/sha256.spec.js.map +1 -0
  337. package/dist/src/serialization/beast2/v5/stream.d.ts +273 -86
  338. package/dist/src/serialization/beast2/v5/stream.d.ts.map +1 -1
  339. package/dist/src/serialization/beast2/v5/stream.js +576 -244
  340. package/dist/src/serialization/beast2/v5/stream.js.map +1 -1
  341. package/dist/src/serialization/beast2/v5/sync-reader.spec.js +24 -10
  342. package/dist/src/serialization/beast2/v5/sync-reader.spec.js.map +1 -1
  343. package/dist/src/serialization/index.d.ts +1 -1
  344. package/dist/src/serialization/index.d.ts.map +1 -1
  345. package/dist/src/serialization/index.js +1 -1
  346. package/dist/src/serialization/index.js.map +1 -1
  347. package/dist/src/serialization/json.d.ts +28 -0
  348. package/dist/src/serialization/json.d.ts.map +1 -1
  349. package/dist/src/serialization/json.js +141 -30
  350. package/dist/src/serialization/json.js.map +1 -1
  351. package/dist/src/serialization/json.spec.js +47 -2
  352. package/dist/src/serialization/json.spec.js.map +1 -1
  353. package/dist/src/serialization/json_schema.d.ts +15 -11
  354. package/dist/src/serialization/json_schema.d.ts.map +1 -1
  355. package/dist/src/serialization/json_schema.js +21 -36
  356. package/dist/src/serialization/json_schema.js.map +1 -1
  357. package/dist/src/serialization/json_schema.spec.js +26 -32
  358. package/dist/src/serialization/json_schema.spec.js.map +1 -1
  359. package/dist/src/serialization/json_schema_to_type.d.ts +10 -5
  360. package/dist/src/serialization/json_schema_to_type.d.ts.map +1 -1
  361. package/dist/src/serialization/json_schema_to_type.js +13 -6
  362. package/dist/src/serialization/json_schema_to_type.js.map +1 -1
  363. package/dist/src/serialization/json_schema_to_type.spec.js +19 -0
  364. package/dist/src/serialization/json_schema_to_type.spec.js.map +1 -1
  365. package/dist/src/string_order.d.ts +36 -0
  366. package/dist/src/string_order.d.ts.map +1 -0
  367. package/dist/src/string_order.js +64 -0
  368. package/dist/src/string_order.js.map +1 -0
  369. package/dist/src/string_order.spec.d.ts +6 -0
  370. package/dist/src/string_order.spec.d.ts.map +1 -0
  371. package/dist/src/string_order.spec.js +79 -0
  372. package/dist/src/string_order.spec.js.map +1 -0
  373. package/dist/src/type_of_type.d.ts +17 -0
  374. package/dist/src/type_of_type.d.ts.map +1 -1
  375. package/dist/src/type_of_type.js +66 -0
  376. package/dist/src/type_of_type.js.map +1 -1
  377. package/dist/src/type_of_type.to_etv.spec.js +69 -1
  378. package/dist/src/type_of_type.to_etv.spec.js.map +1 -1
  379. package/package.json +1 -1
@@ -0,0 +1,479 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * The content-defined segment boundary: the hash and its pinned vectors, the
7
+ * size-aware threshold and the bounds, and the properties the segment-object
8
+ * layout stands on — segmentation is a pure function of the value, a one-row
9
+ * edit re-cuts one segment (for an Array as much as a Dict), wide rows cut near
10
+ * the byte target, and a standalone segment encode is byte-identical to carving
11
+ * that segment out of the whole blob.
12
+ */
13
+ import { describe, test } from "node:test";
14
+ import assert from "node:assert/strict";
15
+ import { IntegerType, StringType, ArrayType, SetType, DictType, StructType, BlobType } from "../../../types.js";
16
+ import { compareFor } from "../../../comparison.js";
17
+ import { SortedMap, SortedSet } from "../../../index.js";
18
+ import { Beast2ElementWriter, encodeBeast2PagedFor, encodeBeast2SegmentsFor, openBeast2PagesFor, decodeBeast2For, readBeast2Extents, readBeast2SegmentLogicalBytes, carveBeast2, spliceBeast2, fnv1a64, segmentBoundaryHash, isSegmentBoundary, startsSegmentAfter, segmentRuleFor, segmentKeyTypeOf, encodeBeast2FenceFor, decodeBeast2FenceFor, SegmentCutter, SEGMENT_MIN_COUNT, SEGMENT_TARGET_COUNT, SEGMENT_MAX_COUNT, SEGMENT_MIN_BYTES, SEGMENT_TARGET_BYTES, SEGMENT_MAX_BYTES, SEGMENT_RULE_KEYED, SEGMENT_RULE_ARRAY, } from "../index.js";
19
+ import { toEastTypeValue } from "../../../type_of_type.js";
20
+ const RowType = StructType({ id: IntegerType, name: StringType });
21
+ const TableType = DictType(StringType, RowType);
22
+ /** The cross-runtime parity fixture: 50,000 `k0000000`-style keys to their
23
+ * index. Kept narrow (a scalar value) so the C twin builds the same value
24
+ * with no struct layout to agree on. */
25
+ const TableKeyedType = DictType(StringType, IntegerType);
26
+ function parityTable() {
27
+ return new SortedMap(Array.from({ length: 50_000 }, (_, i) => [`k${String(i).padStart(7, "0")}`, BigInt(i)]), compareFor(StringType));
28
+ }
29
+ /** `n` rows keyed `k0000000`… in canonical order. */
30
+ function table(n, mark) {
31
+ const entries = [];
32
+ for (let i = 0; i < n; i++) {
33
+ const key = `k${String(i).padStart(7, "0")}`;
34
+ entries.push([key, { id: BigInt(i), name: mark?.at === key ? mark.name : `row-${i}` }]);
35
+ }
36
+ return new SortedMap(entries, compareFor(StringType));
37
+ }
38
+ /** Every segment's fence bytes, element count and logical size, from a
39
+ * stored blob. */
40
+ function geometry(blob, type) {
41
+ const pages = openBeast2PagesFor(type)(blob);
42
+ const fence = encodeBeast2FenceFor(segmentKeyTypeOf(type));
43
+ const fences = [];
44
+ for (let i = 0; i < pages.segmentCount; i++)
45
+ fences.push(fence(pages.fence(i)));
46
+ return { fences, counts: [...pages.counts], sizes: readBeast2SegmentLogicalBytes(blob) };
47
+ }
48
+ /** Each segment's frame bytes, which is what a segment object stores. */
49
+ function segmentFrames(blob) {
50
+ const extents = readBeast2Extents(blob);
51
+ return extents.offsets.map((offset, i) => Buffer.from(blob.subarray(offset, i + 1 < extents.offsets.length ? extents.offsets[i + 1] : extents.segmentsEnd)).toString("hex"));
52
+ }
53
+ /** How many of `after`'s segments `before` does not hold. */
54
+ function newSegments(before, after) {
55
+ const held = new Set(segmentFrames(before));
56
+ return segmentFrames(after).filter((frame) => !held.has(frame)).length;
57
+ }
58
+ /** The first `k0000000`-style key whose boundary hash falls under the narrow
59
+ * threshold. */
60
+ function narrowBoundaryKey() {
61
+ const fence = encodeBeast2FenceFor(StringType);
62
+ for (let i = 0;; i++) {
63
+ const key = `k${String(i).padStart(7, "0")}`;
64
+ if (isSegmentBoundary(segmentBoundaryHash(fence(key)), 1, 1))
65
+ return key;
66
+ }
67
+ }
68
+ describe("beast2 v5 content-defined boundaries", () => {
69
+ describe("fnv1a64", () => {
70
+ test("matches the reference vectors", () => {
71
+ const of = (s) => fnv1a64(new TextEncoder().encode(s));
72
+ assert.equal(of(""), 0xcbf29ce484222325n);
73
+ assert.equal(of("a"), 0xaf63dc4c8601ec8cn);
74
+ assert.equal(of("foobar"), 0x85944171f73967e8n);
75
+ });
76
+ test("stays inside 64 bits over a long input", () => {
77
+ const hash = fnv1a64(new Uint8Array(4096).fill(0xff));
78
+ assert.ok(hash >= 0n && hash <= 0xffffffffffffffffn);
79
+ });
80
+ test("agrees with the byte-by-byte 64-bit hash", () => {
81
+ // The hash runs in 32-bit words; it must be the plain 64-bit recurrence,
82
+ // or every type-section hash moves.
83
+ const reference = (bytes) => {
84
+ let hash = 0xcbf29ce484222325n;
85
+ for (const byte of bytes)
86
+ hash = ((hash ^ BigInt(byte)) * 0x100000001b3n) & 0xffffffffffffffffn;
87
+ return hash;
88
+ };
89
+ let seed = 0x9e3779b9;
90
+ for (let n = 0; n < 20_000; n++) {
91
+ const bytes = new Uint8Array(1 + (n % 40));
92
+ for (let i = 0; i < bytes.length; i++) {
93
+ seed = (Math.imul(seed, 1664525) + 1013904223) >>> 0;
94
+ bytes[i] = seed >>> 24;
95
+ }
96
+ assert.equal(fnv1a64(bytes), reference(bytes));
97
+ }
98
+ });
99
+ });
100
+ describe("the boundary hash", () => {
101
+ test("matches the pinned vectors", () => {
102
+ // Pinned in east-c's tests/test_beast2_boundary.c as well.
103
+ const of = (s) => segmentBoundaryHash(new TextEncoder().encode(s));
104
+ assert.equal(of(""), 0x2c773e2c);
105
+ assert.equal(of("a"), 0xa3eabd3f);
106
+ assert.equal(of("foobar"), 0x1f341994);
107
+ assert.equal(of("k0000000"), 0xc8ca7941);
108
+ });
109
+ test("is murmur3's finalizer over the FNV-1a hash's low word", () => {
110
+ const finalize = (h) => {
111
+ h ^= h >>> 16;
112
+ h = Math.imul(h, 0x85ebca6b);
113
+ h ^= h >>> 13;
114
+ h = Math.imul(h, 0xc2b2ae35);
115
+ h ^= h >>> 16;
116
+ return h >>> 0;
117
+ };
118
+ let seed = 0x2545f491;
119
+ for (let n = 0; n < 5_000; n++) {
120
+ const bytes = new Uint8Array(n % 64);
121
+ for (let i = 0; i < bytes.length; i++) {
122
+ seed = (Math.imul(seed, 1664525) + 1013904223) >>> 0;
123
+ bytes[i] = seed >>> 24;
124
+ }
125
+ assert.equal(segmentBoundaryHash(bytes), finalize(Number(fnv1a64(bytes) & 0xffffffffn)));
126
+ }
127
+ });
128
+ });
129
+ describe("the threshold", () => {
130
+ test("is a quarter of one narrow element in the target count short of the target, four times it past", () => {
131
+ const base = 2 ** 32 / SEGMENT_TARGET_COUNT;
132
+ assert.equal(isSegmentBoundary(base / 4 - 1, SEGMENT_MIN_COUNT, 16 * SEGMENT_MIN_COUNT), true);
133
+ assert.equal(isSegmentBoundary(base / 4, SEGMENT_MIN_COUNT, 16 * SEGMENT_MIN_COUNT), false);
134
+ assert.equal(isSegmentBoundary(base * 4 - 1, SEGMENT_TARGET_COUNT, 16 * SEGMENT_TARGET_COUNT), true);
135
+ assert.equal(isSegmentBoundary(base * 4, SEGMENT_TARGET_COUNT, 16 * SEGMENT_TARGET_COUNT), false);
136
+ });
137
+ test("rises with the open segment's average element size", () => {
138
+ // An average of 64 KiB is one sixteenth of the byte target: a quarter of
139
+ // that short of the target, four times it once the segment holds 1 MiB.
140
+ const base = 2 ** 32 / 16;
141
+ assert.equal(isSegmentBoundary(base / 4 - 1, 2, 2 * 64 * 1024), true);
142
+ assert.equal(isSegmentBoundary(base / 4, 2, 2 * 64 * 1024), false);
143
+ assert.equal(isSegmentBoundary(base * 4 - 1, 16, 16 * 64 * 1024), true);
144
+ assert.equal(isSegmentBoundary(base * 4, 16, 16 * 64 * 1024), false);
145
+ });
146
+ test("makes every element a boundary at an average of the byte target", () => {
147
+ assert.equal(isSegmentBoundary(0xffffffff, 1, SEGMENT_TARGET_BYTES), true);
148
+ assert.equal(isSegmentBoundary(0xffffffff, 1, SEGMENT_TARGET_BYTES - 1), false);
149
+ });
150
+ });
151
+ describe("the rule id", () => {
152
+ test("is keyed for Set and Dict roots and element-hashed for Array roots", () => {
153
+ assert.equal(segmentRuleFor(TableType), SEGMENT_RULE_KEYED);
154
+ assert.equal(segmentRuleFor(SetType(StringType)), SEGMENT_RULE_KEYED);
155
+ assert.equal(segmentRuleFor(ArrayType(RowType)), SEGMENT_RULE_ARRAY);
156
+ });
157
+ test("refuses a non-collection root", () => {
158
+ assert.throws(() => segmentRuleFor(IntegerType), /Array, Set or Dict roots/);
159
+ });
160
+ test("names the key type a fence holds", () => {
161
+ assert.deepEqual(segmentKeyTypeOf(TableType), toEastTypeValue(StringType));
162
+ assert.deepEqual(segmentKeyTypeOf(SetType(RowType)), toEastTypeValue(RowType));
163
+ assert.equal(segmentKeyTypeOf(ArrayType(RowType)), null);
164
+ });
165
+ });
166
+ describe("fence bytes", () => {
167
+ test("round-trip and depend on the key alone", () => {
168
+ const encode = encodeBeast2FenceFor(RowType);
169
+ const decode = decodeBeast2FenceFor(RowType);
170
+ const row = { id: 7n, name: "seven" };
171
+ assert.deepEqual(decode(encode(row)), row);
172
+ // A second encode through the same closure must not carry state from the
173
+ // first — a container REF would make a key's bytes depend on its position.
174
+ assert.deepEqual(encode(row), encode(row));
175
+ });
176
+ test("are the key's own bytes, which the next encode leaves alone", () => {
177
+ // The encoder reuses one writer across keys; what it hands back is kept
178
+ // — in a manifest, a cache of fences — so it must be a copy of the key's
179
+ // bytes and nothing more.
180
+ const encode = encodeBeast2FenceFor(StringType);
181
+ const first = encode("first");
182
+ const kept = first.slice();
183
+ encode("a much longer second key, long enough to overwrite a shared buffer");
184
+ assert.deepEqual(first, kept);
185
+ assert.equal(first.buffer.byteLength, first.byteLength, "a fence holds only its own bytes");
186
+ });
187
+ test("refuse trailing bytes", () => {
188
+ const bytes = encodeBeast2FenceFor(StringType)("abc");
189
+ const padded = new Uint8Array(bytes.length + 1);
190
+ padded.set(bytes);
191
+ assert.throws(() => decodeBeast2FenceFor(StringType)(padded), /bytes after the encoded key/);
192
+ });
193
+ });
194
+ describe("the cutter", () => {
195
+ const narrow = new Uint8Array([0x61]);
196
+ test("never starts a segment at the first element", () => {
197
+ const cutter = new SegmentCutter();
198
+ const fence = encodeBeast2FenceFor(StringType);
199
+ assert.equal(cutter.startsSegment(8, fence(narrowBoundaryKey())), false);
200
+ assert.equal(cutter.openCount, 1);
201
+ assert.equal(cutter.openBytes, 8);
202
+ });
203
+ test("forces a cut at the maximum count", () => {
204
+ // A hash no threshold admits: only the bound can cut.
205
+ const cutter = new SegmentCutter();
206
+ const never = new Uint8Array(0);
207
+ assert.ok(!isSegmentBoundary(segmentBoundaryHash(never), SEGMENT_MAX_COUNT, SEGMENT_MAX_COUNT));
208
+ let cuts = 0;
209
+ for (let i = 0; i < SEGMENT_MAX_COUNT * 2; i++) {
210
+ if (cutter.startsSegment(1, never)) {
211
+ cuts++;
212
+ assert.equal(i % SEGMENT_MAX_COUNT, 0, `cut at element ${i}`);
213
+ }
214
+ }
215
+ assert.equal(cuts, 1);
216
+ assert.equal(cutter.openCount, SEGMENT_MAX_COUNT);
217
+ });
218
+ test("forces a cut at the maximum bytes, and never splits an element", () => {
219
+ const cutter = new SegmentCutter();
220
+ const never = new Uint8Array(0);
221
+ assert.equal(cutter.startsSegment(SEGMENT_MAX_BYTES + 1, never), false);
222
+ assert.equal(cutter.startsSegment(1, never), true, "an element wider than the maximum is a segment of its own");
223
+ assert.equal(cutter.openBytes, 1);
224
+ });
225
+ test("ignores a boundary hash below the minimum", () => {
226
+ const fence = encodeBeast2FenceFor(StringType);
227
+ const cutter = new SegmentCutter();
228
+ cutter.startsSegment(1, narrow);
229
+ assert.equal(cutter.startsSegment(1, fence(narrowBoundaryKey())), false);
230
+ });
231
+ test("consults the hash once the open segment holds the minimum bytes", () => {
232
+ const fence = encodeBeast2FenceFor(StringType);
233
+ const cutter = new SegmentCutter();
234
+ cutter.startsSegment(SEGMENT_MIN_BYTES, narrow);
235
+ assert.equal(cutter.startsSegment(1, fence(narrowBoundaryKey())), true);
236
+ });
237
+ });
238
+ describe("the element writer", () => {
239
+ test("segments inside the pinned bounds", () => {
240
+ const blob = encodeBeast2PagedFor(TableType)(table(50_000));
241
+ const { counts, sizes } = geometry(blob, TableType);
242
+ assert.ok(counts.length > 1, "50k rows must not be one segment");
243
+ for (let i = 0; i < counts.length - 1; i++) {
244
+ assert.ok(counts[i] >= SEGMENT_MIN_COUNT || sizes[i] >= SEGMENT_MIN_BYTES, `segment ${i} holds ${counts[i]}`);
245
+ assert.ok(counts[i] <= SEGMENT_MAX_COUNT, `segment ${i} holds ${counts[i]}`);
246
+ }
247
+ });
248
+ test("is a pure function of the value, not of insertion order", () => {
249
+ const ascending = encodeBeast2PagedFor(TableType)(table(20_000));
250
+ const shuffled = new Map();
251
+ for (const [k, v] of [...table(20_000)].reverse())
252
+ shuffled.set(k, v);
253
+ assert.deepEqual(encodeBeast2PagedFor(TableType)(shuffled), ascending);
254
+ });
255
+ test("re-cuts exactly one segment for a one-row edit", () => {
256
+ const before = encodeBeast2PagedFor(TableType)(table(20_000));
257
+ const after = encodeBeast2PagedFor(TableType)(table(20_000, { at: "k0009000", name: "edited" }));
258
+ assert.equal(readBeast2Extents(before).offsets.length, readBeast2Extents(after).offsets.length);
259
+ assert.equal(newSegments(before, after), 1);
260
+ });
261
+ test("re-cuts O(1) Array segments for an edit, and for an insert at the front", () => {
262
+ const type = ArrayType(RowType);
263
+ const rows = Array.from({ length: 20_000 }, (_, i) => ({ id: BigInt(i), name: `row-${i}` }));
264
+ const before = encodeBeast2PagedFor(type)(rows);
265
+ const edited = rows.slice();
266
+ edited[9_000] = { id: 9000n, name: "edited" };
267
+ assert.equal(newSegments(before, encodeBeast2PagedFor(type)(edited)), 1);
268
+ // An insert shifts every element after it, but a cut the hash placed
269
+ // stays at its element: only the segments before the first such cut
270
+ // change — here the first segment's own cut is the hash's, so just the
271
+ // one.
272
+ assert.ok(openBeast2PagesFor(type)(before).counts[0] < SEGMENT_MAX_COUNT);
273
+ assert.equal(newSegments(before, encodeBeast2PagedFor(type)([{ id: -1n, name: "first" }, ...rows])), 1);
274
+ });
275
+ test("cuts wide rows near the byte target rather than at a count", () => {
276
+ const type = DictType(StringType, BlobType);
277
+ const rows = new Map();
278
+ for (let i = 0; i < 64; i++)
279
+ rows.set(`r${String(i).padStart(3, "0")}`, new Uint8Array(256 * 1024).fill(i));
280
+ const blob = encodeBeast2PagedFor(type, { codec: "none" })(rows);
281
+ const sizes = readBeast2SegmentLogicalBytes(blob);
282
+ assert.ok(sizes.length > 4, `16 MiB of rows must not be ${sizes.length} segments`);
283
+ for (let i = 0; i < sizes.length - 1; i++) {
284
+ assert.ok(sizes[i] <= SEGMENT_MAX_BYTES + 256 * 1024 + 16, `segment ${i} is ${sizes[i]} bytes`);
285
+ }
286
+ const { fences, counts } = geometry(blob, type);
287
+ for (let i = 0; i < counts.length - 1; i++) {
288
+ assert.ok(startsSegmentAfter(counts[i], sizes[i], fences[i + 1]), `the cut after segment ${i} is the rule's`);
289
+ }
290
+ });
291
+ test("stores a Dict of 300 rows of 1 MiB as segments of about 1 MiB, not as one", () => {
292
+ // An average of 1 MiB makes every element a boundary: each row is a
293
+ // segment of its own, the size target. Written through the segment sink,
294
+ // as a manifest directory is, so the test holds one segment at a time;
295
+ // one row value serves every key.
296
+ const row = new Uint8Array(1024 * 1024).fill(7);
297
+ const segments = [];
298
+ const writer = new Beast2ElementWriter(DictType(StringType, BlobType), {
299
+ segment: ({ count, logicalBytes }) => { segments.push({ count, logicalBytes }); },
300
+ }, { codec: "none" });
301
+ for (let i = 0; i < 300; i++)
302
+ writer.add([`r${String(i).padStart(3, "0")}`, row]);
303
+ writer.finish();
304
+ assert.equal(segments.length, 300);
305
+ for (const [i, { count, logicalBytes }] of segments.entries()) {
306
+ assert.equal(count, 1, `segment ${i} holds one row`);
307
+ assert.ok(logicalBytes >= SEGMENT_TARGET_BYTES && logicalBytes < SEGMENT_TARGET_BYTES + 64, `segment ${i} is ${logicalBytes} bytes`);
308
+ }
309
+ });
310
+ test("holds a short collection in one segment", () => {
311
+ const blob = encodeBeast2PagedFor(TableType)(table(SEGMENT_MIN_COUNT - 1));
312
+ assert.equal(openBeast2PagesFor(TableType)(blob).segmentCount, 1);
313
+ });
314
+ test("decodes to the value it was given", () => {
315
+ const value = table(5_000);
316
+ const decoded = decodeBeast2For(TableType)(encodeBeast2PagedFor(TableType)(value));
317
+ assert.equal(decoded.size, value.size);
318
+ assert.deepEqual(decoded.get("k0004999"), value.get("k0004999"));
319
+ });
320
+ test("cuts a Set root by its elements", () => {
321
+ const elements = new SortedSet(Array.from({ length: 10_000 }, (_, i) => `e${String(i).padStart(6, "0")}`), compareFor(StringType));
322
+ const type = SetType(StringType);
323
+ const blob = encodeBeast2PagedFor(type)(elements);
324
+ const { fences, counts, sizes } = geometry(blob, type);
325
+ assert.ok(counts.length > 1);
326
+ for (let i = 0; i < counts.length - 1; i++) {
327
+ assert.ok(startsSegmentAfter(counts[i], sizes[i], fences[i + 1]), `the cut after segment ${i} is the rule's`);
328
+ }
329
+ });
330
+ test("writes encoded elements to the same bytes as decoded ones", () => {
331
+ const type = TableKeyedType;
332
+ const key = encodeBeast2FenceFor(StringType);
333
+ const value = encodeBeast2FenceFor(IntegerType);
334
+ const fromValues = [];
335
+ const fromBytes = [];
336
+ const a = new Beast2ElementWriter(type, (b) => fromValues.push(b.slice()));
337
+ const b = new Beast2ElementWriter(type, (bytes) => fromBytes.push(bytes.slice()));
338
+ for (const [k, v] of parityTable()) {
339
+ a.add([k, v]);
340
+ const keyBytes = key(k);
341
+ const element = new Uint8Array(keyBytes.length + 10);
342
+ element.set(keyBytes);
343
+ const valueBytes = value(v);
344
+ element.set(valueBytes, keyBytes.length);
345
+ b.addEncoded(element.subarray(0, keyBytes.length + valueBytes.length), keyBytes.length);
346
+ }
347
+ a.finish();
348
+ b.finish();
349
+ assert.deepEqual(Buffer.concat(fromBytes), Buffer.concat(fromValues));
350
+ });
351
+ test("refuses a key that does not ascend", () => {
352
+ const writer = new Beast2ElementWriter(TableKeyedType, () => { });
353
+ writer.add(["b", 1n]);
354
+ assert.throws(() => writer.add(["a", 2n]), /strictly ascending/);
355
+ assert.throws(() => writer.add(["b", 2n]), /strictly ascending/);
356
+ });
357
+ test("is left as it was by an element that fails to encode", () => {
358
+ const chunks = [];
359
+ const writer = new Beast2ElementWriter(TableKeyedType, (b) => chunks.push(b.slice()));
360
+ writer.add(["a", 1n]);
361
+ assert.throws(() => writer.add(["b", "not an integer"]));
362
+ writer.add(["b", 2n]);
363
+ writer.finish();
364
+ assert.deepEqual([...decodeBeast2For(TableKeyedType)(Buffer.concat(chunks))], [["a", 1n], ["b", 2n]]);
365
+ });
366
+ test("hands each segment over as the blob carving it out of the whole gives", () => {
367
+ const value = table(20_000);
368
+ const blob = encodeBeast2PagedFor(TableType)(value);
369
+ const extents = readBeast2Extents(blob);
370
+ const { fences, counts, sizes } = geometry(blob, TableType);
371
+ const segments = [];
372
+ const writer = new Beast2ElementWriter(TableType, { segment: (segment) => { segments.push(segment); } });
373
+ for (const entry of value)
374
+ writer.add(entry);
375
+ writer.finish();
376
+ assert.deepEqual(writer.header, blob.subarray(0, extents.prefixEnd));
377
+ assert.equal(writer.segments, counts.length);
378
+ assert.equal(segments.length, counts.length);
379
+ for (let i = 0; i < segments.length; i++) {
380
+ assert.deepEqual(segments[i].blob, carveBeast2(blob, i, i + 1, extents), `segment ${i}`);
381
+ assert.equal(segments[i].count, counts[i]);
382
+ assert.deepEqual(segments[i].fence, fences[i]);
383
+ assert.equal(segments[i].logicalBytes, sizes[i]);
384
+ }
385
+ });
386
+ test("hands an Array's segments over with empty fences, and an empty collection's none", () => {
387
+ const type = ArrayType(RowType);
388
+ const rows = Array.from({ length: 5_000 }, (_, i) => ({ id: BigInt(i), name: `row-${i}` }));
389
+ const segments = [];
390
+ const writer = new Beast2ElementWriter(type, { segment: (segment) => { segments.push(segment); } });
391
+ for (const row of rows)
392
+ writer.add(row);
393
+ writer.finish();
394
+ assert.ok(segments.length > 1);
395
+ assert.ok(segments.every((segment) => segment.fence.length === 0));
396
+ assert.deepEqual(spliceBeast2(segments.map((segment) => segment.blob)), encodeBeast2PagedFor(type)(rows));
397
+ const none = [];
398
+ const empty = new Beast2ElementWriter(type, { segment: (segment) => { none.push(segment); } });
399
+ empty.finish();
400
+ assert.equal(none.length, 0);
401
+ const blob = encodeBeast2PagedFor(type)([]);
402
+ assert.deepEqual(empty.header, blob.subarray(0, readBeast2Extents(blob).prefixEnd));
403
+ });
404
+ });
405
+ describe("three-runtime parity", () => {
406
+ // The claim the segment-object layout rests on: east, east-c and east-py
407
+ // (which binds east-c's writer) cut the same value at the same elements,
408
+ // so a state shares every segment a write did not touch and a manifest
409
+ // one runtime maintains equals the one another rebuilds.
410
+ //
411
+ // The same fixtures and the same digests are pinned in east-c's
412
+ // `tests/test_beast2_boundary.c`. A change on either side fails both.
413
+ const digestOf = (counts) => fnv1a64(new TextEncoder().encode(counts.join(","))).toString(16).padStart(16, "0");
414
+ test("cuts the 50,000-key Dict where east-c cuts it", () => {
415
+ const blob = encodeBeast2PagedFor(TableKeyedType)(parityTable());
416
+ const pages = openBeast2PagesFor(TableKeyedType)(blob);
417
+ assert.equal(pages.segmentCount, 38);
418
+ assert.equal(digestOf(pages.counts), "2d1d1a2f011d367d");
419
+ });
420
+ test("cuts the 50,000-element Set where east-c cuts it", () => {
421
+ const type = SetType(StringType);
422
+ const elements = new SortedSet(Array.from({ length: 50_000 }, (_, i) => `e${String(i).padStart(7, "0")}`), compareFor(StringType));
423
+ const pages = openBeast2PagesFor(type)(encodeBeast2PagedFor(type)(elements));
424
+ assert.equal(pages.segmentCount, 44);
425
+ assert.equal(digestOf(pages.counts), "617fc98188343a6a");
426
+ });
427
+ test("cuts the 50,000-element Array where east-c cuts it", () => {
428
+ const type = ArrayType(StringType);
429
+ const elements = Array.from({ length: 50_000 }, (_, i) => `a${String(i).padStart(7, "0")}`);
430
+ const pages = openBeast2PagesFor(type)(encodeBeast2PagedFor(type)(elements));
431
+ assert.equal(pages.segmentCount, 43);
432
+ assert.equal(digestOf(pages.counts), "4b14a976ccd91c65");
433
+ });
434
+ });
435
+ describe("a standalone segment", () => {
436
+ test("is byte-identical to carving that segment out of the whole blob", () => {
437
+ const value = table(20_000);
438
+ const blob = encodeBeast2PagedFor(TableType)(value);
439
+ const extents = readBeast2Extents(blob);
440
+ const pages = openBeast2PagesFor(TableType)(blob);
441
+ const encodeSegments = encodeBeast2SegmentsFor(TableType);
442
+ assert.ok(pages.segmentCount > 2);
443
+ for (let i = 0; i < pages.segmentCount; i++) {
444
+ assert.deepEqual(encodeSegments([pages.segment(i)]), carveBeast2(blob, i, i + 1, extents), `segment ${i}`);
445
+ }
446
+ });
447
+ test("splices back into the whole blob", () => {
448
+ const blob = encodeBeast2PagedFor(TableType)(table(20_000));
449
+ const extents = readBeast2Extents(blob);
450
+ const segments = Array.from({ length: extents.offsets.length }, (_, i) => carveBeast2(blob, i, i + 1, extents));
451
+ assert.deepEqual(spliceBeast2(segments), blob);
452
+ });
453
+ test("reports its logical size from the frame header", () => {
454
+ // With codec none a frame's payload IS its logical bytes: the count's
455
+ // varint, then the elements back to back.
456
+ const type = SetType(StringType);
457
+ const elements = Array.from({ length: 3_000 }, (_, i) => `e${String(i).padStart(6, "0")}`);
458
+ const fence = encodeBeast2FenceFor(StringType);
459
+ const chunks = [];
460
+ const writer = new Beast2ElementWriter(type, (b) => chunks.push(b.slice()), { codec: "none" });
461
+ for (const e of elements)
462
+ writer.add(e);
463
+ writer.finish();
464
+ const blob = new Uint8Array(Buffer.concat(chunks));
465
+ const counts = readBeast2Extents(blob).counts;
466
+ const sizes = readBeast2SegmentLogicalBytes(blob);
467
+ let at = 0;
468
+ for (let i = 0; i < counts.length; i++) {
469
+ let expected = 0;
470
+ for (let j = 0; j < counts[i]; j++)
471
+ expected += fence(elements[at++]).length;
472
+ assert.equal(sizes[i], expected, `segment ${i}`);
473
+ }
474
+ const reader = { size: blob.length, read: (offset, length) => blob.subarray(offset, offset + length) };
475
+ assert.deepEqual(readBeast2SegmentLogicalBytes(reader), sizes);
476
+ });
477
+ });
478
+ });
479
+ //# sourceMappingURL=boundary.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.spec.js","sourceRoot":"","sources":["../../../../../src/serialization/beast2/v5/boundary.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Stepping over a value's v5 encoding without decoding it, and proving on the
7
+ * way that the bytes are the ones the Writer writes for the value they hold.
8
+ *
9
+ * Decoding a value and encoding it again gives its canonical bytes, but builds
10
+ * the value to do it. A reader that needs only where a value ends, and that its
11
+ * bytes are the Writer's, can step over them instead, holding each to what the
12
+ * encoder writes:
13
+ *
14
+ * - varints are minimal, and a length is a safe integer;
15
+ * - an Integer fits 64 bits, and a DateTime is a date a `Date` holds;
16
+ * - a Boolean is 0 or 1, and a NaN is the one NaN the encoder writes;
17
+ * - a String is well-formed UTF-8;
18
+ * - a Variant's case is one its type has;
19
+ * - a container's content is one run, and an alias names an earlier container
20
+ * of the same type within the root element;
21
+ * - a Set's elements and a Dict's keys strictly ascend.
22
+ *
23
+ * Whatever decodes but would encode otherwise — what decoding and encoding
24
+ * again would change — is refused. Only a Set's elements and a Dict's keys are
25
+ * decoded, to be ordered; they are of immutable types, so each decodes on its
26
+ * own. A function value is refused: its captures' types are known only once
27
+ * its IR is decoded.
28
+ *
29
+ * A lenient skipper holds bytes to what the decoder reads instead, where that
30
+ * is looser than what the Writer writes: a varint need not be minimal, a NaN
31
+ * may be the negative one, a container's content may come in several runs, and
32
+ * an alias may name a container of an earlier root element, when the caller
33
+ * shares one `defs` list across them. Bytes that pass it decode, and encoding
34
+ * what they decode to gives the Writer's bytes; everything else it refuses as
35
+ * the strict one does.
36
+ */
37
+ import { type EastTypeValue } from "../../../type_of_type.js";
38
+ import type { EastType } from "../../../types.js";
39
+ import type { BufferReader } from "../../binary-utils.js";
40
+ /** Thrown where bytes are not the encoding the Writer writes — or, for a
41
+ * lenient skipper, not an encoding the decoder reads. */
42
+ export declare class Beast2NotCanonicalError extends Error {
43
+ /** What is wrong with the bytes, as a refusal names it. */
44
+ readonly reason: string;
45
+ /**
46
+ * @param reason - what the Writer would not have written
47
+ */
48
+ constructor(reason: string);
49
+ }
50
+ /**
51
+ * Steps a reader over one value's encoding, holding it to the Writer's.
52
+ *
53
+ * @param reader - positioned at the value
54
+ * @param defs - the types of the containers defined so far in the root element
55
+ * the value belongs to, in definition order — for a lenient skipper, in
56
+ * every root element that shares the list; a container the value defines is
57
+ * added
58
+ * @throws {Beast2NotCanonicalError} When the bytes are not the Writer's.
59
+ */
60
+ export type CanonicalSkipper = (reader: BufferReader, defs: EastTypeValue[]) => void;
61
+ /** Options accepted by {@link canonicalSkipperFor}. */
62
+ export type CanonicalSkipperOptions = {
63
+ /** Hold the bytes to what the decoder reads rather than to what the Writer
64
+ * writes. Defaults to `false`. */
65
+ lenient?: boolean;
66
+ };
67
+ /** The most elements a container of zero-width elements holds, as every
68
+ * decoder bounds it. */
69
+ export declare const BEAST2_ZERO_WIDTH_MAX: number;
70
+ /** Whether a value of `type` encodes to no bytes: Null, Never, and structs of
71
+ * them.
72
+ * @internal */
73
+ export declare function zeroWidth(type: EastTypeValue): boolean;
74
+ /**
75
+ * Reads a varint the Writer writes: minimal, and no larger than a safe integer.
76
+ *
77
+ * @param reader - positioned at the varint
78
+ * @param what - what the varint is, for the refusal
79
+ * @param lenient - whether a varint that is not minimal reads
80
+ * @returns its value
81
+ * @throws {Beast2NotCanonicalError} When it is not minimal, too large, or
82
+ * runs past the bytes.
83
+ */
84
+ export declare function canonicalVarint(reader: BufferReader, what: string, lenient?: boolean): number;
85
+ /**
86
+ * Builds the {@link CanonicalSkipper} for a type.
87
+ *
88
+ * @param type - the type of the values to step over
89
+ * @param options - whether the skipper is lenient
90
+ * @returns the skipper
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * const bytes = encodeBeast2FenceFor(StringType)("key");
95
+ * const reader = new BufferReader(bytes, 0);
96
+ * canonicalSkipperFor(StringType)(reader, []);
97
+ * // reader.offset === bytes.length
98
+ * ```
99
+ */
100
+ export declare function canonicalSkipperFor(type: EastType | EastTypeValue, options?: CanonicalSkipperOptions): CanonicalSkipper;
101
+ //# sourceMappingURL=canonical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/beast2/v5/canonical.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D;0DAC0D;AAC1D,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;gBACS,MAAM,EAAE,MAAM;CAK3B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;AAErF,uDAAuD;AACvD,MAAM,MAAM,uBAAuB,GAAG;IACpC;uCACmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAUF;yBACyB;AACzB,eAAO,MAAM,qBAAqB,QAAiB,CAAC;AAEpD;;gBAEgB;AAChB,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAGtD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAmB3F;AAyID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAEvH"}