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
|
@@ -15,12 +15,14 @@
|
|
|
15
15
|
* const y = sloth.eval(steps)(x)
|
|
16
16
|
* if (y === null || !sloth.verify(steps)(x)(y)) { throw y }
|
|
17
17
|
* ```
|
|
18
|
+
*
|
|
19
|
+
* @import { PrimeField } from '../../types/prime_field/types.ts'
|
|
20
|
+
* @import { Nullable } from '../../types/nullable/types.ts'
|
|
21
|
+
* @import { Unary } from '../../types/bigint/types.ts'
|
|
22
|
+
* @import { Sloth } from './types.ts'
|
|
18
23
|
*/
|
|
24
|
+
|
|
19
25
|
import { modSqrt, prime_field } from '../../types/prime_field/module.f.mjs'
|
|
20
|
-
/** @import { PrimeField } from '../../types/prime_field/types.ts' */
|
|
21
|
-
/** @import { Nullable } from '../../types/nullable/types.ts' */
|
|
22
|
-
/** @import { Unary } from '../../types/bigint/types.ts' */
|
|
23
|
-
/** @import { Sloth } from './types.ts' */
|
|
24
26
|
|
|
25
27
|
/** Sloth VDF modulus (3072-bit safe prime, same as reference implementations). */
|
|
26
28
|
export const p =
|
package/fjs/dev/module.f.d.mts
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
* Development utilities for indexing modules and loading FunctionalScript files.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Access, All, Env, Import, IoChannel, Readdir } from '../effects/node/types.ts'
|
|
7
|
+
* @import { Effect } from '../effects/types.ts'
|
|
8
|
+
* @import { Dir } from '../effects/node/virtual/types.ts'
|
|
9
|
+
* @import { Module, ModuleMap, LoadModuleOperations } from './types.ts'
|
|
5
10
|
*/
|
|
6
|
-
import type { Env } from '../effects/node/types.ts';
|
|
11
|
+
import type { Env, IoChannel } from '../effects/node/types.ts';
|
|
7
12
|
import type { Effect } from '../effects/types.ts';
|
|
8
13
|
import type { ModuleMap, LoadModuleOperations } from './types.ts';
|
|
9
|
-
/** @import { Dir } from '../effects/node/virtual/types.ts' */
|
|
10
|
-
/** @import { Module, ModuleMap, LoadModuleOperations } from './types.ts' */
|
|
11
14
|
/**
|
|
12
15
|
* Returns `true` if the file should be loaded for proof discovery.
|
|
13
16
|
*
|
|
@@ -45,12 +48,21 @@ export declare const shouldLoad: (s: string) => boolean;
|
|
|
45
48
|
* The result is sorted by path key using `string.cmp` so the order is
|
|
46
49
|
* deterministic regardless of filesystem traversal order.
|
|
47
50
|
*
|
|
48
|
-
*
|
|
51
|
+
* A failure — a directory that cannot be listed, a module that will not import
|
|
52
|
+
* — propagates instead of panicking, so the program that asked for the map
|
|
53
|
+
* decides what a partial view of the source tree means for it. Discovery reads
|
|
54
|
+
* the whole tree, and a map missing the file it was asked about is worse than
|
|
55
|
+
* no map at all.
|
|
56
|
+
*
|
|
57
|
+
* @type {(env: Env) => Effect<LoadModuleOperations, ModuleMap, IoChannel>}
|
|
49
58
|
*/
|
|
50
|
-
export declare const loadModuleMap: (env: Env) => Effect<LoadModuleOperations, ModuleMap>;
|
|
59
|
+
export declare const loadModuleMap: (env: Env) => Effect<LoadModuleOperations, ModuleMap, IoChannel>;
|
|
51
60
|
export declare const proof: {
|
|
52
61
|
isSourceFile: () => void;
|
|
53
62
|
allFilesFindsFunctionalScript: () => void;
|
|
54
63
|
allFilesSkipsNodeModules: () => void;
|
|
55
64
|
loadModuleMapDefaultsToCwdWhenInitCwdUnset: () => void;
|
|
65
|
+
loadModuleMapReportsUnreadableRoot: () => void;
|
|
66
|
+
loadModuleMapReportsUnimportableModule: () => void;
|
|
67
|
+
loadModuleMapStripsInitCwdPrefix: () => void;
|
|
56
68
|
};
|
package/fjs/dev/module.f.mjs
CHANGED
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
* Development utilities for indexing modules and loading FunctionalScript files.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Access, All, Env, Import, IoChannel, Readdir } from '../effects/node/types.ts'
|
|
7
|
+
* @import { Effect } from '../effects/types.ts'
|
|
8
|
+
* @import { Dir } from '../effects/node/virtual/types.ts'
|
|
9
|
+
* @import { Module, ModuleMap, LoadModuleOperations } from './types.ts'
|
|
5
10
|
*/
|
|
6
11
|
|
|
7
|
-
import {
|
|
8
|
-
/** @import { Access, All, Env, Import, Readdir } from '../effects/node/types.ts' */
|
|
12
|
+
import { allOk, import_, readdir } from '../effects/node/module.f.mjs'
|
|
9
13
|
import { cmp as strCmp } from '../types/string/module.f.mjs'
|
|
10
14
|
import { unwrap } from '../types/result/module.f.mjs'
|
|
11
|
-
import {
|
|
12
|
-
/** @import { Effect } from '../effects/types.ts' */
|
|
15
|
+
import { mapStep, pureOk, step } from '../effects/module.f.mjs'
|
|
13
16
|
import { join, relativize, toPosix } from '../path/module.f.mjs'
|
|
14
17
|
import { assert, assertEq } from '../asserts/module.f.mjs'
|
|
15
18
|
import { emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
|
|
16
|
-
/** @import { Dir } from '../effects/node/virtual/types.ts' */
|
|
17
|
-
/** @import { Module, ModuleMap, LoadModuleOperations } from './types.ts' */
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Returns `true` if the file should be loaded for proof discovery.
|
|
@@ -48,16 +49,16 @@ export const shouldLoad = s =>
|
|
|
48
49
|
const isSourceFile = path =>
|
|
49
50
|
path.endsWith('.js') || path.endsWith('.ts') || path.endsWith('.mts') || path.endsWith('.mjs')
|
|
50
51
|
|
|
51
|
-
/** @type {(s: string, predicate: (path: string) => boolean) => Effect<Readdir | All, readonly string[]>} */
|
|
52
|
+
/** @type {(s: string, predicate: (path: string) => boolean) => Effect<Readdir | All, readonly string[], IoChannel>} */
|
|
52
53
|
const allFiles = (s, predicate) => {
|
|
53
|
-
/** @type {(p: string) => Effect<Readdir | All, readonly string[]>} */
|
|
54
|
+
/** @type {(p: string) => Effect<Readdir | All, readonly string[], IoChannel>} */
|
|
54
55
|
const load = p => {
|
|
55
|
-
const
|
|
56
|
+
const listed = step(
|
|
56
57
|
readdir(p, {}),
|
|
57
58
|
d => {
|
|
58
|
-
/** @type {readonly Effect<Readdir | All, readonly string[]>[]} */
|
|
59
|
+
/** @type {readonly Effect<Readdir | All, readonly string[], IoChannel>[]} */
|
|
59
60
|
let result = []
|
|
60
|
-
for (const i of
|
|
61
|
+
for (const i of d) {
|
|
61
62
|
const { name } = i
|
|
62
63
|
if (name.startsWith('.')) { continue }
|
|
63
64
|
const file = join(p, name)
|
|
@@ -67,23 +68,19 @@ const allFiles = (s, predicate) => {
|
|
|
67
68
|
continue
|
|
68
69
|
}
|
|
69
70
|
if (predicate(file)) {
|
|
70
|
-
result = [...result,
|
|
71
|
+
result = [...result, pureOk([file])]
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
|
-
return
|
|
74
|
+
return allOk(...result)
|
|
74
75
|
})
|
|
75
|
-
return
|
|
76
|
-
x0,
|
|
77
|
-
v => pure(v.flat()))
|
|
76
|
+
return mapStep(listed, v => v.flat())
|
|
78
77
|
}
|
|
79
78
|
return load(s)
|
|
80
79
|
}
|
|
81
80
|
|
|
82
|
-
/** @type {(f: string) => Effect<Access | Import, readonly (readonly [string, Module])[]>} */
|
|
81
|
+
/** @type {(f: string) => Effect<Access | Import, readonly (readonly [string, Module])[], IoChannel>} */
|
|
83
82
|
const loadFile = f =>
|
|
84
|
-
|
|
85
|
-
import_(f),
|
|
86
|
-
r => pure([/** @type {const} */ ([f, unwrap(r)])]))
|
|
83
|
+
mapStep(import_(f), m => [/** @type {const} */ ([f, m])])
|
|
87
84
|
|
|
88
85
|
const { fromEntries } = Object
|
|
89
86
|
|
|
@@ -101,7 +98,13 @@ const { fromEntries } = Object
|
|
|
101
98
|
* The result is sorted by path key using `string.cmp` so the order is
|
|
102
99
|
* deterministic regardless of filesystem traversal order.
|
|
103
100
|
*
|
|
104
|
-
*
|
|
101
|
+
* A failure — a directory that cannot be listed, a module that will not import
|
|
102
|
+
* — propagates instead of panicking, so the program that asked for the map
|
|
103
|
+
* decides what a partial view of the source tree means for it. Discovery reads
|
|
104
|
+
* the whole tree, and a map missing the file it was asked about is worse than
|
|
105
|
+
* no map at all.
|
|
106
|
+
*
|
|
107
|
+
* @type {(env: Env) => Effect<LoadModuleOperations, ModuleMap, IoChannel>}
|
|
105
108
|
*/
|
|
106
109
|
export const loadModuleMap = env => {
|
|
107
110
|
const initCwd = env['INIT_CWD']
|
|
@@ -111,17 +114,17 @@ export const loadModuleMap = env => {
|
|
|
111
114
|
// we should consider optimizing them by ALIQ technique or something similar.
|
|
112
115
|
// For example, we should be able to write it like `allFiles(s).flatMap(loadFile)`,
|
|
113
116
|
// then an effect runner can batch all file loading operations together.
|
|
114
|
-
const
|
|
117
|
+
const loaded = step(
|
|
115
118
|
allFiles(s, shouldLoad),
|
|
116
|
-
files =>
|
|
117
|
-
return
|
|
118
|
-
|
|
119
|
-
entries =>
|
|
119
|
+
files => allOk(...files.map(loadFile)))
|
|
120
|
+
return mapStep(
|
|
121
|
+
loaded,
|
|
122
|
+
entries => fromEntries(
|
|
120
123
|
entries
|
|
121
124
|
.flat()
|
|
122
125
|
.map(([k, v]) => /** @type {const} */ ([relativize(prefix, k), v]))
|
|
123
126
|
.toSorted(([a], [b]) => strCmp(a)(b))
|
|
124
|
-
))
|
|
127
|
+
))
|
|
125
128
|
}
|
|
126
129
|
|
|
127
130
|
export const proof = {
|
|
@@ -145,7 +148,7 @@ export const proof = {
|
|
|
145
148
|
'd.mjs': [],
|
|
146
149
|
}
|
|
147
150
|
const [, result] = virtual({ ...emptyState, root })(allFiles('.', shouldLoad))
|
|
148
|
-
assertEq(result.join(','), './a.f.ts,./b.f.mjs,./c.f.mts')
|
|
151
|
+
assertEq(unwrap(result).join(','), './a.f.ts,./b.f.mjs,./c.f.mts')
|
|
149
152
|
},
|
|
150
153
|
allFilesSkipsNodeModules: () => {
|
|
151
154
|
// `node_modules` is skipped without descending into it, even though
|
|
@@ -156,7 +159,7 @@ export const proof = {
|
|
|
156
159
|
'a.f.ts': [],
|
|
157
160
|
}
|
|
158
161
|
const [, result] = virtual({ ...emptyState, root })(allFiles('.', shouldLoad))
|
|
159
|
-
assertEq(result.join(','), './a.f.ts')
|
|
162
|
+
assertEq(unwrap(result).join(','), './a.f.ts')
|
|
160
163
|
},
|
|
161
164
|
loadModuleMapDefaultsToCwdWhenInitCwdUnset: () => {
|
|
162
165
|
// With no `INIT_CWD` (e.g. `fjs t` invoked outside `npm run`), `env`
|
|
@@ -165,6 +168,33 @@ export const proof = {
|
|
|
165
168
|
/** @type {Dir} */
|
|
166
169
|
const root = { 'a.f.ts': () => ({}) }
|
|
167
170
|
const [, result] = virtual({ ...emptyState, root })(loadModuleMap({}))
|
|
168
|
-
assertEq(Object.keys(result).join(','), './a.f.ts')
|
|
171
|
+
assertEq(Object.keys(unwrap(result)).join(','), './a.f.ts')
|
|
172
|
+
},
|
|
173
|
+
loadModuleMapReportsUnreadableRoot: () => {
|
|
174
|
+
// A directory that cannot be listed is no longer a panic. Discovery
|
|
175
|
+
// hands the failure back, and the program that asked for the map is
|
|
176
|
+
// the one that decides what a source tree it cannot read means — for
|
|
177
|
+
// `fjs t` that is a message on `stderr` and exit `1`.
|
|
178
|
+
const [, result] = virtual({ ...emptyState, root: {} })(loadModuleMap({ INIT_CWD: 'missing' }))
|
|
179
|
+
assert(result[0] === 'error', result)
|
|
180
|
+
},
|
|
181
|
+
loadModuleMapReportsUnimportableModule: () => {
|
|
182
|
+
// The other half of the same breaking change, and the half `readdir`
|
|
183
|
+
// does not cover: discovery lists the file, then the import of it
|
|
184
|
+
// fails. `'a.f.ts': []` is content rather than a module, so the
|
|
185
|
+
// virtual runner's `import` refuses it. Without this, a `loadFile`
|
|
186
|
+
// that turned every import failure into a success would still pass
|
|
187
|
+
// every other proof here.
|
|
188
|
+
const [, result] = virtual({ ...emptyState, root: { 'a.f.ts': [] } })(loadModuleMap({}))
|
|
189
|
+
assert(result[0] === 'error', result)
|
|
190
|
+
},
|
|
191
|
+
loadModuleMapStripsInitCwdPrefix: () => {
|
|
192
|
+
// With `INIT_CWD` set (the normal `npm run` case), discovery starts
|
|
193
|
+
// from that subdirectory and each key is relativized against it, so
|
|
194
|
+
// keys are still `./`-relative to `INIT_CWD` rather than carrying it.
|
|
195
|
+
/** @type {Dir} */
|
|
196
|
+
const root = { 'sub': { 'a.f.ts': () => ({}) } }
|
|
197
|
+
const [, result] = virtual({ ...emptyState, root })(loadModuleMap({ INIT_CWD: 'sub' }))
|
|
198
|
+
assertEq(Object.keys(unwrap(result)).join(','), './a.f.ts')
|
|
169
199
|
},
|
|
170
200
|
}
|
|
@@ -2,15 +2,23 @@
|
|
|
2
2
|
* Synchronizes local development configuration generated from canonical repository files.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { IoChannel, Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts'
|
|
7
|
+
* @import { Effect } from '../../effects/types.ts'
|
|
5
8
|
*/
|
|
9
|
+
import type { IoChannel, Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts';
|
|
6
10
|
import type { Effect } from '../../effects/types.ts';
|
|
7
|
-
import type { Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts';
|
|
8
11
|
/**
|
|
9
12
|
* Regenerates VS Code's local MCP configuration from the canonical Copilot configuration.
|
|
10
13
|
*
|
|
11
|
-
*
|
|
14
|
+
* The source text is still needed after the directory has been created, so it
|
|
15
|
+
* is carried forward in a history rather than closed over by a nested
|
|
16
|
+
* continuation — and the history holds the text itself, not the `Result` the
|
|
17
|
+
* read returned.
|
|
18
|
+
*
|
|
19
|
+
* @type {() => Effect<Mkdir | ReadFile | WriteFile, void, IoChannel>}
|
|
12
20
|
*/
|
|
13
|
-
export declare const syncMcp: () => Effect<Mkdir | ReadFile | WriteFile, void>;
|
|
21
|
+
export declare const syncMcp: () => Effect<Mkdir | ReadFile | WriteFile, void, IoChannel>;
|
|
14
22
|
/**
|
|
15
23
|
* Runs all local development configuration generators.
|
|
16
24
|
*
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
* Synchronizes local development configuration generated from canonical repository files.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { IoChannel, Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts'
|
|
7
|
+
* @import { Effect } from '../../effects/types.ts'
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
/** @import { Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts' */
|
|
11
|
-
import { unwrap } from '../../types/result/module.f.mjs'
|
|
10
|
+
|
|
11
|
+
import { exitStep, mkdir, readUtf8File, writeUtf8File } from '../../effects/node/module.f.mjs'
|
|
12
|
+
import { history, historyStep, step } from '../../effects/module.f.mjs'
|
|
12
13
|
|
|
13
14
|
const source = /** @type {const} */ ('.copilot/mcp.json')
|
|
14
15
|
const targetDirectory = /** @type {const} */ ('.vscode')
|
|
@@ -17,15 +18,19 @@ const target = /** @type {const} */ ('.vscode/mcp.json')
|
|
|
17
18
|
/**
|
|
18
19
|
* Regenerates VS Code's local MCP configuration from the canonical Copilot configuration.
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
+
* The source text is still needed after the directory has been created, so it
|
|
22
|
+
* is carried forward in a history rather than closed over by a nested
|
|
23
|
+
* continuation — and the history holds the text itself, not the `Result` the
|
|
24
|
+
* read returned.
|
|
25
|
+
*
|
|
26
|
+
* @type {() => Effect<Mkdir | ReadFile | WriteFile, void, IoChannel>}
|
|
21
27
|
*/
|
|
22
28
|
export const syncMcp = () => {
|
|
23
|
-
const sourceText = history(
|
|
29
|
+
const sourceText = history(readUtf8File(source))
|
|
24
30
|
const targetDirectoryReady = historyStep(
|
|
25
31
|
sourceText,
|
|
26
|
-
() =>
|
|
27
|
-
|
|
28
|
-
return mapStep(targetWritten, unwrap)
|
|
32
|
+
() => mkdir(targetDirectory, { recursive: true }))
|
|
33
|
+
return step(targetDirectoryReady, ([, text]) => writeUtf8File(target, text))
|
|
29
34
|
}
|
|
30
35
|
|
|
31
36
|
/**
|
|
@@ -33,4 +38,4 @@ export const syncMcp = () => {
|
|
|
33
38
|
*
|
|
34
39
|
* @type {NodeProgram}
|
|
35
40
|
*/
|
|
36
|
-
export const main = () =>
|
|
41
|
+
export const main = () => exitStep(syncMcp())
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proofs for local development configuration generation.
|
|
3
|
+
*/
|
|
1
4
|
export declare const proof: {
|
|
2
5
|
syncMcp: () => void;
|
|
3
6
|
main: () => void;
|
|
4
|
-
|
|
5
|
-
missingSource: () => readonly [import("../../effects/node/virtual/types.ts").State, void];
|
|
6
|
-
};
|
|
7
|
+
missingSource: () => void;
|
|
7
8
|
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Proofs for local development configuration generation.
|
|
3
|
-
*
|
|
4
|
-
* @module
|
|
5
3
|
*/
|
|
4
|
+
|
|
5
|
+
import { exitCode } from '../../effects/node/module.f.mjs'
|
|
6
6
|
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
7
7
|
import { utf8 } from '../../text/module.f.mjs'
|
|
8
8
|
import { readUtf8File } from '../../effects/node/module.f.mjs'
|
|
9
9
|
import { defaultNodeProgramOptions, emptyState, virtual } from '../../effects/node/virtual/module.f.mjs'
|
|
10
10
|
import { main, syncMcp } from './module.f.mjs'
|
|
11
|
-
import { step } from '../../effects/module.f.mjs'
|
|
11
|
+
import { step as ioStep } from '../../effects/module.f.mjs'
|
|
12
12
|
|
|
13
13
|
const mcp = /** @type {const} */ ('{"servers":{}}')
|
|
14
14
|
const initial = /** @type {const} */ ({
|
|
@@ -21,16 +21,20 @@ const initial = /** @type {const} */ ({
|
|
|
21
21
|
})
|
|
22
22
|
export const proof = {
|
|
23
23
|
syncMcp: () => {
|
|
24
|
-
const generatedMcp =
|
|
24
|
+
const generatedMcp = ioStep(syncMcp(), () => readUtf8File('.vscode/mcp.json'))
|
|
25
25
|
const [, [tag, result]] = virtual(initial)(generatedMcp)
|
|
26
26
|
assert(tag === 'ok', result)
|
|
27
27
|
assertEq(result, mcp)
|
|
28
28
|
},
|
|
29
29
|
main: () => {
|
|
30
30
|
const [, result] = virtual(initial)(main(defaultNodeProgramOptions))
|
|
31
|
-
assertEq(result, 0)
|
|
31
|
+
assertEq(exitCode(result), 0)
|
|
32
32
|
},
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
// A missing source is no longer a panic: it propagates through the chain
|
|
34
|
+
// and the program reports it and exits 1.
|
|
35
|
+
missingSource: () => {
|
|
36
|
+
const [state, code] = virtual(emptyState)(main(defaultNodeProgramOptions))
|
|
37
|
+
assertEq(exitCode(code), 1)
|
|
38
|
+
assertEq(state.stderr, 'no such file or directory\n', state.stderr)
|
|
35
39
|
},
|
|
36
40
|
}
|
package/fjs/djs/module.f.d.mts
CHANGED
|
@@ -3,15 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*
|
|
6
|
-
* @import { Effect } from '../effects/types.ts'
|
|
7
6
|
* @import { WriteFile, ReadFile, Write } from '../effects/node/types.ts'
|
|
8
7
|
* @import { Result } from '../types/result/types.ts'
|
|
9
8
|
* @import { Unknown } from './types.ts'
|
|
10
9
|
* @import { ParseError } from './parser/types.ts'
|
|
10
|
+
* @import { Effect } from '../effects/types.ts'
|
|
11
11
|
*/
|
|
12
|
-
import type { Effect } from '../effects/types.ts';
|
|
13
12
|
import type { WriteFile, ReadFile, Write } from '../effects/node/types.ts';
|
|
13
|
+
import type { Effect } from '../effects/types.ts';
|
|
14
14
|
export type _CompileOp = ReadFile | WriteFile | Write;
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Compiles the DJS module `args[0]` into `args[1]`, serializing as a JSON tree
|
|
17
|
+
* when the output name ends with `.json` and as a module otherwise.
|
|
18
|
+
*
|
|
19
|
+
* Returns the process exit code: `0` once the output file is written, `1` on
|
|
20
|
+
* every failure — too few arguments, a missing input file, or a parse error —
|
|
21
|
+
* so a caller can detect a failed compile from the exit status alone.
|
|
22
|
+
*
|
|
23
|
+
* @type {(args: readonly string[]) => Effect<_CompileOp, 0, number>}
|
|
24
|
+
*/
|
|
25
|
+
export declare const compile: (args: readonly string[]) => Effect<_CompileOp, 0, number>;
|
package/fjs/djs/module.f.mjs
CHANGED
|
@@ -3,45 +3,60 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*
|
|
6
|
-
* @import { Effect } from '../effects/types.ts'
|
|
7
6
|
* @import { WriteFile, ReadFile, Write } from '../effects/node/types.ts'
|
|
8
7
|
* @import { Result } from '../types/result/types.ts'
|
|
9
8
|
* @import { Unknown } from './types.ts'
|
|
10
9
|
* @import { ParseError } from './parser/types.ts'
|
|
10
|
+
* @import { Effect } from '../effects/types.ts'
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { transpile } from './transpiler/module.f.mjs'
|
|
14
14
|
import { stringify, stringifyAsTree } from './serializer/module.f.mjs'
|
|
15
15
|
import { sort } from '../types/object/module.f.mjs'
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
16
|
+
import { resultStep } from '../effects/module.f.mjs'
|
|
17
|
+
import { errorExit, exitStep, writeUtf8File } from '../effects/node/module.f.mjs'
|
|
18
18
|
|
|
19
19
|
/** @typedef {ReadFile | WriteFile | Write} _CompileOp */
|
|
20
20
|
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Where an error happened, as much of it as is known: the token's
|
|
23
|
+
* `path:line:column` when the reader tracks positions, and otherwise the name
|
|
24
|
+
* of the file being compiled. A `.json` input is read by `fjs/media/json`,
|
|
25
|
+
* whose errors carry no position, and a missing file or a circular dependency
|
|
26
|
+
* has no token to point at either.
|
|
27
|
+
*
|
|
28
|
+
* @type {(inputFileName: string) => (parseError: ParseError) => string}
|
|
29
|
+
*/
|
|
30
|
+
const errorLocation = inputFileName => ({ metadata }) => metadata === null
|
|
31
|
+
? inputFileName
|
|
32
|
+
: `${metadata.path}:${metadata.line}:${metadata.column}`
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Compiles the DJS module `args[0]` into `args[1]`, serializing as a JSON tree
|
|
36
|
+
* when the output name ends with `.json` and as a module otherwise.
|
|
37
|
+
*
|
|
38
|
+
* Returns the process exit code: `0` once the output file is written, `1` on
|
|
39
|
+
* every failure — too few arguments, a missing input file, or a parse error —
|
|
40
|
+
* so a caller can detect a failed compile from the exit status alone.
|
|
41
|
+
*
|
|
42
|
+
* @type {(args: readonly string[]) => Effect<_CompileOp, 0, number>}
|
|
43
|
+
*/
|
|
22
44
|
export const compile = args => {
|
|
23
45
|
if (args.length < 2) {
|
|
24
|
-
return
|
|
25
|
-
error('Error: Requires 2 or more arguments'),
|
|
26
|
-
() => pure(1))
|
|
46
|
+
return errorExit('Error: Requires 2 or more arguments')
|
|
27
47
|
}
|
|
28
48
|
const inputFileName = args[0]
|
|
29
49
|
const outputFileName = args[1]
|
|
30
|
-
return
|
|
50
|
+
return resultStep(
|
|
31
51
|
transpile(inputFileName),
|
|
32
|
-
/** @type {(result: Result<Unknown, ParseError>) => Effect<_CompileOp, number>} */
|
|
52
|
+
/** @type {(result: Result<Unknown, ParseError>) => Effect<_CompileOp, 0, number>} */
|
|
33
53
|
(result) => {
|
|
34
54
|
if (result[0] === 'error') {
|
|
35
|
-
|
|
36
|
-
return step(
|
|
37
|
-
error(`${metadata?.path}:${metadata?.line}:${metadata?.column} - error: ${result[1].message}`),
|
|
38
|
-
() => pure(0))
|
|
55
|
+
return errorExit(`${errorLocation(inputFileName)(result[1])} - error: ${result[1].message}`)
|
|
39
56
|
}
|
|
40
57
|
const content = outputFileName.endsWith('.json')
|
|
41
58
|
? stringifyAsTree(sort)(result[1])
|
|
42
59
|
: stringify(sort)(result[1])
|
|
43
|
-
return
|
|
44
|
-
writeUtf8File(outputFileName, content),
|
|
45
|
-
() => pure(0))
|
|
60
|
+
return exitStep(writeUtf8File(outputFileName, content))
|
|
46
61
|
})
|
|
47
62
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @import { OrderedMap } from '../../types/ordered_map/types.ts'
|
|
11
11
|
* @import { AstArray, AstConst, AstModule, AstModuleRef } from '../ast/types.ts'
|
|
12
12
|
* @import { TokenMetadata } from '../../js/tokenizer/types.ts'
|
|
13
|
-
* @import { ParseError } from './types.ts'
|
|
13
|
+
* @import { ParseError, _ValueToken } from './types.ts'
|
|
14
14
|
*/
|
|
15
15
|
import type { Result } from '../../types/result/types.ts';
|
|
16
16
|
import type { List } from '../../types/list/types.ts';
|
|
@@ -48,10 +48,11 @@ export type _ExportState = {
|
|
|
48
48
|
readonly state: 'export';
|
|
49
49
|
readonly module: _ModuleState;
|
|
50
50
|
};
|
|
51
|
+
export type _ValueState = '' | '[' | '[v' | '[,' | '{' | '{[' | '{[k' | '{k' | '{:' | '{v' | '{,';
|
|
51
52
|
export type _ParseValueState = {
|
|
52
53
|
readonly state: 'constValue' | 'exportValue';
|
|
53
54
|
readonly module: _ModuleState;
|
|
54
|
-
readonly valueState:
|
|
55
|
+
readonly valueState: _ValueState;
|
|
55
56
|
readonly top: _DjsStackElement | null;
|
|
56
57
|
readonly stack: _DjsStack;
|
|
57
58
|
};
|
|
@@ -63,7 +64,16 @@ export type _ErrorState = {
|
|
|
63
64
|
readonly state: 'error';
|
|
64
65
|
readonly error: ParseError;
|
|
65
66
|
};
|
|
66
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Reads the token list as a FunctionalScript module: `import` statements, then
|
|
69
|
+
* `const` statements, then one `export default`.
|
|
70
|
+
*
|
|
71
|
+
* This is the only language the parser reads. A JSON document is data, not a
|
|
72
|
+
* module, and `fjs/media/json` is its reader
|
|
73
|
+
* ([spec: JSON input](../../../spec/README.md#json-input)).
|
|
74
|
+
*
|
|
75
|
+
* @type {(tokenList: List<DjsTokenWithMetadata>) => Result<AstModule, ParseError>}
|
|
76
|
+
*/
|
|
67
77
|
export declare const parseFromTokens: (tokenList: List<DjsTokenWithMetadata>) => Result<AstModule, ParseError>;
|
|
68
78
|
export declare const proof: {
|
|
69
79
|
pushKey: {
|
|
@@ -72,4 +82,7 @@ export declare const proof: {
|
|
|
72
82
|
endArray: {
|
|
73
83
|
nonArrayTop: () => void;
|
|
74
84
|
};
|
|
85
|
+
endObject: {
|
|
86
|
+
nonObjectTop: () => void;
|
|
87
|
+
};
|
|
75
88
|
};
|