@elaraai/east 1.0.79 → 1.0.81
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/README.md +1 -1
- package/dist/src/builtins.d.ts +1 -1
- package/dist/src/builtins.d.ts.map +1 -1
- package/dist/src/builtins.js +19 -0
- package/dist/src/builtins.js.map +1 -1
- package/dist/src/codegen/spellings.d.ts.map +1 -1
- package/dist/src/codegen/spellings.js +3 -0
- package/dist/src/codegen/spellings.js.map +1 -1
- package/dist/src/comparison.d.ts +54 -0
- package/dist/src/comparison.d.ts.map +1 -1
- package/dist/src/comparison.equivalent.spec.d.ts +6 -0
- package/dist/src/comparison.equivalent.spec.d.ts.map +1 -0
- package/dist/src/comparison.equivalent.spec.js +130 -0
- package/dist/src/comparison.equivalent.spec.js.map +1 -0
- package/dist/src/comparison.js +97 -25
- package/dist/src/comparison.js.map +1 -1
- package/dist/src/compile/builtins/array.d.ts +60 -0
- package/dist/src/compile/builtins/array.d.ts.map +1 -0
- package/dist/src/compile/builtins/array.js +691 -0
- package/dist/src/compile/builtins/array.js.map +1 -0
- package/dist/src/compile/builtins/blob.d.ts +18 -0
- package/dist/src/compile/builtins/blob.d.ts.map +1 -0
- package/dist/src/compile/builtins/blob.js +150 -0
- package/dist/src/compile/builtins/blob.js.map +1 -0
- package/dist/src/compile/builtins/compare.d.ts +18 -0
- package/dist/src/compile/builtins/compare.d.ts.map +1 -0
- package/dist/src/compile/builtins/compare.js +52 -0
- package/dist/src/compile/builtins/compare.js.map +1 -0
- package/dist/src/compile/builtins/datetime.d.ts +21 -0
- package/dist/src/compile/builtins/datetime.d.ts.map +1 -0
- package/dist/src/compile/builtins/datetime.js +46 -0
- package/dist/src/compile/builtins/datetime.js.map +1 -0
- package/dist/src/compile/builtins/dict.d.ts +47 -0
- package/dist/src/compile/builtins/dict.d.ts.map +1 -0
- package/dist/src/compile/builtins/dict.js +576 -0
- package/dist/src/compile/builtins/dict.js.map +1 -0
- package/dist/src/compile/builtins/index.d.ts +9 -0
- package/dist/src/compile/builtins/index.d.ts.map +1 -0
- package/dist/src/compile/builtins/index.js +28 -0
- package/dist/src/compile/builtins/index.js.map +1 -0
- package/dist/src/compile/builtins/matrix.d.ts +31 -0
- package/dist/src/compile/builtins/matrix.d.ts.map +1 -0
- package/dist/src/compile/builtins/matrix.js +310 -0
- package/dist/src/compile/builtins/matrix.js.map +1 -0
- package/dist/src/compile/builtins/primitives.d.ts +36 -0
- package/dist/src/compile/builtins/primitives.d.ts.map +1 -0
- package/dist/src/compile/builtins/primitives.js +67 -0
- package/dist/src/compile/builtins/primitives.js.map +1 -0
- package/dist/src/compile/builtins/ref.d.ts +11 -0
- package/dist/src/compile/builtins/ref.d.ts.map +1 -0
- package/dist/src/compile/builtins/ref.js +30 -0
- package/dist/src/compile/builtins/ref.js.map +1 -0
- package/dist/src/compile/builtins/set.d.ts +42 -0
- package/dist/src/compile/builtins/set.d.ts.map +1 -0
- package/dist/src/compile/builtins/set.js +410 -0
- package/dist/src/compile/builtins/set.js.map +1 -0
- package/dist/src/compile/builtins/sparse.d.ts +19 -0
- package/dist/src/compile/builtins/sparse.d.ts.map +1 -0
- package/dist/src/compile/builtins/sparse.js +143 -0
- package/dist/src/compile/builtins/sparse.js.map +1 -0
- package/dist/src/compile/builtins/string.d.ts +34 -0
- package/dist/src/compile/builtins/string.d.ts.map +1 -0
- package/dist/src/compile/builtins/string.js +238 -0
- package/dist/src/compile/builtins/string.js.map +1 -0
- package/dist/src/compile/builtins/tree.d.ts +32 -0
- package/dist/src/compile/builtins/tree.d.ts.map +1 -0
- package/dist/src/compile/builtins/tree.js +108 -0
- package/dist/src/compile/builtins/tree.js.map +1 -0
- package/dist/src/compile/builtins/vector.d.ts +44 -0
- package/dist/src/compile/builtins/vector.d.ts.map +1 -0
- package/dist/src/compile/builtins/vector.js +463 -0
- package/dist/src/compile/builtins/vector.js.map +1 -0
- package/dist/src/compile/constructors.d.ts +13 -0
- package/dist/src/compile/constructors.d.ts.map +1 -0
- package/dist/src/compile/constructors.js +179 -0
- package/dist/src/compile/constructors.js.map +1 -0
- package/dist/src/compile/control.d.ts +13 -0
- package/dist/src/compile/control.d.ts.map +1 -0
- package/dist/src/compile/control.js +513 -0
- package/dist/src/compile/control.js.map +1 -0
- package/dist/src/compile/functions.d.ts +13 -0
- package/dist/src/compile/functions.d.ts.map +1 -0
- package/dist/src/compile/functions.js +492 -0
- package/dist/src/compile/functions.js.map +1 -0
- package/dist/src/compile/ir.d.ts +19 -0
- package/dist/src/compile/ir.d.ts.map +1 -0
- package/dist/src/compile/ir.js +193 -0
- package/dist/src/compile/ir.js.map +1 -0
- package/dist/src/compile/runtime.d.ts +75 -0
- package/dist/src/compile/runtime.d.ts.map +1 -0
- package/dist/src/compile/runtime.js +114 -0
- package/dist/src/compile/runtime.js.map +1 -0
- package/dist/src/compile/type_parameters.d.ts +4 -0
- package/dist/src/compile/type_parameters.d.ts.map +1 -0
- package/dist/src/compile/type_parameters.js +55 -0
- package/dist/src/compile/type_parameters.js.map +1 -0
- package/dist/src/compile/typed_arrays.d.ts +28 -0
- package/dist/src/compile/typed_arrays.d.ts.map +1 -0
- package/dist/src/compile/typed_arrays.js +77 -0
- package/dist/src/compile/typed_arrays.js.map +1 -0
- package/dist/src/compile.d.ts +6 -41
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +8 -4415
- package/dist/src/compile.js.map +1 -1
- package/dist/src/compile.open_beast.spec.js +5 -4
- package/dist/src/compile.open_beast.spec.js.map +1 -1
- package/dist/src/compile.signature.spec.d.ts +6 -0
- package/dist/src/compile.signature.spec.d.ts.map +1 -0
- package/dist/src/compile.signature.spec.js +53 -0
- package/dist/src/compile.signature.spec.js.map +1 -0
- package/dist/src/containers/sortedmap.d.ts +2 -1
- package/dist/src/containers/sortedmap.d.ts.map +1 -1
- package/dist/src/containers/sortedmap.js +4 -2
- package/dist/src/containers/sortedmap.js.map +1 -1
- package/dist/src/containers/sortedset.d.ts +2 -1
- package/dist/src/containers/sortedset.d.ts.map +1 -1
- package/dist/src/containers/sortedset.js +4 -2
- package/dist/src/containers/sortedset.js.map +1 -1
- package/dist/src/error.d.ts +15 -0
- package/dist/src/error.d.ts.map +1 -1
- package/dist/src/error.js +16 -0
- package/dist/src/error.js.map +1 -1
- package/dist/src/expr/array.d.ts +158 -81
- package/dist/src/expr/array.d.ts.map +1 -1
- package/dist/src/expr/array.js +68 -51
- package/dist/src/expr/array.js.map +1 -1
- package/dist/src/expr/ast.d.ts.map +1 -1
- package/dist/src/expr/ast.js +13 -0
- package/dist/src/expr/ast.js.map +1 -1
- package/dist/src/expr/blob.d.ts +8 -8
- package/dist/src/expr/blob.js +8 -8
- package/dist/src/expr/block.d.ts +18 -5
- package/dist/src/expr/block.d.ts.map +1 -1
- package/dist/src/expr/block.js +19 -0
- package/dist/src/expr/block.js.map +1 -1
- package/dist/src/expr/boolean.d.ts +10 -10
- package/dist/src/expr/boolean.js +10 -10
- package/dist/src/expr/datetime.d.ts +28 -28
- package/dist/src/expr/datetime.js +28 -28
- package/dist/src/expr/dict.d.ts +101 -51
- package/dist/src/expr/dict.d.ts.map +1 -1
- package/dist/src/expr/dict.js +97 -36
- package/dist/src/expr/dict.js.map +1 -1
- package/dist/src/expr/float.d.ts +23 -23
- package/dist/src/expr/float.js +23 -23
- package/dist/src/expr/integer.d.ts +17 -17
- package/dist/src/expr/integer.js +11 -11
- package/dist/src/expr/libs/array.d.ts +6 -6
- package/dist/src/expr/libs/array.js +6 -6
- package/dist/src/expr/libs/blob.d.ts +2 -2
- package/dist/src/expr/libs/blob.js +2 -2
- package/dist/src/expr/libs/datetime.d.ts +25 -25
- package/dist/src/expr/libs/datetime.js +25 -25
- package/dist/src/expr/libs/dict.d.ts +2 -2
- package/dist/src/expr/libs/dict.js +2 -2
- package/dist/src/expr/libs/float.d.ts +15 -15
- package/dist/src/expr/libs/float.js +15 -15
- package/dist/src/expr/libs/integer.d.ts +12 -12
- package/dist/src/expr/libs/integer.js +12 -12
- package/dist/src/expr/libs/set.d.ts +2 -2
- package/dist/src/expr/libs/set.js +2 -2
- package/dist/src/expr/libs/string.d.ts +4 -4
- package/dist/src/expr/libs/string.js +4 -4
- package/dist/src/expr/recursive.d.ts +22 -5
- package/dist/src/expr/recursive.d.ts.map +1 -1
- package/dist/src/expr/recursive.js +22 -5
- package/dist/src/expr/recursive.js.map +1 -1
- package/dist/src/expr/ref.d.ts +5 -5
- package/dist/src/expr/ref.js +5 -5
- package/dist/src/expr/set.d.ts +96 -51
- package/dist/src/expr/set.d.ts.map +1 -1
- package/dist/src/expr/set.js +85 -29
- package/dist/src/expr/set.js.map +1 -1
- package/dist/src/expr/string.d.ts +28 -28
- package/dist/src/expr/string.js +28 -28
- package/dist/src/expr/struct.d.ts.map +1 -1
- package/dist/src/expr/struct.js +2 -2
- package/dist/src/expr/variant.d.ts +12 -12
- package/dist/src/expr/variant.js +7 -7
- package/dist/src/function_symbols.d.ts +28 -0
- package/dist/src/function_symbols.d.ts.map +1 -0
- package/dist/src/function_symbols.js +28 -0
- package/dist/src/function_symbols.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/location.d.ts +32 -0
- package/dist/src/location.d.ts.map +1 -1
- package/dist/src/location.js +38 -0
- package/dist/src/location.js.map +1 -1
- package/dist/src/location.spec.js +89 -1
- package/dist/src/location.spec.js.map +1 -1
- package/dist/src/patch/index.d.ts +1 -1
- package/dist/src/patch/index.d.ts.map +1 -1
- package/dist/src/patch/index.js +1 -1
- package/dist/src/patch/index.js.map +1 -1
- package/dist/src/patch/type_of_patch.d.ts +25 -1
- package/dist/src/patch/type_of_patch.d.ts.map +1 -1
- package/dist/src/patch/type_of_patch.js +33 -10
- package/dist/src/patch/type_of_patch.js.map +1 -1
- package/dist/src/platform.spec.js +19 -1
- package/dist/src/platform.spec.js.map +1 -1
- package/dist/src/runner_protocol.d.ts +357 -0
- package/dist/src/runner_protocol.d.ts.map +1 -0
- package/dist/src/runner_protocol.js +154 -0
- package/dist/src/runner_protocol.js.map +1 -0
- package/dist/src/serialization/beast2/index.d.ts +22 -5
- package/dist/src/serialization/beast2/index.d.ts.map +1 -1
- package/dist/src/serialization/beast2/index.js +13 -2
- package/dist/src/serialization/beast2/index.js.map +1 -1
- package/dist/src/serialization/beast2/index.spec.js +84 -3
- package/dist/src/serialization/beast2/index.spec.js.map +1 -1
- package/dist/src/serialization/beast2/shared.d.ts +32 -3
- package/dist/src/serialization/beast2/shared.d.ts.map +1 -1
- package/dist/src/serialization/beast2/shared.js +135 -10
- package/dist/src/serialization/beast2/shared.js.map +1 -1
- package/dist/src/serialization/beast2/v4/container.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v4/container.js +5 -3
- package/dist/src/serialization/beast2/v4/container.js.map +1 -1
- package/dist/src/serialization/beast2/v5/aliasing.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/aliasing.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/aliasing.spec.js +75 -0
- package/dist/src/serialization/beast2/v5/aliasing.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/boundary.d.ts +176 -0
- package/dist/src/serialization/beast2/v5/boundary.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/boundary.js +297 -0
- package/dist/src/serialization/beast2/v5/boundary.js.map +1 -0
- package/dist/src/serialization/beast2/v5/boundary.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/boundary.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/boundary.spec.js +479 -0
- package/dist/src/serialization/beast2/v5/boundary.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/canonical.d.ts +101 -0
- package/dist/src/serialization/beast2/v5/canonical.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/canonical.js +436 -0
- package/dist/src/serialization/beast2/v5/canonical.js.map +1 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.js +124 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/codec.d.ts +6 -5
- package/dist/src/serialization/beast2/v5/codec.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/codec.js +18 -3
- package/dist/src/serialization/beast2/v5/codec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/deflate.d.ts +24 -2
- package/dist/src/serialization/beast2/v5/deflate.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/deflate.js +47 -12
- package/dist/src/serialization/beast2/v5/deflate.js.map +1 -1
- package/dist/src/serialization/beast2/v5/deflate.spec.js +15 -1
- package/dist/src/serialization/beast2/v5/deflate.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/elements.d.ts +66 -0
- package/dist/src/serialization/beast2/v5/elements.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/elements.js +325 -0
- package/dist/src/serialization/beast2/v5/elements.js.map +1 -0
- package/dist/src/serialization/beast2/v5/elements.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/elements.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/elements.spec.js +161 -0
- package/dist/src/serialization/beast2/v5/elements.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/frame-pool.d.ts +62 -21
- package/dist/src/serialization/beast2/v5/frame-pool.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/frame-pool.js +138 -27
- package/dist/src/serialization/beast2/v5/frame-pool.js.map +1 -1
- package/dist/src/serialization/beast2/v5/frame-pool.spec.js +198 -71
- package/dist/src/serialization/beast2/v5/frame-pool.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/frame-worker.js +25 -15
- package/dist/src/serialization/beast2/v5/frame-worker.js.map +1 -1
- package/dist/src/serialization/beast2/v5/frames.d.ts +22 -12
- package/dist/src/serialization/beast2/v5/frames.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/frames.js +52 -27
- package/dist/src/serialization/beast2/v5/frames.js.map +1 -1
- package/dist/src/serialization/beast2/v5/geometry.d.ts +38 -1
- package/dist/src/serialization/beast2/v5/geometry.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/geometry.js +73 -1
- package/dist/src/serialization/beast2/v5/geometry.js.map +1 -1
- package/dist/src/serialization/beast2/v5/geometry.spec.js +34 -23
- package/dist/src/serialization/beast2/v5/geometry.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/index.spec.js +32 -28
- package/dist/src/serialization/beast2/v5/index.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/intake.d.ts +98 -0
- package/dist/src/serialization/beast2/v5/intake.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/intake.js +462 -0
- package/dist/src/serialization/beast2/v5/intake.js.map +1 -0
- package/dist/src/serialization/beast2/v5/intake.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/intake.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/intake.spec.js +202 -0
- package/dist/src/serialization/beast2/v5/intake.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/lazy.d.ts +42 -1
- package/dist/src/serialization/beast2/v5/lazy.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/lazy.js +143 -28
- package/dist/src/serialization/beast2/v5/lazy.js.map +1 -1
- package/dist/src/serialization/beast2/v5/lazy.spec.js +102 -24
- package/dist/src/serialization/beast2/v5/lazy.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/manifest-writer.d.ts +110 -0
- package/dist/src/serialization/beast2/v5/manifest-writer.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/manifest-writer.js +118 -0
- package/dist/src/serialization/beast2/v5/manifest-writer.js.map +1 -0
- package/dist/src/serialization/beast2/v5/manifest-writer.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/manifest-writer.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/manifest-writer.spec.js +207 -0
- package/dist/src/serialization/beast2/v5/manifest-writer.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/manifest.d.ts +241 -0
- package/dist/src/serialization/beast2/v5/manifest.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/manifest.js +233 -0
- package/dist/src/serialization/beast2/v5/manifest.js.map +1 -0
- package/dist/src/serialization/beast2/v5/merge.d.ts +93 -0
- package/dist/src/serialization/beast2/v5/merge.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/merge.js +202 -0
- package/dist/src/serialization/beast2/v5/merge.js.map +1 -0
- package/dist/src/serialization/beast2/v5/merge.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/merge.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/merge.spec.js +118 -0
- package/dist/src/serialization/beast2/v5/merge.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/recut.d.ts +143 -0
- package/dist/src/serialization/beast2/v5/recut.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/recut.js +365 -0
- package/dist/src/serialization/beast2/v5/recut.js.map +1 -0
- package/dist/src/serialization/beast2/v5/recut.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/recut.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/recut.spec.js +215 -0
- package/dist/src/serialization/beast2/v5/recut.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/runs.d.ts +148 -0
- package/dist/src/serialization/beast2/v5/runs.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/runs.js +260 -0
- package/dist/src/serialization/beast2/v5/runs.js.map +1 -0
- package/dist/src/serialization/beast2/v5/runs.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/runs.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/runs.spec.js +182 -0
- package/dist/src/serialization/beast2/v5/runs.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/sha256.d.ts +19 -0
- package/dist/src/serialization/beast2/v5/sha256.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/sha256.js +103 -0
- package/dist/src/serialization/beast2/v5/sha256.js.map +1 -0
- package/dist/src/serialization/beast2/v5/sha256.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/sha256.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/sha256.spec.js +42 -0
- package/dist/src/serialization/beast2/v5/sha256.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/stream.d.ts +273 -86
- package/dist/src/serialization/beast2/v5/stream.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/stream.js +576 -244
- package/dist/src/serialization/beast2/v5/stream.js.map +1 -1
- package/dist/src/serialization/beast2/v5/sync-reader.spec.js +24 -10
- package/dist/src/serialization/beast2/v5/sync-reader.spec.js.map +1 -1
- package/dist/src/serialization/index.d.ts +1 -1
- package/dist/src/serialization/index.d.ts.map +1 -1
- package/dist/src/serialization/index.js +1 -1
- package/dist/src/serialization/index.js.map +1 -1
- package/dist/src/serialization/json.d.ts +28 -0
- package/dist/src/serialization/json.d.ts.map +1 -1
- package/dist/src/serialization/json.js +141 -30
- package/dist/src/serialization/json.js.map +1 -1
- package/dist/src/serialization/json.spec.js +47 -2
- package/dist/src/serialization/json.spec.js.map +1 -1
- package/dist/src/serialization/json_schema.d.ts +15 -11
- package/dist/src/serialization/json_schema.d.ts.map +1 -1
- package/dist/src/serialization/json_schema.js +21 -36
- package/dist/src/serialization/json_schema.js.map +1 -1
- package/dist/src/serialization/json_schema.spec.js +26 -32
- package/dist/src/serialization/json_schema.spec.js.map +1 -1
- package/dist/src/serialization/json_schema_to_type.d.ts +10 -5
- package/dist/src/serialization/json_schema_to_type.d.ts.map +1 -1
- package/dist/src/serialization/json_schema_to_type.js +13 -6
- package/dist/src/serialization/json_schema_to_type.js.map +1 -1
- package/dist/src/serialization/json_schema_to_type.spec.js +19 -0
- package/dist/src/serialization/json_schema_to_type.spec.js.map +1 -1
- package/dist/src/string_order.d.ts +36 -0
- package/dist/src/string_order.d.ts.map +1 -0
- package/dist/src/string_order.js +64 -0
- package/dist/src/string_order.js.map +1 -0
- package/dist/src/string_order.spec.d.ts +6 -0
- package/dist/src/string_order.spec.d.ts.map +1 -0
- package/dist/src/string_order.spec.js +79 -0
- package/dist/src/string_order.spec.js.map +1 -0
- package/dist/src/type_of_type.d.ts +17 -0
- package/dist/src/type_of_type.d.ts.map +1 -1
- package/dist/src/type_of_type.js +66 -0
- package/dist/src/type_of_type.js.map +1 -1
- package/dist/src/type_of_type.to_etv.spec.js +69 -1
- package/dist/src/type_of_type.to_etv.spec.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,436 @@
|
|
|
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
|
+
* Stepping over a value's v5 encoding without decoding it, and proving on the
|
|
7
|
+
* way that the bytes are the ones the Writer writes for the value they hold.
|
|
8
|
+
*
|
|
9
|
+
* Decoding a value and encoding it again gives its canonical bytes, but builds
|
|
10
|
+
* the value to do it. A reader that needs only where a value ends, and that its
|
|
11
|
+
* bytes are the Writer's, can step over them instead, holding each to what the
|
|
12
|
+
* encoder writes:
|
|
13
|
+
*
|
|
14
|
+
* - varints are minimal, and a length is a safe integer;
|
|
15
|
+
* - an Integer fits 64 bits, and a DateTime is a date a `Date` holds;
|
|
16
|
+
* - a Boolean is 0 or 1, and a NaN is the one NaN the encoder writes;
|
|
17
|
+
* - a String is well-formed UTF-8;
|
|
18
|
+
* - a Variant's case is one its type has;
|
|
19
|
+
* - a container's content is one run, and an alias names an earlier container
|
|
20
|
+
* of the same type within the root element;
|
|
21
|
+
* - a Set's elements and a Dict's keys strictly ascend.
|
|
22
|
+
*
|
|
23
|
+
* Whatever decodes but would encode otherwise — what decoding and encoding
|
|
24
|
+
* again would change — is refused. Only a Set's elements and a Dict's keys are
|
|
25
|
+
* decoded, to be ordered; they are of immutable types, so each decodes on its
|
|
26
|
+
* own. A function value is refused: its captures' types are known only once
|
|
27
|
+
* its IR is decoded.
|
|
28
|
+
*
|
|
29
|
+
* A lenient skipper holds bytes to what the decoder reads instead, where that
|
|
30
|
+
* is looser than what the Writer writes: a varint need not be minimal, a NaN
|
|
31
|
+
* may be the negative one, a container's content may come in several runs, and
|
|
32
|
+
* an alias may name a container of an earlier root element, when the caller
|
|
33
|
+
* shares one `defs` list across them. Bytes that pass it decode, and encoding
|
|
34
|
+
* what they decode to gives the Writer's bytes; everything else it refuses as
|
|
35
|
+
* the strict one does.
|
|
36
|
+
*/
|
|
37
|
+
import { isTypeValueEqual } from "../../../type_of_type.js";
|
|
38
|
+
import { compareFor } from "../../../comparison.js";
|
|
39
|
+
import { asTypeValue } from "./type-section.js";
|
|
40
|
+
import { TAG_NEW, TAG_REF } from "./codec.js";
|
|
41
|
+
import { decodeBeast2FenceFor } from "./boundary.js";
|
|
42
|
+
/** Thrown where bytes are not the encoding the Writer writes — or, for a
|
|
43
|
+
* lenient skipper, not an encoding the decoder reads. */
|
|
44
|
+
export class Beast2NotCanonicalError extends Error {
|
|
45
|
+
/** What is wrong with the bytes, as a refusal names it. */
|
|
46
|
+
reason;
|
|
47
|
+
/**
|
|
48
|
+
* @param reason - what the Writer would not have written
|
|
49
|
+
*/
|
|
50
|
+
constructor(reason) {
|
|
51
|
+
super(`beast2 v5: ${reason}`);
|
|
52
|
+
this.name = "Beast2NotCanonicalError";
|
|
53
|
+
this.reason = reason;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** The largest zigzag form of a date a `Date` holds: 8.64e15 ms either side of
|
|
57
|
+
* the epoch. */
|
|
58
|
+
const DATE_ZIGZAG_MAX = 2n * 8640000000000000n;
|
|
59
|
+
/** The most elements a container of zero-width elements holds, as every
|
|
60
|
+
* decoder bounds it: a Null costs no bytes, so the bytes left bound nothing. */
|
|
61
|
+
const ZERO_WIDTH_MAX = 2 ** 28;
|
|
62
|
+
/** The most elements a container of zero-width elements holds, as every
|
|
63
|
+
* decoder bounds it. */
|
|
64
|
+
export const BEAST2_ZERO_WIDTH_MAX = ZERO_WIDTH_MAX;
|
|
65
|
+
/** Whether a value of `type` encodes to no bytes: Null, Never, and structs of
|
|
66
|
+
* them.
|
|
67
|
+
* @internal */
|
|
68
|
+
export function zeroWidth(type) {
|
|
69
|
+
if (type.type === "Null" || type.type === "Never")
|
|
70
|
+
return true;
|
|
71
|
+
return type.type === "Struct" && type.value.every((field) => zeroWidth(field.type));
|
|
72
|
+
}
|
|
73
|
+
function refuse(reason) {
|
|
74
|
+
throw new Beast2NotCanonicalError(reason);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Reads a varint the Writer writes: minimal, and no larger than a safe integer.
|
|
78
|
+
*
|
|
79
|
+
* @param reader - positioned at the varint
|
|
80
|
+
* @param what - what the varint is, for the refusal
|
|
81
|
+
* @param lenient - whether a varint that is not minimal reads
|
|
82
|
+
* @returns its value
|
|
83
|
+
* @throws {Beast2NotCanonicalError} When it is not minimal, too large, or
|
|
84
|
+
* runs past the bytes.
|
|
85
|
+
*/
|
|
86
|
+
export function canonicalVarint(reader, what, lenient = false) {
|
|
87
|
+
const buf = reader.buffer;
|
|
88
|
+
let off = reader.offset;
|
|
89
|
+
let value = 0;
|
|
90
|
+
let scale = 1;
|
|
91
|
+
for (let i = 0;; i++) {
|
|
92
|
+
if (off >= buf.length)
|
|
93
|
+
refuse(`${what} runs past the end of its bytes`);
|
|
94
|
+
const byte = buf[off++];
|
|
95
|
+
value += (byte & 0x7f) * scale;
|
|
96
|
+
if ((byte & 0x80) === 0) {
|
|
97
|
+
if (byte === 0 && i > 0 && !lenient)
|
|
98
|
+
refuse(`${what} is not a minimal varint`);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
if (i === 7)
|
|
102
|
+
refuse(`${what} is larger than a safe integer`);
|
|
103
|
+
scale *= 128;
|
|
104
|
+
}
|
|
105
|
+
if (value > Number.MAX_SAFE_INTEGER)
|
|
106
|
+
refuse(`${what} is larger than a safe integer`);
|
|
107
|
+
reader.offset = off;
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
/** Steps over `length` bytes. */
|
|
111
|
+
function bytes(reader, length, what) {
|
|
112
|
+
if (reader.offset + length > reader.buffer.length)
|
|
113
|
+
refuse(`${what} runs past the end of its bytes`);
|
|
114
|
+
reader.offset += length;
|
|
115
|
+
}
|
|
116
|
+
/** An Integer: a minimal zigzag varint of 64 bits at most. Ten bytes carry
|
|
117
|
+
* bits 63 and up in the last, which 64 bits leave 1 — or, lenient, 0 too,
|
|
118
|
+
* when the varint is padded. */
|
|
119
|
+
function integer(reader, lenient) {
|
|
120
|
+
const buf = reader.buffer;
|
|
121
|
+
let off = reader.offset;
|
|
122
|
+
for (let i = 0;; i++) {
|
|
123
|
+
if (off >= buf.length)
|
|
124
|
+
refuse("an Integer runs past the end of its bytes");
|
|
125
|
+
const byte = buf[off++];
|
|
126
|
+
if ((byte & 0x80) === 0) {
|
|
127
|
+
if (byte === 0 && i > 0 && !lenient)
|
|
128
|
+
refuse("an Integer is not a minimal varint");
|
|
129
|
+
if (i === 9 && byte > 1)
|
|
130
|
+
refuse("an Integer is larger than 64 bits");
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
if (i === 9)
|
|
134
|
+
refuse("an Integer is larger than 64 bits");
|
|
135
|
+
}
|
|
136
|
+
reader.offset = off;
|
|
137
|
+
}
|
|
138
|
+
/** A DateTime: a zigzag varint of the milliseconds of a date a `Date` holds.
|
|
139
|
+
* Seven bytes or fewer always are one; more are measured. */
|
|
140
|
+
function dateTime(reader, lenient) {
|
|
141
|
+
const start = reader.offset;
|
|
142
|
+
integer(reader, lenient);
|
|
143
|
+
const length = reader.offset - start;
|
|
144
|
+
if (length < 8)
|
|
145
|
+
return;
|
|
146
|
+
let zigzag = 0n;
|
|
147
|
+
for (let i = length - 1; i >= 0; i--)
|
|
148
|
+
zigzag = (zigzag << 7n) | BigInt(reader.buffer[start + i] & 0x7f);
|
|
149
|
+
if (zigzag > DATE_ZIGZAG_MAX)
|
|
150
|
+
refuse("a DateTime is outside the dates a Date holds");
|
|
151
|
+
}
|
|
152
|
+
/** A Float: any 64 bits but a NaN other than the encoder's,
|
|
153
|
+
* `0x7FF8000000000000` — or, lenient, the negative one the decoder also
|
|
154
|
+
* reads, `0xFFF8000000000000`. */
|
|
155
|
+
function float(reader, lenient) {
|
|
156
|
+
const buf = reader.buffer;
|
|
157
|
+
const off = reader.offset;
|
|
158
|
+
if (off + 8 > buf.length)
|
|
159
|
+
refuse("a Float runs past the end of its bytes");
|
|
160
|
+
const top = buf[off + 7];
|
|
161
|
+
const next = buf[off + 6];
|
|
162
|
+
if ((top & 0x7f) === 0x7f && (next & 0xf0) === 0xf0) {
|
|
163
|
+
const low = (buf[off] | buf[off + 1] | buf[off + 2] | buf[off + 3] | buf[off + 4] | buf[off + 5]) === 0;
|
|
164
|
+
const infinite = low && (next & 0x0f) === 0;
|
|
165
|
+
const writers = low && next === 0xf8 && (top === 0x7f || (lenient && top === 0xff));
|
|
166
|
+
if (!infinite && !writers)
|
|
167
|
+
refuse("a Float is a NaN other than the one the Writer writes");
|
|
168
|
+
}
|
|
169
|
+
reader.offset = off + 8;
|
|
170
|
+
}
|
|
171
|
+
/** A String: a length, then that many bytes of well-formed UTF-8 — no overlong
|
|
172
|
+
* form, surrogate or code point past U+10FFFF, each of which a decode
|
|
173
|
+
* replaces and an encode then writes otherwise. */
|
|
174
|
+
function string(reader, lenient) {
|
|
175
|
+
const length = canonicalVarint(reader, "a String's length", lenient);
|
|
176
|
+
const buf = reader.buffer;
|
|
177
|
+
let off = reader.offset;
|
|
178
|
+
const end = off + length;
|
|
179
|
+
if (end > buf.length)
|
|
180
|
+
refuse("a String runs past the end of its bytes");
|
|
181
|
+
while (off < end) {
|
|
182
|
+
const lead = buf[off];
|
|
183
|
+
if (lead < 0x80) {
|
|
184
|
+
off++;
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
// The well-formed sequences: the second byte's range turns on the lead.
|
|
188
|
+
let follow;
|
|
189
|
+
let low = 0x80;
|
|
190
|
+
let high = 0xbf;
|
|
191
|
+
if (lead >= 0xc2 && lead <= 0xdf)
|
|
192
|
+
follow = 1;
|
|
193
|
+
else if (lead === 0xe0) {
|
|
194
|
+
follow = 2;
|
|
195
|
+
low = 0xa0;
|
|
196
|
+
}
|
|
197
|
+
else if ((lead >= 0xe1 && lead <= 0xec) || lead === 0xee || lead === 0xef)
|
|
198
|
+
follow = 2;
|
|
199
|
+
else if (lead === 0xed) {
|
|
200
|
+
follow = 2;
|
|
201
|
+
high = 0x9f;
|
|
202
|
+
}
|
|
203
|
+
else if (lead === 0xf0) {
|
|
204
|
+
follow = 3;
|
|
205
|
+
low = 0x90;
|
|
206
|
+
}
|
|
207
|
+
else if (lead >= 0xf1 && lead <= 0xf3)
|
|
208
|
+
follow = 3;
|
|
209
|
+
else if (lead === 0xf4) {
|
|
210
|
+
follow = 3;
|
|
211
|
+
high = 0x8f;
|
|
212
|
+
}
|
|
213
|
+
else
|
|
214
|
+
refuse("a String is not well-formed UTF-8");
|
|
215
|
+
if (off + follow >= end)
|
|
216
|
+
refuse("a String is not well-formed UTF-8");
|
|
217
|
+
const second = buf[off + 1];
|
|
218
|
+
if (second < low || second > high)
|
|
219
|
+
refuse("a String is not well-formed UTF-8");
|
|
220
|
+
for (let k = 2; k <= follow; k++) {
|
|
221
|
+
const byte = buf[off + k];
|
|
222
|
+
if (byte < 0x80 || byte > 0xbf)
|
|
223
|
+
refuse("a String is not well-formed UTF-8");
|
|
224
|
+
}
|
|
225
|
+
off += follow + 1;
|
|
226
|
+
}
|
|
227
|
+
reader.offset = end;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* A mutable container's tag: `NEW`, whose content follows, recorded as a
|
|
231
|
+
* definition of `type`; or `REF` to an earlier definition of the same type in
|
|
232
|
+
* `defs`.
|
|
233
|
+
*
|
|
234
|
+
* @returns whether the container's content follows
|
|
235
|
+
*/
|
|
236
|
+
function container(reader, defs, type, lenient) {
|
|
237
|
+
const buf = reader.buffer;
|
|
238
|
+
if (reader.offset >= buf.length)
|
|
239
|
+
refuse("a container runs past the end of its bytes");
|
|
240
|
+
const tag = buf[reader.offset++];
|
|
241
|
+
if (tag === TAG_NEW) {
|
|
242
|
+
defs.push(type);
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
if (tag !== TAG_REF)
|
|
246
|
+
refuse(`a container's tag is 0x${tag.toString(16)}, neither NEW nor REF`);
|
|
247
|
+
const delta = canonicalVarint(reader, "a container alias", lenient);
|
|
248
|
+
if (delta < 1 || delta > defs.length) {
|
|
249
|
+
refuse(lenient ? "a container alias reaches outside its segment" : "a container alias reaches outside its root element");
|
|
250
|
+
}
|
|
251
|
+
const target = defs[defs.length - delta];
|
|
252
|
+
if (target !== type && !isTypeValueEqual(target, type))
|
|
253
|
+
refuse("a container alias names a container of another type");
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
/** A container's content: `varint(0)` when empty, else `varint(n)`, the n
|
|
257
|
+
* elements, and `varint(0)` — one run, as the encoder writes it; lenient,
|
|
258
|
+
* any number of runs before the `varint(0)`. Each element is given its index
|
|
259
|
+
* in the content. `zero` says the elements encode to no bytes, whose count
|
|
260
|
+
* is bounded as every decoder bounds it. */
|
|
261
|
+
function run(reader, what, lenient, zero, element) {
|
|
262
|
+
let index = 0;
|
|
263
|
+
for (;;) {
|
|
264
|
+
const n = canonicalVarint(reader, index === 0 ? `${what}'s length` : `${what}'s end`, lenient);
|
|
265
|
+
if (n === 0)
|
|
266
|
+
return;
|
|
267
|
+
if (index > 0 && !lenient)
|
|
268
|
+
refuse(`${what}'s elements are not written in one run`);
|
|
269
|
+
if (zero && index + n > ZERO_WIDTH_MAX)
|
|
270
|
+
refuse(`${what} holds more elements than a reader takes`);
|
|
271
|
+
for (let i = 0; i < n; i++)
|
|
272
|
+
element(index++);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Builds the {@link CanonicalSkipper} for a type.
|
|
277
|
+
*
|
|
278
|
+
* @param type - the type of the values to step over
|
|
279
|
+
* @param options - whether the skipper is lenient
|
|
280
|
+
* @returns the skipper
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```ts
|
|
284
|
+
* const bytes = encodeBeast2FenceFor(StringType)("key");
|
|
285
|
+
* const reader = new BufferReader(bytes, 0);
|
|
286
|
+
* canonicalSkipperFor(StringType)(reader, []);
|
|
287
|
+
* // reader.offset === bytes.length
|
|
288
|
+
* ```
|
|
289
|
+
*/
|
|
290
|
+
export function canonicalSkipperFor(type, options) {
|
|
291
|
+
return build(asTypeValue(type), new Map(), options?.lenient ?? false);
|
|
292
|
+
}
|
|
293
|
+
function build(type, recursive, lenient) {
|
|
294
|
+
switch (type.type) {
|
|
295
|
+
case "Never":
|
|
296
|
+
return () => refuse("a value of type Never");
|
|
297
|
+
case "Null":
|
|
298
|
+
return () => { };
|
|
299
|
+
case "Boolean":
|
|
300
|
+
return (reader) => {
|
|
301
|
+
if (reader.offset >= reader.buffer.length)
|
|
302
|
+
refuse("a Boolean runs past the end of its bytes");
|
|
303
|
+
if (reader.buffer[reader.offset++] > 1)
|
|
304
|
+
refuse("a Boolean is neither 0 nor 1");
|
|
305
|
+
};
|
|
306
|
+
case "Integer":
|
|
307
|
+
return (reader) => integer(reader, lenient);
|
|
308
|
+
case "Float":
|
|
309
|
+
return (reader) => float(reader, lenient);
|
|
310
|
+
case "String":
|
|
311
|
+
return (reader) => string(reader, lenient);
|
|
312
|
+
case "DateTime":
|
|
313
|
+
return (reader) => dateTime(reader, lenient);
|
|
314
|
+
case "Blob":
|
|
315
|
+
return (reader) => bytes(reader, canonicalVarint(reader, "a Blob's length", lenient), "a Blob");
|
|
316
|
+
case "Vector": {
|
|
317
|
+
const width = type.value.type === "Boolean" ? 1 : 8;
|
|
318
|
+
return (reader) => {
|
|
319
|
+
const length = canonicalVarint(reader, "a Vector's length", lenient);
|
|
320
|
+
if (length > (reader.buffer.length - reader.offset) / width)
|
|
321
|
+
refuse("a Vector runs past the end of its bytes");
|
|
322
|
+
bytes(reader, length * width, "a Vector");
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
case "Matrix": {
|
|
326
|
+
const width = type.value.type === "Boolean" ? 1 : 8;
|
|
327
|
+
return (reader) => {
|
|
328
|
+
const rows = canonicalVarint(reader, "a Matrix's rows", lenient);
|
|
329
|
+
const cols = canonicalVarint(reader, "a Matrix's columns", lenient);
|
|
330
|
+
if (rows > 0 && cols > (reader.buffer.length - reader.offset) / width / rows)
|
|
331
|
+
refuse("a Matrix runs past the end of its bytes");
|
|
332
|
+
bytes(reader, rows * cols * width, "a Matrix");
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
case "Array": {
|
|
336
|
+
let element;
|
|
337
|
+
const zero = zeroWidth(type.value);
|
|
338
|
+
const skip = (reader, defs) => {
|
|
339
|
+
if (container(reader, defs, type, lenient))
|
|
340
|
+
run(reader, "an Array", lenient, zero, () => element(reader, defs));
|
|
341
|
+
};
|
|
342
|
+
element = build(type.value, recursive, lenient);
|
|
343
|
+
return skip;
|
|
344
|
+
}
|
|
345
|
+
case "Set": {
|
|
346
|
+
let element;
|
|
347
|
+
const decode = decodeBeast2FenceFor(type.value);
|
|
348
|
+
const cmp = compareFor(type.value);
|
|
349
|
+
const zero = zeroWidth(type.value);
|
|
350
|
+
const skip = (reader, defs) => {
|
|
351
|
+
if (!container(reader, defs, type, lenient))
|
|
352
|
+
return;
|
|
353
|
+
let previous;
|
|
354
|
+
run(reader, "a Set", lenient, zero, (index) => {
|
|
355
|
+
const start = reader.offset;
|
|
356
|
+
element(reader, defs);
|
|
357
|
+
const value = decode(reader.buffer.subarray(start, reader.offset));
|
|
358
|
+
if (index > 0 && cmp(previous, value) >= 0)
|
|
359
|
+
refuse("a Set's elements do not strictly ascend");
|
|
360
|
+
previous = value;
|
|
361
|
+
});
|
|
362
|
+
};
|
|
363
|
+
element = build(type.value, recursive, lenient);
|
|
364
|
+
return skip;
|
|
365
|
+
}
|
|
366
|
+
case "Dict": {
|
|
367
|
+
let key;
|
|
368
|
+
let value;
|
|
369
|
+
const decode = decodeBeast2FenceFor(type.value.key);
|
|
370
|
+
const cmp = compareFor(type.value.key);
|
|
371
|
+
const zero = zeroWidth(type.value.key) && zeroWidth(type.value.value);
|
|
372
|
+
const skip = (reader, defs) => {
|
|
373
|
+
if (!container(reader, defs, type, lenient))
|
|
374
|
+
return;
|
|
375
|
+
let previous;
|
|
376
|
+
run(reader, "a Dict", lenient, zero, (index) => {
|
|
377
|
+
const start = reader.offset;
|
|
378
|
+
key(reader, defs);
|
|
379
|
+
const k = decode(reader.buffer.subarray(start, reader.offset));
|
|
380
|
+
if (index > 0 && cmp(previous, k) >= 0)
|
|
381
|
+
refuse("a Dict's keys do not strictly ascend");
|
|
382
|
+
previous = k;
|
|
383
|
+
value(reader, defs);
|
|
384
|
+
});
|
|
385
|
+
};
|
|
386
|
+
key = build(type.value.key, recursive, lenient);
|
|
387
|
+
value = build(type.value.value, recursive, lenient);
|
|
388
|
+
return skip;
|
|
389
|
+
}
|
|
390
|
+
case "Ref": {
|
|
391
|
+
let inner;
|
|
392
|
+
const skip = (reader, defs) => {
|
|
393
|
+
if (container(reader, defs, type, lenient))
|
|
394
|
+
inner(reader, defs);
|
|
395
|
+
};
|
|
396
|
+
inner = build(type.value, recursive, lenient);
|
|
397
|
+
return skip;
|
|
398
|
+
}
|
|
399
|
+
case "Struct": {
|
|
400
|
+
const fields = type.value.map((field) => build(field.type, recursive, lenient));
|
|
401
|
+
return (reader, defs) => {
|
|
402
|
+
for (const field of fields)
|
|
403
|
+
field(reader, defs);
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
case "Variant": {
|
|
407
|
+
const cases = type.value.map((c) => build(c.type, recursive, lenient));
|
|
408
|
+
return (reader, defs) => {
|
|
409
|
+
const tag = canonicalVarint(reader, "a Variant's case", lenient);
|
|
410
|
+
if (tag >= cases.length)
|
|
411
|
+
refuse(`a Variant's case ${tag} is not one of its ${cases.length}`);
|
|
412
|
+
cases[tag](reader, defs);
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
case "Recursive": {
|
|
416
|
+
const node = type.value;
|
|
417
|
+
if (node.type === "wrapper") {
|
|
418
|
+
let inner;
|
|
419
|
+
const skip = (reader, defs) => inner(reader, defs);
|
|
420
|
+
recursive.set(node.value.id, skip);
|
|
421
|
+
inner = build(node.value.inner, recursive, lenient);
|
|
422
|
+
return skip;
|
|
423
|
+
}
|
|
424
|
+
const target = recursive.get(node.value);
|
|
425
|
+
if (target === undefined)
|
|
426
|
+
throw new Error("beast2 v5: a recursive type refers to one not being built");
|
|
427
|
+
return target;
|
|
428
|
+
}
|
|
429
|
+
case "Function":
|
|
430
|
+
case "AsyncFunction":
|
|
431
|
+
return () => refuse("a function value, whose captures' types only its decoded IR says");
|
|
432
|
+
default:
|
|
433
|
+
throw new Error(`beast2 v5: unknown type ${type.type}`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../../../src/serialization/beast2/v5/canonical.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAsB,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD;0DAC0D;AAC1D,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,2DAA2D;IAClD,MAAM,CAAS;IAExB;;OAEG;IACH,YAAY,MAAc;QACxB,KAAK,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAqBD;iBACiB;AACjB,MAAM,eAAe,GAAG,EAAE,GAAG,iBAAsB,CAAC;AAEpD;iFACiF;AACjF,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC;AAE/B;yBACyB;AACzB,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAEpD;;gBAEgB;AAChB,MAAM,UAAU,SAAS,CAAC,IAAmB;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,MAAM,CAAC,MAAc;IAC5B,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB,EAAE,IAAY,EAAE,OAAO,GAAG,KAAK;IACjF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,IAAI,iCAAiC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAE,CAAC;QACzB,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;YAC/E,MAAM;QACR,CAAC;QACD,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;QAC7D,KAAK,IAAI,GAAG,CAAC;IACf,CAAC;IACD,IAAI,KAAK,GAAG,MAAM,CAAC,gBAAgB;QAAE,MAAM,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;IACrF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iCAAiC;AACjC,SAAS,KAAK,CAAC,MAAoB,EAAE,MAAc,EAAE,IAAY;IAC/D,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,IAAI,iCAAiC,CAAC,CAAC;IACpG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;AAC1B,CAAC;AAED;;iCAEiC;AACjC,SAAS,OAAO,CAAC,MAAoB,EAAE,OAAgB;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,CAAC,2CAA2C,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAE,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,oCAAoC,CAAC,CAAC;YAClF,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;gBAAE,MAAM,CAAC,mCAAmC,CAAC,CAAC;YACrE,MAAM;QACR,CAAC;QACD,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AACtB,CAAC;AAED;8DAC8D;AAC9D,SAAS,QAAQ,CAAC,MAAoB,EAAE,OAAgB;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO;IACvB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,MAAM,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC;IACzG,IAAI,MAAM,GAAG,eAAe;QAAE,MAAM,CAAC,8CAA8C,CAAC,CAAC;AACvF,CAAC;AAED;;mCAEmC;AACnC,SAAS,KAAK,CAAC,MAAoB,EAAE,OAAgB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM;QAAE,MAAM,CAAC,wCAAwC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,uDAAuD,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;oDAEoD;AACpD,SAAS,MAAM,CAAC,MAAoB,EAAE,OAAgB;IACpD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;IACzB,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM;QAAE,MAAM,CAAC,yCAAyC,CAAC,CAAC;IACxE,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAE,CAAC;QACvB,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YAChB,GAAG,EAAE,CAAC;YACN,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,IAAI,MAAc,CAAC;QACnB,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;aACxC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,CAAC,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC;QAAC,CAAC;aAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;aACjF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,CAAC,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC;QAAC,CAAC;aAC/C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,CAAC,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC;QAAC,CAAC;aAC9C,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;aAC7C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,CAAC,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC;QAAC,CAAC;;YAC/C,MAAM,CAAC,mCAAmC,CAAC,CAAC;QACjD,IAAI,GAAG,GAAG,MAAM,IAAI,GAAG;YAAE,MAAM,CAAC,mCAAmC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;QAC7B,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,IAAI;YAAE,MAAM,CAAC,mCAAmC,CAAC,CAAC;QAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;YAC3B,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;gBAAE,MAAM,CAAC,mCAAmC,CAAC,CAAC;QAC9E,CAAC;QACD,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,MAAoB,EAAE,IAAqB,EAAE,IAAmB,EAAE,OAAgB;IACnG,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;QAAE,MAAM,CAAC,4CAA4C,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAE,CAAC;IAClC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,KAAK,OAAO;QAAE,MAAM,CAAC,0BAA0B,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC;IAC3H,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAE,CAAC;IAC1C,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;QAAE,MAAM,CAAC,qDAAqD,CAAC,CAAC;IACtH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;6CAI6C;AAC7C,SAAS,GAAG,CAAC,MAAoB,EAAE,IAAY,EAAE,OAAgB,EAAE,IAAa,EAAE,OAAgC;IAChH,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,SAAS,CAAC;QACR,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO;QACpB,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;QACnF,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,GAAG,cAAc;YAAE,MAAM,CAAC,GAAG,IAAI,0CAA0C,CAAC,CAAC;QAClG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA8B,EAAE,OAAiC;IACnG,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,KAAK,CAAC,IAAmB,EAAE,SAAwC,EAAE,OAAgB;IAC5F,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,EAAE,EAAE;gBAChB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM;oBAAE,MAAM,CAAC,0CAA0C,CAAC,CAAC;gBAC9F,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAE,GAAG,CAAC;oBAAE,MAAM,CAAC,8BAA8B,CAAC,CAAC;YAClF,CAAC,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,KAAK,QAAQ;YACX,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,KAAK,UAAU;YACb,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClG,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,MAAM,EAAE,EAAE;gBAChB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;gBACrE,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;oBAAE,MAAM,CAAC,yCAAyC,CAAC,CAAC;gBAC/G,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,CAAC,CAAC;YAC5C,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,MAAM,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;gBACjE,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;gBACpE,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI;oBAAE,MAAM,CAAC,yCAAyC,CAAC,CAAC;gBAChI,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,UAAU,CAAC,CAAC;YACjD,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,OAAyB,CAAC;YAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,IAAI,GAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC9C,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;oBAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAClH,CAAC,CAAC;YACF,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,OAAyB,CAAC;YAC9B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAuC,CAAC;YACzE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,IAAI,GAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;oBAAE,OAAO;gBACpD,IAAI,QAAiB,CAAC;gBACtB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC5B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBACnE,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;wBAAE,MAAM,CAAC,yCAAyC,CAAC,CAAC;oBAC9F,QAAQ,GAAG,KAAK,CAAC;gBACnB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,GAAqB,CAAC;YAC1B,IAAI,KAAuB,CAAC;YAC5B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuC,CAAC;YAC7E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtE,MAAM,IAAI,GAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;oBAAE,OAAO;gBACpD,IAAI,QAAiB,CAAC;gBACtB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC5B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAClB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC/D,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;wBAAE,MAAM,CAAC,sCAAsC,CAAC,CAAC;oBACvF,QAAQ,GAAG,CAAC,CAAC;oBACb,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,KAAuB,CAAC;YAC5B,MAAM,IAAI,GAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC9C,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;oBAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClE,CAAC,CAAC;YACF,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBACtB,KAAK,MAAM,KAAK,IAAI,MAAM;oBAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;gBACjE,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM;oBAAE,MAAM,CAAC,oBAAoB,GAAG,sBAAsB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7F,KAAK,CAAC,GAAG,CAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAA0G,CAAC;YAC7H,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,KAAuB,CAAC;gBAC5B,MAAM,IAAI,GAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACnC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YACvG,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,eAAe;YAClB,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC;QAC1F;YACE,MAAM,IAAI,KAAK,CAAC,2BAA4B,IAAyB,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.spec.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/beast2/v5/canonical.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,124 @@
|
|
|
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
|
+
* The canonical skipper, held to the encoder: it steps over exactly what the
|
|
7
|
+
* encoder writes for any value, aliasing among its containers included, and
|
|
8
|
+
* refuses what a decoder reads but the encoder would never write. The lenient
|
|
9
|
+
* one steps over what the decoder reads, too.
|
|
10
|
+
*/
|
|
11
|
+
import { describe, test } from "node:test";
|
|
12
|
+
import assert from "node:assert/strict";
|
|
13
|
+
import { ArrayType, BooleanType, DateTimeType, DictType, FloatType, FunctionType, IntegerType, NullType, RefType, SetType, StringType, StructType, VariantType, } from "../../../types.js";
|
|
14
|
+
import { ref } from "../../../containers/ref.js";
|
|
15
|
+
import { generateFuzzValues } from "../../../fuzz.js";
|
|
16
|
+
import { BufferReader, BufferWriter } from "../../binary-utils.js";
|
|
17
|
+
import { encodeBeast2FenceFor } from "./boundary.js";
|
|
18
|
+
import { Beast2NotCanonicalError, canonicalSkipperFor, canonicalVarint } from "./canonical.js";
|
|
19
|
+
/** Where the skipper leaves a reader over `bytes`, or its refusal. */
|
|
20
|
+
function skip(type, bytes) {
|
|
21
|
+
const reader = new BufferReader(bytes, 0);
|
|
22
|
+
canonicalSkipperFor(type)(reader, []);
|
|
23
|
+
return reader.offset;
|
|
24
|
+
}
|
|
25
|
+
/** Bytes written with a writer's own calls. */
|
|
26
|
+
function bytesOf(write) {
|
|
27
|
+
const writer = new BufferWriter();
|
|
28
|
+
write(writer);
|
|
29
|
+
return writer.toUint8Array().slice();
|
|
30
|
+
}
|
|
31
|
+
describe("canonicalSkipperFor", () => {
|
|
32
|
+
test("steps over exactly what the encoder writes, for every random type", () => {
|
|
33
|
+
const cases = generateFuzzValues({ numTypes: 120, numSamples: 6, seed: 0xca70, includeFunctions: false, nestedRecursive: true, includeTypeValues: true });
|
|
34
|
+
assert.ok(cases.length >= 100, `the fuzz made ${cases.length} types`);
|
|
35
|
+
for (const c of cases) {
|
|
36
|
+
const encode = encodeBeast2FenceFor(c.type);
|
|
37
|
+
for (const value of c.values) {
|
|
38
|
+
const bytes = encode(value);
|
|
39
|
+
assert.equal(skip(c.type, bytes), bytes.length, `${c.typeName}: every byte of the value, and no more`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
test("steps over a value whose containers alias one another, as the encoder writes them", () => {
|
|
44
|
+
const Pair = StructType({ left: ArrayType(IntegerType), right: ArrayType(IntegerType) });
|
|
45
|
+
const shared = [1n, 2n];
|
|
46
|
+
const pair = encodeBeast2FenceFor(Pair)({ left: shared, right: shared });
|
|
47
|
+
assert.equal(skip(Pair, pair), pair.length);
|
|
48
|
+
const Cells = StructType({ x: RefType(IntegerType), y: RefType(IntegerType) });
|
|
49
|
+
const cell = ref(7n);
|
|
50
|
+
const cells = encodeBeast2FenceFor(Cells)({ x: cell, y: cell });
|
|
51
|
+
assert.equal(skip(Cells, cells), cells.length);
|
|
52
|
+
});
|
|
53
|
+
test("refuses what a decoder reads but the encoder would never write", () => {
|
|
54
|
+
const refused = (type, bytes, message) => {
|
|
55
|
+
assert.throws(() => skip(type, bytes), (err) => err instanceof Beast2NotCanonicalError && message.test(err.message));
|
|
56
|
+
};
|
|
57
|
+
// 5 is zigzag 10: one byte, 0x0A — not 0x8A 0x00.
|
|
58
|
+
refused(IntegerType, new Uint8Array([0x8a, 0x00]), /an Integer is not a minimal varint/);
|
|
59
|
+
refused(IntegerType, new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02]), /an Integer is larger than 64 bits/);
|
|
60
|
+
refused(BooleanType, new Uint8Array([0x02]), /a Boolean is neither 0 nor 1/);
|
|
61
|
+
// U+0000 as two bytes, a surrogate, a code point past U+10FFFF, a lone continuation.
|
|
62
|
+
refused(StringType, new Uint8Array([0x02, 0xc0, 0x80]), /a String is not well-formed UTF-8/);
|
|
63
|
+
refused(StringType, new Uint8Array([0x03, 0xed, 0xa0, 0x80]), /a String is not well-formed UTF-8/);
|
|
64
|
+
refused(StringType, new Uint8Array([0x04, 0xf4, 0x90, 0x80, 0x80]), /a String is not well-formed UTF-8/);
|
|
65
|
+
refused(StringType, new Uint8Array([0x01, 0x80]), /a String is not well-formed UTF-8/);
|
|
66
|
+
// The encoder writes 0x7FF8000000000000 for every NaN.
|
|
67
|
+
refused(FloatType, new Uint8Array([0, 0, 0, 0, 0, 0, 0xf8, 0xff]), /a NaN other than the one the Writer writes/);
|
|
68
|
+
refused(FloatType, new Uint8Array([1, 0, 0, 0, 0, 0, 0xf0, 0x7f]), /a NaN other than the one the Writer writes/);
|
|
69
|
+
// 8.64e15 ms is the last date a Date holds.
|
|
70
|
+
refused(DateTimeType, bytesOf((w) => w.writeZigzag(8640000000000001n)), /a DateTime is outside the dates a Date holds/);
|
|
71
|
+
// [1, 2] as two runs, where the encoder writes one.
|
|
72
|
+
refused(ArrayType(IntegerType), new Uint8Array([0x00, 0x01, 0x02, 0x01, 0x04, 0x00]), /an Array's elements are not written in one run/);
|
|
73
|
+
refused(SetType(StringType), bytesOf((w) => { w.writeUint8(0); w.writeVarint(2); w.writeStringUtf8Varint("b"); w.writeStringUtf8Varint("a"); w.writeVarint(0); }), /a Set's elements do not strictly ascend/);
|
|
74
|
+
refused(DictType(StringType, IntegerType), bytesOf((w) => { w.writeUint8(0); w.writeVarint(2); w.writeStringUtf8Varint("a"); w.writeZigzag(1n); w.writeStringUtf8Varint("a"); w.writeZigzag(2n); w.writeVarint(0); }), /a Dict's keys do not strictly ascend/);
|
|
75
|
+
// `right` aliases `left`, an Array of another type.
|
|
76
|
+
refused(StructType({ left: ArrayType(IntegerType), right: ArrayType(StringType) }), new Uint8Array([0x00, 0x01, 0x02, 0x00, 0x01, 0x01]), /a container alias names a container of another type/);
|
|
77
|
+
// An alias to a container before the value's own.
|
|
78
|
+
refused(ArrayType(IntegerType), new Uint8Array([0x01, 0x01]), /a container alias reaches outside its root element/);
|
|
79
|
+
refused(ArrayType(IntegerType), new Uint8Array([0x02]), /a container's tag is 0x2, neither NEW nor REF/);
|
|
80
|
+
// Nulls cost no bytes, so their count is bounded as every decoder bounds it.
|
|
81
|
+
refused(ArrayType(NullType), bytesOf((w) => { w.writeUint8(0); w.writeVarint(2 ** 28 + 1); w.writeVarint(0); }), /an Array holds more elements than a reader takes/);
|
|
82
|
+
refused(VariantType({ a: IntegerType, b: StringType }), new Uint8Array([0x02]), /a Variant's case 2 is not one of its 2/);
|
|
83
|
+
refused(FunctionType([], IntegerType), new Uint8Array([0x00]), /a function value/);
|
|
84
|
+
});
|
|
85
|
+
test("a lenient skipper reads what the decoder reads, and refuses the rest as the strict one does", () => {
|
|
86
|
+
const lenient = (type, bytes, defs = []) => {
|
|
87
|
+
const reader = new BufferReader(bytes, 0);
|
|
88
|
+
canonicalSkipperFor(type, { lenient: true })(reader, defs);
|
|
89
|
+
return reader.offset;
|
|
90
|
+
};
|
|
91
|
+
const refused = (type, bytes, message) => {
|
|
92
|
+
assert.throws(() => lenient(type, bytes), (err) => err instanceof Beast2NotCanonicalError && message.test(err.message));
|
|
93
|
+
};
|
|
94
|
+
// Varints that are not minimal, padded to ten bytes for an Integer.
|
|
95
|
+
assert.equal(lenient(IntegerType, new Uint8Array([0x8a, 0x00])), 2);
|
|
96
|
+
assert.equal(lenient(IntegerType, new Uint8Array([0x8a, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00])), 10);
|
|
97
|
+
assert.equal(lenient(StringType, new Uint8Array([0x81, 0x00, 0x61])), 3);
|
|
98
|
+
// A DateTime padded past eight bytes is measured, not refused by length.
|
|
99
|
+
assert.equal(lenient(DateTimeType, new Uint8Array([0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00])), 9);
|
|
100
|
+
// The negative NaN, which the decoder reads as NaN.
|
|
101
|
+
assert.equal(lenient(FloatType, new Uint8Array([0, 0, 0, 0, 0, 0, 0xf8, 0xff])), 8);
|
|
102
|
+
// [1, 2] as two runs.
|
|
103
|
+
assert.equal(lenient(ArrayType(IntegerType), new Uint8Array([0x00, 0x01, 0x02, 0x01, 0x04, 0x00])), 6);
|
|
104
|
+
// An alias into an earlier row, when the rows share their definitions.
|
|
105
|
+
const shared = [];
|
|
106
|
+
assert.equal(lenient(ArrayType(IntegerType), new Uint8Array([0x00, 0x01, 0x02, 0x00]), shared), 4);
|
|
107
|
+
assert.equal(lenient(ArrayType(IntegerType), new Uint8Array([0x01, 0x01]), shared), 2);
|
|
108
|
+
refused(ArrayType(IntegerType), new Uint8Array([0x01, 0x01]), /a container alias reaches outside its segment/);
|
|
109
|
+
refused(FloatType, new Uint8Array([1, 0, 0, 0, 0, 0, 0xf0, 0x7f]), /a NaN other than the one the Writer writes/);
|
|
110
|
+
refused(BooleanType, new Uint8Array([0x02]), /a Boolean is neither 0 nor 1/);
|
|
111
|
+
refused(StringType, new Uint8Array([0x01, 0x80]), /a String is not well-formed UTF-8/);
|
|
112
|
+
refused(IntegerType, new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02]), /an Integer is larger than 64 bits/);
|
|
113
|
+
refused(DateTimeType, bytesOf((w) => w.writeZigzag(8640000000000001n)), /a DateTime is outside the dates a Date holds/);
|
|
114
|
+
refused(SetType(StringType), bytesOf((w) => { w.writeUint8(0); w.writeVarint(1); w.writeStringUtf8Varint("b"); w.writeVarint(1); w.writeStringUtf8Varint("a"); w.writeVarint(0); }), /a Set's elements do not strictly ascend/);
|
|
115
|
+
});
|
|
116
|
+
test("reads a varint only as the encoder writes it", () => {
|
|
117
|
+
assert.equal(canonicalVarint(new BufferReader(new Uint8Array([0x7f]), 0), "a length"), 127);
|
|
118
|
+
assert.equal(canonicalVarint(new BufferReader(bytesOf((w) => w.writeVarint(Number.MAX_SAFE_INTEGER)), 0), "a length"), Number.MAX_SAFE_INTEGER);
|
|
119
|
+
assert.throws(() => canonicalVarint(new BufferReader(new Uint8Array([0xff, 0x00]), 0), "a length"), /a length is not a minimal varint/);
|
|
120
|
+
assert.throws(() => canonicalVarint(new BufferReader(new Uint8Array([0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), 0), "a length"), /larger than a safe integer/);
|
|
121
|
+
assert.throws(() => canonicalVarint(new BufferReader(new Uint8Array([0x80]), 0), "a length"), /a length runs past the end of its bytes/);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=canonical.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.spec.js","sourceRoot":"","sources":["../../../../../src/serialization/beast2/v5/canonical.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,13 +52,13 @@ export declare const TAG_NEW = 0;
|
|
|
52
52
|
export declare const TAG_REF = 1;
|
|
53
53
|
/** Mutable state threaded through a v5 encode pass. */
|
|
54
54
|
export interface V5EncodeContext {
|
|
55
|
-
/** Identity map: container object → definition index. Cleared
|
|
56
|
-
*
|
|
55
|
+
/** Identity map: container object → definition index. Cleared at every root
|
|
56
|
+
* element of a segmented collection, so no REF reaches past its element. */
|
|
57
57
|
containerIndex: Map<any, number>;
|
|
58
58
|
/** Count of container definitions so far (the definition counter). */
|
|
59
59
|
containerCount: number;
|
|
60
|
-
/** Definition count at the start of the current root
|
|
61
|
-
* reaching below this mark
|
|
60
|
+
/** Definition count at the start of the current root element — REFs
|
|
61
|
+
* reaching below this mark would alias across elements. */
|
|
62
62
|
segmentBaseDef: number;
|
|
63
63
|
/** Whether any REF crossed a root-segment boundary. */
|
|
64
64
|
crossSegmentRef: boolean;
|
|
@@ -75,7 +75,8 @@ export interface V5EncodeContext {
|
|
|
75
75
|
/** Creates a fresh v5 encode context.
|
|
76
76
|
*
|
|
77
77
|
* @param sourceMap - the pre-resolved header source map, if any
|
|
78
|
-
* @param selfContained - whether the writer
|
|
78
|
+
* @param selfContained - whether the writer's segments must decode on their
|
|
79
|
+
* own, which forbids inline source-map growth
|
|
79
80
|
* @returns the initialized context
|
|
80
81
|
*/
|
|
81
82
|
export declare function createV5EncodeContext(sourceMap: SourceMap | null, selfContained: boolean): V5EncodeContext;
|