@elaraai/east 0.0.1-beta.8 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,347 @@
|
|
|
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
|
+
* diffFor - Compute difference between two East values.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { toEastTypeValue } from "../type_of_type.js";
|
|
11
|
+
import { isVariant, variant } from "../containers/variant.js";
|
|
12
|
+
import { equalFor, isFor, compareFor } from "../comparison.js";
|
|
13
|
+
import { SortedMap } from "../containers/sortedmap.js";
|
|
14
|
+
import { SortedSet } from "../containers/sortedset.js";
|
|
15
|
+
import { computeLCS } from "./types.js";
|
|
16
|
+
export function diffFor(type, ctx = { diff: [], types: [], equal: new Map() }) {
|
|
17
|
+
// Convert to EastTypeValue and use a properly typed variable
|
|
18
|
+
const t = isVariant(type) ? type : toEastTypeValue(type);
|
|
19
|
+
if (t.type === "Never") {
|
|
20
|
+
return (_before, _after) => {
|
|
21
|
+
throw new Error("Cannot diff values of type Never");
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
else if (t.type === "Null" ||
|
|
25
|
+
t.type === "Boolean" ||
|
|
26
|
+
t.type === "Integer" ||
|
|
27
|
+
t.type === "Float" ||
|
|
28
|
+
t.type === "String" ||
|
|
29
|
+
t.type === "DateTime" ||
|
|
30
|
+
t.type === "Blob" ||
|
|
31
|
+
t.type === "Vector" ||
|
|
32
|
+
t.type === "Matrix") {
|
|
33
|
+
const equal = equalFor(t);
|
|
34
|
+
return (before, after) => {
|
|
35
|
+
if (equal(before, after)) {
|
|
36
|
+
return variant("unchanged", null);
|
|
37
|
+
}
|
|
38
|
+
return variant("replace", { before, after });
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
else if (t.type === "Array") {
|
|
42
|
+
let elementEqual;
|
|
43
|
+
let elementDiff;
|
|
44
|
+
let is;
|
|
45
|
+
const ret = (before, after) => {
|
|
46
|
+
if (is(before, after)) {
|
|
47
|
+
return variant("unchanged", null);
|
|
48
|
+
}
|
|
49
|
+
const { beforeIndices, afterIndices } = computeLCS(before, after, elementEqual);
|
|
50
|
+
const operations = [];
|
|
51
|
+
let beforePtr = 0;
|
|
52
|
+
let afterPtr = 0;
|
|
53
|
+
let lcsPtr = 0;
|
|
54
|
+
let deleteCount = 0; // emitted (unpaired) deletes only
|
|
55
|
+
let insertCount = 0; // emitted (unpaired) inserts only — pairs preserve length
|
|
56
|
+
while (beforePtr < before.length || afterPtr < after.length) {
|
|
57
|
+
const nextBeforeLCS = lcsPtr < beforeIndices.length ? beforeIndices[lcsPtr] : before.length;
|
|
58
|
+
const nextAfterLCS = lcsPtr < afterIndices.length ? afterIndices[lcsPtr] : after.length;
|
|
59
|
+
// Collect this chunk's would-be deletes and inserts. We don't decide
|
|
60
|
+
// until both lists are gathered whether each is part of a pair (→
|
|
61
|
+
// emitted as a single `update`) or stands alone.
|
|
62
|
+
const chunkDeletes = [];
|
|
63
|
+
while (beforePtr < nextBeforeLCS) {
|
|
64
|
+
chunkDeletes.push({ beforePtr, value: before[beforePtr] });
|
|
65
|
+
beforePtr++;
|
|
66
|
+
}
|
|
67
|
+
const chunkInserts = [];
|
|
68
|
+
while (afterPtr < nextAfterLCS) {
|
|
69
|
+
chunkInserts.push({ afterPtr, value: after[afterPtr] });
|
|
70
|
+
afterPtr++;
|
|
71
|
+
}
|
|
72
|
+
// Pair the i-th chunk-local delete with the i-th chunk-local insert
|
|
73
|
+
// and emit a single `update` op carrying the inner diff. Length of
|
|
74
|
+
// the running array is unchanged for each paired position, so
|
|
75
|
+
// `deleteCount` / `insertCount` stay frozen across the pair span.
|
|
76
|
+
const pairCount = Math.min(chunkDeletes.length, chunkInserts.length);
|
|
77
|
+
for (let i = 0; i < pairCount; i++) {
|
|
78
|
+
const del = chunkDeletes[i];
|
|
79
|
+
const ins = chunkInserts[i];
|
|
80
|
+
// `del.beforePtr - deleteCount + insertCount` is the position the
|
|
81
|
+
// old element currently sits at in the running array; the inner
|
|
82
|
+
// patch transforms it in place.
|
|
83
|
+
const actualPosition = del.beforePtr - deleteCount + insertCount;
|
|
84
|
+
operations.push({
|
|
85
|
+
key: BigInt(actualPosition),
|
|
86
|
+
offset: 0n,
|
|
87
|
+
operation: variant("update", elementDiff(del.value, ins.value)),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Excess deletes — the chunk had more elements removed than added.
|
|
91
|
+
for (let i = pairCount; i < chunkDeletes.length; i++) {
|
|
92
|
+
const del = chunkDeletes[i];
|
|
93
|
+
const actualPosition = del.beforePtr - deleteCount + insertCount;
|
|
94
|
+
operations.push({
|
|
95
|
+
key: BigInt(actualPosition),
|
|
96
|
+
offset: 0n,
|
|
97
|
+
operation: variant("delete", del.value),
|
|
98
|
+
});
|
|
99
|
+
deleteCount++;
|
|
100
|
+
}
|
|
101
|
+
// Excess inserts — the chunk had more elements added than removed.
|
|
102
|
+
for (let i = pairCount; i < chunkInserts.length; i++) {
|
|
103
|
+
const ins = chunkInserts[i];
|
|
104
|
+
operations.push({
|
|
105
|
+
key: BigInt(ins.afterPtr),
|
|
106
|
+
offset: 0n,
|
|
107
|
+
operation: variant("insert", ins.value),
|
|
108
|
+
});
|
|
109
|
+
insertCount++;
|
|
110
|
+
}
|
|
111
|
+
if (lcsPtr < beforeIndices.length) {
|
|
112
|
+
beforePtr++;
|
|
113
|
+
afterPtr++;
|
|
114
|
+
lcsPtr++;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (operations.length === 0) {
|
|
118
|
+
return variant("unchanged", null);
|
|
119
|
+
}
|
|
120
|
+
return variant("patch", operations);
|
|
121
|
+
};
|
|
122
|
+
ctx.diff.push(ret);
|
|
123
|
+
ctx.types.push(t);
|
|
124
|
+
is = isFor(t, ctx.equal);
|
|
125
|
+
elementEqual = equalFor(t.value, ctx.equal);
|
|
126
|
+
elementDiff = diffFor(t.value, ctx);
|
|
127
|
+
ctx.diff.pop();
|
|
128
|
+
ctx.types.pop();
|
|
129
|
+
return ret;
|
|
130
|
+
}
|
|
131
|
+
else if (t.type === "Set") {
|
|
132
|
+
// Set keys cannot contain recursive types, so no context needed
|
|
133
|
+
const is = isFor(t);
|
|
134
|
+
const keyCompare = compareFor(t.value);
|
|
135
|
+
return (before, after) => {
|
|
136
|
+
if (is(before, after)) {
|
|
137
|
+
return variant("unchanged", null);
|
|
138
|
+
}
|
|
139
|
+
const operations = new SortedMap(undefined, keyCompare);
|
|
140
|
+
for (const key of before) {
|
|
141
|
+
if (!after.has(key)) {
|
|
142
|
+
operations.set(key, variant("delete", null));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
for (const key of after) {
|
|
146
|
+
if (!before.has(key)) {
|
|
147
|
+
operations.set(key, variant("insert", null));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (operations.size === 0) {
|
|
151
|
+
return variant("unchanged", null);
|
|
152
|
+
}
|
|
153
|
+
let deleteCount = 0;
|
|
154
|
+
let insertCount = 0;
|
|
155
|
+
for (const op of operations.values()) {
|
|
156
|
+
if (op.type === "delete")
|
|
157
|
+
deleteCount++;
|
|
158
|
+
if (op.type === "insert")
|
|
159
|
+
insertCount++;
|
|
160
|
+
}
|
|
161
|
+
if (deleteCount === before.size && insertCount === after.size && before.size > 0) {
|
|
162
|
+
return variant("replace", { before, after });
|
|
163
|
+
}
|
|
164
|
+
return variant("patch", operations);
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
else if (t.type === "Dict") {
|
|
168
|
+
let valueDiff;
|
|
169
|
+
let valueEqual;
|
|
170
|
+
let is;
|
|
171
|
+
// Dict keys cannot contain recursive types, so no context needed for keyCompare
|
|
172
|
+
const keyCompare = compareFor(t.value.key);
|
|
173
|
+
const ret = (before, after) => {
|
|
174
|
+
if (is(before, after)) {
|
|
175
|
+
return variant("unchanged", null);
|
|
176
|
+
}
|
|
177
|
+
const operations = new SortedMap(undefined, keyCompare);
|
|
178
|
+
for (const [key, beforeValue] of before) {
|
|
179
|
+
if (!after.has(key)) {
|
|
180
|
+
operations.set(key, variant("delete", beforeValue));
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
const afterValue = after.get(key);
|
|
184
|
+
if (!valueEqual(beforeValue, afterValue)) {
|
|
185
|
+
const patch = valueDiff(beforeValue, afterValue);
|
|
186
|
+
operations.set(key, variant("update", patch));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
for (const [key, afterValue] of after) {
|
|
191
|
+
if (!before.has(key)) {
|
|
192
|
+
operations.set(key, variant("insert", afterValue));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (operations.size === 0) {
|
|
196
|
+
return variant("unchanged", null);
|
|
197
|
+
}
|
|
198
|
+
let insertCount = 0;
|
|
199
|
+
let deleteCount = 0;
|
|
200
|
+
for (const op of operations.values()) {
|
|
201
|
+
if (op.type === "insert")
|
|
202
|
+
insertCount++;
|
|
203
|
+
if (op.type === "delete")
|
|
204
|
+
deleteCount++;
|
|
205
|
+
}
|
|
206
|
+
if (insertCount === after.size && deleteCount === before.size && before.size > 0) {
|
|
207
|
+
return variant("replace", { before, after });
|
|
208
|
+
}
|
|
209
|
+
return variant("patch", operations);
|
|
210
|
+
};
|
|
211
|
+
ctx.diff.push(ret);
|
|
212
|
+
ctx.types.push(t);
|
|
213
|
+
is = isFor(t, ctx.equal);
|
|
214
|
+
valueDiff = diffFor(t.value.value, ctx);
|
|
215
|
+
valueEqual = equalFor(t.value.value, ctx.equal);
|
|
216
|
+
ctx.diff.pop();
|
|
217
|
+
ctx.types.pop();
|
|
218
|
+
return ret;
|
|
219
|
+
}
|
|
220
|
+
else if (t.type === "Struct") {
|
|
221
|
+
const fieldDiffs = {};
|
|
222
|
+
const fieldEquals = {};
|
|
223
|
+
const ret = (before, after) => {
|
|
224
|
+
if (before === after) {
|
|
225
|
+
return variant("unchanged", null);
|
|
226
|
+
}
|
|
227
|
+
const patchFields = {};
|
|
228
|
+
let allUnchanged = true;
|
|
229
|
+
for (const { name } of t.value) {
|
|
230
|
+
const beforeValue = before[name];
|
|
231
|
+
const afterValue = after[name];
|
|
232
|
+
if (fieldEquals[name](beforeValue, afterValue)) {
|
|
233
|
+
patchFields[name] = variant("unchanged", null);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
patchFields[name] = fieldDiffs[name](beforeValue, afterValue);
|
|
237
|
+
allUnchanged = false;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (allUnchanged) {
|
|
241
|
+
return variant("unchanged", null);
|
|
242
|
+
}
|
|
243
|
+
return variant("patch", patchFields);
|
|
244
|
+
};
|
|
245
|
+
ctx.diff.push(ret);
|
|
246
|
+
ctx.types.push(t);
|
|
247
|
+
for (const { name, type: fieldType } of t.value) {
|
|
248
|
+
fieldDiffs[name] = diffFor(fieldType, ctx);
|
|
249
|
+
fieldEquals[name] = equalFor(fieldType, ctx.equal);
|
|
250
|
+
}
|
|
251
|
+
ctx.diff.pop();
|
|
252
|
+
ctx.types.pop();
|
|
253
|
+
return ret;
|
|
254
|
+
}
|
|
255
|
+
else if (t.type === "Variant") {
|
|
256
|
+
const caseDiffs = {};
|
|
257
|
+
const caseEquals = {};
|
|
258
|
+
const ret = (before, after) => {
|
|
259
|
+
if (before === after) {
|
|
260
|
+
return variant("unchanged", null);
|
|
261
|
+
}
|
|
262
|
+
if (before.type !== after.type) {
|
|
263
|
+
return variant("replace", { before, after });
|
|
264
|
+
}
|
|
265
|
+
const caseName = before.type;
|
|
266
|
+
if (caseEquals[caseName](before.value, after.value)) {
|
|
267
|
+
return variant("unchanged", null);
|
|
268
|
+
}
|
|
269
|
+
const casePatch = caseDiffs[caseName](before.value, after.value);
|
|
270
|
+
if (casePatch.type === "unchanged") {
|
|
271
|
+
return variant("unchanged", null);
|
|
272
|
+
}
|
|
273
|
+
return variant("patch", variant(caseName, casePatch));
|
|
274
|
+
};
|
|
275
|
+
ctx.diff.push(ret);
|
|
276
|
+
ctx.types.push(t);
|
|
277
|
+
for (const { name, type: caseType } of t.value) {
|
|
278
|
+
caseDiffs[name] = diffFor(caseType, ctx);
|
|
279
|
+
caseEquals[name] = equalFor(caseType, ctx.equal);
|
|
280
|
+
}
|
|
281
|
+
ctx.diff.pop();
|
|
282
|
+
ctx.types.pop();
|
|
283
|
+
return ret;
|
|
284
|
+
}
|
|
285
|
+
else if (t.type === "Ref") {
|
|
286
|
+
let innerDiff;
|
|
287
|
+
let innerEqual;
|
|
288
|
+
let is;
|
|
289
|
+
const ret = (before, after) => {
|
|
290
|
+
if (is(before, after)) {
|
|
291
|
+
return variant("unchanged", null);
|
|
292
|
+
}
|
|
293
|
+
if (innerEqual(before.value, after.value)) {
|
|
294
|
+
return variant("unchanged", null);
|
|
295
|
+
}
|
|
296
|
+
const innerPatch = innerDiff(before.value, after.value);
|
|
297
|
+
if (innerPatch.type === "unchanged") {
|
|
298
|
+
return variant("unchanged", null);
|
|
299
|
+
}
|
|
300
|
+
return variant("patch", innerPatch);
|
|
301
|
+
};
|
|
302
|
+
ctx.diff.push(ret);
|
|
303
|
+
ctx.types.push(t);
|
|
304
|
+
is = isFor(t, ctx.equal);
|
|
305
|
+
innerDiff = diffFor(t.value, ctx);
|
|
306
|
+
innerEqual = equalFor(t.value, ctx.equal);
|
|
307
|
+
ctx.diff.pop();
|
|
308
|
+
ctx.types.pop();
|
|
309
|
+
return ret;
|
|
310
|
+
}
|
|
311
|
+
else if (t.type === "Recursive" && t.value.type === "wrapper") {
|
|
312
|
+
// Recursive wrapper: set up context stacks and recurse into inner type.
|
|
313
|
+
// Uses replace-only semantics - no structural patching.
|
|
314
|
+
let innerEqual;
|
|
315
|
+
const ret = (before, after) => {
|
|
316
|
+
if (innerEqual(before, after)) {
|
|
317
|
+
return variant("unchanged", null);
|
|
318
|
+
}
|
|
319
|
+
return variant("replace", { before, after });
|
|
320
|
+
};
|
|
321
|
+
const selfEqual = equalFor(t, ctx.equal);
|
|
322
|
+
ctx.equal.set(t.value.value.id, selfEqual);
|
|
323
|
+
innerEqual = equalFor(t.value.value.inner, ctx.equal);
|
|
324
|
+
return ret;
|
|
325
|
+
}
|
|
326
|
+
else if (t.type === "Recursive" && t.value.type === "ref") {
|
|
327
|
+
// Self-reference: look up by id
|
|
328
|
+
const id = t.value.value;
|
|
329
|
+
const equal = ctx.equal.get(id);
|
|
330
|
+
if (equal === undefined) {
|
|
331
|
+
throw new Error(`Internal error: Recursive equal context not found in diffFor`);
|
|
332
|
+
}
|
|
333
|
+
return (before, after) => {
|
|
334
|
+
if (equal(before, after)) {
|
|
335
|
+
return variant("unchanged", null);
|
|
336
|
+
}
|
|
337
|
+
return variant("replace", { before, after });
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
else if (t.type === "Function" || t.type === "AsyncFunction") {
|
|
341
|
+
return (_before, _after) => variant("unchanged", null);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
throw new Error(`Unhandled type in diffFor: ${t.type}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/patch/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
* Fuzz testing configuration for patch operations.
|
|
7
|
+
* Shared between unit tests (src/patch/patch.spec.ts) and compliance tests (test/patch.spec.ts).
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import type { EastType, ValueTypeOf, ArrayType as ArrayTypeT, StructType as StructTypeT } from "../types.js";
|
|
12
|
+
/**
|
|
13
|
+
* A generated test case containing a random type and sample values for testing.
|
|
14
|
+
*/
|
|
15
|
+
export interface FuzzTestCase<T extends EastType = EastType> {
|
|
16
|
+
/** The randomly generated East type */
|
|
17
|
+
type: T;
|
|
18
|
+
/** String representation of the type for test naming */
|
|
19
|
+
typeName: string;
|
|
20
|
+
/** Array type for before/after pairs (used by compliance tests) */
|
|
21
|
+
pairsArrayType: ArrayTypeT<StructTypeT<{
|
|
22
|
+
before: T;
|
|
23
|
+
after: T;
|
|
24
|
+
}>>;
|
|
25
|
+
/** Array type for v1/v2/v3 triplets (used by compliance tests) */
|
|
26
|
+
tripletsArrayType: ArrayTypeT<StructTypeT<{
|
|
27
|
+
v1: T;
|
|
28
|
+
v2: T;
|
|
29
|
+
v3: T;
|
|
30
|
+
}>>;
|
|
31
|
+
/** Value pairs for diff/apply/invert tests */
|
|
32
|
+
pairs: Array<{
|
|
33
|
+
before: ValueTypeOf<T>;
|
|
34
|
+
after: ValueTypeOf<T>;
|
|
35
|
+
}>;
|
|
36
|
+
/** Value triplets for compose tests */
|
|
37
|
+
triplets: Array<{
|
|
38
|
+
v1: ValueTypeOf<T>;
|
|
39
|
+
v2: ValueTypeOf<T>;
|
|
40
|
+
v3: ValueTypeOf<T>;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Options for generating fuzz test cases.
|
|
45
|
+
*/
|
|
46
|
+
export interface FuzzTestOptions {
|
|
47
|
+
/** Number of random types to generate */
|
|
48
|
+
numTypes?: number;
|
|
49
|
+
/** Number of sample values per type */
|
|
50
|
+
numSamples?: number;
|
|
51
|
+
/** Include recursive types in generation */
|
|
52
|
+
includeRecursive?: boolean;
|
|
53
|
+
/** Include function types in generation */
|
|
54
|
+
includeFunctions?: boolean;
|
|
55
|
+
/** Maximum retries when generating values for a single type */
|
|
56
|
+
maxValueRetries?: number;
|
|
57
|
+
/** Multiplier for max attempts (numTypes * multiplier) */
|
|
58
|
+
attemptsMultiplier?: number;
|
|
59
|
+
/** Ensure diverse type coverage (at least one of each kind) */
|
|
60
|
+
ensureDiversity?: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate fuzz test cases with random types and values.
|
|
64
|
+
*
|
|
65
|
+
* This function generates random East types and corresponding sample values
|
|
66
|
+
* for testing patch operations. It handles recursive types gracefully by
|
|
67
|
+
* retrying value generation when max recursion depth is exceeded.
|
|
68
|
+
*
|
|
69
|
+
* @param options Configuration options
|
|
70
|
+
* @returns Array of test cases
|
|
71
|
+
*/
|
|
72
|
+
export declare function generateFuzzTestCases(options?: FuzzTestOptions): FuzzTestCase[];
|
|
73
|
+
//# sourceMappingURL=fuzz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzz.d.ts","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,IAAI,UAAU,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAkB7G;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACvD,uCAAuC;IACvC,IAAI,EAAE,CAAC,CAAC;IACR,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACjE,kEAAkE;IAClE,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpE,8CAA8C;IAC9C,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,uCAAuC;IACvC,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AA0ED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,YAAY,EAAE,CA6FnF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
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 { ArrayType, StructType, VariantType, DictType, SetType, RefType, FunctionType, IntegerType, StringType, FloatType, BooleanType, NullType, printType, } from "../types.js";
|
|
6
|
+
import { randomType, randomValueFor, randomRecursiveType, randomFunctionType } from "../fuzz.js";
|
|
7
|
+
const DEFAULT_OPTIONS = {
|
|
8
|
+
numTypes: 20,
|
|
9
|
+
numSamples: 5,
|
|
10
|
+
includeRecursive: true,
|
|
11
|
+
includeFunctions: true,
|
|
12
|
+
maxValueRetries: 20,
|
|
13
|
+
attemptsMultiplier: 3,
|
|
14
|
+
ensureDiversity: true,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Specific type generators to ensure diversity in test coverage.
|
|
18
|
+
* These guarantee we test important type patterns that random generation might miss.
|
|
19
|
+
*/
|
|
20
|
+
function getDiverseTypes(includeRecursive, includeFunctions) {
|
|
21
|
+
const types = [
|
|
22
|
+
// Variants (often missed by random generation)
|
|
23
|
+
VariantType({ none: NullType, some: IntegerType }),
|
|
24
|
+
VariantType({ ok: StringType, err: StructType({ code: IntegerType, message: StringType }) }),
|
|
25
|
+
// Nested variants
|
|
26
|
+
VariantType({
|
|
27
|
+
leaf: FloatType,
|
|
28
|
+
branch: ArrayType(IntegerType),
|
|
29
|
+
}),
|
|
30
|
+
// Ref types
|
|
31
|
+
RefType(IntegerType),
|
|
32
|
+
RefType(StructType({ x: FloatType, y: FloatType })),
|
|
33
|
+
// Nested collections
|
|
34
|
+
ArrayType(VariantType({ a: IntegerType, b: StringType })),
|
|
35
|
+
DictType(StringType, VariantType({ value: FloatType, missing: NullType })),
|
|
36
|
+
// Struct with variant field
|
|
37
|
+
StructType({
|
|
38
|
+
id: IntegerType,
|
|
39
|
+
status: VariantType({ active: NullType, inactive: StringType }),
|
|
40
|
+
}),
|
|
41
|
+
// Set with different key types
|
|
42
|
+
SetType(IntegerType),
|
|
43
|
+
// Deeply nested
|
|
44
|
+
ArrayType(ArrayType(IntegerType)),
|
|
45
|
+
DictType(StringType, DictType(StringType, IntegerType)),
|
|
46
|
+
];
|
|
47
|
+
// Add recursive types if enabled
|
|
48
|
+
if (includeRecursive) {
|
|
49
|
+
// Add multiple recursive type patterns
|
|
50
|
+
for (let i = 0; i < 3; i++) {
|
|
51
|
+
types.push(randomRecursiveType());
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Add function types if enabled
|
|
55
|
+
if (includeFunctions) {
|
|
56
|
+
types.push(
|
|
57
|
+
// Simple function
|
|
58
|
+
FunctionType([IntegerType], StringType),
|
|
59
|
+
// Function with multiple args
|
|
60
|
+
FunctionType([IntegerType, StringType], BooleanType),
|
|
61
|
+
// Random function types
|
|
62
|
+
randomFunctionType(), randomFunctionType());
|
|
63
|
+
}
|
|
64
|
+
return types;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generate fuzz test cases with random types and values.
|
|
68
|
+
*
|
|
69
|
+
* This function generates random East types and corresponding sample values
|
|
70
|
+
* for testing patch operations. It handles recursive types gracefully by
|
|
71
|
+
* retrying value generation when max recursion depth is exceeded.
|
|
72
|
+
*
|
|
73
|
+
* @param options Configuration options
|
|
74
|
+
* @returns Array of test cases
|
|
75
|
+
*/
|
|
76
|
+
export function generateFuzzTestCases(options = {}) {
|
|
77
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
78
|
+
const testCases = [];
|
|
79
|
+
const seenTypes = new Set();
|
|
80
|
+
// Helper to try adding a type to test cases
|
|
81
|
+
const tryAddType = (type) => {
|
|
82
|
+
const typeName = printType(type);
|
|
83
|
+
// Skip duplicates
|
|
84
|
+
if (seenTypes.has(typeName)) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
const genValue = randomValueFor(type);
|
|
89
|
+
// Helper to safely generate a value (retry on depth exceeded)
|
|
90
|
+
const safeGenValue = () => {
|
|
91
|
+
for (let retry = 0; retry < opts.maxValueRetries; retry++) {
|
|
92
|
+
try {
|
|
93
|
+
return genValue();
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
if (e.message?.includes("max recursion depth")) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
throw e;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
throw new Error("max recursion depth");
|
|
103
|
+
};
|
|
104
|
+
// Generate value pairs
|
|
105
|
+
const pairs = [];
|
|
106
|
+
for (let j = 0; j < opts.numSamples; j++) {
|
|
107
|
+
pairs.push({ before: safeGenValue(), after: safeGenValue() });
|
|
108
|
+
}
|
|
109
|
+
// Generate triplets for compose tests
|
|
110
|
+
const triplets = [];
|
|
111
|
+
for (let j = 0; j < opts.numSamples; j++) {
|
|
112
|
+
triplets.push({ v1: safeGenValue(), v2: safeGenValue(), v3: safeGenValue() });
|
|
113
|
+
}
|
|
114
|
+
// Create array types for East runtime iteration
|
|
115
|
+
const pairsArrayType = ArrayType(StructType({ before: type, after: type }));
|
|
116
|
+
const tripletsArrayType = ArrayType(StructType({ v1: type, v2: type, v3: type }));
|
|
117
|
+
seenTypes.add(typeName);
|
|
118
|
+
testCases.push({
|
|
119
|
+
type,
|
|
120
|
+
typeName,
|
|
121
|
+
pairsArrayType,
|
|
122
|
+
tripletsArrayType,
|
|
123
|
+
pairs,
|
|
124
|
+
triplets,
|
|
125
|
+
});
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
// Skip types that fail to generate values
|
|
130
|
+
if (e.message?.includes("max recursion depth")) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
throw e;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
// First, add diverse types to ensure coverage
|
|
137
|
+
if (opts.ensureDiversity) {
|
|
138
|
+
const diverseTypes = getDiverseTypes(opts.includeRecursive, opts.includeFunctions);
|
|
139
|
+
for (const type of diverseTypes) {
|
|
140
|
+
if (testCases.length >= opts.numTypes)
|
|
141
|
+
break;
|
|
142
|
+
tryAddType(type);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Fill remaining slots with random types
|
|
146
|
+
let attempts = 0;
|
|
147
|
+
const maxAttempts = opts.numTypes * opts.attemptsMultiplier;
|
|
148
|
+
while (testCases.length < opts.numTypes && attempts < maxAttempts) {
|
|
149
|
+
attempts++;
|
|
150
|
+
// Generate a random type
|
|
151
|
+
const type = randomType(0, {
|
|
152
|
+
includeRecursive: opts.includeRecursive,
|
|
153
|
+
includeFunctions: opts.includeFunctions,
|
|
154
|
+
});
|
|
155
|
+
tryAddType(type);
|
|
156
|
+
}
|
|
157
|
+
return testCases;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=fuzz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
+
* Patch system for computing and applying differences between East values.
|
|
7
|
+
*
|
|
8
|
+
* Provides core operations:
|
|
9
|
+
* - `diffFor(type)` — Compute the difference between two values
|
|
10
|
+
* - `applyFor(type)` — Apply a patch to a value
|
|
11
|
+
* - `composeFor(type)` — Combine two sequential patches
|
|
12
|
+
* - `invertFor(type)` — Invert a patch
|
|
13
|
+
*
|
|
14
|
+
* Plus 3-way merge primitives:
|
|
15
|
+
* - `detectConflictsFor(type)` — Identify overlapping leaves between two patches
|
|
16
|
+
* - `mergePatchFor(type)` — Merge two patches; throws on conflict
|
|
17
|
+
* - `mergeWithResolutionsFor(type)` — Merge with caller-supplied conflict resolutions
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
export { type PatchTypeOf, type Conflict, type Resolution, ConflictError, } from "./types.js";
|
|
22
|
+
export { PatchType } from "./type_of_patch.js";
|
|
23
|
+
export { mergeFor, detectConflictsFor, mergeWithResolutionsFor, } from "./merge.js";
|
|
24
|
+
export { type PatchPathSegment, type PatchPath, field, index, dictKey, variantTag, pathToString, pathFromString, pathDisplay, } from "./path.js";
|
|
25
|
+
export { type PatchVisitor, type PatchLeafOp, type PatchContainerKind, walkPatch, } from "./walk.js";
|
|
26
|
+
export { type PrunePredicate, prunePatchFor, } from "./prune.js";
|
|
27
|
+
export { diffFor } from "./diff.js";
|
|
28
|
+
export { applyFor } from "./apply.js";
|
|
29
|
+
export { composeFor } from "./compose.js";
|
|
30
|
+
export { invertFor } from "./invert.js";
|
|
31
|
+
export { validatePatchFor, type PatchConflict } from "./validate.js";
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patch/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AAKnB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,SAAS,GACV,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,KAAK,cAAc,EACnB,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,OAAO,EAAE,MAAS,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAQ,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAO,aAAa,CAAC;AAKzC,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}
|