@elaraai/east 0.0.1-beta.9 → 1.0.1

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,445 @@
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 { describe, test } from "node:test";
6
+ import util from "node:util";
7
+ import assert from "node:assert";
8
+ import { analyzeIR } from "./analyze.js";
9
+ import { East } from "./expr/index.js";
10
+ import { NullType, BooleanType, IntegerType, StringType, } from "./types.js";
11
+ // Force node test to show full stack traces for easier debugging
12
+ Error.stackTraceLimit = Infinity;
13
+ // Force node to print full objects in console.log output
14
+ util.inspect.defaultOptions.depth = null;
15
+ describe("analyzeIR - Basic validation", () => {
16
+ test("should accept valid Value IR", () => {
17
+ const fn = East.function([], IntegerType, $ => {
18
+ $.return(East.value(42n));
19
+ });
20
+ const ir = fn.toIR().ir;
21
+ const analyzed = analyzeIR(ir, []);
22
+ assert.strictEqual(analyzed.type, "Function");
23
+ assert.strictEqual(analyzed.value.isAsync, false);
24
+ });
25
+ });
26
+ describe("analyzeIR - isAsync propagation", () => {
27
+ test("Value expressions should be synchronous", () => {
28
+ const fn = East.function([], IntegerType, $ => {
29
+ $.return(East.value(42n));
30
+ });
31
+ const ir = fn.toIR().ir;
32
+ const analyzed = analyzeIR(ir, []);
33
+ assert.strictEqual(analyzed.type, "Function");
34
+ assert.strictEqual(analyzed.value.isAsync, false);
35
+ });
36
+ test("Async platform function call should be async", async () => {
37
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
38
+ const platform = [asyncFetch.implement(async (url) => url)];
39
+ const fn = East.asyncFunction([], StringType, $ => {
40
+ $.return(asyncFetch(East.value("url")));
41
+ });
42
+ const ir = fn.toIR().ir;
43
+ const analyzed = analyzeIR(ir, platform);
44
+ // Check AsyncFunction node
45
+ assert.strictEqual(analyzed.type, "AsyncFunction");
46
+ assert.strictEqual(analyzed.value.type.type, "AsyncFunction");
47
+ assert.strictEqual(analyzed.value.isAsync, false); // definining an async function is sync
48
+ // Check Return node
49
+ const body = analyzed.value.body;
50
+ assert.strictEqual(body.type, "Return");
51
+ assert.strictEqual(body.value.isAsync, true, "Return should be async");
52
+ // Check Platform node
53
+ const platformNode = body.value.value;
54
+ assert.strictEqual(platformNode.type, "Platform");
55
+ assert.strictEqual(platformNode.value.isAsync, true, "Platform call should be async");
56
+ // Check Value node (argument)
57
+ const argNode = platformNode.value.arguments[0];
58
+ assert.strictEqual(argNode.type, "Value");
59
+ assert.strictEqual(argNode.value.isAsync, false, "Value arg should be sync");
60
+ // Execute the compiled function and verify it works
61
+ // Async functions return a Promise when compiled
62
+ const compiled = fn.toIR().compile(platform);
63
+ const result = await compiled();
64
+ assert.strictEqual(result, "url", "Compiled function should return the correct result");
65
+ });
66
+ test("Sync platform function call should be synchronous", async () => {
67
+ const log = East.platform("log", [StringType], NullType);
68
+ const platform = [log.implement((msg) => console.log(msg))];
69
+ const fn = East.function([], NullType, $ => {
70
+ $(log(East.value("hello")));
71
+ $.return(East.value(null));
72
+ });
73
+ const ir = fn.toIR().ir;
74
+ const analyzed = analyzeIR(ir, platform);
75
+ // Check Function node
76
+ assert.strictEqual(analyzed.type, "Function");
77
+ assert.strictEqual(analyzed.value.isAsync, false);
78
+ // Check Block node
79
+ const body = analyzed.value.body;
80
+ assert.strictEqual(body.type, "Block");
81
+ assert.strictEqual(body.value.isAsync, false, "Block should be sync");
82
+ // Execute the compiled function and verify it works
83
+ // Use compile for sync platform functions
84
+ const compiled = fn.toIR().compile(platform);
85
+ const result = compiled();
86
+ assert.strictEqual(result, null, "Compiled function should return null");
87
+ });
88
+ test("Platform function with async argument should be async", async () => {
89
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
90
+ const log = East.platform("log", [StringType], NullType);
91
+ const platform = [
92
+ asyncFetch.implement(async (url) => url),
93
+ log.implement((msg) => console.log(msg)),
94
+ ];
95
+ const fn = East.asyncFunction([], NullType, $ => {
96
+ $(log(asyncFetch(East.value("url"))));
97
+ $.return(East.value(null));
98
+ });
99
+ const ir = fn.toIR().ir;
100
+ const analyzed = analyzeIR(ir, platform);
101
+ // Check AsyncFunction node
102
+ assert.strictEqual(analyzed.type, "AsyncFunction");
103
+ // Check Block node
104
+ const body = analyzed.value.body;
105
+ assert.strictEqual(body.type, "Block");
106
+ assert.strictEqual(body.value.isAsync, true, "Block should be async");
107
+ // Check log() call (should be async due to async argument)
108
+ const logCall = body.value.statements[0];
109
+ assert.strictEqual(logCall.type, "Platform");
110
+ assert.strictEqual(logCall.value.isAsync, true, "log call should be async");
111
+ // Check asyncFetch() inside - Platform IR with async: true
112
+ const asyncFetchCall = logCall.value.arguments[0];
113
+ assert.strictEqual(asyncFetchCall.type, "Platform");
114
+ assert.strictEqual(asyncFetchCall.value.async, true, "Platform call should have async: true");
115
+ assert.strictEqual(asyncFetchCall.value.isAsync, true, "asyncFetch should be async");
116
+ // Execute and verify
117
+ const compiled = fn.toIR().compile(platform);
118
+ const result = await compiled();
119
+ assert.strictEqual(result, null);
120
+ });
121
+ test("Let with async value should be async", async () => {
122
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
123
+ const platform = [asyncFetch.implement(async (url) => url)];
124
+ const fn = East.asyncFunction([], StringType, $ => {
125
+ const x = $.let(asyncFetch(East.value("url")));
126
+ $.return(x);
127
+ });
128
+ const ir = fn.toIR().ir;
129
+ const analyzed = analyzeIR(ir, platform);
130
+ // Check AsyncFunction node
131
+ assert.strictEqual(analyzed.type, "AsyncFunction");
132
+ // Check Block node
133
+ const body = analyzed.value.body;
134
+ assert.strictEqual(body.type, "Block");
135
+ assert.strictEqual(body.value.isAsync, true, "Block should be async");
136
+ // Check Let statement
137
+ const letStmt = body.value.statements[0];
138
+ assert.strictEqual(letStmt.type, "Let");
139
+ assert.strictEqual(letStmt.value.isAsync, true, "Let should be async");
140
+ // Execute and verify
141
+ const compiled = fn.toIR().compile(platform);
142
+ const result = await compiled();
143
+ assert.strictEqual(result, "url");
144
+ });
145
+ test("Block with async statement should be async", async () => {
146
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
147
+ const platform = [asyncFetch.implement(async (url) => url)];
148
+ const fn = East.asyncFunction([], StringType, $ => {
149
+ $(East.value(1n));
150
+ $.return(asyncFetch(East.value("url")));
151
+ });
152
+ const ir = fn.toIR().ir;
153
+ const analyzed = analyzeIR(ir, platform);
154
+ // Check AsyncFunction node
155
+ assert.strictEqual(analyzed.type, "AsyncFunction");
156
+ const body = analyzed.value.body;
157
+ assert.strictEqual(body.type, "Block");
158
+ assert.strictEqual(body.value.isAsync, true, "Block should be async");
159
+ // Execute and verify
160
+ const compiled = fn.toIR().compile(platform);
161
+ const result = await compiled();
162
+ assert.strictEqual(result, "url");
163
+ });
164
+ test("Block with only sync statements should be sync", () => {
165
+ const fn = East.function([], IntegerType, $ => {
166
+ $(East.value(1n));
167
+ $.return(East.value(2n));
168
+ });
169
+ const ir = fn.toIR().ir;
170
+ const analyzed = analyzeIR(ir, []);
171
+ const body = analyzed.value.body;
172
+ assert.strictEqual(body.type, "Block");
173
+ assert.strictEqual(body.value.isAsync, false, "Block should be sync");
174
+ });
175
+ test("IfElse with async predicate should be async", async () => {
176
+ const asyncCheck = East.asyncPlatform("asyncCheck", [], BooleanType);
177
+ const platform = [asyncCheck.implement(async () => true)];
178
+ const fn = East.asyncFunction([], IntegerType, $ => {
179
+ $.if(asyncCheck(), () => {
180
+ $.return(East.value(1n));
181
+ }).else(() => {
182
+ $.return(East.value(2n));
183
+ });
184
+ });
185
+ const ir = fn.toIR().ir;
186
+ const analyzed = analyzeIR(ir, platform);
187
+ // Check AsyncFunction node
188
+ assert.strictEqual(analyzed.type, "AsyncFunction");
189
+ // The body is a Block containing the if/else
190
+ const body = analyzed.value.body;
191
+ assert.strictEqual(body.type, "Block");
192
+ assert.strictEqual(body.value.isAsync, true, "Block containing async if/else should be async");
193
+ // Check the IfElse statement inside the block
194
+ const ifElse = body.value.statements[1];
195
+ assert.strictEqual(ifElse.type, "IfElse");
196
+ assert.strictEqual(ifElse.value.isAsync, true, "IfElse with async predicate should be async");
197
+ // Execute and verify
198
+ const compiled = fn.toIR().compile(platform);
199
+ const result = await compiled();
200
+ assert.strictEqual(result, 1n);
201
+ });
202
+ test("IfElse with async branch body should be async", async () => {
203
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
204
+ const platform = [asyncFetch.implement(async (url) => url)];
205
+ const fn = East.asyncFunction([], StringType, $ => {
206
+ $.if(East.value(true), () => {
207
+ $.return(asyncFetch(East.value("url")));
208
+ }).else(() => {
209
+ $.return(East.value("default"));
210
+ });
211
+ });
212
+ const ir = fn.toIR().ir;
213
+ const analyzed = analyzeIR(ir, platform);
214
+ // Check AsyncFunction node
215
+ assert.strictEqual(analyzed.type, "AsyncFunction");
216
+ const body = analyzed.value.body;
217
+ assert.strictEqual(body.type, "Block");
218
+ assert.strictEqual(body.value.isAsync, true, "Block containing async should be async");
219
+ // The async call is in the Return statement, not the IfElse itself
220
+ const returnStmt = body.value.statements[0];
221
+ assert.strictEqual(returnStmt.type, "Return");
222
+ assert.strictEqual(returnStmt.value.isAsync, true, "Return with async call should be async");
223
+ // Execute and verify
224
+ const compiled = fn.toIR().compile(platform);
225
+ const result = await compiled();
226
+ assert.strictEqual(result, "url");
227
+ });
228
+ test("IfElse with async else body should be async", async () => {
229
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
230
+ const platform = [asyncFetch.implement(async (url) => url)];
231
+ const fn = East.asyncFunction([], StringType, $ => {
232
+ $.if(East.value(true), () => {
233
+ $.return(East.value("sync"));
234
+ }).else(() => {
235
+ $.return(asyncFetch(East.value("url")));
236
+ });
237
+ });
238
+ const ir = fn.toIR().ir;
239
+ const analyzed = analyzeIR(ir, platform);
240
+ // Check AsyncFunction node
241
+ assert.strictEqual(analyzed.type, "AsyncFunction");
242
+ const body = analyzed.value.body;
243
+ assert.strictEqual(body.type, "Block");
244
+ assert.strictEqual(body.value.isAsync, true, "Block containing async should be async");
245
+ // The async call is in the else Return statement (statement 2)
246
+ const elseReturnStmt = body.value.statements[2];
247
+ assert.strictEqual(elseReturnStmt.type, "Return");
248
+ assert.strictEqual(elseReturnStmt.value.isAsync, true, "Return with async call should be async");
249
+ // Execute and verify (predicate is true so takes if-branch, returns "sync")
250
+ const compiled = fn.toIR().compile(platform);
251
+ const result = await compiled();
252
+ assert.strictEqual(result, "sync");
253
+ });
254
+ test("IfElse with all sync branches should be sync", () => {
255
+ const fn = East.function([], IntegerType, $ => {
256
+ $.if(East.value(true), () => {
257
+ $.return(East.value(1n));
258
+ }).else(() => {
259
+ $.return(East.value(2n));
260
+ });
261
+ });
262
+ const ir = fn.toIR().ir;
263
+ const analyzed = analyzeIR(ir, []);
264
+ const body = analyzed.value.body;
265
+ assert.strictEqual(body.type, "Block");
266
+ assert.strictEqual(body.value.isAsync, false, "Block with all sync statements should be sync");
267
+ const ifElse = body.value.statements[1];
268
+ assert.strictEqual(ifElse.type, "IfElse");
269
+ assert.strictEqual(ifElse.value.isAsync, false, "IfElse with all sync branches should be sync");
270
+ });
271
+ test("While with async predicate should be async", async () => {
272
+ const asyncCheck = East.asyncPlatform("asyncCheck", [], BooleanType);
273
+ const platform = [asyncCheck.implement(async () => false)];
274
+ const fn = East.asyncFunction([], NullType, $ => {
275
+ $.while(asyncCheck(), () => {
276
+ $(East.value(null));
277
+ });
278
+ $.return(East.value(null));
279
+ });
280
+ const ir = fn.toIR().ir;
281
+ const analyzed = analyzeIR(ir, platform);
282
+ // Check AsyncFunction node
283
+ assert.strictEqual(analyzed.type, "AsyncFunction");
284
+ const body = analyzed.value.body;
285
+ assert.strictEqual(body.type, "Block");
286
+ assert.strictEqual(body.value.isAsync, true, "Block containing async should be async");
287
+ const whileStmt = body.value.statements[1];
288
+ assert.strictEqual(whileStmt.type, "While");
289
+ assert.strictEqual(whileStmt.value.isAsync, true, "While with async predicate should be async");
290
+ // Execute and verify
291
+ const compiled = fn.toIR().compile(platform);
292
+ const result = await compiled();
293
+ assert.strictEqual(result, null);
294
+ });
295
+ test("While with async body should be async", async () => {
296
+ const asyncWork = East.asyncPlatform("asyncWork", [], NullType);
297
+ const platform = [asyncWork.implement(async () => null)];
298
+ const fn = East.asyncFunction([], NullType, $ => {
299
+ $.while(East.value(true), ($, label) => {
300
+ $(asyncWork());
301
+ $.break(label);
302
+ });
303
+ $.return(East.value(null));
304
+ });
305
+ const ir = fn.toIR().ir;
306
+ const analyzed = analyzeIR(ir, platform);
307
+ // Check AsyncFunction node
308
+ assert.strictEqual(analyzed.type, "AsyncFunction");
309
+ const body = analyzed.value.body;
310
+ assert.strictEqual(body.type, "Block");
311
+ assert.strictEqual(body.value.isAsync, true, "Block should be async");
312
+ // Execute and verify
313
+ const compiled = fn.toIR().compile(platform);
314
+ const result = await compiled();
315
+ assert.strictEqual(result, null);
316
+ });
317
+ test("Call with async function body should be async", async () => {
318
+ const asyncWork = East.asyncPlatform("asyncWork", [], NullType);
319
+ const platform = [asyncWork.implement(async () => null)];
320
+ const innerFn = East.asyncFunction([], NullType, $ => {
321
+ $.return(asyncWork());
322
+ });
323
+ const outerFn = East.asyncFunction([], NullType, $ => {
324
+ $.return(innerFn());
325
+ });
326
+ const ir = outerFn.toIR().ir;
327
+ const analyzed = analyzeIR(ir, platform);
328
+ // Check AsyncFunction node
329
+ assert.strictEqual(analyzed.type, "AsyncFunction");
330
+ const body = analyzed.value.body;
331
+ assert.strictEqual(body.type, "Return");
332
+ assert.strictEqual(body.value.isAsync, true, "Return should be async");
333
+ const callNode = body.value.value;
334
+ assert.strictEqual(callNode.type, "CallAsync");
335
+ assert.strictEqual(callNode.value.isAsync, true, "CallAsync should be async");
336
+ // Execute the compiled function and verify it works
337
+ const compiled = outerFn.toIR().compile(platform);
338
+ const result = await compiled();
339
+ assert.strictEqual(result, null, "Compiled function should return null");
340
+ });
341
+ test("Function node should track async in body", async () => {
342
+ const asyncWork = East.asyncPlatform("asyncWork", [], NullType);
343
+ const platform = [asyncWork.implement(async () => null)];
344
+ const outerFn = East.asyncFunction([], NullType, $ => {
345
+ const innerFn = $.const(East.asyncFunction([], NullType, $inner => {
346
+ $inner.return(asyncWork());
347
+ }));
348
+ $.return(innerFn());
349
+ });
350
+ const ir = outerFn.toIR().ir;
351
+ const analyzed = analyzeIR(ir, platform);
352
+ // Check AsyncFunction node for outer function
353
+ assert.strictEqual(analyzed.type, "AsyncFunction");
354
+ const body = analyzed.value.body;
355
+ assert.strictEqual(body.type, "Block");
356
+ const letStmt = body.value.statements[0];
357
+ assert.strictEqual(letStmt.type, "Let");
358
+ const functionNode = letStmt.value.value;
359
+ assert.strictEqual(functionNode.type, "AsyncFunction");
360
+ assert.strictEqual(functionNode.value.isAsync, false, "Creating async function should be sync");
361
+ assert.strictEqual(functionNode.value.type.type, "AsyncFunction");
362
+ // Execute and verify
363
+ const compiled = outerFn.toIR().compile(platform);
364
+ const result = await compiled();
365
+ assert.strictEqual(result, null);
366
+ });
367
+ test("Nested async propagation through multiple levels", async () => {
368
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
369
+ const platform = [asyncFetch.implement(async (url) => url)];
370
+ const fn = East.asyncFunction([], StringType, $ => {
371
+ const x = $.let(asyncFetch(East.value("url")));
372
+ $.return(x);
373
+ });
374
+ const ir = fn.toIR().ir;
375
+ const analyzed = analyzeIR(ir, platform);
376
+ // Check AsyncFunction node
377
+ assert.strictEqual(analyzed.type, "AsyncFunction");
378
+ const body = analyzed.value.body;
379
+ assert.strictEqual(body.type, "Block");
380
+ assert.strictEqual(body.value.isAsync, true, "Async should propagate");
381
+ // Execute and verify
382
+ const compiled = fn.toIR().compile(platform);
383
+ const result = await compiled();
384
+ assert.strictEqual(result, "url");
385
+ });
386
+ });
387
+ describe("analyzeIR - Error cases", () => {
388
+ test("should reject unknown platform function", () => {
389
+ const unknownFunc = East.platform("unknownFunc", [], NullType);
390
+ const fn = East.function([], NullType, $ => {
391
+ $.return(unknownFunc());
392
+ });
393
+ const ir = fn.toIR().ir;
394
+ assert.throws(() => analyzeIR(ir, []), {
395
+ message: /Platform function 'unknownFunc' not found/,
396
+ });
397
+ });
398
+ });
399
+ describe("compile - sync and async functions", () => {
400
+ test("compile() on sync function should return sync function", () => {
401
+ const log = East.platform("log", [StringType], NullType);
402
+ const platform = [log.implement((msg) => console.log(msg))];
403
+ const fn = East.function([], NullType, $ => {
404
+ $(log(East.value("hello")));
405
+ $.return(East.value(null));
406
+ });
407
+ const compiled = fn.toIR().compile(platform);
408
+ const result = compiled();
409
+ assert.strictEqual(result, null);
410
+ });
411
+ test("compile() on async function should return async function", async () => {
412
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
413
+ const platform = [asyncFetch.implement(async (url) => url)];
414
+ const fn = East.asyncFunction([], StringType, $ => {
415
+ $.return(asyncFetch(East.value("test")));
416
+ });
417
+ const compiled = fn.toIR().compile(platform);
418
+ const result = await compiled();
419
+ assert.strictEqual(result, "test");
420
+ });
421
+ test("compile() should throw when async platform not provided", () => {
422
+ const asyncFetch = East.asyncPlatform("asyncFetch", [StringType], StringType);
423
+ const fn = East.asyncFunction([], StringType, $ => {
424
+ $.return(asyncFetch(East.value("url")));
425
+ });
426
+ assert.throws(() => {
427
+ fn.toIR().compile([]);
428
+ }, {
429
+ message: /Platform function 'asyncFetch' not found/,
430
+ });
431
+ });
432
+ test("compile() should throw when sync platform not provided", () => {
433
+ const log = East.platform("log", [StringType], NullType);
434
+ const fn = East.function([], NullType, $ => {
435
+ $(log(East.value("hello")));
436
+ $.return(East.value(null));
437
+ });
438
+ assert.throws(() => {
439
+ fn.toIR().compile([]);
440
+ }, {
441
+ message: /Platform function 'log' not found/,
442
+ });
443
+ });
444
+ });
445
+ //# sourceMappingURL=analyze.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.spec.js","sourceRoot":"","sources":["../../src/analyze.spec.ts"],"names":[],"mappings":"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"}