@elaraai/east 0.0.1-beta.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +15 -666
- package/README.md +113 -88
- package/dist/src/analyze.d.ts +3 -0
- package/dist/src/analyze.d.ts.map +1 -1
- package/dist/src/analyze.js +223 -111
- package/dist/src/analyze.js.map +1 -1
- package/dist/src/analyze.spec.d.ts +2 -0
- package/dist/src/analyze.spec.d.ts.map +1 -0
- package/dist/src/analyze.spec.js +445 -0
- package/dist/src/analyze.spec.js.map +1 -0
- package/dist/src/ast.d.ts +54 -35
- package/dist/src/ast.d.ts.map +1 -1
- package/dist/src/ast_to_ir.coerce_to.spec.d.ts +15 -0
- package/dist/src/ast_to_ir.coerce_to.spec.d.ts.map +1 -0
- package/dist/src/ast_to_ir.coerce_to.spec.js +420 -0
- package/dist/src/ast_to_ir.coerce_to.spec.js.map +1 -0
- package/dist/src/ast_to_ir.d.ts +18 -4
- package/dist/src/ast_to_ir.d.ts.map +1 -1
- package/dist/src/ast_to_ir.js +233 -178
- package/dist/src/ast_to_ir.js.map +1 -1
- package/dist/src/builtins.d.ts +1 -1
- package/dist/src/builtins.d.ts.map +1 -1
- package/dist/src/builtins.js +194 -2
- package/dist/src/builtins.js.map +1 -1
- package/dist/src/comparison.d.ts +2 -2
- package/dist/src/comparison.d.ts.map +1 -1
- package/dist/src/comparison.js +115 -40
- package/dist/src/comparison.js.map +1 -1
- package/dist/src/comparison.spec.d.ts +2 -0
- package/dist/src/comparison.spec.d.ts.map +1 -0
- package/dist/src/comparison.spec.js +1200 -0
- package/dist/src/comparison.spec.js.map +1 -0
- package/dist/src/compile.d.ts +31 -9
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +1048 -548
- package/dist/src/compile.js.map +1 -1
- package/dist/src/containers/matrix.d.ts +15 -0
- package/dist/src/containers/matrix.d.ts.map +1 -0
- package/dist/src/containers/matrix.js +15 -0
- package/dist/src/containers/matrix.js.map +1 -0
- package/dist/src/containers/ref.d.ts.map +1 -1
- package/dist/src/containers/ref.js +1 -1
- package/dist/src/containers/ref.js.map +1 -1
- package/dist/src/containers/sortedmap.spec.d.ts +2 -0
- package/dist/src/containers/sortedmap.spec.d.ts.map +1 -0
- package/dist/src/containers/sortedmap.spec.js +180 -0
- package/dist/src/containers/sortedmap.spec.js.map +1 -0
- package/dist/src/containers/sortedset.spec.d.ts +2 -0
- package/dist/src/containers/sortedset.spec.d.ts.map +1 -0
- package/dist/src/containers/sortedset.spec.js +228 -0
- package/dist/src/containers/sortedset.spec.js.map +1 -0
- package/dist/src/containers/variant.d.ts.map +1 -1
- package/dist/src/containers/variant.js +1 -1
- package/dist/src/containers/variant.js.map +1 -1
- package/dist/src/containers/variant.spec.d.ts +2 -0
- package/dist/src/containers/variant.spec.d.ts.map +1 -0
- package/dist/src/containers/variant.spec.js +217 -0
- package/dist/src/containers/variant.spec.js.map +1 -0
- package/dist/src/datetime_format/parse.spec.d.ts +6 -0
- package/dist/src/datetime_format/parse.spec.d.ts.map +1 -0
- package/dist/src/datetime_format/parse.spec.js +379 -0
- package/dist/src/datetime_format/parse.spec.js.map +1 -0
- package/dist/src/datetime_format/print.spec.d.ts +6 -0
- package/dist/src/datetime_format/print.spec.d.ts.map +1 -0
- package/dist/src/datetime_format/print.spec.js +257 -0
- package/dist/src/datetime_format/print.spec.js.map +1 -0
- package/dist/src/datetime_format/tokenize.spec.d.ts +2 -0
- package/dist/src/datetime_format/tokenize.spec.d.ts.map +1 -0
- package/dist/src/datetime_format/tokenize.spec.js +508 -0
- package/dist/src/datetime_format/tokenize.spec.js.map +1 -0
- package/dist/src/datetime_format/types.d.ts +23 -23
- package/dist/src/default.d.ts.map +1 -1
- package/dist/src/default.js +33 -0
- package/dist/src/default.js.map +1 -1
- package/dist/src/default.spec.d.ts +2 -0
- package/dist/src/default.spec.d.ts.map +1 -0
- package/dist/src/default.spec.js +178 -0
- package/dist/src/default.spec.js.map +1 -0
- package/dist/src/eastir.d.ts +7 -0
- package/dist/src/eastir.d.ts.map +1 -1
- package/dist/src/eastir.js +55 -7
- package/dist/src/eastir.js.map +1 -1
- package/dist/src/error.d.ts +14 -4
- package/dist/src/error.d.ts.map +1 -1
- package/dist/src/error.js +28 -3
- package/dist/src/error.js.map +1 -1
- package/dist/src/example.d.ts +87 -0
- package/dist/src/example.d.ts.map +1 -0
- package/dist/src/example.js +18 -0
- package/dist/src/example.js.map +1 -0
- package/dist/src/expr/array.d.ts +43 -1
- package/dist/src/expr/array.d.ts.map +1 -1
- package/dist/src/expr/array.js +103 -53
- package/dist/src/expr/array.js.map +1 -1
- package/dist/src/expr/ast.d.ts +1 -1
- package/dist/src/expr/ast.d.ts.map +1 -1
- package/dist/src/expr/ast.js +112 -54
- package/dist/src/expr/ast.js.map +1 -1
- package/dist/src/expr/asyncfunction.d.ts.map +1 -1
- package/dist/src/expr/asyncfunction.js +6 -4
- package/dist/src/expr/asyncfunction.js.map +1 -1
- package/dist/src/expr/blob.d.ts +48 -0
- package/dist/src/expr/blob.d.ts.map +1 -1
- package/dist/src/expr/blob.js +63 -8
- package/dist/src/expr/blob.js.map +1 -1
- package/dist/src/expr/block.d.ts +213 -12
- package/dist/src/expr/block.d.ts.map +1 -1
- package/dist/src/expr/block.js +796 -293
- package/dist/src/expr/block.js.map +1 -1
- package/dist/src/expr/boolean.d.ts +44 -0
- package/dist/src/expr/boolean.d.ts.map +1 -1
- package/dist/src/expr/boolean.js +58 -6
- package/dist/src/expr/boolean.js.map +1 -1
- package/dist/src/expr/datetime.d.ts +135 -0
- package/dist/src/expr/datetime.d.ts.map +1 -1
- package/dist/src/expr/datetime.js +184 -34
- package/dist/src/expr/datetime.js.map +1 -1
- package/dist/src/expr/dict.d.ts +47 -2
- package/dist/src/expr/dict.d.ts.map +1 -1
- package/dist/src/expr/dict.js +122 -61
- package/dist/src/expr/dict.js.map +1 -1
- package/dist/src/expr/expr.d.ts +3 -1
- package/dist/src/expr/expr.d.ts.map +1 -1
- package/dist/src/expr/expr.js +4 -3
- package/dist/src/expr/expr.js.map +1 -1
- package/dist/src/expr/float.d.ts +153 -0
- package/dist/src/expr/float.d.ts.map +1 -1
- package/dist/src/expr/float.js +191 -17
- package/dist/src/expr/float.js.map +1 -1
- package/dist/src/expr/function.d.ts +7 -2
- package/dist/src/expr/function.d.ts.map +1 -1
- package/dist/src/expr/function.js +6 -4
- package/dist/src/expr/function.js.map +1 -1
- package/dist/src/expr/index.d.ts +186 -2
- package/dist/src/expr/index.d.ts.map +1 -1
- package/dist/src/expr/index.js +183 -2
- package/dist/src/expr/index.js.map +1 -1
- package/dist/src/expr/integer.d.ts +180 -0
- package/dist/src/expr/integer.d.ts.map +1 -1
- package/dist/src/expr/integer.js +189 -18
- package/dist/src/expr/integer.js.map +1 -1
- package/dist/src/expr/libs/array.js +3 -3
- package/dist/src/expr/libs/array.js.map +1 -1
- package/dist/src/expr/libs/blob.js +3 -3
- package/dist/src/expr/libs/blob.js.map +1 -1
- package/dist/src/expr/libs/dict.js +1 -1
- package/dist/src/expr/libs/dict.js.map +1 -1
- package/dist/src/expr/libs/matrix.d.ts +17 -0
- package/dist/src/expr/libs/matrix.d.ts.map +1 -0
- package/dist/src/expr/libs/matrix.js +60 -0
- package/dist/src/expr/libs/matrix.js.map +1 -0
- package/dist/src/expr/libs/set.js +1 -1
- package/dist/src/expr/libs/set.js.map +1 -1
- package/dist/src/expr/libs/string.d.ts.map +1 -1
- package/dist/src/expr/libs/string.js +2 -1
- package/dist/src/expr/libs/string.js.map +1 -1
- package/dist/src/expr/libs/vector.d.ts +16 -0
- package/dist/src/expr/libs/vector.d.ts.map +1 -0
- package/dist/src/expr/libs/vector.js +44 -0
- package/dist/src/expr/libs/vector.js.map +1 -0
- package/dist/src/expr/matrix.d.ts +109 -0
- package/dist/src/expr/matrix.d.ts.map +1 -0
- package/dist/src/expr/matrix.js +224 -0
- package/dist/src/expr/matrix.js.map +1 -0
- package/dist/src/expr/recursive.d.ts +83 -0
- package/dist/src/expr/recursive.d.ts.map +1 -0
- package/dist/src/expr/recursive.js +99 -0
- package/dist/src/expr/recursive.js.map +1 -0
- package/dist/src/expr/ref.js +5 -5
- package/dist/src/expr/ref.js.map +1 -1
- package/dist/src/expr/set.d.ts +44 -2
- package/dist/src/expr/set.d.ts.map +1 -1
- package/dist/src/expr/set.js +102 -52
- package/dist/src/expr/set.js.map +1 -1
- package/dist/src/expr/string.d.ts +134 -0
- package/dist/src/expr/string.d.ts.map +1 -1
- package/dist/src/expr/string.js +173 -23
- package/dist/src/expr/string.js.map +1 -1
- package/dist/src/expr/struct.d.ts +1 -1
- package/dist/src/expr/struct.d.ts.map +1 -1
- package/dist/src/expr/struct.js +2 -2
- package/dist/src/expr/struct.js.map +1 -1
- package/dist/src/expr/types.d.ts +12 -9
- package/dist/src/expr/types.d.ts.map +1 -1
- package/dist/src/expr/variant.d.ts +108 -11
- package/dist/src/expr/variant.d.ts.map +1 -1
- package/dist/src/expr/variant.js +76 -38
- package/dist/src/expr/variant.js.map +1 -1
- package/dist/src/expr/vector.d.ts +102 -0
- package/dist/src/expr/vector.d.ts.map +1 -0
- package/dist/src/expr/vector.js +202 -0
- package/dist/src/expr/vector.js.map +1 -0
- package/dist/src/fuzz.d.ts +36 -2
- package/dist/src/fuzz.d.ts.map +1 -1
- package/dist/src/fuzz.js +409 -77
- package/dist/src/fuzz.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +12 -2
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +13 -2
- package/dist/src/internal.js.map +1 -1
- package/dist/src/ir.d.ts +1754 -1484
- package/dist/src/ir.d.ts.map +1 -1
- package/dist/src/ir.js +51 -34
- package/dist/src/ir.js.map +1 -1
- package/dist/src/ir.spec.d.ts +2 -0
- package/dist/src/ir.spec.d.ts.map +1 -0
- package/dist/src/ir.spec.js +35 -0
- package/dist/src/ir.spec.js.map +1 -0
- package/dist/src/location.d.ts +56 -17
- package/dist/src/location.d.ts.map +1 -1
- package/dist/src/location.js +226 -29
- package/dist/src/location.js.map +1 -1
- package/dist/src/location.spec.d.ts +2 -0
- package/dist/src/location.spec.d.ts.map +1 -0
- package/dist/src/location.spec.js +102 -0
- package/dist/src/location.spec.js.map +1 -0
- package/dist/src/patch/apply.d.ts +15 -0
- package/dist/src/patch/apply.d.ts.map +1 -0
- package/dist/src/patch/apply.js +352 -0
- package/dist/src/patch/apply.js.map +1 -0
- package/dist/src/patch/compose.d.ts +15 -0
- package/dist/src/patch/compose.d.ts.map +1 -0
- package/dist/src/patch/compose.js +448 -0
- package/dist/src/patch/compose.js.map +1 -0
- package/dist/src/patch/diff.d.ts +15 -0
- package/dist/src/patch/diff.d.ts.map +1 -0
- package/dist/src/patch/diff.js +347 -0
- package/dist/src/patch/diff.js.map +1 -0
- package/dist/src/patch/fuzz.d.ts +73 -0
- package/dist/src/patch/fuzz.d.ts.map +1 -0
- package/dist/src/patch/fuzz.js +159 -0
- package/dist/src/patch/fuzz.js.map +1 -0
- package/dist/src/patch/index.d.ts +32 -0
- package/dist/src/patch/index.d.ts.map +1 -0
- package/dist/src/patch/index.js +48 -0
- package/dist/src/patch/index.js.map +1 -0
- package/dist/src/patch/invert.d.ts +15 -0
- package/dist/src/patch/invert.d.ts.map +1 -0
- package/dist/src/patch/invert.js +284 -0
- package/dist/src/patch/invert.js.map +1 -0
- package/dist/src/patch/merge.d.ts +56 -0
- package/dist/src/patch/merge.d.ts.map +1 -0
- package/dist/src/patch/merge.js +586 -0
- package/dist/src/patch/merge.js.map +1 -0
- package/dist/src/patch/merge.spec.d.ts +2 -0
- package/dist/src/patch/merge.spec.d.ts.map +1 -0
- package/dist/src/patch/merge.spec.js +1139 -0
- package/dist/src/patch/merge.spec.js.map +1 -0
- package/dist/src/patch/patch.spec.d.ts +2 -0
- package/dist/src/patch/patch.spec.d.ts.map +1 -0
- package/dist/src/patch/patch.spec.js +452 -0
- package/dist/src/patch/patch.spec.js.map +1 -0
- package/dist/src/patch/path.d.ts +115 -0
- package/dist/src/patch/path.d.ts.map +1 -0
- package/dist/src/patch/path.js +192 -0
- package/dist/src/patch/path.js.map +1 -0
- package/dist/src/patch/path.spec.d.ts +6 -0
- package/dist/src/patch/path.spec.d.ts.map +1 -0
- package/dist/src/patch/path.spec.js +322 -0
- package/dist/src/patch/path.spec.js.map +1 -0
- package/dist/src/patch/prune.d.ts +77 -0
- package/dist/src/patch/prune.d.ts.map +1 -0
- package/dist/src/patch/prune.js +115 -0
- package/dist/src/patch/prune.js.map +1 -0
- package/dist/src/patch/prune.spec.d.ts +6 -0
- package/dist/src/patch/prune.spec.d.ts.map +1 -0
- package/dist/src/patch/prune.spec.js +473 -0
- package/dist/src/patch/prune.spec.js.map +1 -0
- package/dist/src/patch/type_of_patch.d.ts +25 -0
- package/dist/src/patch/type_of_patch.d.ts.map +1 -0
- package/dist/src/patch/type_of_patch.js +144 -0
- package/dist/src/patch/type_of_patch.js.map +1 -0
- package/dist/src/patch/types.d.ts +220 -0
- package/dist/src/patch/types.d.ts.map +1 -0
- package/dist/src/patch/types.js +62 -0
- package/dist/src/patch/types.js.map +1 -0
- package/dist/src/patch/validate.d.ts +44 -0
- package/dist/src/patch/validate.d.ts.map +1 -0
- package/dist/src/patch/validate.js +190 -0
- package/dist/src/patch/validate.js.map +1 -0
- package/dist/src/patch/validate.spec.d.ts +6 -0
- package/dist/src/patch/validate.spec.d.ts.map +1 -0
- package/dist/src/patch/validate.spec.js +225 -0
- package/dist/src/patch/validate.spec.js.map +1 -0
- package/dist/src/patch/walk.d.ts +121 -0
- package/dist/src/patch/walk.d.ts.map +1 -0
- package/dist/src/patch/walk.js +385 -0
- package/dist/src/patch/walk.js.map +1 -0
- package/dist/src/patch/walk.spec.d.ts +6 -0
- package/dist/src/patch/walk.spec.d.ts.map +1 -0
- package/dist/src/patch/walk.spec.js +621 -0
- package/dist/src/patch/walk.spec.js.map +1 -0
- package/dist/src/platform.d.ts +6 -0
- package/dist/src/platform.d.ts.map +1 -1
- package/dist/src/platform.spec.d.ts +2 -0
- package/dist/src/platform.spec.d.ts.map +1 -0
- package/dist/src/platform.spec.js +330 -0
- package/dist/src/platform.spec.js.map +1 -0
- package/dist/src/serialization/beast.d.ts.map +1 -1
- package/dist/src/serialization/beast.js +12 -0
- package/dist/src/serialization/beast.js.map +1 -1
- package/dist/src/serialization/beast.spec.d.ts +6 -0
- package/dist/src/serialization/beast.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast.spec.js +406 -0
- package/dist/src/serialization/beast.spec.js.map +1 -0
- package/dist/src/serialization/beast2/index.d.ts +50 -0
- package/dist/src/serialization/beast2/index.d.ts.map +1 -0
- package/dist/src/serialization/beast2/index.js +756 -0
- package/dist/src/serialization/beast2/index.js.map +1 -0
- package/dist/src/serialization/beast2/index.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/index.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/index.spec.js +528 -0
- package/dist/src/serialization/beast2/index.spec.js.map +1 -0
- package/dist/src/serialization/beast2/sourcemap-table.d.ts +29 -0
- package/dist/src/serialization/beast2/sourcemap-table.d.ts.map +1 -0
- package/dist/src/serialization/beast2/sourcemap-table.js +82 -0
- package/dist/src/serialization/beast2/sourcemap-table.js.map +1 -0
- package/dist/src/serialization/beast2/string-table.d.ts +16 -0
- package/dist/src/serialization/beast2/string-table.d.ts.map +1 -0
- package/dist/src/serialization/beast2/string-table.js +38 -0
- package/dist/src/serialization/beast2/string-table.js.map +1 -0
- package/dist/src/serialization/beast2/type-table.d.ts +86 -0
- package/dist/src/serialization/beast2/type-table.d.ts.map +1 -0
- package/dist/src/serialization/beast2/type-table.js +618 -0
- package/dist/src/serialization/beast2/type-table.js.map +1 -0
- package/dist/src/serialization/beast2/value-table.d.ts +40 -0
- package/dist/src/serialization/beast2/value-table.d.ts.map +1 -0
- package/dist/src/serialization/beast2/value-table.js +157 -0
- package/dist/src/serialization/beast2/value-table.js.map +1 -0
- package/dist/src/serialization/binary-utils.d.ts +33 -0
- package/dist/src/serialization/binary-utils.d.ts.map +1 -1
- package/dist/src/serialization/binary-utils.js +157 -0
- package/dist/src/serialization/binary-utils.js.map +1 -1
- package/dist/src/serialization/csv.d.ts +17 -17
- package/dist/src/serialization/csv.d.ts.map +1 -1
- package/dist/src/serialization/csv.js +10 -8
- package/dist/src/serialization/csv.js.map +1 -1
- package/dist/src/serialization/csv.spec.d.ts +2 -0
- package/dist/src/serialization/csv.spec.d.ts.map +1 -0
- package/dist/src/serialization/csv.spec.js +556 -0
- package/dist/src/serialization/csv.spec.js.map +1 -0
- package/dist/src/serialization/east-inferred.spec.d.ts +2 -0
- package/dist/src/serialization/east-inferred.spec.d.ts.map +1 -0
- package/dist/src/serialization/east-inferred.spec.js +322 -0
- package/dist/src/serialization/east-inferred.spec.js.map +1 -0
- package/dist/src/serialization/east.d.ts +1 -1
- package/dist/src/serialization/east.d.ts.map +1 -1
- package/dist/src/serialization/east.js +178 -26
- package/dist/src/serialization/east.js.map +1 -1
- package/dist/src/serialization/east.spec.d.ts +2 -0
- package/dist/src/serialization/east.spec.d.ts.map +1 -0
- package/dist/src/serialization/east.spec.js +1548 -0
- package/dist/src/serialization/east.spec.js.map +1 -0
- package/dist/src/serialization/index.d.ts +1 -2
- package/dist/src/serialization/index.d.ts.map +1 -1
- package/dist/src/serialization/index.js +1 -2
- package/dist/src/serialization/index.js.map +1 -1
- package/dist/src/serialization/json.d.ts +1 -1
- package/dist/src/serialization/json.d.ts.map +1 -1
- package/dist/src/serialization/json.js +123 -24
- package/dist/src/serialization/json.js.map +1 -1
- package/dist/src/serialization/json.spec.d.ts +2 -0
- package/dist/src/serialization/json.spec.d.ts.map +1 -0
- package/dist/src/serialization/json.spec.js +1297 -0
- package/dist/src/serialization/json.spec.js.map +1 -0
- package/dist/src/type_of_type.d.ts +72 -35
- package/dist/src/type_of_type.d.ts.map +1 -1
- package/dist/src/type_of_type.is_data.spec.d.ts +6 -0
- package/dist/src/type_of_type.is_data.spec.d.ts.map +1 -0
- package/dist/src/type_of_type.is_data.spec.js +221 -0
- package/dist/src/type_of_type.is_data.spec.js.map +1 -0
- package/dist/src/type_of_type.js +355 -80
- package/dist/src/type_of_type.js.map +1 -1
- package/dist/src/type_of_type.to_etv.spec.d.ts +6 -0
- package/dist/src/type_of_type.to_etv.spec.d.ts.map +1 -0
- package/dist/src/type_of_type.to_etv.spec.js +263 -0
- package/dist/src/type_of_type.to_etv.spec.js.map +1 -0
- package/dist/src/types.d.ts +82 -12
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.error.spec.d.ts +2 -0
- package/dist/src/types.error.spec.d.ts.map +1 -0
- package/dist/src/types.error.spec.js +665 -0
- package/dist/src/types.error.spec.js.map +1 -0
- package/dist/src/types.js +663 -156
- package/dist/src/types.js.map +1 -1
- package/dist/src/types.spec.d.ts +2 -0
- package/dist/src/types.spec.d.ts.map +1 -0
- package/dist/src/types.spec.js +946 -0
- package/dist/src/types.spec.js.map +1 -0
- package/dist/src/walker.d.ts +65 -0
- package/dist/src/walker.d.ts.map +1 -0
- package/dist/src/walker.js +165 -0
- package/dist/src/walker.js.map +1 -0
- package/dist/src/walker.spec.d.ts +6 -0
- package/dist/src/walker.spec.d.ts.map +1 -0
- package/dist/src/walker.spec.js +109 -0
- package/dist/src/walker.spec.js.map +1 -0
- package/package.json +16 -38
- package/dist/src/serialization/beast2-stream.d.ts +0 -38
- package/dist/src/serialization/beast2-stream.d.ts.map +0 -1
- package/dist/src/serialization/beast2-stream.js +0 -670
- package/dist/src/serialization/beast2-stream.js.map +0 -1
- package/dist/src/serialization/beast2.d.ts +0 -41
- package/dist/src/serialization/beast2.d.ts.map +0 -1
- package/dist/src/serialization/beast2.js +0 -495
- package/dist/src/serialization/beast2.js.map +0 -1
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Beast2 v2 flat type table encoder and decoder.
|
|
7
|
+
*
|
|
8
|
+
* The type table is a flat array where each unique sub-type is defined once
|
|
9
|
+
* and referenced by varint index. Tag bytes serve as direct array indices
|
|
10
|
+
* into dispatch tables for zero-branch decoding.
|
|
11
|
+
*
|
|
12
|
+
* See devdocs/BEAST2.md for the format specification.
|
|
13
|
+
*/
|
|
14
|
+
import { toEastTypeValue } from "../../type_of_type.js";
|
|
15
|
+
import { getTypeId } from "../../types.js";
|
|
16
|
+
import { isVariant, variant } from "../../containers/variant.js";
|
|
17
|
+
import { BufferWriter, BufferReader } from "../binary-utils.js";
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Tag bytes (frequency-ordered, used as direct array indices)
|
|
20
|
+
// =============================================================================
|
|
21
|
+
const TAG_NULL = 0x00;
|
|
22
|
+
const TAG_STRING = 0x01;
|
|
23
|
+
const TAG_INTEGER = 0x02;
|
|
24
|
+
const TAG_FLOAT = 0x03;
|
|
25
|
+
const TAG_BOOLEAN = 0x04;
|
|
26
|
+
const TAG_DATETIME = 0x05;
|
|
27
|
+
const TAG_BLOB = 0x06;
|
|
28
|
+
const TAG_NEVER = 0x07;
|
|
29
|
+
const TAG_VARIANT = 0x08;
|
|
30
|
+
const TAG_STRUCT = 0x09;
|
|
31
|
+
const TAG_ARRAY = 0x0A;
|
|
32
|
+
const TAG_DICT = 0x0B;
|
|
33
|
+
const TAG_SET = 0x0C;
|
|
34
|
+
const TAG_REF = 0x0D;
|
|
35
|
+
const TAG_VECTOR = 0x0E;
|
|
36
|
+
const TAG_MATRIX = 0x0F;
|
|
37
|
+
const TAG_FUNCTION = 0x10;
|
|
38
|
+
const TAG_ASYNC_FUNCTION = 0x11;
|
|
39
|
+
const TAG_RECURSIVE = 0x12;
|
|
40
|
+
const TAG_FOR_TYPE = {
|
|
41
|
+
Null: TAG_NULL, String: TAG_STRING, Integer: TAG_INTEGER, Float: TAG_FLOAT,
|
|
42
|
+
Boolean: TAG_BOOLEAN, DateTime: TAG_DATETIME, Blob: TAG_BLOB, Never: TAG_NEVER,
|
|
43
|
+
Variant: TAG_VARIANT, Struct: TAG_STRUCT, Array: TAG_ARRAY, Dict: TAG_DICT,
|
|
44
|
+
Set: TAG_SET, Ref: TAG_REF, Vector: TAG_VECTOR, Matrix: TAG_MATRIX,
|
|
45
|
+
Function: TAG_FUNCTION, AsyncFunction: TAG_ASYNC_FUNCTION, Recursive: TAG_RECURSIVE,
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Builds a flat type table from types. Handles both EastType (which has
|
|
49
|
+
* recursive wrappers with .node) and EastTypeValue (which has depth-based
|
|
50
|
+
* Recursive(N) — no inner pointer, so cannot be recursive root).
|
|
51
|
+
*
|
|
52
|
+
* Usage:
|
|
53
|
+
* const builder = new TypeTableBuilder();
|
|
54
|
+
* const rootIdx = builder.add(myType); // EastType or EastTypeValue
|
|
55
|
+
* builder.addETV(someIRTypeAnnotation); // EastTypeValue from IR
|
|
56
|
+
* writeTypeTableSection(rootIdx, builder.entries, writer);
|
|
57
|
+
*/
|
|
58
|
+
export class TypeTableBuilder {
|
|
59
|
+
entries = [];
|
|
60
|
+
/** EastType pointer → table index */
|
|
61
|
+
etMap = new Map();
|
|
62
|
+
/** EastTypeValue object → table index (identity-based) */
|
|
63
|
+
etvMap = new Map();
|
|
64
|
+
/** type_id → table index (for cross-object lookup when identity fails) */
|
|
65
|
+
tidMap = new Map();
|
|
66
|
+
/** Recursive wrapper source ID (bigint) → table index */
|
|
67
|
+
recIdMap = new Map();
|
|
68
|
+
/** Get the type_id → index map (for IR type substitution). */
|
|
69
|
+
getIndexMap() {
|
|
70
|
+
return this.tidMap;
|
|
71
|
+
}
|
|
72
|
+
/** Create a shallow clone with the same entries and index maps. */
|
|
73
|
+
clone() {
|
|
74
|
+
const c = new TypeTableBuilder();
|
|
75
|
+
for (const e of this.entries)
|
|
76
|
+
c.entries.push(e);
|
|
77
|
+
for (const [k, v] of this.etMap)
|
|
78
|
+
c.etMap.set(k, v);
|
|
79
|
+
for (const [k, v] of this.etvMap)
|
|
80
|
+
c.etvMap.set(k, v);
|
|
81
|
+
for (const [k, v] of this.tidMap)
|
|
82
|
+
c.tidMap.set(k, v);
|
|
83
|
+
for (const [k, v] of this.recIdMap)
|
|
84
|
+
c.recIdMap.set(k, v);
|
|
85
|
+
return c;
|
|
86
|
+
}
|
|
87
|
+
/** Add a type. Accepts both EastType and EastTypeValue. */
|
|
88
|
+
add(type) {
|
|
89
|
+
if (isVariant(type)) {
|
|
90
|
+
return this.visitETV(type);
|
|
91
|
+
}
|
|
92
|
+
return this.visitET(type);
|
|
93
|
+
}
|
|
94
|
+
/** Add an EastTypeValue (for IR type annotations). */
|
|
95
|
+
addETV(etv) {
|
|
96
|
+
return this.visitETV(etv);
|
|
97
|
+
}
|
|
98
|
+
/** Look up an EastTypeValue's table index by identity, type_id, or recursive ref ID. */
|
|
99
|
+
indexOf(etv) {
|
|
100
|
+
const idx = this.etvMap.get(etv);
|
|
101
|
+
if (idx !== undefined)
|
|
102
|
+
return idx;
|
|
103
|
+
const tid = getTypeId(etv);
|
|
104
|
+
if (tid !== undefined) {
|
|
105
|
+
const tidIdx = this.tidMap.get(tid);
|
|
106
|
+
if (tidIdx !== undefined)
|
|
107
|
+
return tidIdx;
|
|
108
|
+
}
|
|
109
|
+
// Recursive ref: look up by the ref's bigint ID
|
|
110
|
+
if (etv.type === "Recursive" && etv.value?.type === "ref") {
|
|
111
|
+
const refId = etv.value.value;
|
|
112
|
+
const recIdx = this.recIdMap.get(refId);
|
|
113
|
+
if (recIdx !== undefined)
|
|
114
|
+
return recIdx;
|
|
115
|
+
}
|
|
116
|
+
throw new Error(`Type not in table: ${etv.type}`);
|
|
117
|
+
}
|
|
118
|
+
/** Check if an EastTypeValue is in the table (by identity, type_id, or recursive ref ID). */
|
|
119
|
+
has(etv) {
|
|
120
|
+
if (this.etvMap.has(etv))
|
|
121
|
+
return true;
|
|
122
|
+
const tid = getTypeId(etv);
|
|
123
|
+
if (tid !== undefined && this.tidMap.has(tid))
|
|
124
|
+
return true;
|
|
125
|
+
// Recursive ref: check by bigint ID
|
|
126
|
+
if (etv.type === "Recursive" && etv.value?.type === "ref") {
|
|
127
|
+
return this.recIdMap.has(etv.value.value);
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
// ── EastType walker (handles Recursive wrappers) ────────────────────
|
|
132
|
+
visitET(type) {
|
|
133
|
+
const existing = this.etMap.get(type);
|
|
134
|
+
if (existing !== undefined)
|
|
135
|
+
return existing;
|
|
136
|
+
const t = type;
|
|
137
|
+
if (t.type === "Recursive") {
|
|
138
|
+
// Allocate index BEFORE recursing — self-references find this index
|
|
139
|
+
const idx = this.allocate();
|
|
140
|
+
this.etMap.set(type, idx);
|
|
141
|
+
// Register type_id so ETV path can find this entry via tidMap
|
|
142
|
+
const recTid = getTypeId(type);
|
|
143
|
+
if (recTid !== undefined) {
|
|
144
|
+
this.tidMap.set(recTid, idx);
|
|
145
|
+
this.recIdMap.set(BigInt(recTid), idx);
|
|
146
|
+
}
|
|
147
|
+
const innerIdx = this.visitET(t.node);
|
|
148
|
+
this.entries[idx] = { tag: TAG_RECURSIVE, params: varint(innerIdx) };
|
|
149
|
+
return idx;
|
|
150
|
+
}
|
|
151
|
+
// Check EastTypeValue identity cache for dedup
|
|
152
|
+
const etv = toEastTypeValue(type);
|
|
153
|
+
const etvIdx = this.etvMap.get(etv);
|
|
154
|
+
if (etvIdx !== undefined) {
|
|
155
|
+
this.etMap.set(type, etvIdx);
|
|
156
|
+
return etvIdx;
|
|
157
|
+
}
|
|
158
|
+
// Primitives
|
|
159
|
+
if (t.type === "Never" || t.type === "Null" || t.type === "Boolean" ||
|
|
160
|
+
t.type === "Integer" || t.type === "Float" || t.type === "String" ||
|
|
161
|
+
t.type === "DateTime" || t.type === "Blob") {
|
|
162
|
+
return this.emitPrimitive(type, etv, t.type);
|
|
163
|
+
}
|
|
164
|
+
// Single-parameter containers
|
|
165
|
+
if (t.type === "Array" || t.type === "Ref") {
|
|
166
|
+
const elemIdx = this.visitET(t.value);
|
|
167
|
+
return this.emit(type, etv, TAG_FOR_TYPE[t.type], varint(elemIdx));
|
|
168
|
+
}
|
|
169
|
+
if (t.type === "Set") {
|
|
170
|
+
const elemIdx = this.visitET(t.key);
|
|
171
|
+
return this.emit(type, etv, TAG_SET, varint(elemIdx));
|
|
172
|
+
}
|
|
173
|
+
if (t.type === "Vector" || t.type === "Matrix") {
|
|
174
|
+
const elemIdx = this.visitET(t.element);
|
|
175
|
+
return this.emit(type, etv, TAG_FOR_TYPE[t.type], varint(elemIdx));
|
|
176
|
+
}
|
|
177
|
+
if (t.type === "Dict") {
|
|
178
|
+
const ki = this.visitET(t.key);
|
|
179
|
+
const vi = this.visitET(t.value);
|
|
180
|
+
return this.emit(type, etv, TAG_DICT, varints(ki, vi));
|
|
181
|
+
}
|
|
182
|
+
if (t.type === "Struct") {
|
|
183
|
+
return this.emitNamedFields(type, etv, TAG_STRUCT, Object.keys(t.fields), (name) => this.visitET(t.fields[name]));
|
|
184
|
+
}
|
|
185
|
+
if (t.type === "Variant") {
|
|
186
|
+
return this.emitNamedFields(type, etv, TAG_VARIANT, Object.keys(t.cases), (name) => this.visitET(t.cases[name]));
|
|
187
|
+
}
|
|
188
|
+
if (t.type === "Function" || t.type === "AsyncFunction") {
|
|
189
|
+
return this.emitFunc(type, etv, t.type, t.inputs.map((i) => this.visitET(i)), this.visitET(t.output));
|
|
190
|
+
}
|
|
191
|
+
throw new Error(`Unknown EastType: ${t.type}`);
|
|
192
|
+
}
|
|
193
|
+
// ── EastTypeValue walker (for lazily-discovered types) ──────────────
|
|
194
|
+
visitETV(etv) {
|
|
195
|
+
const existing = this.etvMap.get(etv);
|
|
196
|
+
if (existing !== undefined)
|
|
197
|
+
return existing;
|
|
198
|
+
// Check type_id for cross-path dedup (ET path may have already added this type)
|
|
199
|
+
const etvTid = getTypeId(etv);
|
|
200
|
+
if (etvTid !== undefined) {
|
|
201
|
+
const tidIdx = this.tidMap.get(etvTid);
|
|
202
|
+
if (tidIdx !== undefined)
|
|
203
|
+
return tidIdx;
|
|
204
|
+
}
|
|
205
|
+
const caseName = etv.type;
|
|
206
|
+
if (caseName === "Recursive") {
|
|
207
|
+
const inner = etv.value;
|
|
208
|
+
if (inner.type === "wrapper") {
|
|
209
|
+
// Recursive wrapper: allocate first, recurse into inner, fill.
|
|
210
|
+
const idx = this.allocate();
|
|
211
|
+
this.entries[idx] = { tag: TAG_RECURSIVE, params: EMPTY };
|
|
212
|
+
this.registerETV(etv, idx);
|
|
213
|
+
// Register wrapper's bigint ID so refs can find it
|
|
214
|
+
const wrapperId = inner.value.id;
|
|
215
|
+
this.recIdMap.set(wrapperId, idx);
|
|
216
|
+
const innerIdx = this.visitETV(inner.value.inner);
|
|
217
|
+
this.entries[idx] = { tag: TAG_RECURSIVE, params: varint(innerIdx) };
|
|
218
|
+
return idx;
|
|
219
|
+
}
|
|
220
|
+
// Self-reference Recursive(ref) — find existing wrapper by ID or type_id.
|
|
221
|
+
const refId = etv.value.value;
|
|
222
|
+
const recIdx = this.recIdMap.get(refId);
|
|
223
|
+
if (recIdx !== undefined)
|
|
224
|
+
return recIdx;
|
|
225
|
+
const tid = getTypeId(etv);
|
|
226
|
+
if (tid !== undefined) {
|
|
227
|
+
const tidIdx = this.tidMap.get(tid);
|
|
228
|
+
if (tidIdx !== undefined)
|
|
229
|
+
return tidIdx;
|
|
230
|
+
}
|
|
231
|
+
// Scan for wrapper by tag
|
|
232
|
+
for (let i = 0; i < this.entries.length; i++) {
|
|
233
|
+
if (this.entries[i]?.tag === TAG_RECURSIVE)
|
|
234
|
+
return i;
|
|
235
|
+
}
|
|
236
|
+
throw new Error("Recursive self-reference but no wrapper in table");
|
|
237
|
+
}
|
|
238
|
+
// Primitives
|
|
239
|
+
if (caseName === "Never" || caseName === "Null" || caseName === "Boolean" ||
|
|
240
|
+
caseName === "Integer" || caseName === "Float" || caseName === "String" ||
|
|
241
|
+
caseName === "DateTime" || caseName === "Blob") {
|
|
242
|
+
const idx = this.allocate();
|
|
243
|
+
this.registerETV(etv, idx);
|
|
244
|
+
this.entries[idx] = { tag: TAG_FOR_TYPE[caseName], params: EMPTY };
|
|
245
|
+
return idx;
|
|
246
|
+
}
|
|
247
|
+
// Single-parameter containers
|
|
248
|
+
if (caseName === "Array" || caseName === "Set" || caseName === "Ref" ||
|
|
249
|
+
caseName === "Vector" || caseName === "Matrix") {
|
|
250
|
+
const elemIdx = this.visitETV(etv.value);
|
|
251
|
+
const idx = this.allocate();
|
|
252
|
+
this.registerETV(etv, idx);
|
|
253
|
+
this.entries[idx] = { tag: TAG_FOR_TYPE[caseName], params: varint(elemIdx) };
|
|
254
|
+
return idx;
|
|
255
|
+
}
|
|
256
|
+
if (caseName === "Dict") {
|
|
257
|
+
const ki = this.visitETV(etv.value.key);
|
|
258
|
+
const vi = this.visitETV(etv.value.value);
|
|
259
|
+
const idx = this.allocate();
|
|
260
|
+
this.registerETV(etv, idx);
|
|
261
|
+
this.entries[idx] = { tag: TAG_DICT, params: varints(ki, vi) };
|
|
262
|
+
return idx;
|
|
263
|
+
}
|
|
264
|
+
if (caseName === "Struct") {
|
|
265
|
+
const fields = etv.value;
|
|
266
|
+
const indices = fields.map(f => this.visitETV(f.type));
|
|
267
|
+
const idx = this.emitNamedFieldsETV(etv, TAG_STRUCT, fields.map(f => f.name), indices);
|
|
268
|
+
return idx;
|
|
269
|
+
}
|
|
270
|
+
if (caseName === "Variant") {
|
|
271
|
+
const cases = etv.value;
|
|
272
|
+
const indices = cases.map(c => this.visitETV(c.type));
|
|
273
|
+
const idx = this.emitNamedFieldsETV(etv, TAG_VARIANT, cases.map(c => c.name), indices);
|
|
274
|
+
return idx;
|
|
275
|
+
}
|
|
276
|
+
if (caseName === "Function" || caseName === "AsyncFunction") {
|
|
277
|
+
const inputs = etv.value.inputs;
|
|
278
|
+
const inputIndices = inputs.map(i => this.visitETV(i));
|
|
279
|
+
const outputIdx = this.visitETV(etv.value.output);
|
|
280
|
+
const idx = this.emitFuncETV(etv, caseName, inputIndices, outputIdx);
|
|
281
|
+
return idx;
|
|
282
|
+
}
|
|
283
|
+
throw new Error(`Unknown EastTypeValue case: ${caseName}`);
|
|
284
|
+
}
|
|
285
|
+
// ── Helpers ─────────────────────────────────────────────────────────
|
|
286
|
+
allocate() {
|
|
287
|
+
const idx = this.entries.length;
|
|
288
|
+
this.entries.push(null); // placeholder, must be filled
|
|
289
|
+
return idx;
|
|
290
|
+
}
|
|
291
|
+
/** Register an EastTypeValue in both identity and type_id maps. */
|
|
292
|
+
registerETV(etv, idx) {
|
|
293
|
+
this.etvMap.set(etv, idx);
|
|
294
|
+
const tid = getTypeId(etv);
|
|
295
|
+
if (tid !== undefined)
|
|
296
|
+
this.tidMap.set(tid, idx);
|
|
297
|
+
}
|
|
298
|
+
emitPrimitive(et, etv, typeName) {
|
|
299
|
+
const idx = this.allocate();
|
|
300
|
+
this.etMap.set(et, idx);
|
|
301
|
+
this.registerETV(etv, idx);
|
|
302
|
+
this.entries[idx] = { tag: TAG_FOR_TYPE[typeName], params: EMPTY };
|
|
303
|
+
return idx;
|
|
304
|
+
}
|
|
305
|
+
emit(et, etv, tag, params) {
|
|
306
|
+
const idx = this.allocate();
|
|
307
|
+
this.etMap.set(et, idx);
|
|
308
|
+
this.registerETV(etv, idx);
|
|
309
|
+
this.entries[idx] = { tag, params };
|
|
310
|
+
return idx;
|
|
311
|
+
}
|
|
312
|
+
emitNamedFields(et, etv, tag, names, resolve) {
|
|
313
|
+
const indices = names.map(resolve);
|
|
314
|
+
const w = new BufferWriter();
|
|
315
|
+
w.writeVarint(names.length);
|
|
316
|
+
for (let i = 0; i < names.length; i++) {
|
|
317
|
+
w.writeStringUtf8Varint(names[i]);
|
|
318
|
+
w.writeVarint(indices[i]);
|
|
319
|
+
}
|
|
320
|
+
return this.emit(et, etv, tag, w.toUint8Array());
|
|
321
|
+
}
|
|
322
|
+
emitNamedFieldsETV(etv, tag, names, indices) {
|
|
323
|
+
const w = new BufferWriter();
|
|
324
|
+
w.writeVarint(names.length);
|
|
325
|
+
for (let i = 0; i < names.length; i++) {
|
|
326
|
+
w.writeStringUtf8Varint(names[i]);
|
|
327
|
+
w.writeVarint(indices[i]);
|
|
328
|
+
}
|
|
329
|
+
const idx = this.allocate();
|
|
330
|
+
this.registerETV(etv, idx);
|
|
331
|
+
this.entries[idx] = { tag, params: w.toUint8Array() };
|
|
332
|
+
return idx;
|
|
333
|
+
}
|
|
334
|
+
emitFunc(et, etv, typeName, inputIndices, outputIdx) {
|
|
335
|
+
const w = new BufferWriter();
|
|
336
|
+
w.writeVarint(inputIndices.length);
|
|
337
|
+
for (const ii of inputIndices)
|
|
338
|
+
w.writeVarint(ii);
|
|
339
|
+
w.writeVarint(outputIdx);
|
|
340
|
+
return this.emit(et, etv, TAG_FOR_TYPE[typeName], w.toUint8Array());
|
|
341
|
+
}
|
|
342
|
+
emitFuncETV(etv, caseName, inputIndices, outputIdx) {
|
|
343
|
+
const w = new BufferWriter();
|
|
344
|
+
w.writeVarint(inputIndices.length);
|
|
345
|
+
for (const ii of inputIndices)
|
|
346
|
+
w.writeVarint(ii);
|
|
347
|
+
w.writeVarint(outputIdx);
|
|
348
|
+
const idx = this.allocate();
|
|
349
|
+
this.registerETV(etv, idx);
|
|
350
|
+
this.entries[idx] = { tag: TAG_FOR_TYPE[caseName], params: w.toUint8Array() };
|
|
351
|
+
return idx;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const EMPTY = new Uint8Array(0);
|
|
355
|
+
function varint(value) {
|
|
356
|
+
const w = new BufferWriter();
|
|
357
|
+
w.writeVarint(value);
|
|
358
|
+
return w.toUint8Array();
|
|
359
|
+
}
|
|
360
|
+
function varints(...values) {
|
|
361
|
+
const w = new BufferWriter();
|
|
362
|
+
for (const v of values)
|
|
363
|
+
w.writeVarint(v);
|
|
364
|
+
return w.toUint8Array();
|
|
365
|
+
}
|
|
366
|
+
// =============================================================================
|
|
367
|
+
// Type Table Section Writer
|
|
368
|
+
// =============================================================================
|
|
369
|
+
/**
|
|
370
|
+
* Write the type table section to a BufferWriter:
|
|
371
|
+
* [varint header_byte_length] [varint root_idx] [varint count] [entries...]
|
|
372
|
+
*/
|
|
373
|
+
export function writeTypeTableSection(rootIdx, entries, writer) {
|
|
374
|
+
const hw = new BufferWriter();
|
|
375
|
+
hw.writeVarint(rootIdx);
|
|
376
|
+
hw.writeVarint(entries.length);
|
|
377
|
+
for (const e of entries) {
|
|
378
|
+
hw.writeUint8(e.tag);
|
|
379
|
+
hw.writeBytes(e.params);
|
|
380
|
+
}
|
|
381
|
+
const headerBytes = hw.toUint8Array();
|
|
382
|
+
writer.writeVarint(headerBytes.length);
|
|
383
|
+
writer.writeBytes(headerBytes);
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Read the type table section from a BufferReader.
|
|
387
|
+
* Returns the root EastTypeValue and the full type table for IR restoration.
|
|
388
|
+
*
|
|
389
|
+
* The reader must be positioned after the magic bytes.
|
|
390
|
+
*/
|
|
391
|
+
export function readTypeTableSection(reader) {
|
|
392
|
+
const headerByteLength = reader.readVarint();
|
|
393
|
+
const headerEnd = reader.offset + headerByteLength;
|
|
394
|
+
const rootIdx = reader.readVarint();
|
|
395
|
+
const entryCount = reader.readVarint();
|
|
396
|
+
// Phase 1: Parse raw entries
|
|
397
|
+
const parsed = new Array(entryCount);
|
|
398
|
+
for (let i = 0; i < entryCount; i++) {
|
|
399
|
+
parsed[i] = ENTRY_PARSERS[reader.readUint8()](reader);
|
|
400
|
+
}
|
|
401
|
+
if (reader.offset !== headerEnd) {
|
|
402
|
+
throw new Error(`Type table size mismatch: expected offset ${headerEnd}, got ${reader.offset}`);
|
|
403
|
+
}
|
|
404
|
+
// Phase 2: Reconstruct EastTypeValue tree with depth-based Recursive references
|
|
405
|
+
const table = reconstructTypes(parsed, rootIdx);
|
|
406
|
+
return { rootType: table[rootIdx], typeTable: table };
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Skip the type table section without decoding.
|
|
410
|
+
*/
|
|
411
|
+
export function skipTypeTableSection(reader) {
|
|
412
|
+
reader.skip(reader.readVarint());
|
|
413
|
+
}
|
|
414
|
+
function parsePrimitive(tag) {
|
|
415
|
+
const entry = { tag, childIndices: [] };
|
|
416
|
+
return () => entry;
|
|
417
|
+
}
|
|
418
|
+
function parseSingleParam(tag) {
|
|
419
|
+
return (r) => ({ tag, childIndices: [r.readVarint()] });
|
|
420
|
+
}
|
|
421
|
+
function parseDict(r) {
|
|
422
|
+
return { tag: TAG_DICT, childIndices: [r.readVarint(), r.readVarint()] };
|
|
423
|
+
}
|
|
424
|
+
function parseNamedFields(tag) {
|
|
425
|
+
return (r) => {
|
|
426
|
+
const n = r.readVarint();
|
|
427
|
+
const names = [];
|
|
428
|
+
const indices = [];
|
|
429
|
+
for (let i = 0; i < n; i++) {
|
|
430
|
+
names.push(r.readStringUtf8Varint());
|
|
431
|
+
indices.push(r.readVarint());
|
|
432
|
+
}
|
|
433
|
+
return { tag, childIndices: indices, names };
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
function parseFunc(tag) {
|
|
437
|
+
return (r) => {
|
|
438
|
+
const n = r.readVarint();
|
|
439
|
+
const indices = [];
|
|
440
|
+
for (let i = 0; i < n; i++)
|
|
441
|
+
indices.push(r.readVarint());
|
|
442
|
+
indices.push(r.readVarint()); // output
|
|
443
|
+
return { tag, childIndices: indices };
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
function parseRecursive(r) {
|
|
447
|
+
return { tag: TAG_RECURSIVE, childIndices: [r.readVarint()] };
|
|
448
|
+
}
|
|
449
|
+
const ENTRY_PARSERS = [
|
|
450
|
+
/* 0x00 */ parsePrimitive(TAG_NULL),
|
|
451
|
+
/* 0x01 */ parsePrimitive(TAG_STRING),
|
|
452
|
+
/* 0x02 */ parsePrimitive(TAG_INTEGER),
|
|
453
|
+
/* 0x03 */ parsePrimitive(TAG_FLOAT),
|
|
454
|
+
/* 0x04 */ parsePrimitive(TAG_BOOLEAN),
|
|
455
|
+
/* 0x05 */ parsePrimitive(TAG_DATETIME),
|
|
456
|
+
/* 0x06 */ parsePrimitive(TAG_BLOB),
|
|
457
|
+
/* 0x07 */ parsePrimitive(TAG_NEVER),
|
|
458
|
+
/* 0x08 */ parseNamedFields(TAG_VARIANT),
|
|
459
|
+
/* 0x09 */ parseNamedFields(TAG_STRUCT),
|
|
460
|
+
/* 0x0A */ parseSingleParam(TAG_ARRAY),
|
|
461
|
+
/* 0x0B */ parseDict,
|
|
462
|
+
/* 0x0C */ parseSingleParam(TAG_SET),
|
|
463
|
+
/* 0x0D */ parseSingleParam(TAG_REF),
|
|
464
|
+
/* 0x0E */ parseSingleParam(TAG_VECTOR),
|
|
465
|
+
/* 0x0F */ parseSingleParam(TAG_MATRIX),
|
|
466
|
+
/* 0x10 */ parseFunc(TAG_FUNCTION),
|
|
467
|
+
/* 0x11 */ parseFunc(TAG_ASYNC_FUNCTION),
|
|
468
|
+
/* 0x12 */ parseRecursive,
|
|
469
|
+
];
|
|
470
|
+
// ─�� Reconstruction: flat table → EastTypeValue with Recursive(depth) ──
|
|
471
|
+
const TAG_TO_CASE = [
|
|
472
|
+
"Null", "String", "Integer", "Float", "Boolean", "DateTime", "Blob", "Never",
|
|
473
|
+
"Variant", "Struct", "Array", "Dict", "Set", "Ref", "Vector", "Matrix",
|
|
474
|
+
"Function", "AsyncFunction", "Recursive",
|
|
475
|
+
];
|
|
476
|
+
const PRIMITIVE_ETV = [
|
|
477
|
+
variant("Null", null),
|
|
478
|
+
variant("String", null),
|
|
479
|
+
variant("Integer", null),
|
|
480
|
+
variant("Float", null),
|
|
481
|
+
variant("Boolean", null),
|
|
482
|
+
variant("DateTime", null),
|
|
483
|
+
variant("Blob", null),
|
|
484
|
+
variant("Never", null),
|
|
485
|
+
];
|
|
486
|
+
/**
|
|
487
|
+
* Reconstruct EastTypeValue objects from parsed flat table entries.
|
|
488
|
+
*
|
|
489
|
+
* Recursive entries are converted to proper EastTypeValue trees where
|
|
490
|
+
* self-references use depth-based Recursive(N) — compatible with
|
|
491
|
+
* _decodeCursorFor's typeCtx stack mechanism.
|
|
492
|
+
*/
|
|
493
|
+
function reconstructTypes(parsed, _rootIdx) {
|
|
494
|
+
const table = new Array(parsed.length);
|
|
495
|
+
// Track which indices are Recursive wrappers and their inner indices
|
|
496
|
+
const recursiveEntries = new Map(); // wrapper_idx → inner_idx
|
|
497
|
+
// First pass: identify all Recursive entries
|
|
498
|
+
for (let i = 0; i < parsed.length; i++) {
|
|
499
|
+
if (parsed[i].tag === TAG_RECURSIVE) {
|
|
500
|
+
recursiveEntries.set(i, parsed[i].childIndices[0]);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
// Build each entry. For non-recursive entries, this is straightforward.
|
|
504
|
+
// For the inner types of recursive entries, self-references (indices pointing
|
|
505
|
+
// back to a Recursive wrapper) must be replaced with Recursive(depth).
|
|
506
|
+
//
|
|
507
|
+
// We process bottom-up: entries with lower indices are built first (they
|
|
508
|
+
// have no forward references except through Recursive wrappers).
|
|
509
|
+
// recursionStack tracks which Recursive wrapper indices are "in scope"
|
|
510
|
+
// as we build types, so we can compute depth for Recursive(N) references.
|
|
511
|
+
function build(idx, depthStack) {
|
|
512
|
+
// If this index is a Recursive wrapper currently being built, emit Recursive(ref(id)).
|
|
513
|
+
// The id is the table index of the wrapper entry.
|
|
514
|
+
const stackPos = depthStack.indexOf(idx);
|
|
515
|
+
if (stackPos !== -1) {
|
|
516
|
+
return variant("Recursive", variant("ref", BigInt(idx)));
|
|
517
|
+
}
|
|
518
|
+
// If already built and not a recursive wrapper, reuse
|
|
519
|
+
if (table[idx] !== undefined && !recursiveEntries.has(idx)) {
|
|
520
|
+
return table[idx];
|
|
521
|
+
}
|
|
522
|
+
const entry = parsed[idx];
|
|
523
|
+
// Recursive wrapper: push wrapper index on stack, recurse into inner compound.
|
|
524
|
+
// toEastTypeValue pushes BOTH the RecursiveType wrapper and the inner compound
|
|
525
|
+
// type onto its stack, so we mirror that here for matching depth values.
|
|
526
|
+
if (entry.tag === TAG_RECURSIVE) {
|
|
527
|
+
const innerIdx = entry.childIndices[0];
|
|
528
|
+
depthStack.push(idx); // Push wrapper — stays on stack for depth counting
|
|
529
|
+
const inner = buildCompound(innerIdx, depthStack, null);
|
|
530
|
+
depthStack.pop();
|
|
531
|
+
const wrapped = variant("Recursive", variant("wrapper", { id: BigInt(idx), inner }));
|
|
532
|
+
table[idx] = wrapped;
|
|
533
|
+
return wrapped;
|
|
534
|
+
}
|
|
535
|
+
// Primitives
|
|
536
|
+
if (entry.tag <= TAG_NEVER) {
|
|
537
|
+
table[idx] = PRIMITIVE_ETV[entry.tag];
|
|
538
|
+
return table[idx];
|
|
539
|
+
}
|
|
540
|
+
const result = buildCompound(idx, depthStack, null);
|
|
541
|
+
table[idx] = result;
|
|
542
|
+
return result;
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Build a compound type entry, pushing to the depth stack.
|
|
546
|
+
* If recursiveOwner is set, self-references to that index (the Recursive
|
|
547
|
+
* wrapper) will be found on the stack at the position where this compound
|
|
548
|
+
* type is pushed.
|
|
549
|
+
*/
|
|
550
|
+
function buildCompound(idx, depthStack, recursiveOwner) {
|
|
551
|
+
const entry = parsed[idx];
|
|
552
|
+
// Push: the index that self-references should find.
|
|
553
|
+
// If this compound is the inner type of a Recursive wrapper, push the
|
|
554
|
+
// wrapper's index so Recursive(depth) resolves to it.
|
|
555
|
+
const stackEntry = recursiveOwner ?? idx;
|
|
556
|
+
depthStack.push(stackEntry);
|
|
557
|
+
let result;
|
|
558
|
+
switch (entry.tag) {
|
|
559
|
+
case TAG_VARIANT: {
|
|
560
|
+
const cases = entry.names.map((name, i) => ({
|
|
561
|
+
name, type: build(entry.childIndices[i], depthStack),
|
|
562
|
+
}));
|
|
563
|
+
result = variant("Variant", cases);
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
case TAG_STRUCT: {
|
|
567
|
+
const fields = entry.names.map((name, i) => ({
|
|
568
|
+
name, type: build(entry.childIndices[i], depthStack),
|
|
569
|
+
}));
|
|
570
|
+
result = variant("Struct", fields);
|
|
571
|
+
break;
|
|
572
|
+
}
|
|
573
|
+
case TAG_ARRAY:
|
|
574
|
+
result = variant("Array", build(entry.childIndices[0], depthStack));
|
|
575
|
+
break;
|
|
576
|
+
case TAG_DICT:
|
|
577
|
+
result = variant("Dict", {
|
|
578
|
+
key: build(entry.childIndices[0], depthStack),
|
|
579
|
+
value: build(entry.childIndices[1], depthStack),
|
|
580
|
+
});
|
|
581
|
+
break;
|
|
582
|
+
case TAG_SET:
|
|
583
|
+
result = variant("Set", build(entry.childIndices[0], depthStack));
|
|
584
|
+
break;
|
|
585
|
+
case TAG_REF:
|
|
586
|
+
result = variant("Ref", build(entry.childIndices[0], depthStack));
|
|
587
|
+
break;
|
|
588
|
+
case TAG_VECTOR:
|
|
589
|
+
result = variant("Vector", build(entry.childIndices[0], depthStack));
|
|
590
|
+
break;
|
|
591
|
+
case TAG_MATRIX:
|
|
592
|
+
result = variant("Matrix", build(entry.childIndices[0], depthStack));
|
|
593
|
+
break;
|
|
594
|
+
case TAG_FUNCTION:
|
|
595
|
+
case TAG_ASYNC_FUNCTION: {
|
|
596
|
+
const n = entry.childIndices.length - 1;
|
|
597
|
+
const inputs = [];
|
|
598
|
+
for (let i = 0; i < n; i++)
|
|
599
|
+
inputs.push(build(entry.childIndices[i], depthStack));
|
|
600
|
+
const output = build(entry.childIndices[n], depthStack);
|
|
601
|
+
result = variant(TAG_TO_CASE[entry.tag], { inputs, output });
|
|
602
|
+
break;
|
|
603
|
+
}
|
|
604
|
+
default:
|
|
605
|
+
throw new Error(`Unexpected compound tag 0x${entry.tag.toString(16)}`);
|
|
606
|
+
}
|
|
607
|
+
depthStack.pop();
|
|
608
|
+
return result;
|
|
609
|
+
}
|
|
610
|
+
// Build ALL entries (not just root-reachable). Extra entries from IR
|
|
611
|
+
// capture types are needed for function IR type restoration during decode.
|
|
612
|
+
for (let i = 0; i < parsed.length; i++) {
|
|
613
|
+
if (table[i] === undefined)
|
|
614
|
+
build(i, []);
|
|
615
|
+
}
|
|
616
|
+
return table;
|
|
617
|
+
}
|
|
618
|
+
//# sourceMappingURL=type-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-table.js","sourceRoot":"","sources":["../../../../src/serialization/beast2/type-table.ts"],"names":[],"mappings":"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"}
|