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/cas/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import type { Vec } from '../types/bit_vec/types.ts';
|
|
7
7
|
import type { Effect, Operation } from '../effects/types.ts';
|
|
8
8
|
import type { List } from '../effects/list/types.ts';
|
|
9
|
-
import type {
|
|
9
|
+
import type { Access, CreateExclusive, IoChannel, Mkdir, Now, RandomInt, ReadBytes, Readdir, Rename, Rm, Stat, WriteBytes } from '../effects/node/types.ts';
|
|
10
10
|
/**
|
|
11
11
|
* The filesystem effects the streaming CAS performs: `read` pulls shards
|
|
12
12
|
* (`ReadBytes`); `list` walks the store (`Access`/`Readdir`); `write` runs the
|
|
@@ -17,18 +17,32 @@ import type { IoResult, Mkdir, Now, RandomInt, ReadBytes, Readdir, Rename, Rm, C
|
|
|
17
17
|
export type FileCasOperation = ReadBytes | Mkdir | Readdir | Access | Rename | Rm | RandomInt | Now | CreateExclusive | WriteBytes | Stat | Now | Readdir | Rm;
|
|
18
18
|
export type Cas<O extends Operation> = {
|
|
19
19
|
/**
|
|
20
|
-
* Streams the content for `hash` out in `<=128 KiB` chunks.
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* Streams the content for `hash` out in `<=128 KiB` chunks.
|
|
21
|
+
*
|
|
22
|
+
* A missing shard or an I/O error **fails the stream** rather than ending
|
|
23
|
+
* it, so it can never be mistaken for end-of-stream. That distinction used
|
|
24
|
+
* to be a rule this comment had to state, with an `ok(chunk)`/`error` item
|
|
25
|
+
* union that every consumer kept apart by hand; it is now the difference
|
|
26
|
+
* between an `error` cell and an `ok(undefined)` one, which nothing can
|
|
27
|
+
* confuse.
|
|
23
28
|
*/
|
|
24
|
-
readonly read: (hash: Vec) => List<O,
|
|
29
|
+
readonly read: (hash: Vec) => List<O, Vec, IoChannel>;
|
|
25
30
|
/**
|
|
26
|
-
* Consumes a chunk stream
|
|
27
|
-
*
|
|
31
|
+
* Consumes a chunk stream, hashing incrementally, and returns the content
|
|
32
|
+
* address. A stream that fails aborts the upload with that failure.
|
|
28
33
|
*/
|
|
29
|
-
readonly write: <O1 extends Operation>(payload: List<O1,
|
|
30
|
-
/**
|
|
31
|
-
|
|
34
|
+
readonly write: <O1 extends Operation>(payload: List<O1, Vec, IoChannel>) => Effect<O | O1, Vec, IoChannel>;
|
|
35
|
+
/**
|
|
36
|
+
* Lists all stored content hashes.
|
|
37
|
+
*
|
|
38
|
+
* Fallible like its siblings: walking the store is IO, and a store that
|
|
39
|
+
* cannot be walked must be distinguishable from one that is empty. An
|
|
40
|
+
* absent store *is* empty and answers `ok([])` — that is the fresh-store
|
|
41
|
+
* case, not a failure — but a directory that exists and cannot be read is
|
|
42
|
+
* an error, and returning it is what lets a caller say so instead of
|
|
43
|
+
* reporting no content.
|
|
44
|
+
*/
|
|
45
|
+
readonly list: () => Effect<O, readonly Vec[], IoChannel>;
|
|
32
46
|
};
|
|
33
47
|
export type FileCas = Cas<FileCasOperation> & {
|
|
34
48
|
url: (v: Vec) => string;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Step, Job, MetaStep } from './types.ts';
|
|
2
1
|
/**
|
|
3
2
|
* Shared CI types and helpers: GitHub Actions step/job RTTI schemas, the
|
|
4
3
|
* `MetaStep` representation used by tool-specific modules, and assemblers like
|
|
@@ -10,6 +9,7 @@ import type { Step, Job, MetaStep } from './types.ts';
|
|
|
10
9
|
*
|
|
11
10
|
* @import { Step, Job, MetaStep, StepType } from './types.ts'
|
|
12
11
|
*/
|
|
12
|
+
import type { Step, Job, MetaStep } from './types.ts';
|
|
13
13
|
import { actions } from '../config/module.f.mjs';
|
|
14
14
|
export declare const os: readonly ['ubuntu', 'macos', 'windows'];
|
|
15
15
|
export declare const architecture: readonly ['intel', 'arm'];
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @import { Step, Job, MetaStep, StepType } from './types.ts'
|
|
11
11
|
*/
|
|
12
|
+
|
|
12
13
|
import { actions, images } from '../config/module.f.mjs'
|
|
13
14
|
import { option, array, record, string } from '../../types/rtti/module.f.mjs'
|
|
14
15
|
import { parse as rttiParse } from '../../types/rtti/parse/module.f.mjs'
|
|
@@ -18,7 +18,7 @@ export declare const images: {
|
|
|
18
18
|
readonly arm: 'windows-11-arm';
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
|
-
export declare const functionalscript = /** @type {const} */ "0.
|
|
21
|
+
export declare const functionalscript = /** @type {const} */ "0.45.0";
|
|
22
22
|
export declare const bun = "1.3.14";
|
|
23
23
|
export declare const deno = "2.9.5";
|
|
24
24
|
export declare const node: {
|
|
@@ -28,7 +28,7 @@ export declare const node: {
|
|
|
28
28
|
};
|
|
29
29
|
export declare const nixpkgs: {
|
|
30
30
|
readonly ref: 'nixos-26.05';
|
|
31
|
-
readonly commit: '
|
|
31
|
+
readonly commit: '02e08985a27c65ffd33d434eeb2e660a2e4dc84d';
|
|
32
32
|
};
|
|
33
33
|
export declare const wasmtime = "47.0.3";
|
|
34
34
|
export declare const wasmer = "7.2.1";
|
|
@@ -40,6 +40,6 @@ export declare const actions: {
|
|
|
40
40
|
readonly 'oven-sh/setup-bun': 'v2.2.0';
|
|
41
41
|
readonly 'bytecodealliance/actions/wasmtime/setup': 'v1.1.3';
|
|
42
42
|
readonly 'wasmerio/setup-wasmer': 'v3.1';
|
|
43
|
-
readonly 'cachix/install-nix-action': 'v31.11.
|
|
43
|
+
readonly 'cachix/install-nix-action': 'v31.11.1';
|
|
44
44
|
readonly 'dtolnay/rust-toolchain': '1.97.1';
|
|
45
45
|
};
|
|
@@ -25,7 +25,7 @@ export const images = /** @type {const} */({
|
|
|
25
25
|
// published FunctionalScript release; do not tie it to package.json's current
|
|
26
26
|
// in-repo version.
|
|
27
27
|
// https://www.npmjs.com/package/functionalscript
|
|
28
|
-
export const functionalscript = /** @type {const} */ '0.
|
|
28
|
+
export const functionalscript = /** @type {const} */ '0.45.0'
|
|
29
29
|
|
|
30
30
|
// https://bun.sh/
|
|
31
31
|
export const bun = '1.3.14'
|
|
@@ -53,7 +53,7 @@ export const node = /** @type {const} */({
|
|
|
53
53
|
// https://channels.nixos.org/nixos-26.05/git-revision
|
|
54
54
|
export const nixpkgs = /** @type {const} */({
|
|
55
55
|
ref: 'nixos-26.05',
|
|
56
|
-
commit: '
|
|
56
|
+
commit: '02e08985a27c65ffd33d434eeb2e660a2e4dc84d',
|
|
57
57
|
})
|
|
58
58
|
|
|
59
59
|
// https://github.com/bytecodealliance/wasmtime/releases
|
|
@@ -83,7 +83,7 @@ export const actions = /** @type {const} */({
|
|
|
83
83
|
'wasmerio/setup-wasmer': 'v3.1',
|
|
84
84
|
// https://github.com/marketplace/actions/install-nix
|
|
85
85
|
// Enables the `nix-command` and `flakes` experimental features by default.
|
|
86
|
-
'cachix/install-nix-action': 'v31.11.
|
|
86
|
+
'cachix/install-nix-action': 'v31.11.1',
|
|
87
87
|
// https://rust-lang.org/ - value is Rust version, not action version
|
|
88
88
|
'dtolnay/rust-toolchain': '1.97.1',
|
|
89
89
|
})
|
package/fjs/ci/module.f.d.mts
CHANGED
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*
|
|
8
|
-
* @import { Effect } from '../effects/types.ts'
|
|
9
8
|
* @import { NodeOp } from '../effects/node/types.ts'
|
|
10
9
|
* @import { Architecture, GitHubAction, Job, Jobs, MetaStep, Os } from './common/types.ts'
|
|
11
10
|
* @import { NixJob } from './nix/types.ts'
|
|
12
11
|
* @import { Setup } from './types.ts'
|
|
12
|
+
* @import { Effect } from '../effects/types.ts'
|
|
13
13
|
*/
|
|
14
|
-
import type { Effect } from '../effects/types.ts';
|
|
15
14
|
import type { NodeOp } from '../effects/node/types.ts';
|
|
16
15
|
import type { Setup } from './types.ts';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export declare const
|
|
16
|
+
import type { Effect } from '../effects/types.ts';
|
|
17
|
+
/** @type {(setup: Setup) => Effect<NodeOp, 0, number>} */
|
|
18
|
+
export declare const ci: (setup: Setup) => Effect<NodeOp, 0, number>;
|
|
19
|
+
export declare const main: () => Effect<NodeOp, 0, number>;
|
package/fjs/ci/module.f.mjs
CHANGED
|
@@ -5,15 +5,16 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*
|
|
8
|
-
* @import { Effect } from '../effects/types.ts'
|
|
9
8
|
* @import { NodeOp } from '../effects/node/types.ts'
|
|
10
9
|
* @import { Architecture, GitHubAction, Job, Jobs, MetaStep, Os } from './common/types.ts'
|
|
11
10
|
* @import { NixJob } from './nix/types.ts'
|
|
12
11
|
* @import { Setup } from './types.ts'
|
|
12
|
+
* @import { Effect } from '../effects/types.ts'
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
import { access, writeUtf8File } from '../effects/node/module.f.mjs'
|
|
15
|
+
import { resultStep } from '../effects/module.f.mjs'
|
|
16
|
+
import { access, exitStep, writeUtf8File } from '../effects/node/module.f.mjs'
|
|
17
|
+
import { step as ioStep } from '../effects/module.f.mjs'
|
|
17
18
|
import { functionalscript, images } from './config/module.f.mjs'
|
|
18
19
|
import {
|
|
19
20
|
architecture,
|
|
@@ -57,8 +58,8 @@ const canonicalJobs = rust => ({
|
|
|
57
58
|
'nix-flakes': nixFlakeJob,
|
|
58
59
|
})
|
|
59
60
|
|
|
60
|
-
/** @type {(setup: Setup) => Effect<NodeOp, number>} */
|
|
61
|
-
export const ci = ({ nodeExtra }) =>
|
|
61
|
+
/** @type {(setup: Setup) => Effect<NodeOp, 0, number>} */
|
|
62
|
+
export const ci = ({ nodeExtra }) => resultStep(
|
|
62
63
|
access('Cargo.toml'),
|
|
63
64
|
result => {
|
|
64
65
|
const rust = result[0] === 'ok'
|
|
@@ -82,8 +83,8 @@ export const ci = ({ nodeExtra }) => step(
|
|
|
82
83
|
const workflowWritten = writeUtf8File(
|
|
83
84
|
'.github/workflows/ci.yml',
|
|
84
85
|
JSON.stringify(gha, null, ' '))
|
|
85
|
-
const flakesWritten =
|
|
86
|
-
return
|
|
86
|
+
const flakesWritten = ioStep(workflowWritten, () => nixFlakes(nixJobs))
|
|
87
|
+
return exitStep(flakesWritten)
|
|
87
88
|
})
|
|
88
89
|
|
|
89
90
|
export const main = () => ci({ nodeExtra: () => [] })
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module
|
|
13
13
|
*
|
|
14
|
+
* @import { IoChannel, Mkdir, WriteFile } from '../../effects/node/types.ts'
|
|
14
15
|
* @import { Effect } from '../../effects/types.ts'
|
|
15
|
-
* @import { Mkdir, WriteFile } from '../../effects/node/types.ts'
|
|
16
16
|
* @import { Expression } from '../../media/nix/types.ts'
|
|
17
17
|
* @import { MetaStep } from '../common/types.ts'
|
|
18
18
|
* @import { NixJob } from './types.ts'
|
|
19
19
|
*/
|
|
20
|
+
import type { IoChannel, Mkdir, WriteFile } from '../../effects/node/types.ts';
|
|
20
21
|
import type { Effect } from '../../effects/types.ts';
|
|
21
|
-
import type { Mkdir, WriteFile } from '../../effects/node/types.ts';
|
|
22
22
|
import type { MetaStep } from '../common/types.ts';
|
|
23
23
|
import type { NixJob } from './types.ts';
|
|
24
24
|
/** Directory owned by this generator. */
|
|
@@ -35,16 +35,18 @@ export declare const generatedDirectory: 'nix/generated';
|
|
|
35
35
|
*/
|
|
36
36
|
export declare const flakeText: (job: NixJob) => string;
|
|
37
37
|
/**
|
|
38
|
-
* Writes one generated flake per job.
|
|
38
|
+
* Writes one generated flake per job, stopping at the first failure.
|
|
39
39
|
*
|
|
40
|
-
* @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void>}
|
|
40
|
+
* @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void, IoChannel>}
|
|
41
41
|
*/
|
|
42
|
-
export declare const nixFlakes: (jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void>;
|
|
42
|
+
export declare const nixFlakes: (jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void, IoChannel>;
|
|
43
43
|
/** Path a workflow passes to `nix develop`, for the job of the given id. */
|
|
44
|
+
/** @type {(id: string) => string} */
|
|
44
45
|
export declare const flakePath: (id: string) => string;
|
|
45
46
|
/** Installs Nix, with `nix-command` and `flakes` enabled by the action's defaults. */
|
|
46
47
|
export declare const nixInstall: MetaStep;
|
|
47
48
|
/** Runs one command inside a job's generated development shell. */
|
|
49
|
+
/** @type {(id: string, command: string) => string} */
|
|
48
50
|
export declare const nixDevelop: (id: string, command: string) => string;
|
|
49
51
|
/**
|
|
50
52
|
* Runs a migrated job's whole command sequence in one development shell, so the
|
package/fjs/ci/nix/module.f.mjs
CHANGED
|
@@ -11,15 +11,16 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module
|
|
13
13
|
*
|
|
14
|
+
* @import { IoChannel, Mkdir, WriteFile } from '../../effects/node/types.ts'
|
|
14
15
|
* @import { Effect } from '../../effects/types.ts'
|
|
15
|
-
* @import { Mkdir, WriteFile } from '../../effects/node/types.ts'
|
|
16
16
|
* @import { Expression } from '../../media/nix/types.ts'
|
|
17
17
|
* @import { MetaStep } from '../common/types.ts'
|
|
18
18
|
* @import { NixJob } from './types.ts'
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import {
|
|
21
|
+
import { pureOk } from '../../effects/module.f.mjs'
|
|
22
22
|
import { mkdir, writeUtf8File } from '../../effects/node/module.f.mjs'
|
|
23
|
+
import { forEachStep, step } from '../../effects/module.f.mjs'
|
|
23
24
|
import { nixToString } from '../../media/nix/module.f.mjs'
|
|
24
25
|
import { fromUndefined, unwrap as unwrapNullable } from '../../types/nullable/module.f.mjs'
|
|
25
26
|
import { unwrap } from '../../types/result/module.f.mjs'
|
|
@@ -72,33 +73,33 @@ const flake = ({ system, packages, shellHook }) => ['set',
|
|
|
72
73
|
export const flakeText = job =>
|
|
73
74
|
unwrapNullable(fromUndefined(nixToString(flake(job))))
|
|
74
75
|
|
|
75
|
-
/** @type {(job: NixJob) => Effect<Mkdir | WriteFile, void>} */
|
|
76
|
+
/** @type {(job: NixJob) => Effect<Mkdir | WriteFile, void, IoChannel>} */
|
|
76
77
|
const writeFlake = job => {
|
|
77
78
|
const directory = `${generatedDirectory}/${job.id}`
|
|
78
|
-
const created =
|
|
79
|
-
|
|
79
|
+
const created = mkdir(directory, { recursive: true })
|
|
80
|
+
return step(
|
|
80
81
|
created,
|
|
81
82
|
() => writeUtf8File(`${directory}/flake.nix`, flakeText(job)))
|
|
82
|
-
return mapStep(written, unwrap)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
|
-
* Writes one generated flake per job.
|
|
86
|
+
* Writes one generated flake per job, stopping at the first failure.
|
|
87
87
|
*
|
|
88
|
-
* @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void>}
|
|
88
|
+
* @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void, IoChannel>}
|
|
89
89
|
*/
|
|
90
90
|
export const nixFlakes = jobs =>
|
|
91
|
-
forEachStep(
|
|
91
|
+
forEachStep(pureOk(jobs), writeFlake)
|
|
92
92
|
|
|
93
93
|
/** Path a workflow passes to `nix develop`, for the job of the given id. */
|
|
94
|
-
|
|
94
|
+
/** @type {(id: string) => string} */
|
|
95
|
+
export const flakePath = id => `./${generatedDirectory}/${id}`
|
|
95
96
|
|
|
96
97
|
/** Installs Nix, with `nix-command` and `flakes` enabled by the action's defaults. */
|
|
97
98
|
export const nixInstall = install(uses('cachix/install-nix-action'))
|
|
98
99
|
|
|
99
100
|
/** Runs one command inside a job's generated development shell. */
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
/** @type {(id: string, command: string) => string} */
|
|
102
|
+
export const nixDevelop = (id, command) => `nix develop ${flakePath(id)} --command ${command}`
|
|
102
103
|
|
|
103
104
|
/**
|
|
104
105
|
* Wraps a string so a POSIX shell reproduces it exactly. Single quotes protect
|
package/fjs/ci/nix/proof.f.d.mts
CHANGED
package/fjs/ci/nix/proof.f.mjs
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Proofs for generated CI flakes.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { NixJob } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
|
-
/** @import { NixJob } from './types.ts' */
|
|
8
|
-
|
|
9
9
|
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
10
|
-
import { step } from '../../effects/module.f.mjs'
|
|
10
|
+
import { step as ioStep } from '../../effects/module.f.mjs'
|
|
11
11
|
import { readUtf8File } from '../../effects/node/module.f.mjs'
|
|
12
12
|
import { emptyState, virtual } from '../../effects/node/virtual/module.f.mjs'
|
|
13
13
|
import { nixpkgs } from '../config/module.f.mjs'
|
|
@@ -74,7 +74,7 @@ const shellHookFlake = `{
|
|
|
74
74
|
|
|
75
75
|
/** @type {(jobs: readonly NixJob[], id: string) => string} */
|
|
76
76
|
const generated = (jobs, id) => {
|
|
77
|
-
const written =
|
|
77
|
+
const written = ioStep(
|
|
78
78
|
nixFlakes(jobs),
|
|
79
79
|
() => readUtf8File(`${generatedDirectory}/${id}/flake.nix`))
|
|
80
80
|
const [, [tag, result]] = virtual(emptyState)(written)
|
package/fjs/ci/proof.f.d.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @import { MetaStep, Os, GitHubAction } from './common/types.ts'
|
|
3
|
+
* @import { Dir, State } from '../effects/node/virtual/types.ts'
|
|
4
|
+
*/
|
|
3
5
|
export declare const proof: {
|
|
4
6
|
matrixShape: () => void;
|
|
5
7
|
rust: () => void;
|
package/fjs/ci/proof.f.mjs
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @import { MetaStep, Os, GitHubAction } from './common/types.ts'
|
|
3
|
+
* @import { Dir, State } from '../effects/node/virtual/types.ts'
|
|
4
|
+
*/
|
|
3
5
|
|
|
6
|
+
import { exitCode } from '../effects/node/module.f.mjs'
|
|
4
7
|
import { ci, main } from './module.f.mjs'
|
|
5
8
|
import { functionalscript, node } from './config/module.f.mjs'
|
|
6
9
|
import { nodeNixJobs } from './node/module.f.mjs'
|
|
@@ -11,7 +14,6 @@ import { assert, assertEq } from '../asserts/module.f.mjs'
|
|
|
11
14
|
import { emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
|
|
12
15
|
import { unwrap } from '../types/result/module.f.mjs'
|
|
13
16
|
import { definedValues } from '../types/object/module.f.mjs'
|
|
14
|
-
|
|
15
17
|
import { parse as jsonParse } from '../media/json/module.f.mjs'
|
|
16
18
|
|
|
17
19
|
/** @type {(cmd: string) => (gha: GitHubAction) => boolean} */
|
|
@@ -38,8 +40,11 @@ const makeState = (/** @type {boolean} */ rust, /** @type {string | undefined} *
|
|
|
38
40
|
/** @type {(dir: Dir, name: string) => Dir} */
|
|
39
41
|
const subDir = (dir, name) => {
|
|
40
42
|
const entity = dir[name]
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
// `Array.isArray` narrows to `any[]`, which `readonly Vec[]` is not assignable
|
|
44
|
+
// to, so its negative branch never removes a `readonly` array from a union.
|
|
45
|
+
// `instanceof Array` does, so this `assert` narrows `entity` to `Dir`.
|
|
46
|
+
assert(typeof entity === 'object' && !(entity instanceof Array), entity)
|
|
47
|
+
return entity
|
|
43
48
|
}
|
|
44
49
|
|
|
45
50
|
/** @type {(dir: Dir, name: string) => string} */
|
|
@@ -65,14 +70,14 @@ const flake = (state, id) =>
|
|
|
65
70
|
/** @type {(rust: boolean, nodeExtra?: (o: Os) => readonly MetaStep[]) => GitHubAction} */
|
|
66
71
|
const run = (rust, nodeExtra = () => []) => {
|
|
67
72
|
const [state, result] = virtual(makeState(rust, undefined))(ci({ nodeExtra }))
|
|
68
|
-
assertEq(result, 0)
|
|
73
|
+
assertEq(exitCode(result), 0)
|
|
69
74
|
return workflow(state)
|
|
70
75
|
}
|
|
71
76
|
|
|
72
77
|
/** @type {(packageJson?: string) => GitHubAction} */
|
|
73
78
|
const runDefault = packageJson => {
|
|
74
79
|
const [state, result] = virtual(makeState(false, packageJson))(main())
|
|
75
|
-
assertEq(result, 0)
|
|
80
|
+
assertEq(exitCode(result), 0)
|
|
76
81
|
return workflow(state)
|
|
77
82
|
}
|
|
78
83
|
|
|
@@ -174,7 +179,7 @@ export const proof = {
|
|
|
174
179
|
},
|
|
175
180
|
nixFlakes: () => {
|
|
176
181
|
const [state, result] = virtual(makeState(false, undefined))(main())
|
|
177
|
-
assertEq(result, 0)
|
|
182
|
+
assertEq(exitCode(result), 0)
|
|
178
183
|
for (const { id, packages } of nodeNixJobs) {
|
|
179
184
|
const [nodePackage] = packages
|
|
180
185
|
assert(
|
package/fjs/cli/module.f.d.mts
CHANGED
|
@@ -5,12 +5,10 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*
|
|
8
|
-
* @import { NodeOp,
|
|
9
|
-
* @import { Effect } from '../effects/types.ts'
|
|
8
|
+
* @import { NodeOp, Program, Write } from '../effects/node/types.ts'
|
|
10
9
|
* @import { Commands } from './types.ts'
|
|
11
10
|
*/
|
|
12
|
-
import type { NodeOp,
|
|
13
|
-
import type { Effect } from '../effects/types.ts';
|
|
11
|
+
import type { NodeOp, Program, Write } from '../effects/node/types.ts';
|
|
14
12
|
import type { Commands } from './types.ts';
|
|
15
|
-
/** @type {<O extends NodeOp>(commands: Commands<O>) =>
|
|
16
|
-
export declare const dispatch: <O extends NodeOp>(commands: Commands<O>) =>
|
|
13
|
+
/** @type {<O extends NodeOp>(commands: Commands<O>) => Program<O | Write>} */
|
|
14
|
+
export declare const dispatch: <O extends NodeOp>(commands: Commands<O>) => Program<O | Write>;
|
package/fjs/cli/module.f.mjs
CHANGED
|
@@ -5,18 +5,16 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*
|
|
8
|
-
* @import { NodeOp,
|
|
9
|
-
* @import { Effect } from '../effects/types.ts'
|
|
8
|
+
* @import { NodeOp, Program, Write } from '../effects/node/types.ts'
|
|
10
9
|
* @import { Commands } from './types.ts'
|
|
11
10
|
*/
|
|
12
11
|
|
|
13
|
-
import { errorExit, log } from '../effects/node/module.f.mjs'
|
|
14
|
-
import { pure, step } from '../effects/module.f.mjs'
|
|
12
|
+
import { errorExit, exitStep, log } from '../effects/node/module.f.mjs'
|
|
15
13
|
import { at, fromEntries } from '../types/object/module.f.mjs'
|
|
16
14
|
|
|
17
15
|
const helpMeta = { names: ['help', 'h', '?'], description: 'Print this help message' }
|
|
18
16
|
|
|
19
|
-
/** @type {<O extends NodeOp>(commands: Commands<O>) =>
|
|
17
|
+
/** @type {<O extends NodeOp>(commands: Commands<O>) => Program<O | Write>} */
|
|
20
18
|
export const dispatch = commands => options => {
|
|
21
19
|
const [cmd, ...rest] = options.args
|
|
22
20
|
const rows = [...commands, helpMeta]
|
|
@@ -38,9 +36,7 @@ export const dispatch = commands => options => {
|
|
|
38
36
|
return dispatch(targetCmd.handler)({ ...options, args: ['help'] })
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
|
-
return
|
|
42
|
-
log(helpText),
|
|
43
|
-
() => pure(0))
|
|
39
|
+
return exitStep(log(helpText))
|
|
44
40
|
}
|
|
45
41
|
const found = at(cmd)(map)
|
|
46
42
|
if (found === null) {
|
package/fjs/cli/proof.f.d.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @import { NodeOp, NodeProgramOptions } from '../effects/node/types.ts'
|
|
3
|
+
* @import { Commands } from './types.ts'
|
|
4
|
+
*/
|
|
3
5
|
export declare const proof: {
|
|
4
6
|
knownCommand: () => void;
|
|
5
7
|
alias: () => void;
|
package/fjs/cli/proof.f.mjs
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @import { NodeOp, NodeProgramOptions } from '../effects/node/types.ts'
|
|
3
|
+
* @import { Commands } from './types.ts'
|
|
4
|
+
*/
|
|
3
5
|
|
|
4
|
-
import {
|
|
6
|
+
import { exitCode } from '../effects/node/module.f.mjs'
|
|
7
|
+
import { pureError, pureOk } from '../effects/module.f.mjs'
|
|
5
8
|
import { defaultNodeProgramOptions, emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
|
|
6
9
|
import { dispatch } from './module.f.mjs'
|
|
7
10
|
import { assert, assertEq } from '../asserts/module.f.mjs'
|
|
@@ -15,7 +18,7 @@ const echoCommands = [
|
|
|
15
18
|
{
|
|
16
19
|
names: ['echo', 'e'],
|
|
17
20
|
description: 'Print the first argument',
|
|
18
|
-
handler: ({ args: [arg = ''] }) =>
|
|
21
|
+
handler: ({ args: [arg = ''] }) => arg.length === 0 ? pureOk(0) : pureError(arg.length),
|
|
19
22
|
},
|
|
20
23
|
]
|
|
21
24
|
|
|
@@ -25,25 +28,25 @@ const run = (/** @type {Commands<NodeOp>} */ commands) => (/** @type {readonly s
|
|
|
25
28
|
export const proof = {
|
|
26
29
|
knownCommand: () => {
|
|
27
30
|
const [, code] = run(echoCommands)(['echo', 'hello'])
|
|
28
|
-
assertEq(code, 5, ['expected length 5', code])
|
|
31
|
+
assertEq(exitCode(code), 5, ['expected length 5', code])
|
|
29
32
|
},
|
|
30
33
|
alias: () => {
|
|
31
34
|
const [, code] = run(echoCommands)(['e', 'hi'])
|
|
32
|
-
assertEq(code, 2, ['expected length 2', code])
|
|
35
|
+
assertEq(exitCode(code), 2, ['expected length 2', code])
|
|
33
36
|
},
|
|
34
37
|
noArgs: () => {
|
|
35
38
|
const [state, code] = run(echoCommands)([])
|
|
36
|
-
assertEq(code, 1, ['expected exit 1', code])
|
|
39
|
+
assertEq(exitCode(code), 1, ['expected exit 1', code])
|
|
37
40
|
assert(state.stderr.length !== 0, 'expected error in stderr')
|
|
38
41
|
},
|
|
39
42
|
unknownCommand: () => {
|
|
40
43
|
const [state, code] = run(echoCommands)(['bogus'])
|
|
41
|
-
assertEq(code, 1, ['expected exit 1', code])
|
|
44
|
+
assertEq(exitCode(code), 1, ['expected exit 1', code])
|
|
42
45
|
assert(state.stderr.length !== 0, 'expected error in stderr')
|
|
43
46
|
},
|
|
44
47
|
help: () => {
|
|
45
48
|
const [state, code] = run(echoCommands)(['help'])
|
|
46
|
-
assertEq(code, 0, ['expected exit 0', code])
|
|
49
|
+
assertEq(exitCode(code), 0, ['expected exit 0', code])
|
|
47
50
|
assert(state.stdout.includes('echo'), 'expected command name in stdout')
|
|
48
51
|
assert(state.stdout.includes('help'), 'expected help entry in stdout')
|
|
49
52
|
},
|
|
@@ -60,7 +63,7 @@ export const proof = {
|
|
|
60
63
|
description: 'Capture args',
|
|
61
64
|
handler: (/** @type {{ args: readonly string[] }} */ { args }) => {
|
|
62
65
|
captured.push(...args)
|
|
63
|
-
return
|
|
66
|
+
return pureOk(0)
|
|
64
67
|
},
|
|
65
68
|
}]
|
|
66
69
|
run(commands)(['grab', 'a', 'b', 'c'])
|
|
@@ -71,7 +74,7 @@ export const proof = {
|
|
|
71
74
|
const inner = [{
|
|
72
75
|
names: ['ping'],
|
|
73
76
|
description: 'Inner ping',
|
|
74
|
-
handler: () =>
|
|
77
|
+
handler: () => pureError(42),
|
|
75
78
|
}]
|
|
76
79
|
/** @type {Commands<NodeOp>} */
|
|
77
80
|
const outer = [{
|
|
@@ -80,14 +83,14 @@ export const proof = {
|
|
|
80
83
|
handler: inner,
|
|
81
84
|
}]
|
|
82
85
|
const [, code] = run(outer)(['sub', 'ping'])
|
|
83
|
-
assertEq(code, 42, ['expected 42', code])
|
|
86
|
+
assertEq(exitCode(code), 42, ['expected 42', code])
|
|
84
87
|
},
|
|
85
88
|
nestedHelp: () => {
|
|
86
89
|
/** @type {Commands<NodeOp>} */
|
|
87
90
|
const inner = [{
|
|
88
91
|
names: ['ping'],
|
|
89
92
|
description: 'Inner ping',
|
|
90
|
-
handler: () =>
|
|
93
|
+
handler: () => pureOk(0),
|
|
91
94
|
}]
|
|
92
95
|
/** @type {Commands<NodeOp>} */
|
|
93
96
|
const outer = [{
|
|
@@ -96,17 +99,17 @@ export const proof = {
|
|
|
96
99
|
handler: inner,
|
|
97
100
|
}]
|
|
98
101
|
const [state, code] = run(outer)(['sub', 'help'])
|
|
99
|
-
assertEq(code, 0, ['expected exit 0', code])
|
|
102
|
+
assertEq(exitCode(code), 0, ['expected exit 0', code])
|
|
100
103
|
assert(state.stdout.includes('ping'), 'expected inner command in help')
|
|
101
104
|
},
|
|
102
105
|
prototypeNameIsUnknownCommand: () => {
|
|
103
106
|
const [state, code] = run(echoCommands)(['toString'])
|
|
104
|
-
assertEq(code, 1, ['expected exit 1 for prototype-name command', code])
|
|
107
|
+
assertEq(exitCode(code), 1, ['expected exit 1 for prototype-name command', code])
|
|
105
108
|
assert(state.stderr.includes('unknown command'), 'expected unknown-command error in stderr')
|
|
106
109
|
},
|
|
107
110
|
helpPrototypeSafe: () => {
|
|
108
111
|
const [state, code] = run(echoCommands)(['help', 'toString'])
|
|
109
|
-
assertEq(code, 0, ['expected exit 0, not a throw', code])
|
|
112
|
+
assertEq(exitCode(code), 0, ['expected exit 0, not a throw', code])
|
|
110
113
|
assert(state.stdout.includes('echo'), 'expected top-level help for unknown target')
|
|
111
114
|
},
|
|
112
115
|
helpWithTarget: () => {
|
|
@@ -114,7 +117,7 @@ export const proof = {
|
|
|
114
117
|
const inner = [{
|
|
115
118
|
names: ['ping'],
|
|
116
119
|
description: 'Inner ping',
|
|
117
|
-
handler: () =>
|
|
120
|
+
handler: () => pureOk(0),
|
|
118
121
|
}]
|
|
119
122
|
/** @type {Commands<NodeOp>} */
|
|
120
123
|
const outer = [{
|
|
@@ -123,7 +126,7 @@ export const proof = {
|
|
|
123
126
|
handler: inner,
|
|
124
127
|
}]
|
|
125
128
|
const [state, code] = run(outer)(['help', 'sub'])
|
|
126
|
-
assertEq(code, 0, ['expected exit 0', code])
|
|
129
|
+
assertEq(exitCode(code), 0, ['expected exit 0', code])
|
|
127
130
|
assert(state.stdout.includes('ping'), 'expected inner command in help')
|
|
128
131
|
assert(!(state.stdout.includes('Subcommand group')), 'expected inner help, not outer')
|
|
129
132
|
},
|
package/fjs/cli/types.d.ts
CHANGED
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import type { NodeOp,
|
|
7
|
-
|
|
8
|
-
type Handler<O extends NodeOp> = (options: NodeProgramOptions) => Effect<O, number>;
|
|
6
|
+
import type { NodeOp, Program } from '../effects/node/types.ts';
|
|
7
|
+
type Handler<O extends NodeOp> = Program<O>;
|
|
9
8
|
export type Command<O extends NodeOp> = {
|
|
10
9
|
readonly names: readonly string[];
|
|
11
10
|
readonly description: string;
|