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
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Common higher-order operator type aliases.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Fold, Reduce, Scan, StateScan, Unary } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
|
-
/** @import { Fold, Reduce, Scan, StateScan, Unary } from './types.ts' */
|
|
8
|
-
|
|
9
9
|
/** @type {(separator: string) => Reduce<string>} */
|
|
10
10
|
export const join = separator => value => prior =>
|
|
11
11
|
`${prior}${separator}${value}`
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Immutable list data structure utilities and combinators.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
7
|
+
* @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts'
|
|
8
|
+
* @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts'
|
|
9
|
+
*/
|
|
1
10
|
import type { Nullable } from '../nullable/types.ts';
|
|
2
11
|
import type { Scan, StateScan, Fold, Reduce, Equal } from '../function/operator/types.ts';
|
|
3
12
|
import type { Accumulator, Entry, List, Result, Thunk } from './types.ts';
|
|
4
|
-
/** @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts' */
|
|
5
|
-
/** @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts' */
|
|
6
13
|
export declare const fromArrayLike: <T>(
|
|
7
14
|
/**
|
|
8
15
|
* @template T
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
* Immutable list data structure utilities and combinators.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
7
|
+
* @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts'
|
|
8
|
+
* @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts'
|
|
5
9
|
*/
|
|
10
|
+
|
|
6
11
|
import { identity, fn, compose } from '../function/module.f.mjs'
|
|
7
|
-
/** @import { Nullable } from '../nullable/types.ts' */
|
|
8
12
|
import {
|
|
9
13
|
addition,
|
|
10
14
|
logicalNot,
|
|
@@ -13,8 +17,6 @@ import {
|
|
|
13
17
|
foldToScan,
|
|
14
18
|
reduceToScan,
|
|
15
19
|
} from '../function/operator/module.f.mjs'
|
|
16
|
-
/** @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts' */
|
|
17
|
-
/** @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts' */
|
|
18
20
|
|
|
19
21
|
export const fromArrayLike =
|
|
20
22
|
/**
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
* @import { List } from './types.ts'
|
|
4
|
+
*/
|
|
2
5
|
declare const stringifyTest: () => void;
|
|
3
6
|
declare const countdownTest: () => void;
|
|
4
7
|
declare const flatTest: () => void;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
* @import { List } from './types.ts'
|
|
4
|
+
*/
|
|
2
5
|
|
|
3
|
-
/** @import { List } from './types.ts' */
|
|
4
6
|
import { length, concat, countdown, cycle, drop, dropWhile, entries, every, filter, find, flat, flatMap, map, next, reduce, reverse, scan, some, take, takeWhile, toArray, zip, first, filterMap, isEmpty, equal, tryFold } from './module.f.mjs'
|
|
5
7
|
import { stringify } from '../../media/json/module.f.mjs'
|
|
6
8
|
import { sort } from '../object/module.f.mjs'
|
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
* `ByteSet` is a `bigint`, which `JSON.stringify` cannot serialize.
|
|
14
14
|
*
|
|
15
15
|
* @module
|
|
16
|
+
*
|
|
17
|
+
* @import { Nibble, NibbleSet } from './types.ts'
|
|
16
18
|
*/
|
|
17
19
|
import type { Nibble, NibbleSet } from './types.ts';
|
|
18
|
-
/** @import { Nibble, NibbleSet } from './types.ts' */
|
|
19
20
|
export declare const empty = 0;
|
|
20
21
|
export declare const universe = 65535;
|
|
21
22
|
/** @type {(n: Nibble) => (s: NibbleSet) => boolean} */
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
* `ByteSet` is a `bigint`, which `JSON.stringify` cannot serialize.
|
|
14
14
|
*
|
|
15
15
|
* @module
|
|
16
|
+
*
|
|
17
|
+
* @import { Nibble, NibbleSet } from './types.ts'
|
|
16
18
|
*/
|
|
17
19
|
|
|
18
|
-
/** @import { Nibble, NibbleSet } from './types.ts' */
|
|
19
|
-
|
|
20
20
|
export const empty = 0
|
|
21
21
|
|
|
22
22
|
export const universe = 0xFFFF
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Nominal typing helpers for branded TypeScript types.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Nominal } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
import type { Nominal } from './types.ts';
|
|
7
|
-
/** @import { Nominal } from './types.ts' */
|
|
8
9
|
export declare const asNominal: <N extends string, R extends string, B>(b: B) => Nominal<N, R, B>;
|
|
9
10
|
export declare const asBase: <T extends string, R extends string, B>(n: Nominal<T, R, B>) => B;
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* Nominal typing helpers for branded TypeScript types.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Nominal } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
9
|
import { identity } from "../function/module.f.mjs"
|
|
8
|
-
/** @import { Nominal } from './types.ts' */
|
|
9
10
|
|
|
10
11
|
export const asNominal =
|
|
11
12
|
/** @type {<N extends string, R extends string, B>(b: B) => Nominal<N, R, B>} */
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for nullable (`null`/`undefined`) value handling.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Option } from '../option/types.ts'
|
|
7
|
+
* @import { Nullable } from './types.ts'
|
|
8
|
+
*/
|
|
1
9
|
import type { Option } from '../option/types.ts';
|
|
2
10
|
import type { Nullable } from './types.ts';
|
|
3
|
-
/** @import { Option } from '../option/types.ts' */
|
|
4
|
-
/** @import { Nullable } from './types.ts' */
|
|
5
11
|
/**
|
|
6
12
|
* @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
|
|
7
13
|
*/
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
* Utilities for nullable (`null`/`undefined`) value handling.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Option } from '../option/types.ts'
|
|
7
|
+
* @import { Nullable } from './types.ts'
|
|
5
8
|
*/
|
|
9
|
+
|
|
6
10
|
import { assert } from '../../asserts/module.f.mjs'
|
|
7
11
|
import { fn } from '../function/module.f.mjs'
|
|
8
|
-
/** @import { Option } from '../option/types.ts' */
|
|
9
|
-
/** @import { Nullable } from './types.ts' */
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
* `countOnes` for 32-bit population count using SWAR.
|
|
4
4
|
*
|
|
5
5
|
* @module
|
|
6
|
+
*
|
|
7
|
+
* @import { List } from '../list/types.ts'
|
|
8
|
+
* @import { Reduce } from '../function/operator/types.ts'
|
|
9
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
6
10
|
*/
|
|
7
11
|
import type { List } from '../list/types.ts';
|
|
8
12
|
import type { Sign } from '../function/compare/types.ts';
|
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
* `countOnes` for 32-bit population count using SWAR.
|
|
4
4
|
*
|
|
5
5
|
* @module
|
|
6
|
+
*
|
|
7
|
+
* @import { List } from '../list/types.ts'
|
|
8
|
+
* @import { Reduce } from '../function/operator/types.ts'
|
|
9
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
6
10
|
*/
|
|
7
11
|
|
|
8
12
|
import { reduce } from '../list/module.f.mjs'
|
|
9
|
-
/** @import { List } from '../list/types.ts' */
|
|
10
13
|
import { addition } from '../function/operator/module.f.mjs'
|
|
11
|
-
/** @import { Reduce } from '../function/operator/types.ts' */
|
|
12
14
|
import { cmp as uCmp, min as uMin, max as uMax } from '../function/compare/module.f.mjs'
|
|
13
|
-
/** @import { Sign } from '../function/compare/types.ts' */
|
|
14
15
|
import { fold } from '../../common/monoid/module.f.mjs'
|
|
15
16
|
|
|
16
17
|
/** @type {(input: List<number>) => number} */
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plain-object helpers: safe property lookup via `at`,
|
|
3
|
-
* between entries and `OrderedMap`.
|
|
2
|
+
* Plain-object helpers: safe property lookup via `at`, structural comparison
|
|
3
|
+
* via `structurallySame`, and conversions between entries and `OrderedMap`.
|
|
4
|
+
* See `./types.ts` for the
|
|
4
5
|
* `OptionalMap`/`RequiredMap`/`StringMap`/`Entry`/`OneKey`/`SingleProperty`/
|
|
5
6
|
* `NotUnion` type-level API.
|
|
6
7
|
*
|
|
7
8
|
* @module
|
|
9
|
+
*
|
|
10
|
+
* @import { List } from '../list/types.ts'
|
|
11
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
12
|
+
* @import { OrderedMap } from '../ordered_map/types.ts'
|
|
13
|
+
* @import { StringMap, Entry } from './types.ts'
|
|
8
14
|
*/
|
|
9
15
|
import type { List } from '../list/types.ts';
|
|
10
16
|
import type { Nullable } from '../nullable/types.ts';
|
|
11
17
|
import type { OrderedMap } from '../ordered_map/types.ts';
|
|
12
18
|
import type { StringMap, Entry } from './types.ts';
|
|
19
|
+
/**
|
|
20
|
+
* `structurallySame` is implemented in a dependency-free leaf so `fjs/asserts`
|
|
21
|
+
* can use it without the cycle `asserts -> object -> nullable -> asserts`; see
|
|
22
|
+
* `./structurally_same/README.md`. This module is its public home.
|
|
23
|
+
*/
|
|
24
|
+
export { structurallySame } from './structurally_same/module.f.mjs';
|
|
13
25
|
/** @type {(name: string) => <T>(object: StringMap<T>) => Nullable<Exclude<T, undefined>>} */
|
|
14
26
|
export declare const at: (name: string) => <T>(object: StringMap<T>) => Nullable<Exclude<T, undefined>>;
|
|
15
27
|
/** @type {<T>(e: List<Entry<T>>) => List<Entry<T>>} */
|
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plain-object helpers: safe property lookup via `at`,
|
|
3
|
-
* between entries and `OrderedMap`.
|
|
2
|
+
* Plain-object helpers: safe property lookup via `at`, structural comparison
|
|
3
|
+
* via `structurallySame`, and conversions between entries and `OrderedMap`.
|
|
4
|
+
* See `./types.ts` for the
|
|
4
5
|
* `OptionalMap`/`RequiredMap`/`StringMap`/`Entry`/`OneKey`/`SingleProperty`/
|
|
5
6
|
* `NotUnion` type-level API.
|
|
6
7
|
*
|
|
7
8
|
* @module
|
|
9
|
+
*
|
|
10
|
+
* @import { List } from '../list/types.ts'
|
|
11
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
12
|
+
* @import { OrderedMap } from '../ordered_map/types.ts'
|
|
13
|
+
* @import { StringMap, Entry } from './types.ts'
|
|
8
14
|
*/
|
|
9
15
|
|
|
10
16
|
import { isArray } from '../array/module.f.mjs'
|
|
11
17
|
import { iterable } from '../list/module.f.mjs'
|
|
12
|
-
/** @import { List } from '../list/types.ts' */
|
|
13
18
|
import { fromUndefined } from '../nullable/module.f.mjs'
|
|
14
|
-
/** @import { Nullable } from '../nullable/types.ts' */
|
|
15
19
|
import { entries as mapEntries, fromEntries as mapFromEntries } from '../ordered_map/module.f.mjs'
|
|
16
|
-
|
|
17
|
-
/**
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* `structurallySame` is implemented in a dependency-free leaf so `fjs/asserts`
|
|
23
|
+
* can use it without the cycle `asserts -> object -> nullable -> asserts`; see
|
|
24
|
+
* `./structurally_same/README.md`. This module is its public home.
|
|
25
|
+
*/
|
|
26
|
+
export { structurallySame } from './structurally_same/module.f.mjs'
|
|
18
27
|
|
|
19
28
|
const { getOwnPropertyDescriptor, fromEntries: objectFromEntries } = Object
|
|
20
29
|
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { OptionalMap, RequiredMap, StringMap } from './types.ts'
|
|
3
|
+
* @import { Assert } from '../../asserts/types.ts'
|
|
4
|
+
* @import { Equal } from '../ts/types.ts'
|
|
5
|
+
*/
|
|
1
6
|
import type { OptionalMap, RequiredMap, StringMap } from './types.ts';
|
|
2
7
|
import type { Assert } from '../../asserts/types.ts';
|
|
3
8
|
import type { Equal } from '../ts/types.ts';
|
|
@@ -13,8 +18,6 @@ export type _RequiredIsRequired = Assert<Equal<RequiredMap<'a' | 'b', bigint>, {
|
|
|
13
18
|
readonly b: bigint;
|
|
14
19
|
}>>;
|
|
15
20
|
export type _RequiredOverAnyStringIsNever = Assert<Equal<RequiredMap<string, bigint>, never>>;
|
|
16
|
-
/** @import { Assert } from '../../asserts/types.ts' */
|
|
17
|
-
/** @import { Equal } from '../ts/types.ts' */
|
|
18
21
|
/** @typedef {Assert<Equal<StringMap<bigint>, { readonly [k in string]?: bigint }>>} _StringMapIsOptional */
|
|
19
22
|
/** @typedef {Assert<Equal<OptionalMap<'a'|'b', bigint>, { readonly a?: bigint; readonly b?: bigint }>>} _OptionalIsPartial */
|
|
20
23
|
/** @typedef {Assert<Equal<RequiredMap<'a'|'b', bigint>, { readonly a: bigint; readonly b: bigint }>>} _RequiredIsRequired */
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { OptionalMap, RequiredMap, StringMap } from './types.ts'
|
|
3
|
+
* @import { Assert } from '../../asserts/types.ts'
|
|
4
|
+
* @import { Equal } from '../ts/types.ts'
|
|
5
|
+
*/
|
|
6
|
+
|
|
1
7
|
import { at } from './module.f.mjs'
|
|
2
|
-
/** @import { OptionalMap, RequiredMap, StringMap } from './types.ts' */
|
|
3
8
|
import { assertEq } from '../../asserts/module.f.mjs'
|
|
4
|
-
/** @import { Assert } from '../../asserts/types.ts' */
|
|
5
|
-
/** @import { Equal } from '../ts/types.ts' */
|
|
6
9
|
|
|
7
10
|
/** @typedef {Assert<Equal<StringMap<bigint>, { readonly [k in string]?: bigint }>>} _StringMapIsOptional */
|
|
8
11
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural comparison for FunctionalScript data.
|
|
3
|
+
*
|
|
4
|
+
* `structurallySame` answers "do these two independently constructed values
|
|
5
|
+
* have the same shape and the same leaves?" — the question proofs really ask
|
|
6
|
+
* when they compare a computed value against an expected one. It is scoped to
|
|
7
|
+
* FunctionalScript data (primitives, arrays, and record-like objects) and
|
|
8
|
+
* deliberately says nothing about dates, maps, sets, typed arrays, prototypes,
|
|
9
|
+
* or property descriptors; see the README for what it does *not* promise.
|
|
10
|
+
*
|
|
11
|
+
* This module is a dependency-free leaf on purpose. `fjs/asserts` needs the
|
|
12
|
+
* comparison for `assertStructurallySame`, and the public object module
|
|
13
|
+
* (`../module.f.mjs`) reaches `fjs/asserts` through `types/nullable`, so
|
|
14
|
+
* importing anything here would close the cycle
|
|
15
|
+
* `asserts -> object -> nullable -> asserts`. Keep it importing nothing.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Compares two values structurally.
|
|
21
|
+
*
|
|
22
|
+
* - `Object.is` decides first, so `NaN` equals itself, `0` and `-0` differ, and
|
|
23
|
+
* an object is trivially the same as itself.
|
|
24
|
+
* - Anything else that is not a non-null object differs.
|
|
25
|
+
* - Arrays match arrays of the same length whose elements match pairwise; an
|
|
26
|
+
* array never matches a non-array. Arrays are assumed dense — FunctionalScript
|
|
27
|
+
* cannot build a sparse one; see the README.
|
|
28
|
+
* - Other objects match when their own enumerable string properties form the
|
|
29
|
+
* same set — order is irrelevant — and every property's value matches. A
|
|
30
|
+
* property whose value is `undefined` is a property: `{ a: undefined }` and
|
|
31
|
+
* `{}` differ.
|
|
32
|
+
*
|
|
33
|
+
* There is no cycle detection: a self-referential value recurses until the
|
|
34
|
+
* stack runs out. FunctionalScript data is acyclic, and adding a seen-set would
|
|
35
|
+
* cost every ordinary comparison for a case that cannot arise.
|
|
36
|
+
*
|
|
37
|
+
* @type {(a: unknown, b: unknown) => boolean}
|
|
38
|
+
*/
|
|
39
|
+
export declare const structurallySame: (a: unknown, b: unknown) => boolean;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural comparison for FunctionalScript data.
|
|
3
|
+
*
|
|
4
|
+
* `structurallySame` answers "do these two independently constructed values
|
|
5
|
+
* have the same shape and the same leaves?" — the question proofs really ask
|
|
6
|
+
* when they compare a computed value against an expected one. It is scoped to
|
|
7
|
+
* FunctionalScript data (primitives, arrays, and record-like objects) and
|
|
8
|
+
* deliberately says nothing about dates, maps, sets, typed arrays, prototypes,
|
|
9
|
+
* or property descriptors; see the README for what it does *not* promise.
|
|
10
|
+
*
|
|
11
|
+
* This module is a dependency-free leaf on purpose. `fjs/asserts` needs the
|
|
12
|
+
* comparison for `assertStructurallySame`, and the public object module
|
|
13
|
+
* (`../module.f.mjs`) reaches `fjs/asserts` through `types/nullable`, so
|
|
14
|
+
* importing anything here would close the cycle
|
|
15
|
+
* `asserts -> object -> nullable -> asserts`. Keep it importing nothing.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const { entries, is } = Object
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Compares two values structurally.
|
|
24
|
+
*
|
|
25
|
+
* - `Object.is` decides first, so `NaN` equals itself, `0` and `-0` differ, and
|
|
26
|
+
* an object is trivially the same as itself.
|
|
27
|
+
* - Anything else that is not a non-null object differs.
|
|
28
|
+
* - Arrays match arrays of the same length whose elements match pairwise; an
|
|
29
|
+
* array never matches a non-array. Arrays are assumed dense — FunctionalScript
|
|
30
|
+
* cannot build a sparse one; see the README.
|
|
31
|
+
* - Other objects match when their own enumerable string properties form the
|
|
32
|
+
* same set — order is irrelevant — and every property's value matches. A
|
|
33
|
+
* property whose value is `undefined` is a property: `{ a: undefined }` and
|
|
34
|
+
* `{}` differ.
|
|
35
|
+
*
|
|
36
|
+
* There is no cycle detection: a self-referential value recurses until the
|
|
37
|
+
* stack runs out. FunctionalScript data is acyclic, and adding a seen-set would
|
|
38
|
+
* cost every ordinary comparison for a case that cannot arise.
|
|
39
|
+
*
|
|
40
|
+
* @type {(a: unknown, b: unknown) => boolean}
|
|
41
|
+
*/
|
|
42
|
+
export const structurallySame = (a, b) => {
|
|
43
|
+
if (is(a, b)) { return true }
|
|
44
|
+
if (
|
|
45
|
+
typeof a !== 'object' || a === null ||
|
|
46
|
+
typeof b !== 'object' || b === null
|
|
47
|
+
) { return false }
|
|
48
|
+
if (a instanceof Array) {
|
|
49
|
+
return b instanceof Array
|
|
50
|
+
&& a.length === b.length
|
|
51
|
+
&& a.every((v, i) => structurallySame(v, b[i]))
|
|
52
|
+
}
|
|
53
|
+
if (b instanceof Array) { return false }
|
|
54
|
+
const ae = entries(a)
|
|
55
|
+
/** @type {ReadonlyMap<string, unknown>} */
|
|
56
|
+
const bm = new Map(entries(b))
|
|
57
|
+
return ae.length === bm.size
|
|
58
|
+
&& ae.every(([k, v]) => bm.has(k) && structurallySame(v, bm.get(k)))
|
|
59
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { assert } from '../../../asserts/module.f.mjs'
|
|
2
|
+
import { structurallySame } from './module.f.mjs'
|
|
3
|
+
|
|
4
|
+
/** @type {(a: unknown, b: unknown) => void} */
|
|
5
|
+
const same = (a, b) => assert(structurallySame(a, b), ['same', a, b])
|
|
6
|
+
|
|
7
|
+
/** @type {(a: unknown, b: unknown) => void} */
|
|
8
|
+
const differ = (a, b) => assert(!structurallySame(a, b), ['differ', a, b])
|
|
9
|
+
|
|
10
|
+
export const proof = {
|
|
11
|
+
primitives: [
|
|
12
|
+
// `Object.is` decides, so `NaN` is its own equal...
|
|
13
|
+
() => same(Number.NaN, Number.NaN),
|
|
14
|
+
() => same(42, 42),
|
|
15
|
+
() => same('a', 'a'),
|
|
16
|
+
() => same(undefined, undefined),
|
|
17
|
+
() => same(null, null),
|
|
18
|
+
// ...and the two zeros are not.
|
|
19
|
+
() => differ(0, -0),
|
|
20
|
+
() => differ(1, 2),
|
|
21
|
+
() => differ('a', 'b'),
|
|
22
|
+
() => differ(null, undefined),
|
|
23
|
+
// a non-object on either side ends it
|
|
24
|
+
() => differ(1, {}),
|
|
25
|
+
() => differ({}, 1),
|
|
26
|
+
() => differ(null, {}),
|
|
27
|
+
() => differ({}, null),
|
|
28
|
+
],
|
|
29
|
+
identity: [
|
|
30
|
+
// the same reference short-circuits before any traversal
|
|
31
|
+
() => {
|
|
32
|
+
const a = /** @type {const} */ ({ x: [1, 2] })
|
|
33
|
+
same(a, a)
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
arrays: [
|
|
37
|
+
() => same([], []),
|
|
38
|
+
() => same([1, { a: 2 }], [1, { a: 2 }]),
|
|
39
|
+
// length first, then elementwise
|
|
40
|
+
() => differ([1], [1, 2]),
|
|
41
|
+
() => differ([1, 2], [2, 1]),
|
|
42
|
+
// an array is never the same as a non-array, in either position.
|
|
43
|
+
// `differ([], {})` alone does not pin this: it already fails on
|
|
44
|
+
// `0 === undefined`, so only an array-like with a matching `length`
|
|
45
|
+
// reaches the `b instanceof Array` check.
|
|
46
|
+
() => differ([], {}),
|
|
47
|
+
() => differ({}, []),
|
|
48
|
+
() => differ([1, 2], { 0: 1, 1: 2, length: 2 }),
|
|
49
|
+
// an explicitly `undefined` element is an ordinary element, so it
|
|
50
|
+
// counts towards the length
|
|
51
|
+
() => same([undefined], [undefined]),
|
|
52
|
+
() => differ([undefined], [1]),
|
|
53
|
+
() => differ([undefined], []),
|
|
54
|
+
],
|
|
55
|
+
objects: [
|
|
56
|
+
() => same({}, {}),
|
|
57
|
+
// property order is not part of the structure
|
|
58
|
+
() => same({ a: 1, b: { c: 2 } }, { b: { c: 2 }, a: 1 }),
|
|
59
|
+
// same count, different names. The first is settled by the values
|
|
60
|
+
// (`1` vs `undefined`); only the second — disjoint names *and*
|
|
61
|
+
// `undefined` on both sides — pins the key-set check itself.
|
|
62
|
+
() => differ({ a: 1 }, { b: 1 }),
|
|
63
|
+
() => differ({ a: undefined }, { b: undefined }),
|
|
64
|
+
// same names, different values
|
|
65
|
+
() => differ({ a: 1 }, { a: 2 }),
|
|
66
|
+
() => differ({ a: { b: 1 } }, { a: { b: 2 } }),
|
|
67
|
+
// different counts
|
|
68
|
+
() => differ({ a: 1 }, { a: 1, b: 2 }),
|
|
69
|
+
// an `undefined`-valued property is still a property
|
|
70
|
+
() => differ({ a: undefined }, {}),
|
|
71
|
+
() => differ({}, { a: undefined }),
|
|
72
|
+
],
|
|
73
|
+
}
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* Ordered map operations with deterministic key traversal.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
7
|
+
* @import { List } from '../list/types.ts'
|
|
8
|
+
* @import { Reduce } from '../function/operator/types.ts'
|
|
9
|
+
* @import { Entry, OrderedMap } from './types.ts'
|
|
5
10
|
*/
|
|
6
11
|
import type { List } from '../list/types.ts';
|
|
7
12
|
import type { Reduce } from '../function/operator/types.ts';
|
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
* Ordered map operations with deterministic key traversal.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
7
|
+
* @import { List } from '../list/types.ts'
|
|
8
|
+
* @import { Reduce } from '../function/operator/types.ts'
|
|
9
|
+
* @import { Entry, OrderedMap } from './types.ts'
|
|
5
10
|
*/
|
|
6
11
|
|
|
7
12
|
import { value, find } from '../btree/find/module.f.mjs'
|
|
8
13
|
import { set } from '../btree/set/module.f.mjs'
|
|
9
14
|
import { remove as btreeRemove } from '../btree/remove/module.f.mjs'
|
|
10
15
|
import { values } from '../btree/module.f.mjs'
|
|
11
|
-
/** @import { Sign } from '../function/compare/types.ts' */
|
|
12
16
|
import { cmp } from '../string/module.f.mjs'
|
|
13
|
-
/** @import { List } from '../list/types.ts' */
|
|
14
17
|
import { fold } from '../list/module.f.mjs'
|
|
15
|
-
/** @import { Reduce } from '../function/operator/types.ts' */
|
|
16
|
-
/** @import { Entry, OrderedMap } from './types.ts' */
|
|
17
18
|
|
|
18
19
|
/** @type {(a: string) => <T>(b: Entry<T>) => Sign} */
|
|
19
20
|
const keyCmp = a => ([b]) => cmp(a)(b)
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { OrderedMap } from './types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
1
5
|
import { at, setReplace, setReduce, empty, entries, remove, fromEntries } from './module.f.mjs'
|
|
2
|
-
/** @import { OrderedMap } from './types.ts' */
|
|
3
6
|
import { toArray } from '../list/module.f.mjs'
|
|
4
7
|
import { assertEq } from '../../asserts/module.f.mjs'
|
|
5
8
|
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Streaming Patricia trie for building content-addressed binary trees from sorted leaf sequences.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Candidate, Create, PatriciaTrie } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
import type { Create, PatriciaTrie } from './types.ts';
|
|
7
|
-
/** @import { Candidate, Create, PatriciaTrie } from './types.ts' */
|
|
8
9
|
/**
|
|
9
10
|
* Creates a Patricia trie whose node merging is delegated to `create`.
|
|
10
11
|
*
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Streaming Patricia trie for building content-addressed binary trees from sorted leaf sequences.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Candidate, Create, PatriciaTrie } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
|
-
/** @import { Candidate, Create, PatriciaTrie } from './types.ts' */
|
|
8
|
-
|
|
9
9
|
/**
|
|
10
10
|
* Creates a Patricia trie whose node merging is delegated to `create`.
|
|
11
11
|
*
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { State } from './types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
1
5
|
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
2
6
|
import { emptyState, patriciaTrie } from './module.f.mjs'
|
|
3
|
-
/** @import { State } from './types.ts' */
|
|
4
7
|
|
|
5
8
|
/** @typedef {readonly [bigint, bigint, bigint][]} _NodeList */
|
|
6
9
|
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
* `p % 4 === 3`.
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
|
+
*
|
|
9
|
+
* @import { Reduce, Unary } from '../bigint/types.ts'
|
|
10
|
+
* @import { PrimeField } from './types.ts'
|
|
8
11
|
*/
|
|
9
12
|
import type { Unary } from '../bigint/types.ts';
|
|
10
13
|
import type { PrimeField } from './types.ts';
|
|
11
|
-
/** @import { PrimeField } from './types.ts' */
|
|
12
14
|
/**
|
|
13
15
|
* Creates a prime field with the specified prime modulus and associated operations.
|
|
14
16
|
*
|
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
* `p % 4 === 3`.
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
|
+
*
|
|
9
|
+
* @import { Reduce, Unary } from '../bigint/types.ts'
|
|
10
|
+
* @import { PrimeField } from './types.ts'
|
|
8
11
|
*/
|
|
9
12
|
|
|
10
|
-
/** @import { Reduce, Unary } from '../bigint/types.ts' */
|
|
11
13
|
import { repeat } from '../../common/monoid/module.f.mjs'
|
|
12
14
|
import { assertNotNullish } from '../../asserts/module.f.mjs'
|
|
13
|
-
/** @import { PrimeField } from './types.ts' */
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* Creates a prime field with the specified prime modulus and associated operations.
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Range and interval utilities for numeric boundaries.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Range } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
import type { Range } from './types.ts';
|
|
7
|
-
/** @import { Range } from './types.ts' */
|
|
8
9
|
/** @type {(...range: Range) => (i: number) => boolean} */
|
|
9
10
|
export declare const contains: (...range: Range) => (i: number) => boolean;
|
|
10
11
|
/** @type {(i: number) => Range} */
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Range and interval utilities for numeric boundaries.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Range } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
|
-
/** @import { Range } from './types.ts' */
|
|
8
|
-
|
|
9
9
|
/** @type {(...range: Range) => (i: number) => boolean} */
|
|
10
10
|
export const contains = (b, e) => i => b <= i && i <= e
|
|
11
11
|
|