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
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { stringToCodePointList } from
|
|
2
|
-
import { map, toArray } from
|
|
3
|
-
import { commaJoin0Plus, option, range, repeat0Plus, set } from
|
|
4
|
-
import { deterministic } from
|
|
5
|
-
import { toData } from
|
|
6
|
-
import {
|
|
1
|
+
import { stringToCodePointList } from '../../text/utf16/module.f.js';
|
|
2
|
+
import { map, toArray } from '../../types/list/module.f.js';
|
|
3
|
+
import { commaJoin0Plus, option, range, repeat0Plus, set } from '../module.f.js';
|
|
4
|
+
import { deterministic } from '../testlib.f.js';
|
|
5
|
+
import { emptyTagMap, toData } from '../data/module.f.js';
|
|
6
|
+
import { descentParser } from './module.f.js';
|
|
7
|
+
import { assertEq } from '../../asserts/module.f.js';
|
|
7
8
|
const mapCodePoint = (cp) => [cp, undefined];
|
|
8
9
|
const descentParserCpOnly = (m, name, cp) => {
|
|
9
10
|
const cpm = toArray(map(mapCodePoint)(cp));
|
|
@@ -14,34 +15,34 @@ export const proof = {
|
|
|
14
15
|
() => {
|
|
15
16
|
const stringRule = 'true';
|
|
16
17
|
const data = toData(stringRule);
|
|
17
|
-
const emptyTags =
|
|
18
|
+
const emptyTags = emptyTagMap(data[0]);
|
|
18
19
|
const result = JSON.stringify(emptyTags);
|
|
19
|
-
if (result !== '{
|
|
20
|
+
if (result !== '{}') {
|
|
20
21
|
throw result;
|
|
21
22
|
}
|
|
22
23
|
},
|
|
23
24
|
() => {
|
|
24
25
|
const terminalRangeRule = range('AF');
|
|
25
26
|
const data = toData(terminalRangeRule);
|
|
26
|
-
const emptyTags =
|
|
27
|
+
const emptyTags = emptyTagMap(data[0]);
|
|
27
28
|
const result = JSON.stringify(emptyTags);
|
|
28
|
-
if (result !== '{
|
|
29
|
+
if (result !== '{}') {
|
|
29
30
|
throw result;
|
|
30
31
|
}
|
|
31
32
|
},
|
|
32
33
|
() => {
|
|
33
34
|
const varintRule = { true: 'true', false: 'false' };
|
|
34
35
|
const data = toData(varintRule);
|
|
35
|
-
const emptyTags =
|
|
36
|
+
const emptyTags = emptyTagMap(data[0]);
|
|
36
37
|
const result = JSON.stringify(emptyTags);
|
|
37
|
-
if (result !== '{
|
|
38
|
+
if (result !== '{}') {
|
|
38
39
|
throw result;
|
|
39
40
|
}
|
|
40
41
|
},
|
|
41
42
|
() => {
|
|
42
43
|
const emptyRule = '';
|
|
43
44
|
const data = toData(emptyRule);
|
|
44
|
-
const emptyTags =
|
|
45
|
+
const emptyTags = emptyTagMap(data[0]);
|
|
45
46
|
const result = JSON.stringify(emptyTags);
|
|
46
47
|
if (result !== '{"":true}') {
|
|
47
48
|
throw result;
|
|
@@ -51,27 +52,27 @@ export const proof = {
|
|
|
51
52
|
const emptyRule = '';
|
|
52
53
|
const varintRule = { true: 'true', e: emptyRule };
|
|
53
54
|
const data = toData(varintRule);
|
|
54
|
-
const emptyTags =
|
|
55
|
+
const emptyTags = emptyTagMap(data[0]);
|
|
55
56
|
const result = JSON.stringify(emptyTags);
|
|
56
|
-
if (result !== '{"
|
|
57
|
+
if (result !== '{"5":true,"":"e"}') {
|
|
57
58
|
throw result;
|
|
58
59
|
}
|
|
59
60
|
},
|
|
60
61
|
() => {
|
|
61
62
|
const repeatRule = repeat0Plus(option('a'));
|
|
62
63
|
const data = toData(repeatRule);
|
|
63
|
-
const emptyTags =
|
|
64
|
+
const emptyTags = emptyTagMap(data[0]);
|
|
64
65
|
const result = JSON.stringify(emptyTags);
|
|
65
|
-
if (result !== '{"0":"none","
|
|
66
|
+
if (result !== '{"0":"none","3":true,"":true,"r":"none"}') {
|
|
66
67
|
throw result;
|
|
67
68
|
}
|
|
68
69
|
},
|
|
69
70
|
() => {
|
|
70
71
|
const repeatRule = repeat0Plus(set(' \n\r\t'));
|
|
71
72
|
const data = toData(repeatRule);
|
|
72
|
-
const emptyTags =
|
|
73
|
+
const emptyTags = emptyTagMap(data[0]);
|
|
73
74
|
const result = JSON.stringify(emptyTags);
|
|
74
|
-
if (result !== '{"
|
|
75
|
+
if (result !== '{"5":true,"r":"none"}') {
|
|
75
76
|
throw result;
|
|
76
77
|
}
|
|
77
78
|
}
|
|
@@ -151,6 +152,15 @@ export const proof = {
|
|
|
151
152
|
throw result;
|
|
152
153
|
}
|
|
153
154
|
},
|
|
155
|
+
() => {
|
|
156
|
+
const emptyVariantRule = {};
|
|
157
|
+
const m = descentParser(emptyVariantRule);
|
|
158
|
+
const mr = m("", []);
|
|
159
|
+
const result = JSON.stringify(mr);
|
|
160
|
+
if (result !== '[{"sequence":[]},false,0]') {
|
|
161
|
+
throw result;
|
|
162
|
+
}
|
|
163
|
+
},
|
|
154
164
|
() => {
|
|
155
165
|
const stringRule = 'AB';
|
|
156
166
|
const m = descentParser(stringRule);
|
|
@@ -214,9 +224,7 @@ export const proof = {
|
|
|
214
224
|
const cp = toArray(stringToCodePointList(s));
|
|
215
225
|
const mr = descentParserCpOnly(m, '', cp);
|
|
216
226
|
const success = mr[1] && mr[2] === cp.length;
|
|
217
|
-
|
|
218
|
-
throw mr;
|
|
219
|
-
}
|
|
227
|
+
assertEq(success, expected, mr);
|
|
220
228
|
};
|
|
221
229
|
expect('a', true);
|
|
222
230
|
expect('', true);
|
|
@@ -236,9 +244,7 @@ export const proof = {
|
|
|
236
244
|
const cp = toArray(stringToCodePointList(s));
|
|
237
245
|
const mr = descentParserCpOnly(m, 'value', cp);
|
|
238
246
|
const success = mr[1] && mr[2] === cp.length;
|
|
239
|
-
|
|
240
|
-
throw mr;
|
|
241
|
-
}
|
|
247
|
+
assertEq(success, expected, mr);
|
|
242
248
|
};
|
|
243
249
|
expect('', false);
|
|
244
250
|
expect('[]', true);
|
|
@@ -252,9 +258,7 @@ export const proof = {
|
|
|
252
258
|
const cp = toArray(stringToCodePointList(s));
|
|
253
259
|
const mr = descentParserCpOnly(m, '', cp);
|
|
254
260
|
const success = mr[1] && mr[2] === cp.length;
|
|
255
|
-
|
|
256
|
-
throw mr;
|
|
257
|
-
}
|
|
261
|
+
assertEq(success, expected, mr);
|
|
258
262
|
};
|
|
259
263
|
expect(' true ', true);
|
|
260
264
|
expect(' tr2ue ', false);
|
|
@@ -278,6 +282,33 @@ export const proof = {
|
|
|
278
282
|
expect(' [{ "q": [ 12, false, [}], "a"] }] ', false);
|
|
279
283
|
}
|
|
280
284
|
],
|
|
285
|
+
// Regression for the stack-recursive matcher bug: the matcher used to recurse
|
|
286
|
+
// natively once per grammar step, so match depth grew with input length and these
|
|
287
|
+
// inputs threw "RangeError: Maximum call stack size exceeded" at a few thousand
|
|
288
|
+
// code points. The explicit-frame-stack matcher handles them in O(1) JS call stack.
|
|
289
|
+
longInput: [
|
|
290
|
+
() => {
|
|
291
|
+
// long right-recursive repetition: one repeat0Plus chain across the whole input
|
|
292
|
+
const rule = repeat0Plus(set(' \n\r\t'));
|
|
293
|
+
const name = toData(rule)[1];
|
|
294
|
+
const m = descentParser(rule);
|
|
295
|
+
const cp = toArray(stringToCodePointList(' '.repeat(10000)));
|
|
296
|
+
const [, ok, idx] = descentParserCpOnly(m, name, cp);
|
|
297
|
+
assertEq(ok, true);
|
|
298
|
+
assertEq(idx, 10000);
|
|
299
|
+
},
|
|
300
|
+
() => {
|
|
301
|
+
// deep non-repetition nesting: 5000 bracket levels in the JSON-like test
|
|
302
|
+
// grammar — a shape that repetition-specific fixes (a `repeat` primitive)
|
|
303
|
+
// would not cover
|
|
304
|
+
const m = descentParser(deterministic());
|
|
305
|
+
const n = 5000;
|
|
306
|
+
const cp = toArray(stringToCodePointList('['.repeat(n) + ']'.repeat(n)));
|
|
307
|
+
const [, ok, idx] = descentParserCpOnly(m, '', cp);
|
|
308
|
+
assertEq(ok, true);
|
|
309
|
+
assertEq(idx, n * 2);
|
|
310
|
+
},
|
|
311
|
+
],
|
|
281
312
|
descentParserWithMeta: [
|
|
282
313
|
() => {
|
|
283
314
|
const emptyRule = '';
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LL(1) dispatch/matcher backend over the BNF data {@link RuleSet}.
|
|
3
3
|
*
|
|
4
|
-
* Built from the serializable IR in `
|
|
4
|
+
* Built from the serializable IR in `fjs/bnf/data`, this is one member of the
|
|
5
5
|
* family of automaton builders that consume a {@link RuleSet}: it compiles the
|
|
6
6
|
* grammar into a predictive {@link dispatchMap} and matches input into an AST
|
|
7
7
|
* ({@link MatchResult}). It throws at build time (`can not merge …`) when the
|
|
8
|
-
* grammar is not LL(1) — a first/first conflict.
|
|
8
|
+
* grammar is not LL(1) — a first/first conflict. Nullability is looked up from
|
|
9
|
+
* {@link emptyTagMap} in `fjs/bnf/data` rather than re-derived here.
|
|
9
10
|
*
|
|
10
11
|
* @module
|
|
11
12
|
*/
|
|
12
13
|
import { type CodePoint } from '../../text/utf16/module.f.ts';
|
|
13
14
|
import { type RangeMapArray } from '../../types/range_map/module.f.ts';
|
|
14
15
|
import { type StringMap } from '../../types/object/module.f.ts';
|
|
15
|
-
import { type RuleSet } from '../data/module.f.ts';
|
|
16
|
+
import { type EmptyTag, type RuleSet } from '../data/module.f.ts';
|
|
16
17
|
import { type Rule as FRule } from '../module.f.ts';
|
|
17
|
-
type EmptyTag = string | true | undefined;
|
|
18
18
|
type DispatchRule = {
|
|
19
19
|
readonly emptyTag: EmptyTag;
|
|
20
20
|
readonly rangeMap: Dispatch;
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LL(1) dispatch/matcher backend over the BNF data {@link RuleSet}.
|
|
3
3
|
*
|
|
4
|
-
* Built from the serializable IR in `
|
|
4
|
+
* Built from the serializable IR in `fjs/bnf/data`, this is one member of the
|
|
5
5
|
* family of automaton builders that consume a {@link RuleSet}: it compiles the
|
|
6
6
|
* grammar into a predictive {@link dispatchMap} and matches input into an AST
|
|
7
7
|
* ({@link MatchResult}). It throws at build time (`can not merge …`) when the
|
|
8
|
-
* grammar is not LL(1) — a first/first conflict.
|
|
8
|
+
* grammar is not LL(1) — a first/first conflict. Nullability is looked up from
|
|
9
|
+
* {@link emptyTagMap} in `fjs/bnf/data` rather than re-derived here.
|
|
9
10
|
*
|
|
10
11
|
* @module
|
|
11
12
|
*/
|
|
12
|
-
import {} from
|
|
13
|
-
import { strictEqual } from
|
|
14
|
-
import { toArray } from
|
|
15
|
-
import { rangeMap } from
|
|
16
|
-
import { contains, set } from
|
|
17
|
-
import { rangeDecode } from
|
|
18
|
-
import { definedEntries } from
|
|
19
|
-
import { toData } from
|
|
20
|
-
import {} from
|
|
13
|
+
import {} from '../../text/utf16/module.f.js';
|
|
14
|
+
import { strictEqual } from '../../types/function/operator/module.f.js';
|
|
15
|
+
import { toArray } from '../../types/list/module.f.js';
|
|
16
|
+
import { rangeMap } from '../../types/range_map/module.f.js';
|
|
17
|
+
import { contains, set } from '../../types/string_set/module.f.js';
|
|
18
|
+
import { rangeDecode } from '../module.f.js';
|
|
19
|
+
import { definedEntries } from '../../types/object/module.f.js';
|
|
20
|
+
import { emptyTagMap, toData } from '../data/module.f.js';
|
|
21
|
+
import {} from '../module.f.js';
|
|
21
22
|
const dispatchOp = rangeMap({
|
|
22
23
|
union: a => b => {
|
|
23
24
|
if (a === null) {
|
|
@@ -35,6 +36,7 @@ const dispatchOp = rangeMap({
|
|
|
35
36
|
* Builds a dispatch map for a {@link RuleSet} to enable predictive parsing.
|
|
36
37
|
*/
|
|
37
38
|
export const dispatchMap = (ruleSet) => {
|
|
39
|
+
const nullMap = emptyTagMap(ruleSet);
|
|
38
40
|
const addRuleToDispatch = (dr, name) => {
|
|
39
41
|
if (dr === null)
|
|
40
42
|
return null;
|
|
@@ -70,7 +72,7 @@ export const dispatchMap = (ruleSet) => {
|
|
|
70
72
|
if (emptyTag === true) {
|
|
71
73
|
result = result.map(x => [addRuleToDispatch(x[0], item), x[1]]);
|
|
72
74
|
result = toArray(dispatchOp.merge(result)(dr.rangeMap));
|
|
73
|
-
emptyTag =
|
|
75
|
+
emptyTag = nullMap[item] !== undefined ? true : undefined;
|
|
74
76
|
}
|
|
75
77
|
else {
|
|
76
78
|
result = result.map(x => [addRuleToDispatch(x[0], item), x[1]]);
|
|
@@ -87,7 +89,7 @@ export const dispatchMap = (ruleSet) => {
|
|
|
87
89
|
for (const [tag, item] of entries) {
|
|
88
90
|
dm = dispatchRule(dm, item, newCurrent);
|
|
89
91
|
const dr = dm[item];
|
|
90
|
-
if (
|
|
92
|
+
if (nullMap[item] !== undefined) {
|
|
91
93
|
emptyTag = tag;
|
|
92
94
|
}
|
|
93
95
|
else {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { stringToCodePointList } from
|
|
2
|
-
import { toArray } from
|
|
3
|
-
import { commaJoin0Plus, option, range, repeat0Plus, set } from
|
|
4
|
-
import { deterministic } from
|
|
5
|
-
import { toData } from
|
|
6
|
-
import { dispatchMap, parser, parserRuleSet } from
|
|
1
|
+
import { stringToCodePointList } from '../../text/utf16/module.f.js';
|
|
2
|
+
import { toArray } from '../../types/list/module.f.js';
|
|
3
|
+
import { commaJoin0Plus, option, range, repeat0Plus, set } from '../module.f.js';
|
|
4
|
+
import { deterministic } from '../testlib.f.js';
|
|
5
|
+
import { toData } from '../data/module.f.js';
|
|
6
|
+
import { dispatchMap, parser, parserRuleSet } from './module.f.js';
|
|
7
|
+
import { assertEq } from '../../asserts/module.f.js';
|
|
7
8
|
export const proof = {
|
|
8
9
|
dispatch: [
|
|
9
10
|
() => {
|
|
@@ -238,9 +239,7 @@ export const proof = {
|
|
|
238
239
|
const isSuccess = (mr) => mr[1] && mr[2]?.length === 0;
|
|
239
240
|
const expect = (s, success) => {
|
|
240
241
|
const mr = m('', toArray(stringToCodePointList(s)));
|
|
241
|
-
|
|
242
|
-
throw mr;
|
|
243
|
-
}
|
|
242
|
+
assertEq(isSuccess(mr), success, mr);
|
|
244
243
|
};
|
|
245
244
|
expect('a', true);
|
|
246
245
|
expect('', true);
|
|
@@ -259,9 +258,7 @@ export const proof = {
|
|
|
259
258
|
const isSuccess = (mr) => mr[1] && mr[2]?.length === 0;
|
|
260
259
|
const expect = (s, success) => {
|
|
261
260
|
const mr = m('value', toArray(stringToCodePointList(s)));
|
|
262
|
-
|
|
263
|
-
throw mr;
|
|
264
|
-
}
|
|
261
|
+
assertEq(isSuccess(mr), success, mr);
|
|
265
262
|
};
|
|
266
263
|
expect('', false);
|
|
267
264
|
expect('[]', true);
|
|
@@ -274,9 +271,7 @@ export const proof = {
|
|
|
274
271
|
const isSuccess = (mr) => mr[1] && mr[2]?.length === 0;
|
|
275
272
|
const expect = (s, success) => {
|
|
276
273
|
const mr = m('', toArray(stringToCodePointList(s)));
|
|
277
|
-
|
|
278
|
-
throw mr;
|
|
279
|
-
}
|
|
274
|
+
assertEq(isSuccess(mr), success, mr);
|
|
280
275
|
};
|
|
281
276
|
expect(' true ', true);
|
|
282
277
|
expect(' tr2ue ', false);
|
|
@@ -354,5 +349,27 @@ export const proof = {
|
|
|
354
349
|
const conflictRule = { 'a': range('AA'), 'b': range('AA') };
|
|
355
350
|
dispatchMap(toData(conflictRule)[0]);
|
|
356
351
|
}
|
|
357
|
-
}
|
|
352
|
+
},
|
|
353
|
+
// Regression: `emptyTagMap` must stay correct for cyclic rule references.
|
|
354
|
+
// A naive single-pass, memoized derivation that marks a rule nullable as
|
|
355
|
+
// a placeholder *before* recursing into its own children (to break the
|
|
356
|
+
// cycle) over-approximates nullability here, and made `dispatchMap`
|
|
357
|
+
// falsely report a first/first conflict for this grammar even though it
|
|
358
|
+
// has none — `value` only ever nests inside brackets or is the literal
|
|
359
|
+
// `a`, and `ws` is genuinely optional on both sides of it.
|
|
360
|
+
cyclicNullability: () => {
|
|
361
|
+
const ws = option(' ');
|
|
362
|
+
const value = () => ({ array: ['[', value, ']'], leaf: 'a' });
|
|
363
|
+
const m = parser([ws, value, ws]); // must not throw 'can not merge'
|
|
364
|
+
const expect = (s, success) => {
|
|
365
|
+
const mr = m('', toArray(stringToCodePointList(s)));
|
|
366
|
+
assertEq(mr[1] && mr[2]?.length === 0, success, mr);
|
|
367
|
+
};
|
|
368
|
+
expect('a', true);
|
|
369
|
+
expect(' a ', true);
|
|
370
|
+
expect('[a]', true);
|
|
371
|
+
expect('[[a]]', true);
|
|
372
|
+
expect(' [[a]] ', true);
|
|
373
|
+
expect('b', false);
|
|
374
|
+
},
|
|
358
375
|
};
|
|
@@ -6,6 +6,21 @@ import { type Array2 } from '../types/array/module.f.ts';
|
|
|
6
6
|
* For example: 0xBBBBBB_EEEEEE
|
|
7
7
|
* - 0xBBBBBB is the first symbol (24 bits)
|
|
8
8
|
* - 0xEEEEEE is the last symbol (24 bits)
|
|
9
|
+
*
|
|
10
|
+
* 24 bits per half, not 26 (the most `float64`'s 52-bit safe-integer mantissa
|
|
11
|
+
* could fit two of): 24 is divisible by 4, so each half is exactly 6 hex
|
|
12
|
+
* digits, and the packed pair reads as a plain `0xYYYYYY_ZZZZZZ` literal with
|
|
13
|
+
* no partial hex digit at either boundary. 26 bits would still be safe to
|
|
14
|
+
* store but wouldn't align to hex nibbles, making the packed literal harder
|
|
15
|
+
* to read and split by eye.
|
|
16
|
+
*
|
|
17
|
+
* Not 16 bits (32 bits total) either, even though a 32-bit pair would fit in
|
|
18
|
+
* a JS bitwise operator's native 32-bit range (JS `|`/`&`/`<<`/etc. operate on
|
|
19
|
+
* 32-bit ints, whereas the 48-bit pair used here, and even a 52-bit one,
|
|
20
|
+
* would need converting to `BigInt` for bitwise operations). 16 bits per
|
|
21
|
+
* symbol can't hold a full Unicode code point: the max scalar value `0x10FFFF`
|
|
22
|
+
* needs 21 bits, well past `0xFFFF`. So the bitwise-op convenience of 16 loses
|
|
23
|
+
* to the requirement of representing every Unicode code point in one half.
|
|
9
24
|
*/
|
|
10
25
|
export type TerminalRange = number;
|
|
11
26
|
/**
|
|
@@ -16,10 +31,6 @@ export declare const fullRange: TerminalRange;
|
|
|
16
31
|
* Unicode scalar value range packed into a single {@link TerminalRange}.
|
|
17
32
|
*/
|
|
18
33
|
export declare const unicodeRange: TerminalRange;
|
|
19
|
-
/**
|
|
20
|
-
* Maximal non-Unicode symbol encoded as a string value.
|
|
21
|
-
*/
|
|
22
|
-
export declare const max: string;
|
|
23
34
|
/**
|
|
24
35
|
* Maximal Unicode code point encoded as a string value.
|
|
25
36
|
*/
|
|
@@ -48,7 +59,10 @@ export declare const rangeEncode: (a: number, b: number) => TerminalRange;
|
|
|
48
59
|
*/
|
|
49
60
|
export declare const oneEncode: (a: number) => TerminalRange;
|
|
50
61
|
/**
|
|
51
|
-
* End-of-file marker
|
|
62
|
+
* End-of-file marker: `mask`, the single largest value the 24-bit symbol
|
|
63
|
+
* space can hold (the top of `fullRange`). Deliberately outside Unicode
|
|
64
|
+
* (`unicodeRange` tops out at `0x10FFFF`) so it can never collide with a
|
|
65
|
+
* real code point.
|
|
52
66
|
*/
|
|
53
67
|
export declare const eof: TerminalRange;
|
|
54
68
|
/**
|
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
-
import { codePointListToString, stringToCodePointList } from
|
|
10
|
-
import { definedValues } from
|
|
11
|
-
import { isArray2 } from
|
|
12
|
-
import { map, toArray, repeat as listRepeat } from
|
|
9
|
+
import { codePointListToString, stringToCodePointList } from '../text/utf16/module.f.js';
|
|
10
|
+
import { definedValues } from '../types/object/module.f.js';
|
|
11
|
+
import { isArray2 } from '../types/array/module.f.js';
|
|
12
|
+
import { map, toArray, repeat as listRepeat } from '../types/list/module.f.js';
|
|
13
|
+
import { contains } from '../types/range/module.f.js';
|
|
14
|
+
import { assert } from '../asserts/module.f.js';
|
|
13
15
|
/**
|
|
14
16
|
* Full 24-bit symbol range packed into a single {@link TerminalRange}.
|
|
15
17
|
*/
|
|
@@ -18,10 +20,6 @@ export const fullRange = 0x000000_FFFFFF;
|
|
|
18
20
|
* Unicode scalar value range packed into a single {@link TerminalRange}.
|
|
19
21
|
*/
|
|
20
22
|
export const unicodeRange = 0x000000_10FFFF;
|
|
21
|
-
/**
|
|
22
|
-
* Maximal non-Unicode symbol encoded as a string value.
|
|
23
|
-
*/
|
|
24
|
-
export const max = codePointListToString([0xFFFFFF]);
|
|
25
23
|
/**
|
|
26
24
|
* Maximal Unicode code point encoded as a string value.
|
|
27
25
|
*/
|
|
@@ -34,11 +32,9 @@ const { fromCodePoint } = String;
|
|
|
34
32
|
*/
|
|
35
33
|
const offset = 24;
|
|
36
34
|
const mask = (1 << offset) - 1;
|
|
37
|
-
const isValid = (
|
|
35
|
+
const isValid = contains(0, mask);
|
|
38
36
|
export const rangeEncode = (a, b) => {
|
|
39
|
-
|
|
40
|
-
throw `Invalid range ${a} ${b}.`;
|
|
41
|
-
}
|
|
37
|
+
assert(isValid(a) && isValid(b) && a <= b);
|
|
42
38
|
return Number((BigInt(a) << BigInt(offset)) | BigInt(b));
|
|
43
39
|
};
|
|
44
40
|
/**
|
|
@@ -46,13 +42,16 @@ export const rangeEncode = (a, b) => {
|
|
|
46
42
|
*/
|
|
47
43
|
export const oneEncode = (a) => rangeEncode(a, a);
|
|
48
44
|
/**
|
|
49
|
-
* End-of-file marker
|
|
45
|
+
* End-of-file marker: `mask`, the single largest value the 24-bit symbol
|
|
46
|
+
* space can hold (the top of `fullRange`). Deliberately outside Unicode
|
|
47
|
+
* (`unicodeRange` tops out at `0x10FFFF`) so it can never collide with a
|
|
48
|
+
* real code point.
|
|
50
49
|
*/
|
|
51
|
-
export const eof = oneEncode(
|
|
50
|
+
export const eof = oneEncode(mask);
|
|
52
51
|
/**
|
|
53
52
|
* Decodes a packed range into `[start, end]` symbols.
|
|
54
53
|
*/
|
|
55
|
-
export const rangeDecode = (r) => [Number(BigInt(r) >> BigInt(offset)),
|
|
54
|
+
export const rangeDecode = (r) => [Number(BigInt(r) >> BigInt(offset)), r & mask];
|
|
56
55
|
const mapOneEncode = map(oneEncode);
|
|
57
56
|
export const toSequence = (s) => toArray(mapOneEncode(stringToCodePointList(s)));
|
|
58
57
|
/**
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { assert, assertEq } from '../asserts/module.f.js';
|
|
2
|
+
import { classic, deterministic } from './testlib.f.js';
|
|
3
|
+
import { rangeEncode, str, set, range, commaJoin0Plus, isEmpty, oneEncode, repeat1Plus, } from './module.f.js';
|
|
4
|
+
export const proof = {
|
|
5
|
+
test: () => {
|
|
6
|
+
classic();
|
|
7
|
+
deterministic();
|
|
8
|
+
},
|
|
9
|
+
throw: {
|
|
10
|
+
rangeEncodeInvalid: [
|
|
11
|
+
() => { rangeEncode(-1, 0); },
|
|
12
|
+
() => { rangeEncode(0, -1); },
|
|
13
|
+
() => { rangeEncode(5, 3); },
|
|
14
|
+
],
|
|
15
|
+
rangeInvalid: [
|
|
16
|
+
() => { range('a'); },
|
|
17
|
+
() => { range('abc'); },
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
str: [
|
|
21
|
+
() => {
|
|
22
|
+
const result = str('a');
|
|
23
|
+
assertEq(typeof result, 'number', result);
|
|
24
|
+
assertEq(result, oneEncode(0x61));
|
|
25
|
+
},
|
|
26
|
+
() => {
|
|
27
|
+
const result = str('ab');
|
|
28
|
+
assert(Array.isArray(result), result);
|
|
29
|
+
assertEq(result.length, 2, result);
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
set: () => {
|
|
33
|
+
const result = set('abc');
|
|
34
|
+
assert(!(typeof result !== 'object' || result === null), result);
|
|
35
|
+
assert('a' in result, result);
|
|
36
|
+
assert('b' in result, result);
|
|
37
|
+
assert('c' in result, result);
|
|
38
|
+
},
|
|
39
|
+
commaJoin0Plus: () => {
|
|
40
|
+
const ws = '';
|
|
41
|
+
const item = 'x';
|
|
42
|
+
const result = commaJoin0Plus(ws)('[]', item);
|
|
43
|
+
assert(Array.isArray(result), result);
|
|
44
|
+
assert(result[0] === '[', result);
|
|
45
|
+
},
|
|
46
|
+
isEmpty: [
|
|
47
|
+
() => { assert(isEmpty(''), 'empty string should be empty'); },
|
|
48
|
+
() => { assert(isEmpty([]), 'empty array should be empty'); },
|
|
49
|
+
() => { assert(!(isEmpty('a')), 'non-empty string should not be empty'); },
|
|
50
|
+
() => {
|
|
51
|
+
const f = () => '';
|
|
52
|
+
assert(isEmpty(f), 'function returning empty string should be empty');
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
repeat1Plus: [
|
|
56
|
+
() => {
|
|
57
|
+
const result = repeat1Plus('x');
|
|
58
|
+
assert(result[0] === 'x');
|
|
59
|
+
assertEq(typeof result[1], 'function', 'expected repeat0Plus function');
|
|
60
|
+
},
|
|
61
|
+
() => {
|
|
62
|
+
const rule = 'ab';
|
|
63
|
+
const result = repeat1Plus(rule);
|
|
64
|
+
assertEq(result[0], rule);
|
|
65
|
+
const inner = result[1]();
|
|
66
|
+
assert(!(!('some' in inner) || !('none' in inner)), 'expected Option shape');
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { commaJoin0Plus,
|
|
1
|
+
import { commaJoin0Plus, none, option, range, remove, repeat, repeat0Plus, set, unicodeMax } from './module.f.js';
|
|
2
2
|
export const classic = () => {
|
|
3
3
|
// https://www.json.org/json-en.html
|
|
4
4
|
const json = () => [element];
|
|
@@ -93,7 +93,7 @@ export const deterministic = () => {
|
|
|
93
93
|
const string = [
|
|
94
94
|
'"',
|
|
95
95
|
repeat0Plus({
|
|
96
|
-
...remove(range(` ${
|
|
96
|
+
...remove(range(` ${unicodeMax}`), set('"\\')),
|
|
97
97
|
escape: [
|
|
98
98
|
'\\',
|
|
99
99
|
{
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import { sha256 } from
|
|
7
|
-
import { cBase32ToVec, vecToCBase32 } from
|
|
8
|
-
import { forEachStep, pure } from
|
|
9
|
-
import { errorExit, log, writeFromStream } from
|
|
10
|
-
import { dispatch } from
|
|
11
|
-
import {} from
|
|
12
|
-
import { casAddFile, fileCas } from
|
|
6
|
+
import { sha256 } from '../../crypto/sha2/module.f.js';
|
|
7
|
+
import { cBase32ToVec, vecToCBase32 } from '../../basen/cbase32/module.f.js';
|
|
8
|
+
import { forEachStep, pure } from '../../effects/module.f.js';
|
|
9
|
+
import { errorExit, log, writeFromStream } from '../../effects/node/module.f.js';
|
|
10
|
+
import { dispatch } from '../../cli/module.f.js';
|
|
11
|
+
import {} from '../../effects/memory/module.f.js';
|
|
12
|
+
import { casAddFile, fileCas } from '../module.f.js';
|
|
13
13
|
export const commands = [
|
|
14
14
|
{
|
|
15
15
|
names: ['add'],
|
|
@@ -2,13 +2,16 @@ export declare const proof: {
|
|
|
2
2
|
mainAdd: () => void;
|
|
3
3
|
mainAddGetBig: () => void;
|
|
4
4
|
mainAddWrongArgs: () => void;
|
|
5
|
+
mainAddMissingFile: () => void;
|
|
5
6
|
mainGetFound: () => void;
|
|
6
7
|
mainGetNotFound: () => void;
|
|
7
8
|
mainGetWrongArgs: () => void;
|
|
8
9
|
mainGetInvalidHash: () => void;
|
|
9
10
|
mainList: () => void;
|
|
10
11
|
mainListEmptyStore: () => void;
|
|
11
|
-
mainListCorruptStore: () => void;
|
|
12
12
|
mainNoCmd: () => void;
|
|
13
13
|
mainUnknownCmd: () => void;
|
|
14
|
+
throw: {
|
|
15
|
+
mainListCorruptStore: () => readonly [import("../../effects/node/virtual/module.f.ts").State, number];
|
|
16
|
+
};
|
|
14
17
|
};
|