functionalscript 0.44.0 → 0.45.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/fjs/asn.1/proof.f.d.mts +5 -0
- package/fjs/asn.1/proof.f.mjs +15 -3
- package/fjs/asserts/module.f.d.mts +14 -0
- package/fjs/asserts/module.f.mjs +20 -0
- package/fjs/asserts/proof.f.d.mts +3 -0
- package/fjs/asserts/proof.f.mjs +15 -1
- package/fjs/basen/base128/proof.f.d.mts +3 -1
- package/fjs/basen/base128/proof.f.mjs +3 -1
- package/fjs/basen/base64/module.f.mjs +7 -3
- package/fjs/basen/base64/proof.f.d.mts +3 -1
- package/fjs/basen/base64/proof.f.mjs +7 -4
- package/fjs/basen/cbase32/proof.f.d.mts +3 -1
- package/fjs/basen/cbase32/proof.f.mjs +3 -1
- package/fjs/bnf/data/proof.f.mjs +0 -1
- package/fjs/bnf/descent/module.f.d.mts +17 -2
- package/fjs/bnf/descent/module.f.mjs +118 -41
- package/fjs/bnf/descent/proof.f.d.mts +1 -0
- package/fjs/bnf/descent/proof.f.mjs +77 -1
- package/fjs/bnf/descent/types.d.ts +12 -4
- package/fjs/bnf/ll1/module.f.d.mts +28 -2
- package/fjs/bnf/ll1/module.f.mjs +180 -38
- package/fjs/bnf/ll1/proof.f.d.mts +2 -0
- package/fjs/bnf/ll1/proof.f.mjs +62 -1
- package/fjs/bnf/ll1/types.d.ts +14 -8
- package/fjs/bnf/module.f.d.mts +15 -6
- package/fjs/bnf/module.f.mjs +52 -11
- package/fjs/bnf/proof.f.d.mts +2 -0
- package/fjs/bnf/proof.f.mjs +79 -3
- package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
- package/fjs/bnf/token_symbol/module.f.mjs +7 -6
- package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
- package/fjs/bnf/token_symbol/types.d.ts +2 -2
- package/fjs/bnf/types.d.ts +10 -3
- package/fjs/cas/cli/proof.f.d.mts +3 -1
- package/fjs/cas/cli/proof.f.mjs +3 -1
- package/fjs/cas/evo/module.f.d.mts +7 -13
- package/fjs/cas/evo/module.f.mjs +103 -96
- package/fjs/cas/evo/proof.f.mjs +6 -3
- package/fjs/cas/module.f.mjs +96 -109
- package/fjs/ci/common/module.f.d.mts +1 -1
- package/fjs/ci/common/module.f.mjs +1 -0
- package/fjs/ci/config/module.f.d.mts +2 -2
- package/fjs/ci/config/module.f.mjs +2 -2
- package/fjs/ci/nix/proof.f.d.mts +2 -0
- package/fjs/ci/nix/proof.f.mjs +2 -2
- package/fjs/ci/proof.f.d.mts +4 -2
- package/fjs/ci/proof.f.mjs +4 -3
- package/fjs/cli/proof.f.d.mts +4 -2
- package/fjs/cli/proof.f.mjs +4 -2
- package/fjs/common/monoid/module.f.d.mts +70 -12
- package/fjs/common/monoid/module.f.mjs +177 -14
- package/fjs/common/monoid/proof.f.d.mts +12 -1
- package/fjs/common/monoid/proof.f.mjs +88 -4
- package/fjs/common/monoid/types.d.ts +23 -0
- package/fjs/crypto/secp/proof.f.d.mts +3 -1
- package/fjs/crypto/secp/proof.f.mjs +3 -1
- package/fjs/crypto/sha2/proof.f.d.mts +3 -1
- package/fjs/crypto/sha2/proof.f.mjs +3 -1
- package/fjs/crypto/vdf/module.f.d.mts +23 -4
- package/fjs/crypto/vdf/module.f.mjs +6 -4
- package/fjs/dev/module.f.d.mts +5 -2
- package/fjs/dev/module.f.mjs +5 -4
- package/fjs/dev/package_json/module.f.d.mts +7 -0
- package/fjs/dev/package_json/module.f.mjs +10 -7
- package/fjs/dev/update/module.f.d.mts +3 -0
- package/fjs/dev/update/module.f.mjs +3 -2
- package/fjs/dev/update/proof.f.d.mts +3 -0
- package/fjs/dev/update/proof.f.mjs +1 -2
- package/fjs/djs/parser/module.f.d.mts +3 -0
- package/fjs/djs/parser/module.f.mjs +18 -0
- package/fjs/djs/parser/proof.f.d.mts +3 -0
- package/fjs/djs/parser/proof.f.mjs +13 -1
- package/fjs/djs/proof.f.d.mts +3 -0
- package/fjs/djs/proof.f.mjs +4 -1
- package/fjs/djs/serializer/module.f.mjs +5 -4
- package/fjs/djs/tokenizer/module.f.mjs +21 -13
- package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
- package/fjs/djs/tokenizer/proof.f.mjs +14 -2
- package/fjs/djs/transpiler/module.f.d.mts +1 -12
- package/fjs/djs/transpiler/module.f.mjs +1 -20
- package/fjs/djs/transpiler/types.d.ts +25 -0
- package/fjs/effects/eff/module.f.d.mts +10 -0
- package/fjs/effects/eff/module.f.mjs +4 -2
- package/fjs/effects/eff/proof.f.d.mts +3 -0
- package/fjs/effects/eff/proof.f.mjs +4 -1
- package/fjs/effects/list/module.f.d.mts +10 -2
- package/fjs/effects/list/module.f.mjs +4 -2
- package/fjs/effects/memory/module.f.d.mts +4 -2
- package/fjs/effects/memory/module.f.mjs +4 -3
- package/fjs/effects/memory/proof.f.d.mts +4 -0
- package/fjs/effects/memory/proof.f.mjs +5 -2
- package/fjs/effects/mock/module.f.d.mts +10 -2
- package/fjs/effects/mock/module.f.mjs +4 -2
- package/fjs/effects/module.d.mts +8 -0
- package/fjs/effects/module.f.d.mts +6 -4
- package/fjs/effects/module.f.mjs +6 -5
- package/fjs/effects/module.mjs +9 -1
- package/fjs/effects/node/memory/module.d.mts +3 -0
- package/fjs/effects/node/memory/module.mjs +3 -2
- package/fjs/effects/node/memory/proof.d.mts +2 -0
- package/fjs/effects/node/memory/proof.mjs +2 -1
- package/fjs/effects/node/module.d.mts +5 -0
- package/fjs/effects/node/module.f.d.mts +17 -12
- package/fjs/effects/node/module.f.mjs +6 -12
- package/fjs/effects/node/module.mjs +5 -17
- package/fjs/effects/node/virtual/module.f.d.mts +6 -3
- package/fjs/effects/node/virtual/module.f.mjs +6 -5
- package/fjs/effects/node/virtual/proof.f.d.mts +4 -1
- package/fjs/effects/node/virtual/proof.f.mjs +13 -1
- package/fjs/effects/proof.f.d.mts +3 -0
- package/fjs/effects/proof.f.mjs +4 -1
- package/fjs/emergent_testing/all.test.d.mts +8 -0
- package/fjs/emergent_testing/all.test.mjs +14 -0
- package/fjs/emergent_testing/module.f.d.mts +6 -1
- package/fjs/emergent_testing/module.f.mjs +40 -66
- package/fjs/emergent_testing/proof.f.mjs +5 -5
- package/fjs/fsc/bnf.f.d.mts +3 -0
- package/fjs/fsc/bnf.f.mjs +4 -1
- package/fjs/fsc/json.f.d.mts +3 -0
- package/fjs/fsc/json.f.mjs +4 -1
- package/fjs/fsc/module.f.d.mts +9 -0
- package/fjs/fsc/module.f.mjs +5 -3
- package/fjs/fsm/proof.f.d.mts +3 -0
- package/fjs/fsm/proof.f.mjs +4 -1
- package/fjs/js/tokenizer/module.f.d.mts +7 -0
- package/fjs/js/tokenizer/module.f.mjs +19 -55
- package/fjs/mcp/module.f.d.mts +36 -1
- package/fjs/mcp/module.f.mjs +9 -7
- package/fjs/mcp/proof.f.d.mts +11 -1
- package/fjs/mcp/proof.f.mjs +11 -18
- package/fjs/media/html/module.f.d.mts +12 -0
- package/fjs/media/html/module.f.mjs +6 -4
- package/fjs/media/html/proof.f.d.mts +3 -0
- package/fjs/media/html/proof.f.mjs +4 -1
- package/fjs/media/json/parser/module.f.d.mts +1 -1
- package/fjs/media/json/parser/module.f.mjs +25 -8
- package/fjs/media/json/parser/types.d.ts +5 -0
- package/fjs/media/json/rtti/proof.f.d.mts +3 -0
- package/fjs/media/json/rtti/proof.f.mjs +3 -3
- package/fjs/media/json/schema/module.f.d.mts +61 -27
- package/fjs/media/json/schema/module.f.mjs +228 -63
- package/fjs/media/json/schema/proof.f.d.mts +41 -0
- package/fjs/media/json/schema/proof.f.mjs +219 -7
- package/fjs/media/json/serializer/module.f.d.mts +13 -0
- package/fjs/media/json/serializer/module.f.mjs +7 -7
- package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
- package/fjs/media/json/tokenizer/module.f.mjs +24 -5
- package/fjs/media/nix/module.f.d.mts +13 -0
- package/fjs/media/nix/module.f.mjs +4 -2
- package/fjs/media/nix/proof.f.d.mts +3 -0
- package/fjs/media/nix/proof.f.mjs +4 -1
- package/fjs/media/revision/module.f.d.mts +5 -0
- package/fjs/media/revision/module.f.mjs +8 -11
- package/fjs/media/revision/proof.f.d.mts +4 -0
- package/fjs/media/revision/proof.f.mjs +5 -2
- package/fjs/media/type/module.f.d.mts +28 -11
- package/fjs/media/type/module.f.mjs +69 -85
- package/fjs/media/type/proof.f.d.mts +16 -0
- package/fjs/media/type/proof.f.mjs +44 -4
- package/fjs/module.d.mts +5 -0
- package/fjs/module.f.d.mts +8 -0
- package/fjs/module.f.mjs +4 -2
- package/fjs/module.mjs +6 -0
- package/fjs/path/module.f.d.mts +8 -0
- package/fjs/path/module.f.mjs +4 -2
- package/fjs/proof.f.d.mts +4 -0
- package/fjs/proof.f.mjs +5 -2
- package/fjs/protocol/json_rpc/module.f.d.mts +1 -1
- package/fjs/protocol/json_rpc/module.f.mjs +7 -4
- package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +22 -1
- package/fjs/protocol/mcp/proof.f.d.mts +4 -0
- package/fjs/protocol/mcp/proof.f.mjs +47 -24
- package/fjs/protocol/mcp/stdio/module.f.d.mts +2 -4
- package/fjs/protocol/mcp/stdio/module.f.mjs +1 -8
- package/fjs/protocol/mcp/stdio/proof.f.d.mts +1 -1
- package/fjs/protocol/mcp/stdio/proof.f.mjs +1 -1
- package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
- package/fjs/sul/id/module.f.d.mts +5 -0
- package/fjs/sul/id/module.f.mjs +5 -4
- package/fjs/sul/level/hash/module.f.d.mts +4 -1
- package/fjs/sul/level/hash/module.f.mjs +4 -3
- package/fjs/sul/level/hash/proof.f.d.mts +4 -0
- package/fjs/sul/level/hash/proof.f.mjs +5 -2
- package/fjs/sul/level/literal/module.f.d.mts +4 -1
- package/fjs/sul/level/literal/module.f.mjs +4 -3
- package/fjs/sul/level/literal/proof.f.d.mts +3 -0
- package/fjs/sul/level/literal/proof.f.mjs +4 -1
- package/fjs/sul/module.f.d.mts +5 -3
- package/fjs/sul/module.f.mjs +5 -4
- package/fjs/sul/proof.f.d.mts +4 -0
- package/fjs/sul/proof.f.mjs +5 -2
- package/fjs/text/ascii/module.f.d.mts +26 -0
- package/fjs/text/ascii/module.f.mjs +49 -1
- package/fjs/text/ascii/proof.f.d.mts +10 -0
- package/fjs/text/ascii/proof.f.mjs +33 -1
- package/fjs/text/code_point/module.f.d.mts +21 -3
- package/fjs/text/code_point/module.f.mjs +24 -8
- package/fjs/text/code_point/proof.f.d.mts +1 -0
- package/fjs/text/code_point/proof.f.mjs +28 -0
- package/fjs/text/module.f.d.mts +4 -2
- package/fjs/text/module.f.mjs +4 -3
- package/fjs/text/proof.f.d.mts +3 -0
- package/fjs/text/proof.f.mjs +4 -1
- package/fjs/text/sgr/module.f.d.mts +4 -1
- package/fjs/text/sgr/module.f.mjs +4 -3
- package/fjs/text/sgr/proof.f.d.mts +3 -0
- package/fjs/text/sgr/proof.f.mjs +4 -1
- package/fjs/text/utf16/module.f.d.mts +5 -1
- package/fjs/text/utf16/module.f.mjs +31 -33
- package/fjs/text/utf16/proof.f.d.mts +3 -1
- package/fjs/text/utf16/proof.f.mjs +18 -1
- package/fjs/text/utf8/module.f.d.mts +9 -5
- package/fjs/text/utf8/module.f.mjs +16 -18
- package/fjs/types/array/module.f.d.mts +2 -1
- package/fjs/types/array/module.f.mjs +2 -2
- package/fjs/types/bigfloat/module.f.d.mts +21 -1
- package/fjs/types/bigfloat/module.f.mjs +33 -7
- package/fjs/types/bigfloat/proof.f.d.mts +1 -0
- package/fjs/types/bigfloat/proof.f.mjs +46 -0
- package/fjs/types/bigint/module.f.d.mts +4 -0
- package/fjs/types/bigint/module.f.mjs +4 -3
- package/fjs/types/bit_vec/module.f.d.mts +10 -14
- package/fjs/types/bit_vec/module.f.mjs +61 -71
- package/fjs/types/bit_vec/proof.f.d.mts +6 -0
- package/fjs/types/bit_vec/proof.f.mjs +29 -3
- package/fjs/types/btree/find/module.f.d.mts +5 -1
- package/fjs/types/btree/find/module.f.mjs +5 -5
- package/fjs/types/btree/find/proof.f.d.mts +5 -1
- package/fjs/types/btree/find/proof.f.mjs +5 -3
- package/fjs/types/btree/module.f.d.mts +3 -0
- package/fjs/types/btree/module.f.mjs +3 -2
- package/fjs/types/btree/proof.f.d.mts +5 -1
- package/fjs/types/btree/proof.f.mjs +5 -3
- package/fjs/types/btree/remove/module.f.d.mts +11 -0
- package/fjs/types/btree/remove/module.f.mjs +9 -9
- package/fjs/types/btree/remove/proof.f.d.mts +3 -0
- package/fjs/types/btree/remove/proof.f.mjs +4 -1
- package/fjs/types/btree/set/module.f.d.mts +9 -0
- package/fjs/types/btree/set/module.f.mjs +5 -6
- package/fjs/types/btree/set/proof.f.d.mts +3 -0
- package/fjs/types/btree/set/proof.f.mjs +4 -1
- package/fjs/types/btree/types/module.f.d.mts +2 -1
- package/fjs/types/btree/types/module.f.mjs +2 -1
- package/fjs/types/byte_set/module.f.d.mts +10 -1
- package/fjs/types/byte_set/module.f.mjs +5 -3
- package/fjs/types/byte_set/proof.f.d.mts +3 -1
- package/fjs/types/byte_set/proof.f.mjs +3 -1
- package/fjs/types/function/compare/module.f.d.mts +3 -2
- package/fjs/types/function/compare/module.f.mjs +3 -2
- package/fjs/types/function/module.f.d.mts +8 -1
- package/fjs/types/function/module.f.mjs +8 -1
- package/fjs/types/function/operator/module.f.d.mts +2 -1
- package/fjs/types/function/operator/module.f.mjs +2 -2
- package/fjs/types/list/module.f.d.mts +9 -2
- package/fjs/types/list/module.f.mjs +5 -3
- package/fjs/types/list/proof.f.d.mts +4 -1
- package/fjs/types/list/proof.f.mjs +4 -2
- package/fjs/types/nibble_set/module.f.d.mts +2 -1
- package/fjs/types/nibble_set/module.f.mjs +2 -2
- package/fjs/types/nominal/module.f.d.mts +2 -1
- package/fjs/types/nominal/module.f.mjs +2 -1
- package/fjs/types/nullable/module.f.d.mts +8 -2
- package/fjs/types/nullable/module.f.mjs +4 -2
- package/fjs/types/number/module.f.d.mts +4 -0
- package/fjs/types/number/module.f.mjs +4 -3
- package/fjs/types/object/module.f.d.mts +14 -2
- package/fjs/types/object/module.f.mjs +15 -6
- package/fjs/types/object/proof.f.d.mts +5 -2
- package/fjs/types/object/proof.f.mjs +6 -3
- package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
- package/fjs/types/object/structurally_same/module.f.mjs +59 -0
- package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
- package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
- package/fjs/types/ordered_map/module.f.d.mts +5 -0
- package/fjs/types/ordered_map/module.f.mjs +5 -4
- package/fjs/types/ordered_map/proof.f.d.mts +3 -0
- package/fjs/types/ordered_map/proof.f.mjs +4 -1
- package/fjs/types/patricia_trie/module.f.d.mts +2 -1
- package/fjs/types/patricia_trie/module.f.mjs +2 -2
- package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
- package/fjs/types/patricia_trie/proof.f.mjs +4 -1
- package/fjs/types/prime_field/module.f.d.mts +3 -1
- package/fjs/types/prime_field/module.f.mjs +3 -2
- package/fjs/types/range/module.f.d.mts +2 -1
- package/fjs/types/range/module.f.mjs +2 -2
- package/fjs/types/range_map/module.f.d.mts +6 -0
- package/fjs/types/range_map/module.f.mjs +6 -9
- package/fjs/types/range_map/proof.f.d.mts +5 -1
- package/fjs/types/range_map/proof.f.mjs +5 -3
- package/fjs/types/range_set/module.f.d.mts +5 -0
- package/fjs/types/range_set/module.f.mjs +1 -0
- package/fjs/types/range_set/proof.f.d.mts +3 -0
- package/fjs/types/range_set/proof.f.mjs +4 -1
- package/fjs/types/result/module.d.mts +8 -0
- package/fjs/types/result/module.f.d.mts +37 -7
- package/fjs/types/result/module.f.mjs +38 -8
- package/fjs/types/result/module.mjs +9 -1
- package/fjs/types/result/proof.f.d.mts +5 -0
- package/fjs/types/result/proof.f.mjs +22 -2
- package/fjs/types/rtti/common/module.f.d.mts +35 -2
- package/fjs/types/rtti/common/module.f.mjs +9 -7
- package/fjs/types/rtti/common/proof.f.d.mts +4 -0
- package/fjs/types/rtti/common/proof.f.mjs +5 -2
- package/fjs/types/rtti/data/module.f.d.mts +120 -0
- package/fjs/types/rtti/data/module.f.mjs +1030 -0
- package/fjs/types/rtti/data/proof.f.d.mts +75 -0
- package/fjs/types/rtti/data/proof.f.mjs +566 -0
- package/fjs/types/rtti/data/types.d.ts +83 -0
- package/fjs/types/rtti/module.f.d.mts +12 -5
- package/fjs/types/rtti/module.f.mjs +7 -5
- package/fjs/types/rtti/parse/module.f.d.mts +38 -0
- package/fjs/types/rtti/parse/module.f.mjs +9 -7
- package/fjs/types/rtti/parse/proof.f.mjs +18 -38
- package/fjs/types/rtti/proof.f.d.mts +3 -1
- package/fjs/types/rtti/proof.f.mjs +3 -1
- package/fjs/types/rtti/ts/module.f.d.mts +68 -9
- package/fjs/types/rtti/ts/module.f.mjs +262 -30
- package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
- package/fjs/types/rtti/ts/proof.f.mjs +152 -4
- package/fjs/types/rtti/ts/types.d.ts +11 -0
- package/fjs/types/rtti/types.d.ts +40 -0
- package/fjs/types/rtti/validate/module.f.d.mts +36 -1
- package/fjs/types/rtti/validate/module.f.mjs +6 -4
- package/fjs/types/sorted_list/module.f.d.mts +4 -1
- package/fjs/types/sorted_list/module.f.mjs +21 -12
- package/fjs/types/sorted_list/proof.f.d.mts +3 -1
- package/fjs/types/sorted_list/proof.f.mjs +3 -1
- package/fjs/types/sorted_set/module.f.d.mts +31 -1
- package/fjs/types/sorted_set/module.f.mjs +4 -2
- package/fjs/types/sorted_set/proof.f.d.mts +3 -1
- package/fjs/types/sorted_set/proof.f.mjs +3 -1
- package/fjs/types/string/module.f.d.mts +4 -0
- package/fjs/types/string/module.f.mjs +4 -3
- package/fjs/types/string_set/module.f.d.mts +3 -1
- package/fjs/types/string_set/module.f.mjs +3 -2
- package/fjs/types/ts/module.f.d.mts +2 -0
- package/fjs/types/ts/module.f.mjs +3 -3
- package/fjs/types/ts/proof.f.d.mts +1 -0
- package/fjs/types/ts/proof.f.mjs +5 -0
- package/fjs/types/ts/types.d.ts +6 -1
- package/fjs/types/uint8array/module.f.d.mts +13 -2
- package/fjs/types/uint8array/module.f.mjs +20 -15
- package/fjs/website/module.f.d.mts +3 -0
- package/fjs/website/module.f.mjs +3 -2
- package/package.json +3 -3
- package/fjs/asn.1/types.js +0 -6
- package/fjs/asserts/types.js +0 -6
- package/fjs/basen/types.js +0 -6
- package/fjs/bnf/data/types.js +0 -6
- package/fjs/bnf/descent/types.js +0 -6
- package/fjs/bnf/ll1/types.js +0 -6
- package/fjs/bnf/token_symbol/types.js +0 -6
- package/fjs/bnf/types.js +0 -6
- package/fjs/cas/evo/types.js +0 -7
- package/fjs/cas/types.js +0 -6
- package/fjs/ci/common/types.js +0 -1
- package/fjs/ci/nix/types.js +0 -6
- package/fjs/ci/types.js +0 -6
- package/fjs/cli/types.js +0 -6
- package/fjs/common/monoid/types.js +0 -6
- package/fjs/crypto/pow/types.js +0 -6
- package/fjs/crypto/secp/types.js +0 -6
- package/fjs/crypto/sha2/types.js +0 -6
- package/fjs/crypto/sign/types.js +0 -6
- package/fjs/crypto/vdf/types.js +0 -6
- package/fjs/dev/types.js +0 -6
- package/fjs/djs/ast/types.js +0 -8
- package/fjs/djs/parser/types.js +0 -7
- package/fjs/djs/tokenizer/types.js +0 -7
- package/fjs/djs/types.js +0 -7
- package/fjs/effects/eff/types.js +0 -6
- package/fjs/effects/list/types.js +0 -6
- package/fjs/effects/memory/types.js +0 -6
- package/fjs/effects/mock/types.js +0 -6
- package/fjs/effects/node/types.js +0 -6
- package/fjs/effects/node/virtual/types.js +0 -7
- package/fjs/effects/types.js +0 -6
- package/fjs/emergent_testing/all.test.d.ts +0 -1
- package/fjs/emergent_testing/all.test.js +0 -5
- package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
- package/fjs/emergent_testing/scenarios/all.js +0 -1
- package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
- package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
- package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
- package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
- package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
- package/fjs/emergent_testing/scenarios/return-value.pass.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
- package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
- package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
- package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
- package/fjs/emergent_testing/types.js +0 -6
- package/fjs/js/tokenizer/types.js +0 -6
- package/fjs/media/html/types.js +0 -6
- package/fjs/media/json/parser/types.js +0 -6
- package/fjs/media/json/tokenizer/types.js +0 -6
- package/fjs/media/json/types.js +0 -13
- package/fjs/media/nix/types.js +0 -6
- package/fjs/media/revision/types.js +0 -8
- package/fjs/media/type/types.js +0 -6
- package/fjs/media/types.js +0 -7
- package/fjs/nanvm/types.js +0 -11
- package/fjs/protocol/json_rpc/types.js +0 -8
- package/fjs/protocol/mcp/types.js +0 -8
- package/fjs/sul/id/types.js +0 -6
- package/fjs/sul/level/hash/types.js +0 -6
- package/fjs/sul/level/literal/types.js +0 -6
- package/fjs/sul/types.js +0 -6
- package/fjs/text/sgr/types.js +0 -6
- package/fjs/text/types.js +0 -6
- package/fjs/text/utf16/types.js +0 -6
- package/fjs/text/utf8/types.js +0 -6
- package/fjs/types/array/types.js +0 -6
- package/fjs/types/bigfloat/types.js +0 -6
- package/fjs/types/bigint/types.js +0 -6
- package/fjs/types/bit_vec/types.js +0 -6
- package/fjs/types/btree/find/types.js +0 -6
- package/fjs/types/btree/types/types.js +0 -6
- package/fjs/types/byte_set/types.js +0 -6
- package/fjs/types/function/compare/types.js +0 -6
- package/fjs/types/function/operator/types.js +0 -6
- package/fjs/types/function/types.js +0 -6
- package/fjs/types/list/types.js +0 -6
- package/fjs/types/nibble_set/types.js +0 -6
- package/fjs/types/nominal/types.js +0 -6
- package/fjs/types/nullable/types.js +0 -6
- package/fjs/types/object/types.js +0 -8
- package/fjs/types/option/types.js +0 -6
- package/fjs/types/ordered_map/types.js +0 -6
- package/fjs/types/patricia_trie/types.js +0 -6
- package/fjs/types/phantom/types.js +0 -11
- package/fjs/types/prime_field/types.js +0 -6
- package/fjs/types/range/types.js +0 -6
- package/fjs/types/range_map/types.js +0 -6
- package/fjs/types/result/types.js +0 -6
- package/fjs/types/rtti/common/types.js +0 -1
- package/fjs/types/rtti/parse/types.js +0 -1
- package/fjs/types/rtti/ts/types.js +0 -1
- package/fjs/types/rtti/types.js +0 -1
- package/fjs/types/rtti/validate/types.js +0 -1
- package/fjs/types/sorted_list/types.js +0 -6
- package/fjs/types/sorted_set/types.js +0 -6
- package/fjs/types/string_set/types.js +0 -6
- package/fjs/types/ts/types.js +0 -8
|
@@ -34,6 +34,12 @@
|
|
|
34
34
|
* //
|
|
35
35
|
* if (get(16) !== 0) { throw 'error' }
|
|
36
36
|
* ```
|
|
37
|
+
*
|
|
38
|
+
* @import { TailReduce, ReduceOp } from '../sorted_list/types.ts'
|
|
39
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
40
|
+
* @import { Equal } from '../function/operator/types.ts'
|
|
41
|
+
* @import { Range } from '../range/types.ts'
|
|
42
|
+
* @import { Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge, } from './types.ts'
|
|
37
43
|
*/
|
|
38
44
|
import type { Nullable } from '../nullable/types.ts';
|
|
39
45
|
import type { Range } from '../range/types.ts';
|
|
@@ -34,21 +34,18 @@
|
|
|
34
34
|
* //
|
|
35
35
|
* if (get(16) !== 0) { throw 'error' }
|
|
36
36
|
* ```
|
|
37
|
+
*
|
|
38
|
+
* @import { TailReduce, ReduceOp } from '../sorted_list/types.ts'
|
|
39
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
40
|
+
* @import { Equal } from '../function/operator/types.ts'
|
|
41
|
+
* @import { Range } from '../range/types.ts'
|
|
42
|
+
* @import { Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge, } from './types.ts'
|
|
37
43
|
*/
|
|
38
44
|
|
|
39
45
|
import { genericMerge } from '../sorted_list/module.f.mjs'
|
|
40
|
-
/** @import { TailReduce, ReduceOp } from '../sorted_list/types.ts' */
|
|
41
46
|
import { next } from '../list/module.f.mjs'
|
|
42
|
-
/** @import { Nullable } from '../nullable/types.ts' */
|
|
43
47
|
import { cmp } from '../number/module.f.mjs'
|
|
44
48
|
import { bsearch } from '../function/compare/module.f.mjs'
|
|
45
|
-
/** @import { Equal } from '../function/operator/types.ts' */
|
|
46
|
-
/** @import { Range } from '../range/types.ts' */
|
|
47
|
-
/**
|
|
48
|
-
* @import {
|
|
49
|
-
* Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge,
|
|
50
|
-
* } from './types.ts'
|
|
51
|
-
*/
|
|
52
49
|
|
|
53
50
|
/** @template T @typedef {Nullable<Entry<T>>} _RangeState */
|
|
54
51
|
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
* @import { RangeMapArray, Properties, RangeMap } from './types.ts'
|
|
4
|
+
* @import { SortedSet } from '../sorted_set/types.ts'
|
|
5
|
+
*/
|
|
2
6
|
export declare const proof: {
|
|
3
7
|
example: () => void;
|
|
4
8
|
merge: (() => void)[];
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
* @import { RangeMapArray, Properties, RangeMap } from './types.ts'
|
|
4
|
+
* @import { SortedSet } from '../sorted_set/types.ts'
|
|
5
|
+
*/
|
|
2
6
|
|
|
3
|
-
/** @import { RangeMapArray, Properties, RangeMap } from './types.ts' */
|
|
4
7
|
import { get, merge, fromRange, rangeMap } from './module.f.mjs'
|
|
5
8
|
import { stringify } from '../../media/json/module.f.mjs'
|
|
6
9
|
import { sort } from '../object/module.f.mjs'
|
|
7
10
|
import { union } from '../sorted_set/module.f.mjs'
|
|
8
|
-
/** @import { SortedSet } from '../sorted_set/types.ts' */
|
|
9
11
|
import { equal, toArray } from '../list/module.f.mjs'
|
|
10
12
|
import { strictEqual } from '../function/operator/module.f.mjs'
|
|
11
13
|
import { cmp } from '../string/module.f.mjs'
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Range } from '../range/types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
1
5
|
import { assert } from '../../asserts/module.f.mjs'
|
|
2
6
|
import { toArray } from '../list/module.f.mjs'
|
|
3
7
|
import { fromRange, merge, get } from './module.f.mjs'
|
|
4
|
-
/** @import { Range } from '../range/types.ts' */
|
|
5
8
|
|
|
6
9
|
/** @type {(a: string) => number} */
|
|
7
10
|
const c = a => a.charCodeAt(0)
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Impure `Result` companions: capture thrown exceptions as `Result` values,
|
|
3
|
+
* since `try`/`catch` is not allowed in FunctionalScript itself.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*
|
|
7
|
+
* @import { Result } from './types.ts'
|
|
8
|
+
*/
|
|
1
9
|
import type { Result } from './types.ts';
|
|
2
10
|
/** @type {<T>(f: () => T) => Result<T, unknown>} */
|
|
3
11
|
export declare const tryCatch: <T>(f: () => T) => Result<T, unknown>;
|
|
@@ -5,21 +5,25 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
*
|
|
8
|
-
* ```
|
|
9
|
-
* import { error, ok,
|
|
8
|
+
* ```js
|
|
9
|
+
* import { error, ok, okThen, unwrap } from './module.f.mjs'
|
|
10
10
|
*
|
|
11
|
-
* const success
|
|
12
|
-
* const failure
|
|
11
|
+
* const success = ok(42)
|
|
12
|
+
* const failure = error('Something went wrong')
|
|
13
13
|
*
|
|
14
14
|
* if (unwrap(success) !== 42) { throw 'error' }
|
|
15
15
|
* const [kind, v] = failure
|
|
16
16
|
* if (kind !== 'error') { throw 'error' }
|
|
17
|
-
* // `v` is
|
|
18
|
-
*
|
|
17
|
+
* // `v` is `'Something went wrong'` here
|
|
18
|
+
*
|
|
19
|
+
* // `okThen` chains; an `error` skips the rest of the chain unchanged.
|
|
20
|
+
* const half = n => n % 2 === 0 ? ok(n / 2) : error('odd')
|
|
21
|
+
* if (unwrap(okThen(half)(success)) !== 21) { throw 'error' }
|
|
19
22
|
* ```
|
|
23
|
+
*
|
|
24
|
+
* @import { Ok, Error, Result } from './types.ts'
|
|
20
25
|
*/
|
|
21
26
|
import type { Ok, Error, Result } from './types.ts';
|
|
22
|
-
/** @import { Ok, Error, Result } from './types.ts' */
|
|
23
27
|
/**
|
|
24
28
|
* Creates a successful result.
|
|
25
29
|
*
|
|
@@ -57,3 +61,29 @@ export declare const invert: <T, E>([k, v]: Result<T, E>) => Result<E, T>;
|
|
|
57
61
|
* @type {<T, R>(f: (value: T) => R) => <E>(r: Result<T, E>) => Result<R, E>}
|
|
58
62
|
*/
|
|
59
63
|
export declare const mapOk: <T, R>(f: (value: T) => R) => <E>(r: Result<T, E>) => Result<R, E>;
|
|
64
|
+
/**
|
|
65
|
+
* Chains a `Result`-returning step onto a `Result`, passing an `error` through
|
|
66
|
+
* unchanged. The monadic bind to {@link mapOk}'s functor map, and the pure
|
|
67
|
+
* sibling of `fjs/effects`' `okStep` — which is the same combinator for a step
|
|
68
|
+
* that also performs operations.
|
|
69
|
+
*
|
|
70
|
+
* The two error types are **unioned, not unified**. A validation chain
|
|
71
|
+
* typically widens its error as it goes — a JSON parse failure (`string`)
|
|
72
|
+
* followed by an rtti schema failure (`ValidationError`) — and the hand-written
|
|
73
|
+
* form expressed that by rebuilding the incoming error with `error(v)` purely
|
|
74
|
+
* to retag it into the wider type. `E | F` states the widening in the type
|
|
75
|
+
* instead, so neither side has to be pre-widened and the passed-through
|
|
76
|
+
* `error` stays the very tuple it arrived as.
|
|
77
|
+
*
|
|
78
|
+
* `F` binds on the second arrow, as in {@link mapOk}: `f` alone determines the
|
|
79
|
+
* value types, so one `okThen(f)` applies to results carrying any error type.
|
|
80
|
+
*
|
|
81
|
+
* Reach for it when the step needs **only** the value it is handed. A chain
|
|
82
|
+
* whose later steps also read an earlier one's value would have to nest a
|
|
83
|
+
* closure per link to keep those values in scope, which AGENTS.md §6.4 rules
|
|
84
|
+
* out for the same reason it rules out nested `step`; write those as a flat
|
|
85
|
+
* sequence of guards.
|
|
86
|
+
*
|
|
87
|
+
* @type {<T, R, E>(f: (value: T) => Result<R, E>) => <F>(r: Result<T, F>) => Result<R, E | F>}
|
|
88
|
+
*/
|
|
89
|
+
export declare const okThen: <T, R, E>(f: (value: T) => Result<R, E>) => <F>(r: Result<T, F>) => Result<R, E | F>;
|
|
@@ -5,22 +5,25 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
*
|
|
8
|
-
* ```
|
|
9
|
-
* import { error, ok,
|
|
8
|
+
* ```js
|
|
9
|
+
* import { error, ok, okThen, unwrap } from './module.f.mjs'
|
|
10
10
|
*
|
|
11
|
-
* const success
|
|
12
|
-
* const failure
|
|
11
|
+
* const success = ok(42)
|
|
12
|
+
* const failure = error('Something went wrong')
|
|
13
13
|
*
|
|
14
14
|
* if (unwrap(success) !== 42) { throw 'error' }
|
|
15
15
|
* const [kind, v] = failure
|
|
16
16
|
* if (kind !== 'error') { throw 'error' }
|
|
17
|
-
* // `v` is
|
|
18
|
-
*
|
|
17
|
+
* // `v` is `'Something went wrong'` here
|
|
18
|
+
*
|
|
19
|
+
* // `okThen` chains; an `error` skips the rest of the chain unchanged.
|
|
20
|
+
* const half = n => n % 2 === 0 ? ok(n / 2) : error('odd')
|
|
21
|
+
* if (unwrap(okThen(half)(success)) !== 21) { throw 'error' }
|
|
19
22
|
* ```
|
|
23
|
+
*
|
|
24
|
+
* @import { Ok, Error, Result } from './types.ts'
|
|
20
25
|
*/
|
|
21
26
|
|
|
22
|
-
/** @import { Ok, Error, Result } from './types.ts' */
|
|
23
|
-
|
|
24
27
|
/**
|
|
25
28
|
* Creates a successful result.
|
|
26
29
|
*
|
|
@@ -65,3 +68,30 @@ export const invert = ([k, v]) => k === 'ok' ? error(v) : ok(v)
|
|
|
65
68
|
* @type {<T, R>(f: (value: T) => R) => <E>(r: Result<T, E>) => Result<R, E>}
|
|
66
69
|
*/
|
|
67
70
|
export const mapOk = f => r => r[0] === 'ok' ? ok(f(r[1])) : r
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Chains a `Result`-returning step onto a `Result`, passing an `error` through
|
|
74
|
+
* unchanged. The monadic bind to {@link mapOk}'s functor map, and the pure
|
|
75
|
+
* sibling of `fjs/effects`' `okStep` — which is the same combinator for a step
|
|
76
|
+
* that also performs operations.
|
|
77
|
+
*
|
|
78
|
+
* The two error types are **unioned, not unified**. A validation chain
|
|
79
|
+
* typically widens its error as it goes — a JSON parse failure (`string`)
|
|
80
|
+
* followed by an rtti schema failure (`ValidationError`) — and the hand-written
|
|
81
|
+
* form expressed that by rebuilding the incoming error with `error(v)` purely
|
|
82
|
+
* to retag it into the wider type. `E | F` states the widening in the type
|
|
83
|
+
* instead, so neither side has to be pre-widened and the passed-through
|
|
84
|
+
* `error` stays the very tuple it arrived as.
|
|
85
|
+
*
|
|
86
|
+
* `F` binds on the second arrow, as in {@link mapOk}: `f` alone determines the
|
|
87
|
+
* value types, so one `okThen(f)` applies to results carrying any error type.
|
|
88
|
+
*
|
|
89
|
+
* Reach for it when the step needs **only** the value it is handed. A chain
|
|
90
|
+
* whose later steps also read an earlier one's value would have to nest a
|
|
91
|
+
* closure per link to keep those values in scope, which AGENTS.md §6.4 rules
|
|
92
|
+
* out for the same reason it rules out nested `step`; write those as a flat
|
|
93
|
+
* sequence of guards.
|
|
94
|
+
*
|
|
95
|
+
* @type {<T, R, E>(f: (value: T) => Result<R, E>) => <F>(r: Result<T, F>) => Result<R, E | F>}
|
|
96
|
+
*/
|
|
97
|
+
export const okThen = f => r => r[0] === 'error' ? r : f(r[1])
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Impure `Result` companions: capture thrown exceptions as `Result` values,
|
|
3
|
+
* since `try`/`catch` is not allowed in FunctionalScript itself.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*
|
|
7
|
+
* @import { Result } from './types.ts'
|
|
8
|
+
*/
|
|
9
|
+
|
|
2
10
|
import { ok, error } from './module.f.mjs'
|
|
3
11
|
|
|
4
12
|
/** @type {<T>(f: () => T) => Result<T, unknown>} */
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Result } from './types.ts'
|
|
3
|
+
*/
|
|
1
4
|
declare const example: () => void;
|
|
2
5
|
declare const invertTest: () => void;
|
|
3
6
|
declare const mapOkTest: () => void;
|
|
7
|
+
declare const okThenTest: () => void;
|
|
4
8
|
export declare const proof: {
|
|
5
9
|
example: typeof example;
|
|
6
10
|
invertTest: typeof invertTest;
|
|
7
11
|
mapOkTest: typeof mapOkTest;
|
|
12
|
+
okThenTest: typeof okThenTest;
|
|
8
13
|
throw: {
|
|
9
14
|
unwrapError: () => string;
|
|
10
15
|
};
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @import { Result } from './types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { error, ok, unwrap, invert, mapOk, okThen } from './module.f.mjs'
|
|
3
6
|
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
4
7
|
|
|
5
8
|
const example = () => {
|
|
@@ -31,10 +34,27 @@ const mapOkTest = () => {
|
|
|
31
34
|
assert(!(k1 !== 'error' || v1 !== 'oops'), [k1, v1])
|
|
32
35
|
}
|
|
33
36
|
|
|
37
|
+
const okThenTest = () => {
|
|
38
|
+
/** @type {(n: number) => Result<string, string>} */
|
|
39
|
+
const half = n => n % 2 === 0 ? ok(`${n / 2}`) : error('odd')
|
|
40
|
+
const [k0, v0] = okThen(half)(ok(42))
|
|
41
|
+
assert(!(k0 !== 'ok' || v0 !== '21'), [k0, v0])
|
|
42
|
+
// `f` itself failing: the chain reports `f`'s own error.
|
|
43
|
+
const [k1, v1] = okThen(half)(ok(41))
|
|
44
|
+
assert(!(k1 !== 'error' || v1 !== 'odd'), [k1, v1])
|
|
45
|
+
// An incoming `error` skips `f` and passes through unchanged, keeping its
|
|
46
|
+
// own error type: the result is `Result<string, string | number>`.
|
|
47
|
+
/** @type {Result<number, number>} */
|
|
48
|
+
const incoming = error(7)
|
|
49
|
+
const [k2, v2] = okThen(half)(incoming)
|
|
50
|
+
assert(!(k2 !== 'error' || v2 !== 7), [k2, v2])
|
|
51
|
+
}
|
|
52
|
+
|
|
34
53
|
export const proof = {
|
|
35
54
|
example,
|
|
36
55
|
invertTest,
|
|
37
56
|
mapOkTest,
|
|
57
|
+
okThenTest,
|
|
38
58
|
throw: {
|
|
39
59
|
unwrapError: () => unwrap(error('oops')),
|
|
40
60
|
},
|
|
@@ -1,10 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared kernel for RTTI consumers (`validate`, `parse`).
|
|
3
|
+
*
|
|
4
|
+
* Both consumers traverse the same schema shape and produce the same
|
|
5
|
+
* `Result<T, ValidationError>` outcome. Only the per-variant handling differs
|
|
6
|
+
* — `validate` keeps the original value, `parse` constructs a fresh one.
|
|
7
|
+
*
|
|
8
|
+
* This module hosts the parts that do not differ:
|
|
9
|
+
*
|
|
10
|
+
* - The error shape (`ValidationError`, `Path`) and path bookkeeping
|
|
11
|
+
* (`verror`, `prependPath`).
|
|
12
|
+
* - Primitive checks (`primitive0Validate`, `constPrimitiveValidate`).
|
|
13
|
+
* - The `Validate<T>`/`Result<T>` signatures — `parse` uses the same shape.
|
|
14
|
+
* - `visit`: a visitor over the `Type` ADT. Callers supply a `Visitor<R>`
|
|
15
|
+
* with one handler per variant; `visit(v)(rtti)` recognizes `rtti` and
|
|
16
|
+
* calls the matching handler. Both consumers compose their top-level
|
|
17
|
+
* function from a visitor.
|
|
18
|
+
* - `eachEntry`: the container entry loop (array/record/tuple/struct), shared
|
|
19
|
+
* by both consumers' container builders. Callers choose what (if anything)
|
|
20
|
+
* to accumulate, so `validate`'s pure pass/fail check pays no allocation.
|
|
21
|
+
* - `orVisit`: the shared `or` handler — try each variant's recursive walker,
|
|
22
|
+
* return the first match.
|
|
23
|
+
*
|
|
24
|
+
* Keeping the kernel here also removes `parse`'s incidental dependency on
|
|
25
|
+
* `validate` and gives schema-driven consumers (e.g. the data form in
|
|
26
|
+
* `../data/module.f.mjs`) a stable shared base.
|
|
27
|
+
*
|
|
28
|
+
* @module
|
|
29
|
+
*
|
|
30
|
+
* @import { Primitive, Unknown } from '../ts/types.ts'
|
|
31
|
+
* @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts'
|
|
32
|
+
* @import { Error, Result as CommonResult } from '../../result/types.ts'
|
|
33
|
+
* @import { StringMap } from '../../object/types.ts'
|
|
34
|
+
* @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts'
|
|
35
|
+
*/
|
|
1
36
|
import type { Primitive, Unknown } from '../ts/types.ts';
|
|
2
37
|
import type { Info0, Primitive0, Type } from '../types.ts';
|
|
3
38
|
import type { Error, Result as CommonResult } from '../../result/types.ts';
|
|
4
39
|
import type { StringMap } from '../../object/types.ts';
|
|
5
40
|
import type { Validate, Visitor, IsContainer, ResultE, ValidateE, ValidationError } from './types.ts';
|
|
6
|
-
/** @import { StringMap } from '../../object/types.ts' */
|
|
7
|
-
/** @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts' */
|
|
8
41
|
/** Builds an error result with empty path and the given message. */
|
|
9
42
|
/** @type {(message: string) => Error<ValidationError>} */
|
|
10
43
|
export declare const verror: (message: string) => Error<ValidationError>;
|
|
@@ -22,19 +22,21 @@
|
|
|
22
22
|
* return the first match.
|
|
23
23
|
*
|
|
24
24
|
* Keeping the kernel here also removes `parse`'s incidental dependency on
|
|
25
|
-
* `validate` and gives
|
|
26
|
-
*
|
|
25
|
+
* `validate` and gives schema-driven consumers (e.g. the data form in
|
|
26
|
+
* `../data/module.f.mjs`) a stable shared base.
|
|
27
27
|
*
|
|
28
28
|
* @module
|
|
29
|
+
*
|
|
30
|
+
* @import { Primitive, Unknown } from '../ts/types.ts'
|
|
31
|
+
* @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts'
|
|
32
|
+
* @import { Error, Result as CommonResult } from '../../result/types.ts'
|
|
33
|
+
* @import { StringMap } from '../../object/types.ts'
|
|
34
|
+
* @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts'
|
|
29
35
|
*/
|
|
30
|
-
|
|
31
|
-
/** @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts' */
|
|
32
|
-
/** @import { Error, Result as CommonResult } from '../../result/types.ts' */
|
|
36
|
+
|
|
33
37
|
import { error, ok } from '../../result/module.f.mjs'
|
|
34
38
|
import { isArray as commonIsArray } from '../../array/module.f.mjs'
|
|
35
39
|
import { isObject as commonIsObject } from '../../object/module.f.mjs'
|
|
36
|
-
/** @import { StringMap } from '../../object/types.ts' */
|
|
37
|
-
/** @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts' */
|
|
38
40
|
|
|
39
41
|
/** Builds an error result with empty path and the given message. */
|
|
40
42
|
/** @type {(message: string) => Error<ValidationError>} */
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Result } from '../../result/types.ts'
|
|
3
|
+
* @import { ValidationError } from './types.ts'
|
|
4
|
+
*/
|
|
5
|
+
|
|
1
6
|
import { eachEntry } from './module.f.mjs'
|
|
2
|
-
/** @import { Result } from '../../result/types.ts' */
|
|
3
7
|
import { error, ok } from '../../result/module.f.mjs'
|
|
4
|
-
/** @import { ValidationError } from './types.ts' */
|
|
5
8
|
import { assert, assertEq } from '../../../asserts/module.f.mjs'
|
|
6
9
|
|
|
7
10
|
/** @typedef {ReadonlyArray<readonly [string, number]>} _Entries */
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The serializable RTTI data form and the {@link toData} conversion from the
|
|
3
|
+
* thunk form.
|
|
4
|
+
*
|
|
5
|
+
* A schema denotes a set of values. The data form partitions that set into
|
|
6
|
+
* six disjoint kinds — unit values (`null`, `undefined`, `false`, `true`),
|
|
7
|
+
* numbers, strings, bigints, arrays and objects — so that all schema algebra
|
|
8
|
+
* (union normalization, coverage collapse, {@link equal}, {@link subset},
|
|
9
|
+
* canonical ordering via {@link cmp}) reduces to kind-wise set operations.
|
|
10
|
+
* {@link toData} is the single bridge from the thunk form; {@link validate}
|
|
11
|
+
* is the data-driven counterpart of `../validate`. The form serializes as
|
|
12
|
+
* DJS — plain JSON when no `bigint` literals are involved. See `./README.md`
|
|
13
|
+
* for the design rationale and serialization notes, and `./types.ts` for the
|
|
14
|
+
* type-level API.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*
|
|
18
|
+
* @import { Const, ConstObject, Type } from '../types.ts'
|
|
19
|
+
* @import { Primitive, Unknown } from '../ts/types.ts'
|
|
20
|
+
* @import { ResultE } from '../common/types.ts'
|
|
21
|
+
* @import { StringMap } from '../../object/types.ts'
|
|
22
|
+
* @import { ArraySet, Data, KindSet, Node, ObjectSet, RuleSet, UnionSet } from './types.ts'
|
|
23
|
+
*/
|
|
24
|
+
import type { Const, Type } from '../types.ts';
|
|
25
|
+
import type { Primitive, Unknown } from '../ts/types.ts';
|
|
26
|
+
import type { ResultE } from '../common/types.ts';
|
|
27
|
+
import type { StringMap } from '../../object/types.ts';
|
|
28
|
+
import type { Data, Node, RuleSet, UnionSet } from './types.ts';
|
|
29
|
+
/**
|
|
30
|
+
* The unit kind's enumeration: bit `1 << i` of a {@link UnionSet}'s `unit`
|
|
31
|
+
* bitset stands for `unitList[i]`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const unitList: readonly ['null', 'undefined', 'false', 'true'];
|
|
34
|
+
/**
|
|
35
|
+
* The `unit` bit of one unit value.
|
|
36
|
+
*
|
|
37
|
+
* @type {(v: null | undefined | boolean) => number}
|
|
38
|
+
*/
|
|
39
|
+
export declare const unitBit: (v: null | undefined | boolean) => number;
|
|
40
|
+
/**
|
|
41
|
+
* The data form of the empty set — rtti `never`.
|
|
42
|
+
*
|
|
43
|
+
* @type {UnionSet}
|
|
44
|
+
*/
|
|
45
|
+
export declare const never: UnionSet;
|
|
46
|
+
/**
|
|
47
|
+
* The data form of the set of all values — rtti `unknown`.
|
|
48
|
+
*
|
|
49
|
+
* @type {UnionSet}
|
|
50
|
+
*/
|
|
51
|
+
export declare const unknown: UnionSet;
|
|
52
|
+
/**
|
|
53
|
+
* Total order over the data form: negative, zero or positive, with zero
|
|
54
|
+
* exactly on structural identity. {@link toData} output is canonical, so two
|
|
55
|
+
* conversions of equivalent thunk schemas compare equal — this is what makes
|
|
56
|
+
* the data form comparable and sortable.
|
|
57
|
+
*
|
|
58
|
+
* @type {(a: Data) => (b: Data) => number}
|
|
59
|
+
*/
|
|
60
|
+
export declare const cmp: (a: Data) => (b: Data) => number;
|
|
61
|
+
/**
|
|
62
|
+
* Structural equality of canonical forms: `equal(toData(a))(toData(b))`
|
|
63
|
+
* holds exactly when `a` and `b` normalize to the same data — e.g.
|
|
64
|
+
* `or(a, b)` and `or(b, a)` are equal. Recursive definitions compare by
|
|
65
|
+
* their rule names, which are derived from the defining functions' names.
|
|
66
|
+
*
|
|
67
|
+
* @type {(a: Data) => (b: Data) => boolean}
|
|
68
|
+
*/
|
|
69
|
+
export declare const equal: (a: Data) => (b: Data) => boolean;
|
|
70
|
+
export type _Ctx = readonly [RuleSet, RuleSet];
|
|
71
|
+
export type _Assumed = StringMap<StringMap<true>>;
|
|
72
|
+
export type _Keyed = readonly [Node, string | undefined];
|
|
73
|
+
/**
|
|
74
|
+
* Sound subset test: `true` means every value of `a` is a value of `b`.
|
|
75
|
+
* Kind-wise on unions, pattern-wise on arrays/objects, coinductive on
|
|
76
|
+
* reference cycles. Incomplete in the known-hard corners of semantic
|
|
77
|
+
* subtyping (see `./README.md`): it may answer `false` for an inclusion
|
|
78
|
+
* that only holds by distributing a union across positions, or one whose
|
|
79
|
+
* left side is a non-syntactic empty set — never `true` for a non-inclusion.
|
|
80
|
+
*
|
|
81
|
+
* @type {(a: Data) => (b: Data) => boolean}
|
|
82
|
+
*/
|
|
83
|
+
export declare const subset: (a: Data) => (b: Data) => boolean;
|
|
84
|
+
export type _NodeMap = (n: Node) => Node;
|
|
85
|
+
export type _Thunk = Exclude<Type, Const>;
|
|
86
|
+
export type _Key = Exclude<Type, Primitive>;
|
|
87
|
+
export type _State = {
|
|
88
|
+
readonly converting: readonly _Thunk[];
|
|
89
|
+
readonly names: readonly (readonly [_Thunk, string])[];
|
|
90
|
+
readonly done: readonly (readonly [_Key, UnionSet])[];
|
|
91
|
+
readonly deferred: readonly (readonly [_Thunk, _Thunk])[];
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Converts a thunk-form schema into its canonical data form.
|
|
95
|
+
*
|
|
96
|
+
* Runs once per consumer need; schemas that are built but never consumed pay
|
|
97
|
+
* nothing. The output is normalized — unions are flattened and merged
|
|
98
|
+
* kind-wise, literals are sorted and deduplicated, subsumed array/object
|
|
99
|
+
* patterns are dropped, rules are pruned to the reachable set and sorted,
|
|
100
|
+
* and a union equal to a rule's body reads back as a reference — so schema
|
|
101
|
+
* identity is a property of this form: `toData(or(a, b))` and
|
|
102
|
+
* `toData(or(b, a))` are structurally identical even though the two thunks
|
|
103
|
+
* are distinct, and `or` is idempotent on recursive schemas.
|
|
104
|
+
*
|
|
105
|
+
* Only recursive definitions become named rules (named after their defining
|
|
106
|
+
* functions), everything else is inlined; a schema with no reference cycles
|
|
107
|
+
* converts to `[{}, unionSet]`.
|
|
108
|
+
*
|
|
109
|
+
* @type {(t: Type) => Data}
|
|
110
|
+
*/
|
|
111
|
+
export declare const toData: (t: Type) => Data;
|
|
112
|
+
/**
|
|
113
|
+
* Data-driven validation — the counterpart of `../validate` that consumes a
|
|
114
|
+
* {@link Data} produced by {@link toData} instead of walking the thunk
|
|
115
|
+
* graph. Returns the original value on success, or the first
|
|
116
|
+
* `{ path, message }` error.
|
|
117
|
+
*
|
|
118
|
+
* @type {(data: Data) => (value: Unknown) => ResultE}
|
|
119
|
+
*/
|
|
120
|
+
export declare const validate: (data: Data) => (value: Unknown) => ResultE;
|