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
|
@@ -20,34 +20,23 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*
|
|
22
22
|
* @module
|
|
23
|
+
*
|
|
24
|
+
* @import { Reduce as BigintReduce } from '../bigint/types.ts'
|
|
25
|
+
* @import { Fold } from '../function/operator/types.ts'
|
|
26
|
+
* @import { List, Thunk } from '../list/types.ts'
|
|
27
|
+
* @import { Absorbing } from '../../common/monoid/types.ts'
|
|
28
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
29
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
30
|
+
* @import { BitOrder, PopFront, Reduce, Unpacked, Vec, _NormOp, _UnpackConcat, } from './types.ts'
|
|
23
31
|
*/
|
|
24
32
|
|
|
25
33
|
import { bitLength, divUp, mask, maxLength, xor } from '../bigint/module.f.mjs'
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
import { flip, identity } from '../function/module.f.mjs'
|
|
29
|
-
|
|
30
|
-
/** @import { Fold } from '../function/operator/types.ts' */
|
|
31
|
-
|
|
32
|
-
import { map, tryFold } from '../list/module.f.mjs'
|
|
33
|
-
/** @import { Accumulator, List, Thunk } from '../list/types.ts' */
|
|
34
|
-
|
|
34
|
+
import { compose, flip, identity } from '../function/module.f.mjs'
|
|
35
|
+
import { map } from '../list/module.f.mjs'
|
|
35
36
|
import { asBase, asNominal } from '../nominal/module.f.mjs'
|
|
36
|
-
|
|
37
|
-
import { repeat as mRepeat } from '../../common/monoid/module.f.mjs'
|
|
38
|
-
|
|
37
|
+
import { foldAbsorbing, repeat as mRepeat } from '../../common/monoid/module.f.mjs'
|
|
39
38
|
import { cmp, max, min } from '../function/compare/module.f.mjs'
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
import { mapUnwrap } from '../nullable/module.f.mjs'
|
|
43
|
-
/** @import { Nullable } from '../nullable/types.ts' */
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* @import {
|
|
47
|
-
* BitOrder, PopFront, Reduce, Unpacked, Vec,
|
|
48
|
-
* _NormOp, _UnpackConcat,
|
|
49
|
-
* } from './types.ts'
|
|
50
|
-
*/
|
|
39
|
+
import { map as nullableMap, mapUnwrap } from '../nullable/module.f.mjs'
|
|
51
40
|
|
|
52
41
|
/**
|
|
53
42
|
* Maximum length of a bit vector in bits (1_048_576 = 0x10_0000).
|
|
@@ -183,8 +172,6 @@ const op = norm => op => ap => bp => {
|
|
|
183
172
|
|
|
184
173
|
/**
|
|
185
174
|
* @typedef {{
|
|
186
|
-
* readonly front: (len: bigint) => (v: Vec) => bigint
|
|
187
|
-
* readonly removeFront: (len: bigint) => (v: Vec) => Vec
|
|
188
175
|
* readonly norm: _NormOp
|
|
189
176
|
* readonly uintCmp: (a: bigint) => (b: bigint) => Sign
|
|
190
177
|
* readonly unpackSplit: (len: bigint) => (u: Unpacked) => readonly[bigint, bigint]
|
|
@@ -195,55 +182,62 @@ const op = norm => op => ap => bp => {
|
|
|
195
182
|
const unpackEmpty = /** @type {const} */{ length: 0n, uint: 0n }
|
|
196
183
|
|
|
197
184
|
/**
|
|
198
|
-
* @
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
185
|
+
* The element-to-`Unpacked` maps the two {@link mappedListToVec} instances
|
|
186
|
+
* differ by. Neither depends on a bit order, so both are bound once here
|
|
187
|
+
* (`fjs/AGENTS.md` §3.3).
|
|
188
|
+
*
|
|
189
|
+
* @type {(_: number) => Unpacked}
|
|
202
190
|
*/
|
|
191
|
+
const u8ToUnpacked = b => ({ length: 8n, uint: BigInt(b) })
|
|
203
192
|
|
|
204
|
-
/**
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
193
|
+
/**
|
|
194
|
+
* Concatenation as a monoid over `Nullable<Unpacked>`, where `null` means "the
|
|
195
|
+
* concatenation is longer than `maxLength`" and is an **absorbing** element:
|
|
196
|
+
* combining it with anything is `null` again. The identity is the empty vector.
|
|
197
|
+
*
|
|
198
|
+
* This is a lawful monoid, so `monoid.fold` may re-associate it freely. Length
|
|
199
|
+
* is additive and non-negative, so any partial combine is at most the total: a
|
|
200
|
+
* partial can only overflow when the total does, and the top-level combine
|
|
201
|
+
* always sees the full total. The result is therefore `null` **iff** the total
|
|
202
|
+
* length exceeds `maxLength`, whatever the grouping.
|
|
203
|
+
*
|
|
204
|
+
* The cap is checked on the operands' lengths rather than on the concatenated
|
|
205
|
+
* result because the result is what must not be built: `maxLength` is the
|
|
206
|
+
* smallest `bigint` size supported across FunctionalScript's runtimes. The two
|
|
207
|
+
* lengths are exact and additive — this is the length, not an estimate of it
|
|
208
|
+
* (`DESIGN.md` §6).
|
|
209
|
+
*
|
|
210
|
+
* Being absorbing is also what keeps the fold's walk bounded: `foldAbsorbing`
|
|
211
|
+
* stops at the first merge that overflows instead of reading the rest of a list
|
|
212
|
+
* whose answer is already `null`. `List<T>` includes `Thunk<T>`, so that is the
|
|
213
|
+
* difference between answering and never returning on an unbounded lazy list —
|
|
214
|
+
* and at `maxLength` = 128 KiB, overflow is an ordinary outcome for a stream,
|
|
215
|
+
* not an exotic one. Since a single vector is never `null`, only a merge can
|
|
216
|
+
* reach the absorbing element, so the stop lags the element that crossed the cap
|
|
217
|
+
* by at most one doubling of the run size (measured: 65 536 elements read for a
|
|
218
|
+
* cap crossed at 32 769, and 4 for a cap crossed at 3).
|
|
219
|
+
*
|
|
220
|
+
* @type {(unpackConcat: _UnpackConcat) => Absorbing<Nullable<Unpacked>>}
|
|
221
|
+
*/
|
|
222
|
+
const tryUnpackConcat = unpackConcat => ({
|
|
223
|
+
monoid: {
|
|
224
|
+
identity: unpackEmpty,
|
|
225
|
+
operation: a => b =>
|
|
226
|
+
a === null || b === null || a.length + b.length > maxLength
|
|
227
|
+
? null
|
|
228
|
+
: unpackConcat(a)(b)
|
|
228
229
|
},
|
|
229
|
-
|
|
230
|
+
absorbing: null,
|
|
230
231
|
})
|
|
231
232
|
|
|
232
233
|
/**
|
|
233
|
-
* Concatenates a list of unpacked vectors
|
|
234
|
-
*
|
|
235
|
-
* naive left fold.
|
|
236
|
-
*
|
|
237
|
-
* Slot `i` of `result` holds an already-combined run of the most recent
|
|
238
|
-
* `2 ** i` elements. Each arriving element "carries" upward, merging only with
|
|
239
|
-
* runs of comparable size — exactly like incrementing a binary number — so
|
|
240
|
-
* every merge joins two runs of similar length. Left-to-right element order is
|
|
241
|
-
* preserved: `unpackConcat(old)(cur)` keeps the earlier run on the left, and
|
|
242
|
-
* the final reduce prepends higher (earlier) slots in front of accumulated
|
|
243
|
-
* later runs. An empty list yields `unpackEmpty`.
|
|
234
|
+
* Concatenates a list of unpacked vectors, or `null` if the result would be
|
|
235
|
+
* longer than `maxLength`.
|
|
244
236
|
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
237
|
+
* `monoid.foldAbsorbing` reduces as a balanced binary tree, so each merge joins
|
|
238
|
+
* two runs of comparable size — O(n log n) total `bigint` shifting work instead
|
|
239
|
+
* of the O(n²) a left fold would spend growing one accumulator against small
|
|
240
|
+
* operands — and stops reading at the first overflow.
|
|
247
241
|
*
|
|
248
242
|
* This is the bit-vector analogue of a builder that accumulates appended pieces
|
|
249
243
|
* and materializes the combined result on demand, such as `StringBuilder`
|
|
@@ -251,10 +245,29 @@ const listToVecOp = unpackConcat => ({
|
|
|
251
245
|
*
|
|
252
246
|
* @param {_UnpackConcat} unpackConcat
|
|
253
247
|
*/
|
|
254
|
-
const unpackListToVec = unpackConcat =>
|
|
248
|
+
const unpackListToVec = unpackConcat =>
|
|
249
|
+
compose(foldAbsorbing(tryUnpackConcat(unpackConcat)))(nullableMap(pack))
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Concatenates a list of `I` values into one vector, mapping each element to
|
|
253
|
+
* its `Unpacked` form first; `null` when the result would exceed `maxLength`.
|
|
254
|
+
*
|
|
255
|
+
* The concatenation counterpart of {@link mappedChunkList}. Everything about
|
|
256
|
+
* the operation is fixed except how one element becomes `Unpacked`, so each
|
|
257
|
+
* element type supplies just that map. The `bo` parameter is structural rather
|
|
258
|
+
* than a whole `BitOrder` because `bo`'s own body applies this before the
|
|
259
|
+
* record exists.
|
|
260
|
+
*
|
|
261
|
+
* @type {<I>(g: (i: I) => Unpacked) => (bo: { readonly unpackConcat: _UnpackConcat }) => (list: List<I>) => Nullable<Vec>}
|
|
262
|
+
*/
|
|
263
|
+
const mappedListToVec = g => ({ unpackConcat }) => {
|
|
264
|
+
const f = unpackListToVec(unpackConcat)
|
|
265
|
+
const mg = map(g)
|
|
266
|
+
return list => f(mg(list))
|
|
267
|
+
}
|
|
255
268
|
|
|
256
269
|
/** @type {(base: _Base) => BitOrder} */
|
|
257
|
-
const bo = ({
|
|
270
|
+
const bo = ({ norm, uintCmp, unpackSplit, unpackConcatUint }) => {
|
|
258
271
|
/** @param {bigint} len */
|
|
259
272
|
const unpackPopFront = len => {
|
|
260
273
|
const m = mask(len)
|
|
@@ -265,6 +278,19 @@ const bo = ({ front, removeFront, norm, uintCmp, unpackSplit, unpackConcatUint }
|
|
|
265
278
|
return /** @type {const} */([uint & m, { length: v.length - len, uint: rest }])
|
|
266
279
|
}
|
|
267
280
|
}
|
|
281
|
+
// `front` and `removeFront` are the two projections of `unpackPopFront`,
|
|
282
|
+
// so each bit order supplies only `unpackSplit` and both fall out of it.
|
|
283
|
+
// `pack` re-masks, so `removeFront` can hand on the unmasked rest.
|
|
284
|
+
/** @type {(len: bigint) => (v: Vec) => bigint} */
|
|
285
|
+
const front = len => {
|
|
286
|
+
const f = unpackPopFront(len)
|
|
287
|
+
return v => f(unpack(v))[0]
|
|
288
|
+
}
|
|
289
|
+
/** @type {(len: bigint) => (v: Vec) => Vec} */
|
|
290
|
+
const removeFront = len => {
|
|
291
|
+
const f = unpackPopFront(len)
|
|
292
|
+
return v => pack(f(unpack(v))[1])
|
|
293
|
+
}
|
|
268
294
|
/** @type {_UnpackConcat} */
|
|
269
295
|
const unpackConcat = a => b => ({
|
|
270
296
|
length: a.length + b.length,
|
|
@@ -284,9 +310,7 @@ const bo = ({ front, removeFront, norm, uintCmp, unpackSplit, unpackConcatUint }
|
|
|
284
310
|
const bu = unpack(b)
|
|
285
311
|
return pack(unpackConcat(au)(bu))
|
|
286
312
|
}
|
|
287
|
-
|
|
288
|
-
const tryListToVec = list =>
|
|
289
|
-
unpackListToVec(unpackConcat)(map(unpack)(list))
|
|
313
|
+
const tryListToVec = mappedListToVec(unpack)({ unpackConcat })
|
|
290
314
|
return {
|
|
291
315
|
front,
|
|
292
316
|
removeFront,
|
|
@@ -310,7 +334,8 @@ const bo = ({ front, removeFront, norm, uintCmp, unpackSplit, unpackConcatUint }
|
|
|
310
334
|
unpackConcat,
|
|
311
335
|
startsWith: prefix => {
|
|
312
336
|
const { length: n, uint: u } = unpack(prefix)
|
|
313
|
-
|
|
337
|
+
const f = front(n)
|
|
338
|
+
return v => length(v) < n ? false : f(v) === u
|
|
314
339
|
}
|
|
315
340
|
}
|
|
316
341
|
}
|
|
@@ -327,14 +352,6 @@ const lsbUnpackConcatUint =
|
|
|
327
352
|
* Usually associated with Little-Endian (LE) byte order.
|
|
328
353
|
*/
|
|
329
354
|
export const lsb = bo({
|
|
330
|
-
front: len => {
|
|
331
|
-
const m = mask(len)
|
|
332
|
-
return v => uint(v) & m
|
|
333
|
-
},
|
|
334
|
-
removeFront: len => v => {
|
|
335
|
-
const { length, uint } = unpack(v)
|
|
336
|
-
return vec(length - len)(uint >> len)
|
|
337
|
-
},
|
|
338
355
|
norm: ({ uint: a }) => ({ uint: b }) => () =>
|
|
339
356
|
({ a, b }),
|
|
340
357
|
uintCmp: a => b => {
|
|
@@ -353,17 +370,6 @@ export const lsb = bo({
|
|
|
353
370
|
* Usually associated with Big-Endian (BE) byte order.
|
|
354
371
|
*/
|
|
355
372
|
export const msb = bo({
|
|
356
|
-
front: len => {
|
|
357
|
-
const m = mask(len)
|
|
358
|
-
return v => {
|
|
359
|
-
const { length, uint } = unpack(v)
|
|
360
|
-
return (uint >> (length - len)) & m
|
|
361
|
-
}
|
|
362
|
-
},
|
|
363
|
-
removeFront: len => v => {
|
|
364
|
-
const { length, uint } = unpack(v)
|
|
365
|
-
return vec(length - len)(uint)
|
|
366
|
-
},
|
|
367
373
|
norm: ({ length: al, uint: a }) => ({ length: bl, uint: b }) => len =>
|
|
368
374
|
({ a: a << (len - al), b: b << (len - bl) }),
|
|
369
375
|
uintCmp: cmp,
|
|
@@ -378,9 +384,7 @@ export const msb = bo({
|
|
|
378
384
|
*
|
|
379
385
|
* @type {(_: BitOrder) => (list: List<number>) => Nullable<Vec>}
|
|
380
386
|
*/
|
|
381
|
-
export const tryU8ListToVec = (
|
|
382
|
-
unpackListToVec(unpackConcat)(
|
|
383
|
-
map(/** @type {(_: number) => Unpacked} */b => ({ length: 8n, uint: BigInt(b) }))(list))
|
|
387
|
+
export const tryU8ListToVec = mappedListToVec(u8ToUnpacked)
|
|
384
388
|
|
|
385
389
|
/**
|
|
386
390
|
* Converts a list of unsigned 8-bit integers to a bit vector using the provided bit order.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
3
|
+
* @import { Vec, BitOrder } from './types.ts'
|
|
4
|
+
* @import { List } from '../list/types.ts'
|
|
5
|
+
*/
|
|
1
6
|
export declare const proof: {
|
|
2
7
|
fromSentinel: () => void;
|
|
3
8
|
examples: {
|
|
@@ -47,6 +52,7 @@ export declare const proof: {
|
|
|
47
52
|
};
|
|
48
53
|
u8ListToVec: () => () => void;
|
|
49
54
|
tryListToVecOverflow: () => void;
|
|
55
|
+
tryListToVecUnbounded: () => void;
|
|
50
56
|
listToVecOverflow: {
|
|
51
57
|
throw: () => void;
|
|
52
58
|
};
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
3
|
+
* @import { Vec, BitOrder } from './types.ts'
|
|
4
|
+
* @import { List } from '../list/types.ts'
|
|
5
|
+
*/
|
|
6
|
+
|
|
1
7
|
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
2
8
|
import { mask } from '../bigint/module.f.mjs'
|
|
3
|
-
/** @import { Sign } from '../function/compare/types.ts' */
|
|
4
9
|
import { asBase, asNominal } from '../nominal/module.f.mjs'
|
|
5
|
-
/** @import { Vec, BitOrder } from './types.ts' */
|
|
6
10
|
import { length, empty, uint, vec, lsb, msb, repeat, vec8, maxLength, u8ListToVec, tryU8ListToVec, u8List, chunkList, fromSentinel } from './module.f.mjs'
|
|
7
|
-
/** @import { List } from '../list/types.ts' */
|
|
8
11
|
import { repeat as listRepeat, toArray } from '../list/module.f.mjs'
|
|
9
12
|
|
|
10
13
|
/** @type {(a: bigint) => Vec} */
|
|
@@ -190,9 +193,9 @@ export const proof = {
|
|
|
190
193
|
},
|
|
191
194
|
removeBack: () => {
|
|
192
195
|
const v = vec(17n)(0x12345n)
|
|
193
|
-
assertEq(v, unsafeVec(0x12345n), (
|
|
196
|
+
assertEq(v, unsafeVec(0x12345n), (asBase(v)).toString(16))
|
|
194
197
|
const r = lsb.removeFront(9n)(v)
|
|
195
|
-
assertEq(r, unsafeVec(0x91n), (
|
|
198
|
+
assertEq(r, unsafeVec(0x91n), (asBase(r)).toString(16))
|
|
196
199
|
},
|
|
197
200
|
uint: [
|
|
198
201
|
// 0
|
|
@@ -421,6 +424,29 @@ export const proof = {
|
|
|
421
424
|
const list = [vec(maxLength)(1n), vec(1n)(1n)]
|
|
422
425
|
assertEq(lsb.tryListToVec(list), null)
|
|
423
426
|
assertEq(msb.tryListToVec(list), null)
|
|
427
|
+
// Overflow is an absorbing element, so it survives every later
|
|
428
|
+
// combination: here the failed pair ends up on the left of the last
|
|
429
|
+
// one, and on the right in the two-element case above.
|
|
430
|
+
/** @type {List<Vec>} */
|
|
431
|
+
const longer = [vec(maxLength)(1n), vec(1n)(1n), vec(1n)(1n)]
|
|
432
|
+
assertEq(lsb.tryListToVec(longer), null)
|
|
433
|
+
assertEq(msb.tryListToVec(longer), null)
|
|
434
|
+
},
|
|
435
|
+
tryListToVecUnbounded: () => {
|
|
436
|
+
// `List` includes `Thunk`, so an unbounded lazy list is a legal input —
|
|
437
|
+
// and at 128 KiB, `maxLength` is an ordinary amount for a stream to
|
|
438
|
+
// exceed. Overflow being absorbing is what lets the fold answer instead
|
|
439
|
+
// of reading forever: each element here is half of `maxLength`, so the
|
|
440
|
+
// total crosses the cap at the third and the merge that sees it happens
|
|
441
|
+
// at the fourth. The rest of the list asserts it is never read.
|
|
442
|
+
const half = vec(maxLength / 2n)(1n)
|
|
443
|
+
/** @type {(n: number) => List<Vec>} */
|
|
444
|
+
const from = n => () => {
|
|
445
|
+
assert(n <= 8)
|
|
446
|
+
return { first: half, tail: from(n + 1) }
|
|
447
|
+
}
|
|
448
|
+
assertEq(lsb.tryListToVec(from(1)), null)
|
|
449
|
+
assertEq(msb.tryListToVec(from(1)), null)
|
|
424
450
|
},
|
|
425
451
|
listToVecOverflow: {
|
|
426
452
|
// Same oversized input, but through the throwing `listToVec` wrapper.
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
* Lookup operations for persistent B-tree structures.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { TNode } from '../types/types.ts'
|
|
7
|
+
* @import { Compare } from '../../function/compare/types.ts'
|
|
8
|
+
* @import { KeyOf } from '../../array/types.ts'
|
|
9
|
+
* @import { First, Path, PathItem, Result } from './types.ts'
|
|
5
10
|
*/
|
|
6
|
-
/** @import { TNode } from '../types/types.ts' */
|
|
7
11
|
import type { TNode } from '../types/types.ts';
|
|
8
12
|
import type { Compare } from '../../function/compare/types.ts';
|
|
9
13
|
import type { First, Result } from './types.ts';
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Lookup operations for persistent B-tree structures.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { TNode } from '../types/types.ts'
|
|
7
|
+
* @import { Compare } from '../../function/compare/types.ts'
|
|
8
|
+
* @import { KeyOf } from '../../array/types.ts'
|
|
9
|
+
* @import { First, Path, PathItem, Result } from './types.ts'
|
|
5
10
|
*/
|
|
6
|
-
/** @import { TNode } from '../types/types.ts' */
|
|
7
11
|
|
|
8
12
|
import { index3, index5 } from '../../function/compare/module.f.mjs'
|
|
9
|
-
/** @import { Compare } from '../../function/compare/types.ts' */
|
|
10
|
-
|
|
11
|
-
/** @import { KeyOf } from '../../array/types.ts' */
|
|
12
|
-
/** @import { First, Path, PathItem, Result } from './types.ts' */
|
|
13
13
|
|
|
14
14
|
/** @type {<T>(item: PathItem<T>) => TNode<T>} */
|
|
15
15
|
const child = item => {
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../../media/json/types.ts'
|
|
3
|
+
* @import { Result } from './types.ts'
|
|
4
|
+
* @import { TNode } from '../types/types.ts'
|
|
5
|
+
*/
|
|
2
6
|
declare const test: () => void;
|
|
3
7
|
export declare const proof: typeof test;
|
|
4
8
|
export {};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../../media/json/types.ts'
|
|
3
|
+
* @import { Result } from './types.ts'
|
|
4
|
+
* @import { TNode } from '../types/types.ts'
|
|
5
|
+
*/
|
|
2
6
|
|
|
3
|
-
/** @import { Result } from './types.ts' */
|
|
4
7
|
import { find as btreeFind } from './module.f.mjs'
|
|
5
8
|
import { map, toArray } from '../../list/module.f.mjs'
|
|
6
9
|
import { stringify } from '../../../media/json/module.f.mjs'
|
|
7
10
|
import { sort } from '../../object/module.f.mjs'
|
|
8
|
-
/** @import { TNode } from '../types/types.ts' */
|
|
9
11
|
import { cmp } from '../../string/module.f.mjs'
|
|
10
12
|
import { set as setSet } from '../set/module.f.mjs'
|
|
11
13
|
import { assertEq } from '../../../asserts/module.f.mjs'
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
* Core persistent B-tree construction and traversal helpers.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { List, Thunk } from '../list/types.ts'
|
|
7
|
+
* @import { TNode, Tree } from './types/types.ts'
|
|
5
8
|
*/
|
|
6
9
|
import type { List } from '../list/types.ts';
|
|
7
10
|
import type { Tree } from './types/types.ts';
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* Core persistent B-tree construction and traversal helpers.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { List, Thunk } from '../list/types.ts'
|
|
7
|
+
* @import { TNode, Tree } from './types/types.ts'
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
10
|
import { flat } from '../list/module.f.mjs'
|
|
8
|
-
/** @import { List, Thunk } from '../list/types.ts' */
|
|
9
11
|
import { map } from '../nullable/module.f.mjs'
|
|
10
|
-
/** @import { TNode, Tree } from './types/types.ts' */
|
|
11
12
|
|
|
12
13
|
/** @type {<T>(node: TNode<T>) => Thunk<T>} */
|
|
13
14
|
const nodeValues
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
* @import { TNode } from './types/types.ts'
|
|
4
|
+
* @import { List, Result } from '../list/types.ts'
|
|
5
|
+
*/
|
|
2
6
|
declare const valueTest1: () => void;
|
|
3
7
|
declare const valuesTest2: () => void;
|
|
4
8
|
declare const findTrue: () => void;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
* @import { TNode } from './types/types.ts'
|
|
4
|
+
* @import { List, Result } from '../list/types.ts'
|
|
5
|
+
*/
|
|
2
6
|
|
|
3
|
-
/** @import { TNode } from './types/types.ts' */
|
|
4
7
|
import { values } from './module.f.mjs'
|
|
5
8
|
import { stringify as jsonStringify } from '../../media/json/module.f.mjs'
|
|
6
9
|
import { sort } from '../object/module.f.mjs'
|
|
7
10
|
import { cmp } from '../string/module.f.mjs'
|
|
8
|
-
/** @import { List, Result } from '../list/types.ts' */
|
|
9
11
|
import { next, toArray } from '../list/module.f.mjs'
|
|
10
12
|
import { set as setSet } from './set/module.f.mjs'
|
|
11
13
|
import { value, find as findFind } from './find/module.f.mjs'
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removal operations for persistent B-tree structures.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts'
|
|
7
|
+
* @import { Compare } from '../../function/compare/types.ts'
|
|
8
|
+
* @import { Path, PathItem } from '../find/types.ts'
|
|
9
|
+
* @import { Tuple } from '../../array/types.ts'
|
|
10
|
+
*/
|
|
1
11
|
import type { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts';
|
|
2
12
|
import type { Compare } from '../../function/compare/types.ts';
|
|
3
13
|
import type { Path } from '../find/types.ts';
|
|
@@ -16,6 +26,7 @@ export declare const proof: {
|
|
|
16
26
|
throw: {
|
|
17
27
|
reduceValue0DefaultBranch: () => void;
|
|
18
28
|
reduceValue2DefaultBranch: () => void;
|
|
29
|
+
initValue0DefaultBranch: () => void;
|
|
19
30
|
initValue1DefaultBranch: () => void;
|
|
20
31
|
};
|
|
21
32
|
};
|
|
@@ -2,19 +2,16 @@
|
|
|
2
2
|
* Removal operations for persistent B-tree structures.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts'
|
|
7
|
+
* @import { Compare } from '../../function/compare/types.ts'
|
|
8
|
+
* @import { Path, PathItem } from '../find/types.ts'
|
|
9
|
+
* @import { Tuple } from '../../array/types.ts'
|
|
5
10
|
*/
|
|
6
|
-
import { collapseRoot } from '../types/module.f.mjs'
|
|
7
|
-
/** @import { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts' */
|
|
8
|
-
|
|
9
|
-
/** @import { Compare } from '../../function/compare/types.ts' */
|
|
10
11
|
|
|
12
|
+
import { collapseRoot } from '../types/module.f.mjs'
|
|
11
13
|
import { find } from '../find/module.f.mjs'
|
|
12
|
-
/** @import { Path, PathItem } from '../find/types.ts' */
|
|
13
|
-
|
|
14
14
|
import { fold, concat, next } from '../../list/module.f.mjs'
|
|
15
|
-
|
|
16
|
-
/** @import { Tuple } from '../../array/types.ts' */
|
|
17
|
-
|
|
18
15
|
import { map } from '../../nullable/module.f.mjs'
|
|
19
16
|
|
|
20
17
|
/**
|
|
@@ -133,7 +130,7 @@ export const nodeRemove = c => node => {
|
|
|
133
130
|
const { first, tail } = find(c)(node)
|
|
134
131
|
/** @type {(n: TNode<T>) => (f: (v: T) => PathItem<T>) => _RemovePath<T>} */
|
|
135
132
|
const branch = n => f => {
|
|
136
|
-
const [v, p] = path(
|
|
133
|
+
const [v, p] = path(null)(n)
|
|
137
134
|
return { first: p.first, tail: concat(p.tail)({ first: f(v), tail }) }
|
|
138
135
|
}
|
|
139
136
|
const [i, n] = first
|
|
@@ -180,6 +177,9 @@ export const proof = {
|
|
|
180
177
|
reduceValue2DefaultBranch: () => {
|
|
181
178
|
reduceValue2([['leaf']])([['x'], 's', ['y']])
|
|
182
179
|
},
|
|
180
|
+
initValue0DefaultBranch: () => {
|
|
181
|
+
initValue0(null)([['x'], 's', [['a'], 'b', ['c']]])
|
|
182
|
+
},
|
|
183
183
|
initValue1DefaultBranch: () => {
|
|
184
184
|
initValue1(null)([[['a'], 'b', ['c']], 'd', ['e']])
|
|
185
185
|
},
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { TNode } from '../types/types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
1
5
|
import { nodeRemove } from './module.f.mjs'
|
|
2
|
-
/** @import { TNode } from '../types/types.ts' */
|
|
3
6
|
import { set as setSet } from '../set/module.f.mjs'
|
|
4
7
|
import { cmp } from '../../string/module.f.mjs'
|
|
5
8
|
import { stringify } from '../../../media/json/module.f.mjs'
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Insertion and update operations for persistent B-tree structures.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Branch1, Branch3, Branch5, Branch7, TNode, Tree } from '../types/types.ts'
|
|
7
|
+
* @import { First, PathItem, Result } from '../find/types.ts'
|
|
8
|
+
* @import { Compare } from '../../function/compare/types.ts'
|
|
9
|
+
*/
|
|
1
10
|
import type { Branch1, Branch3, TNode, Tree } from '../types/types.ts';
|
|
2
11
|
import type { Compare } from '../../function/compare/types.ts';
|
|
3
12
|
export type _Branch1To3<T> = Branch1<T> | Branch3<T>;
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
* Insertion and update operations for persistent B-tree structures.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Branch1, Branch3, Branch5, Branch7, TNode, Tree } from '../types/types.ts'
|
|
7
|
+
* @import { First, PathItem, Result } from '../find/types.ts'
|
|
8
|
+
* @import { Compare } from '../../function/compare/types.ts'
|
|
5
9
|
*/
|
|
6
|
-
import { collapseRoot } from '../types/module.f.mjs'
|
|
7
|
-
/** @import { Branch1, Branch3, Branch5, Branch7, TNode, Tree } from '../types/types.ts' */
|
|
8
10
|
|
|
11
|
+
import { collapseRoot } from '../types/module.f.mjs'
|
|
9
12
|
import { find } from '../find/module.f.mjs'
|
|
10
|
-
/** @import { First, PathItem, Result } from '../find/types.ts' */
|
|
11
|
-
|
|
12
|
-
/** @import { Compare } from '../../function/compare/types.ts' */
|
|
13
|
-
|
|
14
13
|
import { fold } from '../../list/module.f.mjs'
|
|
14
|
+
import { assert } from '../../../asserts/module.f.mjs'
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* @template T
|
|
@@ -81,30 +81,27 @@ const nodeSet = c => g => node => {
|
|
|
81
81
|
// insert
|
|
82
82
|
const value = g(null)
|
|
83
83
|
// TODO: remove after TSGO fix the regression.
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
const xL = x.length
|
|
85
|
+
// See https://github.com/microsoft/typescript-go/issues/4613
|
|
86
|
+
assert(xL === 1 || xL === 2)
|
|
87
|
+
switch (xL) {
|
|
86
88
|
case 1: { return [[x[0], value]] }
|
|
87
89
|
case 2: { return [[x[0]], value, [x[1]]] }
|
|
88
90
|
}
|
|
89
|
-
// TODO: remove after TSGO fix the regression.
|
|
90
|
-
// See https://github.com/microsoft/typescript-go/issues/4613
|
|
91
|
-
throw 'unreachable'
|
|
92
91
|
}
|
|
93
92
|
case 3: {
|
|
94
93
|
// replace
|
|
95
94
|
// TODO: remove after TSGO fix the regression.
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
const xL = x.length
|
|
96
|
+
// See https://github.com/microsoft/typescript-go/issues/4613
|
|
97
|
+
assert(xL === 2 || xL === 5)
|
|
98
|
+
switch (xL) {
|
|
98
99
|
case 2: { return [[x[0], g(x[1])]] }
|
|
99
100
|
case 5: { return [[x[0], x[1], x[2], g(x[3]), x[4]]] }
|
|
100
101
|
}
|
|
101
|
-
// TODO: remove after TSGO fix the regression.
|
|
102
|
-
throw 'unreachable'
|
|
103
102
|
}
|
|
104
103
|
case 4: {
|
|
105
104
|
// insert
|
|
106
|
-
// TODO: remove after TSGO fix the regression.
|
|
107
|
-
// const _xl: 2 = x.length
|
|
108
105
|
const [v0, v1] = x
|
|
109
106
|
return [[v0], v1, [g(null)]]
|
|
110
107
|
}
|