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
package/fs/cas/proof.f.js
DELETED
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
import { length, maxLength, msb, vec, vec8 } from '../types/bit_vec/module.f.js';
|
|
2
|
-
import { cBase32ToVec, vecToCBase32 } from '../basen/cbase32/module.f.js';
|
|
3
|
-
import { computeSync, sha256 } from '../crypto/sha2/module.f.js';
|
|
4
|
-
import { fileCas, casAddFile, casUpload } from './module.f.js';
|
|
5
|
-
import { pure } from '../effects/module.f.js';
|
|
6
|
-
import { mkdir, writeFile, rm, readFile, access } from '../effects/node/module.f.js';
|
|
7
|
-
import { error, ok } from '../types/result/module.f.js';
|
|
8
|
-
import { emptyState, virtual } from '../effects/node/virtual/module.f.js';
|
|
9
|
-
import { join } from '../path/module.f.js';
|
|
10
|
-
import { nonEmpty, empty } from '../effects/list/module.f.js';
|
|
11
|
-
const testDir = './test-cas-cli';
|
|
12
|
-
// Create a 128 KiB big file content (at the max Vec size limit)
|
|
13
|
-
// This tests the boundary where files are at the chunk size limit
|
|
14
|
-
const createBigFileContent = () => {
|
|
15
|
-
const byteCount = 128n * 1024n; // 128 KiB
|
|
16
|
-
// Create a repeating pattern: 0x42 repeated across the file
|
|
17
|
-
return vec(byteCount * 8n)(0x42424242n);
|
|
18
|
-
};
|
|
19
|
-
// Test adding a big file and verifying the hash
|
|
20
|
-
const testAddBigFile = () => mkdir(testDir, { recursive: true }).step(() => {
|
|
21
|
-
const bigContent = createBigFileContent();
|
|
22
|
-
const bigFilePath = `${testDir}/big-file.bin`;
|
|
23
|
-
return writeFile(bigFilePath, bigContent).step(writeRes => {
|
|
24
|
-
if (writeRes[0] === 'error') {
|
|
25
|
-
throw new Error(`Failed to write test file: ${writeRes[1]}`);
|
|
26
|
-
}
|
|
27
|
-
const cas = fileCas(sha256)(testDir);
|
|
28
|
-
return casAddFile(cas)(bigFilePath).step(addRes => {
|
|
29
|
-
if (addRes[0] === 'error') {
|
|
30
|
-
throw new Error(`Failed to add file to CAS: ${addRes[1]}`);
|
|
31
|
-
}
|
|
32
|
-
const hash = addRes[1];
|
|
33
|
-
// Verify hash is 256 bits (SHA-256)
|
|
34
|
-
if (length(hash) !== 256n) {
|
|
35
|
-
throw new Error(`Expected hash length 256 bits, got ${length(hash)}`);
|
|
36
|
-
}
|
|
37
|
-
// Verify hash can be encoded/decoded
|
|
38
|
-
const hashCBase32 = vecToCBase32(hash);
|
|
39
|
-
const decodedHash = cBase32ToVec(hashCBase32);
|
|
40
|
-
if (decodedHash === null) {
|
|
41
|
-
throw new Error('Failed to decode hash from base32');
|
|
42
|
-
}
|
|
43
|
-
return rm(testDir).step(() => pure(undefined));
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
// Test adding and retrieving a big file
|
|
48
|
-
const testAddAndGetBigFile = () => mkdir(testDir, { recursive: true })
|
|
49
|
-
.step(() => {
|
|
50
|
-
const bigContent = createBigFileContent();
|
|
51
|
-
const bigFilePath = `${testDir}/big-file.bin`;
|
|
52
|
-
return writeFile(bigFilePath, bigContent)
|
|
53
|
-
.step(writeRes => {
|
|
54
|
-
if (writeRes[0] === 'error') {
|
|
55
|
-
throw new Error(`Failed to write test file: ${writeRes[1]}`);
|
|
56
|
-
}
|
|
57
|
-
const cas = fileCas(sha256)(testDir);
|
|
58
|
-
return casAddFile(cas)(bigFilePath)
|
|
59
|
-
.step(addRes => {
|
|
60
|
-
if (addRes[0] === 'error') {
|
|
61
|
-
throw new Error(`Failed to add file to CAS: ${addRes[1]}`);
|
|
62
|
-
}
|
|
63
|
-
const hash = addRes[1];
|
|
64
|
-
const storedPath = cas.url(hash);
|
|
65
|
-
// Verify file is stored at the expected location
|
|
66
|
-
return readFile(storedPath).step(readRes => {
|
|
67
|
-
if (readRes[0] === 'error') {
|
|
68
|
-
throw new Error(`Failed to read stored file: ${readRes[1]}`);
|
|
69
|
-
}
|
|
70
|
-
const storedContent = readRes[1];
|
|
71
|
-
// Verify content is the same size as original
|
|
72
|
-
const storedLen = length(storedContent);
|
|
73
|
-
const originalLen = length(bigContent);
|
|
74
|
-
if (storedLen !== originalLen) {
|
|
75
|
-
throw new Error(`Content size mismatch: stored ${storedLen} bits, expected ${originalLen} bits`);
|
|
76
|
-
}
|
|
77
|
-
return rm(testDir).step(() => pure(undefined));
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
export const proof = {
|
|
83
|
-
addBigFile: testAddBigFile,
|
|
84
|
-
addAndGetBigFile: testAddAndGetBigFile,
|
|
85
|
-
//
|
|
86
|
-
casWriteRead: () => {
|
|
87
|
-
// Round-trip a single-chunk payload through the real streaming CAS: `write` returns
|
|
88
|
-
// the content hash, and `read` streams the same bytes back as `ok` chunk items.
|
|
89
|
-
const content = vec8(0x2an);
|
|
90
|
-
const c = fileCas(sha256)('.');
|
|
91
|
-
const payload = nonEmpty(ok(content), empty());
|
|
92
|
-
const [state1, writeResult] = virtual(emptyState)(c.write(payload));
|
|
93
|
-
if (writeResult[0] !== 'ok') {
|
|
94
|
-
throw ['expected write ok', writeResult];
|
|
95
|
-
}
|
|
96
|
-
const hash = writeResult[1];
|
|
97
|
-
if (length(hash) !== 256n) {
|
|
98
|
-
throw ['expected 256-bit hash', length(hash)];
|
|
99
|
-
}
|
|
100
|
-
if (msb.cmp(hash)(computeSync(sha256)([content])) !== 0) {
|
|
101
|
-
throw 'write hash mismatch';
|
|
102
|
-
}
|
|
103
|
-
const drain = (acc) => (stream) => stream.step((node) => {
|
|
104
|
-
if (node === undefined) {
|
|
105
|
-
return pure(ok(acc));
|
|
106
|
-
}
|
|
107
|
-
const { first, tail } = node;
|
|
108
|
-
if (first[0] === 'error') {
|
|
109
|
-
return pure(first);
|
|
110
|
-
}
|
|
111
|
-
return drain([...acc, first[1]])(tail);
|
|
112
|
-
});
|
|
113
|
-
const [, readResult] = virtual(state1)(drain([])(c.read(hash)));
|
|
114
|
-
if (readResult[0] !== 'ok') {
|
|
115
|
-
throw ['expected read ok', readResult];
|
|
116
|
-
}
|
|
117
|
-
if (msb.cmp(msb.listToVec(readResult[1]))(content) !== 0) {
|
|
118
|
-
throw 'read content mismatch';
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
casReadMissingShard: () => {
|
|
122
|
-
// A missing shard surfaces as an explicit error *item*, never as end-of-stream.
|
|
123
|
-
const c = fileCas(sha256)('.');
|
|
124
|
-
const hash = computeSync(sha256)([vec8(0x2an)]);
|
|
125
|
-
const node = virtual(emptyState)(c.read(hash))[1];
|
|
126
|
-
if (node === undefined) {
|
|
127
|
-
throw 'missing shard must not be EOF';
|
|
128
|
-
}
|
|
129
|
-
if (node.first[0] !== 'error') {
|
|
130
|
-
throw ['expected error item', node.tail];
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
casWriteMultiChunk: () => {
|
|
134
|
-
// A multi-chunk payload streams through `writeBytes` chunk-by-chunk (the lease is
|
|
135
|
-
// renewed between chunks); the hash equals the SHA-256 of the concatenated bytes,
|
|
136
|
-
// and read streams the same content back.
|
|
137
|
-
const chunks = [vec8(0x11n), vec8(0x22n), vec8(0x33n)];
|
|
138
|
-
const c = fileCas(sha256)('.');
|
|
139
|
-
const payload = chunks.reduceRight((tail, chunk) => nonEmpty(ok(chunk), tail), empty());
|
|
140
|
-
const [state1, writeResult] = virtual(emptyState)(c.write(payload));
|
|
141
|
-
if (writeResult[0] !== 'ok') {
|
|
142
|
-
throw ['expected write ok', writeResult];
|
|
143
|
-
}
|
|
144
|
-
const hash = writeResult[1];
|
|
145
|
-
if (msb.cmp(hash)(computeSync(sha256)(chunks)) !== 0) {
|
|
146
|
-
throw 'multi-chunk write hash mismatch';
|
|
147
|
-
}
|
|
148
|
-
const drain = (acc) => (stream) => stream.step((node) => {
|
|
149
|
-
if (node === undefined) {
|
|
150
|
-
return pure(ok(acc));
|
|
151
|
-
}
|
|
152
|
-
const { first, tail } = node;
|
|
153
|
-
if (first[0] === 'error') {
|
|
154
|
-
return pure(first);
|
|
155
|
-
}
|
|
156
|
-
return drain([...acc, first[1]])(tail);
|
|
157
|
-
});
|
|
158
|
-
const [, readResult] = virtual(state1)(drain([])(c.read(hash)));
|
|
159
|
-
if (readResult[0] !== 'ok') {
|
|
160
|
-
throw ['expected read ok', readResult];
|
|
161
|
-
}
|
|
162
|
-
const expected = msb.concat(msb.concat(chunks[0])(chunks[1]))(chunks[2]);
|
|
163
|
-
if (msb.cmp(msb.listToVec(readResult[1]))(expected) !== 0) {
|
|
164
|
-
throw 'multi-chunk read content mismatch';
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
|
-
casWriteDedup: () => {
|
|
168
|
-
// Same content ⇒ same hash; the second upload's replace-`rename` publishes over the
|
|
169
|
-
// first, leaving exactly one shard in the store.
|
|
170
|
-
const content = vec8(0x2an);
|
|
171
|
-
const c = fileCas(sha256)('.');
|
|
172
|
-
const payload = () => nonEmpty(ok(content), empty());
|
|
173
|
-
const [state1, w1] = virtual(emptyState)(c.write(payload()));
|
|
174
|
-
const [state2, w2] = virtual(state1)(c.write(payload()));
|
|
175
|
-
if (w1[0] !== 'ok' || w2[0] !== 'ok') {
|
|
176
|
-
throw ['expected both writes ok', w1, w2];
|
|
177
|
-
}
|
|
178
|
-
if (msb.cmp(w1[1])(w2[1]) !== 0) {
|
|
179
|
-
throw 'dedup hash mismatch';
|
|
180
|
-
}
|
|
181
|
-
const [, hashes] = virtual(state2)(c.list());
|
|
182
|
-
if (hashes.length !== 1) {
|
|
183
|
-
throw ['expected one shard after dedup', hashes.length];
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
casWriteErrorItemAborts: () => {
|
|
187
|
-
// An error item mid-stream deletes the partial staging file and fails; nothing is
|
|
188
|
-
// published, so the store stays empty.
|
|
189
|
-
const c = fileCas(sha256)('.');
|
|
190
|
-
const okItem = ok(vec8(0x11n));
|
|
191
|
-
const errItem = error({ code: 'BOOM' });
|
|
192
|
-
const payload = nonEmpty(okItem, nonEmpty(errItem, empty()));
|
|
193
|
-
const [state1, result] = virtual(emptyState)(c.write(payload));
|
|
194
|
-
if (result[0] !== 'error') {
|
|
195
|
-
throw ['expected write error', result];
|
|
196
|
-
}
|
|
197
|
-
const [, hashes] = virtual(state1)(c.list());
|
|
198
|
-
if (hashes.length !== 0) {
|
|
199
|
-
throw ['expected nothing published on abort', hashes];
|
|
200
|
-
}
|
|
201
|
-
},
|
|
202
|
-
casWriteReadExceedsMaxLength: () => {
|
|
203
|
-
// The point of streaming: a payload larger than a single `Vec`'s `maxLength`
|
|
204
|
-
// (128 KiB) must round-trip. `write` lands the chunks on disk without ever
|
|
205
|
-
// holding them as one `Vec`, and `read` streams them back the same way — so the
|
|
206
|
-
// round-trip is verified by hashing the read stream incrementally rather than
|
|
207
|
-
// concatenating it (which would itself overflow `maxLength`).
|
|
208
|
-
const big = vec(maxLength)(0xabn); // one full-size chunk: exactly maxLength bits
|
|
209
|
-
const tail = vec8(0x2an); // one more byte ⇒ total > maxLength
|
|
210
|
-
const chunks = [big, tail];
|
|
211
|
-
const c = fileCas(sha256)('.');
|
|
212
|
-
const payload = chunks.reduceRight((tl, chunk) => nonEmpty(ok(chunk), tl), empty());
|
|
213
|
-
const [state1, w] = virtual(emptyState)(c.write(payload));
|
|
214
|
-
if (w[0] !== 'ok') {
|
|
215
|
-
throw ['expected write ok', w];
|
|
216
|
-
}
|
|
217
|
-
const hash = w[1];
|
|
218
|
-
if (msb.cmp(hash)(computeSync(sha256)(chunks)) !== 0) {
|
|
219
|
-
throw 'oversized write hash mismatch';
|
|
220
|
-
}
|
|
221
|
-
// Fold the read stream straight into a fresh SHA-2 state — never one `Vec`.
|
|
222
|
-
const rehash = (state) => (stream) => stream.step((node) => {
|
|
223
|
-
if (node === undefined) {
|
|
224
|
-
return pure(ok(sha256.end(state)));
|
|
225
|
-
}
|
|
226
|
-
const { first, tail } = node;
|
|
227
|
-
if (first[0] === 'error') {
|
|
228
|
-
return pure(first);
|
|
229
|
-
}
|
|
230
|
-
return rehash(sha256.append(first[1])(state))(tail);
|
|
231
|
-
});
|
|
232
|
-
const [, readBack] = virtual(state1)(rehash(sha256.init)(c.read(hash)));
|
|
233
|
-
if (readBack[0] !== 'ok') {
|
|
234
|
-
throw ['expected read ok', readBack];
|
|
235
|
-
}
|
|
236
|
-
if (msb.cmp(readBack[1])(hash) !== 0) {
|
|
237
|
-
throw 'oversized read-back hash mismatch';
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
casWriteGcReclaimsExpired: () => {
|
|
241
|
-
// A staging file whose deadline is in the past is reclaimed by the GC that `write`
|
|
242
|
-
// runs before staging its own file.
|
|
243
|
-
const stalePath = join('.', '.cas', '_stage', '0000000000000000000-stale');
|
|
244
|
-
const state0 = {
|
|
245
|
-
...emptyState,
|
|
246
|
-
epochNs: 1_000_000,
|
|
247
|
-
root: { '.cas': { '_stage': { '0000000000000000000-stale': [vec8(0x99n)] } } },
|
|
248
|
-
};
|
|
249
|
-
const content = vec8(0x2an);
|
|
250
|
-
const c = fileCas(sha256)('.');
|
|
251
|
-
const x = c.write(nonEmpty(ok(content), empty()));
|
|
252
|
-
const [state1, w] = virtual(state0)(x);
|
|
253
|
-
if (w[0] !== 'ok') {
|
|
254
|
-
throw ['expected write ok', w];
|
|
255
|
-
}
|
|
256
|
-
const [, present] = virtual(state1)(access(stalePath));
|
|
257
|
-
if (present[0] !== 'error') {
|
|
258
|
-
throw 'expected GC to reclaim the expired staging file';
|
|
259
|
-
}
|
|
260
|
-
},
|
|
261
|
-
casUploadSuccess: () => {
|
|
262
|
-
// A successful upload returns the hash and deletes the source file from cas_upload/.
|
|
263
|
-
const content = vec8(0x2an);
|
|
264
|
-
const state0 = { ...emptyState, root: { 'cas_upload': { 'myfile': [content] } } };
|
|
265
|
-
const [state1, result] = virtual(state0)(casUpload('.')('myfile'));
|
|
266
|
-
if (result[0] !== 'ok') {
|
|
267
|
-
throw ['expected casUpload ok', result];
|
|
268
|
-
}
|
|
269
|
-
if (length(result[1]) !== 256n) {
|
|
270
|
-
throw ['expected 256-bit hash', length(result[1])];
|
|
271
|
-
}
|
|
272
|
-
// Source must be deleted after successful publish.
|
|
273
|
-
const srcPath = join('.', 'cas_upload', 'myfile');
|
|
274
|
-
const [, srcAccess] = virtual(state1)(access(srcPath));
|
|
275
|
-
if (srcAccess[0] !== 'error') {
|
|
276
|
-
throw 'expected source to be deleted after successful upload';
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
|
-
casUploadFailureKeepsSource: () => {
|
|
280
|
-
// A missing source file causes write to fail; casUpload returns error and the
|
|
281
|
-
// source is left in place (trivially: it was never there, but the upload is not published).
|
|
282
|
-
const state0 = { ...emptyState, root: {} };
|
|
283
|
-
const [state1, result] = virtual(state0)(casUpload('.')('nonexistent'));
|
|
284
|
-
if (result[0] !== 'error') {
|
|
285
|
-
throw ['expected casUpload to fail on missing source', result];
|
|
286
|
-
}
|
|
287
|
-
// Nothing published to the store.
|
|
288
|
-
const c = fileCas(sha256)('.');
|
|
289
|
-
const [, hashes] = virtual(state1)(c.list());
|
|
290
|
-
if (hashes.length !== 0) {
|
|
291
|
-
throw ['expected nothing published on failed upload', hashes];
|
|
292
|
-
}
|
|
293
|
-
},
|
|
294
|
-
};
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Repeats a monoid operation `n` times on the given element `a`.
|
|
3
|
-
* This function efficiently performs the operation using exponentiation by squaring.
|
|
4
|
-
*
|
|
5
|
-
* @template T The type of the elements in the monoid.
|
|
6
|
-
* @param monoid The monoid structure, including the identity and binary operation.
|
|
7
|
-
* @returns A function that takes an element `a` and a repetition count `n`,
|
|
8
|
-
* and returns the result of applying the operation `n` times.
|
|
9
|
-
*
|
|
10
|
-
* See also {@link https://en.wikipedia.org/wiki/Exponentiation_by_squaring}.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
*
|
|
14
|
-
* ```ts
|
|
15
|
-
* const add: Monoid<number> = {
|
|
16
|
-
* identity: 0,
|
|
17
|
-
* operation: a => b => a + b,
|
|
18
|
-
* };
|
|
19
|
-
*
|
|
20
|
-
* const resultAdd = repeat(add)(10n)(2) // 20
|
|
21
|
-
*
|
|
22
|
-
* const concat: Monoid<string> = {
|
|
23
|
-
* identity: '',
|
|
24
|
-
* operation: a => b => a + b,
|
|
25
|
-
* };
|
|
26
|
-
*
|
|
27
|
-
* const resultConcat = repeat(concat)(3n)('ha') // 'hahaha'
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export const repeat = ({ identity, operation }) => n => a => {
|
|
31
|
-
let ai = a;
|
|
32
|
-
let ni = n;
|
|
33
|
-
let result = identity;
|
|
34
|
-
while (true) {
|
|
35
|
-
if ((ni & 1n) !== 0n) {
|
|
36
|
-
result = operation(result)(ai);
|
|
37
|
-
}
|
|
38
|
-
ni >>= 1n;
|
|
39
|
-
if (ni === 0n) {
|
|
40
|
-
return result;
|
|
41
|
-
}
|
|
42
|
-
ai = operation(ai)(ai);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { repeat } from "./module.f.js";
|
|
2
|
-
export const proof = {
|
|
3
|
-
numberAdd: () => {
|
|
4
|
-
const add = {
|
|
5
|
-
identity: 0,
|
|
6
|
-
operation: a => b => a + b,
|
|
7
|
-
};
|
|
8
|
-
const resultAdd = repeat(add)(10n)(2); // 20
|
|
9
|
-
if (resultAdd !== 20) {
|
|
10
|
-
throw resultAdd;
|
|
11
|
-
}
|
|
12
|
-
const id = repeat(add)(0n)(42);
|
|
13
|
-
if (id !== 0) {
|
|
14
|
-
throw id;
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
stringConcat: () => {
|
|
18
|
-
const concat = {
|
|
19
|
-
identity: '',
|
|
20
|
-
operation: a => b => a + b,
|
|
21
|
-
};
|
|
22
|
-
const resultConcat = repeat(concat)(3n)('ha'); // 'hahaha'
|
|
23
|
-
if (resultConcat !== 'hahaha') {
|
|
24
|
-
throw resultConcat;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
};
|
package/fs/crypto/pow/proof.f.js
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { utf8 } from '../../text/module.f.js';
|
|
2
|
-
import { empty, uint } from '../../types/bit_vec/module.f.js';
|
|
3
|
-
import { computeSync, sha224, sha256 } from '../sha2/module.f.js';
|
|
4
|
-
import { bitcoinPow, genesisNBits, genesisTarget, pow, sha256Pow, targetFromNBits } from './module.f.js';
|
|
5
|
-
const p256 = sha256Pow;
|
|
6
|
-
const p224 = pow(sha224);
|
|
7
|
-
const sample = utf8('functionalscript pow proof');
|
|
8
|
-
const emptyData = empty;
|
|
9
|
-
/** Target large enough for {@link sample} under SHA-256 (`0x207fffff`). */
|
|
10
|
-
const easyNBits = 0x207fffffn;
|
|
11
|
-
/** Compact encoding for target `1` (`0x03000001`). */
|
|
12
|
-
const hardNBits = 0x03000001n;
|
|
13
|
-
/** SHA-256 of the empty message (NIST / Bitcoin block merkle uses this primitive). */
|
|
14
|
-
const sha256EmptyHash = 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855n;
|
|
15
|
-
/** Bitcoin block #0 header hash as big-endian uint256. */
|
|
16
|
-
const block0Hash = 0x000000000019d6689c085ae165831e934ff763ae46a2a6cffb388491c27dc990n;
|
|
17
|
-
const expectNull = (nBits) => {
|
|
18
|
-
if (targetFromNBits(nBits) !== null) {
|
|
19
|
-
throw nBits;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
export const proof = {
|
|
23
|
-
targetFromNBits: {
|
|
24
|
-
genesis: () => {
|
|
25
|
-
if (targetFromNBits(genesisNBits) !== genesisTarget) {
|
|
26
|
-
throw 'genesis target';
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
block0HashWithinGenesisTarget: () => {
|
|
30
|
-
if (block0Hash > genesisTarget) {
|
|
31
|
-
throw 'block0 hash exceeds genesis target';
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
exponent3: () => {
|
|
35
|
-
if (targetFromNBits(0x030000ffn) !== 0xffn) {
|
|
36
|
-
throw 'exponent 3';
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
exponent2: () => {
|
|
40
|
-
if (targetFromNBits(0x02008000n) !== 0x80n) {
|
|
41
|
-
throw 'exponent 2';
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
hardTargetOne: () => {
|
|
45
|
-
if (targetFromNBits(hardNBits) !== 1n) {
|
|
46
|
-
throw 'hard target';
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
zero: () => {
|
|
50
|
-
if (targetFromNBits(0n) !== 0n) {
|
|
51
|
-
throw 'zero nBits';
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
negative: () => {
|
|
55
|
-
expectNull(0x01800001n);
|
|
56
|
-
},
|
|
57
|
-
negativeHighMantissa: () => {
|
|
58
|
-
expectNull(0x22ffffffn);
|
|
59
|
-
},
|
|
60
|
-
overflowExponent: () => {
|
|
61
|
-
expectNull(0x23000001n);
|
|
62
|
-
},
|
|
63
|
-
exceeds256: () => {
|
|
64
|
-
expectNull(0x227fffffn);
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
meets: {
|
|
68
|
-
easy: () => {
|
|
69
|
-
if (!p256.meets(easyNBits)(sample)) {
|
|
70
|
-
throw 'easy nBits should pass';
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
hard: () => {
|
|
74
|
-
if (p256.meets(hardNBits)(sample)) {
|
|
75
|
-
throw 'target 1 should fail';
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
genesisFailsSample: () => {
|
|
79
|
-
if (p256.meets(genesisNBits)(sample)) {
|
|
80
|
-
throw 'genesis target too hard for sample';
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
zeroTargetRejectsSample: () => {
|
|
84
|
-
if (p256.meets(0n)(sample)) {
|
|
85
|
-
throw 'non-zero hash vs zero target';
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
invalidNBits: () => {
|
|
89
|
-
if (p256.meets(0x01800001n)(sample)) {
|
|
90
|
-
throw 'invalid nBits should not pass';
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
hashLeqTarget: () => {
|
|
94
|
-
const h = p256.hashInt(sample);
|
|
95
|
-
const target = targetFromNBits(easyNBits);
|
|
96
|
-
if (target === null) {
|
|
97
|
-
throw 'easy nBits decode';
|
|
98
|
-
}
|
|
99
|
-
if (h > target) {
|
|
100
|
-
throw 'hash above easy target';
|
|
101
|
-
}
|
|
102
|
-
if (!(h <= target)) {
|
|
103
|
-
throw 'hash <= target';
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
hashInt: {
|
|
108
|
-
sha256Sample: () => {
|
|
109
|
-
const digest = computeSync(sha256)([sample]);
|
|
110
|
-
if (p256.hashInt(sample) !== uint(digest)) {
|
|
111
|
-
throw 'sha256 sample';
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
sha256Empty: () => {
|
|
115
|
-
if (p256.hashInt(emptyData) !== sha256EmptyHash) {
|
|
116
|
-
throw 'sha256 empty constant';
|
|
117
|
-
}
|
|
118
|
-
const digest = computeSync(sha256)([emptyData]);
|
|
119
|
-
if (p256.hashInt(emptyData) !== uint(digest)) {
|
|
120
|
-
throw 'sha256 empty';
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
sha224: () => {
|
|
124
|
-
const digest = computeSync(sha224)([sample]);
|
|
125
|
-
if (p224.hashInt(sample) !== uint(digest)) {
|
|
126
|
-
throw 'sha224';
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
stable: () => {
|
|
130
|
-
if (p256.hashInt(sample) !== p256.hashInt(sample)) {
|
|
131
|
-
throw 'stable';
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
pow: {
|
|
136
|
-
sha256Pow: () => {
|
|
137
|
-
const built = pow(sha256);
|
|
138
|
-
if (sha256Pow.hashInt(sample) !== built.hashInt(sample)) {
|
|
139
|
-
throw 'hashInt';
|
|
140
|
-
}
|
|
141
|
-
if (sha256Pow.meets(easyNBits)(sample) !== built.meets(easyNBits)(sample)) {
|
|
142
|
-
throw 'meets';
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
bitcoinPow: () => {
|
|
146
|
-
if (bitcoinPow.hashInt(sample) !== sha256Pow.hashInt(sample)) {
|
|
147
|
-
throw 'bitcoinPow';
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
independentInstances: () => {
|
|
151
|
-
const a = pow(sha256);
|
|
152
|
-
const b = pow(sha256);
|
|
153
|
-
if (a.hashInt(sample) !== b.hashInt(sample)) {
|
|
154
|
-
throw 'hashInt';
|
|
155
|
-
}
|
|
156
|
-
if (a.meets(easyNBits)(sample) !== b.meets(easyNBits)(sample)) {
|
|
157
|
-
throw 'meets';
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
},
|
|
161
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type List } from '../../types/list/module.f.ts';
|
|
2
|
-
import * as jsTokenizer from '../../js/tokenizer/module.f.ts';
|
|
3
|
-
export type DjsToken = {
|
|
4
|
-
readonly kind: 'true' | 'false' | 'null' | 'undefined';
|
|
5
|
-
} | {
|
|
6
|
-
readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=';
|
|
7
|
-
} | jsTokenizer.StringToken | jsTokenizer.NumberToken | jsTokenizer.ErrorToken | jsTokenizer.IdToken | jsTokenizer.BigIntToken | jsTokenizer.WhitespaceToken | jsTokenizer.NewLineToken | jsTokenizer.CommentToken | jsTokenizer.EofToken;
|
|
8
|
-
export type DjsTokenWithMetadata = {
|
|
9
|
-
readonly token: DjsToken;
|
|
10
|
-
readonly metadata: jsTokenizer.TokenMetadata;
|
|
11
|
-
};
|
|
12
|
-
export declare const tokenize: (input: List<number>) => (path: string) => List<DjsTokenWithMetadata>;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { empty, flat, map, stateScan } from '../../types/list/module.f.js';
|
|
2
|
-
import { multiply } from '../../types/bigfloat/module.f.js';
|
|
3
|
-
import * as jsTokenizer from '../../js/tokenizer/module.f.js';
|
|
4
|
-
const mapToken = input => {
|
|
5
|
-
switch (input.kind) {
|
|
6
|
-
case 'id':
|
|
7
|
-
case 'bigint':
|
|
8
|
-
case '{':
|
|
9
|
-
case '}':
|
|
10
|
-
case ':':
|
|
11
|
-
case ',':
|
|
12
|
-
case '[':
|
|
13
|
-
case ']':
|
|
14
|
-
case '.':
|
|
15
|
-
case '=':
|
|
16
|
-
case 'true':
|
|
17
|
-
case 'false':
|
|
18
|
-
case 'null':
|
|
19
|
-
case 'string':
|
|
20
|
-
case 'number':
|
|
21
|
-
case 'ws':
|
|
22
|
-
case 'nl':
|
|
23
|
-
case 'undefined':
|
|
24
|
-
case '//':
|
|
25
|
-
case '/*':
|
|
26
|
-
case 'eof':
|
|
27
|
-
case 'error': return [input];
|
|
28
|
-
default: return jsTokenizer.isKeywordToken(input) ? [{ kind: 'id', value: input.kind }] : [{ kind: 'error', message: 'invalid token' }];
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
const parseDefaultState = input => {
|
|
32
|
-
switch (input.kind) {
|
|
33
|
-
case 'eof': return [[{ kind: 'eof' }], { kind: 'def' }];
|
|
34
|
-
case '-': return [empty, { kind: '-' }];
|
|
35
|
-
default: return [mapToken(input), { kind: 'def' }];
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const parseMinusState = input => {
|
|
39
|
-
switch (input.kind) {
|
|
40
|
-
case 'eof': return [[{ kind: 'error', message: 'invalid token' }, { kind: 'eof' }], { kind: 'def' }];
|
|
41
|
-
case '-': return [[{ kind: 'error', message: 'invalid token' }], { kind: '-' }];
|
|
42
|
-
case 'bigint': return [[{ kind: 'bigint', value: -1n * input.value }], { kind: 'def' }];
|
|
43
|
-
case 'number': return [[{ kind: 'number', bf: multiply(input.bf)(-1n), value: `-${input.value}` }], { kind: 'def' }];
|
|
44
|
-
default: return [{ first: { kind: 'error', message: 'invalid token' }, tail: mapToken(input) }, { kind: 'def' }];
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
const scanToken = (input, state) => {
|
|
48
|
-
switch (state.kind) {
|
|
49
|
-
case '-': return parseMinusState(input);
|
|
50
|
-
default: return parseDefaultState(input);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
const mapTokenWithMetadata = metadata => token => { return { token, metadata }; };
|
|
54
|
-
const scanTokenWithMetadata = (input, state) => {
|
|
55
|
-
const [djsTokens, newState] = scanToken(input.token, state);
|
|
56
|
-
const djsTokensWithMetadata = map(mapTokenWithMetadata(input.metadata))(djsTokens);
|
|
57
|
-
return [djsTokensWithMetadata, newState];
|
|
58
|
-
};
|
|
59
|
-
export const tokenize = input => path => {
|
|
60
|
-
const jsTokens = jsTokenizer.tokenize(input)(path);
|
|
61
|
-
return flat(stateScan(scanTokenWithMetadata)({ kind: 'def' })(jsTokens));
|
|
62
|
-
};
|