@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.
- package/LICENSE.md +682 -0
- package/README.md +276 -0
- package/dist/src/analyze.d.ts +95 -0
- package/dist/src/analyze.d.ts.map +1 -0
- package/dist/src/analyze.js +1110 -0
- package/dist/src/analyze.js.map +1 -0
- package/dist/src/ast.d.ts +263 -0
- package/dist/src/ast.d.ts.map +1 -0
- package/dist/src/ast.js +151 -0
- package/dist/src/ast.js.map +1 -0
- package/dist/src/ast_to_ir.d.ts +24 -0
- package/dist/src/ast_to_ir.d.ts.map +1 -0
- package/dist/src/ast_to_ir.js +834 -0
- package/dist/src/ast_to_ir.js.map +1 -0
- package/dist/src/builtins.d.ts +18 -0
- package/dist/src/builtins.d.ts.map +1 -0
- package/dist/src/builtins.js +1105 -0
- package/dist/src/builtins.js.map +1 -0
- package/dist/src/comparison.d.ts +28 -0
- package/dist/src/comparison.d.ts.map +1 -0
- package/dist/src/comparison.js +1017 -0
- package/dist/src/comparison.js.map +1 -0
- package/dist/src/compile.d.ts +22 -0
- package/dist/src/compile.d.ts.map +1 -0
- package/dist/src/compile.js +3260 -0
- package/dist/src/compile.js.map +1 -0
- package/dist/src/containers/ref.d.ts +106 -0
- package/dist/src/containers/ref.d.ts.map +1 -0
- package/dist/src/containers/ref.js +100 -0
- package/dist/src/containers/ref.js.map +1 -0
- package/dist/src/containers/sortedmap.d.ts +165 -0
- package/dist/src/containers/sortedmap.d.ts.map +1 -0
- package/dist/src/containers/sortedmap.js +237 -0
- package/dist/src/containers/sortedmap.js.map +1 -0
- package/dist/src/containers/sortedset.d.ts +185 -0
- package/dist/src/containers/sortedset.d.ts.map +1 -0
- package/dist/src/containers/sortedset.js +312 -0
- package/dist/src/containers/sortedset.js.map +1 -0
- package/dist/src/containers/variant.d.ts +131 -0
- package/dist/src/containers/variant.d.ts.map +1 -0
- package/dist/src/containers/variant.js +68 -0
- package/dist/src/containers/variant.js.map +1 -0
- package/dist/src/datetime_format/parse.d.ts +50 -0
- package/dist/src/datetime_format/parse.d.ts.map +1 -0
- package/dist/src/datetime_format/parse.js +908 -0
- package/dist/src/datetime_format/parse.js.map +1 -0
- package/dist/src/datetime_format/print.d.ts +35 -0
- package/dist/src/datetime_format/print.d.ts.map +1 -0
- package/dist/src/datetime_format/print.js +157 -0
- package/dist/src/datetime_format/print.js.map +1 -0
- package/dist/src/datetime_format/tokenize.d.ts +76 -0
- package/dist/src/datetime_format/tokenize.d.ts.map +1 -0
- package/dist/src/datetime_format/tokenize.js +271 -0
- package/dist/src/datetime_format/tokenize.js.map +1 -0
- package/dist/src/datetime_format/types.d.ts +99 -0
- package/dist/src/datetime_format/types.d.ts.map +1 -0
- package/dist/src/datetime_format/types.js +103 -0
- package/dist/src/datetime_format/types.js.map +1 -0
- package/dist/src/datetime_format/validate.d.ts +51 -0
- package/dist/src/datetime_format/validate.d.ts.map +1 -0
- package/dist/src/datetime_format/validate.js +208 -0
- package/dist/src/datetime_format/validate.js.map +1 -0
- package/dist/src/default.d.ts +21 -0
- package/dist/src/default.d.ts.map +1 -0
- package/dist/src/default.js +82 -0
- package/dist/src/default.js.map +1 -0
- package/dist/src/eastir.d.ts +33 -0
- package/dist/src/eastir.d.ts.map +1 -0
- package/dist/src/eastir.js +92 -0
- package/dist/src/eastir.js.map +1 -0
- package/dist/src/error.d.ts +13 -0
- package/dist/src/error.d.ts.map +1 -0
- package/dist/src/error.js +8 -0
- package/dist/src/error.js.map +1 -0
- package/dist/src/expr/array.d.ts +1711 -0
- package/dist/src/expr/array.d.ts.map +1 -0
- package/dist/src/expr/array.js +1805 -0
- package/dist/src/expr/array.js.map +1 -0
- package/dist/src/expr/ast.d.ts +17 -0
- package/dist/src/expr/ast.d.ts.map +1 -0
- package/dist/src/expr/ast.js +302 -0
- package/dist/src/expr/ast.js.map +1 -0
- package/dist/src/expr/blob.d.ts +141 -0
- package/dist/src/expr/blob.d.ts.map +1 -0
- package/dist/src/expr/blob.js +198 -0
- package/dist/src/expr/blob.js.map +1 -0
- package/dist/src/expr/block.d.ts +201 -0
- package/dist/src/expr/block.d.ts.map +1 -0
- package/dist/src/expr/block.js +1505 -0
- package/dist/src/expr/block.js.map +1 -0
- package/dist/src/expr/boolean.d.ts +207 -0
- package/dist/src/expr/boolean.d.ts.map +1 -0
- package/dist/src/expr/boolean.js +261 -0
- package/dist/src/expr/boolean.js.map +1 -0
- package/dist/src/expr/datetime.d.ts +544 -0
- package/dist/src/expr/datetime.d.ts.map +1 -0
- package/dist/src/expr/datetime.js +980 -0
- package/dist/src/expr/datetime.js.map +1 -0
- package/dist/src/expr/dict.d.ts +1242 -0
- package/dist/src/expr/dict.d.ts.map +1 -0
- package/dist/src/expr/dict.js +1492 -0
- package/dist/src/expr/dict.js.map +1 -0
- package/dist/src/expr/expr.d.ts +95 -0
- package/dist/src/expr/expr.d.ts.map +1 -0
- package/dist/src/expr/expr.js +171 -0
- package/dist/src/expr/expr.js.map +1 -0
- package/dist/src/expr/float.d.ts +357 -0
- package/dist/src/expr/float.d.ts.map +1 -0
- package/dist/src/expr/float.js +637 -0
- package/dist/src/expr/float.js.map +1 -0
- package/dist/src/expr/function.d.ts +46 -0
- package/dist/src/expr/function.d.ts.map +1 -0
- package/dist/src/expr/function.js +58 -0
- package/dist/src/expr/function.js.map +1 -0
- package/dist/src/expr/index.d.ts +450 -0
- package/dist/src/expr/index.d.ts.map +1 -0
- package/dist/src/expr/index.js +423 -0
- package/dist/src/expr/index.js.map +1 -0
- package/dist/src/expr/integer.d.ts +256 -0
- package/dist/src/expr/integer.d.ts.map +1 -0
- package/dist/src/expr/integer.js +311 -0
- package/dist/src/expr/integer.js.map +1 -0
- package/dist/src/expr/libs/array.d.ts +106 -0
- package/dist/src/expr/libs/array.d.ts.map +1 -0
- package/dist/src/expr/libs/array.js +140 -0
- package/dist/src/expr/libs/array.js.map +1 -0
- package/dist/src/expr/libs/blob.d.ts +42 -0
- package/dist/src/expr/libs/blob.d.ts.map +1 -0
- package/dist/src/expr/libs/blob.js +70 -0
- package/dist/src/expr/libs/blob.js.map +1 -0
- package/dist/src/expr/libs/datetime.d.ts +479 -0
- package/dist/src/expr/libs/datetime.d.ts.map +1 -0
- package/dist/src/expr/libs/datetime.js +624 -0
- package/dist/src/expr/libs/datetime.js.map +1 -0
- package/dist/src/expr/libs/dict.d.ts +66 -0
- package/dist/src/expr/libs/dict.d.ts.map +1 -0
- package/dist/src/expr/libs/dict.js +77 -0
- package/dist/src/expr/libs/dict.js.map +1 -0
- package/dist/src/expr/libs/float.d.ts +299 -0
- package/dist/src/expr/libs/float.d.ts.map +1 -0
- package/dist/src/expr/libs/float.js +564 -0
- package/dist/src/expr/libs/float.js.map +1 -0
- package/dist/src/expr/libs/integer.d.ts +228 -0
- package/dist/src/expr/libs/integer.d.ts.map +1 -0
- package/dist/src/expr/libs/integer.js +398 -0
- package/dist/src/expr/libs/integer.js.map +1 -0
- package/dist/src/expr/libs/set.d.ts +59 -0
- package/dist/src/expr/libs/set.d.ts.map +1 -0
- package/dist/src/expr/libs/set.js +69 -0
- package/dist/src/expr/libs/set.js.map +1 -0
- package/dist/src/expr/libs/string.d.ts +71 -0
- package/dist/src/expr/libs/string.d.ts.map +1 -0
- package/dist/src/expr/libs/string.js +75 -0
- package/dist/src/expr/libs/string.js.map +1 -0
- package/dist/src/expr/never.d.ts +15 -0
- package/dist/src/expr/never.d.ts.map +1 -0
- package/dist/src/expr/never.js +12 -0
- package/dist/src/expr/never.js.map +1 -0
- package/dist/src/expr/null.d.ts +15 -0
- package/dist/src/expr/null.d.ts.map +1 -0
- package/dist/src/expr/null.js +12 -0
- package/dist/src/expr/null.js.map +1 -0
- package/dist/src/expr/ref.d.ts +103 -0
- package/dist/src/expr/ref.d.ts.map +1 -0
- package/dist/src/expr/ref.js +131 -0
- package/dist/src/expr/ref.js.map +1 -0
- package/dist/src/expr/regex_validation.d.ts +25 -0
- package/dist/src/expr/regex_validation.d.ts.map +1 -0
- package/dist/src/expr/regex_validation.js +130 -0
- package/dist/src/expr/regex_validation.js.map +1 -0
- package/dist/src/expr/set.d.ts +1071 -0
- package/dist/src/expr/set.d.ts.map +1 -0
- package/dist/src/expr/set.js +1137 -0
- package/dist/src/expr/set.js.map +1 -0
- package/dist/src/expr/string.d.ts +414 -0
- package/dist/src/expr/string.d.ts.map +1 -0
- package/dist/src/expr/string.js +683 -0
- package/dist/src/expr/string.js.map +1 -0
- package/dist/src/expr/struct.d.ts +48 -0
- package/dist/src/expr/struct.d.ts.map +1 -0
- package/dist/src/expr/struct.js +65 -0
- package/dist/src/expr/struct.js.map +1 -0
- package/dist/src/expr/types.d.ts +68 -0
- package/dist/src/expr/types.d.ts.map +1 -0
- package/dist/src/expr/types.js +6 -0
- package/dist/src/expr/types.js.map +1 -0
- package/dist/src/expr/variant.d.ts +137 -0
- package/dist/src/expr/variant.d.ts.map +1 -0
- package/dist/src/expr/variant.js +105 -0
- package/dist/src/expr/variant.js.map +1 -0
- package/dist/src/fuzz.d.ts +80 -0
- package/dist/src/fuzz.d.ts.map +1 -0
- package/dist/src/fuzz.js +300 -0
- package/dist/src/fuzz.js.map +1 -0
- package/dist/src/index.d.ts +21 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/internal.d.ts +36 -0
- package/dist/src/internal.d.ts.map +1 -0
- package/dist/src/internal.js +11 -0
- package/dist/src/internal.js.map +1 -0
- package/dist/src/ir.d.ts +1571 -0
- package/dist/src/ir.d.ts.map +1 -0
- package/dist/src/ir.js +56 -0
- package/dist/src/ir.js.map +1 -0
- package/dist/src/location.d.ts +48 -0
- package/dist/src/location.d.ts.map +1 -0
- package/dist/src/location.js +62 -0
- package/dist/src/location.js.map +1 -0
- package/dist/src/platform.d.ts +21 -0
- package/dist/src/platform.d.ts.map +1 -0
- package/dist/src/platform.js +8 -0
- package/dist/src/platform.js.map +1 -0
- package/dist/src/serialization/beast.d.ts +39 -0
- package/dist/src/serialization/beast.d.ts.map +1 -0
- package/dist/src/serialization/beast.js +555 -0
- package/dist/src/serialization/beast.js.map +1 -0
- package/dist/src/serialization/beast2-stream.d.ts +38 -0
- package/dist/src/serialization/beast2-stream.d.ts.map +1 -0
- package/dist/src/serialization/beast2-stream.js +665 -0
- package/dist/src/serialization/beast2-stream.js.map +1 -0
- package/dist/src/serialization/beast2.d.ts +41 -0
- package/dist/src/serialization/beast2.d.ts.map +1 -0
- package/dist/src/serialization/beast2.js +489 -0
- package/dist/src/serialization/beast2.js.map +1 -0
- package/dist/src/serialization/binary-utils.d.ts +151 -0
- package/dist/src/serialization/binary-utils.d.ts.map +1 -0
- package/dist/src/serialization/binary-utils.js +929 -0
- package/dist/src/serialization/binary-utils.js.map +1 -0
- package/dist/src/serialization/east.d.ts +84 -0
- package/dist/src/serialization/east.d.ts.map +1 -0
- package/dist/src/serialization/east.js +1802 -0
- package/dist/src/serialization/east.js.map +1 -0
- package/dist/src/serialization/index.d.ts +11 -0
- package/dist/src/serialization/index.d.ts.map +1 -0
- package/dist/src/serialization/index.js +12 -0
- package/dist/src/serialization/index.js.map +1 -0
- package/dist/src/serialization/json.d.ts +36 -0
- package/dist/src/serialization/json.d.ts.map +1 -0
- package/dist/src/serialization/json.js +849 -0
- package/dist/src/serialization/json.js.map +1 -0
- package/dist/src/type_of_type.d.ts +115 -0
- package/dist/src/type_of_type.d.ts.map +1 -0
- package/dist/src/type_of_type.js +362 -0
- package/dist/src/type_of_type.js.map +1 -0
- package/dist/src/types.d.ts +648 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +1631 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/expr/string.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AACnH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAIjD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAe,MAAM,WAAW,CAAC;AAExE,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,UAAW,SAAQ,IAAgB;IAC9C,YAAY,GAAQ,EAAE,UAAkB;QACtC,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAI,IAAO;QACd,IAAI,CAAC,UAAU,CAAC,IAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,IAAW;YACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,OAAO;YAChB,eAAe,EAAE,CAAC,IAAW,CAAC;YAC9B,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAgB,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAqB,IAAO;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YACpD,eAAe,EAAE,CAAC,IAAI,CAAC;YACvB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,MAAiC;QACtC,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,cAAc;YACvB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;SACxC,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,KAAiC;QACtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,cAAc;YACvB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;SACvC,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,cAAc;YACvB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAgB,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,IAAgC,EAAE,EAA8B;QACxE,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,qBAAqB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,iBAAiB;YAC1B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;SAC7C,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,iBAAiB;YAC1B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,iBAAiB;YAC1B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,SAAoC;QACxC,MAAM,YAAY,GAAG,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC;YAC3B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,aAAa;YACtB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;SAC3C,CAA0B,CAAC;IAC9B,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,YAAY;YACrB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,iBAAiB;YAC1B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,eAAe;YACxB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAe,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,CAAC,MAAiC;QAC1C,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,kBAAkB;YAC3B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;SACxC,CAAgB,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,MAAiC;QACxC,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,gBAAgB;YACzB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;SACxC,CAAgB,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,QAAQ,CAAC,gBAAoD;QAC3D,IAAI,gBAAgB,YAAY,MAAM,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,gBAA0B,CAAC;YAC5C,MAAM,UAAU,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;YAE7D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,uDAAuD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,4CAA4C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5E,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBAC1C,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;gBACzB,OAAO,EAAE,eAAe;gBACxB,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC;aACnD,CAAgB,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,qBAAqB,CAAC,gBAAuC,EAAE,UAAU,CAAC,CAAC;YAChG,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;gBACzB,OAAO,EAAE,gBAAgB;gBACzB,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;aAC3C,CAAgB,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,CAAC,gBAAoD;QAC1D,IAAI,gBAAgB,YAAY,MAAM,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,gBAA0B,CAAC;YAC5C,MAAM,UAAU,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;YAE7D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,uDAAuD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,4CAA4C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5E,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBAC1C,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;gBACzB,OAAO,EAAE,cAAc;gBACvB,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC;aACnD,CAAgB,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;gBACzB,OAAO,EAAE,eAAe;gBACxB,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;aAC3C,CAAgB,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,CAAC,WAA+C,EAAE,YAAuC;QAC9F,IAAI,WAAW,YAAY,MAAM,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,WAAqB,CAAC;YAEvC,uFAAuF;YACvF,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvD,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACtE,MAAM,UAAU,GAAG,+BAA+B,CAAC,kBAAkB,CAAC,CAAC;YAEvE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,uDAAuD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,4CAA4C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5E,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBAC1C,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;gBACzB,OAAO,EAAE,cAAc;gBACvB,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;aAC/D,CAAe,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAkC,EAAE,UAAU,CAAC,CAAC;YACxF,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;gBACzB,OAAO,EAAE,eAAe;gBACxB,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC;aACpD,CAAe,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,kBAAkB;YAC3B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAuB,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,mBAAmB;YAC5B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B,CAAuB,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -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 @@
|
|
|
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"}
|