@elaraai/east 0.0.1-beta.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 (251) hide show
  1. package/LICENSE.md +682 -0
  2. package/README.md +276 -0
  3. package/dist/src/analyze.d.ts +95 -0
  4. package/dist/src/analyze.d.ts.map +1 -0
  5. package/dist/src/analyze.js +1110 -0
  6. package/dist/src/analyze.js.map +1 -0
  7. package/dist/src/ast.d.ts +263 -0
  8. package/dist/src/ast.d.ts.map +1 -0
  9. package/dist/src/ast.js +151 -0
  10. package/dist/src/ast.js.map +1 -0
  11. package/dist/src/ast_to_ir.d.ts +24 -0
  12. package/dist/src/ast_to_ir.d.ts.map +1 -0
  13. package/dist/src/ast_to_ir.js +834 -0
  14. package/dist/src/ast_to_ir.js.map +1 -0
  15. package/dist/src/builtins.d.ts +18 -0
  16. package/dist/src/builtins.d.ts.map +1 -0
  17. package/dist/src/builtins.js +1105 -0
  18. package/dist/src/builtins.js.map +1 -0
  19. package/dist/src/comparison.d.ts +28 -0
  20. package/dist/src/comparison.d.ts.map +1 -0
  21. package/dist/src/comparison.js +1017 -0
  22. package/dist/src/comparison.js.map +1 -0
  23. package/dist/src/compile.d.ts +22 -0
  24. package/dist/src/compile.d.ts.map +1 -0
  25. package/dist/src/compile.js +3260 -0
  26. package/dist/src/compile.js.map +1 -0
  27. package/dist/src/containers/ref.d.ts +106 -0
  28. package/dist/src/containers/ref.d.ts.map +1 -0
  29. package/dist/src/containers/ref.js +100 -0
  30. package/dist/src/containers/ref.js.map +1 -0
  31. package/dist/src/containers/sortedmap.d.ts +165 -0
  32. package/dist/src/containers/sortedmap.d.ts.map +1 -0
  33. package/dist/src/containers/sortedmap.js +237 -0
  34. package/dist/src/containers/sortedmap.js.map +1 -0
  35. package/dist/src/containers/sortedset.d.ts +185 -0
  36. package/dist/src/containers/sortedset.d.ts.map +1 -0
  37. package/dist/src/containers/sortedset.js +312 -0
  38. package/dist/src/containers/sortedset.js.map +1 -0
  39. package/dist/src/containers/variant.d.ts +131 -0
  40. package/dist/src/containers/variant.d.ts.map +1 -0
  41. package/dist/src/containers/variant.js +68 -0
  42. package/dist/src/containers/variant.js.map +1 -0
  43. package/dist/src/datetime_format/parse.d.ts +50 -0
  44. package/dist/src/datetime_format/parse.d.ts.map +1 -0
  45. package/dist/src/datetime_format/parse.js +908 -0
  46. package/dist/src/datetime_format/parse.js.map +1 -0
  47. package/dist/src/datetime_format/print.d.ts +35 -0
  48. package/dist/src/datetime_format/print.d.ts.map +1 -0
  49. package/dist/src/datetime_format/print.js +157 -0
  50. package/dist/src/datetime_format/print.js.map +1 -0
  51. package/dist/src/datetime_format/tokenize.d.ts +76 -0
  52. package/dist/src/datetime_format/tokenize.d.ts.map +1 -0
  53. package/dist/src/datetime_format/tokenize.js +271 -0
  54. package/dist/src/datetime_format/tokenize.js.map +1 -0
  55. package/dist/src/datetime_format/types.d.ts +99 -0
  56. package/dist/src/datetime_format/types.d.ts.map +1 -0
  57. package/dist/src/datetime_format/types.js +103 -0
  58. package/dist/src/datetime_format/types.js.map +1 -0
  59. package/dist/src/datetime_format/validate.d.ts +51 -0
  60. package/dist/src/datetime_format/validate.d.ts.map +1 -0
  61. package/dist/src/datetime_format/validate.js +208 -0
  62. package/dist/src/datetime_format/validate.js.map +1 -0
  63. package/dist/src/default.d.ts +21 -0
  64. package/dist/src/default.d.ts.map +1 -0
  65. package/dist/src/default.js +82 -0
  66. package/dist/src/default.js.map +1 -0
  67. package/dist/src/eastir.d.ts +33 -0
  68. package/dist/src/eastir.d.ts.map +1 -0
  69. package/dist/src/eastir.js +92 -0
  70. package/dist/src/eastir.js.map +1 -0
  71. package/dist/src/error.d.ts +13 -0
  72. package/dist/src/error.d.ts.map +1 -0
  73. package/dist/src/error.js +8 -0
  74. package/dist/src/error.js.map +1 -0
  75. package/dist/src/expr/array.d.ts +1711 -0
  76. package/dist/src/expr/array.d.ts.map +1 -0
  77. package/dist/src/expr/array.js +1805 -0
  78. package/dist/src/expr/array.js.map +1 -0
  79. package/dist/src/expr/ast.d.ts +17 -0
  80. package/dist/src/expr/ast.d.ts.map +1 -0
  81. package/dist/src/expr/ast.js +302 -0
  82. package/dist/src/expr/ast.js.map +1 -0
  83. package/dist/src/expr/blob.d.ts +141 -0
  84. package/dist/src/expr/blob.d.ts.map +1 -0
  85. package/dist/src/expr/blob.js +198 -0
  86. package/dist/src/expr/blob.js.map +1 -0
  87. package/dist/src/expr/block.d.ts +201 -0
  88. package/dist/src/expr/block.d.ts.map +1 -0
  89. package/dist/src/expr/block.js +1505 -0
  90. package/dist/src/expr/block.js.map +1 -0
  91. package/dist/src/expr/boolean.d.ts +207 -0
  92. package/dist/src/expr/boolean.d.ts.map +1 -0
  93. package/dist/src/expr/boolean.js +261 -0
  94. package/dist/src/expr/boolean.js.map +1 -0
  95. package/dist/src/expr/datetime.d.ts +544 -0
  96. package/dist/src/expr/datetime.d.ts.map +1 -0
  97. package/dist/src/expr/datetime.js +980 -0
  98. package/dist/src/expr/datetime.js.map +1 -0
  99. package/dist/src/expr/dict.d.ts +1242 -0
  100. package/dist/src/expr/dict.d.ts.map +1 -0
  101. package/dist/src/expr/dict.js +1492 -0
  102. package/dist/src/expr/dict.js.map +1 -0
  103. package/dist/src/expr/expr.d.ts +95 -0
  104. package/dist/src/expr/expr.d.ts.map +1 -0
  105. package/dist/src/expr/expr.js +171 -0
  106. package/dist/src/expr/expr.js.map +1 -0
  107. package/dist/src/expr/float.d.ts +357 -0
  108. package/dist/src/expr/float.d.ts.map +1 -0
  109. package/dist/src/expr/float.js +637 -0
  110. package/dist/src/expr/float.js.map +1 -0
  111. package/dist/src/expr/function.d.ts +46 -0
  112. package/dist/src/expr/function.d.ts.map +1 -0
  113. package/dist/src/expr/function.js +58 -0
  114. package/dist/src/expr/function.js.map +1 -0
  115. package/dist/src/expr/index.d.ts +450 -0
  116. package/dist/src/expr/index.d.ts.map +1 -0
  117. package/dist/src/expr/index.js +423 -0
  118. package/dist/src/expr/index.js.map +1 -0
  119. package/dist/src/expr/integer.d.ts +256 -0
  120. package/dist/src/expr/integer.d.ts.map +1 -0
  121. package/dist/src/expr/integer.js +311 -0
  122. package/dist/src/expr/integer.js.map +1 -0
  123. package/dist/src/expr/libs/array.d.ts +106 -0
  124. package/dist/src/expr/libs/array.d.ts.map +1 -0
  125. package/dist/src/expr/libs/array.js +140 -0
  126. package/dist/src/expr/libs/array.js.map +1 -0
  127. package/dist/src/expr/libs/blob.d.ts +42 -0
  128. package/dist/src/expr/libs/blob.d.ts.map +1 -0
  129. package/dist/src/expr/libs/blob.js +70 -0
  130. package/dist/src/expr/libs/blob.js.map +1 -0
  131. package/dist/src/expr/libs/datetime.d.ts +479 -0
  132. package/dist/src/expr/libs/datetime.d.ts.map +1 -0
  133. package/dist/src/expr/libs/datetime.js +624 -0
  134. package/dist/src/expr/libs/datetime.js.map +1 -0
  135. package/dist/src/expr/libs/dict.d.ts +66 -0
  136. package/dist/src/expr/libs/dict.d.ts.map +1 -0
  137. package/dist/src/expr/libs/dict.js +77 -0
  138. package/dist/src/expr/libs/dict.js.map +1 -0
  139. package/dist/src/expr/libs/float.d.ts +299 -0
  140. package/dist/src/expr/libs/float.d.ts.map +1 -0
  141. package/dist/src/expr/libs/float.js +564 -0
  142. package/dist/src/expr/libs/float.js.map +1 -0
  143. package/dist/src/expr/libs/integer.d.ts +228 -0
  144. package/dist/src/expr/libs/integer.d.ts.map +1 -0
  145. package/dist/src/expr/libs/integer.js +398 -0
  146. package/dist/src/expr/libs/integer.js.map +1 -0
  147. package/dist/src/expr/libs/set.d.ts +59 -0
  148. package/dist/src/expr/libs/set.d.ts.map +1 -0
  149. package/dist/src/expr/libs/set.js +69 -0
  150. package/dist/src/expr/libs/set.js.map +1 -0
  151. package/dist/src/expr/libs/string.d.ts +71 -0
  152. package/dist/src/expr/libs/string.d.ts.map +1 -0
  153. package/dist/src/expr/libs/string.js +75 -0
  154. package/dist/src/expr/libs/string.js.map +1 -0
  155. package/dist/src/expr/never.d.ts +15 -0
  156. package/dist/src/expr/never.d.ts.map +1 -0
  157. package/dist/src/expr/never.js +12 -0
  158. package/dist/src/expr/never.js.map +1 -0
  159. package/dist/src/expr/null.d.ts +15 -0
  160. package/dist/src/expr/null.d.ts.map +1 -0
  161. package/dist/src/expr/null.js +12 -0
  162. package/dist/src/expr/null.js.map +1 -0
  163. package/dist/src/expr/ref.d.ts +103 -0
  164. package/dist/src/expr/ref.d.ts.map +1 -0
  165. package/dist/src/expr/ref.js +131 -0
  166. package/dist/src/expr/ref.js.map +1 -0
  167. package/dist/src/expr/regex_validation.d.ts +25 -0
  168. package/dist/src/expr/regex_validation.d.ts.map +1 -0
  169. package/dist/src/expr/regex_validation.js +130 -0
  170. package/dist/src/expr/regex_validation.js.map +1 -0
  171. package/dist/src/expr/set.d.ts +1071 -0
  172. package/dist/src/expr/set.d.ts.map +1 -0
  173. package/dist/src/expr/set.js +1137 -0
  174. package/dist/src/expr/set.js.map +1 -0
  175. package/dist/src/expr/string.d.ts +414 -0
  176. package/dist/src/expr/string.d.ts.map +1 -0
  177. package/dist/src/expr/string.js +683 -0
  178. package/dist/src/expr/string.js.map +1 -0
  179. package/dist/src/expr/struct.d.ts +48 -0
  180. package/dist/src/expr/struct.d.ts.map +1 -0
  181. package/dist/src/expr/struct.js +65 -0
  182. package/dist/src/expr/struct.js.map +1 -0
  183. package/dist/src/expr/types.d.ts +68 -0
  184. package/dist/src/expr/types.d.ts.map +1 -0
  185. package/dist/src/expr/types.js +6 -0
  186. package/dist/src/expr/types.js.map +1 -0
  187. package/dist/src/expr/variant.d.ts +137 -0
  188. package/dist/src/expr/variant.d.ts.map +1 -0
  189. package/dist/src/expr/variant.js +105 -0
  190. package/dist/src/expr/variant.js.map +1 -0
  191. package/dist/src/fuzz.d.ts +80 -0
  192. package/dist/src/fuzz.d.ts.map +1 -0
  193. package/dist/src/fuzz.js +300 -0
  194. package/dist/src/fuzz.js.map +1 -0
  195. package/dist/src/index.d.ts +21 -0
  196. package/dist/src/index.d.ts.map +1 -0
  197. package/dist/src/index.js +21 -0
  198. package/dist/src/index.js.map +1 -0
  199. package/dist/src/internal.d.ts +36 -0
  200. package/dist/src/internal.d.ts.map +1 -0
  201. package/dist/src/internal.js +11 -0
  202. package/dist/src/internal.js.map +1 -0
  203. package/dist/src/ir.d.ts +1571 -0
  204. package/dist/src/ir.d.ts.map +1 -0
  205. package/dist/src/ir.js +56 -0
  206. package/dist/src/ir.js.map +1 -0
  207. package/dist/src/location.d.ts +48 -0
  208. package/dist/src/location.d.ts.map +1 -0
  209. package/dist/src/location.js +62 -0
  210. package/dist/src/location.js.map +1 -0
  211. package/dist/src/platform.d.ts +21 -0
  212. package/dist/src/platform.d.ts.map +1 -0
  213. package/dist/src/platform.js +8 -0
  214. package/dist/src/platform.js.map +1 -0
  215. package/dist/src/serialization/beast.d.ts +39 -0
  216. package/dist/src/serialization/beast.d.ts.map +1 -0
  217. package/dist/src/serialization/beast.js +555 -0
  218. package/dist/src/serialization/beast.js.map +1 -0
  219. package/dist/src/serialization/beast2-stream.d.ts +38 -0
  220. package/dist/src/serialization/beast2-stream.d.ts.map +1 -0
  221. package/dist/src/serialization/beast2-stream.js +665 -0
  222. package/dist/src/serialization/beast2-stream.js.map +1 -0
  223. package/dist/src/serialization/beast2.d.ts +41 -0
  224. package/dist/src/serialization/beast2.d.ts.map +1 -0
  225. package/dist/src/serialization/beast2.js +489 -0
  226. package/dist/src/serialization/beast2.js.map +1 -0
  227. package/dist/src/serialization/binary-utils.d.ts +151 -0
  228. package/dist/src/serialization/binary-utils.d.ts.map +1 -0
  229. package/dist/src/serialization/binary-utils.js +929 -0
  230. package/dist/src/serialization/binary-utils.js.map +1 -0
  231. package/dist/src/serialization/east.d.ts +84 -0
  232. package/dist/src/serialization/east.d.ts.map +1 -0
  233. package/dist/src/serialization/east.js +1802 -0
  234. package/dist/src/serialization/east.js.map +1 -0
  235. package/dist/src/serialization/index.d.ts +11 -0
  236. package/dist/src/serialization/index.d.ts.map +1 -0
  237. package/dist/src/serialization/index.js +12 -0
  238. package/dist/src/serialization/index.js.map +1 -0
  239. package/dist/src/serialization/json.d.ts +36 -0
  240. package/dist/src/serialization/json.d.ts.map +1 -0
  241. package/dist/src/serialization/json.js +849 -0
  242. package/dist/src/serialization/json.js.map +1 -0
  243. package/dist/src/type_of_type.d.ts +115 -0
  244. package/dist/src/type_of_type.d.ts.map +1 -0
  245. package/dist/src/type_of_type.js +362 -0
  246. package/dist/src/type_of_type.js.map +1 -0
  247. package/dist/src/types.d.ts +648 -0
  248. package/dist/src/types.d.ts.map +1 -0
  249. package/dist/src/types.js +1631 -0
  250. package/dist/src/types.js.map +1 -0
  251. package/package.json +87 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/expr/string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
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 type { AST } from "../ast.js";
6
+ import { StructType } from "../types.js";
7
+ import { AstSymbol, Expr, FactorySymbol, TypeSymbol, type ToExpr } from "./expr.js";
8
+ import type { ExprType } from "./types.js";
9
+ export declare const StructExpr: {
10
+ new <Fields extends Record<string, any>>(field_types: Fields, ast: AST, factory: ToExpr): {
11
+ [TypeSymbol]: StructType<Fields>;
12
+ [AstSymbol]: AST;
13
+ [FactorySymbol]: ToExpr;
14
+ };
15
+ type<T>(expr: Expr<T>): T;
16
+ ast<T>(expr: Expr<T>): AST & {
17
+ type: T;
18
+ };
19
+ from<T>(value: import("./types.js").SubtypeExprOrValue<NoInfer<T>>, type: T): ExprType<T>;
20
+ from<T>(value: T): ExprType<import("./types.js").TypeOf<T>>;
21
+ fromAst<T extends AST>(ast: T): ExprType<T["type"]>;
22
+ block<F extends ($: import("./block.js").BlockBuilder<import("../types.js").NeverType>) => any>(body: F): ReturnType<F> extends void ? import("./never.js").NeverExpr : ExprType<import("./types.js").TypeOf<ReturnType<F>>>;
23
+ error(message: import("./types.js").SubtypeExprOrValue<import("../types.js").StringType>, location?: import("../location.js").Location): ExprType<import("../types.js").NeverType>;
24
+ match<Cases extends Record<string, any>, Handlers extends { [K in keyof Cases]: ($: import("./block.js").BlockBuilder<import("../types.js").NeverType>, data: ExprType<Cases[K]>) => any; }>(variant: Expr<import("../types.js").VariantType<Cases>>, handlers: Handlers): ExprType<import("./types.js").TypeOf<{ [K in keyof Cases]: ReturnType<Handlers[K]>; }[keyof Cases]>>;
25
+ tryCatch<T>(try_body: Expr<T>, catch_body: ($: import("./block.js").BlockBuilder<import("../types.js").NeverType>, message: ExprType<import("../types.js").StringType>, stack: ExprType<import("../types.js").ArrayType<StructType<{
26
+ filename: import("../types.js").StringType;
27
+ line: import("../types.js").IntegerType;
28
+ column: import("../types.js").IntegerType;
29
+ }>>>) => import("./types.js").SubtypeExprOrValue<T>): ExprType<T>;
30
+ function<const I extends any[], F extends ($: import("./block.js").BlockBuilder<import("../types.js").NeverType>, ...inputs: { [K in keyof I]: ExprType<I[K]>; }) => any>(input_types: I, output_type: undefined, body: F): import("./function.js").CallableFunctionExpr<I, import("./types.js").TypeOf<ReturnType<F> extends void ? import("../types.js").NeverType : ReturnType<F>>>;
31
+ function<const I extends any[], O>(input_types: I, output_type: O, body: ($: import("./block.js").BlockBuilder<O>, ...inputs: { [K in keyof I]: ExprType<I[K]>; }) => import("./types.js").SubtypeExprOrValue<O> | void): import("./function.js").CallableFunctionExpr<I, O>;
32
+ print(expr: any): ExprType<import("../types.js").StringType>;
33
+ str(strings: TemplateStringsArray, ...expressions: Expr[]): ExprType<import("../types.js").StringType>;
34
+ equal<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<T>): ExprType<import("../types.js").BooleanType>;
35
+ notEqual<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<T>): ExprType<import("../types.js").BooleanType>;
36
+ less<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<T>): ExprType<import("../types.js").BooleanType>;
37
+ lessEqual<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<T>): ExprType<import("../types.js").BooleanType>;
38
+ greater<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<T>): ExprType<import("../types.js").BooleanType>;
39
+ greaterEqual<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<T>): ExprType<import("../types.js").BooleanType>;
40
+ is<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<T>): ExprType<import("../types.js").BooleanType>;
41
+ min<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<NoInfer<T>>): ExprType<T>;
42
+ max<T>(a: Expr<T>, b: import("./types.js").SubtypeExprOrValue<NoInfer<T>>): ExprType<T>;
43
+ clamp<T>(x: Expr<T>, min: import("./types.js").SubtypeExprOrValue<NoInfer<T>>, max: import("./types.js").SubtypeExprOrValue<NoInfer<T>>): ExprType<T>;
44
+ };
45
+ export type StructExpr<Fields extends Record<string, any>> = Expr<StructType<Fields>> & {
46
+ [Key in keyof Fields]: ExprType<Fields[Key]>;
47
+ };
48
+ //# sourceMappingURL=struct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../../../src/expr/struct.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAEL,SAAS,EACT,IAAI,EACJ,aAAa,EAEb,UAAU,EACV,KAAK,MAAM,EACZ,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA4D3C,eAAO,MAAM,UAAU;SApBc,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,eAC5C,MAAM,OAAO,GAAG,WAAW,MAAM;;;;;;;;;;;;;;;;;;;;sHAqB6iD,GAAI;uHAAoS,GAAI;;;;;;;;;;;;;CAFh3D,CAAC;AACtC,MAAM,MAAM,UAAU,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG;KAAG,GAAG,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CAAE,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { get_location } from "../location.js";
2
+ import { StructType } from "../types.js";
3
+ import {
4
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
+ AstSymbol, Expr, FactorySymbol,
6
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
7
+ TypeSymbol } from "./expr.js";
8
+ /**
9
+ * Expression representing struct (product type) values with named fields.
10
+ *
11
+ * StructExpr provides a natural JavaScript interface for working with East structs.
12
+ * Fields are directly accessible as properties using dot notation, and structs can be
13
+ * modified using spread syntax to create new structs with updated fields. Structs are
14
+ * immutable in East - all modifications create new struct values.
15
+ *
16
+ * @typeParam Fields - Record type mapping field names to their East types
17
+ *
18
+ * @remarks
19
+ * Structs use dynamic property generation to expose fields directly on the expression object.
20
+ * This allows natural JavaScript syntax like `person.name` and `{ ...person, age: 30n }`.
21
+ * All properties are enumerable to support spread operations.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * // Define and use struct types
26
+ * const PersonType = StructType({ name: StringType, age: IntegerType });
27
+ *
28
+ * const greet = East.function([PersonType], StringType, ($, person) => {
29
+ * // Access fields with dot notation
30
+ * $.return(Expr.str`Hello, ${person.name}! You are ${person.age} years old.`);
31
+ * });
32
+ * const compiled = East.compile(greet.toIR(), []);
33
+ * compiled({ name: "Alice", age: 30n }); // "Hello, Alice! You are 30 years old."
34
+ * ```
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * // Create modified structs with spread syntax
39
+ * const birthday = East.function([PersonType], PersonType, ($, person) => {
40
+ * $.return({ ...person, age: person.age.add(1n) });
41
+ * });
42
+ * const compiled = East.compile(birthday.toIR(), []);
43
+ * compiled({ name: "Bob", age: 25n }); // { name: "Bob", age: 26n }
44
+ * ```
45
+ */
46
+ const _StructExpr = class StructExpr extends Expr {
47
+ constructor(field_types, ast, factory) {
48
+ super(ast.type, ast, factory);
49
+ // Generate all the "getfield" expressions dynamically
50
+ for (const [key, type] of Object.entries(field_types)) {
51
+ Object.defineProperty(this, key, {
52
+ enumerable: true,
53
+ get: () => this[FactorySymbol]({
54
+ ast_type: "GetField",
55
+ type,
56
+ location: get_location(2),
57
+ field: key,
58
+ struct: ast,
59
+ }),
60
+ });
61
+ }
62
+ }
63
+ };
64
+ export const StructExpr = _StructExpr;
65
+ //# sourceMappingURL=struct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct.js","sourceRoot":"","sources":["../../../src/expr/struct.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO;AACL,6DAA6D;AAC7D,SAAS,EACT,IAAI,EACJ,aAAa;AACb,6DAA6D;AAC7D,UAAU,EAEX,MAAM,WAAW,CAAC;AAGnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,GAAG,MAAM,UAA+C,SAAQ,IAAwB;IACvG,YAAY,WAAmB,EAAE,GAAQ,EAAE,OAAe;QACxD,KAAK,CAAC,GAAG,CAAC,IAA0B,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpD,sDAAsD;QACtD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC/B,UAAU,EAAE,IAAI;gBAChB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC7B,QAAQ,EAAE,UAAU;oBACpB,IAAI;oBACJ,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;oBACzB,KAAK,EAAE,GAAG;oBACV,MAAM,EAAE,GAAG;iBACZ,CAAC;aACH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC"}
@@ -0,0 +1,68 @@
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 type { variant } from "../containers/variant.js";
6
+ import type { ArrayType, BooleanType, FloatType, FunctionType, IntegerType, NeverType, NullType, StructType, StringType, VariantType, SubType, SetType, DictType, DateTimeType, BlobType, RecursiveType, RecursiveTypeMarker, RefType } from "../types.js";
7
+ import type { Expr } from "./expr.js";
8
+ import type { NeverExpr } from "./never.js";
9
+ import type { NullExpr } from "./null.js";
10
+ import type { BooleanExpr } from "./boolean.js";
11
+ import type { IntegerExpr } from "./integer.js";
12
+ import type { FloatExpr } from "./float.js";
13
+ import type { StringExpr } from "./string.js";
14
+ import type { DateTimeExpr } from "./datetime.js";
15
+ import type { BlobExpr } from "./blob.js";
16
+ import type { ArrayExpr } from "./array.js";
17
+ import type { SetExpr } from "./set.js";
18
+ import type { DictExpr } from "./dict.js";
19
+ import type { StructExpr } from "./struct.js";
20
+ import type { VariantExpr } from "./variant.js";
21
+ import type { CallableFunctionExpr } from "./function.js";
22
+ import type { BlockBuilder } from "./block.js";
23
+ import type { ref } from "../containers/ref.js";
24
+ import type { RefExpr } from "./ref.js";
25
+ /**
26
+ * Type mapping for values that can be passed to expression methods
27
+ * Maps East types to their corresponding expression classes or JavaScript values
28
+ */
29
+ export type SubtypeExprOrValue<T> = T extends never ? never : T extends NeverType ? Expr<NeverType> : T extends NullType ? Expr<NeverType> | Expr<NullType> | null : T extends BooleanType ? Expr<NeverType> | Expr<BooleanType> | boolean : T extends IntegerType ? Expr<NeverType> | Expr<IntegerType> | bigint : T extends FloatType ? Expr<NeverType> | Expr<FloatType> | number : T extends StringType ? Expr<NeverType> | Expr<StringType> | string : T extends DateTimeType ? Expr<NeverType> | Expr<DateTimeType> | Date : T extends BlobType ? Expr<NeverType> | Expr<BlobType> | Uint8Array : T extends RefType<infer U> ? Expr<NeverType> | Expr<RefType<U>> | ref<SubtypeExprOrValue<U>> : T extends ArrayType<infer V> ? Expr<NeverType> | Expr<ArrayType<V>> | SubtypeExprOrValue<V>[] : T extends SetType<infer K> ? Expr<NeverType> | Expr<SetType<K>> | Set<SubtypeExprOrValue<K>> : T extends DictType<infer K, infer V> ? Expr<NeverType> | Expr<DictType<K, V>> | Map<SubtypeExprOrValue<K>, SubtypeExprOrValue<V>> : T extends StructType<infer Fields> ? Expr<NeverType> | Expr<StructType<{
30
+ [K in keyof Fields]: SubType<Fields[K]>;
31
+ }>> | {
32
+ [K in keyof Fields]: SubtypeExprOrValue<Fields[K]>;
33
+ } : T extends VariantType<infer Cases> ? Expr<NeverType> | Expr<VariantType<{
34
+ [K in keyof Cases]?: SubType<Cases[K]>;
35
+ }>> | {
36
+ [K in keyof Cases]: variant<K, SubtypeExprOrValue<Cases[K]>>;
37
+ }[keyof Cases] : T extends RecursiveType<infer U> ? Expr<T> | SubtypeExprOrValue<U> : T extends RecursiveTypeMarker ? any : T extends FunctionType<infer I, undefined> ? Expr<FunctionType<I, any>> | (($: BlockBuilder<NeverType>, ...input: {
38
+ [K in keyof I]: ExprType<I[K]>;
39
+ }) => any) : T extends FunctionType<infer I, infer O> ? Expr<FunctionType<I, SubType<O>>> | (($: BlockBuilder<O>, ...input: {
40
+ [K in keyof I]: ExprType<I[K]>;
41
+ }) => void | SubtypeExprOrValue<O>) : Expr<NeverType> | Expr<T>;
42
+ /** Expand a given recursive type one level deeper */
43
+ export type ExpandOnce<T, NodeType> = T extends RefType<infer U> ? RefType<ExpandOnce<U, NodeType>> : T extends ArrayType<infer U> ? ArrayType<ExpandOnce<U, NodeType>> : T extends SetType<infer U> ? SetType<ExpandOnce<U, NodeType>> : T extends DictType<infer K, infer V> ? DictType<ExpandOnce<K, NodeType>, ExpandOnce<V, NodeType>> : T extends StructType<infer Fields> ? StructType<{
44
+ [K in keyof Fields]: ExpandOnce<Fields[K], NodeType>;
45
+ }> : T extends VariantType<infer Cases> ? VariantType<{
46
+ [K in keyof Cases]: ExpandOnce<Cases[K], NodeType>;
47
+ }> : T extends RecursiveType<infer U> ? RecursiveType<U> : T extends RecursiveTypeMarker ? NodeType : T;
48
+ /**
49
+ * Type mapping from East types to their corresponding expression classes
50
+ * This is the key type that provides concrete expression types to user code
51
+ */
52
+ export type ExprType<T> = T extends never ? never : T extends NeverType ? NeverExpr : T extends NeverType | NullType ? NullExpr : T extends NeverType | BooleanType ? BooleanExpr : T extends NeverType | IntegerType ? IntegerExpr : T extends NeverType | FloatType ? FloatExpr : T extends NeverType | StringType ? StringExpr : T extends NeverType | DateTimeType ? DateTimeExpr : T extends NeverType | BlobType ? BlobExpr : T extends NeverType | RefType<infer U> ? RefExpr<U> : T extends NeverType | ArrayType<infer V> ? ArrayExpr<V> : T extends NeverType | SetType<infer K> ? SetExpr<K> : T extends NeverType | DictType<infer K, infer V> ? DictExpr<K, V> : T extends NeverType | StructType<infer Fields> ? StructExpr<Fields> : T extends NeverType | VariantType<infer Cases> ? VariantExpr<Cases> : T extends NeverType | RecursiveType<infer U> ? ExprType<ExpandOnce<U, T>> : T extends NeverType | RecursiveTypeMarker ? NeverExpr : T extends NeverType | FunctionType<infer I, infer O> ? CallableFunctionExpr<I, O> : Expr<T>;
53
+ /**
54
+ * Type mapping from JavaScript/Expression values to East types
55
+ * Used for type inference in factory methods
56
+ */
57
+ export type TypeOf<T> = T extends never ? never : T extends Expr<NeverType> ? NeverType : T extends null | Expr<NullType> ? NullType : T extends boolean | Expr<BooleanType> ? BooleanType : T extends bigint | Expr<IntegerType> ? IntegerType : T extends number | Expr<FloatType> ? FloatType : T extends string | Expr<StringType> ? StringType : T extends Date | Expr<DateTimeType> ? DateTimeType : T extends Uint8Array | Expr<BlobType> ? BlobType : T extends Expr<RefType<infer U>> ? RefType<U> : T extends ref<infer U> ? RefType<TypeOf<U>> : T extends Expr<ArrayType<infer U>> ? ArrayType<U> : T extends Array<infer U> ? ArrayType<TypeOf<U>> : T extends Expr<SetType<infer U>> ? SetType<U> : T extends Set<infer U> ? SetType<TypeOf<U>> : T extends Expr<DictType<infer K, infer V>> ? DictType<K, V> : T extends Map<infer K, infer V> ? DictType<TypeOf<K>, TypeOf<V>> : T extends Expr<FunctionType<infer I, infer O>> ? FunctionType<I, O> : T extends Expr<VariantType<infer Cases>> ? VariantType<Cases> : T extends variant<infer Case, infer U> ? Case extends string ? VariantType<{
58
+ [K in Case]: TypeOf<U>;
59
+ }> : never : T extends Expr<StructType<infer Fields>> ? StructType<keyof Fields extends keyof T ? {
60
+ [K in (string & keyof T)]: TypeOf<T[K]>;
61
+ } : {
62
+ [K in keyof Fields]: K extends keyof T ? TypeOf<T[K]> : Fields[K];
63
+ }> : T extends ($: BlockBuilder<any>, ...args: infer I) => infer O ? FunctionType<{
64
+ [K in keyof I]: TypeOf<I[K]>;
65
+ }, TypeOf<O>> : T extends Expr<infer U> ? U : StructType<{
66
+ [K in (string & keyof T)]: TypeOf<T[K]>;
67
+ }>;
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/expr/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
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
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/expr/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,137 @@
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 type { AST } from "../ast.js";
6
+ import { BooleanType, NeverType, StringType, TypeUnion, VariantType } from "../types.js";
7
+ import type { BlockBuilder } from "./block.js";
8
+ import { Expr, type ToExpr } from "./expr.js";
9
+ import type { ExprType, TypeOf } from "./types.js";
10
+ /**
11
+ * Expression representing variant (sum type/tagged union) values.
12
+ *
13
+ * VariantExpr provides methods for working with discriminated unions, allowing type-safe
14
+ * pattern matching and case analysis. Variants consist of a tag (case name) and an associated
15
+ * value. Common patterns include Option types (some/none) and Result types (ok/error).
16
+ *
17
+ * @typeParam Cases - Record type mapping case names to their associated value types
18
+ *
19
+ * @remarks
20
+ * Variants are typically deconstructed using `Expr.match()` for exhaustive pattern matching,
21
+ * or using the helper methods `getTag()`, `hasTag()`, and `unwrap()` for specific operations.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * // Define an Option type (variant with some/none cases)
26
+ * const OptionType = VariantType({ some: IntegerType, none: NullType });
27
+ *
28
+ * // Pattern matching with Expr.match
29
+ * const getOrDefault = East.function([OptionType, IntegerType], IntegerType, ($, opt, defaultVal) => {
30
+ * $.return(Expr.match(opt, {
31
+ * some: ($, value) => value,
32
+ * none: ($, _) => defaultVal
33
+ * }));
34
+ * });
35
+ * const compiled = East.compile(getOrDefault.toIR(), []);
36
+ * compiled(Expr.variant("some", 42n), 0n); // 42n
37
+ * compiled(Expr.variant("none", null), 0n); // 0n
38
+ * ```
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * // Using helper methods
43
+ * const checkSome = East.function([OptionType], BooleanType, ($, opt) => {
44
+ * $.return(opt.hasTag("some"));
45
+ * });
46
+ * const compiled = East.compile(checkSome.toIR(), []);
47
+ * compiled(Expr.variant("some", 42n)); // true
48
+ * compiled(Expr.variant("none", null)); // false
49
+ * ```
50
+ */
51
+ export declare class VariantExpr<Cases extends Record<string, any>> extends Expr<VariantType<Cases>> {
52
+ private cases;
53
+ constructor(cases: Cases, ast: AST, factory: ToExpr);
54
+ /**
55
+ * Returns the case tag (discriminant) of the variant as a string.
56
+ *
57
+ * @returns A StringExpr containing the tag name of this variant
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * const ResultType = VariantType({ ok: IntegerType, error: StringType });
62
+ *
63
+ * const getTag = East.function([ResultType], StringType, ($, result) => {
64
+ * $.return(result.getTag());
65
+ * });
66
+ * const compiled = East.compile(getTag.toIR(), []);
67
+ * compiled(Expr.variant("ok", 42n)); // "ok"
68
+ * compiled(Expr.variant("error", "fail")); // "error"
69
+ * ```
70
+ */
71
+ getTag(): ExprType<StringType>;
72
+ /**
73
+ * Checks if the variant has a specific case tag.
74
+ *
75
+ * @param name - The case name to check for
76
+ * @returns A BooleanExpr that is true if the variant has the specified tag
77
+ *
78
+ * @see {@link unwrap} to extract the value associated with a case
79
+ * @see {@link getTag} to get the tag as a string
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * const OptionType = VariantType({ some: IntegerType, none: NullType });
84
+ *
85
+ * const isSome = East.function([OptionType], BooleanType, ($, opt) => {
86
+ * $.return(opt.hasTag("some"));
87
+ * });
88
+ * const compiled = East.compile(isSome.toIR(), []);
89
+ * compiled(Expr.variant("some", 42n)); // true
90
+ * compiled(Expr.variant("none", null)); // false
91
+ * ```
92
+ */
93
+ hasTag(name: keyof Cases): ExprType<BooleanType>;
94
+ /**
95
+ * Unwraps the variant to extract the value associated with a specific case.
96
+ *
97
+ * @typeParam Case - The case name to unwrap
98
+ * @typeParam F - Type of the fallback function for other cases
99
+ * @param name - The case name to unwrap (defaults to "some" for Option types)
100
+ * @param onOther - Optional function to handle when the variant doesn't match the specified case
101
+ * @returns The value associated with the case, or the result of onOther if provided
102
+ *
103
+ * @throws East runtime error if the variant doesn't match and no onOther is provided
104
+ *
105
+ * @remarks
106
+ * This is a convenience method for extracting values from variants without full pattern matching.
107
+ * For exhaustive matching of all cases, use {@link Expr.match} instead.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * const OptionType = VariantType({ some: IntegerType, none: NullType });
112
+ *
113
+ * // Unwrap with default value
114
+ * const getOrDefault = East.function([OptionType], IntegerType, ($, opt) => {
115
+ * $.return(opt.unwrap("some", () => -1n)); // Return -1n if none
116
+ * });
117
+ * const compiled = East.compile(getOrDefault.toIR(), []);
118
+ * compiled(Expr.variant("some", 42n)); // 42n
119
+ * compiled(Expr.variant("none", null)); // -1n
120
+ * ```
121
+ *
122
+ * @example
123
+ * ```ts
124
+ * // Unwrap without fallback (throws on wrong case)
125
+ * const unsafeUnwrap = East.function([OptionType], IntegerType, ($, opt) => {
126
+ * $.return(opt.unwrap("some")); // Throws error if none
127
+ * });
128
+ * const compiled = East.compile(unsafeUnwrap.toIR(), []);
129
+ * compiled(Expr.variant("some", 42n)); // 42n
130
+ * // compiled(Expr.variant("none", null)) would throw error
131
+ * ```
132
+ */
133
+ unwrap<Case extends keyof Cases, F extends ($: BlockBuilder<NeverType>) => any>(name: Case, onOther: F): ExprType<TypeUnion<Cases[Case], TypeOf<ReturnType<F>>>>;
134
+ unwrap<Case extends keyof Cases>(name: Case): ExprType<Cases[Case]>;
135
+ unwrap(): "some" extends keyof Cases ? ExprType<Cases["some"]> : ExprType<NeverType>;
136
+ }
137
+ //# sourceMappingURL=variant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variant.d.ts","sourceRoot":"","sources":["../../../src/expr/variant.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAAa,WAAW,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;IAI3D;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC;IAK9B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC;IAKhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,MAAM,CAAC,IAAI,SAAS,MAAM,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChK,MAAM,CAAC,IAAI,SAAS,MAAM,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,IAAI,MAAM,SAAS,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;CAQrF"}
@@ -0,0 +1,105 @@
1
+ import { get_location } from "../location.js";
2
+ import { BooleanType, NeverType, StringType, TypeUnion, VariantType } from "../types.js";
3
+ import { Expr } from "./expr.js";
4
+ /**
5
+ * Expression representing variant (sum type/tagged union) values.
6
+ *
7
+ * VariantExpr provides methods for working with discriminated unions, allowing type-safe
8
+ * pattern matching and case analysis. Variants consist of a tag (case name) and an associated
9
+ * value. Common patterns include Option types (some/none) and Result types (ok/error).
10
+ *
11
+ * @typeParam Cases - Record type mapping case names to their associated value types
12
+ *
13
+ * @remarks
14
+ * Variants are typically deconstructed using `Expr.match()` for exhaustive pattern matching,
15
+ * or using the helper methods `getTag()`, `hasTag()`, and `unwrap()` for specific operations.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Define an Option type (variant with some/none cases)
20
+ * const OptionType = VariantType({ some: IntegerType, none: NullType });
21
+ *
22
+ * // Pattern matching with Expr.match
23
+ * const getOrDefault = East.function([OptionType, IntegerType], IntegerType, ($, opt, defaultVal) => {
24
+ * $.return(Expr.match(opt, {
25
+ * some: ($, value) => value,
26
+ * none: ($, _) => defaultVal
27
+ * }));
28
+ * });
29
+ * const compiled = East.compile(getOrDefault.toIR(), []);
30
+ * compiled(Expr.variant("some", 42n), 0n); // 42n
31
+ * compiled(Expr.variant("none", null), 0n); // 0n
32
+ * ```
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * // Using helper methods
37
+ * const checkSome = East.function([OptionType], BooleanType, ($, opt) => {
38
+ * $.return(opt.hasTag("some"));
39
+ * });
40
+ * const compiled = East.compile(checkSome.toIR(), []);
41
+ * compiled(Expr.variant("some", 42n)); // true
42
+ * compiled(Expr.variant("none", null)); // false
43
+ * ```
44
+ */
45
+ export class VariantExpr extends Expr {
46
+ cases;
47
+ constructor(cases, ast, factory) {
48
+ super(ast.type, ast, factory);
49
+ this.cases = cases;
50
+ }
51
+ /**
52
+ * Returns the case tag (discriminant) of the variant as a string.
53
+ *
54
+ * @returns A StringExpr containing the tag name of this variant
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const ResultType = VariantType({ ok: IntegerType, error: StringType });
59
+ *
60
+ * const getTag = East.function([ResultType], StringType, ($, result) => {
61
+ * $.return(result.getTag());
62
+ * });
63
+ * const compiled = East.compile(getTag.toIR(), []);
64
+ * compiled(Expr.variant("ok", 42n)); // "ok"
65
+ * compiled(Expr.variant("error", "fail")); // "error"
66
+ * ```
67
+ */
68
+ getTag() {
69
+ const handlers = Object.fromEntries(Object.keys(this.cases).map(caseName => [caseName, () => caseName]));
70
+ return Expr.match(this, handlers);
71
+ }
72
+ /**
73
+ * Checks if the variant has a specific case tag.
74
+ *
75
+ * @param name - The case name to check for
76
+ * @returns A BooleanExpr that is true if the variant has the specified tag
77
+ *
78
+ * @see {@link unwrap} to extract the value associated with a case
79
+ * @see {@link getTag} to get the tag as a string
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * const OptionType = VariantType({ some: IntegerType, none: NullType });
84
+ *
85
+ * const isSome = East.function([OptionType], BooleanType, ($, opt) => {
86
+ * $.return(opt.hasTag("some"));
87
+ * });
88
+ * const compiled = East.compile(isSome.toIR(), []);
89
+ * compiled(Expr.variant("some", 42n)); // true
90
+ * compiled(Expr.variant("none", null)); // false
91
+ * ```
92
+ */
93
+ hasTag(name) {
94
+ const handlers = Object.fromEntries(Object.keys(this.cases).map(caseName => [caseName, () => name === caseName]));
95
+ return Expr.match(this, handlers);
96
+ }
97
+ unwrap(name = "some", onOther = ($) => $.error(`Variant does not have case ${String(name)}`, get_location(2))) {
98
+ if (onOther === undefined) {
99
+ onOther = $ => $.error(`Variant does not have case ${String(name)}`, get_location(2)); // expression-based error should use parent call location
100
+ }
101
+ const handlers = Object.fromEntries(Object.keys(this.cases).map(caseName => [caseName, caseName === name ? (_$, data) => data : ($, _data) => onOther($)]));
102
+ return Expr.match(this, handlers);
103
+ }
104
+ }
105
+ //# sourceMappingURL=variant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../../src/expr/variant.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzF,OAAO,EAAE,IAAI,EAAe,MAAM,WAAW,CAAC;AAG9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,OAAO,WAA+C,SAAQ,IAAwB;IACtE;IAApB,YAAoB,KAAY,EAAE,GAAQ,EAAE,OAAe;QACzD,KAAK,CAAC,GAAG,CAAC,IAA0B,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QADlC,UAAK,GAAL,KAAK,CAAO;IAEhC,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM;QACJ,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAU,CAAC,CAAsC,CAAC;QACvJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,IAAiB;QACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAU,CAAC,CAAuC,CAAC;QACjK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IA4CD,MAAM,CAAC,OAAe,MAAM,EAAE,UAA+C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACxJ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAQ,CAAC,CAAC,yDAAyD;QACzJ,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAA2B,EAAE,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAA0B,EAAE,KAAU,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAU,CAAC,CAAmC,CAAC;QACnQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAQ,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,80 @@
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
+ * @remarks
6
+ */
7
+ import { type EastType, type ValueTypeOf } from "./types.js";
8
+ import { type EastTypeValue } from "./type_of_type.js";
9
+ /**
10
+ * Generates a random East type for fuzz testing.
11
+ *
12
+ * @param depth - Current nesting depth (used internally to limit recursion)
13
+ * @returns A randomly generated {@link EastType}
14
+ *
15
+ * @remarks
16
+ * Types are kept reasonably simple to avoid generating huge nested structures:
17
+ * - Maximum nesting depth of 3 levels
18
+ * - Higher chance of primitives at deeper levels
19
+ * - Sets and Dicts use {@link StringType} keys (immutability constraint)
20
+ * - Structs have 0-4 random fields
21
+ * - Variants have 1-3 random cases, with 30% chance of {@link OptionType}
22
+ */
23
+ export declare function randomType(depth?: number): EastType;
24
+ /**
25
+ * Creates a function that generates random values of a given type.
26
+ *
27
+ * @typeParam T - The {@link EastType} to generate values for
28
+ * @param type - The type to generate values for
29
+ * @returns A function that returns a new random value each time it's called
30
+ * @throws When the type is {@link NeverType} or {@link FunctionType}
31
+ *
32
+ * @remarks
33
+ * Generates diverse test values for each type:
34
+ * - Floats include special values (NaN, ±Infinity, ±0.0)
35
+ * - Integers range from -100 to 100 (as bigint)
36
+ * - Strings use random alphanumeric sequences (0-20 chars)
37
+ * - DateTimes are within one year of 2025-01-01
38
+ * - Collections have 0-4 elements (kept small for performance)
39
+ * - Variants randomly select one of their cases
40
+ */
41
+ export declare function randomValueFor(type: EastTypeValue): () => any;
42
+ export declare function randomValueFor<T extends EastType>(type: T): () => ValueTypeOf<T>;
43
+ /**
44
+ * Runs a fuzz test over a generic function parameterized by a type.
45
+ *
46
+ * @param fn - Factory function that takes a type and returns a test function for values of that type
47
+ * @param n_types - Number of random types to test
48
+ * @param n_samples - Number of random values to test per type
49
+ * @returns `true` if all tests passed, `false` if any failed
50
+ *
51
+ * @remarks
52
+ * For each randomly generated type:
53
+ * 1. Creates a test function using the provided factory
54
+ * 2. Generates random values of that type
55
+ * 3. Runs the test function on each value
56
+ * 4. Reports any failures to stderr with type, value, and error details
57
+ *
58
+ * Attempts to generate unique types (up to 100 attempts per type) to maximize
59
+ * test coverage. Prints summary statistics showing success/failure counts.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * import { printFor, parseFor } from "./serialization/east.js";
64
+ *
65
+ * // Test that serialization and parsing work
66
+ * await fuzzerTest(
67
+ * (type) => async (value) => {
68
+ * const parse = parseFor(type);
69
+ * const result = parse(serialized);
70
+ * if (!result.success) {
71
+ * throw new Error(`Parse failed: ${result.error}`);
72
+ * }
73
+ * },
74
+ * 100, // test 100 random types
75
+ * 10 // with 10 random values each
76
+ * );
77
+ * ```
78
+ */
79
+ export declare function fuzzerTest(fn: (type: EastType) => (value: any) => Promise<void>, n_types?: number, n_samples?: number): Promise<boolean>;
80
+ //# sourceMappingURL=fuzz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzz.d.ts","sourceRoot":"","sources":["../../src/fuzz.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,WAAW,EAcjB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGxE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,KAAK,GAAE,MAAU,GAAG,QAAQ,CAqDtD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,CAAA;AAC9D,wBAAgB,cAAc,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAA;AAyGjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EACrD,OAAO,GAAE,MAAY,EACrB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,OAAO,CAAC,CAyDlB"}