@elaraai/east 0.0.1-beta.8 → 1.0.0

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 (410) hide show
  1. package/LICENSE.md +15 -666
  2. package/README.md +113 -88
  3. package/dist/src/analyze.d.ts +3 -0
  4. package/dist/src/analyze.d.ts.map +1 -1
  5. package/dist/src/analyze.js +223 -111
  6. package/dist/src/analyze.js.map +1 -1
  7. package/dist/src/analyze.spec.d.ts +2 -0
  8. package/dist/src/analyze.spec.d.ts.map +1 -0
  9. package/dist/src/analyze.spec.js +445 -0
  10. package/dist/src/analyze.spec.js.map +1 -0
  11. package/dist/src/ast.d.ts +54 -35
  12. package/dist/src/ast.d.ts.map +1 -1
  13. package/dist/src/ast_to_ir.coerce_to.spec.d.ts +15 -0
  14. package/dist/src/ast_to_ir.coerce_to.spec.d.ts.map +1 -0
  15. package/dist/src/ast_to_ir.coerce_to.spec.js +420 -0
  16. package/dist/src/ast_to_ir.coerce_to.spec.js.map +1 -0
  17. package/dist/src/ast_to_ir.d.ts +18 -4
  18. package/dist/src/ast_to_ir.d.ts.map +1 -1
  19. package/dist/src/ast_to_ir.js +233 -178
  20. package/dist/src/ast_to_ir.js.map +1 -1
  21. package/dist/src/builtins.d.ts +1 -1
  22. package/dist/src/builtins.d.ts.map +1 -1
  23. package/dist/src/builtins.js +194 -2
  24. package/dist/src/builtins.js.map +1 -1
  25. package/dist/src/comparison.d.ts +2 -2
  26. package/dist/src/comparison.d.ts.map +1 -1
  27. package/dist/src/comparison.js +115 -40
  28. package/dist/src/comparison.js.map +1 -1
  29. package/dist/src/comparison.spec.d.ts +2 -0
  30. package/dist/src/comparison.spec.d.ts.map +1 -0
  31. package/dist/src/comparison.spec.js +1200 -0
  32. package/dist/src/comparison.spec.js.map +1 -0
  33. package/dist/src/compile.d.ts +31 -9
  34. package/dist/src/compile.d.ts.map +1 -1
  35. package/dist/src/compile.js +1048 -548
  36. package/dist/src/compile.js.map +1 -1
  37. package/dist/src/containers/matrix.d.ts +15 -0
  38. package/dist/src/containers/matrix.d.ts.map +1 -0
  39. package/dist/src/containers/matrix.js +15 -0
  40. package/dist/src/containers/matrix.js.map +1 -0
  41. package/dist/src/containers/ref.d.ts.map +1 -1
  42. package/dist/src/containers/ref.js +1 -1
  43. package/dist/src/containers/ref.js.map +1 -1
  44. package/dist/src/containers/sortedmap.spec.d.ts +2 -0
  45. package/dist/src/containers/sortedmap.spec.d.ts.map +1 -0
  46. package/dist/src/containers/sortedmap.spec.js +180 -0
  47. package/dist/src/containers/sortedmap.spec.js.map +1 -0
  48. package/dist/src/containers/sortedset.spec.d.ts +2 -0
  49. package/dist/src/containers/sortedset.spec.d.ts.map +1 -0
  50. package/dist/src/containers/sortedset.spec.js +228 -0
  51. package/dist/src/containers/sortedset.spec.js.map +1 -0
  52. package/dist/src/containers/variant.d.ts.map +1 -1
  53. package/dist/src/containers/variant.js +1 -1
  54. package/dist/src/containers/variant.js.map +1 -1
  55. package/dist/src/containers/variant.spec.d.ts +2 -0
  56. package/dist/src/containers/variant.spec.d.ts.map +1 -0
  57. package/dist/src/containers/variant.spec.js +217 -0
  58. package/dist/src/containers/variant.spec.js.map +1 -0
  59. package/dist/src/datetime_format/parse.spec.d.ts +6 -0
  60. package/dist/src/datetime_format/parse.spec.d.ts.map +1 -0
  61. package/dist/src/datetime_format/parse.spec.js +379 -0
  62. package/dist/src/datetime_format/parse.spec.js.map +1 -0
  63. package/dist/src/datetime_format/print.spec.d.ts +6 -0
  64. package/dist/src/datetime_format/print.spec.d.ts.map +1 -0
  65. package/dist/src/datetime_format/print.spec.js +257 -0
  66. package/dist/src/datetime_format/print.spec.js.map +1 -0
  67. package/dist/src/datetime_format/tokenize.spec.d.ts +2 -0
  68. package/dist/src/datetime_format/tokenize.spec.d.ts.map +1 -0
  69. package/dist/src/datetime_format/tokenize.spec.js +508 -0
  70. package/dist/src/datetime_format/tokenize.spec.js.map +1 -0
  71. package/dist/src/datetime_format/types.d.ts +23 -23
  72. package/dist/src/default.d.ts.map +1 -1
  73. package/dist/src/default.js +33 -0
  74. package/dist/src/default.js.map +1 -1
  75. package/dist/src/default.spec.d.ts +2 -0
  76. package/dist/src/default.spec.d.ts.map +1 -0
  77. package/dist/src/default.spec.js +178 -0
  78. package/dist/src/default.spec.js.map +1 -0
  79. package/dist/src/eastir.d.ts +7 -0
  80. package/dist/src/eastir.d.ts.map +1 -1
  81. package/dist/src/eastir.js +55 -7
  82. package/dist/src/eastir.js.map +1 -1
  83. package/dist/src/error.d.ts +14 -4
  84. package/dist/src/error.d.ts.map +1 -1
  85. package/dist/src/error.js +28 -3
  86. package/dist/src/error.js.map +1 -1
  87. package/dist/src/example.d.ts +87 -0
  88. package/dist/src/example.d.ts.map +1 -0
  89. package/dist/src/example.js +18 -0
  90. package/dist/src/example.js.map +1 -0
  91. package/dist/src/expr/array.d.ts +43 -1
  92. package/dist/src/expr/array.d.ts.map +1 -1
  93. package/dist/src/expr/array.js +103 -53
  94. package/dist/src/expr/array.js.map +1 -1
  95. package/dist/src/expr/ast.d.ts +1 -1
  96. package/dist/src/expr/ast.d.ts.map +1 -1
  97. package/dist/src/expr/ast.js +112 -54
  98. package/dist/src/expr/ast.js.map +1 -1
  99. package/dist/src/expr/asyncfunction.d.ts.map +1 -1
  100. package/dist/src/expr/asyncfunction.js +6 -4
  101. package/dist/src/expr/asyncfunction.js.map +1 -1
  102. package/dist/src/expr/blob.d.ts +48 -0
  103. package/dist/src/expr/blob.d.ts.map +1 -1
  104. package/dist/src/expr/blob.js +63 -8
  105. package/dist/src/expr/blob.js.map +1 -1
  106. package/dist/src/expr/block.d.ts +213 -12
  107. package/dist/src/expr/block.d.ts.map +1 -1
  108. package/dist/src/expr/block.js +796 -293
  109. package/dist/src/expr/block.js.map +1 -1
  110. package/dist/src/expr/boolean.d.ts +44 -0
  111. package/dist/src/expr/boolean.d.ts.map +1 -1
  112. package/dist/src/expr/boolean.js +58 -6
  113. package/dist/src/expr/boolean.js.map +1 -1
  114. package/dist/src/expr/datetime.d.ts +135 -0
  115. package/dist/src/expr/datetime.d.ts.map +1 -1
  116. package/dist/src/expr/datetime.js +184 -34
  117. package/dist/src/expr/datetime.js.map +1 -1
  118. package/dist/src/expr/dict.d.ts +47 -2
  119. package/dist/src/expr/dict.d.ts.map +1 -1
  120. package/dist/src/expr/dict.js +122 -61
  121. package/dist/src/expr/dict.js.map +1 -1
  122. package/dist/src/expr/expr.d.ts +3 -1
  123. package/dist/src/expr/expr.d.ts.map +1 -1
  124. package/dist/src/expr/expr.js +4 -3
  125. package/dist/src/expr/expr.js.map +1 -1
  126. package/dist/src/expr/float.d.ts +153 -0
  127. package/dist/src/expr/float.d.ts.map +1 -1
  128. package/dist/src/expr/float.js +191 -17
  129. package/dist/src/expr/float.js.map +1 -1
  130. package/dist/src/expr/function.d.ts +7 -2
  131. package/dist/src/expr/function.d.ts.map +1 -1
  132. package/dist/src/expr/function.js +6 -4
  133. package/dist/src/expr/function.js.map +1 -1
  134. package/dist/src/expr/index.d.ts +186 -2
  135. package/dist/src/expr/index.d.ts.map +1 -1
  136. package/dist/src/expr/index.js +183 -2
  137. package/dist/src/expr/index.js.map +1 -1
  138. package/dist/src/expr/integer.d.ts +180 -0
  139. package/dist/src/expr/integer.d.ts.map +1 -1
  140. package/dist/src/expr/integer.js +189 -18
  141. package/dist/src/expr/integer.js.map +1 -1
  142. package/dist/src/expr/libs/array.js +3 -3
  143. package/dist/src/expr/libs/array.js.map +1 -1
  144. package/dist/src/expr/libs/blob.js +3 -3
  145. package/dist/src/expr/libs/blob.js.map +1 -1
  146. package/dist/src/expr/libs/dict.js +1 -1
  147. package/dist/src/expr/libs/dict.js.map +1 -1
  148. package/dist/src/expr/libs/matrix.d.ts +17 -0
  149. package/dist/src/expr/libs/matrix.d.ts.map +1 -0
  150. package/dist/src/expr/libs/matrix.js +60 -0
  151. package/dist/src/expr/libs/matrix.js.map +1 -0
  152. package/dist/src/expr/libs/set.js +1 -1
  153. package/dist/src/expr/libs/set.js.map +1 -1
  154. package/dist/src/expr/libs/string.d.ts.map +1 -1
  155. package/dist/src/expr/libs/string.js +2 -1
  156. package/dist/src/expr/libs/string.js.map +1 -1
  157. package/dist/src/expr/libs/vector.d.ts +16 -0
  158. package/dist/src/expr/libs/vector.d.ts.map +1 -0
  159. package/dist/src/expr/libs/vector.js +44 -0
  160. package/dist/src/expr/libs/vector.js.map +1 -0
  161. package/dist/src/expr/matrix.d.ts +109 -0
  162. package/dist/src/expr/matrix.d.ts.map +1 -0
  163. package/dist/src/expr/matrix.js +224 -0
  164. package/dist/src/expr/matrix.js.map +1 -0
  165. package/dist/src/expr/recursive.d.ts +83 -0
  166. package/dist/src/expr/recursive.d.ts.map +1 -0
  167. package/dist/src/expr/recursive.js +99 -0
  168. package/dist/src/expr/recursive.js.map +1 -0
  169. package/dist/src/expr/ref.js +5 -5
  170. package/dist/src/expr/ref.js.map +1 -1
  171. package/dist/src/expr/set.d.ts +44 -2
  172. package/dist/src/expr/set.d.ts.map +1 -1
  173. package/dist/src/expr/set.js +102 -52
  174. package/dist/src/expr/set.js.map +1 -1
  175. package/dist/src/expr/string.d.ts +134 -0
  176. package/dist/src/expr/string.d.ts.map +1 -1
  177. package/dist/src/expr/string.js +173 -23
  178. package/dist/src/expr/string.js.map +1 -1
  179. package/dist/src/expr/struct.d.ts +1 -1
  180. package/dist/src/expr/struct.d.ts.map +1 -1
  181. package/dist/src/expr/struct.js +2 -2
  182. package/dist/src/expr/struct.js.map +1 -1
  183. package/dist/src/expr/types.d.ts +12 -9
  184. package/dist/src/expr/types.d.ts.map +1 -1
  185. package/dist/src/expr/variant.d.ts +108 -11
  186. package/dist/src/expr/variant.d.ts.map +1 -1
  187. package/dist/src/expr/variant.js +76 -38
  188. package/dist/src/expr/variant.js.map +1 -1
  189. package/dist/src/expr/vector.d.ts +102 -0
  190. package/dist/src/expr/vector.d.ts.map +1 -0
  191. package/dist/src/expr/vector.js +202 -0
  192. package/dist/src/expr/vector.js.map +1 -0
  193. package/dist/src/fuzz.d.ts +36 -2
  194. package/dist/src/fuzz.d.ts.map +1 -1
  195. package/dist/src/fuzz.js +409 -77
  196. package/dist/src/fuzz.js.map +1 -1
  197. package/dist/src/index.d.ts +4 -0
  198. package/dist/src/index.d.ts.map +1 -1
  199. package/dist/src/index.js +4 -0
  200. package/dist/src/index.js.map +1 -1
  201. package/dist/src/internal.d.ts +12 -2
  202. package/dist/src/internal.d.ts.map +1 -1
  203. package/dist/src/internal.js +13 -2
  204. package/dist/src/internal.js.map +1 -1
  205. package/dist/src/ir.d.ts +1754 -1484
  206. package/dist/src/ir.d.ts.map +1 -1
  207. package/dist/src/ir.js +51 -34
  208. package/dist/src/ir.js.map +1 -1
  209. package/dist/src/ir.spec.d.ts +2 -0
  210. package/dist/src/ir.spec.d.ts.map +1 -0
  211. package/dist/src/ir.spec.js +35 -0
  212. package/dist/src/ir.spec.js.map +1 -0
  213. package/dist/src/location.d.ts +56 -17
  214. package/dist/src/location.d.ts.map +1 -1
  215. package/dist/src/location.js +226 -29
  216. package/dist/src/location.js.map +1 -1
  217. package/dist/src/location.spec.d.ts +2 -0
  218. package/dist/src/location.spec.d.ts.map +1 -0
  219. package/dist/src/location.spec.js +102 -0
  220. package/dist/src/location.spec.js.map +1 -0
  221. package/dist/src/patch/apply.d.ts +15 -0
  222. package/dist/src/patch/apply.d.ts.map +1 -0
  223. package/dist/src/patch/apply.js +352 -0
  224. package/dist/src/patch/apply.js.map +1 -0
  225. package/dist/src/patch/compose.d.ts +15 -0
  226. package/dist/src/patch/compose.d.ts.map +1 -0
  227. package/dist/src/patch/compose.js +448 -0
  228. package/dist/src/patch/compose.js.map +1 -0
  229. package/dist/src/patch/diff.d.ts +15 -0
  230. package/dist/src/patch/diff.d.ts.map +1 -0
  231. package/dist/src/patch/diff.js +347 -0
  232. package/dist/src/patch/diff.js.map +1 -0
  233. package/dist/src/patch/fuzz.d.ts +73 -0
  234. package/dist/src/patch/fuzz.d.ts.map +1 -0
  235. package/dist/src/patch/fuzz.js +159 -0
  236. package/dist/src/patch/fuzz.js.map +1 -0
  237. package/dist/src/patch/index.d.ts +32 -0
  238. package/dist/src/patch/index.d.ts.map +1 -0
  239. package/dist/src/patch/index.js +48 -0
  240. package/dist/src/patch/index.js.map +1 -0
  241. package/dist/src/patch/invert.d.ts +15 -0
  242. package/dist/src/patch/invert.d.ts.map +1 -0
  243. package/dist/src/patch/invert.js +284 -0
  244. package/dist/src/patch/invert.js.map +1 -0
  245. package/dist/src/patch/merge.d.ts +56 -0
  246. package/dist/src/patch/merge.d.ts.map +1 -0
  247. package/dist/src/patch/merge.js +586 -0
  248. package/dist/src/patch/merge.js.map +1 -0
  249. package/dist/src/patch/merge.spec.d.ts +2 -0
  250. package/dist/src/patch/merge.spec.d.ts.map +1 -0
  251. package/dist/src/patch/merge.spec.js +1139 -0
  252. package/dist/src/patch/merge.spec.js.map +1 -0
  253. package/dist/src/patch/patch.spec.d.ts +2 -0
  254. package/dist/src/patch/patch.spec.d.ts.map +1 -0
  255. package/dist/src/patch/patch.spec.js +452 -0
  256. package/dist/src/patch/patch.spec.js.map +1 -0
  257. package/dist/src/patch/path.d.ts +115 -0
  258. package/dist/src/patch/path.d.ts.map +1 -0
  259. package/dist/src/patch/path.js +192 -0
  260. package/dist/src/patch/path.js.map +1 -0
  261. package/dist/src/patch/path.spec.d.ts +6 -0
  262. package/dist/src/patch/path.spec.d.ts.map +1 -0
  263. package/dist/src/patch/path.spec.js +322 -0
  264. package/dist/src/patch/path.spec.js.map +1 -0
  265. package/dist/src/patch/prune.d.ts +77 -0
  266. package/dist/src/patch/prune.d.ts.map +1 -0
  267. package/dist/src/patch/prune.js +115 -0
  268. package/dist/src/patch/prune.js.map +1 -0
  269. package/dist/src/patch/prune.spec.d.ts +6 -0
  270. package/dist/src/patch/prune.spec.d.ts.map +1 -0
  271. package/dist/src/patch/prune.spec.js +473 -0
  272. package/dist/src/patch/prune.spec.js.map +1 -0
  273. package/dist/src/patch/type_of_patch.d.ts +25 -0
  274. package/dist/src/patch/type_of_patch.d.ts.map +1 -0
  275. package/dist/src/patch/type_of_patch.js +144 -0
  276. package/dist/src/patch/type_of_patch.js.map +1 -0
  277. package/dist/src/patch/types.d.ts +220 -0
  278. package/dist/src/patch/types.d.ts.map +1 -0
  279. package/dist/src/patch/types.js +62 -0
  280. package/dist/src/patch/types.js.map +1 -0
  281. package/dist/src/patch/validate.d.ts +44 -0
  282. package/dist/src/patch/validate.d.ts.map +1 -0
  283. package/dist/src/patch/validate.js +190 -0
  284. package/dist/src/patch/validate.js.map +1 -0
  285. package/dist/src/patch/validate.spec.d.ts +6 -0
  286. package/dist/src/patch/validate.spec.d.ts.map +1 -0
  287. package/dist/src/patch/validate.spec.js +225 -0
  288. package/dist/src/patch/validate.spec.js.map +1 -0
  289. package/dist/src/patch/walk.d.ts +121 -0
  290. package/dist/src/patch/walk.d.ts.map +1 -0
  291. package/dist/src/patch/walk.js +385 -0
  292. package/dist/src/patch/walk.js.map +1 -0
  293. package/dist/src/patch/walk.spec.d.ts +6 -0
  294. package/dist/src/patch/walk.spec.d.ts.map +1 -0
  295. package/dist/src/patch/walk.spec.js +621 -0
  296. package/dist/src/patch/walk.spec.js.map +1 -0
  297. package/dist/src/platform.d.ts +6 -0
  298. package/dist/src/platform.d.ts.map +1 -1
  299. package/dist/src/platform.spec.d.ts +2 -0
  300. package/dist/src/platform.spec.d.ts.map +1 -0
  301. package/dist/src/platform.spec.js +330 -0
  302. package/dist/src/platform.spec.js.map +1 -0
  303. package/dist/src/serialization/beast.d.ts.map +1 -1
  304. package/dist/src/serialization/beast.js +12 -0
  305. package/dist/src/serialization/beast.js.map +1 -1
  306. package/dist/src/serialization/beast.spec.d.ts +6 -0
  307. package/dist/src/serialization/beast.spec.d.ts.map +1 -0
  308. package/dist/src/serialization/beast.spec.js +406 -0
  309. package/dist/src/serialization/beast.spec.js.map +1 -0
  310. package/dist/src/serialization/beast2/index.d.ts +50 -0
  311. package/dist/src/serialization/beast2/index.d.ts.map +1 -0
  312. package/dist/src/serialization/beast2/index.js +756 -0
  313. package/dist/src/serialization/beast2/index.js.map +1 -0
  314. package/dist/src/serialization/beast2/index.spec.d.ts +6 -0
  315. package/dist/src/serialization/beast2/index.spec.d.ts.map +1 -0
  316. package/dist/src/serialization/beast2/index.spec.js +528 -0
  317. package/dist/src/serialization/beast2/index.spec.js.map +1 -0
  318. package/dist/src/serialization/beast2/sourcemap-table.d.ts +29 -0
  319. package/dist/src/serialization/beast2/sourcemap-table.d.ts.map +1 -0
  320. package/dist/src/serialization/beast2/sourcemap-table.js +82 -0
  321. package/dist/src/serialization/beast2/sourcemap-table.js.map +1 -0
  322. package/dist/src/serialization/beast2/string-table.d.ts +16 -0
  323. package/dist/src/serialization/beast2/string-table.d.ts.map +1 -0
  324. package/dist/src/serialization/beast2/string-table.js +38 -0
  325. package/dist/src/serialization/beast2/string-table.js.map +1 -0
  326. package/dist/src/serialization/beast2/type-table.d.ts +86 -0
  327. package/dist/src/serialization/beast2/type-table.d.ts.map +1 -0
  328. package/dist/src/serialization/beast2/type-table.js +618 -0
  329. package/dist/src/serialization/beast2/type-table.js.map +1 -0
  330. package/dist/src/serialization/beast2/value-table.d.ts +40 -0
  331. package/dist/src/serialization/beast2/value-table.d.ts.map +1 -0
  332. package/dist/src/serialization/beast2/value-table.js +157 -0
  333. package/dist/src/serialization/beast2/value-table.js.map +1 -0
  334. package/dist/src/serialization/binary-utils.d.ts +33 -0
  335. package/dist/src/serialization/binary-utils.d.ts.map +1 -1
  336. package/dist/src/serialization/binary-utils.js +157 -0
  337. package/dist/src/serialization/binary-utils.js.map +1 -1
  338. package/dist/src/serialization/csv.d.ts +17 -17
  339. package/dist/src/serialization/csv.d.ts.map +1 -1
  340. package/dist/src/serialization/csv.js +10 -8
  341. package/dist/src/serialization/csv.js.map +1 -1
  342. package/dist/src/serialization/csv.spec.d.ts +2 -0
  343. package/dist/src/serialization/csv.spec.d.ts.map +1 -0
  344. package/dist/src/serialization/csv.spec.js +556 -0
  345. package/dist/src/serialization/csv.spec.js.map +1 -0
  346. package/dist/src/serialization/east-inferred.spec.d.ts +2 -0
  347. package/dist/src/serialization/east-inferred.spec.d.ts.map +1 -0
  348. package/dist/src/serialization/east-inferred.spec.js +322 -0
  349. package/dist/src/serialization/east-inferred.spec.js.map +1 -0
  350. package/dist/src/serialization/east.d.ts +1 -1
  351. package/dist/src/serialization/east.d.ts.map +1 -1
  352. package/dist/src/serialization/east.js +178 -26
  353. package/dist/src/serialization/east.js.map +1 -1
  354. package/dist/src/serialization/east.spec.d.ts +2 -0
  355. package/dist/src/serialization/east.spec.d.ts.map +1 -0
  356. package/dist/src/serialization/east.spec.js +1548 -0
  357. package/dist/src/serialization/east.spec.js.map +1 -0
  358. package/dist/src/serialization/index.d.ts +1 -2
  359. package/dist/src/serialization/index.d.ts.map +1 -1
  360. package/dist/src/serialization/index.js +1 -2
  361. package/dist/src/serialization/index.js.map +1 -1
  362. package/dist/src/serialization/json.d.ts +1 -1
  363. package/dist/src/serialization/json.d.ts.map +1 -1
  364. package/dist/src/serialization/json.js +123 -24
  365. package/dist/src/serialization/json.js.map +1 -1
  366. package/dist/src/serialization/json.spec.d.ts +2 -0
  367. package/dist/src/serialization/json.spec.d.ts.map +1 -0
  368. package/dist/src/serialization/json.spec.js +1297 -0
  369. package/dist/src/serialization/json.spec.js.map +1 -0
  370. package/dist/src/type_of_type.d.ts +72 -35
  371. package/dist/src/type_of_type.d.ts.map +1 -1
  372. package/dist/src/type_of_type.is_data.spec.d.ts +6 -0
  373. package/dist/src/type_of_type.is_data.spec.d.ts.map +1 -0
  374. package/dist/src/type_of_type.is_data.spec.js +221 -0
  375. package/dist/src/type_of_type.is_data.spec.js.map +1 -0
  376. package/dist/src/type_of_type.js +355 -80
  377. package/dist/src/type_of_type.js.map +1 -1
  378. package/dist/src/type_of_type.to_etv.spec.d.ts +6 -0
  379. package/dist/src/type_of_type.to_etv.spec.d.ts.map +1 -0
  380. package/dist/src/type_of_type.to_etv.spec.js +263 -0
  381. package/dist/src/type_of_type.to_etv.spec.js.map +1 -0
  382. package/dist/src/types.d.ts +82 -12
  383. package/dist/src/types.d.ts.map +1 -1
  384. package/dist/src/types.error.spec.d.ts +2 -0
  385. package/dist/src/types.error.spec.d.ts.map +1 -0
  386. package/dist/src/types.error.spec.js +665 -0
  387. package/dist/src/types.error.spec.js.map +1 -0
  388. package/dist/src/types.js +663 -156
  389. package/dist/src/types.js.map +1 -1
  390. package/dist/src/types.spec.d.ts +2 -0
  391. package/dist/src/types.spec.d.ts.map +1 -0
  392. package/dist/src/types.spec.js +946 -0
  393. package/dist/src/types.spec.js.map +1 -0
  394. package/dist/src/walker.d.ts +65 -0
  395. package/dist/src/walker.d.ts.map +1 -0
  396. package/dist/src/walker.js +165 -0
  397. package/dist/src/walker.js.map +1 -0
  398. package/dist/src/walker.spec.d.ts +6 -0
  399. package/dist/src/walker.spec.d.ts.map +1 -0
  400. package/dist/src/walker.spec.js +109 -0
  401. package/dist/src/walker.spec.js.map +1 -0
  402. package/package.json +16 -38
  403. package/dist/src/serialization/beast2-stream.d.ts +0 -38
  404. package/dist/src/serialization/beast2-stream.d.ts.map +0 -1
  405. package/dist/src/serialization/beast2-stream.js +0 -670
  406. package/dist/src/serialization/beast2-stream.js.map +0 -1
  407. package/dist/src/serialization/beast2.d.ts +0 -41
  408. package/dist/src/serialization/beast2.d.ts.map +0 -1
  409. package/dist/src/serialization/beast2.js +0 -495
  410. package/dist/src/serialization/beast2.js.map +0 -1
