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,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type transformers for RTTI schemas.
|
|
3
|
+
*
|
|
4
|
+
* Each `*Ts` type maps a schema (or schema fragment) to its corresponding TypeScript type.
|
|
5
|
+
* The main entry point is `Ts<T>`.
|
|
6
|
+
*
|
|
7
|
+
* The runtime `toTs` function (`printer` in `./module.f.mjs`) mirrors `Ts<T>` at value
|
|
8
|
+
* level, returning a TypeScript type expression string for a given RTTI schema.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
1
12
|
import type { Tag0, Tag1, Struct, Tuple, Type } from '../types.ts';
|
|
2
13
|
import type { phantomKey } from '../../phantom/types.ts';
|
|
3
14
|
import type { StringMap } from '../../object/types.ts';
|
|
@@ -40,7 +51,20 @@ export type ArrayTs<T extends Type> = ReadonlyArray<Ts<T>>;
|
|
|
40
51
|
export type RecordTs<T extends Type> = {
|
|
41
52
|
readonly [K in string]?: Ts<T>;
|
|
42
53
|
};
|
|
43
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Maps a tuple schema to a readonly tuple of resolved types.
|
|
56
|
+
*
|
|
57
|
+
* **The commented-out line is the accurate mapping.** A tuple schema is *open*
|
|
58
|
+
* — a longer array is a member of the set it describes (see "Structs and
|
|
59
|
+
* tuples are open" in `../README.md`) — and the open form below says so. It is
|
|
60
|
+
* commented out because TypeScript could not handle it, so this renders the
|
|
61
|
+
* closed approximation instead.
|
|
62
|
+
*
|
|
63
|
+
* That is a limitation of this renderer, **not** a statement about the value
|
|
64
|
+
* model. Do not cite the exact mapping as evidence that tuples are closed and
|
|
65
|
+
* add a length check to `../parse/module.f.mjs`; that inference is what
|
|
66
|
+
* produced #1622.
|
|
67
|
+
*/
|
|
44
68
|
export type TupleTs<T extends Tuple> = {
|
|
45
69
|
readonly [K in keyof T]: Ts<T[K]>;
|
|
46
70
|
};
|
|
@@ -1,3 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-level API for runtime type information (RTTI) — a type-safe schema
|
|
3
|
+
* system for describing and converting TypeScript types.
|
|
4
|
+
*
|
|
5
|
+
* ## Core concepts
|
|
6
|
+
*
|
|
7
|
+
* A `Type` is either a `Const` (used directly as its own schema) or a `Thunk`
|
|
8
|
+
* (a zero-argument function returning an `Info` descriptor). Thunks are the
|
|
9
|
+
* primary building block: they enable lazy evaluation and recursive type definitions.
|
|
10
|
+
*
|
|
11
|
+
* ```
|
|
12
|
+
* Type = Const | Thunk
|
|
13
|
+
* Thunk = () => Info
|
|
14
|
+
* Info = ['const', Const] | Info0<Tag0> | Info1<Tag1, Type>
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* ## Nullary schemas (no type parameter)
|
|
18
|
+
*
|
|
19
|
+
* `boolean`, `number`, `string`, `bigint`, `unknown` are pre-built `Thunk` values
|
|
20
|
+
* that describe primitive types. Each is a `_Type0<Tag0>` — a thunk returning a
|
|
21
|
+
* single-element tag tuple.
|
|
22
|
+
*
|
|
23
|
+
* ## Unary schemas (one type parameter)
|
|
24
|
+
*
|
|
25
|
+
* `array(t)` and `record(t)` construct `Thunk` values parameterized by an inner
|
|
26
|
+
* `Type`. They return `Type1` thunks wrapping an `Info1` tuple.
|
|
27
|
+
*
|
|
28
|
+
* ## Const schemas
|
|
29
|
+
*
|
|
30
|
+
* Any `Primitive`, `Struct` (plain object), or `Tuple` (readonly array) can be
|
|
31
|
+
* used directly as a schema — it describes exactly the shape of that value.
|
|
32
|
+
* Inside a recursive `Thunk`-based definition, wrap consts with `() => ['const', c]`
|
|
33
|
+
* to keep the schema uniform.
|
|
34
|
+
*
|
|
35
|
+
* ## Converting to TypeScript types
|
|
36
|
+
*
|
|
37
|
+
* See `./ts/module.f.ts` for `Ts<T>` and the `*Ts` transformer types.
|
|
38
|
+
*
|
|
39
|
+
* @module
|
|
40
|
+
*/
|
|
1
41
|
import type { StringMap } from '../object/types.ts';
|
|
2
42
|
import type { tag0List } from './module.f.mjs';
|
|
3
43
|
/** A constant schema: a primitive literal, a struct object, or a tuple. */
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
* Sorted immutable list helpers and merge operations.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Cmp } from '../function/compare/types.ts'
|
|
7
|
+
* @import { List } from '../list/types.ts'
|
|
8
|
+
* @import { ReduceOp, SortedList, _MergeReduce } from './types.ts'
|
|
5
9
|
*/
|
|
6
10
|
import type { Cmp } from '../function/compare/types.ts';
|
|
7
11
|
import type { List } from '../list/types.ts';
|
|
8
12
|
import type { ReduceOp, SortedList, _MergeReduce } from './types.ts';
|
|
9
13
|
export type _SortedArray<T> = readonly T[];
|
|
10
|
-
/** @import { ReduceOp, SortedList, TailReduce, _MergeReduce } from './types.ts' */
|
|
11
14
|
/** @template T @typedef {readonly T[]} _SortedArray */
|
|
12
15
|
/**
|
|
13
16
|
* Two-way sorted-list merge.
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* Sorted immutable list helpers and merge operations.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Cmp } from '../function/compare/types.ts'
|
|
7
|
+
* @import { List } from '../list/types.ts'
|
|
8
|
+
* @import { ReduceOp, SortedList, _MergeReduce } from './types.ts'
|
|
5
9
|
*/
|
|
6
10
|
|
|
7
11
|
import { bsearch } from '../function/compare/module.f.mjs'
|
|
8
|
-
/** @import { Cmp } from '../function/compare/types.ts' */
|
|
9
12
|
import { next } from '../list/module.f.mjs'
|
|
10
|
-
/** @import { List } from '../list/types.ts' */
|
|
11
13
|
import { identity } from '../function/module.f.mjs'
|
|
12
|
-
/** @import { ReduceOp, SortedList, TailReduce, _MergeReduce } from './types.ts' */
|
|
13
14
|
|
|
14
15
|
/** @template T @typedef {readonly T[]} _SortedArray */
|
|
15
16
|
|
|
@@ -53,11 +54,7 @@ export const merge =
|
|
|
53
54
|
* @param {Cmp<T>} cmp
|
|
54
55
|
* @returns {(a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>}
|
|
55
56
|
*/
|
|
56
|
-
cmp => {
|
|
57
|
-
/** @type {TailReduce<T, null>} */
|
|
58
|
-
const tailReduce = mergeTail
|
|
59
|
-
return genericMerge({ reduceOp: cmpReduce(cmp), tailReduce })(null)
|
|
60
|
-
}
|
|
57
|
+
cmp => genericMerge({ reduceOp: cmpReduce(cmp), tailReduce: keepTail })(null)
|
|
61
58
|
|
|
62
59
|
const cmpReduce =
|
|
63
60
|
/**
|
|
@@ -70,10 +67,22 @@ const cmpReduce =
|
|
|
70
67
|
return [sign === 1 ? b : a, sign, null]
|
|
71
68
|
}
|
|
72
69
|
|
|
73
|
-
/**
|
|
74
|
-
|
|
70
|
+
/**
|
|
71
|
+
* The two tail policies `genericMerge` takes, named for what they do with the
|
|
72
|
+
* list that has not been exhausted yet: `merge` keeps it, because everything
|
|
73
|
+
* still there belongs in the union, and `intersect` drops it, because with one
|
|
74
|
+
* side exhausted nothing remaining can be matched.
|
|
75
|
+
*
|
|
76
|
+
* Both are left to inference deliberately. An explicit
|
|
77
|
+
* `() => <T>(tail: List<T>) => List<T>` compiles here but introduces its own
|
|
78
|
+
* type parameter, which `genericMerge` then collects as an inference candidate
|
|
79
|
+
* alongside `reduceOp`'s; the best common supertype of the two is `unknown`, so
|
|
80
|
+
* `T` widens and both call sites fail to match their declared return type. With
|
|
81
|
+
* no annotation there is no second candidate and `reduceOp` alone fixes `T`.
|
|
82
|
+
*/
|
|
83
|
+
const keepTail = () => identity
|
|
75
84
|
|
|
76
|
-
const
|
|
85
|
+
const dropTail = () => () => null
|
|
77
86
|
|
|
78
87
|
const intersectReduce =
|
|
79
88
|
/**
|
|
@@ -92,7 +101,7 @@ export const intersect =
|
|
|
92
101
|
* @param {Cmp<T>} cmp
|
|
93
102
|
* @returns {(a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>}
|
|
94
103
|
*/
|
|
95
|
-
cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce })(null)
|
|
104
|
+
cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce: dropTail })(null)
|
|
96
105
|
|
|
97
106
|
export const find =
|
|
98
107
|
/**
|
|
@@ -1,6 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A sorted set, implemented as a sorted array.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*
|
|
6
|
+
* @note
|
|
7
|
+
*
|
|
8
|
+
* All input arrays must be pre-sorted according to the provided comparison function (`Cmp<T>`).
|
|
9
|
+
* The correctness of these functions depend on this requirement.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* import { union, intersect, has } from './module.f.mjs'
|
|
15
|
+
*
|
|
16
|
+
* const cmp = (a: number) => (b: number) => a < b ? -1 : a > b ? 1 : 0
|
|
17
|
+
*
|
|
18
|
+
* const setA = [1, 3, 5]
|
|
19
|
+
* const setB = [3, 4, 5]
|
|
20
|
+
*
|
|
21
|
+
* const unionSet = union(cmp)(setA)(setB) // [1, 3, 4, 5]
|
|
22
|
+
*
|
|
23
|
+
* const intersectionSet = intersect(cmp)(setA)(setB) // [3, 5]
|
|
24
|
+
*
|
|
25
|
+
* has(cmp)(3)(setA) // true
|
|
26
|
+
* has(cmp)(2)(setA) // false
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @import { Cmp } from '../function/compare/types.ts'
|
|
30
|
+
* @import { SortedSet } from './types.ts'
|
|
31
|
+
*/
|
|
1
32
|
import type { Cmp } from '../function/compare/types.ts';
|
|
2
33
|
import type { SortedSet } from './types.ts';
|
|
3
|
-
/** @import { SortedSet } from './types.ts' */
|
|
4
34
|
export declare const union: <T>(
|
|
5
35
|
/**
|
|
6
36
|
* @template T
|
|
@@ -22,3 +52,21 @@ export declare const has: <T>(
|
|
|
22
52
|
* @returns {(value: T) => (set: SortedSet<T>) => boolean}
|
|
23
53
|
*/
|
|
24
54
|
cmp: Cmp<T>) => (value: T) => (set: SortedSet<T>) => boolean;
|
|
55
|
+
/**
|
|
56
|
+
* A canonical key for a set of strings: equal sets always produce the same
|
|
57
|
+
* key, and unequal sets never produce the same one. Useful wherever a set has
|
|
58
|
+
* to index a `StringMap` — the subset construction in `fjs/fsm`, say.
|
|
59
|
+
*
|
|
60
|
+
* Each element is written length-prefixed (`3:abc`) and the parts are
|
|
61
|
+
* concatenated. Joining on a separator would **not** be canonical: elements
|
|
62
|
+
* are arbitrary strings, so `['a,b']` and `['a', 'b']` would both produce
|
|
63
|
+
* `a,b` and two different sets would share one key. A length prefix is
|
|
64
|
+
* readable back — take the digits, the `:`, then exactly that many code
|
|
65
|
+
* units — so the encoding is injective without an escaping table.
|
|
66
|
+
*
|
|
67
|
+
* The key is canonical for the *set* only because `SortedSet` is sorted:
|
|
68
|
+
* element order is fixed by the set's own invariant, not by this function.
|
|
69
|
+
*
|
|
70
|
+
* @type {(set: SortedSet<string>) => string}
|
|
71
|
+
*/
|
|
72
|
+
export declare const toKey: (set: SortedSet<string>) => string;
|
|
@@ -25,11 +25,13 @@
|
|
|
25
25
|
* has(cmp)(3)(setA) // true
|
|
26
26
|
* has(cmp)(2)(setA) // false
|
|
27
27
|
* ```
|
|
28
|
+
*
|
|
29
|
+
* @import { Cmp } from '../function/compare/types.ts'
|
|
30
|
+
* @import { SortedSet } from './types.ts'
|
|
28
31
|
*/
|
|
29
|
-
|
|
32
|
+
|
|
30
33
|
import { toArray } from "../list/module.f.mjs"
|
|
31
34
|
import { merge, intersect as listIntersect, find } from '../sorted_list/module.f.mjs'
|
|
32
|
-
/** @import { SortedSet } from './types.ts' */
|
|
33
35
|
|
|
34
36
|
export const union =
|
|
35
37
|
/**
|
|
@@ -54,3 +56,25 @@ export const has =
|
|
|
54
56
|
* @returns {(value: T) => (set: SortedSet<T>) => boolean}
|
|
55
57
|
*/
|
|
56
58
|
cmp => value => set => find(cmp)(value)(set) === value
|
|
59
|
+
|
|
60
|
+
/** @type {(s: string) => string} */
|
|
61
|
+
const lengthPrefixed = s => `${s.length}:${s}`
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* A canonical key for a set of strings: equal sets always produce the same
|
|
65
|
+
* key, and unequal sets never produce the same one. Useful wherever a set has
|
|
66
|
+
* to index a `StringMap` — the subset construction in `fjs/fsm`, say.
|
|
67
|
+
*
|
|
68
|
+
* Each element is written length-prefixed (`3:abc`) and the parts are
|
|
69
|
+
* concatenated. Joining on a separator would **not** be canonical: elements
|
|
70
|
+
* are arbitrary strings, so `['a,b']` and `['a', 'b']` would both produce
|
|
71
|
+
* `a,b` and two different sets would share one key. A length prefix is
|
|
72
|
+
* readable back — take the digits, the `:`, then exactly that many code
|
|
73
|
+
* units — so the encoding is injective without an escaping table.
|
|
74
|
+
*
|
|
75
|
+
* The key is canonical for the *set* only because `SortedSet` is sorted:
|
|
76
|
+
* element order is fixed by the set's own invariant, not by this function.
|
|
77
|
+
*
|
|
78
|
+
* @type {(set: SortedSet<string>) => string}
|
|
79
|
+
*/
|
|
80
|
+
export const toKey = set => set.map(lengthPrefixed).join('')
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
*/
|
|
2
4
|
|
|
3
|
-
import { has, intersect, union } from './module.f.mjs'
|
|
5
|
+
import { has, intersect, toKey, union } from './module.f.mjs'
|
|
4
6
|
import { stringify } from '../../media/json/module.f.mjs'
|
|
5
7
|
import { sort } from '../object/module.f.mjs'
|
|
6
8
|
import { toArray, countdown, length } from '../list/module.f.mjs'
|
|
@@ -14,6 +16,21 @@ const str = a => stringify(sort)(a)
|
|
|
14
16
|
const reverseCmp = flip(cmp)
|
|
15
17
|
|
|
16
18
|
export const proof = {
|
|
19
|
+
toKey: [
|
|
20
|
+
() => assertEq(toKey([]), ''),
|
|
21
|
+
() => assertEq(toKey(['']), '0:'),
|
|
22
|
+
() => assertEq(toKey(['a']), '1:a'),
|
|
23
|
+
() => assertEq(toKey(['a', 'b']), '1:a1:b'),
|
|
24
|
+
// The reason the key is length-prefixed rather than separator-joined:
|
|
25
|
+
// these two sets are different and must not share a key, but any
|
|
26
|
+
// fixed separator that can occur in an element collapses them.
|
|
27
|
+
() => assert(toKey(['a,b']) !== toKey(['a', 'b']), 'comma'),
|
|
28
|
+
() => assert(toKey(['a:b']) !== toKey(['a', 'b']), 'colon'),
|
|
29
|
+
() => assert(toKey(['a\nb']) !== toKey(['a', 'b']), 'newline'),
|
|
30
|
+
// A prefix of one element must not be confused with a shorter one.
|
|
31
|
+
() => assert(toKey(['ab']) !== toKey(['a']), 'prefix'),
|
|
32
|
+
() => assert(toKey(['']) !== toKey([]), 'empty element vs empty set'),
|
|
33
|
+
],
|
|
17
34
|
example: () => {
|
|
18
35
|
const cmp = (/** @type {number} */ a) => (/** @type {number} */ b) => a < b ? -1 : a > b ? 1 : 0
|
|
19
36
|
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
* repeat('abc')(3) // 'abcabcabc'
|
|
15
15
|
* cmp('apple')('banana') // -1
|
|
16
16
|
* ```
|
|
17
|
+
*
|
|
18
|
+
* @import { List } from '../list/types.ts'
|
|
19
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
20
|
+
* @import { Reduce } from '../function/operator/types.ts'
|
|
17
21
|
*/
|
|
18
22
|
import type { List } from '../list/types.ts';
|
|
19
23
|
import type { Sign } from '../function/compare/types.ts';
|
|
@@ -14,14 +14,15 @@
|
|
|
14
14
|
* repeat('abc')(3) // 'abcabcabc'
|
|
15
15
|
* cmp('apple')('banana') // -1
|
|
16
16
|
* ```
|
|
17
|
+
*
|
|
18
|
+
* @import { List } from '../list/types.ts'
|
|
19
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
20
|
+
* @import { Reduce } from '../function/operator/types.ts'
|
|
17
21
|
*/
|
|
18
22
|
|
|
19
|
-
/** @import { List } from '../list/types.ts' */
|
|
20
23
|
import { reduce as listReduce, repeat as listRepeat } from '../list/module.f.mjs'
|
|
21
24
|
import { compose } from '../function/module.f.mjs'
|
|
22
|
-
/** @import { Sign } from '../function/compare/types.ts' */
|
|
23
25
|
import { cmp as uCmp } from '../function/compare/module.f.mjs'
|
|
24
|
-
/** @import { Reduce } from '../function/operator/types.ts' */
|
|
25
26
|
import { join as joinOp } from '../function/operator/module.f.mjs'
|
|
26
27
|
import { fold } from '../../common/monoid/module.f.mjs'
|
|
27
28
|
|
|
@@ -19,10 +19,12 @@
|
|
|
19
19
|
* mySet = remove('banana')(mySet);
|
|
20
20
|
* if (contains('banana')(mySet)) { throw '4' }
|
|
21
21
|
* ```
|
|
22
|
+
*
|
|
23
|
+
* @import { List } from '../list/types.ts'
|
|
24
|
+
* @import { StringSet } from './types.ts'
|
|
22
25
|
*/
|
|
23
26
|
import type { List } from '../list/types.ts';
|
|
24
27
|
import type { StringSet } from './types.ts';
|
|
25
|
-
/** @import { StringSet } from './types.ts' */
|
|
26
28
|
/** @type {(s: StringSet) => List<string>} */
|
|
27
29
|
export declare const values: (s: StringSet) => List<string>;
|
|
28
30
|
/** @type {null} */
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
* mySet = remove('banana')(mySet);
|
|
20
20
|
* if (contains('banana')(mySet)) { throw '4' }
|
|
21
21
|
* ```
|
|
22
|
+
*
|
|
23
|
+
* @import { List } from '../list/types.ts'
|
|
24
|
+
* @import { StringSet } from './types.ts'
|
|
22
25
|
*/
|
|
23
26
|
|
|
24
27
|
import { empty as btEmpty, values as btValues } from '../btree/module.f.mjs'
|
|
@@ -26,10 +29,8 @@ import { find, isFound } from '../btree/find/module.f.mjs'
|
|
|
26
29
|
import { remove as btreeRemove } from '../btree/remove/module.f.mjs'
|
|
27
30
|
import { set as btreeSet } from '../btree/set/module.f.mjs'
|
|
28
31
|
import { cmp } from "../string/module.f.mjs"
|
|
29
|
-
/** @import { List } from '../list/types.ts' */
|
|
30
32
|
import { fold } from '../list/module.f.mjs'
|
|
31
33
|
import { compose } from '../function/module.f.mjs'
|
|
32
|
-
/** @import { StringSet } from './types.ts' */
|
|
33
34
|
|
|
34
35
|
/** @type {(s: StringSet) => List<string>} */
|
|
35
36
|
export const values = btValues
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* primitive literals, and unions as TypeScript type expressions.
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
|
+
*
|
|
8
|
+
* @import { Printer } from './types.ts'
|
|
7
9
|
*/
|
|
8
10
|
|
|
9
|
-
/** @import { Printer } from './types.ts' */
|
|
10
|
-
|
|
11
11
|
/** @type {(open: string, close: string) => (i: readonly string[]) => string} */
|
|
12
12
|
const complex = (open, close) => i =>
|
|
13
13
|
`${open}${i.join(',')}${close}`
|
|
@@ -24,7 +24,7 @@ export const printer = (mut = undefined) => {
|
|
|
24
24
|
return {
|
|
25
25
|
tuple: (mut ? complex('[', ']') : complex('readonly[', ']')),
|
|
26
26
|
struct: fields =>
|
|
27
|
-
structX(fields.map(([k, v]) => `${ro}${JSON.stringify(k)}:${v}`)),
|
|
27
|
+
structX(fields.map(([k, v, opt]) => `${ro}${JSON.stringify(k)}${opt === true ? '?' : ''}:${v}`)),
|
|
28
28
|
array: type => `${ro}(${type})[]`,
|
|
29
29
|
// `[k:string]?:` is invalid TypeScript — optional keys on an infinite
|
|
30
30
|
// key set require mapped-type syntax.
|
|
@@ -10,6 +10,7 @@ export declare const unionSingle: () => void;
|
|
|
10
10
|
export declare const unionMulti: () => void;
|
|
11
11
|
export declare const printerReadonlyTuple: () => void;
|
|
12
12
|
export declare const printerReadonlyStruct: () => void;
|
|
13
|
+
export declare const printerOptionalField: () => void;
|
|
13
14
|
export declare const printerReadonlyArray: () => void;
|
|
14
15
|
export declare const printerReadonlyRecord: () => void;
|
|
15
16
|
export declare const printerMutableTuple: () => void;
|
package/fjs/types/ts/proof.f.mjs
CHANGED
|
@@ -64,6 +64,11 @@ export const printerReadonlyStruct = () => {
|
|
|
64
64
|
if (r !== '{readonly"x":number,readonly"y":string}') { throw r }
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
export const printerOptionalField = () => {
|
|
68
|
+
const r = ro.struct([['x', 'number', true], ['y', 'string']])
|
|
69
|
+
if (r !== '{readonly"x"?:number,readonly"y":string}') { throw r }
|
|
70
|
+
}
|
|
71
|
+
|
|
67
72
|
export const printerReadonlyArray = () => {
|
|
68
73
|
const r = ro.array('string')
|
|
69
74
|
assertEq(r, 'readonly(string)[]')
|
package/fjs/types/ts/types.d.ts
CHANGED
|
@@ -5,12 +5,17 @@
|
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
7
|
export type Equal<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? true : false;
|
|
8
|
+
/**
|
|
9
|
+
* A `struct` field: the key, its type expression, and — when the third
|
|
10
|
+
* element is `true` — an optional-key marker (`"key"?: type`).
|
|
11
|
+
*/
|
|
12
|
+
export type StructField = readonly [string, string, true?];
|
|
8
13
|
/**
|
|
9
14
|
* Functions for emitting TypeScript type expression strings.
|
|
10
15
|
*/
|
|
11
16
|
export type Printer = {
|
|
12
17
|
readonly tuple: (types: readonly string[]) => string;
|
|
13
|
-
readonly struct: (fields: readonly
|
|
18
|
+
readonly struct: (fields: readonly StructField[]) => string;
|
|
14
19
|
readonly array: (type: string) => string;
|
|
15
20
|
readonly record: (type: string) => string;
|
|
16
21
|
};
|
|
@@ -8,17 +8,28 @@
|
|
|
8
8
|
* (e.g. `fromVec`/`toVec` when reading or writing files).
|
|
9
9
|
*
|
|
10
10
|
* @module
|
|
11
|
+
*
|
|
12
|
+
* @import { Vec } from '../bit_vec/types.ts'
|
|
13
|
+
* @import { List } from '../list/types.ts'
|
|
11
14
|
*/
|
|
12
15
|
import type { Vec } from '../bit_vec/types.ts';
|
|
13
16
|
import type { List } from '../list/types.ts';
|
|
17
|
+
/**
|
|
18
|
+
* Concatenates a list of `Uint8Array` values into one MSB-first bit vector.
|
|
19
|
+
*
|
|
20
|
+
* Throws if the result would exceed `maxLength`. The bound is not precomputed:
|
|
21
|
+
* `tryU8ListToVec` attempts the real conversion and reports `null` when it does
|
|
22
|
+
* not fit (`DESIGN.md` §6).
|
|
23
|
+
*
|
|
24
|
+
* @type {(input: List<Uint8Array>) => Vec}
|
|
25
|
+
*/
|
|
26
|
+
export declare const listToVec: (input: List<Uint8Array>) => Vec;
|
|
14
27
|
/**
|
|
15
28
|
* Converts a Uint8Array into an MSB-first bit vector.
|
|
16
29
|
*
|
|
17
30
|
* @type {(input: Uint8Array) => Vec}
|
|
18
31
|
*/
|
|
19
32
|
export declare const toVec: (input: Uint8Array) => Vec;
|
|
20
|
-
/** @type {(input: List<Uint8Array>) => Vec} */
|
|
21
|
-
export declare const listToVec: (input: List<Uint8Array>) => Vec;
|
|
22
33
|
/**
|
|
23
34
|
* Converts an MSB-first bit vector into a Uint8Array.
|
|
24
35
|
*
|
|
@@ -8,36 +8,41 @@
|
|
|
8
8
|
* (e.g. `fromVec`/`toVec` when reading or writing files).
|
|
9
9
|
*
|
|
10
10
|
* @module
|
|
11
|
+
*
|
|
12
|
+
* @import { Vec } from '../bit_vec/types.ts'
|
|
13
|
+
* @import { List } from '../list/types.ts'
|
|
11
14
|
*/
|
|
12
15
|
|
|
13
|
-
import {
|
|
16
|
+
import { assertNotNullish } from '../../asserts/module.f.mjs'
|
|
14
17
|
import { utf8, utf8ToString } from '../../text/module.f.mjs'
|
|
15
|
-
import {
|
|
16
|
-
/** @import { Vec } from '../bit_vec/types.ts' */
|
|
18
|
+
import { msb, tryU8ListToVec, u8List } from '../bit_vec/module.f.mjs'
|
|
17
19
|
import { compose } from '../function/module.f.mjs'
|
|
18
20
|
import { flat, fromArrayLike, iterable, map } from '../list/module.f.mjs'
|
|
19
|
-
/** @import { List } from '../list/types.ts' */
|
|
20
21
|
|
|
21
|
-
const u8ListToVecMsb = u8ListToVec(msb)
|
|
22
22
|
const tryU8ListToVecMsb = tryU8ListToVec(msb)
|
|
23
23
|
const u8ListMsb = u8List(msb)
|
|
24
24
|
|
|
25
|
+
const m = map(fromArrayLike)
|
|
26
|
+
|
|
25
27
|
/**
|
|
26
|
-
*
|
|
28
|
+
* Concatenates a list of `Uint8Array` values into one MSB-first bit vector.
|
|
27
29
|
*
|
|
28
|
-
*
|
|
30
|
+
* Throws if the result would exceed `maxLength`. The bound is not precomputed:
|
|
31
|
+
* `tryU8ListToVec` attempts the real conversion and reports `null` when it does
|
|
32
|
+
* not fit (`DESIGN.md` §6).
|
|
33
|
+
*
|
|
34
|
+
* @type {(input: List<Uint8Array>) => Vec}
|
|
29
35
|
*/
|
|
30
|
-
export const toVec = input => {
|
|
31
|
-
assert(input.length <= maxLengthBytes, "the array is too big")
|
|
32
|
-
return u8ListToVecMsb(fromArrayLike(input))
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const m = map(fromArrayLike)
|
|
36
|
-
|
|
37
|
-
/** @type {(input: List<Uint8Array>) => Vec} */
|
|
38
36
|
export const listToVec = input =>
|
|
39
37
|
assertNotNullish(tryU8ListToVecMsb(flat(m(input))), "the array is too big")
|
|
40
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Converts a Uint8Array into an MSB-first bit vector.
|
|
41
|
+
*
|
|
42
|
+
* @type {(input: Uint8Array) => Vec}
|
|
43
|
+
*/
|
|
44
|
+
export const toVec = input => listToVec([input])
|
|
45
|
+
|
|
41
46
|
/**
|
|
42
47
|
* Converts an MSB-first bit vector into a Uint8Array.
|
|
43
48
|
*
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* Static website generation program for project landing content.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Write, WriteFile } from '../effects/node/types.ts'
|
|
7
|
+
* @import { Effect } from '../effects/types.ts'
|
|
5
8
|
*/
|
|
6
|
-
import type { WriteFile } from '../effects/node/types.ts';
|
|
9
|
+
import type { Write, WriteFile } from '../effects/node/types.ts';
|
|
7
10
|
import type { Effect } from '../effects/types.ts';
|
|
8
|
-
export declare const main: () => Effect<WriteFile, number>;
|
|
11
|
+
export declare const main: () => Effect<Write | WriteFile, 0, number>;
|
package/fjs/website/module.f.mjs
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* Static website generation program for project landing content.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Write, WriteFile } from '../effects/node/types.ts'
|
|
7
|
+
* @import { Effect } from '../effects/types.ts'
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
10
|
import { htmlUtf8 } from '../media/html/module.f.mjs'
|
|
8
|
-
import { writeFile } from '../effects/node/module.f.mjs'
|
|
9
|
-
/** @import { WriteFile } from '../effects/node/types.ts' */
|
|
10
|
-
import { pure, step } from '../effects/module.f.mjs'
|
|
11
|
-
/** @import { Effect } from '../effects/types.ts' */
|
|
11
|
+
import { exitStep, writeFile } from '../effects/node/module.f.mjs'
|
|
12
12
|
|
|
13
13
|
const html = htmlUtf8()(
|
|
14
14
|
['a',
|
|
@@ -16,9 +16,7 @@ const html = htmlUtf8()(
|
|
|
16
16
|
'GitHub Repository'
|
|
17
17
|
])
|
|
18
18
|
|
|
19
|
-
/** @type {Effect<WriteFile, number>} */
|
|
20
|
-
const program =
|
|
21
|
-
writeFile('index.html', html),
|
|
22
|
-
() => pure(0))
|
|
19
|
+
/** @type {Effect<WriteFile | Write, 0, number>} */
|
|
20
|
+
const program = exitStep(writeFile('index.html', html))
|
|
23
21
|
|
|
24
22
|
export const main = () => program
|
package/fjs/website/proof.f.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { exitCode } from '../effects/node/module.f.mjs'
|
|
1
2
|
import { main } from './module.f.mjs'
|
|
2
3
|
import { emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
|
|
3
4
|
import { assertEq, assertNotNullish } from '../asserts/module.f.mjs'
|
|
@@ -9,6 +10,6 @@ export const proof = {
|
|
|
9
10
|
run: () => {
|
|
10
11
|
const state = { ...emptyState, root: { '.github': { workflows: {} } } }
|
|
11
12
|
const [_, result] = virtual(state)(main())
|
|
12
|
-
assertEq(result, 0)
|
|
13
|
+
assertEq(exitCode(result), 0)
|
|
13
14
|
},
|
|
14
15
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "functionalscript",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
],
|
|
11
11
|
"description": "FunctionalScript is a purely functional subset of JavaScript",
|
|
12
12
|
"scripts": {
|
|
13
|
-
"prepack": "tsc --noEmit false --emitDeclarationOnly && tsc
|
|
13
|
+
"prepack": "tsc --noEmit false --emitDeclarationOnly && tsc",
|
|
14
14
|
"test": "tsc && node ./fjs/module.mjs t",
|
|
15
|
-
"cov": "node --test --experimental-test-coverage --test-coverage-include=**/module.f.mjs
|
|
15
|
+
"cov": "node --test --experimental-test-coverage --test-coverage-include=**/module.f.mjs --test-coverage-lines=100 --test-coverage-branches=100 --test-coverage-functions=100",
|
|
16
16
|
"start": "node ./fjs/module.mjs",
|
|
17
17
|
"ci-update": "node ./fjs/module.mjs ci && node ./fjs/module.mjs r ./fjs/nanvm/update/module.f.mjs",
|
|
18
18
|
"dev-update": "node ./fjs/module.mjs r ./fjs/dev/update/module.f.mjs",
|
package/fjs/asn.1/types.js
DELETED