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,5 +1,5 @@
|
|
|
1
|
-
import { assertEq } from '../../../asserts/module.f.js';
|
|
2
|
-
import { awaitIfPromise, fetch, rm, writeFile, readFile, readdir, import_, rename, readBytes, writeBytes } from '../module.f.js';
|
|
1
|
+
import { assert, assertEq } from '../../../asserts/module.f.js';
|
|
2
|
+
import { access, awaitIfPromise, fetch, rm, writeFile, readFile, readdir, import_, rename, readBytes, writeBytes } from '../module.f.js';
|
|
3
3
|
import { maxLengthBytes, vec, vec8 } from '../../../types/bit_vec/module.f.js';
|
|
4
4
|
import { emptyState, virtual } from './module.f.js';
|
|
5
5
|
export const proof = {
|
|
@@ -7,24 +7,24 @@ export const proof = {
|
|
|
7
7
|
success: () => {
|
|
8
8
|
const root = { 'a.txt': [vec8(0x42n)] };
|
|
9
9
|
const [, result] = virtual({ ...emptyState, root })(rm('a.txt'));
|
|
10
|
-
|
|
10
|
+
assert(result[0] === 'ok');
|
|
11
11
|
},
|
|
12
12
|
notFound: () => {
|
|
13
13
|
const [, result] = virtual(emptyState)(rm('notexist.txt'));
|
|
14
|
-
|
|
14
|
+
assert(result[0] === 'error');
|
|
15
15
|
},
|
|
16
16
|
isDirectory: () => {
|
|
17
17
|
const inner = {};
|
|
18
18
|
const root = { 'mydir': inner };
|
|
19
19
|
const [, result] = virtual({ ...emptyState, root })(rm('mydir'));
|
|
20
|
-
|
|
20
|
+
assert(result[0] === 'error');
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
23
|
writeFileOnDirectory: () => {
|
|
24
24
|
const inner = {};
|
|
25
25
|
const root = { 'mydir': inner };
|
|
26
26
|
const [, result] = virtual({ ...emptyState, root })(writeFile('mydir', vec8(0x42n)));
|
|
27
|
-
|
|
27
|
+
assert(result[0] === 'error');
|
|
28
28
|
},
|
|
29
29
|
readdirRecursive: () => {
|
|
30
30
|
const file = [vec8(0x42n)];
|
|
@@ -32,12 +32,19 @@ export const proof = {
|
|
|
32
32
|
const outer = { 'sub': sub };
|
|
33
33
|
const root = { 'mydir': outer };
|
|
34
34
|
const [, result] = virtual({ ...emptyState, root })(readdir('mydir', { recursive: true }));
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
throw result;
|
|
38
|
-
}
|
|
35
|
+
assert(result[0] === 'ok');
|
|
36
|
+
assert(result[0] === 'ok', result);
|
|
39
37
|
assertEq(result[1].length, 2);
|
|
40
38
|
},
|
|
39
|
+
accessNestedPathThroughFile: () => {
|
|
40
|
+
// 'a/b/c' where 'a' is a file: the operation wrapper's "not a directory"
|
|
41
|
+
// fallback passes the full remaining path through unchanged, covering the
|
|
42
|
+
// path.length !== 1 branch of the access op (only path.length === 0 was
|
|
43
|
+
// otherwise exercised).
|
|
44
|
+
const root = { 'a': [vec8(0x42n)] };
|
|
45
|
+
const [, result] = virtual({ ...emptyState, root })(access('a/b/c'));
|
|
46
|
+
assert(result[0] === 'error');
|
|
47
|
+
},
|
|
41
48
|
readFileIntoDir: () => {
|
|
42
49
|
// 'a/b' where both 'a' and 'b' are directories
|
|
43
50
|
// hits path.length === 0 in operation's f and path.length !== 1 in readFile op
|
|
@@ -45,7 +52,7 @@ export const proof = {
|
|
|
45
52
|
const outer = { 'b': inner };
|
|
46
53
|
const root = { 'a': outer };
|
|
47
54
|
const [, result] = virtual({ ...emptyState, root })(readFile('a/b'));
|
|
48
|
-
|
|
55
|
+
assert(result[0] === 'error');
|
|
49
56
|
},
|
|
50
57
|
awaitNonPromise: () => {
|
|
51
58
|
// a non-promise value passes through the virtual `await` handler as-is
|
|
@@ -55,19 +62,19 @@ export const proof = {
|
|
|
55
62
|
fetchNotFound: () => {
|
|
56
63
|
// covers the `result === undefined` branch of the `fetch` handler
|
|
57
64
|
const [, result] = virtual(emptyState)(fetch('https://example.com/missing'));
|
|
58
|
-
|
|
65
|
+
assert(result[0] === 'error');
|
|
59
66
|
},
|
|
60
67
|
importNestedPath: () => {
|
|
61
68
|
// import_ on a path whose parent does not exist covers the
|
|
62
69
|
// path.length !== 1 branch of the import_ op
|
|
63
70
|
const [, result] = virtual(emptyState)(import_('a/b'));
|
|
64
|
-
|
|
71
|
+
assert(result[0] === 'error');
|
|
65
72
|
},
|
|
66
73
|
importNonModule: () => {
|
|
67
74
|
// import_ on a Vec (not a JsModule) covers typeof entry !== 'function' branch
|
|
68
75
|
const root = { 'module.f.ts': [vec8(0x42n)] };
|
|
69
76
|
const [, result] = virtual({ ...emptyState, root })(import_('module.f.ts'));
|
|
70
|
-
|
|
77
|
+
assert(result[0] === 'error');
|
|
71
78
|
},
|
|
72
79
|
throw: {
|
|
73
80
|
readFileOnJsModule: () => {
|
|
@@ -80,37 +87,37 @@ export const proof = {
|
|
|
80
87
|
// rename('a', 'a') should succeed as a no-op, not reject
|
|
81
88
|
const root = { 'a': [vec8(0x42n)] };
|
|
82
89
|
const [, result] = virtual({ ...emptyState, root })(rename('a', 'a'));
|
|
83
|
-
|
|
90
|
+
assert(result[0] === 'ok');
|
|
84
91
|
},
|
|
85
92
|
renameIntoOwnSubtree: () => {
|
|
86
93
|
// rename('a', 'a/b') should fail (dst inside src's subtree)
|
|
87
94
|
const root = { 'a': { 'b': [vec8(0x42n)] } };
|
|
88
95
|
const [, result] = virtual({ ...emptyState, root })(rename('a', 'a/b'));
|
|
89
|
-
|
|
96
|
+
assert(result[0] === 'error');
|
|
90
97
|
},
|
|
91
98
|
renameOntoOwnAncestor: () => {
|
|
92
99
|
// rename('a/b', 'a') should fail (src inside dst's subtree)
|
|
93
100
|
const root = { 'a': { 'b': [vec8(0x42n)] } };
|
|
94
101
|
const [, result] = virtual({ ...emptyState, root })(rename('a/b', 'a'));
|
|
95
|
-
|
|
102
|
+
assert(result[0] === 'error');
|
|
96
103
|
},
|
|
97
104
|
renameNonEmptyDirOverEmptyDir: () => {
|
|
98
105
|
// rename a directory onto an empty directory should succeed
|
|
99
106
|
const root = { 'src': { 'file': [vec8(0x42n)] }, 'dst': {} };
|
|
100
107
|
const [, result] = virtual({ ...emptyState, root })(rename('src', 'dst'));
|
|
101
|
-
|
|
108
|
+
assert(result[0] === 'ok');
|
|
102
109
|
},
|
|
103
110
|
renameEmptyDirOverNonEmptyDir: () => {
|
|
104
111
|
// rename an empty directory onto a non-empty directory should fail
|
|
105
112
|
const root = { 'src': {}, 'dst': { 'file': [vec8(0x42n)] } };
|
|
106
113
|
const [, result] = virtual({ ...emptyState, root })(rename('src', 'dst'));
|
|
107
|
-
|
|
114
|
+
assert(result[0] === 'error');
|
|
108
115
|
},
|
|
109
116
|
renameFileOntoDirectory: () => {
|
|
110
117
|
// rename a file to a path that is already an existing directory should fail
|
|
111
118
|
const root = { 'myfile': [vec8(0x42n)], 'mydir': {} };
|
|
112
119
|
const [, result] = virtual({ ...emptyState, root })(rename('myfile', 'mydir'));
|
|
113
|
-
|
|
120
|
+
assert(result[0] === 'error');
|
|
114
121
|
},
|
|
115
122
|
readFileTooLarge: () => {
|
|
116
123
|
// a file stored as two max-size chunks exceeds the limit; readFile must return an error
|
|
@@ -118,37 +125,37 @@ export const proof = {
|
|
|
118
125
|
const chunk1 = vec(1n)(1n);
|
|
119
126
|
const root = { 'big': [chunk0, chunk1] };
|
|
120
127
|
const [, result] = virtual({ ...emptyState, root })(readFile('big'));
|
|
121
|
-
|
|
128
|
+
assert(result[0] === 'error');
|
|
122
129
|
},
|
|
123
130
|
readBytesNegativeSize: () => {
|
|
124
131
|
// readBytes with negative size should fail
|
|
125
132
|
const root = { 'file': [vec8(0x42n)] };
|
|
126
133
|
const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0, -1));
|
|
127
|
-
|
|
134
|
+
assert(result[0] === 'error');
|
|
128
135
|
},
|
|
129
136
|
readBytesZeroSize: () => {
|
|
130
137
|
// readBytes with zero size should succeed and return empty vec
|
|
131
138
|
const root = { 'file': [vec8(0x42n)] };
|
|
132
139
|
const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0, 0));
|
|
133
|
-
|
|
140
|
+
assert(result[0] === 'ok');
|
|
134
141
|
},
|
|
135
142
|
readBytesNegativeOffset: () => {
|
|
136
143
|
// readBytes with negative offset should fail
|
|
137
144
|
const root = { 'file': [vec8(0x42n)] };
|
|
138
145
|
const [, result] = virtual({ ...emptyState, root })(readBytes('file', -1, 1));
|
|
139
|
-
|
|
146
|
+
assert(result[0] === 'error');
|
|
140
147
|
},
|
|
141
148
|
readBytesFractionalSize: () => {
|
|
142
149
|
// readBytes with fractional size should fail rather than throw RangeError
|
|
143
150
|
const root = { 'file': [vec8(0x42n)] };
|
|
144
151
|
const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0, 1.5));
|
|
145
|
-
|
|
152
|
+
assert(result[0] === 'error');
|
|
146
153
|
},
|
|
147
154
|
readBytesFractionalOffset: () => {
|
|
148
155
|
// readBytes with fractional offset should fail rather than throw RangeError
|
|
149
156
|
const root = { 'file': [vec8(0x42n)] };
|
|
150
157
|
const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0.5, 1));
|
|
151
|
-
|
|
158
|
+
assert(result[0] === 'error');
|
|
152
159
|
},
|
|
153
160
|
readBytesAcrossChunkBoundary: () => {
|
|
154
161
|
// Two 128 KiB chunks; read 2 bytes spanning the boundary (last byte of chunk 0, first of chunk 1).
|
|
@@ -157,14 +164,14 @@ export const proof = {
|
|
|
157
164
|
const chunk1 = vec(maxLengthBytes * 8n)(0xbbn);
|
|
158
165
|
const root = { 'big': [chunk0, chunk1] };
|
|
159
166
|
const [, result] = virtual({ ...emptyState, root })(readBytes('big', chunkSize - 1, 2));
|
|
160
|
-
|
|
167
|
+
assert(result[0] === 'ok');
|
|
161
168
|
},
|
|
162
169
|
writeBytesWrongOffset: () => {
|
|
163
170
|
// writeBytes is append-only; an offset that doesn't match the current
|
|
164
171
|
// file size must fail rather than silently create a hole.
|
|
165
172
|
const root = { 'file': [vec8(0x42n)] };
|
|
166
173
|
const [, result] = virtual({ ...emptyState, root })(writeBytes('file', 5, vec8(0x43n)));
|
|
167
|
-
|
|
174
|
+
assert(result[0] === 'error');
|
|
168
175
|
},
|
|
169
176
|
largeFileReadBytes: () => {
|
|
170
177
|
// A file stored as two 128 KiB chunks is larger than maxLengthBytes.
|
|
@@ -174,6 +181,6 @@ export const proof = {
|
|
|
174
181
|
const chunk1 = vec(maxLengthBytes * 8n)(0xffn);
|
|
175
182
|
const root = { 'large': [chunk0, chunk1] };
|
|
176
183
|
const [, result] = virtual({ ...emptyState, root })(readBytes('large', chunkSize, 1));
|
|
177
|
-
|
|
184
|
+
assert(result[0] === 'ok');
|
|
178
185
|
},
|
|
179
186
|
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type Effect, type Operation } from './module.f.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Asserts that `e` yields `expected` without performing a command. Exported so
|
|
4
|
+
* `eff/proof.f.ts` shares this definition instead of repeating it.
|
|
5
|
+
*
|
|
6
|
+
* Not `assertEq(runPure(e), [expected])`: `assertEq` compares with `===`, so a
|
|
7
|
+
* freshly allocated `[expected]` is never equal to the returned option. Assert
|
|
8
|
+
* the option's shape first, then compare the value inside it.
|
|
9
|
+
*/
|
|
10
|
+
export declare const assertPure: <O extends Operation, T>(e: Effect<O, T>, expected: T) => void;
|
|
11
|
+
export declare const proof: {
|
|
12
|
+
foldStep: {
|
|
13
|
+
empty: () => void;
|
|
14
|
+
threadsState: () => void;
|
|
15
|
+
order: () => void;
|
|
16
|
+
};
|
|
17
|
+
forEachStep: {
|
|
18
|
+
empty: () => void;
|
|
19
|
+
runs: () => void;
|
|
20
|
+
};
|
|
21
|
+
okStep: {
|
|
22
|
+
ok: () => void;
|
|
23
|
+
error: () => void;
|
|
24
|
+
};
|
|
25
|
+
runPure: {
|
|
26
|
+
pure: () => void;
|
|
27
|
+
pureNull: () => void;
|
|
28
|
+
do_: () => void;
|
|
29
|
+
};
|
|
30
|
+
doNode: () => void;
|
|
31
|
+
match: {
|
|
32
|
+
done: () => void;
|
|
33
|
+
cont: () => void;
|
|
34
|
+
};
|
|
35
|
+
step: {
|
|
36
|
+
pure: () => void;
|
|
37
|
+
chain: () => void;
|
|
38
|
+
overDo: () => void;
|
|
39
|
+
};
|
|
40
|
+
mapStep: {
|
|
41
|
+
pure: () => void;
|
|
42
|
+
constant: () => void;
|
|
43
|
+
overDo: () => void;
|
|
44
|
+
};
|
|
45
|
+
historyStep: {
|
|
46
|
+
pure: () => void;
|
|
47
|
+
overDo: () => void;
|
|
48
|
+
chain: () => void;
|
|
49
|
+
fReceivesWholeHistory: () => void;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { step, do_, foldStep, forEachStep, mapStep, match, okStep, history, pure, runPure, historyStep } from './module.f.js';
|
|
2
|
+
import { error, ok } from '../types/result/module.f.js';
|
|
3
|
+
import { assert, assertEq } from '../asserts/module.f.js';
|
|
4
|
+
/**
|
|
5
|
+
* Asserts that `e` yields `expected` without performing a command. Exported so
|
|
6
|
+
* `eff/proof.f.ts` shares this definition instead of repeating it.
|
|
7
|
+
*
|
|
8
|
+
* Not `assertEq(runPure(e), [expected])`: `assertEq` compares with `===`, so a
|
|
9
|
+
* freshly allocated `[expected]` is never equal to the returned option. Assert
|
|
10
|
+
* the option's shape first, then compare the value inside it.
|
|
11
|
+
*/
|
|
12
|
+
export const assertPure = (e, expected) => {
|
|
13
|
+
const o = runPure(e);
|
|
14
|
+
assert(o.length === 1, e);
|
|
15
|
+
assertEq(o[0], expected);
|
|
16
|
+
};
|
|
17
|
+
const next = match({ add: (a, b) => a + b });
|
|
18
|
+
export const proof = {
|
|
19
|
+
foldStep: {
|
|
20
|
+
empty: () => {
|
|
21
|
+
const e = foldStep(pure([]), 10, x => s => pure(s + x));
|
|
22
|
+
assertPure(e, 10);
|
|
23
|
+
},
|
|
24
|
+
threadsState: () => {
|
|
25
|
+
const e = foldStep(pure([1, 2, 3, 4]), 0, x => s => pure(s + x));
|
|
26
|
+
assertPure(e, 10);
|
|
27
|
+
},
|
|
28
|
+
order: () => {
|
|
29
|
+
const e = foldStep(pure(['a', 'b', 'c']), '', x => s => pure(s + x));
|
|
30
|
+
assertPure(e, 'abc');
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
forEachStep: {
|
|
34
|
+
empty: () => {
|
|
35
|
+
const e = forEachStep(pure([]), () => pure(undefined));
|
|
36
|
+
assertPure(e, undefined);
|
|
37
|
+
},
|
|
38
|
+
runs: () => {
|
|
39
|
+
const e = forEachStep(pure([1, 2, 3]), () => pure(undefined));
|
|
40
|
+
assertPure(e, undefined);
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
okStep: {
|
|
44
|
+
ok: () => {
|
|
45
|
+
const e = step(pure(ok(5)), okStep((v) => pure(ok(v * 2))));
|
|
46
|
+
const o = runPure(e);
|
|
47
|
+
assert(o.length === 1, e);
|
|
48
|
+
const [r] = o;
|
|
49
|
+
assert(r[0] === 'ok', r);
|
|
50
|
+
assertEq(r[1], 10);
|
|
51
|
+
},
|
|
52
|
+
error: () => {
|
|
53
|
+
const e = step(pure(error('oops')), okStep(v => pure(ok(v * 2))));
|
|
54
|
+
const o = runPure(e);
|
|
55
|
+
assert(o.length === 1, e);
|
|
56
|
+
const [r] = o;
|
|
57
|
+
assert(r[0] === 'error', r);
|
|
58
|
+
assertEq(r[1], 'oops');
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
runPure: {
|
|
62
|
+
pure: () => {
|
|
63
|
+
const o = runPure(pure(5));
|
|
64
|
+
assert(o.length === 1, o);
|
|
65
|
+
assertEq(o[0], 5);
|
|
66
|
+
},
|
|
67
|
+
// A pure `null` is `[null]`, never `[]`. Collapsing the two is what a
|
|
68
|
+
// `T | null` result would do, and why the option is tagged.
|
|
69
|
+
pureNull: () => {
|
|
70
|
+
const o = runPure(pure(null));
|
|
71
|
+
assertEq(o.length, 1, o);
|
|
72
|
+
assertEq(o[0], null);
|
|
73
|
+
},
|
|
74
|
+
do_: () => {
|
|
75
|
+
assertEq(runPure(do_('add')(2, 3)).length, 0);
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
// The one place a `Do` node is opened on purpose: `do_` builds the command,
|
|
79
|
+
// the payload it was called with, and a continuation that resumes with the
|
|
80
|
+
// command's output. Everything else goes through `step`, `match`, or
|
|
81
|
+
// `runPure`.
|
|
82
|
+
doNode: () => {
|
|
83
|
+
const e = do_('add')(2, 3);
|
|
84
|
+
assert(typeof e !== 'function', e);
|
|
85
|
+
const { command, payload, continuation } = e;
|
|
86
|
+
assertEq(command, 'add');
|
|
87
|
+
const [a, b] = payload;
|
|
88
|
+
assertEq(a, 2, payload);
|
|
89
|
+
assertEq(b, 3, payload);
|
|
90
|
+
assertPure(continuation(5), 5);
|
|
91
|
+
},
|
|
92
|
+
match: {
|
|
93
|
+
done: () => {
|
|
94
|
+
const r = next(pure(7));
|
|
95
|
+
assert(r[0] === 'done', r);
|
|
96
|
+
assertEq(r[1], 7);
|
|
97
|
+
},
|
|
98
|
+
cont: () => {
|
|
99
|
+
const r = next(do_('add')(2, 3));
|
|
100
|
+
assert(r[0] === 'cont', r);
|
|
101
|
+
assertEq(r[1], 5);
|
|
102
|
+
const r2 = next(r[2](r[1]));
|
|
103
|
+
assert(r2[0] === 'done', r2);
|
|
104
|
+
assertEq(r2[1], 5);
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
step: {
|
|
108
|
+
pure: () => {
|
|
109
|
+
assertPure(step(pure(3), v => pure(v + 1)), 4);
|
|
110
|
+
},
|
|
111
|
+
chain: () => {
|
|
112
|
+
// Chains as step(step(e, f), g), raw effect in and out.
|
|
113
|
+
assertPure(step(step(pure(3), v => pure(v + 1)), v => pure(v * 2)), 8);
|
|
114
|
+
},
|
|
115
|
+
overDo: () => {
|
|
116
|
+
// Stepping a Do node preserves the command and threads the result
|
|
117
|
+
// through the rebuilt continuation.
|
|
118
|
+
const e = step(do_('add')(2, 3), r => pure(r * 10));
|
|
119
|
+
const r = next(e);
|
|
120
|
+
assert(r[0] === 'cont', r);
|
|
121
|
+
assertEq(r[1], 5);
|
|
122
|
+
assertPure(r[2](r[1]), 50);
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
mapStep: {
|
|
126
|
+
pure: () => {
|
|
127
|
+
assertPure(mapStep(pure(3), v => v + 1), 4);
|
|
128
|
+
},
|
|
129
|
+
constant: () => {
|
|
130
|
+
// The `() => v` shape a `constStep` would have covered.
|
|
131
|
+
assertPure(mapStep(pure('ignored'), () => 1), 1);
|
|
132
|
+
},
|
|
133
|
+
overDo: () => {
|
|
134
|
+
// A projection over a `Do` node keeps the command intact and is
|
|
135
|
+
// applied to the command's output when the continuation resumes.
|
|
136
|
+
const r = next(mapStep(do_('add')(2, 3), v => v * 10));
|
|
137
|
+
assert(r[0] === 'cont', r);
|
|
138
|
+
assertEq(r[1], 5);
|
|
139
|
+
assertPure(r[2](r[1]), 50);
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
historyStep: {
|
|
143
|
+
pure: () => {
|
|
144
|
+
const o = runPure(historyStep(history(pure(3)), v => pure(v * 2)));
|
|
145
|
+
assert(o.length === 1, o);
|
|
146
|
+
const [[result, param]] = o;
|
|
147
|
+
assertEq(param, 3);
|
|
148
|
+
assertEq(result, 6);
|
|
149
|
+
},
|
|
150
|
+
overDo: () => {
|
|
151
|
+
// The captured value survives a command boundary: the history is
|
|
152
|
+
// rebuilt inside the continuation rather than lost when `e` is a Do.
|
|
153
|
+
const c = next(historyStep(history(do_('add')(2, 3)), r => pure(r * 10)));
|
|
154
|
+
assert(c[0] === 'cont', c);
|
|
155
|
+
assertEq(c[1], 5);
|
|
156
|
+
const o = runPure(c[2](c[1]));
|
|
157
|
+
assert(o.length === 1, o);
|
|
158
|
+
const [[result, param]] = o;
|
|
159
|
+
assertEq(param, 5);
|
|
160
|
+
assertEq(result, 50);
|
|
161
|
+
},
|
|
162
|
+
chain: () => {
|
|
163
|
+
// `historyStep` takes a history and returns one, so link two is
|
|
164
|
+
// spelled exactly like link one. The tuple is newest first, so a
|
|
165
|
+
// destructuring reads reverse-chronologically.
|
|
166
|
+
const a = historyStep(history(pure(1)), x => pure(x + 1));
|
|
167
|
+
const b = historyStep(a, (result, param) => pure(result + param));
|
|
168
|
+
assertPure(step(b, ([z, y, x]) => pure(`${x}${y}${z}`)), '123');
|
|
169
|
+
},
|
|
170
|
+
fReceivesWholeHistory: () => {
|
|
171
|
+
// `f` is handed the whole history spread as arguments, not just the
|
|
172
|
+
// most recent value - which is what lets a later link reach back.
|
|
173
|
+
const a = historyStep(history(pure(1)), x => pure(x + 1));
|
|
174
|
+
const b = historyStep(a, (...p) => pure(p[1] * 100 + p[0]));
|
|
175
|
+
assertPure(step(b, ([result]) => pure(result)), 102);
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
};
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { reset, fgGreen, fgRed, bold, csiWrite } from '../text/sgr/module.f.js';
|
|
14
14
|
import { all, awaitIfPromise, sandbox, test } from '../effects/node/module.f.js';
|
|
15
|
-
import { pure } from '../effects/module.f.js';
|
|
15
|
+
import { history, historyStep, pure, step } from '../effects/module.f.js';
|
|
16
|
+
import { eff } from '../effects/eff/module.f.js';
|
|
16
17
|
import { loadModuleMap, shouldLoad } from '../dev/module.f.js';
|
|
17
18
|
import { invert } from '../types/result/module.f.js';
|
|
18
19
|
import { definedEntries } from '../types/object/module.f.js';
|
|
@@ -89,7 +90,7 @@ export const registerModule = (ctx, k, v, star) => {
|
|
|
89
90
|
// test is expected to throw, so no extra suffix is needed.
|
|
90
91
|
const base = fmtImport(k, path);
|
|
91
92
|
const name = throws ? base : `${base}${star}`;
|
|
92
|
-
return test(ctx, name, throws, (t) => awaitIfPromise(fn())
|
|
93
|
+
return test(ctx, name, throws, (t) => eff(awaitIfPromise(fn()))
|
|
93
94
|
.step(resolved => {
|
|
94
95
|
if (throws) {
|
|
95
96
|
return pure(undefined);
|
|
@@ -98,42 +99,49 @@ export const registerModule = (ctx, k, v, star) => {
|
|
|
98
99
|
if (sub.length === 0) {
|
|
99
100
|
return pure(undefined);
|
|
100
101
|
}
|
|
101
|
-
return all(...sub.map(e => registerOne(t, e)))
|
|
102
|
-
|
|
102
|
+
return eff(all(...sub.map(e => registerOne(t, e))))
|
|
103
|
+
.step(() => pure(undefined))
|
|
104
|
+
.value;
|
|
105
|
+
})
|
|
106
|
+
.value);
|
|
103
107
|
};
|
|
104
108
|
const tests = collectTests([], false, v);
|
|
105
109
|
if (tests.length === 0) {
|
|
106
110
|
return pure(undefined);
|
|
107
111
|
}
|
|
108
|
-
return all(...tests.map(e => registerOne(ctx, e)))
|
|
112
|
+
return eff(all(...tests.map(e => registerOne(ctx, e))))
|
|
113
|
+
.step(() => pure(undefined))
|
|
114
|
+
.value;
|
|
109
115
|
};
|
|
110
116
|
const mergeState = (a, b) => ({ time: a.time + b.time, pass: a.pass + b.pass, fail: a.fail + b.fail });
|
|
111
117
|
const zero = { time: 0, pass: 0, fail: 0 };
|
|
112
118
|
const runModule = ({ result, test }) => (k, v) => (ts) => {
|
|
113
|
-
const one = ([testPath, set]) =>
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
// Walk return-value sub-tree; null marks the call boundary so
|
|
123
|
-
// paths render as e.g. `outer().inner`. throws resets to false.
|
|
124
|
-
return walk([...testPath, null], false, r)
|
|
125
|
-
.step(sub => pure(mergeState(addPass(duration)(zero), sub)));
|
|
119
|
+
const one = ([testPath, set]) => {
|
|
120
|
+
// The sandbox result is still needed after it has been reported, so the
|
|
121
|
+
// reporting call is captured rather than nested inside its own step.
|
|
122
|
+
const reported = historyStep(history(test(k, testPath, set)), sr => result(k, testPath, sr, set.throws));
|
|
123
|
+
return step(reported, ([, sr]) => {
|
|
124
|
+
const { result: [s, r], duration } = sr;
|
|
125
|
+
if (s !== 'ok') {
|
|
126
|
+
return pure(addFail(duration)(zero));
|
|
126
127
|
}
|
|
127
|
-
|
|
128
|
+
if (set.throws) {
|
|
129
|
+
return pure(addPass(duration)(zero));
|
|
130
|
+
}
|
|
131
|
+
// Walk return-value sub-tree; null marks the call boundary so
|
|
132
|
+
// paths render as e.g. `outer().inner`. throws resets to false.
|
|
133
|
+
return step(walk([...testPath, null], false, r), sub => pure(mergeState(addPass(duration)(zero), sub)));
|
|
128
134
|
});
|
|
129
|
-
}
|
|
135
|
+
};
|
|
130
136
|
const walk = (path, throws, v) => {
|
|
131
137
|
const effects = collectTests(path, throws, v).map(one);
|
|
132
|
-
return all(...effects)
|
|
133
|
-
.step(states => pure(states.reduce(mergeState, zero)))
|
|
138
|
+
return eff(all(...effects))
|
|
139
|
+
.step(states => pure(states.reduce(mergeState, zero)))
|
|
140
|
+
.value;
|
|
134
141
|
};
|
|
135
|
-
return walk([], false, v)
|
|
136
|
-
.step(delta => pure(mergeState(ts, delta)))
|
|
142
|
+
return eff(walk([], false, v))
|
|
143
|
+
.step(delta => pure(mergeState(ts, delta)))
|
|
144
|
+
.value;
|
|
137
145
|
};
|
|
138
146
|
const proofEntries = (moduleMap) => definedEntries(moduleMap)
|
|
139
147
|
.flatMap(([k, v]) => v.proof !== undefined ? [[k, v.proof]] : []);
|
|
@@ -145,17 +153,20 @@ const proofEntries = (moduleMap) => definedEntries(moduleMap)
|
|
|
145
153
|
export const runModuleMap = (reporter) => (moduleMap) => {
|
|
146
154
|
const { summary } = reporter;
|
|
147
155
|
const modules = proofEntries(moduleMap);
|
|
148
|
-
return all(...modules.map(([k, v]) => runModule(reporter)(k, v)(zero)))
|
|
156
|
+
return eff(all(...modules.map(([k, v]) => runModule(reporter)(k, v)(zero))))
|
|
149
157
|
.step(m => pure(m.reduce(mergeState, zero)))
|
|
150
|
-
.step(ts => summary(ts.pass, ts.fail, ts.time)
|
|
151
|
-
.step(() => pure(ts.fail !== 0 ? 1 : 0))
|
|
158
|
+
.step(ts => summary(ts.pass, ts.fail, ts.time))
|
|
159
|
+
.step((_, ts) => pure(ts.fail !== 0 ? 1 : 0))
|
|
160
|
+
.value;
|
|
152
161
|
};
|
|
153
162
|
/**
|
|
154
163
|
* Discovers all test modules via `loadModuleMap`, then runs them through
|
|
155
164
|
* `runModuleMap`. The composed effect is a `NodeProgram` entry point for the
|
|
156
165
|
* `fjs t` test runner.
|
|
157
166
|
*/
|
|
158
|
-
export const testAll = (reporter) => options => loadModuleMap(options.env)
|
|
167
|
+
export const testAll = (reporter) => options => eff(loadModuleMap(options.env))
|
|
168
|
+
.step(runModuleMap(reporter))
|
|
169
|
+
.value;
|
|
159
170
|
/**
|
|
160
171
|
* Registers all modules in `moduleMap` that export a `proof` property with
|
|
161
172
|
* `ctx`. Delegates to `registerModule` for each matching entry.
|
|
@@ -165,7 +176,9 @@ const registerModuleMap = (ctx, star) => (moduleMap) => {
|
|
|
165
176
|
if (modules.length === 0) {
|
|
166
177
|
return pure(undefined);
|
|
167
178
|
}
|
|
168
|
-
return all(...modules.map(([k, v]) => registerModule(ctx, k, v, star)))
|
|
179
|
+
return eff(all(...modules.map(([k, v]) => registerModule(ctx, k, v, star))))
|
|
180
|
+
.step(() => pure(undefined))
|
|
181
|
+
.value;
|
|
169
182
|
};
|
|
170
183
|
const isAlpha = (c) => (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c === '_' || c === '$';
|
|
171
184
|
const isDigit = (c) => c >= '0' && c <= '9';
|
|
@@ -219,8 +232,9 @@ export const ghEscape = (s) => s.replaceAll('%', '%25')
|
|
|
219
232
|
* Default `Reporter.test` implementation: sandboxes `fn` once and inverts the
|
|
220
233
|
* result when `throws` is `true` (caught error → pass, clean return → fail).
|
|
221
234
|
*/
|
|
222
|
-
export const defaultTest = (file, path, { fn, throws }) => sandbox(fn)
|
|
223
|
-
.step(r => pure(throws ? { ...r, result: invert(r.result) } : r))
|
|
235
|
+
export const defaultTest = (file, path, { fn, throws }) => eff(sandbox(fn))
|
|
236
|
+
.step(r => pure(throws ? { ...r, result: invert(r.result) } : r))
|
|
237
|
+
.value;
|
|
224
238
|
const fmtResultLine = (file, path, color, label, duration) => `${fmtImport(file, path)}: ${color}${label}${reset}, ${timeFormat(duration)}`;
|
|
225
239
|
/**
|
|
226
240
|
* The terminal/GitHub reporter used by `fjs t`. Output goes through
|
|
@@ -244,12 +258,14 @@ export const defaultReporter = (options) => {
|
|
|
244
258
|
? csiLog(fmtResultLine(file, path, fgGreen, 'ok', duration) + (throws ? ' # EXPECTED TO THROW' : ''))
|
|
245
259
|
: isGitHub
|
|
246
260
|
? csiError(`::error file=${file},line=1,title=${ghEscape(fmtImport(file, path))}::${ghEscape(String(v))}`)
|
|
247
|
-
: csiError(fmtResultLine(file, path, fgRed, 'error', duration))
|
|
248
|
-
.step(() => csiError(`${fgRed}${v}${reset}`))
|
|
261
|
+
: eff(csiError(fmtResultLine(file, path, fgRed, 'error', duration)))
|
|
262
|
+
.step(() => csiError(`${fgRed}${v}${reset}`))
|
|
263
|
+
.value,
|
|
249
264
|
summary: (pass, fail, time) => {
|
|
250
265
|
const fgFail = fail === 0 ? fgGreen : fgRed;
|
|
251
|
-
return csiLog(`${bold}Number of tests: pass: ${fgGreen}${pass}${reset}${bold}, fail: ${fgFail}${fail}${reset}${bold}, total: ${pass + fail}${reset}`)
|
|
252
|
-
.step(() => csiLog(`${bold}Time: ${timeFormat(time)}${reset}`))
|
|
266
|
+
return eff(csiLog(`${bold}Number of tests: pass: ${fgGreen}${pass}${reset}${bold}, fail: ${fgFail}${fail}${reset}${bold}, total: ${pass + fail}${reset}`))
|
|
267
|
+
.step(() => csiLog(`${bold}Time: ${timeFormat(time)}${reset}`))
|
|
268
|
+
.value;
|
|
253
269
|
},
|
|
254
270
|
test: defaultTest,
|
|
255
271
|
};
|
|
@@ -268,8 +284,8 @@ export const register = o => {
|
|
|
268
284
|
const ctx = o.engine === 'bun' ? o.bunTestContext :
|
|
269
285
|
o.engine === 'playwright' ? o.playwrightTestContext :
|
|
270
286
|
o.testContext;
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
.step(
|
|
274
|
-
.
|
|
287
|
+
return eff(loadModuleMap(o.env))
|
|
288
|
+
.step(registerModuleMap(ctx, star))
|
|
289
|
+
.step(() => pure(0))
|
|
290
|
+
.value;
|
|
275
291
|
};
|
|
@@ -14,6 +14,8 @@ export declare const defaultReporterOutputLargeDuration: () => void;
|
|
|
14
14
|
export declare const defaultReporterFailOutput: () => void;
|
|
15
15
|
export declare const githubReporterOutput: () => void;
|
|
16
16
|
export declare const registerSuffixes: () => void;
|
|
17
|
+
export declare const registerThrowsWithoutThrowing: () => void;
|
|
18
|
+
export declare const registerEmptyProof: () => void;
|
|
17
19
|
export declare const helpers: {
|
|
18
20
|
isInteger: () => void;
|
|
19
21
|
isIdentifier: () => void;
|
|
@@ -45,6 +47,8 @@ export declare const proof: {
|
|
|
45
47
|
defaultReporterFailOutput: typeof defaultReporterFailOutput;
|
|
46
48
|
githubReporterOutput: typeof githubReporterOutput;
|
|
47
49
|
registerSuffixes: typeof registerSuffixes;
|
|
50
|
+
registerThrowsWithoutThrowing: typeof registerThrowsWithoutThrowing;
|
|
51
|
+
registerEmptyProof: typeof registerEmptyProof;
|
|
48
52
|
defaultReporterExpectedToThrow: typeof defaultReporterExpectedToThrow;
|
|
49
53
|
helpers: {
|
|
50
54
|
isInteger: () => void;
|