functionalscript 0.44.0 → 0.46.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 +5 -3
- package/fjs/asn.1/module.f.mjs +8 -1
- package/fjs/asn.1/proof.f.d.mts +15 -0
- package/fjs/asn.1/proof.f.mjs +31 -3
- package/fjs/asserts/module.f.d.mts +14 -0
- package/fjs/asserts/module.f.mjs +20 -0
- package/fjs/asserts/proof.f.d.mts +3 -0
- package/fjs/asserts/proof.f.mjs +15 -1
- package/fjs/basen/base128/module.f.mjs +22 -5
- package/fjs/basen/base128/proof.f.d.mts +3 -1
- package/fjs/basen/base128/proof.f.mjs +3 -1
- package/fjs/basen/base64/module.f.mjs +7 -3
- package/fjs/basen/base64/proof.f.d.mts +3 -1
- package/fjs/basen/base64/proof.f.mjs +7 -4
- package/fjs/basen/cbase32/proof.f.d.mts +3 -1
- package/fjs/basen/cbase32/proof.f.mjs +3 -1
- package/fjs/bnf/data/module.f.d.mts +32 -6
- package/fjs/bnf/data/module.f.mjs +112 -7
- package/fjs/bnf/data/proof.f.d.mts +2 -0
- package/fjs/bnf/data/proof.f.mjs +74 -4
- package/fjs/bnf/data/types.d.ts +20 -2
- package/fjs/bnf/descent/module.f.d.mts +34 -5
- package/fjs/bnf/descent/module.f.mjs +176 -54
- package/fjs/bnf/descent/proof.f.d.mts +3 -0
- package/fjs/bnf/descent/proof.f.mjs +189 -27
- package/fjs/bnf/descent/types.d.ts +24 -18
- package/fjs/bnf/ll1/module.f.d.mts +74 -6
- package/fjs/bnf/ll1/module.f.mjs +297 -95
- package/fjs/bnf/ll1/proof.f.d.mts +17 -2
- package/fjs/bnf/ll1/proof.f.mjs +372 -137
- package/fjs/bnf/ll1/types.d.ts +25 -27
- package/fjs/bnf/matcher/module.f.d.mts +66 -0
- package/fjs/bnf/matcher/module.f.mjs +81 -0
- package/fjs/bnf/matcher/proof.f.d.mts +10 -0
- package/fjs/bnf/matcher/proof.f.mjs +79 -0
- package/fjs/bnf/matcher/types.d.ts +54 -0
- package/fjs/bnf/module.f.d.mts +15 -6
- package/fjs/bnf/module.f.mjs +52 -11
- package/fjs/bnf/proof.f.d.mts +2 -0
- package/fjs/bnf/proof.f.mjs +79 -3
- package/fjs/bnf/testlib.f.d.mts +31 -0
- package/fjs/bnf/testlib.f.mjs +80 -0
- package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
- package/fjs/bnf/token_symbol/module.f.mjs +7 -6
- package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
- package/fjs/bnf/token_symbol/types.d.ts +2 -2
- package/fjs/bnf/types.d.ts +10 -3
- package/fjs/cas/cli/module.f.d.mts +1 -1
- package/fjs/cas/cli/module.f.mjs +14 -20
- package/fjs/cas/cli/proof.f.d.mts +4 -4
- package/fjs/cas/cli/proof.f.mjs +47 -34
- package/fjs/cas/evo/module.f.d.mts +71 -31
- package/fjs/cas/evo/module.f.mjs +223 -138
- package/fjs/cas/evo/proof.f.d.mts +10 -1
- package/fjs/cas/evo/proof.f.mjs +311 -226
- package/fjs/cas/evo/types.d.ts +45 -9
- package/fjs/cas/module.f.d.mts +18 -32
- package/fjs/cas/module.f.mjs +164 -176
- package/fjs/cas/proof.f.d.mts +11 -8
- package/fjs/cas/proof.f.mjs +259 -147
- package/fjs/cas/types.d.ts +24 -10
- package/fjs/ci/common/module.f.d.mts +1 -1
- package/fjs/ci/common/module.f.mjs +1 -0
- package/fjs/ci/config/module.f.d.mts +3 -3
- package/fjs/ci/config/module.f.mjs +3 -3
- package/fjs/ci/module.f.d.mts +5 -5
- package/fjs/ci/module.f.mjs +8 -7
- package/fjs/ci/nix/module.f.d.mts +7 -5
- package/fjs/ci/nix/module.f.mjs +13 -12
- package/fjs/ci/nix/proof.f.d.mts +2 -0
- package/fjs/ci/nix/proof.f.mjs +4 -4
- package/fjs/ci/proof.f.d.mts +4 -2
- package/fjs/ci/proof.f.mjs +13 -8
- package/fjs/cli/module.f.d.mts +4 -6
- package/fjs/cli/module.f.mjs +4 -8
- package/fjs/cli/proof.f.d.mts +4 -2
- package/fjs/cli/proof.f.mjs +21 -18
- package/fjs/cli/types.d.ts +2 -3
- package/fjs/common/monoid/module.f.d.mts +70 -12
- package/fjs/common/monoid/module.f.mjs +177 -14
- package/fjs/common/monoid/proof.f.d.mts +12 -1
- package/fjs/common/monoid/proof.f.mjs +88 -4
- package/fjs/common/monoid/types.d.ts +23 -0
- package/fjs/crypto/hmac/module.f.mjs +2 -2
- package/fjs/crypto/secp/proof.f.d.mts +3 -1
- package/fjs/crypto/secp/proof.f.mjs +3 -1
- package/fjs/crypto/sha2/module.f.mjs +3 -1
- package/fjs/crypto/sha2/proof.f.d.mts +4 -1
- package/fjs/crypto/sha2/proof.f.mjs +27 -1
- package/fjs/crypto/sha2/types.d.ts +11 -0
- package/fjs/crypto/sign/module.f.mjs +2 -2
- package/fjs/crypto/vdf/module.f.d.mts +23 -4
- package/fjs/crypto/vdf/module.f.mjs +6 -4
- package/fjs/dev/module.f.d.mts +17 -5
- package/fjs/dev/module.f.mjs +60 -30
- package/fjs/dev/update/module.f.d.mts +11 -3
- package/fjs/dev/update/module.f.mjs +16 -11
- package/fjs/dev/update/proof.f.d.mts +4 -3
- package/fjs/dev/update/proof.f.mjs +11 -7
- package/fjs/djs/module.f.d.mts +13 -5
- package/fjs/djs/module.f.mjs +31 -16
- package/fjs/djs/parser/module.f.d.mts +16 -3
- package/fjs/djs/parser/module.f.mjs +135 -16
- package/fjs/djs/parser/proof.f.d.mts +8 -1
- package/fjs/djs/parser/proof.f.mjs +287 -13
- package/fjs/djs/parser/types.d.ts +7 -1
- package/fjs/djs/proof.f.d.mts +20 -1
- package/fjs/djs/proof.f.mjs +190 -12
- package/fjs/djs/serializer/module.f.d.mts +25 -8
- package/fjs/djs/serializer/module.f.mjs +66 -19
- package/fjs/djs/serializer/proof.f.d.mts +5 -0
- package/fjs/djs/serializer/proof.f.mjs +23 -1
- package/fjs/djs/tokenizer/module.f.d.mts +17 -5
- package/fjs/djs/tokenizer/module.f.mjs +120 -73
- package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
- package/fjs/djs/tokenizer/proof.f.mjs +86 -67
- package/fjs/djs/transpiler/module.f.d.mts +13 -19
- package/fjs/djs/transpiler/module.f.mjs +79 -72
- package/fjs/djs/transpiler/types.d.ts +29 -0
- package/fjs/djs/types.d.ts +7 -1
- package/fjs/effects/list/module.f.d.mts +23 -12
- package/fjs/effects/list/module.f.mjs +16 -12
- package/fjs/effects/list/types.d.ts +27 -7
- package/fjs/effects/memory/module.f.d.mts +6 -3
- package/fjs/effects/memory/module.f.mjs +7 -7
- package/fjs/effects/memory/proof.f.d.mts +4 -0
- package/fjs/effects/memory/proof.f.mjs +18 -9
- package/fjs/effects/memory/types.d.ts +4 -3
- package/fjs/effects/mock/module.f.d.mts +28 -4
- package/fjs/effects/mock/module.f.mjs +39 -5
- package/fjs/effects/mock/types.d.ts +10 -1
- package/fjs/effects/module.d.mts +12 -2
- package/fjs/effects/module.f.d.mts +469 -281
- package/fjs/effects/module.f.mjs +538 -299
- package/fjs/effects/module.mjs +11 -2
- package/fjs/effects/node/memory/module.d.mts +7 -2
- package/fjs/effects/node/memory/module.mjs +9 -5
- package/fjs/effects/node/memory/proof.d.mts +2 -0
- package/fjs/effects/node/memory/proof.mjs +12 -5
- package/fjs/effects/node/module.d.mts +8 -2
- package/fjs/effects/node/module.f.d.mts +183 -43
- package/fjs/effects/node/module.f.mjs +260 -62
- package/fjs/effects/node/module.mjs +61 -50
- package/fjs/effects/node/proof.f.d.mts +28 -2
- package/fjs/effects/node/proof.f.mjs +161 -42
- package/fjs/effects/node/types.d.ts +106 -18
- package/fjs/effects/node/virtual/module.f.d.mts +21 -4
- package/fjs/effects/node/virtual/module.f.mjs +113 -70
- package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
- package/fjs/effects/node/virtual/proof.f.mjs +201 -8
- package/fjs/effects/proof.f.d.mts +69 -34
- package/fjs/effects/proof.f.mjs +413 -130
- package/fjs/effects/types.d.ts +161 -33
- package/fjs/emergent_testing/all.test.d.mts +8 -0
- package/fjs/emergent_testing/all.test.mjs +14 -0
- package/fjs/emergent_testing/module.f.d.mts +22 -10
- package/fjs/emergent_testing/module.f.mjs +119 -85
- package/fjs/emergent_testing/proof.f.d.mts +21 -7
- package/fjs/emergent_testing/proof.f.mjs +169 -35
- package/fjs/emergent_testing/types.d.ts +22 -4
- package/fjs/fsc/bnf.f.d.mts +3 -0
- package/fjs/fsc/bnf.f.mjs +4 -1
- package/fjs/fsc/json.f.d.mts +3 -0
- package/fjs/fsc/json.f.mjs +4 -1
- package/fjs/fsc/module.f.d.mts +9 -0
- package/fjs/fsc/module.f.mjs +5 -3
- package/fjs/fsm/module.f.d.mts +14 -4
- package/fjs/fsm/module.f.mjs +54 -37
- package/fjs/fsm/proof.f.d.mts +5 -0
- package/fjs/fsm/proof.f.mjs +87 -115
- package/fjs/js/keywords/module.f.d.mts +52 -0
- package/fjs/js/keywords/module.f.mjs +72 -0
- package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
- package/fjs/js/keywords/proof.f.mjs +13 -0
- package/fjs/js/tokenizer/module.f.d.mts +30 -3
- package/fjs/js/tokenizer/module.f.mjs +161 -211
- package/fjs/js/tokenizer/proof.f.d.mts +1 -0
- package/fjs/js/tokenizer/proof.f.mjs +54 -24
- package/fjs/js/tokenizer/types.d.ts +33 -24
- package/fjs/mcp/cas/module.f.d.mts +1 -6
- package/fjs/mcp/cas/module.f.mjs +55 -51
- package/fjs/mcp/cas/proof.f.d.mts +15 -0
- package/fjs/mcp/cas/proof.f.mjs +174 -0
- package/fjs/mcp/evo/module.f.d.mts +19 -10
- package/fjs/mcp/evo/module.f.mjs +48 -27
- package/fjs/mcp/evo/proof.f.d.mts +6 -1
- package/fjs/mcp/evo/proof.f.mjs +115 -31
- package/fjs/mcp/module.f.d.mts +39 -4
- package/fjs/mcp/module.f.mjs +14 -12
- package/fjs/mcp/proof.f.d.mts +13 -1
- package/fjs/mcp/proof.f.mjs +120 -61
- package/fjs/media/html/module.f.d.mts +12 -0
- package/fjs/media/html/module.f.mjs +7 -5
- package/fjs/media/html/proof.f.d.mts +3 -0
- package/fjs/media/html/proof.f.mjs +4 -1
- package/fjs/media/json/extended/module.f.d.mts +82 -0
- package/fjs/media/json/extended/module.f.mjs +153 -0
- package/fjs/media/json/extended/proof.f.d.mts +42 -0
- package/fjs/media/json/extended/proof.f.mjs +127 -0
- package/fjs/media/json/extended/types.d.ts +23 -0
- package/fjs/media/json/module.f.d.mts +8 -2
- package/fjs/media/json/module.f.mjs +43 -41
- package/fjs/media/json/number/module.f.d.mts +59 -0
- package/fjs/media/json/number/module.f.mjs +136 -0
- package/fjs/media/json/number/proof.f.d.mts +24 -0
- package/fjs/media/json/number/proof.f.mjs +86 -0
- package/fjs/media/json/number/types.d.ts +28 -0
- package/fjs/media/json/parser/module.f.d.mts +25 -13
- package/fjs/media/json/parser/module.f.mjs +133 -72
- package/fjs/media/json/parser/proof.f.d.mts +5 -0
- package/fjs/media/json/parser/proof.f.mjs +31 -1
- package/fjs/media/json/parser/types.d.ts +38 -14
- package/fjs/media/json/rtti/module.f.d.mts +1 -1
- package/fjs/media/json/rtti/module.f.mjs +1 -1
- package/fjs/media/json/rtti/proof.f.d.mts +3 -0
- package/fjs/media/json/rtti/proof.f.mjs +12 -12
- package/fjs/media/json/schema/module.f.d.mts +61 -27
- package/fjs/media/json/schema/module.f.mjs +218 -63
- package/fjs/media/json/schema/proof.f.d.mts +41 -1
- package/fjs/media/json/schema/proof.f.mjs +220 -9
- package/fjs/media/json/serializer/module.f.d.mts +44 -0
- package/fjs/media/json/serializer/module.f.mjs +71 -9
- package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
- package/fjs/media/json/tokenizer/module.f.mjs +31 -8
- package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
- package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
- package/fjs/media/json/types.d.ts +36 -10
- package/fjs/media/lock/module.f.d.mts +100 -0
- package/fjs/media/lock/module.f.mjs +125 -0
- package/fjs/media/lock/proof.f.d.mts +33 -0
- package/fjs/media/lock/proof.f.mjs +196 -0
- package/fjs/media/lock/types.d.ts +15 -0
- package/fjs/media/module.f.d.mts +6 -5
- package/fjs/media/module.f.mjs +8 -7
- package/fjs/media/nix/module.f.d.mts +13 -0
- package/fjs/media/nix/module.f.mjs +4 -2
- package/fjs/media/nix/proof.f.d.mts +3 -0
- package/fjs/media/nix/proof.f.mjs +4 -1
- package/fjs/media/note/module.f.d.mts +121 -0
- package/fjs/media/note/module.f.mjs +131 -0
- package/fjs/media/note/proof.f.d.mts +29 -0
- package/fjs/media/note/proof.f.mjs +150 -0
- package/fjs/media/note/types.d.ts +10 -0
- package/fjs/media/proof.f.d.mts +4 -1
- package/fjs/media/proof.f.mjs +40 -21
- package/fjs/media/revision/module.f.d.mts +83 -7
- package/fjs/media/revision/module.f.mjs +127 -23
- package/fjs/media/revision/proof.f.d.mts +14 -0
- package/fjs/media/revision/proof.f.mjs +93 -2
- package/fjs/media/revision/types.d.ts +34 -5
- package/fjs/media/type/module.f.d.mts +53 -18
- package/fjs/media/type/module.f.mjs +87 -97
- package/fjs/media/type/proof.f.d.mts +17 -0
- package/fjs/media/type/proof.f.mjs +73 -13
- package/fjs/module.d.mts +5 -0
- package/fjs/module.f.d.mts +8 -0
- package/fjs/module.f.mjs +33 -10
- package/fjs/module.mjs +6 -0
- package/fjs/nanvm/proof.f.mjs +3 -3
- package/fjs/nanvm/rust/module.f.mjs +1 -1
- package/fjs/nanvm/update/module.f.d.mts +4 -4
- package/fjs/nanvm/update/module.f.mjs +8 -9
- package/fjs/nanvm/update/proof.f.mjs +4 -3
- package/fjs/path/module.f.d.mts +8 -0
- package/fjs/path/module.f.mjs +4 -2
- package/fjs/proof.f.d.mts +7 -3
- package/fjs/proof.f.mjs +41 -12
- package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
- package/fjs/protocol/json_rpc/module.f.mjs +10 -7
- package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
- package/fjs/protocol/mcp/module.f.d.mts +10 -13
- package/fjs/protocol/mcp/module.f.mjs +74 -58
- package/fjs/protocol/mcp/proof.f.d.mts +16 -3
- package/fjs/protocol/mcp/proof.f.mjs +224 -69
- package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
- package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
- package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
- package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
- package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
- package/fjs/protocol/mcp/types.d.ts +17 -6
- package/fjs/sul/id/module.f.d.mts +4 -0
- package/fjs/sul/id/module.f.mjs +6 -6
- package/fjs/sul/level/hash/module.f.d.mts +4 -1
- package/fjs/sul/level/hash/module.f.mjs +6 -4
- package/fjs/sul/level/hash/proof.f.d.mts +4 -0
- package/fjs/sul/level/hash/proof.f.mjs +7 -4
- package/fjs/sul/level/literal/module.f.d.mts +4 -1
- package/fjs/sul/level/literal/module.f.mjs +4 -3
- package/fjs/sul/level/literal/proof.f.d.mts +3 -0
- package/fjs/sul/level/literal/proof.f.mjs +4 -1
- package/fjs/sul/module.f.d.mts +5 -3
- package/fjs/sul/module.f.mjs +23 -17
- package/fjs/sul/proof.f.d.mts +4 -0
- package/fjs/sul/proof.f.mjs +5 -2
- package/fjs/text/ascii/module.f.d.mts +26 -0
- package/fjs/text/ascii/module.f.mjs +49 -1
- package/fjs/text/ascii/proof.f.d.mts +10 -0
- package/fjs/text/ascii/proof.f.mjs +33 -1
- package/fjs/text/code_point/module.f.d.mts +29 -3
- package/fjs/text/code_point/module.f.mjs +32 -9
- package/fjs/text/code_point/proof.f.d.mts +2 -0
- package/fjs/text/code_point/proof.f.mjs +39 -0
- package/fjs/text/module.f.d.mts +4 -2
- package/fjs/text/module.f.mjs +4 -3
- package/fjs/text/proof.f.d.mts +3 -0
- package/fjs/text/proof.f.mjs +4 -1
- package/fjs/text/sgr/module.f.d.mts +6 -5
- package/fjs/text/sgr/module.f.mjs +8 -8
- package/fjs/text/sgr/proof.f.d.mts +3 -0
- package/fjs/text/sgr/proof.f.mjs +4 -1
- package/fjs/text/utf16/module.f.d.mts +5 -1
- package/fjs/text/utf16/module.f.mjs +38 -35
- package/fjs/text/utf16/proof.f.d.mts +3 -1
- package/fjs/text/utf16/proof.f.mjs +19 -2
- package/fjs/text/utf8/module.f.d.mts +9 -5
- package/fjs/text/utf8/module.f.mjs +20 -20
- package/fjs/types/array/module.f.d.mts +2 -1
- package/fjs/types/array/module.f.mjs +16 -4
- package/fjs/types/bigfloat/module.f.d.mts +21 -1
- package/fjs/types/bigfloat/module.f.mjs +33 -7
- package/fjs/types/bigfloat/proof.f.d.mts +1 -0
- package/fjs/types/bigfloat/proof.f.mjs +46 -0
- package/fjs/types/bigint/module.f.d.mts +4 -0
- package/fjs/types/bigint/module.f.mjs +4 -3
- package/fjs/types/bit_vec/module.f.d.mts +10 -16
- package/fjs/types/bit_vec/module.f.mjs +99 -95
- package/fjs/types/bit_vec/proof.f.d.mts +6 -0
- package/fjs/types/bit_vec/proof.f.mjs +31 -5
- package/fjs/types/btree/find/module.f.d.mts +5 -1
- package/fjs/types/btree/find/module.f.mjs +5 -5
- package/fjs/types/btree/find/proof.f.d.mts +5 -1
- package/fjs/types/btree/find/proof.f.mjs +5 -3
- package/fjs/types/btree/module.f.d.mts +3 -0
- package/fjs/types/btree/module.f.mjs +3 -2
- package/fjs/types/btree/proof.f.d.mts +5 -1
- package/fjs/types/btree/proof.f.mjs +5 -3
- package/fjs/types/btree/remove/module.f.d.mts +11 -0
- package/fjs/types/btree/remove/module.f.mjs +10 -10
- package/fjs/types/btree/remove/proof.f.d.mts +3 -0
- package/fjs/types/btree/remove/proof.f.mjs +4 -1
- package/fjs/types/btree/set/module.f.d.mts +9 -0
- package/fjs/types/btree/set/module.f.mjs +14 -17
- package/fjs/types/btree/set/proof.f.d.mts +3 -0
- package/fjs/types/btree/set/proof.f.mjs +16 -1
- package/fjs/types/btree/types/module.f.d.mts +2 -1
- package/fjs/types/btree/types/module.f.mjs +2 -1
- package/fjs/types/byte_set/module.f.d.mts +20 -4
- package/fjs/types/byte_set/module.f.mjs +18 -8
- package/fjs/types/byte_set/proof.f.d.mts +3 -1
- package/fjs/types/byte_set/proof.f.mjs +10 -8
- package/fjs/types/function/compare/module.f.d.mts +3 -2
- package/fjs/types/function/compare/module.f.mjs +13 -5
- package/fjs/types/function/module.f.d.mts +8 -1
- package/fjs/types/function/module.f.mjs +8 -1
- package/fjs/types/function/operator/module.f.d.mts +2 -1
- package/fjs/types/function/operator/module.f.mjs +2 -2
- package/fjs/types/list/module.f.d.mts +10 -3
- package/fjs/types/list/module.f.mjs +6 -4
- package/fjs/types/list/proof.f.d.mts +4 -1
- package/fjs/types/list/proof.f.mjs +4 -2
- package/fjs/types/nibble_set/module.f.d.mts +2 -1
- package/fjs/types/nibble_set/module.f.mjs +2 -2
- package/fjs/types/nominal/module.f.d.mts +2 -1
- package/fjs/types/nominal/module.f.mjs +2 -1
- package/fjs/types/nullable/module.f.d.mts +26 -6
- package/fjs/types/nullable/module.f.mjs +25 -6
- package/fjs/types/nullable/proof.f.d.mts +4 -0
- package/fjs/types/nullable/proof.f.mjs +15 -0
- package/fjs/types/number/module.f.d.mts +4 -0
- package/fjs/types/number/module.f.mjs +4 -3
- package/fjs/types/object/module.f.d.mts +26 -4
- package/fjs/types/object/module.f.mjs +26 -7
- package/fjs/types/object/proof.f.d.mts +5 -2
- package/fjs/types/object/proof.f.mjs +6 -3
- package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
- package/fjs/types/object/structurally_same/module.f.mjs +59 -0
- package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
- package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
- package/fjs/types/ordered_map/module.f.d.mts +5 -0
- package/fjs/types/ordered_map/module.f.mjs +5 -4
- package/fjs/types/ordered_map/proof.f.d.mts +3 -0
- package/fjs/types/ordered_map/proof.f.mjs +4 -1
- package/fjs/types/patricia_trie/module.f.d.mts +2 -1
- package/fjs/types/patricia_trie/module.f.mjs +27 -12
- package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
- package/fjs/types/patricia_trie/proof.f.mjs +4 -1
- package/fjs/types/prime_field/module.f.d.mts +3 -1
- package/fjs/types/prime_field/module.f.mjs +3 -2
- package/fjs/types/range/module.f.d.mts +2 -1
- package/fjs/types/range/module.f.mjs +2 -2
- package/fjs/types/range_map/module.f.d.mts +6 -0
- package/fjs/types/range_map/module.f.mjs +6 -9
- package/fjs/types/range_map/proof.f.d.mts +5 -1
- package/fjs/types/range_map/proof.f.mjs +5 -3
- package/fjs/types/range_set/module.f.d.mts +5 -0
- package/fjs/types/range_set/module.f.mjs +1 -0
- package/fjs/types/range_set/proof.f.d.mts +3 -0
- package/fjs/types/range_set/proof.f.mjs +4 -1
- package/fjs/types/result/module.d.mts +8 -0
- package/fjs/types/result/module.f.d.mts +37 -7
- package/fjs/types/result/module.f.mjs +38 -8
- package/fjs/types/result/module.mjs +9 -1
- package/fjs/types/result/proof.f.d.mts +5 -0
- package/fjs/types/result/proof.f.mjs +22 -2
- package/fjs/types/rtti/common/module.f.d.mts +44 -14
- package/fjs/types/rtti/common/module.f.mjs +42 -36
- package/fjs/types/rtti/common/proof.f.d.mts +4 -0
- package/fjs/types/rtti/common/proof.f.mjs +10 -7
- package/fjs/types/rtti/data/module.f.d.mts +134 -0
- package/fjs/types/rtti/data/module.f.mjs +1053 -0
- package/fjs/types/rtti/data/proof.f.d.mts +76 -0
- package/fjs/types/rtti/data/proof.f.mjs +589 -0
- package/fjs/types/rtti/data/types.d.ts +83 -0
- package/fjs/types/rtti/module.f.d.mts +12 -5
- package/fjs/types/rtti/module.f.mjs +7 -5
- package/fjs/types/rtti/parse/module.f.d.mts +48 -0
- package/fjs/types/rtti/parse/module.f.mjs +45 -34
- package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
- package/fjs/types/rtti/parse/proof.f.mjs +51 -52
- package/fjs/types/rtti/proof.f.d.mts +3 -1
- package/fjs/types/rtti/proof.f.mjs +6 -2
- package/fjs/types/rtti/ts/module.f.d.mts +68 -9
- package/fjs/types/rtti/ts/module.f.mjs +258 -30
- package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
- package/fjs/types/rtti/ts/proof.f.mjs +152 -4
- package/fjs/types/rtti/ts/types.d.ts +25 -1
- package/fjs/types/rtti/types.d.ts +40 -0
- package/fjs/types/sorted_list/module.f.d.mts +4 -1
- package/fjs/types/sorted_list/module.f.mjs +21 -12
- package/fjs/types/sorted_list/proof.f.d.mts +3 -1
- package/fjs/types/sorted_list/proof.f.mjs +3 -1
- package/fjs/types/sorted_set/module.f.d.mts +49 -1
- package/fjs/types/sorted_set/module.f.mjs +26 -2
- package/fjs/types/sorted_set/proof.f.d.mts +4 -1
- package/fjs/types/sorted_set/proof.f.mjs +19 -2
- package/fjs/types/string/module.f.d.mts +4 -0
- package/fjs/types/string/module.f.mjs +4 -3
- package/fjs/types/string_set/module.f.d.mts +3 -1
- package/fjs/types/string_set/module.f.mjs +3 -2
- package/fjs/types/ts/module.f.d.mts +2 -0
- package/fjs/types/ts/module.f.mjs +3 -3
- package/fjs/types/ts/proof.f.d.mts +1 -0
- package/fjs/types/ts/proof.f.mjs +5 -0
- package/fjs/types/ts/types.d.ts +6 -1
- package/fjs/types/uint8array/module.f.d.mts +13 -2
- package/fjs/types/uint8array/module.f.mjs +20 -15
- package/fjs/website/module.f.d.mts +5 -2
- package/fjs/website/module.f.mjs +6 -8
- package/fjs/website/proof.f.mjs +2 -1
- package/package.json +3 -3
- package/fjs/asn.1/types.js +0 -6
- package/fjs/asserts/types.js +0 -6
- package/fjs/basen/types.js +0 -6
- package/fjs/bnf/data/types.js +0 -6
- package/fjs/bnf/descent/types.js +0 -6
- package/fjs/bnf/ll1/types.js +0 -6
- package/fjs/bnf/token_symbol/types.js +0 -6
- package/fjs/bnf/types.js +0 -6
- package/fjs/cas/evo/types.js +0 -7
- package/fjs/cas/types.js +0 -6
- package/fjs/ci/common/types.js +0 -1
- package/fjs/ci/nix/types.js +0 -6
- package/fjs/ci/types.js +0 -6
- package/fjs/cli/types.js +0 -6
- package/fjs/common/monoid/types.js +0 -6
- package/fjs/crypto/pow/types.js +0 -6
- package/fjs/crypto/secp/types.js +0 -6
- package/fjs/crypto/sha2/types.js +0 -6
- package/fjs/crypto/sign/types.js +0 -6
- package/fjs/crypto/vdf/types.js +0 -6
- package/fjs/dev/package_json/module.f.d.mts +0 -32
- package/fjs/dev/package_json/module.f.mjs +0 -37
- package/fjs/dev/package_json/proof.f.d.mts +0 -6
- package/fjs/dev/package_json/proof.f.mjs +0 -32
- package/fjs/dev/types.js +0 -6
- package/fjs/djs/ast/types.js +0 -8
- package/fjs/djs/parser/types.js +0 -7
- package/fjs/djs/tokenizer/types.js +0 -7
- package/fjs/djs/types.js +0 -7
- package/fjs/effects/eff/module.f.d.mts +0 -10
- package/fjs/effects/eff/module.f.mjs +0 -68
- package/fjs/effects/eff/proof.f.d.mts +0 -12
- package/fjs/effects/eff/proof.f.mjs +0 -66
- package/fjs/effects/eff/types.d.ts +0 -71
- package/fjs/effects/eff/types.js +0 -6
- package/fjs/effects/list/types.js +0 -6
- package/fjs/effects/memory/types.js +0 -6
- package/fjs/effects/mock/types.js +0 -6
- package/fjs/effects/node/types.js +0 -6
- package/fjs/effects/node/virtual/types.js +0 -7
- package/fjs/effects/types.js +0 -6
- package/fjs/emergent_testing/all.test.d.ts +0 -1
- package/fjs/emergent_testing/all.test.js +0 -5
- package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
- package/fjs/emergent_testing/scenarios/all.js +0 -1
- package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
- package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
- package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
- package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
- package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
- package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
- package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
- package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
- package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
- package/fjs/emergent_testing/types.js +0 -6
- package/fjs/js/tokenizer/types.js +0 -6
- package/fjs/media/html/types.js +0 -6
- package/fjs/media/json/parser/types.js +0 -6
- package/fjs/media/json/tokenizer/types.js +0 -6
- package/fjs/media/json/types.js +0 -13
- package/fjs/media/nix/types.js +0 -6
- package/fjs/media/revision/types.js +0 -8
- package/fjs/media/type/types.js +0 -6
- package/fjs/media/types.js +0 -7
- package/fjs/nanvm/types.js +0 -11
- package/fjs/protocol/json_rpc/types.js +0 -8
- package/fjs/protocol/mcp/types.js +0 -8
- package/fjs/sul/id/types.js +0 -6
- package/fjs/sul/level/hash/types.js +0 -6
- package/fjs/sul/level/literal/types.js +0 -6
- package/fjs/sul/types.js +0 -6
- package/fjs/text/sgr/types.js +0 -6
- package/fjs/text/types.js +0 -6
- package/fjs/text/utf16/types.js +0 -6
- package/fjs/text/utf8/types.js +0 -6
- package/fjs/types/array/types.js +0 -6
- package/fjs/types/bigfloat/types.js +0 -6
- package/fjs/types/bigint/types.js +0 -6
- package/fjs/types/bit_vec/types.js +0 -6
- package/fjs/types/btree/find/types.js +0 -6
- package/fjs/types/btree/types/types.js +0 -6
- package/fjs/types/byte_set/types.js +0 -6
- package/fjs/types/function/compare/types.js +0 -6
- package/fjs/types/function/operator/types.js +0 -6
- package/fjs/types/function/types.js +0 -6
- package/fjs/types/list/types.js +0 -6
- package/fjs/types/nibble_set/types.js +0 -6
- package/fjs/types/nominal/types.js +0 -6
- package/fjs/types/nullable/types.js +0 -6
- package/fjs/types/object/types.js +0 -8
- package/fjs/types/option/types.js +0 -6
- package/fjs/types/ordered_map/types.js +0 -6
- package/fjs/types/patricia_trie/types.js +0 -6
- package/fjs/types/phantom/types.js +0 -11
- package/fjs/types/prime_field/types.js +0 -6
- package/fjs/types/range/types.js +0 -6
- package/fjs/types/range_map/types.js +0 -6
- package/fjs/types/result/types.js +0 -6
- package/fjs/types/rtti/common/types.js +0 -1
- package/fjs/types/rtti/parse/types.js +0 -1
- package/fjs/types/rtti/ts/types.js +0 -1
- package/fjs/types/rtti/types.js +0 -1
- package/fjs/types/rtti/validate/module.f.d.mts +0 -6
- package/fjs/types/rtti/validate/module.f.mjs +0 -169
- package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
- package/fjs/types/rtti/validate/proof.f.mjs +0 -437
- package/fjs/types/rtti/validate/types.d.ts +0 -6
- package/fjs/types/rtti/validate/types.js +0 -1
- package/fjs/types/sorted_list/types.js +0 -6
- package/fjs/types/sorted_set/types.js +0 -6
- package/fjs/types/string_set/types.js +0 -6
- package/fjs/types/ts/types.js +0 -8
|
@@ -3,13 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*
|
|
6
|
+
* @import { Ast, AstSequence, AstTag } from '../../bnf/matcher/types.ts'
|
|
6
7
|
* @import {
|
|
7
|
-
* AstRuleMeta,
|
|
8
|
-
* AstSequenceMeta,
|
|
9
|
-
* AstTag,
|
|
10
8
|
* CodePointMeta,
|
|
11
9
|
* DescentMatch,
|
|
12
|
-
* DescentMatchResult
|
|
10
|
+
* DescentMatchResult,
|
|
13
11
|
* } from '../../bnf/descent/types.ts'
|
|
14
12
|
* @import { DataRule, Rule } from '../../bnf/types.ts'
|
|
15
13
|
* @import {
|
|
@@ -29,11 +27,14 @@
|
|
|
29
27
|
* @import { CodePoint } from '../../text/utf16/types.ts'
|
|
30
28
|
* @import { StateScan } from '../../types/function/operator/types.ts'
|
|
31
29
|
* @import { List } from '../../types/list/types.ts'
|
|
32
|
-
* @import { Unknown } from '../types.ts'
|
|
33
30
|
* @import { DjsToken, DjsTokenWithMetadata } from './types.ts'
|
|
31
|
+
* @import { TriviaKind } from '../../js/tokenizer/types.ts'
|
|
32
|
+
* @import { Nullable } from '../../types/nullable/types.ts'
|
|
34
33
|
*/
|
|
35
34
|
|
|
36
|
-
import {
|
|
35
|
+
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
36
|
+
import { descentParserRuleSet } from '../../bnf/descent/module.f.mjs'
|
|
37
|
+
import { toData } from '../../bnf/data/module.f.mjs'
|
|
37
38
|
import {
|
|
38
39
|
eof,
|
|
39
40
|
none,
|
|
@@ -47,19 +48,17 @@ import {
|
|
|
47
48
|
unicodeMax,
|
|
48
49
|
unicodeRange,
|
|
49
50
|
} from '../../bnf/module.f.mjs'
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
51
|
+
import { keywords } from '../../js/keywords/module.f.mjs'
|
|
52
|
+
import { isKeywordToken, mergeTrivia } from '../../js/tokenizer/module.f.mjs'
|
|
52
53
|
import {
|
|
53
54
|
asterisk, backspace, ht, lf, ff, cr,
|
|
54
55
|
quotationMark, solidus, reverseSolidus,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
latinSmallLetterA, latinSmallLetterB, latinSmallLetterF,
|
|
56
|
+
hexDigitValue,
|
|
57
|
+
latinSmallLetterB, latinSmallLetterF,
|
|
58
58
|
latinSmallLetterN, latinSmallLetterR, latinSmallLetterT, latinSmallLetterU,
|
|
59
|
-
range as asciiRange,
|
|
60
59
|
} from '../../text/ascii/module.f.mjs'
|
|
61
60
|
import { codePointListToString, stringToCodePointList } from '../../text/utf16/module.f.mjs'
|
|
62
|
-
import {
|
|
61
|
+
import { mapUnwrap } from '../../types/nullable/module.f.mjs'
|
|
63
62
|
import { concat, empty, filter, flat, flatMap, fold, map, stateScan, toArray } from '../../types/list/module.f.mjs'
|
|
64
63
|
import { stringifyAsTree } from '../serializer/module.f.mjs'
|
|
65
64
|
import { sort } from '../../types/object/module.f.mjs'
|
|
@@ -244,6 +243,20 @@ const buildToken = () => {
|
|
|
244
243
|
/** @type {() => Rule} */
|
|
245
244
|
export const jsGrammar = () => repeat0Plus(buildToken())
|
|
246
245
|
|
|
246
|
+
/**
|
|
247
|
+
* The whole-file matcher together with the name of the rule to start it at.
|
|
248
|
+
*
|
|
249
|
+
* `toData` generates rule names, so the entry name belongs to the conversion
|
|
250
|
+
* rather than to the grammar's spelling and is read back from it here. Building
|
|
251
|
+
* both from one conversion also keeps the grammar built once per matcher.
|
|
252
|
+
*
|
|
253
|
+
* @type {<T>() => readonly [DescentMatch<T>, string]}
|
|
254
|
+
*/
|
|
255
|
+
export const jsMatcher = () => {
|
|
256
|
+
const [ruleSet, entry] = toData(jsGrammar())
|
|
257
|
+
return [descentParserRuleSet(ruleSet), entry]
|
|
258
|
+
}
|
|
259
|
+
|
|
247
260
|
const stringify = stringifyAsTree(sort)
|
|
248
261
|
|
|
249
262
|
/** @type {(cp: CodePoint) => CodePointMeta<unknown>} */
|
|
@@ -275,19 +288,29 @@ const codePointsWithMetadata = path => cp => toArray(flat(stateScan(metadataScan
|
|
|
275
288
|
|
|
276
289
|
/** @typedef {[string, TokenMetadata | null, List<number>]} _TokenScanState */
|
|
277
290
|
|
|
278
|
-
/**
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
291
|
+
/**
|
|
292
|
+
* The grammar tag of a trivia code point, as the kind `mergeTrivia` speaks in;
|
|
293
|
+
* `null` for every other tag.
|
|
294
|
+
*
|
|
295
|
+
* @type {(tag: string) => Nullable<TriviaKind>}
|
|
296
|
+
*/
|
|
297
|
+
const triviaKind = tag =>
|
|
298
|
+
tag === '\n' || tag === '\r' ? 'nl' :
|
|
299
|
+
tag === ' ' || tag === '\t' ? 'ws' :
|
|
300
|
+
null
|
|
282
301
|
|
|
283
302
|
/** @type {StateScan<_FlatToken, _TokenScanState, List<_Token>>} */
|
|
284
303
|
const scanFunc = (input, state) => {
|
|
285
304
|
const [stateTag, stateMetadata, stateCodePoints] = state
|
|
286
305
|
if (typeof input === 'string') {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
306
|
+
// A trivia run continues: `mergeTrivia` decides the run's kind, and
|
|
307
|
+
// the pending token only has to be restarted under the incoming tag
|
|
308
|
+
// when that kind is not the one it already has (ws followed by nl).
|
|
309
|
+
const inputKind = triviaKind(input)
|
|
310
|
+
const stateKind = triviaKind(stateTag)
|
|
311
|
+
if (inputKind !== null && stateKind !== null) {
|
|
312
|
+
return [null, mergeTrivia(stateKind, inputKind) === stateKind ? state : [input, null, []]]
|
|
313
|
+
}
|
|
291
314
|
/** @type {_TokenScanState} */
|
|
292
315
|
const newState = [input, null, []]
|
|
293
316
|
if (stateTag === '') {
|
|
@@ -303,7 +326,7 @@ const scanFunc = (input, state) => {
|
|
|
303
326
|
}
|
|
304
327
|
|
|
305
328
|
// All operator tag strings produced by the grammar's operator rule
|
|
306
|
-
const operatorTags =
|
|
329
|
+
const operatorTags = new Set([
|
|
307
330
|
'.', '=>', '===', '==', '=', '!==', '!=', '!',
|
|
308
331
|
'>>>=', '>>>', '>>=', '>>', '>=', '>',
|
|
309
332
|
'<<=', '<<', '<=', '<',
|
|
@@ -312,7 +335,7 @@ const operatorTags = /** @type {ReadonlySet<string>} */ (new Set([
|
|
|
312
335
|
'&&=', '&&', '&=', '&', '||=', '||', '|=', '|',
|
|
313
336
|
'^=', '^', '~', '??=', '??', '?.', '?',
|
|
314
337
|
'[', ']', '{', '}', '(', ')', ',', ':'
|
|
315
|
-
])
|
|
338
|
+
])
|
|
316
339
|
|
|
317
340
|
/** @type {(tk: _FlatToken) => boolean} */
|
|
318
341
|
const filterFunc = tk => {
|
|
@@ -333,7 +356,13 @@ const filterFunc = tk => {
|
|
|
333
356
|
}
|
|
334
357
|
}
|
|
335
358
|
|
|
336
|
-
|
|
359
|
+
/**
|
|
360
|
+
* A `\uXXXX` escape reaches the `unicode` state only after the grammar has
|
|
361
|
+
* accepted its four hex digits, so a non-hex code point here is a tokenizer
|
|
362
|
+
* bug rather than bad input — assert instead of decoding it to a garbage
|
|
363
|
+
* value, which is what the hand-rolled ternary chain used to do.
|
|
364
|
+
*/
|
|
365
|
+
const unwrapHexDigitValue = mapUnwrap(hexDigitValue)
|
|
337
366
|
|
|
338
367
|
/** @typedef {
|
|
339
368
|
* | { readonly kind: 'normal' }
|
|
@@ -344,7 +373,17 @@ const rangeCapitalAF = asciiRange('AF')
|
|
|
344
373
|
/** @type {StateScan<number, _StringDecodeState, List<number>>} */
|
|
345
374
|
const stringDecodeScan = (cp, state) => {
|
|
346
375
|
switch (state.kind) {
|
|
347
|
-
case 'escape':
|
|
376
|
+
case 'escape': {
|
|
377
|
+
// The grammar's own `escape` rule (`buildToken`'s `string`) only ever
|
|
378
|
+
// accepts `"`, `\`, `/`, `b`, `f`, `n`, `r`, `t`, or `u` right after a
|
|
379
|
+
// backslash — any other character fails to parse before a token
|
|
380
|
+
// reaches this scan at all, so narrowing to those nine is provable,
|
|
381
|
+
// not merely assumed.
|
|
382
|
+
assert(
|
|
383
|
+
cp === quotationMark || cp === reverseSolidus || cp === solidus ||
|
|
384
|
+
cp === latinSmallLetterB || cp === latinSmallLetterF || cp === latinSmallLetterN ||
|
|
385
|
+
cp === latinSmallLetterR || cp === latinSmallLetterT || cp === latinSmallLetterU,
|
|
386
|
+
cp)
|
|
348
387
|
switch (cp) {
|
|
349
388
|
case quotationMark: return [[quotationMark], { kind: 'normal' }] // \" → "
|
|
350
389
|
case reverseSolidus: return [[reverseSolidus], { kind: 'normal' }] // \\ → \
|
|
@@ -354,15 +393,16 @@ const stringDecodeScan = (cp, state) => {
|
|
|
354
393
|
case latinSmallLetterN: return [[lf], { kind: 'normal' }] // \n → line feed (LF)
|
|
355
394
|
case latinSmallLetterR: return [[cr], { kind: 'normal' }] // \r → carriage return (CR)
|
|
356
395
|
case latinSmallLetterT: return [[ht], { kind: 'normal' }] // \t → horizontal tab (HT)
|
|
357
|
-
|
|
358
|
-
default
|
|
396
|
+
// `\u` is the only case the assertion above leaves. It is a
|
|
397
|
+
// `default` rather than a `case latinSmallLetterU` because the
|
|
398
|
+
// ASCII constants are plain `number`s, so the switch can never
|
|
399
|
+
// be exhaustive to TypeScript and the clause would fall through
|
|
400
|
+
// into `unicode` below.
|
|
401
|
+
default: return [null, { kind: 'unicode', acc: 0, count: 0 }] // \u → start 4 hex digits
|
|
359
402
|
}
|
|
403
|
+
}
|
|
360
404
|
case 'unicode': {
|
|
361
|
-
|
|
362
|
-
const digit = contains(...digitRange)(cp) ? cp - digit0
|
|
363
|
-
: contains(...rangeCapitalAF)(cp) ? cp - (latinCapitalLetterA - 10)
|
|
364
|
-
: cp - (latinSmallLetterA - 10)
|
|
365
|
-
const acc = (state.acc << 4) | digit
|
|
405
|
+
const acc = (state.acc << 4) | unwrapHexDigitValue(cp)
|
|
366
406
|
return state.count === 3 ? [[acc], { kind: 'normal' }] : [null, { kind: 'unicode', acc, count: state.count + 1 }]
|
|
367
407
|
}
|
|
368
408
|
default:
|
|
@@ -373,31 +413,8 @@ const stringDecodeScan = (cp, state) => {
|
|
|
373
413
|
/** @type {(codePoints: readonly number[]) => string} */
|
|
374
414
|
const decodeJsonString = codePoints => codePointListToString(flat(stateScan(stringDecodeScan)({ kind: 'normal' })(codePoints.slice(1, -1))))
|
|
375
415
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
const decodeNumber = value => {
|
|
379
|
-
// at most one of 'e'/'E' can occur, so whichever indexOf finds it (if any) is the exponent marker
|
|
380
|
-
const lowerEIndex = value.indexOf('e')
|
|
381
|
-
const eIndex = lowerEIndex < 0 ? value.indexOf('E') : lowerEIndex
|
|
382
|
-
const mantissaText = eIndex < 0 ? value : value.slice(0, eIndex)
|
|
383
|
-
const expText = eIndex < 0 ? '' : value.slice(eIndex + 1)
|
|
384
|
-
const dotIndex = mantissaText.indexOf('.')
|
|
385
|
-
const intDigits = dotIndex < 0 ? mantissaText : mantissaText.slice(0, dotIndex)
|
|
386
|
-
const fracDigits = dotIndex < 0 ? '' : mantissaText.slice(dotIndex + 1)
|
|
387
|
-
const mantissa = BigInt(intDigits + fracDigits)
|
|
388
|
-
const exp = (expText === '' ? 0 : Number(expText)) - fracDigits.length
|
|
389
|
-
return [mantissa, exp]
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
const keywords = /** @type {ReadonlySet<string>} */ (new Set([
|
|
393
|
-
'true', 'false', 'null', 'undefined',
|
|
394
|
-
'arguments', 'await', 'break', 'case', 'catch', 'class', 'const', 'continue',
|
|
395
|
-
'debugger', 'default', 'delete', 'do', 'else', 'enum', 'eval', 'export',
|
|
396
|
-
'extends', 'finally', 'for', 'function', 'if', 'implements', 'import', 'in',
|
|
397
|
-
'instanceof', 'interface', 'let', 'new', 'package', 'private', 'protected',
|
|
398
|
-
'public', 'return', 'static', 'super', 'switch', 'this', 'throw', 'try',
|
|
399
|
-
'typeof', 'var', 'void', 'while', 'with', 'yield',
|
|
400
|
-
]))
|
|
416
|
+
/** @type {ReadonlySet<string>} */
|
|
417
|
+
const keywordSet = new Set(keywords)
|
|
401
418
|
|
|
402
419
|
/** @type {(tk: _Token) => JsToken} */
|
|
403
420
|
const toJsToken = tk => {
|
|
@@ -413,13 +430,13 @@ const toJsToken = tk => {
|
|
|
413
430
|
return { kind: 'string', value: decodeJsonString(codePoints) }
|
|
414
431
|
case 'id': {
|
|
415
432
|
const value = codePointListToString(codePoints)
|
|
416
|
-
if (
|
|
433
|
+
if (keywordSet.has(value)) return /** @type {JsToken} */ ({ kind: value })
|
|
417
434
|
return { kind: 'id', value }
|
|
418
435
|
}
|
|
419
436
|
case 'number': {
|
|
420
437
|
const value = codePointListToString(codePoints)
|
|
421
438
|
if (value.endsWith('n')) return { kind: 'bigint', value: BigInt(value.slice(0, -1)) }
|
|
422
|
-
return { kind: 'number', value
|
|
439
|
+
return { kind: 'number', value }
|
|
423
440
|
}
|
|
424
441
|
case 'comment':
|
|
425
442
|
if (codePoints[1] === asterisk) // block comment /*...*/
|
|
@@ -453,7 +470,7 @@ const toJsTokenWithMetadata = tk => {
|
|
|
453
470
|
return [{ token, metadata }]
|
|
454
471
|
}
|
|
455
472
|
|
|
456
|
-
/** @type {(value:
|
|
473
|
+
/** @type {(value: Ast<CodePointMeta<TokenMetadata>>|CodePointMeta<TokenMetadata>) => List<_FlatToken>} */
|
|
457
474
|
const getTokensFromAstRuleOrCodePoint = value => {
|
|
458
475
|
if (value instanceof Array)
|
|
459
476
|
return [value]
|
|
@@ -461,7 +478,7 @@ const getTokensFromAstRuleOrCodePoint = value => {
|
|
|
461
478
|
return getTokensFromAstRule(value)
|
|
462
479
|
}
|
|
463
480
|
|
|
464
|
-
/** @type {(seq:
|
|
481
|
+
/** @type {(seq: AstSequence<CodePointMeta<TokenMetadata>>) => List<_FlatToken>} */
|
|
465
482
|
const getTokensFromAstSequence = seq => {
|
|
466
483
|
return flatMap(getTokensFromAstRuleOrCodePoint)(seq)
|
|
467
484
|
}
|
|
@@ -475,7 +492,7 @@ const tagToToken = tag => {
|
|
|
475
492
|
}
|
|
476
493
|
}
|
|
477
494
|
|
|
478
|
-
/** @type {(ast:
|
|
495
|
+
/** @type {(ast: Ast<CodePointMeta<TokenMetadata>>) => List<_FlatToken>} */
|
|
479
496
|
const getTokensFromAstRule = ast => {
|
|
480
497
|
const token = tagToToken(ast.tag)
|
|
481
498
|
if (ast.sequence.length === 0)
|
|
@@ -488,11 +505,11 @@ const getTokensFromAstRule = ast => {
|
|
|
488
505
|
export const tokenizeString = s => {
|
|
489
506
|
const cp = toArray(stringToCodePointList(s))
|
|
490
507
|
if (cp.length === 0) {
|
|
491
|
-
return stringify(
|
|
508
|
+
return stringify([{ kind: 'eof' }])
|
|
492
509
|
}
|
|
493
|
-
const m =
|
|
510
|
+
const [m, entry] = jsMatcher()
|
|
494
511
|
const cpm = codePointsWithMetadata('')(cp)
|
|
495
|
-
const { ast, success: ok, idx: len } = m(
|
|
512
|
+
const { ast, success: ok, idx: len } = m(entry, cpm)
|
|
496
513
|
if (!ok || len !== cp.length)
|
|
497
514
|
return 'error'
|
|
498
515
|
|
|
@@ -505,16 +522,19 @@ export const tokenizeString = s => {
|
|
|
505
522
|
const tokens = flat(stateScan(scanFunc)(['', null, []])(filterTokens))
|
|
506
523
|
const jsTokens = concat(flatMap(toJsTokens)(tokens))([{ kind: 'eof' }])
|
|
507
524
|
const result = toArray(jsTokens)
|
|
508
|
-
return stringify(
|
|
525
|
+
return stringify(result)
|
|
509
526
|
}
|
|
510
527
|
|
|
511
528
|
// Finds `tag` in flatTokens and returns the metadata of the next code point after it.
|
|
512
529
|
// numError/unterminated tags are followed by the poisoning char / EOF-hitting position
|
|
513
530
|
// in the flattened AST walk order, so this pinpoints roughly where tokenization failed.
|
|
531
|
+
//
|
|
532
|
+
// The single call site only passes a `tag` it already confirmed via
|
|
533
|
+
// `flatTokens.includes(tag)`, so `indexOf` here is never -1.
|
|
514
534
|
/** @type {(tag: string, flatTokens: readonly _FlatToken[], fallback: TokenMetadata) => TokenMetadata} */
|
|
515
535
|
const metadataAfterTag = (tag, flatTokens, fallback) => {
|
|
516
536
|
const idx = flatTokens.indexOf(tag)
|
|
517
|
-
const found =
|
|
537
|
+
const found = flatTokens.slice(idx + 1).find((/** @type {_FlatToken} */ t) => t instanceof Array)
|
|
518
538
|
return found === undefined ? fallback : found[1]
|
|
519
539
|
}
|
|
520
540
|
|
|
@@ -525,14 +545,19 @@ export const tokenizeJs = input => path => {
|
|
|
525
545
|
const initial = { path, line: 1, column: 1 }
|
|
526
546
|
if (cp.length === 0) return [{ token: { kind: 'eof' }, metadata: initial }]
|
|
527
547
|
|
|
528
|
-
const m =
|
|
548
|
+
const [m, entry] = jsMatcher()
|
|
529
549
|
const cpm = codePointsWithMetadata(path)(cp)
|
|
530
|
-
const { ast, success: ok, idx: len } = m(
|
|
550
|
+
const { ast, success: ok, idx: len } = m(entry, cpm)
|
|
531
551
|
const finalMetadata = fold(advanceMetadata)(initial)(cp)
|
|
532
552
|
|
|
533
553
|
if (!ok || len !== cp.length) {
|
|
534
|
-
|
|
535
|
-
|
|
554
|
+
// `len` is always `< cpm.length` (`=== cp.length`) here: `ok` false only
|
|
555
|
+
// ever happens with `len === 0` (nothing matched at position 0), and a
|
|
556
|
+
// `len !== cp.length` failure with `ok` true is by definition a partial
|
|
557
|
+
// match (`len < cp.length`) — `repeat0Plus` never fails after
|
|
558
|
+
// successfully consuming the whole input, so there is no way to reach
|
|
559
|
+
// this branch with `len === cp.length`.
|
|
560
|
+
return [{ token: { kind: 'error', message: 'invalid token' }, metadata: cpm[len][1] }]
|
|
536
561
|
}
|
|
537
562
|
|
|
538
563
|
const flatTokens = toArray(getTokensFromAstRule(ast))
|
|
@@ -592,13 +617,20 @@ const parseDjsDefaultState = input => {
|
|
|
592
617
|
|
|
593
618
|
// Folds a leading '-' into the following number/bigint token, mirroring the old
|
|
594
619
|
// fjs/djs/tokenizer's minus-state exactly.
|
|
620
|
+
//
|
|
621
|
+
// No `case '-'` here: the underlying `js/tokenizer` always merges two adjacent
|
|
622
|
+
// `-` characters into a single `'--'` token (the decrement operator), so this
|
|
623
|
+
// state — entered only after a single, unmerged `-` — can never itself see
|
|
624
|
+
// another `'-'`-kind input. Such an input falls through to `default`, which
|
|
625
|
+
// handles it exactly like any other non-number/bigint/eof token.
|
|
595
626
|
/** @type {(input: JsToken) => readonly [List<DjsToken>, _DjsScanState]} */
|
|
596
627
|
const parseDjsMinusState = input => {
|
|
597
628
|
switch (input.kind) {
|
|
598
629
|
case 'eof': return [[{ kind: 'error', message: 'invalid token' }, { kind: 'eof' }], { kind: 'def' }]
|
|
599
|
-
case '-': return [[{ kind: 'error', message: 'invalid token' }], { kind: '-' }]
|
|
600
630
|
case 'bigint': return [[{ kind: 'bigint', value: -1n * input.value }], { kind: 'def' }]
|
|
601
|
-
|
|
631
|
+
// negation is lexical: the minus sign joins the lexeme, so the token
|
|
632
|
+
// stays the exact source text of the number.
|
|
633
|
+
case 'number': return [[{ kind: 'number', value: `-${input.value}` }], { kind: 'def' }]
|
|
602
634
|
default: return [{ first: { kind: 'error', message: 'invalid token' }, tail: mapDjsToken(input) }, { kind: 'def' }]
|
|
603
635
|
}
|
|
604
636
|
}
|
|
@@ -622,3 +654,18 @@ const scanDjsTokenWithMetadata = (input, state) => {
|
|
|
622
654
|
|
|
623
655
|
/** @type {(input: List<number>) => (path: string) => List<DjsTokenWithMetadata>} */
|
|
624
656
|
export const tokenize = input => path => flat(stateScan(scanDjsTokenWithMetadata)({ kind: 'def' })(tokenizeJs(input)(path)))
|
|
657
|
+
|
|
658
|
+
export const proof = {
|
|
659
|
+
// `tagToToken`'s `true` arm fires only for an `AstTag` of literal `true`.
|
|
660
|
+
// `bnf/data`'s `emptyTagOf` is the only source of that value, and
|
|
661
|
+
// `bnf/descent/module.f.mjs` reads it in exactly one place (its variant
|
|
662
|
+
// arm), always wrapped in `mrFail` — a failure. A failed variant only
|
|
663
|
+
// propagates as the overall `result` when nothing in it matches, so it
|
|
664
|
+
// never survives into a successful sequence/AST; a `true` tag therefore
|
|
665
|
+
// can never appear on a successful `descentParser` match for any
|
|
666
|
+
// grammar, `jsGrammar` included, so `tokenizeJs` can't reach this arm.
|
|
667
|
+
// Call it directly to cover that branch.
|
|
668
|
+
tagToTokenTrueTag: () => {
|
|
669
|
+
assertEq(tagToToken(true), 'true')
|
|
670
|
+
},
|
|
671
|
+
}
|