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
package/fjs/effects/types.d.ts
CHANGED
|
@@ -3,19 +3,102 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
import type { Ok, Error, Result } from '../types/result/types.ts';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* A command name paired with the signature a runner implements it at.
|
|
9
|
+
*
|
|
10
|
+
* **The return type is a {@link Result}, and that is a rule rather than a
|
|
11
|
+
* convention every operation happens to follow.** A runner may decline any
|
|
12
|
+
* command it was not given a handler for — `partialMatch` answers
|
|
13
|
+
* `error(notImplemented(command))` through the command's own output — so an
|
|
14
|
+
* operation whose return admitted no error would be a hole in that mechanism:
|
|
15
|
+
* there would be nowhere to put the refusal. Every *host* operation already
|
|
16
|
+
* returned `OpResult<…>` or `IoResult<…>` when this constraint was added, and
|
|
17
|
+
* so did four of the six declared inside proofs — through a bare `Result`
|
|
18
|
+
* rather than either alias, since those two are node conveniences. The two in
|
|
19
|
+
* `./proof.f.mjs` returned a bare `number`, and the commit that added the rule
|
|
20
|
+
* rewrote them.
|
|
21
|
+
*
|
|
22
|
+
* It is also the latch the whole representation now rests on. An operation
|
|
23
|
+
* *cannot* be declared infallible, so every {@link Effect} built from one has a
|
|
24
|
+
* `Result` to carry — which is what lets {@link Effect} name its error channel
|
|
25
|
+
* rather than leaving it inside an opaque payload.
|
|
12
26
|
*/
|
|
13
|
-
export type
|
|
27
|
+
export type Operation = readonly [string, (..._: readonly never[]) => Result<unknown, unknown>];
|
|
14
28
|
/**
|
|
15
|
-
*
|
|
29
|
+
* The runner cannot dispatch this operation and has **not** started it.
|
|
30
|
+
*
|
|
31
|
+
* It is ordinary recoverable effect data rather than a fatal runner condition:
|
|
32
|
+
* the program receives control back and decides what an incompatible runner
|
|
33
|
+
* means for it — recover, choose a fallback operation, or treat it as fatal and
|
|
34
|
+
* panic itself (`throw`, e.g. via `unwrap`). Escalation belongs to the program,
|
|
35
|
+
* so the missing-handler path answers with `error(notImplemented)` rather than
|
|
36
|
+
* panicking on the program's behalf.
|
|
37
|
+
*
|
|
38
|
+
* **It identifies the operation by command name only.** An operation's payload
|
|
39
|
+
* may hold functions — `createServer`'s listener, `sandbox`'s thunk, `test`'s
|
|
40
|
+
* body — so carrying it would break the serializability the asserts in
|
|
41
|
+
* the asserts at the bottom of this file pin against the JSON data model.
|
|
42
|
+
*
|
|
43
|
+
* **It is not a security boundary.** A runner keeps its authority over
|
|
44
|
+
* execution through a separate, out-of-band mechanism: it may interrupt or
|
|
45
|
+
* terminate a program that is malicious, over budget, or violating host policy,
|
|
46
|
+
* and nothing in the error channel obliges it to hand control back. A
|
|
47
|
+
* capability the runner merely lacks is answered with this error; a refusal to
|
|
48
|
+
* continue is an interruption, never dressed up as `NotImplemented`.
|
|
49
|
+
*
|
|
50
|
+
* **It is why there is no infallible effect.** Every {@link Do} node is
|
|
51
|
+
* dispatched by a runner that may decline the command, so an effect that
|
|
52
|
+
* declared no error channel would be describing today's runner rather than the
|
|
53
|
+
* computation. That observation is what collapsed the representation into this
|
|
54
|
+
* one type — see {@link Effect}.
|
|
55
|
+
*/
|
|
56
|
+
export type NotImplemented = readonly ['notImplemented', string];
|
|
57
|
+
/**
|
|
58
|
+
* An `Effect<O, T, E>` is the raw value: a {@link Pure} thunk yielding
|
|
59
|
+
* `Result<T, E>`, or a {@link Do} node describing a command to perform. It is
|
|
60
|
+
* plain data — compose effects with the combinators in
|
|
61
|
+
* [`./module.f.mjs`](./module.f.mjs), which are eager wherever the head
|
|
62
|
+
* is `Pure`.
|
|
63
|
+
*
|
|
64
|
+
* **The error channel is part of the representation, not a wrapper over it.**
|
|
65
|
+
* This used to be two types: a `RawEffect<O, T>` with an opaque payload, and an
|
|
66
|
+
* `Effect<O, T, E>` alias for `RawEffect<O, Result<T, E>>`. The division was
|
|
67
|
+
* described as *composition* against *representation*, and it was defended on
|
|
68
|
+
* the grounds that the representation is generic over its payload by
|
|
69
|
+
* definition — the runners, {@link match}, `runPure`, `do_`. That is true and
|
|
70
|
+
* it is not a reason for two names: {@link Operation} requires a `Result`
|
|
71
|
+
* return, so the payload a runner is generic over is *always* `Result<T, E>`
|
|
72
|
+
* already. Naming its two halves costs nothing and lets every signature in the
|
|
73
|
+
* system say which half it means.
|
|
16
74
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
75
|
+
* **`E` defaults to {@link NotImplemented}**, the one error every operation can
|
|
76
|
+
* answer with, so the common case is written `Effect<Sandbox, T>`. An
|
|
77
|
+
* operation's own failures extend the channel — `Effect<ReadFile, Vec,
|
|
78
|
+
* IoChannel>`, that alias being the node standard of
|
|
79
|
+
* `NotImplemented | IoError`.
|
|
80
|
+
*
|
|
81
|
+
* **`Effect<O, T, never>` is a claim, not an absence.** It says this code
|
|
82
|
+
* absorbs its own failures *here* — an MCP handler turning one into a JSON-RPC
|
|
83
|
+
* error response, a decoder turning one into `null`, a test body turning one
|
|
84
|
+
* into a panic. A reader who thinks the absorption is wrong has something to
|
|
85
|
+
* point at, which is what the opaque payload could not offer.
|
|
86
|
+
*
|
|
87
|
+
* The channel is where **short-circuiting** lives, not specifically where a
|
|
88
|
+
* runner's refusal lives. A parse failure, a domain verdict, or a non-zero exit
|
|
89
|
+
* code belongs in it for the same reason {@link NotImplemented} does: `step`
|
|
90
|
+
* should stop the chain and carry it out.
|
|
91
|
+
*
|
|
92
|
+
* It widens and does not narrow, in both channels and in `O` — the asserts in
|
|
93
|
+
* the asserts at the bottom of this file pin each direction, so an unhandled error
|
|
94
|
+
* type is a compile error rather than a value nobody looked at.
|
|
95
|
+
*/
|
|
96
|
+
export type Effect<O extends Operation, T, E = NotImplemented> = Pure<T, E> | Do<O, T, E>;
|
|
97
|
+
/**
|
|
98
|
+
* A pure effect: an *already-computed* `Result<T, E>` behind a thunk.
|
|
99
|
+
*
|
|
100
|
+
* The thunk is a **discriminator, not a suspension**. {@link Effect} is a union
|
|
101
|
+
* with no tag field, so telling its two cases apart needs a runtime test, and
|
|
19
102
|
* `typeof e === 'function'` is it — wrapping the value in a function is what
|
|
20
103
|
* makes that test work. Deferral is not what the thunk is for. A `Pure` never
|
|
21
104
|
* holds work that has yet to happen; everything that *does* something is a
|
|
@@ -26,19 +109,19 @@ export type Effect<O extends Operation, T> = Pure<T> | Do<O, T>;
|
|
|
26
109
|
* - **The thunk must be pure and total.** Work hidden behind it is an effect
|
|
27
110
|
* that no runner ever sees and no `OperationMap` can interpret or mock.
|
|
28
111
|
* - **It may be called more than once.** Nothing memoizes it. The same effect
|
|
29
|
-
* can be decoded repeatedly
|
|
30
|
-
*
|
|
112
|
+
* can be decoded repeatedly, and under the first rule that costs nothing and
|
|
113
|
+
* changes nothing.
|
|
31
114
|
*
|
|
32
115
|
* A `lazy` constructor (`<T>(t: () => T): Effect<never, T> => t`) once existed
|
|
33
116
|
* to advertise the thunk as a suspension. It was the identity function, and it
|
|
34
117
|
* promised a deferral this representation does not keep; it has been removed.
|
|
35
118
|
* Reintroducing it would reintroduce the contradiction, not fix one.
|
|
36
119
|
*/
|
|
37
|
-
export type Pure<T> = () => T
|
|
120
|
+
export type Pure<T, E> = () => Result<T, E>;
|
|
38
121
|
export type Pr<O extends Operation, K extends O[0]> = O extends readonly [K, (...args: infer P) => infer R] ? readonly [P, R] : never;
|
|
39
122
|
/**
|
|
40
|
-
* A
|
|
41
|
-
* the effect.
|
|
123
|
+
* A {@link Do} node's continuation: given the command's output, produce the
|
|
124
|
+
* rest of the effect.
|
|
42
125
|
*
|
|
43
126
|
* The `out O` annotation asserts a covariance TypeScript cannot derive through
|
|
44
127
|
* the conditional `Pr` type: the command's output sits in the *contravariant*
|
|
@@ -55,7 +138,7 @@ export type Pr<O extends Operation, K extends O[0]> = O extends readonly [K, (..
|
|
|
55
138
|
* the continuation representation must re-check this argument before keeping the
|
|
56
139
|
* annotation.
|
|
57
140
|
*/
|
|
58
|
-
export type Cont<out O extends Operation, T> = (_: Pr<O, O[0]>[1]) => Effect<O, T>;
|
|
141
|
+
export type Cont<out O extends Operation, T, E> = (_: Pr<O, O[0]>[1]) => Effect<O, T, E>;
|
|
59
142
|
/**
|
|
60
143
|
* A `Do` node: the command to perform, its payload, and the continuation to
|
|
61
144
|
* resume with the command's output. Its runtime value is exactly this record,
|
|
@@ -64,7 +147,7 @@ export type Cont<out O extends Operation, T> = (_: Pr<O, O[0]>[1]) => Effect<O,
|
|
|
64
147
|
*
|
|
65
148
|
* It must be an object rather than a tuple, and that is not a style choice:
|
|
66
149
|
* only object / function / mapped-type aliases may carry a variance annotation
|
|
67
|
-
* (`TS2637` forbids `out` on a tuple), and the
|
|
150
|
+
* (`TS2637` forbids `out` on a tuple), and the {@link Effect} union must be
|
|
68
151
|
* covariant in `O` end to end. `command` and `payload` are indexed/conditional
|
|
69
152
|
* types over `O` that TypeScript will not widen generically on their own —
|
|
70
153
|
* annotating only {@link Cont} is not enough — so the whole node carries
|
|
@@ -78,27 +161,25 @@ export type Cont<out O extends Operation, T> = (_: Pr<O, O[0]>[1]) => Effect<O,
|
|
|
78
161
|
* tuple's price without being a tuple. Named fields make the node
|
|
79
162
|
* self-describing at every read and leave no layout to memorize.
|
|
80
163
|
*/
|
|
81
|
-
export type Do<out O extends Operation, T> = {
|
|
164
|
+
export type Do<out O extends Operation, T, E> = {
|
|
82
165
|
readonly command: O[0];
|
|
83
166
|
readonly payload: Pr<O, O[0]>[0];
|
|
84
|
-
readonly continuation: Cont<O, T>;
|
|
167
|
+
readonly continuation: Cont<O, T, E>;
|
|
85
168
|
};
|
|
169
|
+
export type Param<O extends Operation> = F<O>[0];
|
|
170
|
+
export type Return<O extends Operation> = F<O>[1];
|
|
86
171
|
/**
|
|
87
|
-
*
|
|
88
|
-
* far, newest first. `History<O, readonly[C, B, A]>` is three links deep, with
|
|
89
|
-
* `A` bound earliest.
|
|
172
|
+
* The success half of a {@link Result} type, and {@link ErrOf} the error half.
|
|
90
173
|
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* `
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* Heterogeneous by design: each element has its own type, so this is not a
|
|
97
|
-
* `List` and nothing that folds or maps a list applies to it.
|
|
174
|
+
* These read an operation's *declared* return apart so that {@link Func} can
|
|
175
|
+
* state the effect `do_` builds from it. {@link Operation} guarantees the
|
|
176
|
+
* return is a `Result`, so neither is ever the `never` its fallback branch
|
|
177
|
+
* names; and both distribute over the union, which is what makes
|
|
178
|
+
* `Result<T, E>` decompose back into exactly `T` and `E`.
|
|
98
179
|
*/
|
|
99
|
-
export type
|
|
100
|
-
|
|
101
|
-
export type
|
|
180
|
+
export type OkOf<R> = R extends Ok<infer T> ? T : never;
|
|
181
|
+
/** The error half of a {@link Result} type — see {@link OkOf}. */
|
|
182
|
+
export type ErrOf<R> = R extends Error<infer E> ? E : never;
|
|
102
183
|
/**
|
|
103
184
|
* An operation map whose entries take a command's payload and return some
|
|
104
185
|
* output `R`. Generalizes `ToAsyncOperationMap` (`R = Promise<…>`) and the
|
|
@@ -107,9 +188,56 @@ export type Return<O extends Operation> = F<O>[1];
|
|
|
107
188
|
export type OperationMap<O extends Operation, R> = {
|
|
108
189
|
readonly [K in O[0]]: (...payload: Pr<O, K>[0]) => R;
|
|
109
190
|
};
|
|
110
|
-
|
|
191
|
+
/**
|
|
192
|
+
* An {@link OperationMap} a runner may leave holes in: every handler it *does*
|
|
193
|
+
* provide has the same type, and any of them may be absent.
|
|
194
|
+
*
|
|
195
|
+
* Partiality is opt-in, and deliberately not the default. A total map means a
|
|
196
|
+
* runner that forgets a handler is a compile error, which is what should happen
|
|
197
|
+
* to the Node runner; this type is for a runner that is *meant* to lack
|
|
198
|
+
* operations — a virtual filesystem with no subprocesses, a mock that answers
|
|
199
|
+
* the three commands its proof issues. An absent handler here is an answer
|
|
200
|
+
* (`error(notImplemented)`), not an oversight.
|
|
201
|
+
*/
|
|
202
|
+
export type PartialOperationMap<O extends Operation, R> = {
|
|
203
|
+
readonly [K in O[0]]?: (...payload: Pr<O, K>[0]) => R;
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* The runtime witness of `O`'s command set.
|
|
207
|
+
*
|
|
208
|
+
* A {@link PartialOperationMap} cannot say, at runtime, whether a command it
|
|
209
|
+
* has no handler for is one the operation set declares — types are erased, so
|
|
210
|
+
* an omitted `readFile` and a garbled `readFilee` reach the interpreter as the
|
|
211
|
+
* same missing lookup. They are not the same thing: the first is a capability
|
|
212
|
+
* this runner lacks and a program may recover from, the second is a `Do` node
|
|
213
|
+
* whose `command` was never the one its type claimed. Telling them apart needs
|
|
214
|
+
* `O`'s commands as data.
|
|
215
|
+
*
|
|
216
|
+
* Declare it as a record rather than an array — a `Record<O[0], null>` is
|
|
217
|
+
* checked for *completeness*, so a command added to `O` and forgotten here is a
|
|
218
|
+
* compile error, whereas an array literal only has its members checked and
|
|
219
|
+
* drifts silently.
|
|
220
|
+
*/
|
|
221
|
+
export type CommandSet<O extends Operation> = Readonly<Record<O[0], null>>;
|
|
222
|
+
/** `O`'s commands, in the form {@link match} tests membership against. */
|
|
223
|
+
export type Commands<O extends Operation> = readonly O[0][];
|
|
224
|
+
/**
|
|
225
|
+
* What one decoding step of an effect yields: the finished `Result`, or the
|
|
226
|
+
* operation's output `R` paired with the continuation to resume with.
|
|
227
|
+
*
|
|
228
|
+
* The `done` payload is the whole `Result`, not its `ok` half. An interpreter
|
|
229
|
+
* is the one reader that must not short-circuit — a runner hands a failed
|
|
230
|
+
* command's `error` back *through* the continuation, so the two channels only
|
|
231
|
+
* separate above this layer.
|
|
232
|
+
*/
|
|
233
|
+
export type MatchResult<O extends Operation, T, E, R> = readonly ['done', Result<T, E>] | readonly ['cont', R, Cont<O, T, E>];
|
|
111
234
|
export type ToAsyncOperationMap<O extends Operation> = {
|
|
112
235
|
readonly [K in O[0]]: (...payload: Pr<O, K>[0]) => Promise<Pr<O, K>[1]>;
|
|
113
236
|
};
|
|
114
237
|
export type F<O extends Operation> = Pr<O, O[0]>;
|
|
115
|
-
|
|
238
|
+
/**
|
|
239
|
+
* The effect-returning function `do_` builds for a single operation: its
|
|
240
|
+
* payload in, an {@link Effect} whose two channels are the halves of the
|
|
241
|
+
* operation's declared `Result` out.
|
|
242
|
+
*/
|
|
243
|
+
export type Func<O extends Operation> = (..._: Param<O>) => Effect<O, OkOf<Return<O>>, ErrOf<Return<O>>>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External-runner entry point: importing this module discovers every proof
|
|
3
|
+
* module and registers each test case with the active test runner. In this
|
|
4
|
+
* repository `node --test`, `bun test`, and `deno test` discover it by its
|
|
5
|
+
* `.test.` name; projects consuming the package re-export it from their own
|
|
6
|
+
* entry file with a bare side-effect import — see `README.md`.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External-runner entry point: importing this module discovers every proof
|
|
3
|
+
* module and registers each test case with the active test runner. In this
|
|
4
|
+
* repository `node --test`, `bun test`, and `deno test` discover it by its
|
|
5
|
+
* `.test.` name; projects consuming the package re-export it from their own
|
|
6
|
+
* entry file with a bare side-effect import — see `README.md`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { runEffect } from '../effects/node/module.mjs'
|
|
10
|
+
import { register } from './module.f.mjs'
|
|
11
|
+
|
|
12
|
+
// Top-level `await`: every proof must be registered before the runner starts
|
|
13
|
+
// collecting tests.
|
|
14
|
+
await runEffect(register)
|
|
@@ -9,11 +9,18 @@
|
|
|
9
9
|
* scheduling and pass/fail counting.
|
|
10
10
|
*
|
|
11
11
|
* @module
|
|
12
|
+
*
|
|
13
|
+
* @import { Operation } from '../effects/types.ts'
|
|
14
|
+
* @import { Effect, NotImplemented } from '../effects/types.ts'
|
|
15
|
+
* @import { LoadModuleOperations, ModuleMap } from '../dev/types.ts'
|
|
16
|
+
* @import { TestFn, TestEntry, TestSet, Path, Reporter, _TestState, _TestAndPath } from './types.ts'
|
|
17
|
+
* @import { All, Await, Env, IoChannel, NodeProgram, NodeProgramOptions, Program, Sandbox, SandboxResult, Test, TestContext, Write, WriteConsoles } from '../effects/node/types.ts'
|
|
12
18
|
*/
|
|
13
|
-
import type {
|
|
14
|
-
import type { Effect,
|
|
19
|
+
import type { Operation } from '../effects/types.ts';
|
|
20
|
+
import type { Effect, NotImplemented } from '../effects/types.ts';
|
|
15
21
|
import type { LoadModuleOperations, ModuleMap } from '../dev/types.ts';
|
|
16
22
|
import type { TestEntry, TestSet, Path, Reporter, _TestAndPath } from './types.ts';
|
|
23
|
+
import type { All, Await, IoChannel, NodeProgram, NodeProgramOptions, Program, Sandbox, SandboxResult, Test, TestContext, Write } from '../effects/node/types.ts';
|
|
17
24
|
/**
|
|
18
25
|
* Converts an arbitrary JS value into a `TestSet`.
|
|
19
26
|
*
|
|
@@ -49,9 +56,9 @@ export declare const collectTests: (path: Path, throws: boolean, v: unknown) =>
|
|
|
49
56
|
* This is the correct model for Node `--test`, Bun, and Deno, where tests must
|
|
50
57
|
* be declared upfront and the framework drives execution.
|
|
51
58
|
*
|
|
52
|
-
* @type {(ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void>}
|
|
59
|
+
* @type {(ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void, NotImplemented>}
|
|
53
60
|
*/
|
|
54
|
-
export declare const registerModule: (ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void>;
|
|
61
|
+
export declare const registerModule: (ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void, NotImplemented>;
|
|
55
62
|
/**
|
|
56
63
|
* Runs all test modules in `moduleMap` whose names pass `isTest`, accumulates
|
|
57
64
|
* pass/fail/time via `reporter`, and returns an exit code (0 = all passed,
|
|
@@ -59,19 +66,24 @@ export declare const registerModule: (ctx: TestContext, k: string, v: unknown, s
|
|
|
59
66
|
*
|
|
60
67
|
* @template {Operation} O
|
|
61
68
|
* @param {Reporter<O>} reporter
|
|
62
|
-
* @returns {(moduleMap: ModuleMap) => Effect<O | All, number>}
|
|
69
|
+
* @returns {(moduleMap: ModuleMap) => Effect<O | All, number, IoChannel>}
|
|
63
70
|
*/
|
|
64
|
-
export declare const runModuleMap: <O extends Operation>(reporter: Reporter<O>) => (moduleMap: ModuleMap) => Effect<O | All, number>;
|
|
71
|
+
export declare const runModuleMap: <O extends Operation>(reporter: Reporter<O>) => (moduleMap: ModuleMap) => Effect<O | All, number, IoChannel>;
|
|
65
72
|
/**
|
|
66
73
|
* Discovers all test modules via `loadModuleMap`, then runs them through
|
|
67
74
|
* `runModuleMap`. The composed effect is a `NodeProgram` entry point for the
|
|
68
75
|
* `fjs t` test runner.
|
|
69
76
|
*
|
|
77
|
+
* The chain leaves the error channel here, because this is where a `Program` ends
|
|
78
|
+
* and a `Program`'s answer is an exit code rather than a `Result`. A run that
|
|
79
|
+
* could not report its own results is a failed run, so it exits `1` with the
|
|
80
|
+
* reason on `stderr` instead of unwinding as a panic.
|
|
81
|
+
*
|
|
70
82
|
* @template {Operation} O
|
|
71
83
|
* @param {Reporter<O>} reporter
|
|
72
|
-
* @returns {Program<O | All | LoadModuleOperations>}
|
|
84
|
+
* @returns {Program<O | All | LoadModuleOperations | Write>}
|
|
73
85
|
*/
|
|
74
|
-
export declare const testAll: <O extends Operation>(reporter: Reporter<O>) => Program<O | All | LoadModuleOperations>;
|
|
86
|
+
export declare const testAll: <O extends Operation>(reporter: Reporter<O>) => Program<O | All | LoadModuleOperations | Write>;
|
|
75
87
|
/** Returns `true` if `s` is a non-negative decimal integer without a leading zero.
|
|
76
88
|
*
|
|
77
89
|
* @type {(s: string) => boolean}
|
|
@@ -120,9 +132,9 @@ export declare const ghEscape: (s: string) => string;
|
|
|
120
132
|
* Default `Reporter.test` implementation: sandboxes `fn` once and inverts the
|
|
121
133
|
* result when `throws` is `true` (caught error → pass, clean return → fail).
|
|
122
134
|
*
|
|
123
|
-
* @type {(file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown
|
|
135
|
+
* @type {(file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown>, NotImplemented>}
|
|
124
136
|
*/
|
|
125
|
-
export declare const defaultTest: (file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown
|
|
137
|
+
export declare const defaultTest: (file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown>, NotImplemented>;
|
|
126
138
|
/**
|
|
127
139
|
* The terminal/GitHub reporter used by `fjs t`. Output goes through
|
|
128
140
|
* `csiWrite`, so ANSI styles are stripped on non-TTY streams. When
|