functionalscript 0.37.0 → 0.39.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 +1 -1
- package/{fs → fjs}/asn.1/proof.f.js +32 -94
- package/fjs/asserts/module.f.d.ts +36 -0
- package/fjs/asserts/module.f.js +39 -0
- package/fjs/asserts/proof.f.d.ts +11 -0
- package/fjs/asserts/proof.f.js +18 -0
- package/{fs → fjs}/base_n/proof.f.js +12 -36
- package/{fs → fjs}/basen/base64/proof.f.d.ts +1 -0
- package/{fs → fjs}/basen/base64/proof.f.js +15 -1
- package/{fs → fjs}/basen/cbase32/proof.f.js +15 -42
- package/fjs/bnf/data/module.f.d.ts +52 -0
- package/{fs → fjs}/bnf/data/module.f.js +53 -3
- package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
- package/{fs → fjs}/bnf/data/proof.f.js +54 -19
- package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
- package/fjs/bnf/descent/module.f.js +124 -0
- package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
- package/{fs → fjs}/bnf/descent/proof.f.js +55 -24
- package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
- package/{fs → fjs}/bnf/ll1/module.f.js +7 -5
- package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
- package/{fs → fjs}/bnf/ll1/proof.f.js +27 -10
- package/{fs → fjs}/bnf/module.f.d.ts +19 -5
- package/{fs → fjs}/bnf/module.f.js +10 -11
- package/fjs/bnf/proof.f.js +69 -0
- package/{fs → fjs}/bnf/testlib.f.js +2 -2
- package/fjs/bnf/token_symbol/module.f.d.ts +38 -0
- package/fjs/bnf/token_symbol/module.f.js +48 -0
- package/fjs/bnf/token_symbol/proof.f.d.ts +10 -0
- package/fjs/bnf/token_symbol/proof.f.js +37 -0
- package/{fs → fjs}/cas/cli/module.f.js +6 -9
- package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
- package/{fs → fjs}/cas/cli/proof.f.js +29 -66
- package/fjs/cas/evo/mcp/module.f.d.ts +27 -0
- package/fjs/cas/evo/mcp/module.f.js +94 -0
- package/fjs/cas/evo/mcp/proof.f.d.ts +11 -0
- package/fjs/cas/evo/mcp/proof.f.js +126 -0
- package/fjs/cas/evo/module.f.d.ts +202 -0
- package/fjs/cas/evo/module.f.js +421 -0
- package/fjs/cas/evo/proof.f.d.ts +39 -0
- package/fjs/cas/evo/proof.f.js +572 -0
- package/fjs/cas/mcp/module.f.d.ts +49 -0
- package/{fs → fjs}/cas/mcp/module.f.js +61 -81
- package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
- package/{fs → fjs}/cas/mcp/proof.f.js +45 -17
- package/{fs → fjs}/cas/module.f.d.ts +10 -0
- package/{fs → fjs}/cas/module.f.js +89 -36
- package/fjs/cas/proof.f.d.ts +18 -0
- package/fjs/cas/proof.f.js +305 -0
- package/{fs → fjs}/ci/bun/module.f.js +3 -3
- package/{fs → fjs}/ci/common/module.f.d.ts +1 -2
- package/{fs → fjs}/ci/common/module.f.js +1 -5
- package/{fs → fjs}/ci/config/module.f.d.ts +8 -8
- package/{fs → fjs}/ci/config/module.f.js +8 -8
- package/{fs → fjs}/ci/deno/module.f.js +3 -3
- package/{fs → fjs}/ci/module.f.js +3 -4
- package/{fs → fjs}/ci/node/module.f.js +11 -9
- package/{fs → fjs}/ci/proof.f.js +16 -9
- package/{fs → fjs}/ci/rust/module.f.js +9 -1
- package/{fs → fjs}/cli/module.f.js +2 -2
- package/{fs → fjs}/cli/proof.f.js +22 -63
- package/{fs → fjs}/common/monoid/module.f.d.ts +46 -2
- package/fjs/common/monoid/module.f.js +88 -0
- package/fjs/common/monoid/proof.f.d.ts +9 -0
- package/fjs/common/monoid/proof.f.js +48 -0
- package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
- package/fjs/crypto/pow/proof.f.js +111 -0
- package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
- package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
- package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
- package/{fs → fjs}/crypto/sign/module.f.js +7 -4
- package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
- package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
- package/{fs → fjs}/dev/module.f.js +25 -25
- package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
- package/{fs → fjs}/dev/proof.f.js +2 -4
- package/{fs → fjs}/djs/ast/proof.f.js +4 -12
- package/{fs → fjs}/djs/module.f.js +5 -8
- package/{fs → fjs}/djs/parser/module.f.d.ts +8 -0
- package/{fs → fjs}/djs/parser/module.f.js +37 -0
- package/{fs → fjs}/djs/parser/proof.f.js +138 -400
- package/{fs → fjs}/djs/proof.f.js +13 -36
- package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
- package/fjs/djs/tokenizer/module.f.d.ts +24 -0
- package/fjs/djs/tokenizer/module.f.js +472 -0
- package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
- package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
- package/{fs → fjs}/djs/transpiler/module.f.js +6 -6
- package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
- package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
- package/fjs/effects/eff/module.f.d.ts +72 -0
- package/fjs/effects/eff/module.f.js +46 -0
- package/fjs/effects/eff/proof.f.d.ts +11 -0
- package/fjs/effects/eff/proof.f.js +58 -0
- package/{fs → fjs}/effects/list/module.f.d.ts +11 -5
- package/{fs → fjs}/effects/list/module.f.js +2 -1
- package/{fs → fjs}/effects/memory/proof.f.js +15 -29
- package/fjs/effects/module.f.d.ts +388 -0
- package/fjs/effects/module.f.js +288 -0
- package/{fs → fjs}/effects/node/memory/proof.js +7 -13
- package/{fs → fjs}/effects/node/module.d.ts +1 -1
- package/{fs → fjs}/effects/node/module.f.d.ts +2 -2
- package/{fs → fjs}/effects/node/module.f.js +9 -11
- package/{fs → fjs}/effects/node/module.js +3 -3
- package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
- package/{fs → fjs}/effects/node/proof.f.js +121 -299
- package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
- package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
- package/fjs/effects/proof.f.d.ts +51 -0
- package/fjs/effects/proof.f.js +178 -0
- package/{fs → fjs}/emergent_testing/module.f.js +55 -39
- package/{fs → fjs}/emergent_testing/proof.f.d.ts +4 -0
- package/{fs → fjs}/emergent_testing/proof.f.js +60 -27
- package/{fs → fjs}/fsc/proof.f.js +12 -34
- package/{fs → fjs}/fsm/proof.f.js +5 -12
- package/{fs → fjs}/mcp/module.f.d.ts +7 -0
- package/{fs → fjs}/mcp/module.f.js +17 -10
- package/{fs → fjs}/mcp/proof.f.js +17 -16
- package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
- package/{fs → fjs}/mcp/stdio/module.f.js +14 -14
- package/{fs → fjs}/media/html/proof.f.js +12 -33
- package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
- package/{fs → fjs}/media/json/parser/module.f.js +14 -0
- package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
- package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
- package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
- package/{fs → fjs}/media/json/schema/module.f.js +23 -39
- package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
- package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
- package/{fs → fjs}/media/module.f.d.ts +6 -6
- package/{fs → fjs}/media/module.f.js +3 -4
- package/{fs → fjs}/media/proof.f.js +5 -4
- package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
- package/{fs → fjs}/media/revision/module.f.js +35 -23
- package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
- package/fjs/media/revision/proof.f.js +140 -0
- package/{fs → fjs}/media/type/module.f.js +2 -2
- package/{fs → fjs}/media/type/proof.f.js +8 -15
- package/{fs → fjs}/module.f.js +5 -9
- package/{fs → fjs}/path/proof.f.js +27 -78
- package/{fs → fjs}/proof.f.js +2 -0
- package/{fs → fjs}/sul/id/proof.f.js +7 -21
- package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
- package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
- package/fjs/text/ascii/proof.f.d.ts +6 -0
- package/{fs → fjs}/text/ascii/proof.f.js +4 -14
- package/{fs → fjs}/text/code_point/module.f.js +10 -10
- package/{fs → fjs}/text/proof.f.js +4 -9
- package/{fs → fjs}/text/sgr/proof.f.js +6 -15
- package/{fs → fjs}/text/utf16/module.f.js +1 -1
- package/{fs → fjs}/text/utf16/proof.f.js +23 -66
- package/{fs → fjs}/text/utf8/proof.f.js +56 -125
- package/{fs → fjs}/types/array/proof.f.js +18 -52
- package/fjs/types/bigfloat/proof.f.js +217 -0
- package/{fs → fjs}/types/bigint/module.f.js +4 -3
- package/{fs → fjs}/types/bigint/proof.f.js +49 -145
- package/{fs → fjs}/types/bit_vec/module.f.js +5 -15
- package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
- package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
- package/{fs → fjs}/types/btree/proof.f.js +5 -12
- package/{fs → fjs}/types/btree/remove/module.f.d.ts +5 -0
- package/{fs → fjs}/types/btree/remove/module.f.js +12 -0
- package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
- package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
- package/{fs → fjs}/types/btree/set/module.f.js +5 -2
- package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
- package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
- package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
- package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
- package/{fs → fjs}/types/function/proof.f.js +2 -3
- package/{fs → fjs}/types/list/module.f.d.ts +21 -0
- package/{fs → fjs}/types/list/module.f.js +17 -0
- package/{fs → fjs}/types/list/proof.f.d.ts +1 -0
- package/{fs → fjs}/types/list/proof.f.js +79 -164
- package/{fs → fjs}/types/map/proof.f.js +4 -12
- package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
- package/{fs → fjs}/types/nominal/proof.f.js +5 -10
- package/fjs/types/nullable/proof.f.js +29 -0
- package/{fs → fjs}/types/number/module.f.js +2 -1
- package/{fs → fjs}/types/number/proof.f.js +9 -24
- package/{fs → fjs}/types/object/proof.f.js +3 -6
- package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
- package/{fs → fjs}/types/prime_field/module.f.js +2 -7
- package/{fs → fjs}/types/range/module.f.d.ts +1 -1
- package/fjs/types/range/module.f.js +2 -0
- package/fjs/types/range/proof.f.js +9 -0
- package/{fs → fjs}/types/range_map/proof.f.js +28 -81
- package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
- package/fjs/types/result/proof.f.js +31 -0
- package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
- package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
- package/fjs/types/rtti/common/proof.f.d.ts +8 -0
- package/fjs/types/rtti/common/proof.f.js +51 -0
- package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
- package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
- package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
- package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
- package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
- package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
- package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
- package/{fs → fjs}/types/string/module.f.js +10 -2
- package/fjs/types/string/proof.f.js +77 -0
- package/fjs/types/string_set/proof.f.js +43 -0
- package/{fs → fjs}/types/ts/proof.f.js +15 -42
- package/{fs → fjs}/types/uint8array/module.f.js +7 -7
- package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
- package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
- package/{fs → fjs}/website/module.f.js +2 -3
- package/{fs → fjs}/website/proof.f.js +3 -6
- package/package.json +8 -8
- package/fs/asserts/module.f.d.ts +0 -4
- package/fs/asserts/module.f.js +0 -9
- package/fs/asserts/proof.f.d.ts +0 -8
- package/fs/asserts/proof.f.js +0 -51
- package/fs/bnf/data/module.f.d.ts +0 -30
- package/fs/bnf/descent/module.f.js +0 -119
- package/fs/bnf/proof.f.js +0 -104
- package/fs/cas/mcp/module.f.d.ts +0 -36
- package/fs/cas/proof.f.d.ts +0 -20
- package/fs/cas/proof.f.js +0 -294
- package/fs/common/monoid/module.f.js +0 -44
- package/fs/common/monoid/proof.f.d.ts +0 -4
- package/fs/common/monoid/proof.f.js +0 -27
- package/fs/crypto/pow/proof.f.js +0 -161
- package/fs/djs/tokenizer/module.f.d.ts +0 -12
- package/fs/djs/tokenizer/module.f.js +0 -62
- package/fs/djs/tokenizer/proof.f.d.ts +0 -7
- package/fs/djs/tokenizer/proof.f.js +0 -543
- package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
- package/fs/djs/tokenizer-new/module.f.js +0 -155
- package/fs/effects/module.f.d.ts +0 -106
- package/fs/effects/module.f.js +0 -80
- package/fs/effects/proof.f.d.ts +0 -25
- package/fs/effects/proof.f.js +0 -115
- package/fs/media/revision/proof.f.js +0 -119
- package/fs/text/ascii/proof.f.d.ts +0 -4
- package/fs/types/bigfloat/proof.f.js +0 -348
- package/fs/types/nullable/proof.f.js +0 -50
- package/fs/types/range/module.f.js +0 -2
- package/fs/types/range/proof.f.js +0 -18
- package/fs/types/result/proof.f.js +0 -52
- package/fs/types/string/proof.f.js +0 -118
- package/fs/types/string_set/proof.f.js +0 -82
- /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
- /package/{fs → fjs}/asn.1/module.f.js +0 -0
- /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
- /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
- /package/{fs → fjs}/base_n/module.f.js +0 -0
- /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
- /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
- /package/{fs → fjs}/basen/base128/module.f.js +0 -0
- /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
- /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
- /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
- /package/{fs → fjs}/basen/base64/module.f.js +0 -0
- /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
- /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
- /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
- /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
- /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
- /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
- /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
- /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
- /package/{fs → fjs}/ci/module.f.d.ts +0 -0
- /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
- /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
- /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
- /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
- /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
- /package/{fs → fjs}/cli/module.f.d.ts +0 -0
- /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
- /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
- /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
- /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
- /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
- /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
- /package/{fs → fjs}/dev/module.f.d.ts +0 -0
- /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
- /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
- /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
- /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
- /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
- /package/{fs → fjs}/djs/ast/module.f.js +0 -0
- /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
- /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
- /package/{fs → fjs}/djs/examples/input.f.js +0 -0
- /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
- /package/{fs → fjs}/djs/examples/m.f.js +0 -0
- /package/{fs → fjs}/djs/module.f.d.ts +0 -0
- /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
- /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
- /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
- /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
- /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
- /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
- /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
- /package/{fs → fjs}/effects/memory/module.f.js +0 -0
- /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
- /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
- /package/{fs → fjs}/effects/mock/module.f.js +0 -0
- /package/{fs → fjs}/effects/module.d.ts +0 -0
- /package/{fs → fjs}/effects/module.js +0 -0
- /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
- /package/{fs → fjs}/effects/node/memory/module.js +0 -0
- /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
- /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
- /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
- /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
- /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
- /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
- /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
- /package/{fs → fjs}/fsc/bnf.f.js +0 -0
- /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
- /package/{fs → fjs}/fsc/json.f.js +0 -0
- /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
- /package/{fs → fjs}/fsc/module.f.js +0 -0
- /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
- /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
- /package/{fs → fjs}/fsm/module.f.js +0 -0
- /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
- /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
- /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
- /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
- /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
- /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
- /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
- /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
- /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
- /package/{fs → fjs}/media/html/module.f.js +0 -0
- /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/module.f.js +0 -0
- /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/proof.f.js +0 -0
- /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
- /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
- /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
- /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
- /package/{fs → fjs}/media/proof.f.d.ts +0 -0
- /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
- /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
- /package/{fs → fjs}/module.d.ts +0 -0
- /package/{fs → fjs}/module.f.d.ts +0 -0
- /package/{fs → fjs}/module.js +0 -0
- /package/{fs → fjs}/path/module.f.d.ts +0 -0
- /package/{fs → fjs}/path/module.f.js +0 -0
- /package/{fs → fjs}/path/proof.f.d.ts +0 -0
- /package/{fs → fjs}/proof.f.d.ts +0 -0
- /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
- /package/{fs → fjs}/sul/id/module.f.js +0 -0
- /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
- /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
- /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
- /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
- /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
- /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
- /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
- /package/{fs → fjs}/sul/module.f.d.ts +0 -0
- /package/{fs → fjs}/sul/module.f.js +0 -0
- /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
- /package/{fs → fjs}/sul/proof.f.js +0 -0
- /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
- /package/{fs → fjs}/text/ascii/module.f.js +0 -0
- /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
- /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
- /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
- /package/{fs → fjs}/text/module.f.d.ts +0 -0
- /package/{fs → fjs}/text/module.f.js +0 -0
- /package/{fs → fjs}/text/proof.f.d.ts +0 -0
- /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
- /package/{fs → fjs}/text/sgr/module.f.js +0 -0
- /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
- /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
- /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
- /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
- /package/{fs → fjs}/text/utf8/module.f.js +0 -0
- /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/array/module.f.js +0 -0
- /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
- /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
- /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/module.f.js +0 -0
- /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
- /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
- /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
- /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/function/module.f.js +0 -0
- /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
- /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/map/module.f.js +0 -0
- /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
- /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/nominal/module.f.js +0 -0
- /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/nullable/module.f.js +0 -0
- /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/object/module.f.js +0 -0
- /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/option/module.f.js +0 -0
- /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
- /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
- /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
- /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/phantom/module.f.js +0 -0
- /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
- /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/range_map/module.f.js +0 -0
- /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/result/module.d.ts +0 -0
- /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/result/module.f.js +0 -0
- /package/{fs → fjs}/types/result/module.js +0 -0
- /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/rtti/module.f.js +0 -0
- /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
- /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
- /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
- /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
- /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
- /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/string_set/module.f.js +0 -0
- /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/ts/module.f.js +0 -0
- /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
- /package/{fs → fjs}/website/module.f.d.ts +0 -0
- /package/{fs → fjs}/website/proof.f.d.ts +0 -0
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Experimental DJS parser implementation.
|
|
3
|
-
*
|
|
4
|
-
* @module
|
|
5
|
-
*/
|
|
6
|
-
import { descentParser } from "../../bnf/descent/module.f.js";
|
|
7
|
-
import { eof, join0Plus, max, none, not, notSet, oneEncode, option, range, remove, repeat, repeat0Plus, repeat1Plus, set, unicodeRange } from "../../bnf/module.f.js";
|
|
8
|
-
import { todo } from "../../asserts/module.f.js";
|
|
9
|
-
export const parse = (input) => {
|
|
10
|
-
const m = descentParser(jsGrammar());
|
|
11
|
-
return todo();
|
|
12
|
-
};
|
|
13
|
-
export const jsGrammar = () => {
|
|
14
|
-
const onenine = range('19');
|
|
15
|
-
const digit = range('09');
|
|
16
|
-
const string = [
|
|
17
|
-
'"',
|
|
18
|
-
repeat0Plus({
|
|
19
|
-
...remove(range(` ${max}`), set('"\\')),
|
|
20
|
-
escape: [
|
|
21
|
-
'\\',
|
|
22
|
-
{
|
|
23
|
-
...set('"\\bfnrt'),
|
|
24
|
-
solidus: '/',
|
|
25
|
-
u: [
|
|
26
|
-
'u',
|
|
27
|
-
...repeat(4)({
|
|
28
|
-
digit,
|
|
29
|
-
AF: range('AF'),
|
|
30
|
-
af: range('af'),
|
|
31
|
-
})
|
|
32
|
-
],
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
}),
|
|
36
|
-
'"'
|
|
37
|
-
];
|
|
38
|
-
const digits0 = repeat0Plus(digit);
|
|
39
|
-
const digits = [digit, digits0];
|
|
40
|
-
const number = [
|
|
41
|
-
{
|
|
42
|
-
0: '0',
|
|
43
|
-
onenine: [onenine, digits0],
|
|
44
|
-
},
|
|
45
|
-
option({
|
|
46
|
-
bigint: 'n',
|
|
47
|
-
frac: [
|
|
48
|
-
option(['.', digits]),
|
|
49
|
-
option([set('Ee'), option(set('+-')), digits])
|
|
50
|
-
]
|
|
51
|
-
})
|
|
52
|
-
];
|
|
53
|
-
const ws = set(' \t');
|
|
54
|
-
const newLine = set('\n\r');
|
|
55
|
-
const idStart = {
|
|
56
|
-
smallLetter: range('az'),
|
|
57
|
-
bigLetter: range('AZ'),
|
|
58
|
-
lowLine: '_',
|
|
59
|
-
dollarSign: '$'
|
|
60
|
-
};
|
|
61
|
-
const idChar = {
|
|
62
|
-
...idStart,
|
|
63
|
-
digit
|
|
64
|
-
};
|
|
65
|
-
const id = [idStart, repeat0Plus(idChar)];
|
|
66
|
-
const operator = {
|
|
67
|
-
'.': '.',
|
|
68
|
-
'=>': '=>',
|
|
69
|
-
'===': '===',
|
|
70
|
-
'==': '==',
|
|
71
|
-
'=': '=',
|
|
72
|
-
'!==': '!==',
|
|
73
|
-
'!=': '!=',
|
|
74
|
-
'!': '!',
|
|
75
|
-
'>>>=': '>>>=',
|
|
76
|
-
'>>>': '>>>',
|
|
77
|
-
'>>=': '>>=',
|
|
78
|
-
'>>': '>>',
|
|
79
|
-
'>=': '>=',
|
|
80
|
-
'>': '>',
|
|
81
|
-
'<<<<=': '<<<=',
|
|
82
|
-
'<<<': '<<<',
|
|
83
|
-
'<<=': '<<=',
|
|
84
|
-
'<<': '<<',
|
|
85
|
-
'<=': '<=',
|
|
86
|
-
'<': '<',
|
|
87
|
-
'+=': '+=',
|
|
88
|
-
'++': '++',
|
|
89
|
-
'+': '+',
|
|
90
|
-
'-=': '-=',
|
|
91
|
-
'--': '--',
|
|
92
|
-
'-': '-',
|
|
93
|
-
'**=': '**=',
|
|
94
|
-
'**': '**',
|
|
95
|
-
'*=': '*=',
|
|
96
|
-
'*': '*',
|
|
97
|
-
'/=': '/=',
|
|
98
|
-
'/': '/',
|
|
99
|
-
'%=': '%=',
|
|
100
|
-
'%': '%',
|
|
101
|
-
'&&=': '&&=',
|
|
102
|
-
'&&': '&&',
|
|
103
|
-
'&=': '&=',
|
|
104
|
-
'&': '&',
|
|
105
|
-
'||=': '||=',
|
|
106
|
-
'||': '||',
|
|
107
|
-
'|=': '|=',
|
|
108
|
-
'|': '|',
|
|
109
|
-
'^=': '^=',
|
|
110
|
-
'^': '^',
|
|
111
|
-
'~': '~',
|
|
112
|
-
'??=': '??=',
|
|
113
|
-
'??': '??',
|
|
114
|
-
'?.': '?.',
|
|
115
|
-
'?': '?',
|
|
116
|
-
'[': '[',
|
|
117
|
-
']': ']',
|
|
118
|
-
'{': '{',
|
|
119
|
-
'}': '}',
|
|
120
|
-
'(': '(',
|
|
121
|
-
')': ')',
|
|
122
|
-
',': ',',
|
|
123
|
-
':': ':'
|
|
124
|
-
};
|
|
125
|
-
const commentEnd = {
|
|
126
|
-
...newLine,
|
|
127
|
-
eof
|
|
128
|
-
};
|
|
129
|
-
const comment = ['/', {
|
|
130
|
-
// TODO: investigate why `not(commentEnd)` instead of `remove(unicodeRange, newLine)` fail tests.
|
|
131
|
-
// TODO: should it be `repeat0Plus(not(commentEnd))` instead of `option(remove(unicodeRange, newLine))`.
|
|
132
|
-
oneline: ['/', option(remove(unicodeRange, newLine)), commentEnd],
|
|
133
|
-
multiline: [
|
|
134
|
-
'*',
|
|
135
|
-
repeat0Plus({
|
|
136
|
-
na: notSet('*'),
|
|
137
|
-
a: ['*', notSet('/')]
|
|
138
|
-
}),
|
|
139
|
-
'*/'
|
|
140
|
-
]
|
|
141
|
-
}
|
|
142
|
-
];
|
|
143
|
-
const token = {
|
|
144
|
-
number,
|
|
145
|
-
string,
|
|
146
|
-
id,
|
|
147
|
-
comment,
|
|
148
|
-
operator,
|
|
149
|
-
ws,
|
|
150
|
-
newLine,
|
|
151
|
-
eof
|
|
152
|
-
};
|
|
153
|
-
const tokens = repeat0Plus(token);
|
|
154
|
-
return tokens;
|
|
155
|
-
};
|
package/fs/effects/module.f.d.ts
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core effect type constructors and combinators.
|
|
3
|
-
*
|
|
4
|
-
* Effect helpers are **step adapters**: functions that return a continuation
|
|
5
|
-
* `(t: T) => Effect<Q, R>` meant to be passed into `.step`, never wrappers
|
|
6
|
-
* that take the effect itself as an argument. `Effect` has no pipeline
|
|
7
|
-
* operator to lean on and must not be extended with new methods, so
|
|
8
|
-
* `.step(adapterA).step(adapterB)` is how helpers compose — flat,
|
|
9
|
-
* left-to-right, in evaluation order. See {@link okStep} for an example.
|
|
10
|
-
*
|
|
11
|
-
* @module
|
|
12
|
-
*/
|
|
13
|
-
import { type List } from '../types/list/module.f.ts';
|
|
14
|
-
import type { Result } from '../types/result/module.f.ts';
|
|
15
|
-
export type Operation = readonly [string, (..._: readonly never[]) => unknown];
|
|
16
|
-
export type Effect<O extends Operation, T> = {
|
|
17
|
-
value: Value<O, T>;
|
|
18
|
-
step: <Q extends Operation, R>(f: (p: T) => Effect<Q, R>) => Effect<O | Q, R>;
|
|
19
|
-
};
|
|
20
|
-
export type Value<O extends Operation, T> = Pure<T> | Do<O, T>;
|
|
21
|
-
export type Pure<T> = () => T;
|
|
22
|
-
export type DoKPR<O extends Operation, T, K extends string, PR extends readonly [unknown, unknown]> = readonly [K, PR[0], (_: PR[1]) => Effect<O, T>];
|
|
23
|
-
export type Pr<O extends Operation, K extends O[0]> = O extends readonly [K, (...args: infer P) => infer R] ? readonly [P, R] : never;
|
|
24
|
-
export type DoK<O extends Operation, T, K extends O[0]> = DoKPR<O, T, K, Pr<O, K>>;
|
|
25
|
-
export type Do<O extends Operation, T> = DoK<O, T, O[0]>;
|
|
26
|
-
export declare const pure: <T>(v: T) => Effect<never, T>;
|
|
27
|
-
/**
|
|
28
|
-
* A lazy pure effect. Like {@link pure}, but takes a thunk and evaluates it on
|
|
29
|
-
* demand instead of holding an already-computed value. Use this to produce the
|
|
30
|
-
* next item of a list without instantiating the rest — the thunk runs only when
|
|
31
|
-
* the effect is decoded (or stepped into).
|
|
32
|
-
*/
|
|
33
|
-
export declare const lazy: <T>(t: () => T) => Effect<never, T>;
|
|
34
|
-
export declare const doFull: <O extends Operation, T, K extends O[0]>(cmd: K, param: Pr<O, K>[0], cont: (input: Pr<O, K>[1]) => Effect<O, T>) => Effect<O, T>;
|
|
35
|
-
export type Param<O extends Operation> = F<O>[0];
|
|
36
|
-
export type Return<O extends Operation> = F<O>[1];
|
|
37
|
-
export declare const do_: <O extends Operation>(cmd: O[0]) => (...param: Param<O>) => Effect<O, Return<O>>;
|
|
38
|
-
/**
|
|
39
|
-
* Sequentially threads a state value through an effect for each item in `items`.
|
|
40
|
-
*
|
|
41
|
-
* Given `f: item => state => Effect<O, state>`, `init: S`, and `items: [x₀, x₁, …]`,
|
|
42
|
-
* builds `f(x₀)(init).step(f(x₁)).step(f(x₂)).…` and yields a single
|
|
43
|
-
* `Effect<O, S>` that produces the final state.
|
|
44
|
-
*
|
|
45
|
-
* Sequential — each step depends on the previous state. Compare to `all`,
|
|
46
|
-
* which fans out independent effects.
|
|
47
|
-
*/
|
|
48
|
-
export declare const foldStep: <O extends Operation, T, S>(f: (item: T) => (state: S) => Effect<O, S>) => (init: S) => (items: List<T>) => Effect<O, S>;
|
|
49
|
-
/**
|
|
50
|
-
* Sequentially runs `f(item)` for each item in `items`, discarding intermediate
|
|
51
|
-
* results. The `void` accumulator sibling of `foldStep`.
|
|
52
|
-
*/
|
|
53
|
-
export declare const forEachStep: <O extends Operation, T>(f: (item: T) => Effect<O, void>) => (items: List<T>) => Effect<O, void>;
|
|
54
|
-
/**
|
|
55
|
-
* A step adapter for the `error` short-circuit: `error` → pass it through
|
|
56
|
-
* unchanged as `pure`, `ok` → continue with `f`. Collapses the hand-written
|
|
57
|
-
* `r[0] === 'error' ? pure(r) : f(r[1])` check that recurs at every site
|
|
58
|
-
* chaining `Effect<O, Result<T, E>>` steps.
|
|
59
|
-
*/
|
|
60
|
-
export declare const okStep: <T, E, O extends Operation, R>(f: (value: T) => Effect<O, Result<R, E>>) => (r: Result<T, E>) => Effect<O, Result<R, E>>;
|
|
61
|
-
/**
|
|
62
|
-
* The decoded form of an effect's next step: either a final `result`, or a
|
|
63
|
-
* `command` to perform with its `payload` and the `continuation` to resume
|
|
64
|
-
* with the command's output.
|
|
65
|
-
*/
|
|
66
|
-
export type Decoded<O extends Operation, T> = {
|
|
67
|
-
readonly done: true;
|
|
68
|
-
readonly result: T;
|
|
69
|
-
} | {
|
|
70
|
-
readonly done: false;
|
|
71
|
-
readonly command: Do<O, T>[0];
|
|
72
|
-
readonly payload: Do<O, T>[1];
|
|
73
|
-
readonly continuation: Do<O, T>[2];
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Decodes an effect's next step: a pure result, or a command to perform.
|
|
77
|
-
*
|
|
78
|
-
* This is the only function that knows how `Value` is laid out (a thunk
|
|
79
|
-
* `() => T` for `Pure`, a `[command, payload, continuation]` tuple for `Do`).
|
|
80
|
-
* Interpreters and proofs must go through `decode` (or `match`) instead of
|
|
81
|
-
* inspecting the value, so the representation can change without touching
|
|
82
|
-
* them.
|
|
83
|
-
*/
|
|
84
|
-
export declare const decode: <O extends Operation, T>({ value }: Effect<O, T>) => Decoded<O, T>;
|
|
85
|
-
/**
|
|
86
|
-
* An operation map whose entries take a command's payload and return some
|
|
87
|
-
* output `R`. Generalizes `ToAsyncOperationMap` (`R = Promise<…>`) and the
|
|
88
|
-
* curried `MemOperationMap` (`R = (state) => [state, …]`).
|
|
89
|
-
*/
|
|
90
|
-
export type OperationMap<O extends Operation, R> = {
|
|
91
|
-
readonly [K in O[0]]: (...payload: Pr<O, K>[0]) => R;
|
|
92
|
-
};
|
|
93
|
-
export type MatchResult<O extends Operation, T, R> = readonly ['done', T] | readonly ['cont', R, Do<O, T>[2]];
|
|
94
|
-
/**
|
|
95
|
-
* Decodes an effect's next step and dispatches its command to `map`,
|
|
96
|
-
* returning either the final result or the operation's output `R` paired
|
|
97
|
-
* with the continuation. The one world-specific step — `await` for async
|
|
98
|
-
* runners, state threading for sync ones — is left to the caller, so every
|
|
99
|
-
* interpreter loop is this skeleton plus a single eliminator line.
|
|
100
|
-
*/
|
|
101
|
-
export declare const match: <O extends Operation, R>(map: OperationMap<O, R>) => <O1 extends O, T>(effect: Effect<O1, T>) => MatchResult<O1, T, R>;
|
|
102
|
-
export type ToAsyncOperationMap<O extends Operation> = {
|
|
103
|
-
readonly [K in O[0]]: (...payload: Pr<O, K>[0]) => Promise<Pr<O, K>[1]>;
|
|
104
|
-
};
|
|
105
|
-
export type F<O extends Operation> = Pr<O, O[0]>;
|
|
106
|
-
export type Func<O extends Operation> = (..._: Param<O>) => Effect<O, Return<O>>;
|
package/fs/effects/module.f.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core effect type constructors and combinators.
|
|
3
|
-
*
|
|
4
|
-
* Effect helpers are **step adapters**: functions that return a continuation
|
|
5
|
-
* `(t: T) => Effect<Q, R>` meant to be passed into `.step`, never wrappers
|
|
6
|
-
* that take the effect itself as an argument. `Effect` has no pipeline
|
|
7
|
-
* operator to lean on and must not be extended with new methods, so
|
|
8
|
-
* `.step(adapterA).step(adapterB)` is how helpers compose — flat,
|
|
9
|
-
* left-to-right, in evaluation order. See {@link okStep} for an example.
|
|
10
|
-
*
|
|
11
|
-
* @module
|
|
12
|
-
*/
|
|
13
|
-
import { fold } from '../types/list/module.f.js';
|
|
14
|
-
export const pure = (v) => ({
|
|
15
|
-
value: () => v,
|
|
16
|
-
step: f => f(v)
|
|
17
|
-
});
|
|
18
|
-
/**
|
|
19
|
-
* A lazy pure effect. Like {@link pure}, but takes a thunk and evaluates it on
|
|
20
|
-
* demand instead of holding an already-computed value. Use this to produce the
|
|
21
|
-
* next item of a list without instantiating the rest — the thunk runs only when
|
|
22
|
-
* the effect is decoded (or stepped into).
|
|
23
|
-
*/
|
|
24
|
-
export const lazy = (t) => ({
|
|
25
|
-
value: t,
|
|
26
|
-
step: f => f(t())
|
|
27
|
-
});
|
|
28
|
-
export const doFull = (cmd, param, cont) => ({
|
|
29
|
-
value: [cmd, param, cont],
|
|
30
|
-
step: (f) => doFull(cmd, param, x => cont(x).step(f)),
|
|
31
|
-
});
|
|
32
|
-
export const do_ = (cmd) => (...param) => doFull(cmd, param, pure);
|
|
33
|
-
/**
|
|
34
|
-
* Sequentially threads a state value through an effect for each item in `items`.
|
|
35
|
-
*
|
|
36
|
-
* Given `f: item => state => Effect<O, state>`, `init: S`, and `items: [x₀, x₁, …]`,
|
|
37
|
-
* builds `f(x₀)(init).step(f(x₁)).step(f(x₂)).…` and yields a single
|
|
38
|
-
* `Effect<O, S>` that produces the final state.
|
|
39
|
-
*
|
|
40
|
-
* Sequential — each step depends on the previous state. Compare to `all`,
|
|
41
|
-
* which fans out independent effects.
|
|
42
|
-
*/
|
|
43
|
-
export const foldStep = (f) => (init) => (items) => fold(item => acc => acc.step(f(item)))(pure(init))(items);
|
|
44
|
-
/**
|
|
45
|
-
* Sequentially runs `f(item)` for each item in `items`, discarding intermediate
|
|
46
|
-
* results. The `void` accumulator sibling of `foldStep`.
|
|
47
|
-
*/
|
|
48
|
-
export const forEachStep = (f) => (items) => foldStep((item) => () => f(item))(undefined)(items);
|
|
49
|
-
/**
|
|
50
|
-
* A step adapter for the `error` short-circuit: `error` → pass it through
|
|
51
|
-
* unchanged as `pure`, `ok` → continue with `f`. Collapses the hand-written
|
|
52
|
-
* `r[0] === 'error' ? pure(r) : f(r[1])` check that recurs at every site
|
|
53
|
-
* chaining `Effect<O, Result<T, E>>` steps.
|
|
54
|
-
*/
|
|
55
|
-
export const okStep = (f) => (r) => r[0] === 'error' ? pure(r) : f(r[1]);
|
|
56
|
-
/**
|
|
57
|
-
* Decodes an effect's next step: a pure result, or a command to perform.
|
|
58
|
-
*
|
|
59
|
-
* This is the only function that knows how `Value` is laid out (a thunk
|
|
60
|
-
* `() => T` for `Pure`, a `[command, payload, continuation]` tuple for `Do`).
|
|
61
|
-
* Interpreters and proofs must go through `decode` (or `match`) instead of
|
|
62
|
-
* inspecting the value, so the representation can change without touching
|
|
63
|
-
* them.
|
|
64
|
-
*/
|
|
65
|
-
export const decode = ({ value }) => typeof value === 'function'
|
|
66
|
-
? { done: true, result: value() }
|
|
67
|
-
: { done: false, command: value[0], payload: value[1], continuation: value[2] };
|
|
68
|
-
/**
|
|
69
|
-
* Decodes an effect's next step and dispatches its command to `map`,
|
|
70
|
-
* returning either the final result or the operation's output `R` paired
|
|
71
|
-
* with the continuation. The one world-specific step — `await` for async
|
|
72
|
-
* runners, state threading for sync ones — is left to the caller, so every
|
|
73
|
-
* interpreter loop is this skeleton plus a single eliminator line.
|
|
74
|
-
*/
|
|
75
|
-
export const match = (map) => (effect) => {
|
|
76
|
-
const d = decode(effect);
|
|
77
|
-
return d.done
|
|
78
|
-
? ['done', d.result]
|
|
79
|
-
: ['cont', map[d.command](...d.payload), d.continuation];
|
|
80
|
-
};
|
package/fs/effects/proof.f.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export declare const proof: {
|
|
2
|
-
lazy: {
|
|
3
|
-
value: () => void;
|
|
4
|
-
deferred: () => void;
|
|
5
|
-
step: () => void;
|
|
6
|
-
};
|
|
7
|
-
foldStep: {
|
|
8
|
-
empty: () => void;
|
|
9
|
-
threadsState: () => void;
|
|
10
|
-
order: () => void;
|
|
11
|
-
};
|
|
12
|
-
forEachStep: {
|
|
13
|
-
empty: () => void;
|
|
14
|
-
runs: () => void;
|
|
15
|
-
};
|
|
16
|
-
okStep: {
|
|
17
|
-
ok: () => void;
|
|
18
|
-
error: () => void;
|
|
19
|
-
};
|
|
20
|
-
decode: () => void;
|
|
21
|
-
match: {
|
|
22
|
-
done: () => void;
|
|
23
|
-
cont: () => void;
|
|
24
|
-
};
|
|
25
|
-
};
|
package/fs/effects/proof.f.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { decode, do_, foldStep, forEachStep, lazy, match, okStep, pure } from './module.f.js';
|
|
2
|
-
import { error, ok } from '../types/result/module.f.js';
|
|
3
|
-
const assertPure = (e, expected) => {
|
|
4
|
-
const d = decode(e);
|
|
5
|
-
if (!d.done) {
|
|
6
|
-
throw e.value;
|
|
7
|
-
}
|
|
8
|
-
if (d.result !== expected) {
|
|
9
|
-
throw d.result;
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
const next = match({ add: (a, b) => a + b });
|
|
13
|
-
export const proof = {
|
|
14
|
-
lazy: {
|
|
15
|
-
value: () => {
|
|
16
|
-
assertPure(lazy(() => 42), 42);
|
|
17
|
-
},
|
|
18
|
-
deferred: () => {
|
|
19
|
-
// The thunk runs only when the effect is decoded, not when `lazy` is called.
|
|
20
|
-
let evaluated = false;
|
|
21
|
-
const e = lazy(() => { evaluated = true; return 7; });
|
|
22
|
-
if (evaluated) {
|
|
23
|
-
throw 'lazy must not evaluate eagerly';
|
|
24
|
-
}
|
|
25
|
-
assertPure(e, 7);
|
|
26
|
-
if (!evaluated) {
|
|
27
|
-
throw 'decode must force the thunk';
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
step: () => {
|
|
31
|
-
const e = lazy(() => 5).step(v => pure(v * 2));
|
|
32
|
-
assertPure(e, 10);
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
foldStep: {
|
|
36
|
-
empty: () => {
|
|
37
|
-
const e = foldStep((x) => (s) => pure(s + x))(10)([]);
|
|
38
|
-
assertPure(e, 10);
|
|
39
|
-
},
|
|
40
|
-
threadsState: () => {
|
|
41
|
-
const e = foldStep((x) => (s) => pure(s + x))(0)([1, 2, 3, 4]);
|
|
42
|
-
assertPure(e, 10);
|
|
43
|
-
},
|
|
44
|
-
order: () => {
|
|
45
|
-
const e = foldStep((x) => (s) => pure(s + x))('')(['a', 'b', 'c']);
|
|
46
|
-
assertPure(e, 'abc');
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
forEachStep: {
|
|
50
|
-
empty: () => {
|
|
51
|
-
const e = forEachStep(() => pure(undefined))([]);
|
|
52
|
-
assertPure(e, undefined);
|
|
53
|
-
},
|
|
54
|
-
runs: () => {
|
|
55
|
-
const e = forEachStep(() => pure(undefined))([1, 2, 3]);
|
|
56
|
-
assertPure(e, undefined);
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
okStep: {
|
|
60
|
-
ok: () => {
|
|
61
|
-
const e = pure(ok(5)).step(okStep((v) => pure(ok(v * 2))));
|
|
62
|
-
const d = decode(e);
|
|
63
|
-
if (!d.done || d.result[0] !== 'ok' || d.result[1] !== 10) {
|
|
64
|
-
throw e.value;
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
error: () => {
|
|
68
|
-
const e = pure(error('oops')).step(okStep(v => pure(ok(v * 2))));
|
|
69
|
-
const d = decode(e);
|
|
70
|
-
if (!d.done || d.result[0] !== 'error' || d.result[1] !== 'oops') {
|
|
71
|
-
throw e.value;
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
decode: () => {
|
|
76
|
-
const d = decode(do_('add')(2, 3));
|
|
77
|
-
if (d.done) {
|
|
78
|
-
throw d;
|
|
79
|
-
}
|
|
80
|
-
if (d.command !== 'add') {
|
|
81
|
-
throw d.command;
|
|
82
|
-
}
|
|
83
|
-
if (d.payload[0] !== 2 || d.payload[1] !== 3) {
|
|
84
|
-
throw d.payload;
|
|
85
|
-
}
|
|
86
|
-
assertPure(d.continuation(5), 5);
|
|
87
|
-
},
|
|
88
|
-
match: {
|
|
89
|
-
done: () => {
|
|
90
|
-
const r = next(pure(7));
|
|
91
|
-
if (r[0] !== 'done') {
|
|
92
|
-
throw r;
|
|
93
|
-
}
|
|
94
|
-
if (r[1] !== 7) {
|
|
95
|
-
throw r[1];
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
cont: () => {
|
|
99
|
-
const r = next(do_('add')(2, 3));
|
|
100
|
-
if (r[0] !== 'cont') {
|
|
101
|
-
throw r;
|
|
102
|
-
}
|
|
103
|
-
if (r[1] !== 5) {
|
|
104
|
-
throw r[1];
|
|
105
|
-
}
|
|
106
|
-
const r2 = next(r[2](r[1]));
|
|
107
|
-
if (r2[0] !== 'done') {
|
|
108
|
-
throw r2;
|
|
109
|
-
}
|
|
110
|
-
if (r2[1] !== 5) {
|
|
111
|
-
throw r2[1];
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
};
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { assert, assertEq } from '../../asserts/module.f.js';
|
|
2
|
-
import { dialect, mediaType, isHash, validate, decodeText } from './module.f.js';
|
|
3
|
-
// Valid cbase32 hashes (round-tripped in fs/basen/cbase32/proof.f.ts): single
|
|
4
|
-
// cbase32 symbols, cheap to write inline here.
|
|
5
|
-
const h1 = '8';
|
|
6
|
-
const h2 = 'r';
|
|
7
|
-
const revisionOf = (extra) => ({
|
|
8
|
-
dialect,
|
|
9
|
-
subject: h1,
|
|
10
|
-
parents: [],
|
|
11
|
-
...extra,
|
|
12
|
-
});
|
|
13
|
-
export const proof = {
|
|
14
|
-
dialectAndMediaType: () => {
|
|
15
|
-
assertEq(dialect, 'vnd.fjs.revision');
|
|
16
|
-
assertEq(mediaType, 'application/vnd.fjs.revision+json');
|
|
17
|
-
},
|
|
18
|
-
isHash: {
|
|
19
|
-
validHash: () => assert(isHash(h1)),
|
|
20
|
-
httpsRejected: () => assert(!isHash('https://example.com/blob/abc')),
|
|
21
|
-
arbitraryStringRejected: () => assert(!isHash('not-a-hash!')),
|
|
22
|
-
},
|
|
23
|
-
validate: {
|
|
24
|
-
// Zero parents, no `snapshot`: `subject` is the fallback snapshot
|
|
25
|
-
// reference and must itself be a hash.
|
|
26
|
-
firstRevisionFallsBackToSubjectHash: () => {
|
|
27
|
-
const [t] = validate(revisionOf({}));
|
|
28
|
-
assertEq(t, 'ok');
|
|
29
|
-
},
|
|
30
|
-
// Zero parents, no `snapshot`, `subject` is not a hash: invalid.
|
|
31
|
-
firstRevisionRejectsNonHashSubject: () => {
|
|
32
|
-
const [t] = validate(revisionOf({ subject: 'my-config' }));
|
|
33
|
-
assertEq(t, 'error');
|
|
34
|
-
},
|
|
35
|
-
// `snapshot` present: `subject` may be an arbitrary string.
|
|
36
|
-
explicitSnapshotAllowsArbitrarySubject: () => {
|
|
37
|
-
const [t] = validate(revisionOf({ subject: 'my-config', snapshot: h2 }));
|
|
38
|
-
assertEq(t, 'ok');
|
|
39
|
-
},
|
|
40
|
-
// Exactly one parent, no `snapshot`: the parent's snapshot is inherited,
|
|
41
|
-
// and `subject` may be an arbitrary string.
|
|
42
|
-
singleParentInheritsSnapshot: () => {
|
|
43
|
-
const [t] = validate(revisionOf({ subject: 'my-config', parents: [h2] }));
|
|
44
|
-
assertEq(t, 'ok');
|
|
45
|
-
},
|
|
46
|
-
// More than one parent with no `snapshot`: invalid — no single parent
|
|
47
|
-
// snapshot to inherit, and falling back to `subject` would silently
|
|
48
|
-
// lose the merge result.
|
|
49
|
-
multiParentWithoutSnapshotRejected: () => {
|
|
50
|
-
const [t] = validate(revisionOf({ subject: 'my-config', parents: [h1, h2] }));
|
|
51
|
-
assertEq(t, 'error');
|
|
52
|
-
},
|
|
53
|
-
// A merge revision with an explicit `snapshot` is valid.
|
|
54
|
-
multiParentWithSnapshotAccepted: () => {
|
|
55
|
-
const [t, v] = validate(revisionOf({ subject: 'my-config', parents: [h1, h2], snapshot: h2 }));
|
|
56
|
-
assertEq(t, 'ok');
|
|
57
|
-
assertEq(v.snapshot, h2);
|
|
58
|
-
},
|
|
59
|
-
// `https://` bridge URLs are rejected wherever a hash is required.
|
|
60
|
-
httpsRejectedInParents: () => {
|
|
61
|
-
const [t] = validate(revisionOf({ subject: 'my-config', parents: ['https://example.com/x'], snapshot: h2 }));
|
|
62
|
-
assertEq(t, 'error');
|
|
63
|
-
},
|
|
64
|
-
httpsRejectedInSnapshot: () => {
|
|
65
|
-
const [t] = validate(revisionOf({ subject: 'my-config', snapshot: 'https://example.com/x' }));
|
|
66
|
-
assertEq(t, 'error');
|
|
67
|
-
},
|
|
68
|
-
httpsRejectedAsFallbackSubject: () => {
|
|
69
|
-
const [t] = validate(revisionOf({ subject: 'https://example.com/x' }));
|
|
70
|
-
assertEq(t, 'error');
|
|
71
|
-
},
|
|
72
|
-
// `archived` follows the presence-only `option(true)` idiom.
|
|
73
|
-
archivedAccepted: () => {
|
|
74
|
-
const [t] = validate(revisionOf({ archived: true }));
|
|
75
|
-
assertEq(t, 'ok');
|
|
76
|
-
},
|
|
77
|
-
// Wrong dialect tag: structural validation rejects it outright.
|
|
78
|
-
wrongDialectRejected: () => {
|
|
79
|
-
const [t] = validate({ dialect: 'vnd.fjs.other', subject: h1, parents: [] });
|
|
80
|
-
assertEq(t, 'error');
|
|
81
|
-
},
|
|
82
|
-
// Missing required fields: rejected.
|
|
83
|
-
missingSubjectRejected: () => {
|
|
84
|
-
const [t] = validate({ dialect, parents: [] });
|
|
85
|
-
assertEq(t, 'error');
|
|
86
|
-
},
|
|
87
|
-
// rtti structs are open: extra fields don't break validation — the
|
|
88
|
-
// additive forward-compatibility path the versioning rule relies on.
|
|
89
|
-
extraFieldsAccepted: () => {
|
|
90
|
-
const [t] = validate(revisionOf({ future: 'field' }));
|
|
91
|
-
assertEq(t, 'ok');
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
decodeText: {
|
|
95
|
-
validJson: () => {
|
|
96
|
-
const [t, v] = decodeText(JSON.stringify(revisionOf({ generation: 0 })));
|
|
97
|
-
assertEq(t, 'ok');
|
|
98
|
-
assertEq(v.subject, h1);
|
|
99
|
-
},
|
|
100
|
-
// Key order carries no meaning: detection parses the JSON and
|
|
101
|
-
// validates the parsed value, so `dialect` need not be first.
|
|
102
|
-
keyOrderIndependent: () => {
|
|
103
|
-
const text = `{"parents":[],"subject":"${h1}","dialect":"${dialect}"}`;
|
|
104
|
-
const [t] = decodeText(text);
|
|
105
|
-
assertEq(t, 'ok');
|
|
106
|
-
},
|
|
107
|
-
malformedJsonRejected: () => {
|
|
108
|
-
const [t] = decodeText('{not json');
|
|
109
|
-
assertEq(t, 'error');
|
|
110
|
-
},
|
|
111
|
-
// Ordinary JSON that isn't a revision at all falls through as an error
|
|
112
|
-
// here — `fs/media`'s composed detector is what falls back to the
|
|
113
|
-
// ordinary detector; this module only reports validity.
|
|
114
|
-
ordinaryJsonRejected: () => {
|
|
115
|
-
const [t] = decodeText('{"hello":"world"}');
|
|
116
|
-
assertEq(t, 'error');
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
};
|