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/README.md
CHANGED
|
@@ -60,7 +60,7 @@ The CAS is also exposed as an [MCP](https://modelcontextprotocol.io/) server so
|
|
|
60
60
|
claude mcp add cas -- npx functionalscript m
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
See [`
|
|
63
|
+
See [`fjs/cas/mcp/README.md`](fjs/cas/mcp/README.md) for details on the `cas_add`, `cas_get`, and `cas_list` tools.
|
|
64
64
|
|
|
65
65
|
## Vision
|
|
66
66
|
|
|
@@ -8,7 +8,7 @@ import { bitLength, divUp8 } from "../types/bigint/module.f.js";
|
|
|
8
8
|
import { empty, isVec, length, msb, uint, unpack, vec, vec8 } from "../types/bit_vec/module.f.js";
|
|
9
9
|
import { identity } from "../types/function/module.f.js";
|
|
10
10
|
import { max } from "../types/function/compare/module.f.js";
|
|
11
|
-
import { encode as b128encode, decode as b128decode } from "../base128/module.f.js";
|
|
11
|
+
import { encode as b128encode, decode as b128decode } from "../basen/base128/module.f.js";
|
|
12
12
|
const { popFront: pop, listToVec } = msb;
|
|
13
13
|
const pop8 = pop(8n);
|
|
14
14
|
const classPcMask = 224n;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { empty, isVec, length, msb, uint, unpack, vec, vec8 } from "../types/bit_vec/module.f.js";
|
|
2
2
|
import { asBase } from "../types/nominal/module.f.js";
|
|
3
3
|
import { decodeRaw, decodeInteger, encodeRaw, encodeInteger, integer, encode, decode, constructedSequence, octetString, boolean, constructedSet, encodeObjectIdentifier, decodeObjectIdentifier, } from "./module.f.js";
|
|
4
|
-
import { assertEq } from
|
|
4
|
+
import { assert, assertEq } from '../asserts/module.f.js';
|
|
5
5
|
const { concat, popFront: pop, listToVec } = msb;
|
|
6
6
|
const pop8 = pop(8n);
|
|
7
7
|
const check = (tag, v, rest) => {
|
|
@@ -23,9 +23,7 @@ const integerValueCheck = (i, v) => {
|
|
|
23
23
|
throw `encode: ${asBase(v)}, ${asBase(v0)}`;
|
|
24
24
|
}
|
|
25
25
|
const i0 = decodeInteger(v);
|
|
26
|
-
|
|
27
|
-
throw [i, i0];
|
|
28
|
-
}
|
|
26
|
+
assertEq(i, i0, [i, i0]);
|
|
29
27
|
};
|
|
30
28
|
const ch0 = (r, v, rest) => {
|
|
31
29
|
const [r0, rest0] = decode(concat(v)(rest));
|
|
@@ -51,24 +49,14 @@ export const proof = {
|
|
|
51
49
|
const v = vec8(0x13n);
|
|
52
50
|
const x = encodeRaw([integer, v]);
|
|
53
51
|
const lx = length(x);
|
|
54
|
-
|
|
55
|
-
throw lx;
|
|
56
|
-
}
|
|
52
|
+
assertEq(lx, 24n);
|
|
57
53
|
const [tag, x1] = pop8(x);
|
|
58
|
-
|
|
59
|
-
throw tag;
|
|
60
|
-
}
|
|
54
|
+
assertEq(tag, BigInt(integer));
|
|
61
55
|
const [len, x2] = pop8(x1);
|
|
62
|
-
|
|
63
|
-
throw len;
|
|
64
|
-
}
|
|
56
|
+
assertEq(len, 1n);
|
|
65
57
|
const { length: intLen, uint } = unpack(x2);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
if (uint !== 0x13n) {
|
|
70
|
-
throw uint;
|
|
71
|
-
}
|
|
58
|
+
assertEq(intLen, 8n);
|
|
59
|
+
assertEq(uint, 0x13n);
|
|
72
60
|
},
|
|
73
61
|
encode7F: () => {
|
|
74
62
|
const valueLen = 0x7fn << 3n;
|
|
@@ -76,24 +64,14 @@ export const proof = {
|
|
|
76
64
|
const v = vec(valueLen)(value);
|
|
77
65
|
const x = encodeRaw([integer, v]);
|
|
78
66
|
const lx = length(x);
|
|
79
|
-
|
|
80
|
-
throw lx;
|
|
81
|
-
}
|
|
67
|
+
assertEq(lx, 0x81n << 3n);
|
|
82
68
|
const [tag, x1] = pop8(x);
|
|
83
|
-
|
|
84
|
-
throw tag;
|
|
85
|
-
}
|
|
69
|
+
assertEq(tag, BigInt(integer));
|
|
86
70
|
const [len, x2] = pop8(x1);
|
|
87
|
-
|
|
88
|
-
throw len;
|
|
89
|
-
}
|
|
71
|
+
assertEq(len, 0x7fn);
|
|
90
72
|
const { length: intLen, uint } = unpack(x2);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
if (uint !== value) {
|
|
95
|
-
throw uint;
|
|
96
|
-
}
|
|
73
|
+
assertEq(intLen, valueLen);
|
|
74
|
+
assertEq(uint, value);
|
|
97
75
|
},
|
|
98
76
|
encode80: () => {
|
|
99
77
|
const valueLen = 0x80n << 3n;
|
|
@@ -101,28 +79,16 @@ export const proof = {
|
|
|
101
79
|
const v = vec(valueLen)(value);
|
|
102
80
|
const x = encodeRaw([integer, v]);
|
|
103
81
|
const lx = length(x);
|
|
104
|
-
|
|
105
|
-
throw lx;
|
|
106
|
-
}
|
|
82
|
+
assertEq(lx, 0x83n << 3n);
|
|
107
83
|
const [tag, x1] = pop8(x);
|
|
108
|
-
|
|
109
|
-
throw tag;
|
|
110
|
-
}
|
|
84
|
+
assertEq(tag, BigInt(integer));
|
|
111
85
|
const [lenLen, x2] = pop8(x1);
|
|
112
|
-
|
|
113
|
-
throw lenLen;
|
|
114
|
-
}
|
|
86
|
+
assertEq(lenLen, 0x81n);
|
|
115
87
|
const [len, x3] = pop8(x2);
|
|
116
|
-
|
|
117
|
-
throw len;
|
|
118
|
-
}
|
|
88
|
+
assertEq(len, 0x80n);
|
|
119
89
|
const { length: intLen, uint } = unpack(x3);
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
if (uint !== value) {
|
|
124
|
-
throw uint;
|
|
125
|
-
}
|
|
90
|
+
assertEq(intLen, valueLen);
|
|
91
|
+
assertEq(uint, value);
|
|
126
92
|
},
|
|
127
93
|
encodeFF: () => {
|
|
128
94
|
const valueLen = 0xffn << 3n;
|
|
@@ -134,24 +100,14 @@ export const proof = {
|
|
|
134
100
|
throw `lx: ${lx}`;
|
|
135
101
|
}
|
|
136
102
|
const [tag, x1] = pop8(x);
|
|
137
|
-
|
|
138
|
-
throw tag;
|
|
139
|
-
}
|
|
103
|
+
assertEq(tag, BigInt(integer));
|
|
140
104
|
const [lenLen, x2] = pop8(x1);
|
|
141
|
-
|
|
142
|
-
throw lenLen;
|
|
143
|
-
}
|
|
105
|
+
assertEq(lenLen, 0x81n);
|
|
144
106
|
const [len, x3] = pop8(x2);
|
|
145
|
-
|
|
146
|
-
throw len;
|
|
147
|
-
}
|
|
107
|
+
assertEq(len, 0xffn);
|
|
148
108
|
const { length: intLen, uint } = unpack(x3);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
if (uint !== value) {
|
|
153
|
-
throw uint;
|
|
154
|
-
}
|
|
109
|
+
assertEq(intLen, valueLen);
|
|
110
|
+
assertEq(uint, value);
|
|
155
111
|
},
|
|
156
112
|
encode103: () => {
|
|
157
113
|
const valueLen = 0x103n << 3n;
|
|
@@ -163,32 +119,20 @@ export const proof = {
|
|
|
163
119
|
throw `lx: ${lx}`;
|
|
164
120
|
}
|
|
165
121
|
const [tag, x1] = pop8(x);
|
|
166
|
-
|
|
167
|
-
throw tag;
|
|
168
|
-
}
|
|
122
|
+
assertEq(tag, BigInt(integer));
|
|
169
123
|
const [lenLen, x2] = pop8(x1);
|
|
170
|
-
|
|
171
|
-
throw lenLen;
|
|
172
|
-
}
|
|
124
|
+
assertEq(lenLen, 0x82n);
|
|
173
125
|
const [len, x3] = pop(16n)(x2);
|
|
174
|
-
|
|
175
|
-
throw len;
|
|
176
|
-
}
|
|
126
|
+
assertEq(len, 0x103n);
|
|
177
127
|
const { length: intLen, uint } = unpack(x3);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
if (uint !== value) {
|
|
182
|
-
throw uint;
|
|
183
|
-
}
|
|
128
|
+
assertEq(intLen, valueLen);
|
|
129
|
+
assertEq(uint, value);
|
|
184
130
|
},
|
|
185
131
|
ed: [
|
|
186
132
|
() => {
|
|
187
133
|
const tag = integer;
|
|
188
134
|
const v = vec(0x10n)(0x8234n);
|
|
189
|
-
|
|
190
|
-
throw asBase(v).toString(16);
|
|
191
|
-
}
|
|
135
|
+
assertEq(asBase(v), 0x8234n, asBase(v).toString(16));
|
|
192
136
|
check(integer, v, empty);
|
|
193
137
|
},
|
|
194
138
|
{
|
|
@@ -297,16 +241,10 @@ export const proof = {
|
|
|
297
241
|
// bitString (0x03) is not in SupportedRecord, exercises the default case in rawToRecord
|
|
298
242
|
const raw = encodeRaw([0x03n, vec8(0x42n)]);
|
|
299
243
|
const [decoded, rest] = decode(raw);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
}
|
|
303
|
-
if (rest !== empty) {
|
|
304
|
-
throw 'expected empty rest';
|
|
305
|
-
}
|
|
244
|
+
assert(isVec(decoded), 'expected UnsupportedRecord (Vec)');
|
|
245
|
+
assertEq(rest, empty, 'expected empty rest');
|
|
306
246
|
// Re-encoding an UnsupportedRecord returns it unchanged (it is already the TLV bytes)
|
|
307
|
-
|
|
308
|
-
throw 'encode should round-trip UnsupportedRecord';
|
|
309
|
-
}
|
|
247
|
+
assertEq(encode(decoded), raw, 'encode should round-trip UnsupportedRecord');
|
|
310
248
|
},
|
|
311
249
|
raw: [
|
|
312
250
|
() => {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assertion helpers for runtime checks and compile-time type-level tests.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Marks a code path as unimplemented. Always throws.
|
|
8
|
+
*/
|
|
9
|
+
export declare const todo: () => never;
|
|
10
|
+
/**
|
|
11
|
+
* Throws `msg` (default `'assertion failed'`) if `v` is `false`.
|
|
12
|
+
*
|
|
13
|
+
* Narrows `v` to `true` via `asserts v`, so callers can rely on the
|
|
14
|
+
* condition holding for the rest of the enclosing scope.
|
|
15
|
+
*/
|
|
16
|
+
export declare const assert: (v: boolean, msg?: unknown) => asserts v;
|
|
17
|
+
/**
|
|
18
|
+
* Asserts that `a` and `b` are `===`, throwing `x` (the `[a, b]` pair, plus
|
|
19
|
+
* an optional third element used as an extra message) if they differ.
|
|
20
|
+
*/
|
|
21
|
+
export declare const assertEq: <T>(...x: readonly [T, T, unknown?]) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Compile-time-only check: a type resolves only if it is exactly `true`.
|
|
24
|
+
* Used to assert type-level properties without any runtime cost, e.g.
|
|
25
|
+
* `type _ = Assert<Equal<A, B>>`.
|
|
26
|
+
*/
|
|
27
|
+
export type Assert<T extends true> = T;
|
|
28
|
+
/**
|
|
29
|
+
* Asserts that `a` is neither `null` nor `undefined` and returns it,
|
|
30
|
+
* narrowed to `T`.
|
|
31
|
+
*
|
|
32
|
+
* Use this to chain directly off a call that may return a nullish value,
|
|
33
|
+
* e.g. `const r = assertNotNullish(f(x))`. For a variable that already
|
|
34
|
+
* exists, prefer `assert(a !== null && a !== undefined)` instead.
|
|
35
|
+
*/
|
|
36
|
+
export declare const assertNotNullish: <T>(a: T | null | undefined, msg?: unknown) => T;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assertion helpers for runtime checks and compile-time type-level tests.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Marks a code path as unimplemented. Always throws.
|
|
8
|
+
*/
|
|
9
|
+
export const todo = () => { throw 'not implemented'; };
|
|
10
|
+
/**
|
|
11
|
+
* Throws `msg` (default `'assertion failed'`) if `v` is `false`.
|
|
12
|
+
*
|
|
13
|
+
* Narrows `v` to `true` via `asserts v`, so callers can rely on the
|
|
14
|
+
* condition holding for the rest of the enclosing scope.
|
|
15
|
+
*/
|
|
16
|
+
export const assert = (v, msg = 'assertion failed') => {
|
|
17
|
+
if (!v)
|
|
18
|
+
throw msg;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Asserts that `a` and `b` are `===`, throwing `x` (the `[a, b]` pair, plus
|
|
22
|
+
* an optional third element used as an extra message) if they differ.
|
|
23
|
+
*/
|
|
24
|
+
export const assertEq = (...x) => {
|
|
25
|
+
const [a, b] = x;
|
|
26
|
+
assert(a === b, x);
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Asserts that `a` is neither `null` nor `undefined` and returns it,
|
|
30
|
+
* narrowed to `T`.
|
|
31
|
+
*
|
|
32
|
+
* Use this to chain directly off a call that may return a nullish value,
|
|
33
|
+
* e.g. `const r = assertNotNullish(f(x))`. For a variable that already
|
|
34
|
+
* exists, prefer `assert(a !== null && a !== undefined)` instead.
|
|
35
|
+
*/
|
|
36
|
+
export const assertNotNullish = (a, msg) => {
|
|
37
|
+
assert(a !== null && a !== undefined, msg);
|
|
38
|
+
return a;
|
|
39
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const proof: {
|
|
2
|
+
assertPassesOnTrue: () => void;
|
|
3
|
+
assertEqPassesOnEqual: () => void;
|
|
4
|
+
throw: {
|
|
5
|
+
assertEqThrowsOnUnequal: () => void;
|
|
6
|
+
assertEqThrowsOnUnequal3: () => void;
|
|
7
|
+
assertThrowsDefaultMsg: () => void;
|
|
8
|
+
assertThrowsCustomMsg: () => void;
|
|
9
|
+
todoThrows: () => never;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { assert, assertEq, todo } from './module.f.js';
|
|
2
|
+
export const proof = {
|
|
3
|
+
assertPassesOnTrue: () => {
|
|
4
|
+
assert(true);
|
|
5
|
+
assert(true, 'with message');
|
|
6
|
+
},
|
|
7
|
+
assertEqPassesOnEqual: () => {
|
|
8
|
+
assertEq(1, 1);
|
|
9
|
+
assertEq('x', 'x');
|
|
10
|
+
},
|
|
11
|
+
throw: {
|
|
12
|
+
assertEqThrowsOnUnequal: () => assertEq(1, 2),
|
|
13
|
+
assertEqThrowsOnUnequal3: () => assertEq(1, 2, "message"),
|
|
14
|
+
assertThrowsDefaultMsg: () => assert(false),
|
|
15
|
+
assertThrowsCustomMsg: () => assert(false, 'oops'),
|
|
16
|
+
todoThrows: () => todo(),
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module
|
|
13
13
|
*/
|
|
14
|
-
import { msb, lsb, vec, chunkList, unpack } from
|
|
15
|
-
import { fold } from
|
|
16
|
-
import { compose } from
|
|
14
|
+
import { msb, lsb, vec, chunkList, unpack } from '../types/bit_vec/module.f.js';
|
|
15
|
+
import { fold } from '../types/list/module.f.js';
|
|
16
|
+
import { compose } from '../types/function/module.f.js';
|
|
17
17
|
const { unpackSplit } = msb;
|
|
18
18
|
const { tryListToVec: reversedListToVec } = lsb;
|
|
19
19
|
// `chunkList(msb)` doesn't depend on `bits` or `v` — shared across every
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { assertEq } from
|
|
2
|
-
import { empty, maxLength, vec, length } from
|
|
3
|
-
import { baseN } from
|
|
1
|
+
import { assertEq } from '../asserts/module.f.js';
|
|
2
|
+
import { empty, maxLength, vec, length } from '../types/bit_vec/module.f.js';
|
|
3
|
+
import { baseN } from './module.f.js';
|
|
4
4
|
const hex = baseN(4n, '0123456789abcdef');
|
|
5
5
|
const cb32 = baseN(5n, '0123456789abcdefghjkmnpqrstvwxyz', c => {
|
|
6
6
|
const lower = c.toLowerCase();
|
|
@@ -25,67 +25,43 @@ const bigSampleHex = `f`.repeat(Number(maxLength >> 2n));
|
|
|
25
25
|
export const proof = {
|
|
26
26
|
encodeEmpty: () => {
|
|
27
27
|
const s = hex.vecToString(empty);
|
|
28
|
-
|
|
29
|
-
throw [s];
|
|
30
|
-
}
|
|
28
|
+
assertEq(s, '', [s]);
|
|
31
29
|
},
|
|
32
30
|
encodeAligned: () => {
|
|
33
31
|
// Two 4-bit chunks → two hex digits
|
|
34
32
|
const s = hex.vecToString(vec(8n)(0xa5n));
|
|
35
|
-
|
|
36
|
-
throw [s];
|
|
37
|
-
}
|
|
33
|
+
assertEq(s, 'a5', [s]);
|
|
38
34
|
},
|
|
39
35
|
encodeUnaligned: () => {
|
|
40
36
|
// 6 bits → first 4-bit chunk + a 2-bit tail that popFront pads with
|
|
41
37
|
// trailing zeros (the standard `popFront` behaviour the codec inherits).
|
|
42
38
|
const s = hex.vecToString(vec(6n)(41n));
|
|
43
|
-
|
|
44
|
-
throw [s];
|
|
45
|
-
}
|
|
39
|
+
assertEq(s, 'a4', [s]);
|
|
46
40
|
},
|
|
47
41
|
decodeEmpty: () => {
|
|
48
42
|
const v = hex.stringToVec('');
|
|
49
|
-
|
|
50
|
-
throw [v];
|
|
51
|
-
}
|
|
43
|
+
assertEq(v, empty, [v]);
|
|
52
44
|
},
|
|
53
45
|
decodeRoundTrip: () => {
|
|
54
46
|
const v = hex.stringToVec('ab');
|
|
55
|
-
|
|
56
|
-
throw [v];
|
|
57
|
-
}
|
|
47
|
+
assertEq(v, vec(8n)(0xabn), [v]);
|
|
58
48
|
},
|
|
59
49
|
decodeInvalid: () => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
if (hex.stringToVec('aZ') !== null) {
|
|
64
|
-
throw 'mixed invalid char should return null';
|
|
65
|
-
}
|
|
50
|
+
assertEq(hex.stringToVec('z'), null, 'invalid char should return null');
|
|
51
|
+
assertEq(hex.stringToVec('aZ'), null, 'mixed invalid char should return null');
|
|
66
52
|
},
|
|
67
53
|
normalizeHit: () => {
|
|
68
54
|
// 'A' lowercases to 'a' — same vector as the lowercase input.
|
|
69
55
|
const a = cb32.stringToVec('A');
|
|
70
56
|
const b = cb32.stringToVec('a');
|
|
71
|
-
|
|
72
|
-
throw [a, b];
|
|
73
|
-
}
|
|
57
|
+
assertEq(a, b, [a, b]);
|
|
74
58
|
// Crockford folds: i,l → 1 and o → 0.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (cb32.stringToVec('l') !== cb32.stringToVec('1')) {
|
|
79
|
-
throw 'l→1';
|
|
80
|
-
}
|
|
81
|
-
if (cb32.stringToVec('o') !== cb32.stringToVec('0')) {
|
|
82
|
-
throw 'o→0';
|
|
83
|
-
}
|
|
59
|
+
assertEq(cb32.stringToVec('I'), cb32.stringToVec('1'), 'I→1');
|
|
60
|
+
assertEq(cb32.stringToVec('l'), cb32.stringToVec('1'), 'l→1');
|
|
61
|
+
assertEq(cb32.stringToVec('o'), cb32.stringToVec('0'), 'o→0');
|
|
84
62
|
},
|
|
85
63
|
normalizeMiss: () => {
|
|
86
|
-
|
|
87
|
-
throw 'unknown char should return null';
|
|
88
|
-
}
|
|
64
|
+
assertEq(cb32.stringToVec('u'), null, 'unknown char should return null');
|
|
89
65
|
},
|
|
90
66
|
// Decodes a 1 Mibit hex string. With the O(n log n) `listToVec` builder this
|
|
91
67
|
// runs in well under a second (was ~13 s node / ~43 s bun under the old
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { empty, vec, vec8 } from
|
|
2
|
-
import { asBase } from
|
|
3
|
-
import { encode, decode } from
|
|
1
|
+
import { empty, vec, vec8 } from '../../types/bit_vec/module.f.js';
|
|
2
|
+
import { asBase } from '../../types/nominal/module.f.js';
|
|
3
|
+
import { encode, decode } from './module.f.js';
|
|
4
4
|
const test = (a, b) => {
|
|
5
5
|
const encoded = encode(a);
|
|
6
6
|
if (encoded !== b) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import { type Vec } from "
|
|
7
|
-
import type { Nullable } from "
|
|
6
|
+
import { type Vec } from "../../types/bit_vec/module.f.ts";
|
|
7
|
+
import type { Nullable } from "../../types/nullable/module.f.ts";
|
|
8
8
|
export declare const encode: (input: Vec) => Nullable<string>;
|
|
9
9
|
export declare const decode: (input: string) => Nullable<Vec>;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import { msb, length, vec,
|
|
7
|
-
import { baseN } from "
|
|
6
|
+
import { msb, length, vec, maxLength } from "../../types/bit_vec/module.f.js";
|
|
7
|
+
import { baseN } from "../../base_n/module.f.js";
|
|
8
8
|
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
9
9
|
const { popFront } = msb;
|
|
10
10
|
const { vecToString, stringToVec } = baseN(6n, alphabet);
|
|
@@ -39,23 +39,33 @@ export const decode = (input) => {
|
|
|
39
39
|
if ((body.length + padChars) % 4 !== 0) {
|
|
40
40
|
return null;
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (result === null) {
|
|
45
|
-
return null;
|
|
42
|
+
if (padChars === 0) {
|
|
43
|
+
return stringToVec(body);
|
|
46
44
|
}
|
|
47
|
-
//
|
|
48
|
-
//
|
|
45
|
+
// `encode`'s zero-padding bits (added to reach a 6-bit boundary) live
|
|
46
|
+
// entirely inside the *last* character's chunk — RFC 4648 padding never
|
|
47
|
+
// spans more than one base64 character. Decode every character but the
|
|
48
|
+
// last through `stringToVec` as usual, then decode and trim the last
|
|
49
|
+
// character on its own, so no intermediate `Vec` built here is ever
|
|
50
|
+
// wider than the final, post-trim result — even for input whose decoded
|
|
51
|
+
// payload lands exactly at `maxLength`.
|
|
49
52
|
const removeBits = BigInt(padChars * 2);
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
53
|
-
return
|
|
53
|
+
const realBits = 6n - removeBits;
|
|
54
|
+
const head = stringToVec(body.slice(0, body.length - 1));
|
|
55
|
+
if (head === null) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const lastChunk = stringToVec(body.slice(body.length - 1));
|
|
59
|
+
if (lastChunk === null) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
if (length(head) + realBits > maxLength) {
|
|
63
|
+
return null;
|
|
54
64
|
}
|
|
55
|
-
const [kept,
|
|
65
|
+
const [kept, pad] = popFront(realBits)(lastChunk);
|
|
56
66
|
// Padding bits must be zero (RFC 4648 §3.5).
|
|
57
|
-
if (
|
|
67
|
+
if (pad !== vec(removeBits)(0n)) {
|
|
58
68
|
return null;
|
|
59
69
|
}
|
|
60
|
-
return vec(
|
|
70
|
+
return msb.concat(head)(vec(realBits)(kept));
|
|
61
71
|
};
|
|
@@ -9,6 +9,8 @@ export declare const proof: {
|
|
|
9
9
|
validPadding: () => void;
|
|
10
10
|
knownVectors: () => void;
|
|
11
11
|
decodeOverflow: () => void;
|
|
12
|
+
decodePaddedTailRejections: () => void;
|
|
12
13
|
encodeAtMaxLengthSucceeds: () => void;
|
|
14
|
+
decodeAtMaxLengthSucceeds: () => void;
|
|
13
15
|
encodeLargeVecIsSlow: () => void;
|
|
14
16
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { assertEq } from
|
|
2
|
-
import { empty, vec, repeat, vec8, maxLength } from "
|
|
1
|
+
import { assertEq } from '../../asserts/module.f.js';
|
|
2
|
+
import { empty, vec, repeat, vec8, maxLength } from "../../types/bit_vec/module.f.js";
|
|
3
3
|
import { encode, decode } from "./module.f.js";
|
|
4
4
|
const check = (s, v) => {
|
|
5
5
|
assertEq(encode(v), s);
|
|
@@ -83,17 +83,37 @@ export const proof = {
|
|
|
83
83
|
const oversized = 'A'.repeat(174_764);
|
|
84
84
|
assertEq(decode(oversized), null);
|
|
85
85
|
},
|
|
86
|
+
decodePaddedTailRejections: () => {
|
|
87
|
+
// These all take the padded branch of `decode` (`padChars > 0`,
|
|
88
|
+
// i.e. the `head`/`lastChunk` split), unlike `decodeOverflow` above
|
|
89
|
+
// which takes the unpadded fast path. An invalid character before
|
|
90
|
+
// the final char must be rejected via the `head` decode...
|
|
91
|
+
assertEq(decode('!A=='), null);
|
|
92
|
+
// ...and an invalid final character (the one holding the padding
|
|
93
|
+
// bits) must be rejected via the last-character decode.
|
|
94
|
+
assertEq(decode('A!=='), null);
|
|
95
|
+
// Same as `decodeOverflow`, but with a padded tail so it's the
|
|
96
|
+
// padded branch that measures the result against `maxLength` and
|
|
97
|
+
// rejects it.
|
|
98
|
+
assertEq(decode('A'.repeat(174_764) + '='), null);
|
|
99
|
+
},
|
|
86
100
|
encodeAtMaxLengthSucceeds: () => {
|
|
87
101
|
// A `maxLength`-sized vector's trailing partial 6-bit chunk is
|
|
88
102
|
// left-padded by `vecToString` itself (see `baseN`), so `encode`
|
|
89
103
|
// never needs to build an over-`maxLength` intermediate and must not
|
|
90
|
-
// reject this boundary input.
|
|
91
|
-
// still fails on this exact boundary — a separate, still-open bug;
|
|
92
|
-
// see `fs/base64/todo/decode-rejects-max-size-input.md`.)
|
|
104
|
+
// reject this boundary input.
|
|
93
105
|
assertEq(encode(vec(maxLength)(0n)), 'A'.repeat(174_763) + '=');
|
|
94
106
|
},
|
|
107
|
+
decodeAtMaxLengthSucceeds: () => {
|
|
108
|
+
// Companion to `encodeAtMaxLengthSucceeds`: the encoded string's raw,
|
|
109
|
+
// pre-trim bit count (1_048_578) is 2 over `maxLength` even though
|
|
110
|
+
// the payload it decodes to is exactly `maxLength`. `decode` must
|
|
111
|
+
// trim the last character's 2 zero-padding bits before — not after —
|
|
112
|
+
// measuring the result against `maxLength`.
|
|
113
|
+
check('A'.repeat(174_763) + '=', vec(maxLength)(0n));
|
|
114
|
+
},
|
|
95
115
|
// Regression guard: `encode` used to be quadratic in the input size, not
|
|
96
|
-
// linear. `baseN`'s `vecToString` (`
|
|
116
|
+
// linear. `baseN`'s `vecToString` (`fjs/base_n/module.f.ts`) popped one
|
|
97
117
|
// 6-bit chunk off the front at a time via `popFront`, and each `popFront`
|
|
98
118
|
// re-masked the entire remaining bigint through `vec()`'s `m & ui` —
|
|
99
119
|
// O(remaining length) — so encoding a vector of `n` bits cost O(n²). A
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import { type Vec } from "
|
|
7
|
-
import type { Nullable } from "
|
|
6
|
+
import { type Vec } from "../../types/bit_vec/module.f.ts";
|
|
7
|
+
import type { Nullable } from "../../types/nullable/module.f.ts";
|
|
8
8
|
export declare const vec5xToCBase32: (v: Vec) => string;
|
|
9
9
|
export declare const cBase32ToVec5x: (s: string) => Nullable<Vec>;
|
|
10
10
|
export declare const vecToCBase32: (v: Vec) => string;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import { msb, lsb, length, vec, empty } from "
|
|
7
|
-
import { baseN } from "
|
|
6
|
+
import { msb, lsb, length, vec, empty } from "../../types/bit_vec/module.f.js";
|
|
7
|
+
import { baseN } from "../../base_n/module.f.js";
|
|
8
8
|
// 0123456789abcdef
|
|
9
9
|
const m = '0123456789abcdefghjkmnpqrstvwxyz';
|
|
10
10
|
const { concat } = msb;
|