@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,144 @@
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
+ * PatchType constructor for computing patch types from East types.
7
+ *
8
+ * @module
9
+ */
10
+ import { NullType, StructType, VariantType, ArrayType, DictType, IntegerType, } from "../types.js";
11
+ import { fromEastTypeValue } from "../type_of_type.js";
12
+ import { isVariant } from "../containers/variant.js";
13
+ export function PatchType(type, ctx) {
14
+ if (isVariant(type))
15
+ type = fromEastTypeValue(type);
16
+ // Initialize context for tracking recursive types
17
+ const context = ctx ?? new Map();
18
+ // Check if we've already computed the patch type for this type (handles recursion)
19
+ const cached = context.get(type);
20
+ if (cached !== undefined) {
21
+ return cached;
22
+ }
23
+ const t = type;
24
+ if (t.type === "Never" ||
25
+ t.type === "Null" ||
26
+ t.type === "Boolean" ||
27
+ t.type === "Integer" ||
28
+ t.type === "Float" ||
29
+ t.type === "String" ||
30
+ t.type === "DateTime" ||
31
+ t.type === "Blob" ||
32
+ t.type === "Vector" ||
33
+ t.type === "Matrix") {
34
+ return VariantType({
35
+ unchanged: NullType,
36
+ replace: StructType({ before: type, after: type }),
37
+ });
38
+ }
39
+ else if (t.type === "Array") {
40
+ const elementType = t.value;
41
+ const elementPatchType = PatchType(elementType, context);
42
+ const operationType = VariantType({
43
+ delete: elementType,
44
+ insert: elementType,
45
+ update: elementPatchType,
46
+ });
47
+ const entryType = StructType({
48
+ key: IntegerType,
49
+ offset: IntegerType,
50
+ operation: operationType,
51
+ });
52
+ return VariantType({
53
+ unchanged: NullType,
54
+ replace: StructType({ before: type, after: type }),
55
+ patch: ArrayType(entryType),
56
+ });
57
+ }
58
+ else if (t.type === "Set") {
59
+ const keyType = t.key;
60
+ const operationType = VariantType({
61
+ delete: NullType,
62
+ insert: NullType,
63
+ });
64
+ return VariantType({
65
+ unchanged: NullType,
66
+ replace: StructType({ before: type, after: type }),
67
+ patch: DictType(keyType, operationType),
68
+ });
69
+ }
70
+ else if (t.type === "Dict") {
71
+ const keyType = t.key;
72
+ const valueType = t.value;
73
+ const valuePatchType = PatchType(valueType, context);
74
+ const operationType = VariantType({
75
+ delete: valueType,
76
+ insert: valueType,
77
+ update: valuePatchType,
78
+ });
79
+ return VariantType({
80
+ unchanged: NullType,
81
+ replace: StructType({ before: type, after: type }),
82
+ patch: DictType(keyType, operationType),
83
+ });
84
+ }
85
+ else if (t.type === "Struct") {
86
+ const fieldTypes = t.fields;
87
+ const patchFields = {};
88
+ for (const [name, fieldType] of Object.entries(fieldTypes)) {
89
+ patchFields[name] = PatchType(fieldType, context);
90
+ }
91
+ return VariantType({
92
+ unchanged: NullType,
93
+ replace: StructType({ before: type, after: type }),
94
+ patch: StructType(patchFields),
95
+ });
96
+ }
97
+ else if (t.type === "Variant") {
98
+ const caseTypes = t.cases;
99
+ const patchCases = {};
100
+ for (const [name, caseType] of Object.entries(caseTypes)) {
101
+ patchCases[name] = PatchType(caseType, context);
102
+ }
103
+ return VariantType({
104
+ unchanged: NullType,
105
+ replace: StructType({ before: type, after: type }),
106
+ patch: VariantType(patchCases),
107
+ });
108
+ }
109
+ else if (t.type === "Ref") {
110
+ const innerType = t.value;
111
+ const innerPatchType = PatchType(innerType, context);
112
+ return VariantType({
113
+ unchanged: NullType,
114
+ replace: StructType({ before: type, after: type }),
115
+ patch: innerPatchType,
116
+ });
117
+ }
118
+ else if (t.type === "Recursive") {
119
+ // Check if we've already seen this type (handles circular back-references)
120
+ const cached = context.get(type);
121
+ if (cached !== undefined) {
122
+ return cached;
123
+ }
124
+ // For back-references within the recursive structure, use replace-only semantics
125
+ // Register this BEFORE recursing so circular refs are caught
126
+ const replaceOnlyType = VariantType({
127
+ unchanged: NullType,
128
+ replace: StructType({ before: type, after: type }),
129
+ });
130
+ context.set(type, replaceOnlyType);
131
+ // Recurse into the node - the outer structure gets structural patching
132
+ return PatchType(t.node, context);
133
+ }
134
+ else if (t.type === "Function" || t.type === "AsyncFunction") {
135
+ return VariantType({
136
+ unchanged: NullType,
137
+ replace: StructType({ before: type, after: type }),
138
+ });
139
+ }
140
+ else {
141
+ throw new Error(`Unhandled type in PatchType: ${t.type}`);
142
+ }
143
+ }
144
+ //# sourceMappingURL=type_of_patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_of_patch.js","sourceRoot":"","sources":["../../../src/patch/type_of_patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
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
+ * Shared types and context interfaces for the patch system.
7
+ *
8
+ * @module
9
+ */
10
+ import type { EastTypeValue } from "../type_of_type.js";
11
+ import type { EastType, NullType, NeverType, BooleanType, IntegerType, FloatType, StringType, DateTimeType, BlobType, RefType, ArrayType, SetType, DictType, StructType, VariantType, RecursiveType } from "../types.js";
12
+ import type { variant as VariantValue } from "../containers/variant.js";
13
+ /**
14
+ * Context for building diff handlers with proper recursive type support.
15
+ * Handlers are built in parallel so that when we encounter a `.Recursive n`
16
+ * back-reference, we can look up the appropriate handler from any array.
17
+ */
18
+ export interface DiffContext {
19
+ /** Diff handlers: (before, after) => Patch */
20
+ diff: Array<(before: any, after: any) => any>;
21
+ /** Types at each level - used to call equalFor/compareFor on Recursive back-references */
22
+ types: Array<EastTypeValue>;
23
+ /** Equality handlers for recursive types, keyed by type id */
24
+ equal: Map<bigint, (a: any, b: any) => boolean>;
25
+ }
26
+ /**
27
+ * Context for building apply handlers with proper recursive type support.
28
+ */
29
+ export interface ApplyContext {
30
+ /** Apply handlers: (base, patch) => value */
31
+ apply: Array<(base: any, patch: any) => any>;
32
+ /** Types at each level */
33
+ types: Array<EastTypeValue>;
34
+ /** Equality handlers for recursive types, keyed by type id */
35
+ equal: Map<bigint, (a: any, b: any) => boolean>;
36
+ /** Print handlers built in parallel - used for error messages */
37
+ print: Map<bigint, (value: any) => string>;
38
+ }
39
+ /**
40
+ * Context for building compose handlers with proper recursive type support.
41
+ */
42
+ export interface ComposeContext {
43
+ /** Compose handlers: (first, second) => combined patch */
44
+ compose: Array<(first: any, second: any) => any>;
45
+ /** Apply handlers built in parallel - used instead of calling applyFor with fresh context */
46
+ apply: Array<(base: any, patch: any) => any>;
47
+ /** Invert handlers built in parallel - used instead of calling invertFor with fresh context */
48
+ invert: Array<(patch: any) => any>;
49
+ /** Types at each level */
50
+ types: Array<EastTypeValue>;
51
+ /** Equality handlers for recursive types, keyed by type id */
52
+ equal: Map<bigint, (a: any, b: any) => boolean>;
53
+ /** Print handlers built in parallel - used for error messages */
54
+ print: Map<bigint, (value: any) => string>;
55
+ }
56
+ /**
57
+ * Context for building invert handlers with proper recursive type support.
58
+ */
59
+ export interface InvertContext {
60
+ /** Invert handlers: (patch) => inverted patch */
61
+ invert: Array<(patch: any) => any>;
62
+ /** Types at each level */
63
+ types: Array<EastTypeValue>;
64
+ /** Equality handlers for recursive types, keyed by type id */
65
+ equal: Map<bigint, (a: any, b: any) => boolean>;
66
+ }
67
+ /**
68
+ * A single conflict — two patches against the same base touch the same
69
+ * leaf with different intentions.
70
+ */
71
+ export interface Conflict {
72
+ /**
73
+ * Dot/bracket-encoded path from the root of T down to the conflicting
74
+ * leaf. Format:
75
+ * - struct field: dot-joined name (e.g. `policy.maxWeeklyHours`)
76
+ * - array element: bracket-suffixed (e.g. `roster[2]`)
77
+ * - dict entry: brace-suffixed (e.g. `prices{Cabernet}`)
78
+ * - variant case: at-prefixed (e.g. `status@active`)
79
+ * - root: empty string
80
+ */
81
+ path: string;
82
+ /** patchA's intended value at this path (whole patch operation, e.g. `{type:"replace",value:{before,after}}`). */
83
+ valueA: any;
84
+ /** patchB's intended value at this path. */
85
+ valueB: any;
86
+ }
87
+ /**
88
+ * Per-conflict resolution that the caller supplies to
89
+ * `mergeWithResolutionsFor`. Keys are paths (matching `Conflict.path`).
90
+ */
91
+ export type Resolution = {
92
+ type: "keepA";
93
+ } | {
94
+ type: "keepB";
95
+ } | {
96
+ type: "manual";
97
+ value: any;
98
+ };
99
+ /**
100
+ * Context for building merge handlers with proper recursive type support.
101
+ *
102
+ * Carries only the merge-handler stack + types + equality cache. Unlike
103
+ * `ComposeContext`, merge does NOT need apply/invert handlers — every merge
104
+ * case is either a clean recursive walk over patch shapes, or a conflict that
105
+ * the caller resolves; we never need to apply or invert a sub-patch as part of
106
+ * merging.
107
+ */
108
+ export interface MergeContext {
109
+ /** Merge handlers, indexed by type-stack depth. Used for recursive-type
110
+ * back-references. The signature is the internal walker's; not exposed in
111
+ * the public API. */
112
+ merge: Array<(a: VariantValue<string, any>, b: VariantValue<string, any>, path: string, accConflict: (path: string, vA: any, vB: any) => void, lookup: ((path: string) => Resolution | undefined) | null) => VariantValue<string, any>>;
113
+ /** Types at each level — used to resolve `Recursive n` back-references. */
114
+ types: Array<EastTypeValue>;
115
+ /** Equality handlers for recursive types, keyed by type id. Threaded
116
+ * into every nested `equalFor(...)` call. */
117
+ equal: Map<bigint, (a: any, b: any) => boolean>;
118
+ }
119
+ /** Type-level computation of the patch type for a given East type. */
120
+ export type PatchTypeOf<T extends EastType> = T extends NeverType | NullType | BooleanType | IntegerType | FloatType | StringType | DateTimeType | BlobType | import("../types.js").VectorType<any> | import("../types.js").MatrixType<any> ? VariantType<{
121
+ unchanged: NullType;
122
+ replace: StructType<{
123
+ before: T;
124
+ after: T;
125
+ }>;
126
+ }> : T extends RefType<infer V extends EastType> ? VariantType<{
127
+ unchanged: NullType;
128
+ replace: StructType<{
129
+ before: T;
130
+ after: T;
131
+ }>;
132
+ patch: PatchTypeOf<V>;
133
+ }> : T extends ArrayType<infer E extends EastType> ? VariantType<{
134
+ unchanged: NullType;
135
+ replace: StructType<{
136
+ before: T;
137
+ after: T;
138
+ }>;
139
+ patch: ArrayType<StructType<{
140
+ key: IntegerType;
141
+ offset: IntegerType;
142
+ operation: VariantType<{
143
+ delete: E;
144
+ insert: E;
145
+ update: PatchTypeOf<E>;
146
+ }>;
147
+ }>>;
148
+ }> : T extends SetType<infer K> ? VariantType<{
149
+ unchanged: NullType;
150
+ replace: StructType<{
151
+ before: T;
152
+ after: T;
153
+ }>;
154
+ patch: DictType<K, VariantType<{
155
+ delete: NullType;
156
+ insert: NullType;
157
+ }>>;
158
+ }> : T extends DictType<infer K, infer V extends EastType> ? VariantType<{
159
+ unchanged: NullType;
160
+ replace: StructType<{
161
+ before: T;
162
+ after: T;
163
+ }>;
164
+ patch: DictType<K, VariantType<{
165
+ delete: V;
166
+ insert: V;
167
+ update: PatchTypeOf<V>;
168
+ }>>;
169
+ }> : T extends StructType<infer Fields> ? VariantType<{
170
+ unchanged: NullType;
171
+ replace: StructType<{
172
+ before: T;
173
+ after: T;
174
+ }>;
175
+ patch: StructType<{
176
+ [K in keyof Fields]: Fields[K] extends EastType ? PatchTypeOf<Fields[K]> : never;
177
+ }>;
178
+ }> : T extends VariantType<infer Cases> ? VariantType<{
179
+ unchanged: NullType;
180
+ replace: StructType<{
181
+ before: T;
182
+ after: T;
183
+ }>;
184
+ patch: VariantType<{
185
+ [K in keyof Cases]: Cases[K] extends EastType ? PatchTypeOf<Cases[K]> : never;
186
+ }>;
187
+ }> : T extends RecursiveType<infer _Node extends EastType> ? VariantType<{
188
+ unchanged: NullType;
189
+ replace: StructType<{
190
+ before: T;
191
+ after: T;
192
+ }>;
193
+ }> : VariantType<{
194
+ unchanged: NullType;
195
+ replace: StructType<{
196
+ before: T;
197
+ after: T;
198
+ }>;
199
+ }>;
200
+ /**
201
+ * Error thrown when patch operations encounter conflicts.
202
+ *
203
+ * For merge operations, the `conflicts` field lists every detected conflict
204
+ * with its path and the two divergent patch arms. The caller decides how to
205
+ * format / render this information.
206
+ */
207
+ export declare class ConflictError extends Error {
208
+ /** Detailed conflict list (only populated by merge / merge-with-resolutions). */
209
+ readonly conflicts: ReadonlyArray<Conflict>;
210
+ constructor(message: string, conflicts?: ReadonlyArray<Conflict>);
211
+ }
212
+ /**
213
+ * Compute the Longest Common Subsequence of two arrays.
214
+ * @internal
215
+ */
216
+ export declare function computeLCS<T>(before: T[], after: T[], equal: (a: T, b: T) => boolean): {
217
+ beforeIndices: number[];
218
+ afterIndices: number[];
219
+ };
220
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/patch/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAMxE;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC9C,0FAA0F;IAC1F,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC7C,0BAA0B;IAC1B,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;IAChD,iEAAiE;IACjE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IACjD,6FAA6F;IAC7F,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC7C,+FAA+F;IAC/F,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;IAChD,iEAAiE;IACjE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB;;;;;;;;OAQG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,kHAAkH;IAClH,MAAM,EAAE,GAAG,CAAC;IACZ,4CAA4C;IAC5C,MAAM,EAAE,GAAG,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;0BAEsB;IACtB,KAAK,EAAE,KAAK,CAAC,CACX,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,IAAI,EACrD,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC,GAAG,IAAI,KACtD,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAChC,2EAA2E;IAC3E,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B;kDAC8C;IAC9C,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;CACjD;AAMD,sEAAsE;AACtE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,QAAQ,IACxC,CAAC,SAAS,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,GACzL,WAAW,CAAC;IAAE,SAAS,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,GACpF,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,SAAS,QAAQ,CAAC,GACzC,WAAW,CAAC;IAAE,SAAS,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,GAC3G,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS,QAAQ,CAAC,GAC3C,WAAW,CAAC;IACV,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC;QAC1B,GAAG,EAAE,WAAW,CAAC;QACjB,MAAM,EAAE,WAAW,CAAC;QACpB,SAAS,EAAE,WAAW,CAAC;YAAE,MAAM,EAAE,CAAC,CAAC;YAAC,MAAM,EAAE,CAAC,CAAC;YAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;SAAE,CAAC,CAAC;KAC1E,CAAC,CAAC,CAAC;CACL,CAAC,GACJ,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GACxB,WAAW,CAAC;IACV,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC,CAAC;CACzE,CAAC,GACJ,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,SAAS,QAAQ,CAAC,GACnD,WAAW,CAAC;IACV,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;CACnF,CAAC,GACJ,CAAC,SAAS,UAAU,CAAC,MAAM,MAAM,CAAC,GAChC,WAAW,CAAC;IACV,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,UAAU,CAAC;SAAG,CAAC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;KAAE,CAAC,CAAC;CACzG,CAAC,GACJ,CAAC,SAAS,WAAW,CAAC,MAAM,KAAK,CAAC,GAChC,WAAW,CAAC;IACV,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,WAAW,CAAC;SAAG,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;KAAE,CAAC,CAAC;CACvG,CAAC,GACJ,CAAC,SAAS,aAAa,CAAC,MAAM,KAAK,SAAS,QAAQ,CAAC,GACnD,WAAW,CAAC;IACV,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAE9C,CAAC,GACJ,WAAW,CAAC;IAAE,SAAS,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAEvF;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAEhC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,aAAa,CAAC,QAAQ,CAAM;CAKrE;AAOD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,MAAM,EAAE,CAAC,EAAE,EACX,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAC7B;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAmCrD"}
@@ -0,0 +1,62 @@
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
+ * Error thrown when patch operations encounter conflicts.
7
+ *
8
+ * For merge operations, the `conflicts` field lists every detected conflict
9
+ * with its path and the two divergent patch arms. The caller decides how to
10
+ * format / render this information.
11
+ */
12
+ export class ConflictError extends Error {
13
+ /** Detailed conflict list (only populated by merge / merge-with-resolutions). */
14
+ conflicts;
15
+ constructor(message, conflicts = []) {
16
+ super(message);
17
+ this.name = "ConflictError";
18
+ this.conflicts = conflicts;
19
+ }
20
+ }
21
+ // ============================================================================
22
+ // Helper functions
23
+ // ============================================================================
24
+ /**
25
+ * Compute the Longest Common Subsequence of two arrays.
26
+ * @internal
27
+ */
28
+ export function computeLCS(before, after, equal) {
29
+ const m = before.length;
30
+ const n = after.length;
31
+ const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
32
+ for (let i = 1; i <= m; i++) {
33
+ for (let j = 1; j <= n; j++) {
34
+ if (equal(before[i - 1], after[j - 1])) {
35
+ dp[i][j] = dp[i - 1][j - 1] + 1;
36
+ }
37
+ else {
38
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
39
+ }
40
+ }
41
+ }
42
+ const beforeIndices = [];
43
+ const afterIndices = [];
44
+ let i = m;
45
+ let j = n;
46
+ while (i > 0 && j > 0) {
47
+ if (equal(before[i - 1], after[j - 1])) {
48
+ beforeIndices.unshift(i - 1);
49
+ afterIndices.unshift(j - 1);
50
+ i--;
51
+ j--;
52
+ }
53
+ else if (dp[i - 1][j] > dp[i][j - 1]) {
54
+ i--;
55
+ }
56
+ else {
57
+ j--;
58
+ }
59
+ }
60
+ return { beforeIndices, afterIndices };
61
+ }
62
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/patch/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwMH;;;;;;GAMG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,iFAAiF;IACxE,SAAS,CAA0B;IAE5C,YAAY,OAAe,EAAE,YAAqC,EAAE;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAG/E;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,MAAW,EACX,KAAU,EACV,KAA8B;IAE9B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAEvB,MAAM,EAAE,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;gBACzC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;YACzC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC;YAC3C,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,44 @@
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
+ * `validatePatchFor` — non-throwing per-leaf validation of a patch against a
7
+ * base value. Returns the list of paths where the patch's expected `before`
8
+ * (or expected key presence/absence) disagrees with `base`'s actual value.
9
+ *
10
+ * This fills the gap between `applyFor` (which throws on the first stale op,
11
+ * losing per-leaf granularity) and `mergeFor` (which compares two patches
12
+ * against a common ancestor — different problem).
13
+ *
14
+ * Empty result list ⇒ `applyFor(type)(base, patch)` would succeed cleanly.
15
+ *
16
+ * @module
17
+ */
18
+ import { type EastTypeValue } from "../type_of_type.js";
19
+ import type { EastType } from "../types.js";
20
+ import { type PatchPath } from "./path.js";
21
+ /**
22
+ * One per-leaf disagreement between a patch and a base value.
23
+ *
24
+ * @property path - structured path from the root of the base/patch.
25
+ * @property op - which patch operation didn't apply cleanly.
26
+ * @property expected - what the patch expected at this path.
27
+ * For `replace`/`delete`/`update`: the patch's `before`.
28
+ * For `insert`: `undefined` (insert expects absence).
29
+ * @property actual - what the base actually has at this path.
30
+ * `undefined` when the key/index is missing.
31
+ */
32
+ export interface PatchConflict {
33
+ readonly path: PatchPath;
34
+ readonly op: "replace" | "delete" | "insert" | "update";
35
+ readonly expected: unknown;
36
+ readonly actual: unknown;
37
+ }
38
+ /**
39
+ * Build a validator for patches over `type`. The returned closure walks
40
+ * `base` and `patch` in parallel and accumulates per-leaf conflicts; never
41
+ * throws. Empty result ⇒ patch applies cleanly.
42
+ */
43
+ export declare function validatePatchFor(type: EastTypeValue | EastType): (base: any, patch: any) => PatchConflict[];
44
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/patch/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,aAAa,EAAE,CAO3G"}