@@ -0,0 +1,347 @@
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
+ * diffFor - Compute difference between two East values.
7
+ *
8
+ * @module
9
+ */
10
+ import { toEastTypeValue } from "../type_of_type.js";
11
+ import { isVariant, variant } from "../containers/variant.js";
12
+ import { equalFor, isFor, compareFor } from "../comparison.js";
13
+ import { SortedMap } from "../containers/sortedmap.js";
14
+ import { SortedSet } from "../containers/sortedset.js";
15
+ import { computeLCS } from "./types.js";
16
+ export function diffFor(type, ctx = { diff: [], types: [], equal: new Map() }) {
17
+ // Convert to EastTypeValue and use a properly typed variable
18
+ const t = isVariant(type) ? type : toEastTypeValue(type);
19
+ if (t.type === "Never") {
20
+ return (_before, _after) => {
21
+ throw new Error("Cannot diff values of type Never");
22
+ };
23
+ }
24
+ else if (t.type === "Null" ||
25
+ t.type === "Boolean" ||
26
+ t.type === "Integer" ||
27
+ t.type === "Float" ||
28
+ t.type === "String" ||
29
+ t.type === "DateTime" ||
30
+ t.type === "Blob" ||
31
+ t.type === "Vector" ||
32
+ t.type === "Matrix") {
33
+ const equal = equalFor(t);
34
+ return (before, after) => {
35
+ if (equal(before, after)) {
36
+ return variant("unchanged", null);
37
+ }
38
+ return variant("replace", { before, after });
39
+ };
40
+ }
41
+ else if (t.type === "Array") {
42
+ let elementEqual;
43
+ let elementDiff;
44
+ let is;
45
+ const ret = (before, after) => {
46
+ if (is(before, after)) {
47
+ return variant("unchanged", null);
48
+ }
49
+ const { beforeIndices, afterIndices } = computeLCS(before, after, elementEqual);
50
+ const operations = [];
51
+ let beforePtr = 0;
52
+ let afterPtr = 0;
53
+ let lcsPtr = 0;
54
+ let deleteCount = 0; // emitted (unpaired) deletes only
55
+ let insertCount = 0; // emitted (unpaired) inserts only — pairs preserve length
56
+ while (beforePtr < before.length || afterPtr < after.length) {
57
+ const nextBeforeLCS = lcsPtr < beforeIndices.length ? beforeIndices[lcsPtr] : before.length;
58
+ const nextAfterLCS = lcsPtr < afterIndices.length ? afterIndices[lcsPtr] : after.length;
59
+ // Collect this chunk's would-be deletes and inserts. We don't decide
60
+ // until both lists are gathered whether each is part of a pair (→
61
+ // emitted as a single `update`) or stands alone.
62
+ const chunkDeletes = [];
63
+ while (beforePtr < nextBeforeLCS) {
64
+ chunkDeletes.push({ beforePtr, value: before[beforePtr] });
65
+ beforePtr++;
66
+ }
67
+ const chunkInserts = [];
68
+ while (afterPtr < nextAfterLCS) {
69
+ chunkInserts.push({ afterPtr, value: after[afterPtr] });
70
+ afterPtr++;
71
+ }
72
+ // Pair the i-th chunk-local delete with the i-th chunk-local insert
73
+ // and emit a single `update` op carrying the inner diff. Length of
74
+ // the running array is unchanged for each paired position, so
75
+ // `deleteCount` / `insertCount` stay frozen across the pair span.
76
+ const pairCount = Math.min(chunkDeletes.length, chunkInserts.length);
77
+ for (let i = 0; i < pairCount; i++) {
78
+ const del = chunkDeletes[i];
79
+ const ins = chunkInserts[i];
80
+ // `del.beforePtr - deleteCount + insertCount` is the position the
81
+ // old element currently sits at in the running array; the inner
82
+ // patch transforms it in place.
83
+ const actualPosition = del.beforePtr - deleteCount + insertCount;
84
+ operations.push({
85
+ key: BigInt(actualPosition),
86
+ offset: 0n,
87
+ operation: variant("update", elementDiff(del.value, ins.value)),
88
+ });
89
+ }
90
+ // Excess deletes — the chunk had more elements removed than added.
91
+ for (let i = pairCount; i < chunkDeletes.length; i++) {
92
+ const del = chunkDeletes[i];
93
+ const actualPosition = del.beforePtr - deleteCount + insertCount;
94
+ operations.push({
95
+ key: BigInt(actualPosition),
96
+ offset: 0n,
97
+ operation: variant("delete", del.value),
98
+ });
99
+ deleteCount++;
100
+ }
101
+ // Excess inserts — the chunk had more elements added than removed.
102
+ for (let i = pairCount; i < chunkInserts.length; i++) {
103
+ const ins = chunkInserts[i];
104
+ operations.push({
105
+ key: BigInt(ins.afterPtr),
106
+ offset: 0n,
107
+ operation: variant("insert", ins.value),
108
+ });
109
+ insertCount++;
110
+ }
111
+ if (lcsPtr < beforeIndices.length) {
112
+ beforePtr++;
113
+ afterPtr++;
114
+ lcsPtr++;
115
+ }
116
+ }
117
+ if (operations.length === 0) {
118
+ return variant("unchanged", null);
119
+ }
120
+ return variant("patch", operations);
121
+ };
122
+ ctx.diff.push(ret);
123
+ ctx.types.push(t);
124
+ is = isFor(t, ctx.equal);
125
+ elementEqual = equalFor(t.value, ctx.equal);
126
+ elementDiff = diffFor(t.value, ctx);
127
+ ctx.diff.pop();
128
+ ctx.types.pop();
129
+ return ret;
130
+ }
131
+ else if (t.type === "Set") {
132
+ // Set keys cannot contain recursive types, so no context needed
133
+ const is = isFor(t);
134
+ const keyCompare = compareFor(t.value);
135
+ return (before, after) => {
136
+ if (is(before, after)) {
137
+ return variant("unchanged", null);
138
+ }
139
+ const operations = new SortedMap(undefined, keyCompare);
140
+ for (const key of before) {
141
+ if (!after.has(key)) {
142
+ operations.set(key, variant("delete", null));
143
+ }
144
+ }
145
+ for (const key of after) {
146
+ if (!before.has(key)) {
147
+ operations.set(key, variant("insert", null));
148
+ }
149
+ }
150
+ if (operations.size === 0) {
151
+ return variant("unchanged", null);
152
+ }
153
+ let deleteCount = 0;
154
+ let insertCount = 0;
155
+ for (const op of operations.values()) {
156
+ if (op.type === "delete")
157
+ deleteCount++;
158
+ if (op.type === "insert")
159
+ insertCount++;
160
+ }
161
+ if (deleteCount === before.size && insertCount === after.size && before.size > 0) {
162
+ return variant("replace", { before, after });
163
+ }
164
+ return variant("patch", operations);
165
+ };
166
+ }
167
+ else if (t.type === "Dict") {
168
+ let valueDiff;
169
+ let valueEqual;
170
+ let is;
171
+ // Dict keys cannot contain recursive types, so no context needed for keyCompare
172
+ const keyCompare = compareFor(t.value.key);
173
+ const ret = (before, after) => {
174
+ if (is(before, after)) {
175
+ return variant("unchanged", null);
176
+ }
177
+ const operations = new SortedMap(undefined, keyCompare);
178
+ for (const [key, beforeValue] of before) {
179
+ if (!after.has(key)) {
180
+ operations.set(key, variant("delete", beforeValue));
181
+ }
182
+ else {
183
+ const afterValue = after.get(key);
184
+ if (!valueEqual(beforeValue, afterValue)) {
185
+ const patch = valueDiff(beforeValue, afterValue);
186
+ operations.set(key, variant("update", patch));
187
+ }
188
+ }
189
+ }
190
+ for (const [key, afterValue] of after) {
191
+ if (!before.has(key)) {
192
+ operations.set(key, variant("insert", afterValue));
193
+ }
194
+ }
195
+ if (operations.size === 0) {
196
+ return variant("unchanged", null);
197
+ }
198
+ let insertCount = 0;
199
+ let deleteCount = 0;
200
+ for (const op of operations.values()) {
201
+ if (op.type === "insert")
202
+ insertCount++;
203
+ if (op.type === "delete")
204
+ deleteCount++;
205
+ }
206
+ if (insertCount === after.size && deleteCount === before.size && before.size > 0) {
207
+ return variant("replace", { before, after });
208
+ }
209
+ return variant("patch", operations);
210
+ };
211
+ ctx.diff.push(ret);
212
+ ctx.types.push(t);
213
+ is = isFor(t, ctx.equal);
214
+ valueDiff = diffFor(t.value.value, ctx);
215
+ valueEqual = equalFor(t.value.value, ctx.equal);
216
+ ctx.diff.pop();
217
+ ctx.types.pop();
218
+ return ret;
219
+ }
220
+ else if (t.type === "Struct") {
221
+ const fieldDiffs = {};
222
+ const fieldEquals = {};
223
+ const ret = (before, after) => {
224
+ if (before === after) {
225
+ return variant("unchanged", null);
226
+ }
227
+ const patchFields = {};
228
+ let allUnchanged = true;
229
+ for (const { name } of t.value) {
230
+ const beforeValue = before[name];
231
+ const afterValue = after[name];
232
+ if (fieldEquals[name](beforeValue, afterValue)) {
233
+ patchFields[name] = variant("unchanged", null);
234
+ }
235
+ else {
236
+ patchFields[name] = fieldDiffs[name](beforeValue, afterValue);
237
+ allUnchanged = false;
238
+ }
239
+ }
240
+ if (allUnchanged) {
241
+ return variant("unchanged", null);
242
+ }
243
+ return variant("patch", patchFields);
244
+ };
245
+ ctx.diff.push(ret);
246
+ ctx.types.push(t);
247
+ for (const { name, type: fieldType } of t.value) {
248
+ fieldDiffs[name] = diffFor(fieldType, ctx);
249
+ fieldEquals[name] = equalFor(fieldType, ctx.equal);
250
+ }
251
+ ctx.diff.pop();
252
+ ctx.types.pop();
253
+ return ret;
254
+ }
255
+ else if (t.type === "Variant") {
256
+ const caseDiffs = {};
257
+ const caseEquals = {};
258
+ const ret = (before, after) => {
259
+ if (before === after) {
260
+ return variant("unchanged", null);
261
+ }
262
+ if (before.type !== after.type) {
263
+ return variant("replace", { before, after });
264
+ }
265
+ const caseName = before.type;
266
+ if (caseEquals[caseName](before.value, after.value)) {
267
+ return variant("unchanged", null);
268
+ }
269
+ const casePatch = caseDiffs[caseName](before.value, after.value);
270
+ if (casePatch.type === "unchanged") {
271
+ return variant("unchanged", null);
272
+ }
273
+ return variant("patch", variant(caseName, casePatch));
274
+ };
275
+ ctx.diff.push(ret);
276
+ ctx.types.push(t);
277
+ for (const { name, type: caseType } of t.value) {
278
+ caseDiffs[name] = diffFor(caseType, ctx);
279
+ caseEquals[name] = equalFor(caseType, ctx.equal);
280
+ }
281
+ ctx.diff.pop();
282
+ ctx.types.pop();
283
+ return ret;
284
+ }
285
+ else if (t.type === "Ref") {
286
+ let innerDiff;
287
+ let innerEqual;
288
+ let is;
289
+ const ret = (before, after) => {
290
+ if (is(before, after)) {
291
+ return variant("unchanged", null);
292
+ }
293
+ if (innerEqual(before.value, after.value)) {
294
+ return variant("unchanged", null);
295
+ }
296
+ const innerPatch = innerDiff(before.value, after.value);
297
+ if (innerPatch.type === "unchanged") {
298
+ return variant("unchanged", null);
299
+ }
300
+ return variant("patch", innerPatch);
301
+ };
302
+ ctx.diff.push(ret);
303
+ ctx.types.push(t);
304
+ is = isFor(t, ctx.equal);
305
+ innerDiff = diffFor(t.value, ctx);
306
+ innerEqual = equalFor(t.value, ctx.equal);
307
+ ctx.diff.pop();
308
+ ctx.types.pop();
309
+ return ret;
310
+ }
311
+ else if (t.type === "Recursive" && t.value.type === "wrapper") {
312
+ // Recursive wrapper: set up context stacks and recurse into inner type.
313
+ // Uses replace-only semantics - no structural patching.
314
+ let innerEqual;
315
+ const ret = (before, after) => {
316
+ if (innerEqual(before, after)) {
317
+ return variant("unchanged", null);
318
+ }
319
+ return variant("replace", { before, after });
320
+ };
321
+ const selfEqual = equalFor(t, ctx.equal);
322
+ ctx.equal.set(t.value.value.id, selfEqual);
323
+ innerEqual = equalFor(t.value.value.inner, ctx.equal);
324
+ return ret;
325
+ }
326
+ else if (t.type === "Recursive" && t.value.type === "ref") {
327
+ // Self-reference: look up by id
328
+ const id = t.value.value;
329
+ const equal = ctx.equal.get(id);
330
+ if (equal === undefined) {
331
+ throw new Error(`Internal error: Recursive equal context not found in diffFor`);
332
+ }
333
+ return (before, after) => {
334
+ if (equal(before, after)) {
335
+ return variant("unchanged", null);
336
+ }
337
+ return variant("replace", { before, after });
338
+ };
339
+ }
340
+ else if (t.type === "Function" || t.type === "AsyncFunction") {
341
+ return (_before, _after) => variant("unchanged", null);
342
+ }
343
+ else {
344
+ throw new Error(`Unhandled type in diffFor: ${t.type}`);
345
+ }
346
+ }
347
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/patch/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
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
+ * Fuzz testing configuration for patch operations.
7
+ * Shared between unit tests (src/patch/patch.spec.ts) and compliance tests (test/patch.spec.ts).
8
+ *
9
+ * @module
10
+ */
11
+ import type { EastType, ValueTypeOf, ArrayType as ArrayTypeT, StructType as StructTypeT } from "../types.js";
12
+ /**
13
+ * A generated test case containing a random type and sample values for testing.
14
+ */
15
+ export interface FuzzTestCase<T extends EastType = EastType> {
16
+ /** The randomly generated East type */
17
+ type: T;
18
+ /** String representation of the type for test naming */
19
+ typeName: string;
20
+ /** Array type for before/after pairs (used by compliance tests) */
21
+ pairsArrayType: ArrayTypeT<StructTypeT<{
22
+ before: T;
23
+ after: T;
24
+ }>>;
25
+ /** Array type for v1/v2/v3 triplets (used by compliance tests) */
26
+ tripletsArrayType: ArrayTypeT<StructTypeT<{
27
+ v1: T;
28
+ v2: T;
29
+ v3: T;
30
+ }>>;
31
+ /** Value pairs for diff/apply/invert tests */
32
+ pairs: Array<{
33
+ before: ValueTypeOf<T>;
34
+ after: ValueTypeOf<T>;
35
+ }>;
36
+ /** Value triplets for compose tests */
37
+ triplets: Array<{
38
+ v1: ValueTypeOf<T>;
39
+ v2: ValueTypeOf<T>;
40
+ v3: ValueTypeOf<T>;
41
+ }>;
42
+ }
43
+ /**
44
+ * Options for generating fuzz test cases.
45
+ */
46
+ export interface FuzzTestOptions {
47
+ /** Number of random types to generate */
48
+ numTypes?: number;
49
+ /** Number of sample values per type */
50
+ numSamples?: number;
51
+ /** Include recursive types in generation */
52
+ includeRecursive?: boolean;
53
+ /** Include function types in generation */
54
+ includeFunctions?: boolean;
55
+ /** Maximum retries when generating values for a single type */
56
+ maxValueRetries?: number;
57
+ /** Multiplier for max attempts (numTypes * multiplier) */
58
+ attemptsMultiplier?: number;
59
+ /** Ensure diverse type coverage (at least one of each kind) */
60
+ ensureDiversity?: boolean;
61
+ }
62
+ /**
63
+ * Generate fuzz test cases with random types and values.
64
+ *
65
+ * This function generates random East types and corresponding sample values
66
+ * for testing patch operations. It handles recursive types gracefully by
67
+ * retrying value generation when max recursion depth is exceeded.
68
+ *
69
+ * @param options Configuration options
70
+ * @returns Array of test cases
71
+ */
72
+ export declare function generateFuzzTestCases(options?: FuzzTestOptions): FuzzTestCase[];
73
+ //# sourceMappingURL=fuzz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzz.d.ts","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,IAAI,UAAU,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAkB7G;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACvD,uCAAuC;IACvC,IAAI,EAAE,CAAC,CAAC;IACR,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACjE,kEAAkE;IAClE,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpE,8CAA8C;IAC9C,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,uCAAuC;IACvC,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AA0ED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,YAAY,EAAE,CA6FnF"}
@@ -0,0 +1,159 @@
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
+ import { ArrayType, StructType, VariantType, DictType, SetType, RefType, FunctionType, IntegerType, StringType, FloatType, BooleanType, NullType, printType, } from "../types.js";
6
+ import { randomType, randomValueFor, randomRecursiveType, randomFunctionType } from "../fuzz.js";
7
+ const DEFAULT_OPTIONS = {
8
+ numTypes: 20,
9
+ numSamples: 5,
10
+ includeRecursive: true,
11
+ includeFunctions: true,
12
+ maxValueRetries: 20,
13
+ attemptsMultiplier: 3,
14
+ ensureDiversity: true,
15
+ };
16
+ /**
17
+ * Specific type generators to ensure diversity in test coverage.
18
+ * These guarantee we test important type patterns that random generation might miss.
19
+ */
20
+ function getDiverseTypes(includeRecursive, includeFunctions) {
21
+ const types = [
22
+ // Variants (often missed by random generation)
23
+ VariantType({ none: NullType, some: IntegerType }),
24
+ VariantType({ ok: StringType, err: StructType({ code: IntegerType, message: StringType }) }),
25
+ // Nested variants
26
+ VariantType({
27
+ leaf: FloatType,
28
+ branch: ArrayType(IntegerType),
29
+ }),
30
+ // Ref types
31
+ RefType(IntegerType),
32
+ RefType(StructType({ x: FloatType, y: FloatType })),
33
+ // Nested collections
34
+ ArrayType(VariantType({ a: IntegerType, b: StringType })),
35
+ DictType(StringType, VariantType({ value: FloatType, missing: NullType })),
36
+ // Struct with variant field
37
+ StructType({
38
+ id: IntegerType,
39
+ status: VariantType({ active: NullType, inactive: StringType }),
40
+ }),
41
+ // Set with different key types
42
+ SetType(IntegerType),
43
+ // Deeply nested
44
+ ArrayType(ArrayType(IntegerType)),
45
+ DictType(StringType, DictType(StringType, IntegerType)),
46
+ ];
47
+ // Add recursive types if enabled
48
+ if (includeRecursive) {
49
+ // Add multiple recursive type patterns
50
+ for (let i = 0; i < 3; i++) {
51
+ types.push(randomRecursiveType());
52
+ }
53
+ }
54
+ // Add function types if enabled
55
+ if (includeFunctions) {
56
+ types.push(
57
+ // Simple function
58
+ FunctionType([IntegerType], StringType),
59
+ // Function with multiple args
60
+ FunctionType([IntegerType, StringType], BooleanType),
61
+ // Random function types
62
+ randomFunctionType(), randomFunctionType());
63
+ }
64
+ return types;
65
+ }
66
+ /**
67
+ * Generate fuzz test cases with random types and values.
68
+ *
69
+ * This function generates random East types and corresponding sample values
70
+ * for testing patch operations. It handles recursive types gracefully by
71
+ * retrying value generation when max recursion depth is exceeded.
72
+ *
73
+ * @param options Configuration options
74
+ * @returns Array of test cases
75
+ */
76
+ export function generateFuzzTestCases(options = {}) {
77
+ const opts = { ...DEFAULT_OPTIONS, ...options };
78
+ const testCases = [];
79
+ const seenTypes = new Set();
80
+ // Helper to try adding a type to test cases
81
+ const tryAddType = (type) => {
82
+ const typeName = printType(type);
83
+ // Skip duplicates
84
+ if (seenTypes.has(typeName)) {
85
+ return false;
86
+ }
87
+ try {
88
+ const genValue = randomValueFor(type);
89
+ // Helper to safely generate a value (retry on depth exceeded)
90
+ const safeGenValue = () => {
91
+ for (let retry = 0; retry < opts.maxValueRetries; retry++) {
92
+ try {
93
+ return genValue();
94
+ }
95
+ catch (e) {
96
+ if (e.message?.includes("max recursion depth")) {
97
+ continue;
98
+ }
99
+ throw e;
100
+ }
101
+ }
102
+ throw new Error("max recursion depth");
103
+ };
104
+ // Generate value pairs
105
+ const pairs = [];
106
+ for (let j = 0; j < opts.numSamples; j++) {
107
+ pairs.push({ before: safeGenValue(), after: safeGenValue() });
108
+ }
109
+ // Generate triplets for compose tests
110
+ const triplets = [];
111
+ for (let j = 0; j < opts.numSamples; j++) {
112
+ triplets.push({ v1: safeGenValue(), v2: safeGenValue(), v3: safeGenValue() });
113
+ }
114
+ // Create array types for East runtime iteration
115
+ const pairsArrayType = ArrayType(StructType({ before: type, after: type }));
116
+ const tripletsArrayType = ArrayType(StructType({ v1: type, v2: type, v3: type }));
117
+ seenTypes.add(typeName);
118
+ testCases.push({
119
+ type,
120
+ typeName,
121
+ pairsArrayType,
122
+ tripletsArrayType,
123
+ pairs,
124
+ triplets,
125
+ });
126
+ return true;
127
+ }
128
+ catch (e) {
129
+ // Skip types that fail to generate values
130
+ if (e.message?.includes("max recursion depth")) {
131
+ return false;
132
+ }
133
+ throw e;
134
+ }
135
+ };
136
+ // First, add diverse types to ensure coverage
137
+ if (opts.ensureDiversity) {
138
+ const diverseTypes = getDiverseTypes(opts.includeRecursive, opts.includeFunctions);
139
+ for (const type of diverseTypes) {
140
+ if (testCases.length >= opts.numTypes)
141
+ break;
142
+ tryAddType(type);
143
+ }
144
+ }
145
+ // Fill remaining slots with random types
146
+ let attempts = 0;
147
+ const maxAttempts = opts.numTypes * opts.attemptsMultiplier;
148
+ while (testCases.length < opts.numTypes && attempts < maxAttempts) {
149
+ attempts++;
150
+ // Generate a random type
151
+ const type = randomType(0, {
152
+ includeRecursive: opts.includeRecursive,
153
+ includeFunctions: opts.includeFunctions,
154
+ });
155
+ tryAddType(type);
156
+ }
157
+ return testCases;
158
+ }
159
+ //# sourceMappingURL=fuzz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
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
+ * Patch system for computing and applying differences between East values.
7
+ *
8
+ * Provides core operations:
9
+ * - `diffFor(type)` — Compute the difference between two values
10
+ * - `applyFor(type)` — Apply a patch to a value
11
+ * - `composeFor(type)` — Combine two sequential patches
12
+ * - `invertFor(type)` — Invert a patch
13
+ *
14
+ * Plus 3-way merge primitives:
15
+ * - `detectConflictsFor(type)` — Identify overlapping leaves between two patches
16
+ * - `mergePatchFor(type)` — Merge two patches; throws on conflict
17
+ * - `mergeWithResolutionsFor(type)` — Merge with caller-supplied conflict resolutions
18
+ *
19
+ * @module
20
+ */
21
+ export { type PatchTypeOf, type Conflict, type Resolution, ConflictError, } from "./types.js";
22
+ export { PatchType } from "./type_of_patch.js";
23
+ export { mergeFor, detectConflictsFor, mergeWithResolutionsFor, } from "./merge.js";
24
+ export { type PatchPathSegment, type PatchPath, field, index, dictKey, variantTag, pathToString, pathFromString, pathDisplay, } from "./path.js";
25
+ export { type PatchVisitor, type PatchLeafOp, type PatchContainerKind, walkPatch, } from "./walk.js";
26
+ export { type PrunePredicate, prunePatchFor, } from "./prune.js";
27
+ export { diffFor } from "./diff.js";
28
+ export { applyFor } from "./apply.js";
29
+ export { composeFor } from "./compose.js";
30
+ export { invertFor } from "./invert.js";
31
+ export { validatePatchFor, type PatchConflict } from "./validate.js";
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patch/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AAKnB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,SAAS,GACV,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,KAAK,cAAc,EACnB,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,OAAO,EAAE,MAAS,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAQ,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAO,aAAa,CAAC;AAKzC,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}