functionalscript 0.36.0 → 0.38.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/module.f.js +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/module.f.js +3 -3
- package/{fs → fjs}/base_n/proof.f.js +15 -39
- package/{fs → fjs/basen}/base128/module.f.d.ts +1 -1
- package/{fs → fjs/basen}/base128/module.f.js +1 -1
- package/{fs → fjs/basen}/base128/proof.f.js +3 -3
- package/{fs → fjs/basen}/base64/module.f.d.ts +2 -2
- package/{fs → fjs/basen}/base64/module.f.js +25 -15
- package/{fs → fjs/basen}/base64/proof.f.d.ts +2 -0
- package/{fs → fjs/basen}/base64/proof.f.js +26 -6
- package/{fs → fjs/basen}/cbase32/module.f.d.ts +2 -2
- package/{fs → fjs/basen}/cbase32/module.f.js +2 -2
- package/{fs → fjs/basen}/cbase32/proof.f.js +16 -43
- package/fjs/bnf/data/module.f.d.ts +52 -0
- package/{fs → fjs}/bnf/data/module.f.js +56 -6
- package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
- package/{fs → fjs}/bnf/data/proof.f.js +59 -24
- 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 +59 -28
- package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
- package/{fs → fjs}/bnf/ll1/module.f.js +15 -13
- package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
- package/{fs → fjs}/bnf/ll1/proof.f.js +33 -16
- package/{fs → fjs}/bnf/module.f.d.ts +19 -5
- package/{fs → fjs}/bnf/module.f.js +14 -15
- package/fjs/bnf/proof.f.js +69 -0
- package/{fs → fjs}/bnf/testlib.f.js +2 -2
- package/{fs → fjs}/cas/cli/module.f.js +7 -7
- package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
- package/{fs → fjs}/cas/cli/proof.f.js +37 -74
- package/fjs/cas/evo/mcp/module.f.d.ts +19 -0
- package/fjs/cas/evo/mcp/module.f.js +56 -0
- package/fjs/cas/evo/mcp/proof.f.d.ts +9 -0
- package/fjs/cas/evo/mcp/proof.f.js +95 -0
- package/fjs/cas/evo/module.f.d.ts +138 -0
- package/fjs/cas/evo/module.f.js +309 -0
- package/fjs/cas/evo/proof.f.d.ts +32 -0
- package/fjs/cas/evo/proof.f.js +453 -0
- package/fjs/cas/mcp/module.f.d.ts +49 -0
- package/fjs/cas/mcp/module.f.js +267 -0
- package/{fs → fjs}/cas/mcp/proof.f.d.ts +7 -2
- package/{fs → fjs}/cas/mcp/proof.f.js +116 -60
- package/{fs → fjs}/cas/module.f.d.ts +10 -0
- package/{fs → fjs}/cas/module.f.js +36 -10
- package/{fs → fjs}/cas/proof.f.d.ts +8 -2
- package/{fs → fjs}/cas/proof.f.js +85 -94
- package/{fs → fjs}/ci/bun/module.f.js +2 -2
- package/{fs → fjs}/ci/common/module.f.d.ts +2 -2
- package/{fs → fjs}/ci/common/module.f.js +4 -4
- package/fjs/ci/config/module.f.d.ts +42 -0
- package/{fs → fjs}/ci/config/module.f.js +6 -8
- package/fjs/ci/deno/module.f.js +20 -0
- package/{fs → fjs}/ci/module.f.js +9 -9
- package/{fs → fjs}/ci/node/module.f.d.ts +1 -1
- package/{fs → fjs}/ci/node/module.f.js +3 -5
- package/{fs → fjs}/ci/playwright/module.f.js +3 -3
- package/{fs → fjs}/ci/proof.f.js +27 -22
- package/{fs → fjs}/ci/rust/module.f.js +11 -3
- package/{fs → fjs}/cli/module.f.js +3 -3
- package/{fs → fjs}/cli/proof.f.js +25 -66
- package/{fs/types → fjs/common}/monoid/module.f.d.ts +1 -1
- package/{fs/types → fjs/common}/monoid/proof.f.js +4 -9
- package/{fs → fjs}/crypto/hmac/module.f.js +2 -2
- package/{fs → fjs}/crypto/hmac/proof.f.js +9 -17
- package/{fs → fjs}/crypto/pow/module.f.js +3 -3
- package/fjs/crypto/pow/proof.f.js +111 -0
- package/{fs → fjs}/crypto/secp/module.f.js +2 -2
- package/{fs → fjs}/crypto/secp/proof.f.js +14 -35
- package/{fs → fjs}/crypto/sha2/module.f.js +2 -2
- package/{fs → fjs}/crypto/sha2/proof.f.js +23 -54
- package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
- package/{fs → fjs}/crypto/sign/module.f.js +11 -8
- package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
- package/{fs → fjs}/crypto/vdf/module.f.js +1 -1
- package/{fs → fjs}/crypto/vdf/proof.f.js +23 -64
- package/{fs → fjs}/dev/module.f.js +6 -6
- package/{fs → fjs}/dev/package_json/module.f.js +6 -6
- package/{fs → fjs}/dev/package_json/proof.f.js +9 -9
- package/{fs → fjs}/dev/proof.f.js +3 -5
- package/{fs → fjs}/djs/ast/module.f.js +2 -2
- package/{fs → fjs}/djs/ast/proof.f.js +8 -16
- package/fjs/djs/examples/m.f.d.ts +2 -0
- package/{fs → fjs}/djs/module.f.d.ts +1 -1
- package/{fs → fjs}/djs/module.f.js +5 -5
- package/{fs → fjs}/djs/parser/module.f.d.ts +5 -0
- package/{fs → fjs}/djs/parser/module.f.js +24 -4
- package/{fs → fjs}/djs/parser/proof.f.js +145 -407
- package/{fs → fjs}/djs/proof.f.js +16 -39
- package/{fs → fjs}/djs/serializer/module.f.js +6 -6
- package/{fs → fjs}/djs/serializer/proof.f.js +18 -43
- 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 +447 -446
- package/{fs → fjs}/djs/transpiler/module.f.d.ts +5 -0
- package/{fs → fjs}/djs/transpiler/module.f.js +21 -11
- package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
- package/fjs/djs/transpiler/proof.f.js +67 -0
- package/{fs → fjs}/effects/memory/module.f.js +4 -4
- package/{fs → fjs}/effects/memory/proof.f.js +11 -24
- package/{fs → fjs}/effects/module.f.js +1 -1
- package/{fs → fjs}/effects/node/memory/module.js +2 -2
- package/{fs → fjs}/effects/node/memory/proof.js +8 -15
- package/{fs → fjs}/effects/node/module.d.ts +1 -1
- package/{fs → fjs}/effects/node/module.f.d.ts +1 -1
- package/{fs → fjs}/effects/node/module.f.js +7 -7
- package/{fs → fjs}/effects/node/module.js +13 -13
- package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
- package/{fs → fjs}/effects/node/proof.f.js +106 -292
- package/{fs → fjs}/effects/node/virtual/module.f.js +7 -7
- package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +2 -0
- package/{fs → fjs}/effects/node/virtual/proof.f.js +44 -30
- package/{fs → fjs}/effects/proof.f.js +18 -47
- package/fjs/emergent_testing/all.test.js +4 -0
- package/{fs → fjs}/emergent_testing/example.f.d.ts +1 -1
- package/{fs → fjs}/emergent_testing/module.f.js +6 -6
- package/{fs → fjs}/emergent_testing/proof.f.d.ts +19 -17
- package/{fs → fjs}/emergent_testing/proof.f.js +14 -14
- package/fjs/emergent_testing/scenarios/all.js +1 -0
- package/{fs → fjs}/fsc/bnf.f.js +2 -2
- package/{fs → fjs}/fsc/json.f.js +1 -1
- package/{fs → fjs}/fsc/module.f.js +7 -7
- package/{fs → fjs}/fsc/proof.f.js +16 -38
- package/{fs → fjs}/fsm/module.f.js +9 -9
- package/{fs → fjs}/fsm/proof.f.js +12 -19
- package/{fs → fjs}/js/tokenizer/module.f.js +7 -7
- package/{fs → fjs}/js/tokenizer/proof.f.js +5 -5
- package/{fs → fjs}/mcp/module.f.d.ts +20 -13
- package/{fs → fjs}/mcp/module.f.js +16 -9
- package/{fs → fjs}/mcp/proof.f.js +17 -17
- package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
- package/{fs → fjs}/mcp/stdio/module.f.js +12 -12
- package/{fs → fjs}/mcp/stdio/proof.f.js +10 -10
- package/{fs → fjs/media}/html/module.f.d.ts +3 -3
- package/{fs → fjs/media}/html/module.f.js +9 -9
- package/{fs → fjs/media}/html/proof.f.js +12 -33
- package/fjs/media/json/module.f.d.ts +50 -0
- package/{fs → fjs/media}/json/module.f.js +7 -7
- package/{fs → fjs/media}/json/parser/module.f.d.ts +7 -2
- package/{fs → fjs/media}/json/parser/module.f.js +21 -7
- package/{fs → fjs/media}/json/parser/proof.f.js +45 -120
- package/{fs → fjs/media}/json/proof.f.js +4 -4
- package/fjs/media/json/rpc/module.f.d.ts +114 -0
- package/{fs → fjs/media}/json/rpc/module.f.js +4 -4
- package/{fs → fjs/media}/json/rpc/proof.f.js +4 -4
- package/fjs/media/json/schema/module.f.d.ts +78 -0
- package/{fs → fjs/media}/json/schema/module.f.js +25 -41
- package/{fs → fjs/media}/json/schema/proof.f.js +6 -9
- package/{fs → fjs/media}/json/serializer/module.f.d.ts +1 -1
- package/{fs → fjs/media}/json/serializer/module.f.js +2 -2
- package/{fs → fjs/media}/json/serializer/proof.f.js +12 -29
- package/{fs → fjs/media}/json/tokenizer/module.f.d.ts +2 -2
- package/{fs → fjs/media}/json/tokenizer/module.f.js +4 -4
- package/{fs → fjs/media}/json/tokenizer/proof.f.js +5 -5
- package/fjs/media/module.f.d.ts +37 -0
- package/fjs/media/module.f.js +23 -0
- package/fjs/media/proof.f.d.ts +9 -0
- package/fjs/media/proof.f.js +58 -0
- package/fjs/media/revision/module.f.d.ts +78 -0
- package/fjs/media/revision/module.f.js +122 -0
- package/fjs/media/revision/proof.f.d.ts +31 -0
- package/fjs/media/revision/proof.f.js +140 -0
- package/{fs/mime → fjs/media/type}/module.f.d.ts +6 -6
- package/{fs/mime → fjs/media/type}/module.f.js +6 -6
- package/{fs/mime → fjs/media/type}/proof.f.js +8 -12
- package/fjs/module.f.d.ts +2 -0
- package/{fs/fjs → fjs}/module.f.js +9 -9
- package/fjs/module.js +4 -0
- package/{fs → fjs}/path/module.f.js +2 -2
- package/{fs → fjs}/path/proof.f.js +27 -78
- package/{fs/fjs → fjs}/proof.f.js +6 -4
- package/{fs → fjs}/sul/id/module.f.js +9 -9
- package/{fs → fjs}/sul/id/proof.f.js +12 -26
- package/{fs → fjs}/sul/level/hash/module.f.js +3 -3
- package/{fs → fjs}/sul/level/hash/proof.f.js +8 -8
- package/{fs → fjs}/sul/level/literal/module.f.js +5 -5
- package/{fs → fjs}/sul/level/literal/proof.f.js +15 -29
- package/{fs → fjs}/sul/module.f.js +3 -3
- package/{fs → fjs}/sul/proof.f.js +3 -3
- package/fjs/text/ascii/proof.f.d.ts +6 -0
- package/fjs/text/ascii/proof.f.js +14 -0
- package/{fs → fjs}/text/code_point/module.f.js +12 -12
- package/{fs → fjs}/text/code_point/proof.f.js +1 -1
- package/{fs → fjs}/text/module.f.js +5 -5
- package/{fs → fjs}/text/proof.f.js +7 -12
- package/{fs → fjs}/text/sgr/module.f.js +2 -2
- package/{fs → fjs}/text/sgr/proof.f.js +8 -17
- package/{fs → fjs}/text/utf16/module.f.js +6 -6
- package/{fs → fjs}/text/utf16/proof.f.js +27 -70
- package/{fs → fjs}/text/utf8/module.f.js +22 -17
- package/{fs → fjs}/text/utf8/proof.f.js +59 -128
- package/{fs → fjs}/types/array/module.f.js +1 -1
- package/{fs → fjs}/types/array/proof.f.js +21 -55
- package/{fs → fjs}/types/bigfloat/module.f.js +1 -1
- package/fjs/types/bigfloat/proof.f.js +217 -0
- package/{fs → fjs}/types/bigint/module.f.js +2 -2
- package/{fs → fjs}/types/bigint/proof.f.js +51 -147
- package/{fs → fjs}/types/bit_vec/module.f.js +8 -8
- package/{fs → fjs}/types/bit_vec/proof.f.js +76 -218
- package/{fs → fjs}/types/btree/find/module.f.js +1 -1
- package/fjs/types/btree/find/proof.f.d.ts +3 -0
- package/fjs/types/btree/find/proof.f.js +108 -0
- package/{fs → fjs}/types/btree/module.f.js +2 -2
- package/fjs/types/btree/proof.f.d.ts +13 -0
- package/{fs → fjs}/types/btree/proof.f.js +12 -19
- package/{fs → fjs}/types/btree/remove/module.f.js +4 -4
- package/fjs/types/btree/remove/proof.f.d.ts +9 -0
- package/{fs → fjs}/types/btree/remove/proof.f.js +88 -235
- package/{fs → fjs}/types/btree/set/module.f.js +8 -5
- package/{fs → fjs}/types/btree/set/proof.f.js +39 -28
- package/{fs → fjs}/types/byte_set/module.f.js +2 -2
- package/fjs/types/byte_set/proof.f.js +79 -0
- package/{fs → fjs}/types/function/compare/proof.f.js +14 -37
- package/fjs/types/function/operator/proof.f.d.ts +23 -0
- package/{fs → fjs}/types/function/operator/proof.f.js +18 -49
- package/{fs → fjs}/types/function/proof.f.js +3 -4
- package/{fs → fjs}/types/list/module.f.js +2 -2
- package/fjs/types/list/proof.f.d.ts +30 -0
- package/{fs → fjs}/types/list/proof.f.js +59 -167
- package/{fs → fjs}/types/map/proof.f.js +6 -14
- package/fjs/types/nibble_set/proof.f.js +60 -0
- package/{fs → fjs}/types/nominal/proof.f.js +5 -10
- package/{fs → fjs}/types/nullable/module.f.js +2 -2
- package/fjs/types/nullable/proof.f.js +29 -0
- package/{fs → fjs}/types/number/module.f.js +5 -5
- package/{fs → fjs}/types/number/proof.f.js +10 -25
- package/{fs → fjs}/types/object/module.f.js +4 -4
- package/{fs → fjs}/types/object/proof.f.js +4 -7
- package/{fs → fjs}/types/ordered_map/module.f.js +6 -6
- package/{fs → fjs}/types/ordered_map/proof.f.js +3 -3
- package/fjs/types/patricia_trie/proof.f.d.ts +13 -0
- package/{fs → fjs}/types/patricia_trie/proof.f.js +22 -22
- package/{fs → fjs}/types/prime_field/module.f.js +3 -8
- package/{fs → fjs}/types/prime_field/proof.f.js +2 -2
- 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/module.f.js +4 -4
- package/{fs → fjs}/types/range_map/proof.f.js +35 -88
- package/{fs → fjs}/types/result/module.js +1 -1
- package/fjs/types/result/proof.f.d.ts +12 -0
- 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 +48 -4
- 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/module.f.d.ts +2 -2
- package/{fs → fjs}/types/rtti/module.f.js +1 -1
- package/{fs → fjs}/types/rtti/parse/module.f.js +16 -25
- package/{fs → fjs}/types/rtti/parse/proof.f.js +9 -20
- package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
- package/{fs → fjs}/types/rtti/ts/module.f.js +1 -1
- package/{fs → fjs}/types/rtti/ts/proof.f.js +2 -2
- package/{fs → fjs}/types/rtti/validate/module.f.js +11 -32
- package/{fs → fjs}/types/rtti/validate/proof.f.js +6 -11
- package/{fs → fjs}/types/sorted_list/module.f.js +3 -3
- package/{fs → fjs}/types/sorted_list/proof.f.js +14 -27
- package/{fs → fjs}/types/sorted_set/module.f.js +1 -1
- package/{fs → fjs}/types/sorted_set/proof.f.js +20 -45
- package/{fs → fjs}/types/string/module.f.js +4 -4
- package/fjs/types/string/proof.f.js +77 -0
- package/{fs → fjs}/types/string_set/module.f.js +6 -6
- package/fjs/types/string_set/proof.f.js +43 -0
- package/{fs → fjs}/types/ts/proof.f.d.ts +18 -18
- package/{fs → fjs}/types/ts/proof.f.js +16 -43
- package/{fs → fjs}/types/uint8array/module.f.js +10 -10
- package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
- package/{fs → fjs}/types/uint8array/proof.f.js +11 -11
- package/{fs → fjs}/website/module.f.js +3 -3
- package/fjs/website/proof.f.js +13 -0
- 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/mcp/module.f.js +0 -249
- package/fs/ci/config/module.f.d.ts +0 -43
- package/fs/ci/deno/module.f.js +0 -16
- package/fs/crypto/pow/proof.f.js +0 -161
- package/fs/djs/examples/m.f.d.ts +0 -2
- 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/djs/transpiler/proof.f.js +0 -68
- package/fs/emergent_testing/all.test.js +0 -4
- package/fs/emergent_testing/scenarios/all.js +0 -1
- package/fs/fjs/module.f.d.ts +0 -2
- package/fs/fjs/module.js +0 -4
- package/fs/json/module.f.d.ts +0 -50
- package/fs/json/rpc/module.f.d.ts +0 -114
- package/fs/json/schema/module.f.d.ts +0 -77
- package/fs/text/ascii/proof.f.d.ts +0 -4
- package/fs/text/ascii/proof.f.js +0 -24
- package/fs/types/bigfloat/proof.f.js +0 -348
- package/fs/types/btree/find/proof.f.js +0 -151
- package/fs/types/btree/proof.f.d.ts +0 -7
- package/fs/types/btree/remove/proof.f.d.ts +0 -4
- package/fs/types/byte_set/proof.f.js +0 -120
- package/fs/types/function/operator/proof.f.d.ts +0 -12
- package/fs/types/list/proof.f.d.ts +0 -22
- package/fs/types/nibble_set/proof.f.js +0 -89
- package/fs/types/nullable/proof.f.js +0 -50
- package/fs/types/patricia_trie/proof.f.d.ts +0 -7
- package/fs/types/range/module.f.js +0 -2
- package/fs/types/range/proof.f.d.ts +0 -1
- package/fs/types/range/proof.f.js +0 -18
- package/fs/types/result/proof.f.d.ts +0 -6
- 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/website/proof.f.js +0 -16
- /package/{fs → fjs}/asn.1/module.f.d.ts +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/proof.f.d.ts +0 -0
- /package/{fs → fjs/basen}/base128/proof.f.d.ts +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/playwright/module.f.d.ts +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/types → fjs/common}/monoid/module.f.js +0 -0
- /package/{fs/types → fjs/common}/monoid/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/hmac/module.f.d.ts +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/proof.f.d.ts +0 -0
- /package/{fs → fjs}/crypto/secp/module.f.d.ts +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/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/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/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/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.js +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/proof.f.d.ts +0 -0
- /package/{fs → fjs}/effects/list/module.f.d.ts +0 -0
- /package/{fs → fjs}/effects/list/module.f.js +0 -0
- /package/{fs → fjs}/effects/memory/module.f.d.ts +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.f.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/proof.d.ts +0 -0
- /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
- /package/{fs → fjs}/effects/proof.f.d.ts +0 -0
- /package/{fs → fjs}/emergent_testing/all.test.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/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/json.f.d.ts +0 -0
- /package/{fs → fjs}/fsc/module.f.d.ts +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/proof.f.d.ts +0 -0
- /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
- /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +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/media}/html/proof.f.d.ts +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/rpc/proof.f.d.ts +0 -0
- /package/{fs → fjs/media}/json/schema/proof.f.d.ts +0 -0
- /package/{fs → fjs/media}/json/serializer/proof.f.d.ts +0 -0
- /package/{fs → fjs/media}/json/tokenizer/proof.f.d.ts +0 -0
- /package/{fs/mime → fjs/media/type}/proof.f.d.ts +0 -0
- /package/{fs/fjs → fjs}/module.d.ts +0 -0
- /package/{fs → fjs}/path/module.f.d.ts +0 -0
- /package/{fs → fjs}/path/proof.f.d.ts +0 -0
- /package/{fs/fjs → fjs}/proof.f.d.ts +0 -0
- /package/{fs → fjs}/sul/id/module.f.d.ts +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/proof.f.d.ts +0 -0
- /package/{fs → fjs}/sul/level/literal/module.f.d.ts +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/proof.f.d.ts +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/module.f.d.ts +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/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/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/array/module.f.d.ts +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/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/module.f.d.ts +0 -0
- /package/{fs → fjs}/types/btree/remove/module.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/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/types/btree/find → 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/types/function/compare → fjs/types/function}/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/list/module.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/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/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/proof.f.d.ts +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/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/types/function → 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/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/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/proof.f.d.ts +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/proof.f.d.ts +0 -0
- /package/{fs → fjs}/types/sorted_set/module.f.d.ts +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/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/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 → fjs}/ci/proof.f.js
RENAMED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { ci, main } from
|
|
2
|
-
import { functionalscript } from
|
|
3
|
-
import { utf8, utf8ToString } from
|
|
4
|
-
import { empty as emptyVec, isVec } from
|
|
5
|
-
import { test, ubuntu, parseGitHubAction } from
|
|
6
|
-
import { assert } from
|
|
7
|
-
import { emptyState, virtual } from
|
|
8
|
-
import { parse as jsonParse } from
|
|
9
|
-
import { unwrap } from
|
|
10
|
-
import { definedValues } from
|
|
1
|
+
import { ci, main } from './module.f.js';
|
|
2
|
+
import { functionalscript } from './config/module.f.js';
|
|
3
|
+
import { utf8, utf8ToString } from '../text/module.f.js';
|
|
4
|
+
import { empty as emptyVec, isVec } from '../types/bit_vec/module.f.js';
|
|
5
|
+
import { test, ubuntu, parseGitHubAction } from './common/module.f.js';
|
|
6
|
+
import { assert, assertEq } from '../asserts/module.f.js';
|
|
7
|
+
import { emptyState, virtual } from '../effects/node/virtual/module.f.js';
|
|
8
|
+
import { parse as jsonParse } from '../media/json/module.f.js';
|
|
9
|
+
import { unwrap } from '../types/result/module.f.js';
|
|
10
|
+
import { definedValues } from '../types/object/module.f.js';
|
|
11
11
|
const hasRun = (cmd) => (gha) => definedValues(gha.jobs).some(job => job.steps.some(step => step.run?.includes(cmd)));
|
|
12
12
|
const hasRunInJob = (jobId, cmd) => (gha) => gha.jobs[jobId]?.steps.some(step => step.run?.includes(cmd)) ?? false;
|
|
13
|
+
const hasExactRunInJob = (jobId, cmd) => (gha) => gha.jobs[jobId]?.steps.some(step => step.run === cmd) ?? false;
|
|
13
14
|
const makeState = (rust, packageJson) => ({
|
|
14
15
|
...emptyState,
|
|
15
16
|
root: {
|
|
@@ -24,27 +25,25 @@ const workflow = (state) => {
|
|
|
24
25
|
const workflows = dotGithub['workflows'];
|
|
25
26
|
assert(typeof workflows === 'object' && !Array.isArray(workflows), workflows);
|
|
26
27
|
const file = workflows['ci.yml'];
|
|
27
|
-
|
|
28
|
-
throw file;
|
|
29
|
-
}
|
|
28
|
+
assert(!(!Array.isArray(file) || file.length === 0), file);
|
|
30
29
|
return unwrap(parseGitHubAction(jsonParse(utf8ToString(file[0]))));
|
|
31
30
|
};
|
|
32
31
|
const run = (rust, nodeExtra = () => []) => {
|
|
33
32
|
const [state, result] = virtual(makeState(rust))(ci({ nodeExtra }));
|
|
34
|
-
|
|
33
|
+
assertEq(result, 0);
|
|
35
34
|
return workflow(state);
|
|
36
35
|
};
|
|
37
36
|
const runDefault = (packageJson) => {
|
|
38
37
|
const [state, result] = virtual(makeState(false, packageJson))(main());
|
|
39
|
-
|
|
38
|
+
assertEq(result, 0);
|
|
40
39
|
return workflow(state);
|
|
41
40
|
};
|
|
42
41
|
export const proof = {
|
|
43
42
|
matrixShape: () => {
|
|
44
43
|
const gha = run(true);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
assertEq(Object.keys(gha.jobs).length, 13, 'expected 13 CI jobs');
|
|
45
|
+
assertEq(gha.permissions.contents, 'read', 'expected read-only contents permission');
|
|
46
|
+
assertEq(Object.keys(gha.permissions).length, 1, 'expected least-privilege workflow permissions');
|
|
48
47
|
assert(hasRunInJob('ubuntu-intel', 'cargo test --target i686-unknown-linux-gnu')(gha), 'expected Ubuntu Intel i686 check');
|
|
49
48
|
assert(hasRunInJob('ubuntu-intel', 'cargo test --target i686-unknown-linux-gnu --release')(gha), 'expected Ubuntu Intel i686 release check');
|
|
50
49
|
assert(hasRunInJob('ubuntu-intel', 'cargo clippy --target i686-unknown-linux-gnu -- -D warnings')(gha), 'expected Ubuntu Intel i686 lint');
|
|
@@ -55,6 +54,12 @@ export const proof = {
|
|
|
55
54
|
assert(hasRunInJob('wasm', 'cargo test --target wasm32-wasip1 --release')(gha), 'expected target-specific WASM release check');
|
|
56
55
|
assert(hasRunInJob('wasm', 'cargo clippy --target wasm32-wasip1 -- -D warnings')(gha), 'expected target-specific WASM Rust lint');
|
|
57
56
|
assert(hasRunInJob('wasm', 'cargo clippy --target wasm32-wasip1 --release -- -D warnings')(gha), 'expected target-specific WASM release lint');
|
|
57
|
+
// Wasmtime 47 removed wasi-threads: the threads target must run under
|
|
58
|
+
// Wasmer only, while Clippy (no runner) stays.
|
|
59
|
+
assert(hasRunInJob('wasm', 'cargo test --target wasm32-wasip1-threads --config .cargo/config.wasmer.toml')(gha), 'expected Wasmer WASM threads check');
|
|
60
|
+
assert(hasRunInJob('wasm', 'cargo clippy --target wasm32-wasip1-threads -- -D warnings')(gha), 'expected WASM threads lint');
|
|
61
|
+
assert(!hasExactRunInJob('wasm', 'cargo test --target wasm32-wasip1-threads')(gha), 'unexpected Wasmtime WASM threads check');
|
|
62
|
+
assert(!hasExactRunInJob('wasm', 'cargo test --target wasm32-wasip1-threads --release')(gha), 'unexpected Wasmtime WASM threads release check');
|
|
58
63
|
assert(hasRunInJob('node22', 'fjs t')(gha), 'expected Node 22 FunctionalScript smoke test');
|
|
59
64
|
assert(hasRunInJob('node26', 'npm pack')(gha), 'expected Node 26 package check');
|
|
60
65
|
assert(!hasRun('npm publish --dry-run')(gha), 'unexpected npm publish dry-run');
|
|
@@ -104,20 +109,20 @@ export const proof = {
|
|
|
104
109
|
functionalscriptPackage: () => {
|
|
105
110
|
const gha = runDefault('{"name":"functionalscript"}');
|
|
106
111
|
assert(hasRun('fjs t')(gha), 'expected fjs self-test');
|
|
107
|
-
assert(hasRun(`deno run -A npm:functionalscript@${functionalscript} t`)(gha), 'expected deno self-test');
|
|
112
|
+
assert(hasRun(`deno run -A --minimum-dependency-age=0 npm:functionalscript@${functionalscript} t`)(gha), 'expected deno self-test');
|
|
108
113
|
assert(hasRun(`bunx functionalscript@${functionalscript} t`)(gha), 'expected bun self-test');
|
|
109
114
|
},
|
|
110
115
|
otherPackage: () => {
|
|
111
116
|
const gha = runDefault('{"name":"other-package"}');
|
|
112
|
-
assert(hasRun(`deno run -A npm:functionalscript@${functionalscript} t`)(gha), 'expected canonical deno self-test');
|
|
117
|
+
assert(hasRun(`deno run -A --minimum-dependency-age=0 npm:functionalscript@${functionalscript} t`)(gha), 'expected canonical deno self-test');
|
|
113
118
|
assert(hasRun(`bunx functionalscript@${functionalscript} t`)(gha), 'expected canonical bun self-test');
|
|
114
119
|
},
|
|
115
120
|
configuredPackageVersion: () => {
|
|
116
121
|
const gha = runDefault('{"name":"other-package","version":"1.2.3"}');
|
|
117
122
|
assert(hasRun(`npm install -g functionalscript@${functionalscript}`)(gha), 'expected configured-version platform install');
|
|
118
|
-
assert(hasRun(`deno install -g -A npm:functionalscript@${functionalscript}`)(gha), 'expected configured-version deno install cache');
|
|
123
|
+
assert(hasRun(`deno install -g -A --minimum-dependency-age=0 npm:functionalscript@${functionalscript}`)(gha), 'expected configured-version deno install cache');
|
|
119
124
|
assert(hasRun('deno install --frozen')(gha), 'expected deno lock install');
|
|
120
|
-
assert(hasRun(`deno run -A npm:functionalscript@${functionalscript} t`)(gha), 'expected configured-version deno install');
|
|
125
|
+
assert(hasRun(`deno run -A --minimum-dependency-age=0 npm:functionalscript@${functionalscript} t`)(gha), 'expected configured-version deno install');
|
|
121
126
|
assert(hasRun("deno test --allow-read --allow-env --allow-sys --coverage && deno coverage --include='.*module\\.f\\.ts'")(gha), 'expected limited-permission deno coverage');
|
|
122
127
|
assert(hasRun(`bun install -g functionalscript@${functionalscript}`)(gha), 'expected configured-version bun cache');
|
|
123
128
|
assert(hasRun('bun install --frozen-lockfile')(gha), 'expected bun lock install');
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
-
import { wasmer, wasmtime } from
|
|
10
|
-
import { install, test, uses } from
|
|
9
|
+
import { wasmer, wasmtime } from '../config/module.f.js';
|
|
10
|
+
import { install, test, uses } from '../common/module.f.js';
|
|
11
11
|
const cargoCommand = (tool, target, config) => {
|
|
12
12
|
const to = target ? ` --target ${target}` : '';
|
|
13
13
|
const co = config ? ` --config ${config}` : '';
|
|
@@ -39,6 +39,14 @@ const wasmTarget = (target) => [
|
|
|
39
39
|
...targetChecks(target),
|
|
40
40
|
...cargoTestPair(target, '.cargo/config.wasmer.toml')
|
|
41
41
|
];
|
|
42
|
+
// Wasmtime 47 removed wasi-threads, so the threads target runs under Wasmer
|
|
43
|
+
// only; Clippy needs no runner and stays. See todo/blocked/wasmtime-threads.md.
|
|
44
|
+
const wasmerOnlyTarget = (target) => [
|
|
45
|
+
{ type: 'rust', target },
|
|
46
|
+
cargoClippy(target),
|
|
47
|
+
cargoReleaseClippy(target),
|
|
48
|
+
...cargoTestPair(target, '.cargo/config.wasmer.toml')
|
|
49
|
+
];
|
|
42
50
|
const i686 = (a, v) => {
|
|
43
51
|
if (a === 'intel') {
|
|
44
52
|
switch (v) {
|
|
@@ -63,5 +71,5 @@ export const rustWasmSteps = [
|
|
|
63
71
|
...wasmTarget('wasm32-wasip1'),
|
|
64
72
|
...wasmTarget('wasm32-wasip2'),
|
|
65
73
|
...wasmTarget('wasm32-unknown-unknown'),
|
|
66
|
-
...
|
|
74
|
+
...wasmerOnlyTarget('wasm32-wasip1-threads'),
|
|
67
75
|
];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { errorExit, log } from
|
|
2
|
-
import { pure } from
|
|
3
|
-
import { at, fromEntries } from
|
|
1
|
+
import { errorExit, log } from '../effects/node/module.f.js';
|
|
2
|
+
import { pure } from '../effects/module.f.js';
|
|
3
|
+
import { at, fromEntries } from '../types/object/module.f.js';
|
|
4
4
|
const helpMeta = { names: ['help', 'h', '?'], description: 'Print this help message' };
|
|
5
5
|
export const dispatch = (commands) => (options) => {
|
|
6
6
|
const [cmd, ...rest] = options.args;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { pure } from
|
|
2
|
-
import { defaultNodeProgramOptions, emptyState, virtual } from
|
|
3
|
-
import { dispatch } from
|
|
1
|
+
import { pure } from '../effects/module.f.js';
|
|
2
|
+
import { defaultNodeProgramOptions, emptyState, virtual } from '../effects/node/virtual/module.f.js';
|
|
3
|
+
import { dispatch } from './module.f.js';
|
|
4
|
+
import { assert, assertEq } from '../asserts/module.f.js';
|
|
4
5
|
const makeOptions = (args) => ({ ...defaultNodeProgramOptions, args });
|
|
5
6
|
const echoCommands = [
|
|
6
7
|
{
|
|
@@ -13,51 +14,31 @@ const run = (commands) => (args) => virtual(emptyState)(dispatch(commands)(makeO
|
|
|
13
14
|
export const proof = {
|
|
14
15
|
knownCommand: () => {
|
|
15
16
|
const [, code] = run(echoCommands)(['echo', 'hello']);
|
|
16
|
-
|
|
17
|
-
throw ['expected length 5', code];
|
|
18
|
-
}
|
|
17
|
+
assertEq(code, 5, ['expected length 5', code]);
|
|
19
18
|
},
|
|
20
19
|
alias: () => {
|
|
21
20
|
const [, code] = run(echoCommands)(['e', 'hi']);
|
|
22
|
-
|
|
23
|
-
throw ['expected length 2', code];
|
|
24
|
-
}
|
|
21
|
+
assertEq(code, 2, ['expected length 2', code]);
|
|
25
22
|
},
|
|
26
23
|
noArgs: () => {
|
|
27
24
|
const [state, code] = run(echoCommands)([]);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
if (state.stderr.length === 0) {
|
|
32
|
-
throw 'expected error in stderr';
|
|
33
|
-
}
|
|
25
|
+
assertEq(code, 1, ['expected exit 1', code]);
|
|
26
|
+
assert(state.stderr.length !== 0, 'expected error in stderr');
|
|
34
27
|
},
|
|
35
28
|
unknownCommand: () => {
|
|
36
29
|
const [state, code] = run(echoCommands)(['bogus']);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
if (state.stderr.length === 0) {
|
|
41
|
-
throw 'expected error in stderr';
|
|
42
|
-
}
|
|
30
|
+
assertEq(code, 1, ['expected exit 1', code]);
|
|
31
|
+
assert(state.stderr.length !== 0, 'expected error in stderr');
|
|
43
32
|
},
|
|
44
33
|
help: () => {
|
|
45
34
|
const [state, code] = run(echoCommands)(['help']);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (!state.stdout.includes('echo')) {
|
|
50
|
-
throw 'expected command name in stdout';
|
|
51
|
-
}
|
|
52
|
-
if (!state.stdout.includes('help')) {
|
|
53
|
-
throw 'expected help entry in stdout';
|
|
54
|
-
}
|
|
35
|
+
assertEq(code, 0, ['expected exit 0', code]);
|
|
36
|
+
assert(state.stdout.includes('echo'), 'expected command name in stdout');
|
|
37
|
+
assert(state.stdout.includes('help'), 'expected help entry in stdout');
|
|
55
38
|
},
|
|
56
39
|
errorIncludesAvailable: () => {
|
|
57
40
|
const [state] = run(echoCommands)(['bogus']);
|
|
58
|
-
|
|
59
|
-
throw 'expected available commands in error';
|
|
60
|
-
}
|
|
41
|
+
assert(state.stderr.includes('echo'), 'expected available commands in error');
|
|
61
42
|
},
|
|
62
43
|
handlerReceivesRemainingArgs: () => {
|
|
63
44
|
const captured = [];
|
|
@@ -70,9 +51,7 @@ export const proof = {
|
|
|
70
51
|
},
|
|
71
52
|
}];
|
|
72
53
|
run(commands)(['grab', 'a', 'b', 'c']);
|
|
73
|
-
|
|
74
|
-
throw ['unexpected args', captured];
|
|
75
|
-
}
|
|
54
|
+
assertEq(captured.join(','), 'a,b,c', ['unexpected args', captured]);
|
|
76
55
|
},
|
|
77
56
|
nestedCommands: () => {
|
|
78
57
|
const inner = [{
|
|
@@ -86,9 +65,7 @@ export const proof = {
|
|
|
86
65
|
handler: inner,
|
|
87
66
|
}];
|
|
88
67
|
const [, code] = run(outer)(['sub', 'ping']);
|
|
89
|
-
|
|
90
|
-
throw ['expected 42', code];
|
|
91
|
-
}
|
|
68
|
+
assertEq(code, 42, ['expected 42', code]);
|
|
92
69
|
},
|
|
93
70
|
nestedHelp: () => {
|
|
94
71
|
const inner = [{
|
|
@@ -102,30 +79,18 @@ export const proof = {
|
|
|
102
79
|
handler: inner,
|
|
103
80
|
}];
|
|
104
81
|
const [state, code] = run(outer)(['sub', 'help']);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
if (!state.stdout.includes('ping')) {
|
|
109
|
-
throw 'expected inner command in help';
|
|
110
|
-
}
|
|
82
|
+
assertEq(code, 0, ['expected exit 0', code]);
|
|
83
|
+
assert(state.stdout.includes('ping'), 'expected inner command in help');
|
|
111
84
|
},
|
|
112
85
|
prototypeNameIsUnknownCommand: () => {
|
|
113
86
|
const [state, code] = run(echoCommands)(['toString']);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
if (!state.stderr.includes('unknown command')) {
|
|
118
|
-
throw 'expected unknown-command error in stderr';
|
|
119
|
-
}
|
|
87
|
+
assertEq(code, 1, ['expected exit 1 for prototype-name command', code]);
|
|
88
|
+
assert(state.stderr.includes('unknown command'), 'expected unknown-command error in stderr');
|
|
120
89
|
},
|
|
121
90
|
helpPrototypeSafe: () => {
|
|
122
91
|
const [state, code] = run(echoCommands)(['help', 'toString']);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
if (!state.stdout.includes('echo')) {
|
|
127
|
-
throw 'expected top-level help for unknown target';
|
|
128
|
-
}
|
|
92
|
+
assertEq(code, 0, ['expected exit 0, not a throw', code]);
|
|
93
|
+
assert(state.stdout.includes('echo'), 'expected top-level help for unknown target');
|
|
129
94
|
},
|
|
130
95
|
helpWithTarget: () => {
|
|
131
96
|
const inner = [{
|
|
@@ -139,14 +104,8 @@ export const proof = {
|
|
|
139
104
|
handler: inner,
|
|
140
105
|
}];
|
|
141
106
|
const [state, code] = run(outer)(['help', 'sub']);
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (!state.stdout.includes('ping')) {
|
|
146
|
-
throw 'expected inner command in help';
|
|
147
|
-
}
|
|
148
|
-
if (state.stdout.includes('Subcommand group')) {
|
|
149
|
-
throw 'expected inner help, not outer';
|
|
150
|
-
}
|
|
107
|
+
assertEq(code, 0, ['expected exit 0', code]);
|
|
108
|
+
assert(state.stdout.includes('ping'), 'expected inner command in help');
|
|
109
|
+
assert(!(state.stdout.includes('Subcommand group')), 'expected inner help, not outer');
|
|
151
110
|
},
|
|
152
111
|
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
import type { Fold, Reduce } from '
|
|
8
|
+
import type { Fold, Reduce } from '../../types/function/operator/module.f.ts';
|
|
9
9
|
/**
|
|
10
10
|
* Represents a monoid, an algebraic structure with a binary operation
|
|
11
11
|
* and an identity (neutral) element.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { repeat } from "./module.f.js";
|
|
2
|
+
import { assertEq } from '../../asserts/module.f.js';
|
|
2
3
|
export const proof = {
|
|
3
4
|
numberAdd: () => {
|
|
4
5
|
const add = {
|
|
@@ -6,13 +7,9 @@ export const proof = {
|
|
|
6
7
|
operation: a => b => a + b,
|
|
7
8
|
};
|
|
8
9
|
const resultAdd = repeat(add)(10n)(2); // 20
|
|
9
|
-
|
|
10
|
-
throw resultAdd;
|
|
11
|
-
}
|
|
10
|
+
assertEq(resultAdd, 20);
|
|
12
11
|
const id = repeat(add)(0n)(42);
|
|
13
|
-
|
|
14
|
-
throw id;
|
|
15
|
-
}
|
|
12
|
+
assertEq(id, 0);
|
|
16
13
|
},
|
|
17
14
|
stringConcat: () => {
|
|
18
15
|
const concat = {
|
|
@@ -20,8 +17,6 @@ export const proof = {
|
|
|
20
17
|
operation: a => b => a + b,
|
|
21
18
|
};
|
|
22
19
|
const resultConcat = repeat(concat)(3n)('ha'); // 'hahaha'
|
|
23
|
-
|
|
24
|
-
throw resultConcat;
|
|
25
|
-
}
|
|
20
|
+
assertEq(resultConcat, 'hahaha');
|
|
26
21
|
}
|
|
27
22
|
};
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* if (r !== vec(256n)(0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8n)) { throw r }
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
-
import { length, msb, vec, vec8, repeat } from
|
|
21
|
-
import { computeSync } from
|
|
20
|
+
import { length, msb, vec, vec8, repeat } from '../../types/bit_vec/module.f.js';
|
|
21
|
+
import { computeSync } from '../sha2/module.f.js';
|
|
22
22
|
const { concat, xor } = msb;
|
|
23
23
|
/**
|
|
24
24
|
* Outer padding.
|
|
@@ -1,34 +1,26 @@
|
|
|
1
|
-
import { assertEq } from
|
|
2
|
-
import { utf8 } from
|
|
3
|
-
import { uint, vec } from
|
|
4
|
-
import { sha256, sha384, sha512 } from
|
|
5
|
-
import { hmac } from
|
|
1
|
+
import { assertEq } from '../../asserts/module.f.js';
|
|
2
|
+
import { utf8 } from '../../text/module.f.js';
|
|
3
|
+
import { uint, vec } from '../../types/bit_vec/module.f.js';
|
|
4
|
+
import { sha256, sha384, sha512 } from '../sha2/module.f.js';
|
|
5
|
+
import { hmac } from './module.f.js';
|
|
6
6
|
export const proof = {
|
|
7
7
|
example: () => {
|
|
8
8
|
const r = hmac(sha256)(utf8('key'))(utf8('The quick brown fox jumps over the lazy dog'));
|
|
9
|
-
|
|
10
|
-
throw r;
|
|
11
|
-
}
|
|
9
|
+
assertEq(r, vec(256n)(0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8n));
|
|
12
10
|
},
|
|
13
11
|
sha256: () => {
|
|
14
12
|
const r = hmac(sha256)(utf8('key'))(utf8('The quick brown fox jumps over the lazy dog'));
|
|
15
|
-
|
|
16
|
-
throw r;
|
|
17
|
-
}
|
|
13
|
+
assertEq(uint(r), 0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8n, r);
|
|
18
14
|
},
|
|
19
15
|
sha384: () => {
|
|
20
16
|
const k = vec(384n)(0n);
|
|
21
17
|
const m = vec(904n)(0x0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010069c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc9a9083505bc92276aec4be312696ef7bf3bf603f4bbd381196a029f340585312n);
|
|
22
18
|
const r = hmac(sha384)(k)(m);
|
|
23
|
-
|
|
24
|
-
throw uint(r).toString(16);
|
|
25
|
-
}
|
|
19
|
+
assertEq(r, vec(384n)(0x8f858157ce005cd52fd8e8f1a46b55e6cfae21c8c183d9c2f7504bedf450609edd7d3c6171dc0bdd2d2444faa28f18ban), uint(r).toString(16));
|
|
26
20
|
},
|
|
27
21
|
sha512: () => {
|
|
28
22
|
const r = hmac(sha512)(utf8('key'))(utf8('The quick brown fox jumps over the lazy dog'));
|
|
29
|
-
|
|
30
|
-
throw r;
|
|
31
|
-
}
|
|
23
|
+
assertEq(r, vec(512n)(0xb42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3an));
|
|
32
24
|
},
|
|
33
25
|
// RFC 4231 Test Case 6: key (131 bytes of 0xaa = 1048 bits) exceeds SHA-256 block size (512 bits),
|
|
34
26
|
// so the key is first compressed via the hash function before use.
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
|
-
import { mask } from
|
|
8
|
-
import { uint } from
|
|
9
|
-
import { computeSync, sha256 } from
|
|
7
|
+
import { mask } from '../../types/bigint/module.f.js';
|
|
8
|
+
import { uint } from '../../types/bit_vec/module.f.js';
|
|
9
|
+
import { computeSync, sha256 } from '../sha2/module.f.js';
|
|
10
10
|
const nBitsMantissa = mask(24n);
|
|
11
11
|
const mantissaSign = 0x00800000n;
|
|
12
12
|
const mantissaBody = 0x007fffffn;
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
import { assert, assertEq, assertNotNullish } from '../../asserts/module.f.js';
|
|
6
|
+
const p256 = sha256Pow;
|
|
7
|
+
const p224 = pow(sha224);
|
|
8
|
+
const sample = utf8('functionalscript pow proof');
|
|
9
|
+
const emptyData = empty;
|
|
10
|
+
/** Target large enough for {@link sample} under SHA-256 (`0x207fffff`). */
|
|
11
|
+
const easyNBits = 0x207fffffn;
|
|
12
|
+
/** Compact encoding for target `1` (`0x03000001`). */
|
|
13
|
+
const hardNBits = 0x03000001n;
|
|
14
|
+
/** SHA-256 of the empty message (NIST / Bitcoin block merkle uses this primitive). */
|
|
15
|
+
const sha256EmptyHash = 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855n;
|
|
16
|
+
/** Bitcoin block #0 header hash as big-endian uint256. */
|
|
17
|
+
const block0Hash = 0x000000000019d6689c085ae165831e934ff763ae46a2a6cffb388491c27dc990n;
|
|
18
|
+
const expectNull = (nBits) => {
|
|
19
|
+
assertEq(targetFromNBits(nBits), null, nBits);
|
|
20
|
+
};
|
|
21
|
+
export const proof = {
|
|
22
|
+
targetFromNBits: {
|
|
23
|
+
genesis: () => {
|
|
24
|
+
assertEq(targetFromNBits(genesisNBits), genesisTarget, 'genesis target');
|
|
25
|
+
},
|
|
26
|
+
block0HashWithinGenesisTarget: () => {
|
|
27
|
+
assert(!(block0Hash > genesisTarget), 'block0 hash exceeds genesis target');
|
|
28
|
+
},
|
|
29
|
+
exponent3: () => {
|
|
30
|
+
assertEq(targetFromNBits(0x030000ffn), 0xffn, 'exponent 3');
|
|
31
|
+
},
|
|
32
|
+
exponent2: () => {
|
|
33
|
+
assertEq(targetFromNBits(0x02008000n), 0x80n, 'exponent 2');
|
|
34
|
+
},
|
|
35
|
+
hardTargetOne: () => {
|
|
36
|
+
assertEq(targetFromNBits(hardNBits), 1n, 'hard target');
|
|
37
|
+
},
|
|
38
|
+
zero: () => {
|
|
39
|
+
assertEq(targetFromNBits(0n), 0n, 'zero nBits');
|
|
40
|
+
},
|
|
41
|
+
negative: () => {
|
|
42
|
+
expectNull(0x01800001n);
|
|
43
|
+
},
|
|
44
|
+
negativeHighMantissa: () => {
|
|
45
|
+
expectNull(0x22ffffffn);
|
|
46
|
+
},
|
|
47
|
+
overflowExponent: () => {
|
|
48
|
+
expectNull(0x23000001n);
|
|
49
|
+
},
|
|
50
|
+
exceeds256: () => {
|
|
51
|
+
expectNull(0x227fffffn);
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
meets: {
|
|
55
|
+
easy: () => {
|
|
56
|
+
assert(p256.meets(easyNBits)(sample), 'easy nBits should pass');
|
|
57
|
+
},
|
|
58
|
+
hard: () => {
|
|
59
|
+
assert(!(p256.meets(hardNBits)(sample)), 'target 1 should fail');
|
|
60
|
+
},
|
|
61
|
+
genesisFailsSample: () => {
|
|
62
|
+
assert(!(p256.meets(genesisNBits)(sample)), 'genesis target too hard for sample');
|
|
63
|
+
},
|
|
64
|
+
zeroTargetRejectsSample: () => {
|
|
65
|
+
assert(!(p256.meets(0n)(sample)), 'non-zero hash vs zero target');
|
|
66
|
+
},
|
|
67
|
+
invalidNBits: () => {
|
|
68
|
+
assert(!(p256.meets(0x01800001n)(sample)), 'invalid nBits should not pass');
|
|
69
|
+
},
|
|
70
|
+
hashLeqTarget: () => {
|
|
71
|
+
const h = p256.hashInt(sample);
|
|
72
|
+
const target = assertNotNullish(targetFromNBits(easyNBits), 'easy nBits decode');
|
|
73
|
+
assert(!(h > target), 'hash above easy target');
|
|
74
|
+
assert(h <= target, 'hash <= target');
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
hashInt: {
|
|
78
|
+
sha256Sample: () => {
|
|
79
|
+
const digest = computeSync(sha256)([sample]);
|
|
80
|
+
assertEq(p256.hashInt(sample), uint(digest), 'sha256 sample');
|
|
81
|
+
},
|
|
82
|
+
sha256Empty: () => {
|
|
83
|
+
assertEq(p256.hashInt(emptyData), sha256EmptyHash, 'sha256 empty constant');
|
|
84
|
+
const digest = computeSync(sha256)([emptyData]);
|
|
85
|
+
assertEq(p256.hashInt(emptyData), uint(digest), 'sha256 empty');
|
|
86
|
+
},
|
|
87
|
+
sha224: () => {
|
|
88
|
+
const digest = computeSync(sha224)([sample]);
|
|
89
|
+
assertEq(p224.hashInt(sample), uint(digest), 'sha224');
|
|
90
|
+
},
|
|
91
|
+
stable: () => {
|
|
92
|
+
assertEq(p256.hashInt(sample), p256.hashInt(sample), 'stable');
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
pow: {
|
|
96
|
+
sha256Pow: () => {
|
|
97
|
+
const built = pow(sha256);
|
|
98
|
+
assertEq(sha256Pow.hashInt(sample), built.hashInt(sample), 'hashInt');
|
|
99
|
+
assertEq(sha256Pow.meets(easyNBits)(sample), built.meets(easyNBits)(sample), 'meets');
|
|
100
|
+
},
|
|
101
|
+
bitcoinPow: () => {
|
|
102
|
+
assertEq(bitcoinPow.hashInt(sample), sha256Pow.hashInt(sample), 'bitcoinPow');
|
|
103
|
+
},
|
|
104
|
+
independentInstances: () => {
|
|
105
|
+
const a = pow(sha256);
|
|
106
|
+
const b = pow(sha256);
|
|
107
|
+
assertEq(a.hashInt(sample), b.hashInt(sample), 'hashInt');
|
|
108
|
+
assertEq(a.meets(easyNBits)(sample), b.meets(easyNBits)(sample), 'meets');
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { prime_field, sqrt } from
|
|
2
|
-
import { repeat } from
|
|
1
|
+
import { prime_field, sqrt } from '../../types/prime_field/module.f.js';
|
|
2
|
+
import { repeat } from '../../common/monoid/module.f.js';
|
|
3
3
|
/**
|
|
4
4
|
* Constructs an elliptic curve with the given initialization parameters.
|
|
5
5
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { assert } from
|
|
2
|
-
import { prime_field } from
|
|
3
|
-
import { curve, secp256k1, secp192r1, secp256r1, eq, secp384r1, secp521r1 } from
|
|
1
|
+
import { assert, assertEq, assertNotNullish } from '../../asserts/module.f.js';
|
|
2
|
+
import { prime_field } from '../../types/prime_field/module.f.js';
|
|
3
|
+
import { curve, secp256k1, secp192r1, secp256r1, eq, secp384r1, secp521r1 } from './module.f.js';
|
|
4
4
|
const poker = (param) => () => {
|
|
5
5
|
// (c ^ x) ^ y = c ^ (x * y)
|
|
6
6
|
// c ^ ((x * y) * (1/x * 1/y)) = c
|
|
@@ -44,13 +44,9 @@ const poker = (param) => () => {
|
|
|
44
44
|
//
|
|
45
45
|
let m = 0n;
|
|
46
46
|
for (const p of dN) {
|
|
47
|
-
|
|
48
|
-
throw 'null';
|
|
49
|
-
}
|
|
47
|
+
assert(p !== null, 'null');
|
|
50
48
|
const x = p[0] & 0x3fn;
|
|
51
|
-
|
|
52
|
-
throw [p[0], x, m];
|
|
53
|
-
}
|
|
49
|
+
assertEq(x, m, [p[0], x, m]);
|
|
54
50
|
++m;
|
|
55
51
|
}
|
|
56
52
|
};
|
|
@@ -72,42 +68,25 @@ export const proof = {
|
|
|
72
68
|
const test_curve = c => {
|
|
73
69
|
const { mul, neg, pf: { abs }, y: yf, nf: { p: n }, g } = c;
|
|
74
70
|
const point_check = (p) => {
|
|
75
|
-
|
|
76
|
-
throw 'p === null';
|
|
77
|
-
}
|
|
71
|
+
assert(p !== null, 'p === null');
|
|
78
72
|
const [x, y] = p;
|
|
79
|
-
const ye = yf(x);
|
|
80
|
-
|
|
81
|
-
throw 'ye === null';
|
|
82
|
-
}
|
|
83
|
-
if (abs(ye) !== abs(y)) {
|
|
84
|
-
throw 'ye';
|
|
85
|
-
}
|
|
73
|
+
const ye = assertNotNullish(yf(x), 'ye === null');
|
|
74
|
+
assertEq(abs(ye), abs(y), 'ye');
|
|
86
75
|
};
|
|
87
76
|
point_check(g);
|
|
88
77
|
point_check(neg(g));
|
|
89
78
|
const test_mul = (p) => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (mul(1n)(p) !== p) {
|
|
94
|
-
throw 'p';
|
|
95
|
-
}
|
|
96
|
-
if (mul(n)(p) !== null) {
|
|
97
|
-
throw 'n';
|
|
98
|
-
}
|
|
79
|
+
assertEq(mul(0n)(p), null, 'O');
|
|
80
|
+
assertEq(mul(1n)(p), p, 'p');
|
|
81
|
+
assertEq(mul(n)(p), null, 'n');
|
|
99
82
|
const pn = neg(p);
|
|
100
|
-
|
|
101
|
-
throw 'n - 1';
|
|
102
|
-
}
|
|
83
|
+
assert(eq(mul(n - 1n)(p))(pn), 'n - 1');
|
|
103
84
|
const f = s => {
|
|
104
85
|
const r = mul(s)(p);
|
|
105
86
|
point_check(r);
|
|
106
87
|
const rn = mul(s)(pn);
|
|
107
88
|
point_check(rn);
|
|
108
|
-
|
|
109
|
-
throw 'r != -rn';
|
|
110
|
-
}
|
|
89
|
+
assert(eq(r)(neg(rn)), 'r != -rn');
|
|
111
90
|
};
|
|
112
91
|
f(2n);
|
|
113
92
|
f(3n);
|
|
@@ -136,7 +115,7 @@ export const proof = {
|
|
|
136
115
|
// Cover null (point at infinity) branches in neg, add, and eq.
|
|
137
116
|
nullPointOps: () => {
|
|
138
117
|
const c = secp256k1;
|
|
139
|
-
|
|
118
|
+
assertEq(c.neg(null), null);
|
|
140
119
|
assert(eq(null)(null));
|
|
141
120
|
assert(!eq(null)(c.g));
|
|
142
121
|
assert(!eq(c.g)(null));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { mask } from "../../types/bigint/module.f.js";
|
|
2
|
-
import { vec, length, empty, msb, chunkList, uint } from
|
|
3
|
-
import { fold } from
|
|
2
|
+
import { vec, length, empty, msb, chunkList, uint } from '../../types/bit_vec/module.f.js';
|
|
3
|
+
import { fold } from '../../types/list/module.f.js';
|
|
4
4
|
const { concat, front } = msb;
|
|
5
5
|
// `chunkList(msb)` depends on neither `chunkLength` nor `v`/`state` — shared
|
|
6
6
|
// across every `base(...)` config (32-bit and 64-bit SHA-2 variants).
|