functionalscript 0.44.0 → 0.46.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/README.md +5 -3
- package/fjs/asn.1/module.f.mjs +8 -1
- package/fjs/asn.1/proof.f.d.mts +15 -0
- package/fjs/asn.1/proof.f.mjs +31 -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/module.f.mjs +22 -5
- 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/module.f.d.mts +32 -6
- package/fjs/bnf/data/module.f.mjs +112 -7
- package/fjs/bnf/data/proof.f.d.mts +2 -0
- package/fjs/bnf/data/proof.f.mjs +74 -4
- package/fjs/bnf/data/types.d.ts +20 -2
- package/fjs/bnf/descent/module.f.d.mts +34 -5
- package/fjs/bnf/descent/module.f.mjs +176 -54
- package/fjs/bnf/descent/proof.f.d.mts +3 -0
- package/fjs/bnf/descent/proof.f.mjs +189 -27
- package/fjs/bnf/descent/types.d.ts +24 -18
- package/fjs/bnf/ll1/module.f.d.mts +74 -6
- package/fjs/bnf/ll1/module.f.mjs +297 -95
- package/fjs/bnf/ll1/proof.f.d.mts +17 -2
- package/fjs/bnf/ll1/proof.f.mjs +372 -137
- package/fjs/bnf/ll1/types.d.ts +25 -27
- package/fjs/bnf/matcher/module.f.d.mts +66 -0
- package/fjs/bnf/matcher/module.f.mjs +81 -0
- package/fjs/bnf/matcher/proof.f.d.mts +10 -0
- package/fjs/bnf/matcher/proof.f.mjs +79 -0
- package/fjs/bnf/matcher/types.d.ts +54 -0
- 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/testlib.f.d.mts +31 -0
- package/fjs/bnf/testlib.f.mjs +80 -0
- 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/module.f.d.mts +1 -1
- package/fjs/cas/cli/module.f.mjs +14 -20
- package/fjs/cas/cli/proof.f.d.mts +4 -4
- package/fjs/cas/cli/proof.f.mjs +47 -34
- package/fjs/cas/evo/module.f.d.mts +71 -31
- package/fjs/cas/evo/module.f.mjs +223 -138
- package/fjs/cas/evo/proof.f.d.mts +10 -1
- package/fjs/cas/evo/proof.f.mjs +311 -226
- package/fjs/cas/evo/types.d.ts +45 -9
- package/fjs/cas/module.f.d.mts +18 -32
- package/fjs/cas/module.f.mjs +164 -176
- package/fjs/cas/proof.f.d.mts +11 -8
- package/fjs/cas/proof.f.mjs +259 -147
- package/fjs/cas/types.d.ts +24 -10
- 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 +3 -3
- package/fjs/ci/config/module.f.mjs +3 -3
- package/fjs/ci/module.f.d.mts +5 -5
- package/fjs/ci/module.f.mjs +8 -7
- package/fjs/ci/nix/module.f.d.mts +7 -5
- package/fjs/ci/nix/module.f.mjs +13 -12
- package/fjs/ci/nix/proof.f.d.mts +2 -0
- package/fjs/ci/nix/proof.f.mjs +4 -4
- package/fjs/ci/proof.f.d.mts +4 -2
- package/fjs/ci/proof.f.mjs +13 -8
- package/fjs/cli/module.f.d.mts +4 -6
- package/fjs/cli/module.f.mjs +4 -8
- package/fjs/cli/proof.f.d.mts +4 -2
- package/fjs/cli/proof.f.mjs +21 -18
- package/fjs/cli/types.d.ts +2 -3
- 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/hmac/module.f.mjs +2 -2
- package/fjs/crypto/secp/proof.f.d.mts +3 -1
- package/fjs/crypto/secp/proof.f.mjs +3 -1
- package/fjs/crypto/sha2/module.f.mjs +3 -1
- package/fjs/crypto/sha2/proof.f.d.mts +4 -1
- package/fjs/crypto/sha2/proof.f.mjs +27 -1
- package/fjs/crypto/sha2/types.d.ts +11 -0
- package/fjs/crypto/sign/module.f.mjs +2 -2
- 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 +17 -5
- package/fjs/dev/module.f.mjs +60 -30
- package/fjs/dev/update/module.f.d.mts +11 -3
- package/fjs/dev/update/module.f.mjs +16 -11
- package/fjs/dev/update/proof.f.d.mts +4 -3
- package/fjs/dev/update/proof.f.mjs +11 -7
- package/fjs/djs/module.f.d.mts +13 -5
- package/fjs/djs/module.f.mjs +31 -16
- package/fjs/djs/parser/module.f.d.mts +16 -3
- package/fjs/djs/parser/module.f.mjs +135 -16
- package/fjs/djs/parser/proof.f.d.mts +8 -1
- package/fjs/djs/parser/proof.f.mjs +287 -13
- package/fjs/djs/parser/types.d.ts +7 -1
- package/fjs/djs/proof.f.d.mts +20 -1
- package/fjs/djs/proof.f.mjs +190 -12
- package/fjs/djs/serializer/module.f.d.mts +25 -8
- package/fjs/djs/serializer/module.f.mjs +66 -19
- package/fjs/djs/serializer/proof.f.d.mts +5 -0
- package/fjs/djs/serializer/proof.f.mjs +23 -1
- package/fjs/djs/tokenizer/module.f.d.mts +17 -5
- package/fjs/djs/tokenizer/module.f.mjs +120 -73
- package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
- package/fjs/djs/tokenizer/proof.f.mjs +86 -67
- package/fjs/djs/transpiler/module.f.d.mts +13 -19
- package/fjs/djs/transpiler/module.f.mjs +79 -72
- package/fjs/djs/transpiler/types.d.ts +29 -0
- package/fjs/djs/types.d.ts +7 -1
- package/fjs/effects/list/module.f.d.mts +23 -12
- package/fjs/effects/list/module.f.mjs +16 -12
- package/fjs/effects/list/types.d.ts +27 -7
- package/fjs/effects/memory/module.f.d.mts +6 -3
- package/fjs/effects/memory/module.f.mjs +7 -7
- package/fjs/effects/memory/proof.f.d.mts +4 -0
- package/fjs/effects/memory/proof.f.mjs +18 -9
- package/fjs/effects/memory/types.d.ts +4 -3
- package/fjs/effects/mock/module.f.d.mts +28 -4
- package/fjs/effects/mock/module.f.mjs +39 -5
- package/fjs/effects/mock/types.d.ts +10 -1
- package/fjs/effects/module.d.mts +12 -2
- package/fjs/effects/module.f.d.mts +469 -281
- package/fjs/effects/module.f.mjs +538 -299
- package/fjs/effects/module.mjs +11 -2
- package/fjs/effects/node/memory/module.d.mts +7 -2
- package/fjs/effects/node/memory/module.mjs +9 -5
- package/fjs/effects/node/memory/proof.d.mts +2 -0
- package/fjs/effects/node/memory/proof.mjs +12 -5
- package/fjs/effects/node/module.d.mts +8 -2
- package/fjs/effects/node/module.f.d.mts +183 -43
- package/fjs/effects/node/module.f.mjs +260 -62
- package/fjs/effects/node/module.mjs +61 -50
- package/fjs/effects/node/proof.f.d.mts +28 -2
- package/fjs/effects/node/proof.f.mjs +161 -42
- package/fjs/effects/node/types.d.ts +106 -18
- package/fjs/effects/node/virtual/module.f.d.mts +21 -4
- package/fjs/effects/node/virtual/module.f.mjs +113 -70
- package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
- package/fjs/effects/node/virtual/proof.f.mjs +201 -8
- package/fjs/effects/proof.f.d.mts +69 -34
- package/fjs/effects/proof.f.mjs +413 -130
- package/fjs/effects/types.d.ts +161 -33
- 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 +22 -10
- package/fjs/emergent_testing/module.f.mjs +119 -85
- package/fjs/emergent_testing/proof.f.d.mts +21 -7
- package/fjs/emergent_testing/proof.f.mjs +169 -35
- package/fjs/emergent_testing/types.d.ts +22 -4
- 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/module.f.d.mts +14 -4
- package/fjs/fsm/module.f.mjs +54 -37
- package/fjs/fsm/proof.f.d.mts +5 -0
- package/fjs/fsm/proof.f.mjs +87 -115
- package/fjs/js/keywords/module.f.d.mts +52 -0
- package/fjs/js/keywords/module.f.mjs +72 -0
- package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
- package/fjs/js/keywords/proof.f.mjs +13 -0
- package/fjs/js/tokenizer/module.f.d.mts +30 -3
- package/fjs/js/tokenizer/module.f.mjs +161 -211
- package/fjs/js/tokenizer/proof.f.d.mts +1 -0
- package/fjs/js/tokenizer/proof.f.mjs +54 -24
- package/fjs/js/tokenizer/types.d.ts +33 -24
- package/fjs/mcp/cas/module.f.d.mts +1 -6
- package/fjs/mcp/cas/module.f.mjs +55 -51
- package/fjs/mcp/cas/proof.f.d.mts +15 -0
- package/fjs/mcp/cas/proof.f.mjs +174 -0
- package/fjs/mcp/evo/module.f.d.mts +19 -10
- package/fjs/mcp/evo/module.f.mjs +48 -27
- package/fjs/mcp/evo/proof.f.d.mts +6 -1
- package/fjs/mcp/evo/proof.f.mjs +115 -31
- package/fjs/mcp/module.f.d.mts +39 -4
- package/fjs/mcp/module.f.mjs +14 -12
- package/fjs/mcp/proof.f.d.mts +13 -1
- package/fjs/mcp/proof.f.mjs +120 -61
- package/fjs/media/html/module.f.d.mts +12 -0
- package/fjs/media/html/module.f.mjs +7 -5
- package/fjs/media/html/proof.f.d.mts +3 -0
- package/fjs/media/html/proof.f.mjs +4 -1
- package/fjs/media/json/extended/module.f.d.mts +82 -0
- package/fjs/media/json/extended/module.f.mjs +153 -0
- package/fjs/media/json/extended/proof.f.d.mts +42 -0
- package/fjs/media/json/extended/proof.f.mjs +127 -0
- package/fjs/media/json/extended/types.d.ts +23 -0
- package/fjs/media/json/module.f.d.mts +8 -2
- package/fjs/media/json/module.f.mjs +43 -41
- package/fjs/media/json/number/module.f.d.mts +59 -0
- package/fjs/media/json/number/module.f.mjs +136 -0
- package/fjs/media/json/number/proof.f.d.mts +24 -0
- package/fjs/media/json/number/proof.f.mjs +86 -0
- package/fjs/media/json/number/types.d.ts +28 -0
- package/fjs/media/json/parser/module.f.d.mts +25 -13
- package/fjs/media/json/parser/module.f.mjs +133 -72
- package/fjs/media/json/parser/proof.f.d.mts +5 -0
- package/fjs/media/json/parser/proof.f.mjs +31 -1
- package/fjs/media/json/parser/types.d.ts +38 -14
- package/fjs/media/json/rtti/module.f.d.mts +1 -1
- package/fjs/media/json/rtti/module.f.mjs +1 -1
- package/fjs/media/json/rtti/proof.f.d.mts +3 -0
- package/fjs/media/json/rtti/proof.f.mjs +12 -12
- package/fjs/media/json/schema/module.f.d.mts +61 -27
- package/fjs/media/json/schema/module.f.mjs +218 -63
- package/fjs/media/json/schema/proof.f.d.mts +41 -1
- package/fjs/media/json/schema/proof.f.mjs +220 -9
- package/fjs/media/json/serializer/module.f.d.mts +44 -0
- package/fjs/media/json/serializer/module.f.mjs +71 -9
- package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
- package/fjs/media/json/tokenizer/module.f.mjs +31 -8
- package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
- package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
- package/fjs/media/json/types.d.ts +36 -10
- package/fjs/media/lock/module.f.d.mts +100 -0
- package/fjs/media/lock/module.f.mjs +125 -0
- package/fjs/media/lock/proof.f.d.mts +33 -0
- package/fjs/media/lock/proof.f.mjs +196 -0
- package/fjs/media/lock/types.d.ts +15 -0
- package/fjs/media/module.f.d.mts +6 -5
- package/fjs/media/module.f.mjs +8 -7
- 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/note/module.f.d.mts +121 -0
- package/fjs/media/note/module.f.mjs +131 -0
- package/fjs/media/note/proof.f.d.mts +29 -0
- package/fjs/media/note/proof.f.mjs +150 -0
- package/fjs/media/note/types.d.ts +10 -0
- package/fjs/media/proof.f.d.mts +4 -1
- package/fjs/media/proof.f.mjs +40 -21
- package/fjs/media/revision/module.f.d.mts +83 -7
- package/fjs/media/revision/module.f.mjs +127 -23
- package/fjs/media/revision/proof.f.d.mts +14 -0
- package/fjs/media/revision/proof.f.mjs +93 -2
- package/fjs/media/revision/types.d.ts +34 -5
- package/fjs/media/type/module.f.d.mts +53 -18
- package/fjs/media/type/module.f.mjs +87 -97
- package/fjs/media/type/proof.f.d.mts +17 -0
- package/fjs/media/type/proof.f.mjs +73 -13
- package/fjs/module.d.mts +5 -0
- package/fjs/module.f.d.mts +8 -0
- package/fjs/module.f.mjs +33 -10
- package/fjs/module.mjs +6 -0
- package/fjs/nanvm/proof.f.mjs +3 -3
- package/fjs/nanvm/rust/module.f.mjs +1 -1
- package/fjs/nanvm/update/module.f.d.mts +4 -4
- package/fjs/nanvm/update/module.f.mjs +8 -9
- package/fjs/nanvm/update/proof.f.mjs +4 -3
- package/fjs/path/module.f.d.mts +8 -0
- package/fjs/path/module.f.mjs +4 -2
- package/fjs/proof.f.d.mts +7 -3
- package/fjs/proof.f.mjs +41 -12
- package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
- package/fjs/protocol/json_rpc/module.f.mjs +10 -7
- package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
- package/fjs/protocol/mcp/module.f.d.mts +10 -13
- package/fjs/protocol/mcp/module.f.mjs +74 -58
- package/fjs/protocol/mcp/proof.f.d.mts +16 -3
- package/fjs/protocol/mcp/proof.f.mjs +224 -69
- package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
- package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
- package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
- package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
- package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
- package/fjs/protocol/mcp/types.d.ts +17 -6
- package/fjs/sul/id/module.f.d.mts +4 -0
- package/fjs/sul/id/module.f.mjs +6 -6
- package/fjs/sul/level/hash/module.f.d.mts +4 -1
- package/fjs/sul/level/hash/module.f.mjs +6 -4
- package/fjs/sul/level/hash/proof.f.d.mts +4 -0
- package/fjs/sul/level/hash/proof.f.mjs +7 -4
- 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 +23 -17
- 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 +29 -3
- package/fjs/text/code_point/module.f.mjs +32 -9
- package/fjs/text/code_point/proof.f.d.mts +2 -0
- package/fjs/text/code_point/proof.f.mjs +39 -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 +6 -5
- package/fjs/text/sgr/module.f.mjs +8 -8
- 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 +38 -35
- package/fjs/text/utf16/proof.f.d.mts +3 -1
- package/fjs/text/utf16/proof.f.mjs +19 -2
- package/fjs/text/utf8/module.f.d.mts +9 -5
- package/fjs/text/utf8/module.f.mjs +20 -20
- package/fjs/types/array/module.f.d.mts +2 -1
- package/fjs/types/array/module.f.mjs +16 -4
- 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 -16
- package/fjs/types/bit_vec/module.f.mjs +99 -95
- package/fjs/types/bit_vec/proof.f.d.mts +6 -0
- package/fjs/types/bit_vec/proof.f.mjs +31 -5
- 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 +10 -10
- 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 +14 -17
- package/fjs/types/btree/set/proof.f.d.mts +3 -0
- package/fjs/types/btree/set/proof.f.mjs +16 -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 +20 -4
- package/fjs/types/byte_set/module.f.mjs +18 -8
- package/fjs/types/byte_set/proof.f.d.mts +3 -1
- package/fjs/types/byte_set/proof.f.mjs +10 -8
- package/fjs/types/function/compare/module.f.d.mts +3 -2
- package/fjs/types/function/compare/module.f.mjs +13 -5
- 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 +10 -3
- package/fjs/types/list/module.f.mjs +6 -4
- 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 +26 -6
- package/fjs/types/nullable/module.f.mjs +25 -6
- package/fjs/types/nullable/proof.f.d.mts +4 -0
- package/fjs/types/nullable/proof.f.mjs +15 -0
- 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 +26 -4
- package/fjs/types/object/module.f.mjs +26 -7
- 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 +27 -12
- 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 +44 -14
- package/fjs/types/rtti/common/module.f.mjs +42 -36
- package/fjs/types/rtti/common/proof.f.d.mts +4 -0
- package/fjs/types/rtti/common/proof.f.mjs +10 -7
- package/fjs/types/rtti/data/module.f.d.mts +134 -0
- package/fjs/types/rtti/data/module.f.mjs +1053 -0
- package/fjs/types/rtti/data/proof.f.d.mts +76 -0
- package/fjs/types/rtti/data/proof.f.mjs +589 -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 +48 -0
- package/fjs/types/rtti/parse/module.f.mjs +45 -34
- package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
- package/fjs/types/rtti/parse/proof.f.mjs +51 -52
- package/fjs/types/rtti/proof.f.d.mts +3 -1
- package/fjs/types/rtti/proof.f.mjs +6 -2
- package/fjs/types/rtti/ts/module.f.d.mts +68 -9
- package/fjs/types/rtti/ts/module.f.mjs +258 -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 +25 -1
- package/fjs/types/rtti/types.d.ts +40 -0
- 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 +49 -1
- package/fjs/types/sorted_set/module.f.mjs +26 -2
- package/fjs/types/sorted_set/proof.f.d.mts +4 -1
- package/fjs/types/sorted_set/proof.f.mjs +19 -2
- 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 +5 -2
- package/fjs/website/module.f.mjs +6 -8
- package/fjs/website/proof.f.mjs +2 -1
- 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/package_json/module.f.d.mts +0 -32
- package/fjs/dev/package_json/module.f.mjs +0 -37
- package/fjs/dev/package_json/proof.f.d.mts +0 -6
- package/fjs/dev/package_json/proof.f.mjs +0 -32
- 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/module.f.d.mts +0 -10
- package/fjs/effects/eff/module.f.mjs +0 -68
- package/fjs/effects/eff/proof.f.d.mts +0 -12
- package/fjs/effects/eff/proof.f.mjs +0 -66
- package/fjs/effects/eff/types.d.ts +0 -71
- 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.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/module.f.d.mts +0 -6
- package/fjs/types/rtti/validate/module.f.mjs +0 -169
- package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
- package/fjs/types/rtti/validate/proof.f.mjs +0 -437
- package/fjs/types/rtti/validate/types.d.ts +0 -6
- 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
|
@@ -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
|
|
|
@@ -52,7 +61,17 @@ export const definedValues =
|
|
|
52
61
|
map =>
|
|
53
62
|
values(map).filter(v => v !== undefined)
|
|
54
63
|
|
|
55
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* Returns only the defined (non-undefined) entries of a partial record.
|
|
66
|
+
*
|
|
67
|
+
* `T` is the record's own value type, which `StringMap` already makes
|
|
68
|
+
* optional. Writing the parameter as `StringMap<Exclude<T, undefined>>`
|
|
69
|
+
* instead would leave `T` in a non-inference position, so a record whose value
|
|
70
|
+
* type is itself generic — the leaf-parameterized JSON tree, say — could not
|
|
71
|
+
* be passed at all.
|
|
72
|
+
*
|
|
73
|
+
* @type {<T>(cmd: StringMap<T>) => readonly Entry<T>[]}
|
|
74
|
+
*/
|
|
56
75
|
export const definedEntries =
|
|
57
76
|
cmd =>
|
|
58
77
|
entries(cmd).flatMap(([a, b]) => b === undefined ? [] : [[a, b]])
|
|
@@ -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,9 +2,11 @@
|
|
|
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
|
-
|
|
9
|
+
import { splitLast } from '../array/module.f.mjs'
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* Creates a Patricia trie whose node merging is delegated to `create`.
|
|
@@ -14,24 +16,37 @@
|
|
|
14
16
|
export const patriciaTrie = create => ({
|
|
15
17
|
push: (c, [storage, stack]) => {
|
|
16
18
|
const [u] = c
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
// Carry propagation: merge the top two candidates for as long as they
|
|
20
|
+
// are more tightly coupled to each other than the right one is to the
|
|
21
|
+
// incoming leaf. Genuinely sequential — each merge decides whether the
|
|
22
|
+
// next one happens — so the loop stays, but the stack is read by
|
|
23
|
+
// splitting rather than by index arithmetic. Either split answering
|
|
24
|
+
// `null` means fewer than two candidates are left, which is where the
|
|
25
|
+
// old `stack.length >= 2` guard stopped.
|
|
26
|
+
while (true) {
|
|
27
|
+
const top = splitLast(stack)
|
|
28
|
+
if (top === null) { break }
|
|
29
|
+
const [belowR, [rLeaf, rHash]] = top
|
|
30
|
+
const below = splitLast(belowR)
|
|
31
|
+
if (below === null) { break }
|
|
32
|
+
const [rest, [lLeaf, lHash]] = below
|
|
20
33
|
if ((lLeaf ^ rLeaf) >= (rLeaf ^ u)) { break }
|
|
21
34
|
const [h, newS] = create(lHash, rHash, storage)
|
|
22
35
|
storage = newS
|
|
23
|
-
stack = [...
|
|
36
|
+
stack = [...rest, [rLeaf, h]]
|
|
24
37
|
}
|
|
25
38
|
return [storage, [...stack, c]]
|
|
26
39
|
},
|
|
40
|
+
// Drain the right spine into a root: a right fold whose seed is the last
|
|
41
|
+
// candidate's identity. `splitLast` supplies both halves at once, so the
|
|
42
|
+
// empty stack is the `null` branch rather than a separate length guard.
|
|
27
43
|
end: ([storage, stack]) => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
[h,
|
|
33
|
-
|
|
34
|
-
return [h, storage]
|
|
44
|
+
const split = splitLast(stack)
|
|
45
|
+
if (split === null) { return [undefined, storage] }
|
|
46
|
+
const [rest, [, lastHash]] = split
|
|
47
|
+
return rest.reduceRight(
|
|
48
|
+
([h, s], [, lHash]) => create(lHash, h, s),
|
|
49
|
+
/** @type {readonly [typeof lastHash, typeof storage]} */([lastHash, storage]))
|
|
35
50
|
}
|
|
36
51
|
})
|
|
37
52
|
|
|
@@ -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
|
|
|
@@ -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>;
|