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
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* `stateScan` operations.
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
|
+
*
|
|
8
|
+
* @import { List, Result, Thunk } from '../../types/list/types.ts'
|
|
9
|
+
* @import { StateScan } from '../../types/function/operator/types.ts'
|
|
10
|
+
* @import { CodePoint, U16 } from './types.ts'
|
|
7
11
|
*/
|
|
8
12
|
|
|
9
13
|
import {
|
|
@@ -12,17 +16,14 @@ import {
|
|
|
12
16
|
flatMap,
|
|
13
17
|
empty,
|
|
14
18
|
} from '../../types/list/module.f.mjs'
|
|
15
|
-
/** @import { List, Result, Thunk } from '../../types/list/types.ts' */
|
|
16
19
|
|
|
17
20
|
import { concat } from '../../types/function/operator/module.f.mjs'
|
|
18
|
-
/** @import { StateScan } from '../../types/function/operator/types.ts' */
|
|
19
|
-
|
|
20
21
|
import { contains } from '../../types/range/module.f.mjs'
|
|
21
|
-
|
|
22
22
|
import { fn } from '../../types/function/module.f.mjs'
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
25
|
decoder,
|
|
26
|
+
eofFlush,
|
|
26
27
|
errorMask,
|
|
27
28
|
isBmpCodePoint,
|
|
28
29
|
isHighSurrogate,
|
|
@@ -37,8 +38,6 @@ import {
|
|
|
37
38
|
* @typedef {number | null} _Utf16State
|
|
38
39
|
*/
|
|
39
40
|
|
|
40
|
-
/** @import { CodePoint, U16 } from './types.ts' */
|
|
41
|
-
|
|
42
41
|
/**
|
|
43
42
|
* The BMP / surrogate / supplementary-plane predicates used below live in
|
|
44
43
|
* `code_point`, the shared Unicode contract; see that module for their ranges.
|
|
@@ -85,7 +84,6 @@ const codePointToUtf16 = codePoint => {
|
|
|
85
84
|
return [codePoint & 0xffff]
|
|
86
85
|
}
|
|
87
86
|
|
|
88
|
-
|
|
89
87
|
/**
|
|
90
88
|
* Converts a UTF-16 sequence to its corresponding Unicode code points.
|
|
91
89
|
*
|
|
@@ -119,6 +117,8 @@ const codePointToUtf16 = codePoint => {
|
|
|
119
117
|
export const fromCodePointList
|
|
120
118
|
= flatMap(codePointToUtf16)
|
|
121
119
|
|
|
120
|
+
const isInU16Range = contains(0x0000, 0xFFFF)
|
|
121
|
+
|
|
122
122
|
/**
|
|
123
123
|
* Validates whether a given 16-bit unsigned integer (U16) falls within the valid range for UTF-16 code units.
|
|
124
124
|
*
|
|
@@ -134,10 +134,14 @@ export const fromCodePointList
|
|
|
134
134
|
* const edgeCaseHigh = u16(0xFFFF) // true: Maximum valid value for UTF-16
|
|
135
135
|
* ```
|
|
136
136
|
*
|
|
137
|
+
* `U16` is just `number`, so this also rejects non-integers — `isBmpCodePoint`,
|
|
138
|
+
* `isHighSurrogate`, and `isLowSurrogate` only partition the *integers* in
|
|
139
|
+
* `0x0000`–`0xFFFF` with no gap; a fractional value would fall between two of
|
|
140
|
+
* those ranges and be misclassified downstream if it were let through here.
|
|
141
|
+
*
|
|
137
142
|
* @type {(i: U16) => boolean}
|
|
138
143
|
*/
|
|
139
|
-
const u16 =
|
|
140
|
-
|
|
144
|
+
const u16 = i => Number.isInteger(i) && isInU16Range(i)
|
|
141
145
|
|
|
142
146
|
/**
|
|
143
147
|
* A stateful operation that converts a UTF-16 word (U16) to a list of Unicode code points (CodePoint),
|
|
@@ -156,7 +160,9 @@ const u16 = contains(0x0000, 0xFFFF)
|
|
|
156
160
|
* This can be either `null` (no state) or the previous high surrogate value.
|
|
157
161
|
* @param word - The current UTF-16 word (U16) to process.
|
|
158
162
|
* @returns A tuple where the first element is a list of decoded Unicode code points (`CodePoint`), and
|
|
159
|
-
* the second element is the updated state.
|
|
163
|
+
* the second element is the updated state. A word outside the `U16`
|
|
164
|
+
* domain is reported as one bare `errorMask` unit, the same shape the
|
|
165
|
+
* UTF-8 decoder's out-of-range guard emits.
|
|
160
166
|
*
|
|
161
167
|
* @example
|
|
162
168
|
*
|
|
@@ -178,7 +184,10 @@ const u16 = contains(0x0000, 0xFFFF)
|
|
|
178
184
|
*/
|
|
179
185
|
const utf16ByteToCodePointOp = (word, state) => {
|
|
180
186
|
if (!u16(word)) {
|
|
181
|
-
|
|
187
|
+
// Out of domain, so there is no payload to tag: emit the bare mask,
|
|
188
|
+
// matching `utf8ByteToCodePointOp`'s guard. Every other error path
|
|
189
|
+
// below tags a real code unit with `| errorMask`.
|
|
190
|
+
return [[errorMask], state]
|
|
182
191
|
}
|
|
183
192
|
if (state === null) {
|
|
184
193
|
if (isBmpCodePoint(word)) { return [[word], null] }
|
|
@@ -190,39 +199,33 @@ const utf16ByteToCodePointOp = (word, state) => {
|
|
|
190
199
|
const low = word - 0xdc00
|
|
191
200
|
return [[(high << 10) + low + 0x10000], null]
|
|
192
201
|
}
|
|
202
|
+
// `isLowSurrogate`, `isBmpCodePoint`, and `isHighSurrogate` partition the
|
|
203
|
+
// full `u16` range with no gap, and `isLowSurrogate` was already ruled out
|
|
204
|
+
// above, so a non-BMP `word` here is always a high surrogate.
|
|
193
205
|
if (isBmpCodePoint(word)) { return [[state | errorMask, word], null] }
|
|
194
|
-
|
|
195
|
-
return [[state | errorMask, word | errorMask], null]
|
|
206
|
+
return [[state | errorMask], word]
|
|
196
207
|
}
|
|
197
208
|
|
|
209
|
+
/**
|
|
210
|
+
* Converts a pending UTF-16 decoding state — an unpaired high surrogate
|
|
211
|
+
* (0xD800–0xDBFF) left from an earlier input — to an error code.
|
|
212
|
+
*
|
|
213
|
+
* @type {(state: number) => CodePoint}
|
|
214
|
+
*/
|
|
215
|
+
const utf16StateToError = state => state | errorMask
|
|
198
216
|
|
|
199
217
|
/**
|
|
200
218
|
* Handles the EOF (end-of-file) condition during UTF-16 decoding.
|
|
201
219
|
*
|
|
202
|
-
* If there is no pending state (`state === null`), it
|
|
203
|
-
*
|
|
204
|
-
* it is treated as an unpaired surrogate
|
|
205
|
-
* the invalid sequence.
|
|
206
|
-
*
|
|
207
|
-
* @param {_Utf16State} state - The current UTF-16 decoding state. This can be:
|
|
208
|
-
* - `null`: No pending surrogate to process.
|
|
209
|
-
* - A high surrogate (0xD800–0xDBFF) left from an earlier input, waiting for a low surrogate.
|
|
210
|
-
* @returns {readonly[List<CodePoint>, _Utf16State]} A tuple:
|
|
211
|
-
* - The first element is a list of code points. If there’s a pending state, it is returned
|
|
212
|
-
* with the `errorMask` applied.
|
|
213
|
-
* - The second element is the next state, which will always be `null` because EOF means no
|
|
214
|
-
* further processing.
|
|
215
|
-
*
|
|
216
|
-
* @example
|
|
220
|
+
* If there is no pending state (`state === null`), it returns an empty list of
|
|
221
|
+
* code points, indicating no further input to process. If there is a pending
|
|
222
|
+
* state, it is treated as an unpaired surrogate and the `errorMask` is applied
|
|
223
|
+
* to flag the invalid sequence. The flush itself is `eofFlush` from
|
|
224
|
+
* `code_point`, shared with UTF-8.
|
|
217
225
|
*
|
|
218
|
-
*
|
|
219
|
-
* const eofState = utf16EofToCodePointOp(0xD800) // Unpaired high surrogate
|
|
220
|
-
* const validState = utf16EofToCodePointOp(null) // No pending state
|
|
221
|
-
* ```
|
|
226
|
+
* @type {(state: _Utf16State) => readonly[List<CodePoint>, _Utf16State]}
|
|
222
227
|
*/
|
|
223
|
-
const utf16EofToCodePointOp =
|
|
224
|
-
[state === null ? empty : [state | errorMask], null]
|
|
225
|
-
|
|
228
|
+
const utf16EofToCodePointOp = eofFlush(utf16StateToError)
|
|
226
229
|
|
|
227
230
|
/**
|
|
228
231
|
* Converts a list of UTF-16 code units to a list of Unicode code points (CodePoint).
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* @import { Unknown } from '../../media/json/types.ts'
|
|
3
|
+
*/
|
|
2
4
|
|
|
3
5
|
import {
|
|
4
6
|
toCodePointList,
|
|
@@ -22,7 +24,7 @@ export const proof = {
|
|
|
22
24
|
toCodePointList: [
|
|
23
25
|
() => {
|
|
24
26
|
const result = stringify(toArray(toCodePointList([-1, 65536])))
|
|
25
|
-
assertEq(result, '[
|
|
27
|
+
assertEq(result, '[2147483648,2147483648]')
|
|
26
28
|
},
|
|
27
29
|
() => {
|
|
28
30
|
const result = stringify(toArray(toCodePointList([0, 36, 8364, 55295, 57344, 65535])))
|
|
@@ -51,6 +53,21 @@ export const proof = {
|
|
|
51
53
|
() => {
|
|
52
54
|
const result = stringify(toArray(toCodePointList([56320, 0])))
|
|
53
55
|
assertEq(result, '[-2147427328,0]')
|
|
56
|
+
},
|
|
57
|
+
// `U16` is just `number`, so a non-integer in [0x0000, 0xFFFF] is a
|
|
58
|
+
// possible (if malformed) input. It must be rejected as invalid, not
|
|
59
|
+
// misclassified by the surrogate/BMP range checks, which only
|
|
60
|
+
// partition the integers in that range.
|
|
61
|
+
() => {
|
|
62
|
+
const result = stringify(toArray(toCodePointList([56319.5])))
|
|
63
|
+
assertEq(result, '[2147483648]')
|
|
64
|
+
},
|
|
65
|
+
// A non-integer word doesn't disturb a pending high surrogate: it is
|
|
66
|
+
// reported invalid on its own, and the surrogate is still flagged
|
|
67
|
+
// unpaired at EOF.
|
|
68
|
+
() => {
|
|
69
|
+
const result = stringify(toArray(toCodePointList([55296, 56319.5])))
|
|
70
|
+
assertEq(result, '[2147483648,-2147428352]')
|
|
54
71
|
}
|
|
55
72
|
],
|
|
56
73
|
fromCodePointList: [
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* UTF-8 byte-level encoding and decoding utilities for FunctionalScript streams.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { List, Thunk } from '../../types/list/types.ts'
|
|
7
|
+
* @import { StateScan } from '../../types/function/operator/types.ts'
|
|
8
|
+
* @import { Vec } from '../../types/bit_vec/types.ts'
|
|
9
|
+
* @import { ByteOrEof, I32, U8, Utf8NonEmptyState, Utf8State, } from './types.ts'
|
|
5
10
|
*/
|
|
6
11
|
import type { List, Thunk } from '../../types/list/types.ts';
|
|
7
12
|
import type { StateScan } from '../../types/function/operator/types.ts';
|
|
@@ -42,12 +47,11 @@ export declare const utf8StateToError: (state: Utf8NonEmptyState) => I32;
|
|
|
42
47
|
*/
|
|
43
48
|
export declare const utf8ByteToCodePointOp: StateScan<number, Utf8State, readonly I32[]>;
|
|
44
49
|
/**
|
|
45
|
-
* Handles the end-of-file (EOF) case for UTF-8 decoding
|
|
50
|
+
* Handles the end-of-file (EOF) case for UTF-8 decoding: a leftover incomplete
|
|
51
|
+
* sequence is flushed as a single error code and the state resets to `null`.
|
|
52
|
+
* The flush itself is `eofFlush` from `code_point`, shared with UTF-16.
|
|
46
53
|
*
|
|
47
|
-
* @
|
|
48
|
-
* @returns {readonly [List<I32>, Utf8State]} A tuple containing:
|
|
49
|
-
* - A list of decoded Unicode code points or error codes.
|
|
50
|
-
* - The reset UTF-8 state (`null`).
|
|
54
|
+
* @type {(state: Utf8State) => readonly [List<I32>, Utf8State]}
|
|
51
55
|
*/
|
|
52
56
|
export declare const utf8EofToCodePointOp: (state: Utf8State) => readonly [List<I32>, Utf8State];
|
|
53
57
|
/**
|
|
@@ -2,20 +2,24 @@
|
|
|
2
2
|
* UTF-8 byte-level encoding and decoding utilities for FunctionalScript streams.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { List, Thunk } from '../../types/list/types.ts'
|
|
7
|
+
* @import { StateScan } from '../../types/function/operator/types.ts'
|
|
8
|
+
* @import { Vec } from '../../types/bit_vec/types.ts'
|
|
9
|
+
* @import { ByteOrEof, I32, U8, Utf8NonEmptyState, Utf8State, } from './types.ts'
|
|
5
10
|
*/
|
|
6
11
|
|
|
7
12
|
import { flatMap, toArray } from '../../types/list/module.f.mjs'
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
import {
|
|
14
|
+
bmpMax,
|
|
15
|
+
decoder,
|
|
16
|
+
eofFlush,
|
|
17
|
+
errorMask,
|
|
18
|
+
isSupplementaryPlane,
|
|
19
|
+
isValidCodePoint,
|
|
20
|
+
} from '../code_point/module.f.mjs'
|
|
11
21
|
import { msb, u8List, length } from '../../types/bit_vec/module.f.mjs'
|
|
12
|
-
/** @import { Vec } from '../../types/bit_vec/types.ts' */
|
|
13
22
|
import { codePointListToString } from '../utf16/module.f.mjs'
|
|
14
|
-
/**
|
|
15
|
-
* @import {
|
|
16
|
-
* ByteOrEof, I32, U8, Utf8NonEmptyState, Utf8State,
|
|
17
|
-
* } from './types.ts'
|
|
18
|
-
*/
|
|
19
23
|
|
|
20
24
|
/**
|
|
21
25
|
* UTF-8 byte-format constants. Each byte kind is defined by a tag — the fixed
|
|
@@ -92,14 +96,14 @@ const codePointToUtf8 = input => {
|
|
|
92
96
|
if (input >= 0x0080 && input <= 0x07ff) {
|
|
93
97
|
return [input >> 6 | lead2Tag, contByte(input)]
|
|
94
98
|
}
|
|
95
|
-
if (input >= 0x0800 && input <=
|
|
99
|
+
if (input >= 0x0800 && input <= bmpMax) {
|
|
96
100
|
return [
|
|
97
101
|
input >> 12 | lead3Tag,
|
|
98
102
|
contByte(input >> 6),
|
|
99
103
|
contByte(input),
|
|
100
104
|
]
|
|
101
105
|
}
|
|
102
|
-
if (input
|
|
106
|
+
if (isSupplementaryPlane(input)) {
|
|
103
107
|
return [
|
|
104
108
|
input >> 18 | lead4Tag,
|
|
105
109
|
contByte(input >> 12),
|
|
@@ -240,17 +244,13 @@ export const utf8ByteToCodePointOp = (byte, state) => {
|
|
|
240
244
|
}
|
|
241
245
|
|
|
242
246
|
/**
|
|
243
|
-
* Handles the end-of-file (EOF) case for UTF-8 decoding
|
|
247
|
+
* Handles the end-of-file (EOF) case for UTF-8 decoding: a leftover incomplete
|
|
248
|
+
* sequence is flushed as a single error code and the state resets to `null`.
|
|
249
|
+
* The flush itself is `eofFlush` from `code_point`, shared with UTF-16.
|
|
244
250
|
*
|
|
245
|
-
* @
|
|
246
|
-
* @returns {readonly [List<I32>, Utf8State]} A tuple containing:
|
|
247
|
-
* - A list of decoded Unicode code points or error codes.
|
|
248
|
-
* - The reset UTF-8 state (`null`).
|
|
251
|
+
* @type {(state: Utf8State) => readonly [List<I32>, Utf8State]}
|
|
249
252
|
*/
|
|
250
|
-
export const utf8EofToCodePointOp =
|
|
251
|
-
state === null ? null : [utf8StateToError(state)],
|
|
252
|
-
null,
|
|
253
|
-
]
|
|
253
|
+
export const utf8EofToCodePointOp = eofFlush(utf8StateToError)
|
|
254
254
|
|
|
255
255
|
/**
|
|
256
256
|
* Converts a list of UTF-8 bytes into a list of Unicode code points.
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* JavaScript immutable arrays.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { Tuple } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
9
|
import { fromUndefined, map } from '../nullable/module.f.mjs'
|
|
8
10
|
|
|
9
|
-
/** @import { Tuple } from './types.ts' */
|
|
10
|
-
|
|
11
11
|
/**
|
|
12
12
|
* @type {(value: unknown) => value is readonly unknown[]}
|
|
13
13
|
*/
|
|
@@ -53,10 +53,22 @@ export const first = at(0)
|
|
|
53
53
|
*/
|
|
54
54
|
export const last = a => at(a.length - 1)(a)
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Applies `f` to a non-empty array, answering `null` for an empty one — the
|
|
58
|
+
* shared shape of the whole-array accessors below.
|
|
59
|
+
*
|
|
60
|
+
* The guard is `a.length === 0` and not `first(a) === null`: `first` goes
|
|
61
|
+
* through `fromUndefined`, so it reads a *stored* `null` or `undefined`
|
|
62
|
+
* element as absence. `[null]` is not empty, but `first` says it is.
|
|
63
|
+
*
|
|
64
|
+
* @type {<T, R>(f: (a: readonly T[]) => R) => (a: readonly T[]) => R | null}
|
|
65
|
+
*/
|
|
66
|
+
const onNonEmpty = f => a => a.length === 0 ? null : f(a)
|
|
67
|
+
|
|
56
68
|
/**
|
|
57
69
|
* @type {<T>(a: readonly T[]) => readonly T[] | null}
|
|
58
70
|
*/
|
|
59
|
-
export const tail =
|
|
71
|
+
export const tail = onNonEmpty(uncheckTail)
|
|
60
72
|
|
|
61
73
|
/**
|
|
62
74
|
* @type {<T>(a: readonly T[]) => readonly [T, readonly T[]] | null}
|
|
@@ -69,7 +81,7 @@ export const splitFirst = a => {
|
|
|
69
81
|
}
|
|
70
82
|
|
|
71
83
|
/** @type {<T>(a: readonly T[]) => readonly T[] | null} */
|
|
72
|
-
export const head =
|
|
84
|
+
export const head = onNonEmpty(uncheckHead)
|
|
73
85
|
|
|
74
86
|
/** @type {<T>(a: readonly T[]) => readonly [readonly T[], T] | null} */
|
|
75
87
|
export const splitLast = a => {
|
|
@@ -2,12 +2,32 @@
|
|
|
2
2
|
* Big-float helpers built from bigint mantissa and exponent parts.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { BigFloat } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
import type { BigFloat } from './types.ts';
|
|
7
9
|
export type _BigFloatWithRemainder = readonly [BigFloat, bigint];
|
|
8
10
|
/** @type {(_: BigFloat) => (mul: bigint) => BigFloat} */
|
|
9
11
|
export declare const multiply: (_: BigFloat) => (mul: bigint) => BigFloat;
|
|
10
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Converts a decimal big-float `m * 10^e` into the nearest binary big-float,
|
|
14
|
+
* rounding ties to even.
|
|
15
|
+
*
|
|
16
|
+
* A zero input returns `[0n, 0]`; every other input returns a mantissa of
|
|
17
|
+
* exactly 53 significant bits, `2^52 <= abs(m) < 2^53`. The upper bound holds
|
|
18
|
+
* even when rounding carries out of the top bit.
|
|
19
|
+
*
|
|
20
|
+
* The **exponent is unbounded**: this is the correctly-rounded 53-bit value,
|
|
21
|
+
* not a `number`. Nothing here knows binary64's exponent range, so a result
|
|
22
|
+
* is neither turned into an infinity when it is too large for a `double` nor
|
|
23
|
+
* cut down to the fewer-than-53 bits a subnormal actually carries. A consumer
|
|
24
|
+
* that rounds one of these results onto the subnormal grid therefore rounds
|
|
25
|
+
* twice and can land an ulp away from the correctly-rounded `double`: reaching
|
|
26
|
+
* the subnormal range needs a single rounding to a precision chosen from the
|
|
27
|
+
* target exponent, which this function does not offer yet.
|
|
28
|
+
*
|
|
29
|
+
* @type {(dec: BigFloat) => BigFloat}
|
|
30
|
+
*/
|
|
11
31
|
export declare const decToBin: (dec: BigFloat) => BigFloat;
|
|
12
32
|
export declare const proof: {
|
|
13
33
|
normalizeMantissaZero: () => void;
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* Big-float helpers built from bigint mantissa and exponent parts.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
|
+
*
|
|
6
|
+
* @import { BigFloat } from './types.ts'
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
9
|
import { abs, sign } from '../bigint/module.f.mjs'
|
|
8
|
-
/** @import { BigFloat } from './types.ts' */
|
|
9
10
|
|
|
10
11
|
/** @typedef {readonly [BigFloat, bigint]} _BigFloatWithRemainder */
|
|
11
12
|
|
|
@@ -61,6 +62,16 @@ const divide = ([m, e]) => div => [[m / div, e], m % div]
|
|
|
61
62
|
*/
|
|
62
63
|
const withSign = (m, e) => f => multiply(f([abs(m), e]))(BigInt(sign(m)))
|
|
63
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Re-normalizes a magnitude that rounding carried out of 53 bits: rounding
|
|
67
|
+
* `2^53 - 1` up yields exactly `2^53`, one bit wider than `round53` promises.
|
|
68
|
+
* The bit shifted out is always 0 there, so the value is unchanged and no
|
|
69
|
+
* second rounding decision is needed.
|
|
70
|
+
*
|
|
71
|
+
* @type {(magnitude: BigFloat) => BigFloat}
|
|
72
|
+
*/
|
|
73
|
+
const renormalize53 = ([m, e]) => m === twoPow53 ? [m >> 1n, e + 1] : [m, e]
|
|
74
|
+
|
|
64
75
|
/** @type {(_: _BigFloatWithRemainder) => BigFloat} */
|
|
65
76
|
const round53 = ([[m, e], r]) =>
|
|
66
77
|
withSign(m, e)(([mAbs]) => {
|
|
@@ -68,14 +79,29 @@ const round53 = ([[m, e], r]) =>
|
|
|
68
79
|
const o54 = m54 & 1n
|
|
69
80
|
const m53 = m54 >> 1n
|
|
70
81
|
const e53 = e54 + 1
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return [m53 + odd, e53]
|
|
74
|
-
}
|
|
75
|
-
return [m53 + o54, e53]
|
|
82
|
+
const tie = o54 === 1n && r === 0n && mAbs === m54 >> BigInt(e - e54)
|
|
83
|
+
return renormalize53([m53 + (tie ? m53 & 1n : o54), e53])
|
|
76
84
|
})
|
|
77
85
|
|
|
78
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* Converts a decimal big-float `m * 10^e` into the nearest binary big-float,
|
|
88
|
+
* rounding ties to even.
|
|
89
|
+
*
|
|
90
|
+
* A zero input returns `[0n, 0]`; every other input returns a mantissa of
|
|
91
|
+
* exactly 53 significant bits, `2^52 <= abs(m) < 2^53`. The upper bound holds
|
|
92
|
+
* even when rounding carries out of the top bit.
|
|
93
|
+
*
|
|
94
|
+
* The **exponent is unbounded**: this is the correctly-rounded 53-bit value,
|
|
95
|
+
* not a `number`. Nothing here knows binary64's exponent range, so a result
|
|
96
|
+
* is neither turned into an infinity when it is too large for a `double` nor
|
|
97
|
+
* cut down to the fewer-than-53 bits a subnormal actually carries. A consumer
|
|
98
|
+
* that rounds one of these results onto the subnormal grid therefore rounds
|
|
99
|
+
* twice and can land an ulp away from the correctly-rounded `double`: reaching
|
|
100
|
+
* the subnormal range needs a single rounding to a precision chosen from the
|
|
101
|
+
* target exponent, which this function does not offer yet.
|
|
102
|
+
*
|
|
103
|
+
* @type {(dec: BigFloat) => BigFloat}
|
|
104
|
+
*/
|
|
79
105
|
export const decToBin = dec => {
|
|
80
106
|
if (dec[0] === 0n) {
|
|
81
107
|
return [0n, 0]
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import { decToBin } from './module.f.mjs'
|
|
2
2
|
import { assertEq } from '../../asserts/module.f.mjs'
|
|
3
|
+
import { bitLength } from '../bigint/module.f.mjs'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Checks `decToBin`'s postcondition on a non-zero result: the mantissa holds
|
|
7
|
+
* exactly 53 significant bits, and `m * 2^e` is the value it should be.
|
|
8
|
+
* `bitLength` measures the magnitude, so a negative mantissa is checked as
|
|
9
|
+
* strictly as a positive one. The value is recovered with a shift, so every
|
|
10
|
+
* `dec` passed here must round to a whole number (a non-negative `e`).
|
|
11
|
+
*
|
|
12
|
+
* @type {(dec: readonly [bigint, number]) => (value: bigint) => void}
|
|
13
|
+
*/
|
|
14
|
+
const assertRounded = dec => value => {
|
|
15
|
+
const [m, e] = decToBin(dec)
|
|
16
|
+
assertEq(bitLength(m), 53n, m.toString(2))
|
|
17
|
+
assertEq(m << BigInt(e), value, m.toString(2))
|
|
18
|
+
}
|
|
3
19
|
|
|
4
20
|
export const proof = {
|
|
5
21
|
decToBin: [
|
|
@@ -214,5 +230,35 @@ export const proof = {
|
|
|
214
230
|
assertEq(result[0], -0b1_1001_1001_1001_1001_1001_1001_1001_1001_1001_1001_1001_1001_1100n, result[0].toString(2))
|
|
215
231
|
assertEq(result[1], 2)
|
|
216
232
|
}
|
|
233
|
+
],
|
|
234
|
+
// Rounding up a mantissa of all ones carries into a 54th bit; the result
|
|
235
|
+
// has to come back as 53 bits without changing the value.
|
|
236
|
+
roundingCarry: [
|
|
237
|
+
() => {
|
|
238
|
+
// 54 ones: an exact tie (nothing below the dropped bit, remainder
|
|
239
|
+
// 0) whose round-to-even goes up because 2^53 - 1 is odd.
|
|
240
|
+
assertRounded([0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
|
|
241
|
+
0b100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // 2^54
|
|
242
|
+
},
|
|
243
|
+
() => {
|
|
244
|
+
assertRounded([-0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
|
|
245
|
+
-0b100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // -2^54
|
|
246
|
+
},
|
|
247
|
+
() => {
|
|
248
|
+
// 55 ones: not a tie — the dropped bits are 11 — so the carry comes
|
|
249
|
+
// from the plain round-up path instead.
|
|
250
|
+
assertRounded([0b111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
|
|
251
|
+
0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // 2^55
|
|
252
|
+
},
|
|
253
|
+
() => {
|
|
254
|
+
assertRounded([-0b111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
|
|
255
|
+
-0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // -2^55
|
|
256
|
+
},
|
|
257
|
+
() => {
|
|
258
|
+
// A neighbour that doesn't carry: also a tie, but 2^53 - 2 is even,
|
|
259
|
+
// so round-to-even goes down and the mantissa stays 53 bits wide.
|
|
260
|
+
assertRounded([0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1101n, 0])(
|
|
261
|
+
0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1100n)
|
|
262
|
+
},
|
|
217
263
|
]
|
|
218
264
|
}
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
* const bitmask = mask(5n) // 31n
|
|
16
16
|
* const c = combination([3n, 2n, 1n]) // 60n
|
|
17
17
|
* ```
|
|
18
|
+
*
|
|
19
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
20
|
+
* @import { List } from '../list/types.ts'
|
|
21
|
+
* @import { Reduce, Unary } from './types.ts'
|
|
18
22
|
*/
|
|
19
23
|
import type { Sign } from '../function/compare/types.ts';
|
|
20
24
|
import type { List } from '../list/types.ts';
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
* const bitmask = mask(5n) // 31n
|
|
16
16
|
* const c = combination([3n, 2n, 1n]) // 60n
|
|
17
17
|
* ```
|
|
18
|
+
*
|
|
19
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
20
|
+
* @import { List } from '../list/types.ts'
|
|
21
|
+
* @import { Reduce, Unary } from './types.ts'
|
|
18
22
|
*/
|
|
19
23
|
|
|
20
24
|
import { cmp } from '../function/compare/module.f.mjs'
|
|
21
|
-
/** @import { Sign } from '../function/compare/types.ts' */
|
|
22
|
-
/** @import { List } from '../list/types.ts' */
|
|
23
|
-
/** @import { Reduce, Unary } from './types.ts' */
|
|
24
25
|
import { fold } from '../../common/monoid/module.f.mjs'
|
|
25
26
|
|
|
26
27
|
/**
|
|
@@ -20,20 +20,21 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*
|
|
22
22
|
* @module
|
|
23
|
+
*
|
|
24
|
+
* @import { Reduce as BigintReduce } from '../bigint/types.ts'
|
|
25
|
+
* @import { Fold } from '../function/operator/types.ts'
|
|
26
|
+
* @import { List, Thunk } from '../list/types.ts'
|
|
27
|
+
* @import { Absorbing } from '../../common/monoid/types.ts'
|
|
28
|
+
* @import { Sign } from '../function/compare/types.ts'
|
|
29
|
+
* @import { Nullable } from '../nullable/types.ts'
|
|
30
|
+
* @import { BitOrder, PopFront, Reduce, Unpacked, Vec, _NormOp, _UnpackConcat, } from './types.ts'
|
|
23
31
|
*/
|
|
24
|
-
import { maxLength } from '../bigint/module.f.mjs';
|
|
25
32
|
import type { Fold } from '../function/operator/types.ts';
|
|
26
|
-
import type {
|
|
33
|
+
import type { List, Thunk } from '../list/types.ts';
|
|
27
34
|
import type { Sign } from '../function/compare/types.ts';
|
|
28
35
|
import type { Nullable } from '../nullable/types.ts';
|
|
29
36
|
import type { BitOrder, Unpacked, Vec, _NormOp } from './types.ts';
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @import {
|
|
33
|
-
* BitOrder, PopFront, Reduce, Unpacked, Vec,
|
|
34
|
-
* _NormOp, _UnpackConcat,
|
|
35
|
-
* } from './types.ts'
|
|
36
|
-
*/
|
|
37
|
+
import { maxLength } from '../bigint/module.f.mjs';
|
|
37
38
|
/**
|
|
38
39
|
* Maximum length of a bit vector in bits (1_048_576 = 0x10_0000).
|
|
39
40
|
* This limit is enforced by Bun's `bigint` size constraint, the minimal limit
|
|
@@ -119,18 +120,11 @@ export declare const pack: ({ length, uint }: Unpacked) => Vec;
|
|
|
119
120
|
/** @type {({ uint }: Unpacked) => bigint} */
|
|
120
121
|
export declare const unpackedUint: ({ uint }: Unpacked) => bigint;
|
|
121
122
|
export type _Base = {
|
|
122
|
-
readonly front: (len: bigint) => (v: Vec) => bigint;
|
|
123
|
-
readonly removeFront: (len: bigint) => (v: Vec) => Vec;
|
|
124
123
|
readonly norm: _NormOp;
|
|
125
124
|
readonly uintCmp: (a: bigint) => (b: bigint) => Sign;
|
|
126
125
|
readonly unpackSplit: (len: bigint) => (u: Unpacked) => readonly [bigint, bigint];
|
|
127
126
|
readonly unpackConcatUint: (a: Unpacked) => (b: Unpacked) => bigint;
|
|
128
127
|
};
|
|
129
|
-
export type _ListToVecState = {
|
|
130
|
-
readonly len: bigint;
|
|
131
|
-
readonly stack: readonly Unpacked[];
|
|
132
|
-
};
|
|
133
|
-
export type _ListToVecOp = Accumulator<Unpacked, _ListToVecState, Vec>;
|
|
134
128
|
/**
|
|
135
129
|
* Implements operations for handling vectors in a least-significant-bit (LSb) first order.
|
|
136
130
|
*
|