functionalscript 0.44.0 → 0.45.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/fjs/asn.1/proof.f.d.mts +5 -0
- package/fjs/asn.1/proof.f.mjs +15 -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/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/proof.f.mjs +0 -1
- package/fjs/bnf/descent/module.f.d.mts +17 -2
- package/fjs/bnf/descent/module.f.mjs +118 -41
- package/fjs/bnf/descent/proof.f.d.mts +1 -0
- package/fjs/bnf/descent/proof.f.mjs +77 -1
- package/fjs/bnf/descent/types.d.ts +12 -4
- package/fjs/bnf/ll1/module.f.d.mts +28 -2
- package/fjs/bnf/ll1/module.f.mjs +180 -38
- package/fjs/bnf/ll1/proof.f.d.mts +2 -0
- package/fjs/bnf/ll1/proof.f.mjs +62 -1
- package/fjs/bnf/ll1/types.d.ts +14 -8
- 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/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/proof.f.d.mts +3 -1
- package/fjs/cas/cli/proof.f.mjs +3 -1
- package/fjs/cas/evo/module.f.d.mts +7 -13
- package/fjs/cas/evo/module.f.mjs +103 -96
- package/fjs/cas/evo/proof.f.mjs +6 -3
- package/fjs/cas/module.f.mjs +96 -109
- 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 +2 -2
- package/fjs/ci/config/module.f.mjs +2 -2
- package/fjs/ci/nix/proof.f.d.mts +2 -0
- package/fjs/ci/nix/proof.f.mjs +2 -2
- package/fjs/ci/proof.f.d.mts +4 -2
- package/fjs/ci/proof.f.mjs +4 -3
- package/fjs/cli/proof.f.d.mts +4 -2
- package/fjs/cli/proof.f.mjs +4 -2
- 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/secp/proof.f.d.mts +3 -1
- package/fjs/crypto/secp/proof.f.mjs +3 -1
- package/fjs/crypto/sha2/proof.f.d.mts +3 -1
- package/fjs/crypto/sha2/proof.f.mjs +3 -1
- 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 +5 -2
- package/fjs/dev/module.f.mjs +5 -4
- package/fjs/dev/package_json/module.f.d.mts +7 -0
- package/fjs/dev/package_json/module.f.mjs +10 -7
- package/fjs/dev/update/module.f.d.mts +3 -0
- package/fjs/dev/update/module.f.mjs +3 -2
- package/fjs/dev/update/proof.f.d.mts +3 -0
- package/fjs/dev/update/proof.f.mjs +1 -2
- package/fjs/djs/parser/module.f.d.mts +3 -0
- package/fjs/djs/parser/module.f.mjs +18 -0
- package/fjs/djs/parser/proof.f.d.mts +3 -0
- package/fjs/djs/parser/proof.f.mjs +13 -1
- package/fjs/djs/proof.f.d.mts +3 -0
- package/fjs/djs/proof.f.mjs +4 -1
- package/fjs/djs/serializer/module.f.mjs +5 -4
- package/fjs/djs/tokenizer/module.f.mjs +21 -13
- package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
- package/fjs/djs/tokenizer/proof.f.mjs +14 -2
- package/fjs/djs/transpiler/module.f.d.mts +1 -12
- package/fjs/djs/transpiler/module.f.mjs +1 -20
- package/fjs/djs/transpiler/types.d.ts +25 -0
- package/fjs/effects/eff/module.f.d.mts +10 -0
- package/fjs/effects/eff/module.f.mjs +4 -2
- package/fjs/effects/eff/proof.f.d.mts +3 -0
- package/fjs/effects/eff/proof.f.mjs +4 -1
- package/fjs/effects/list/module.f.d.mts +10 -2
- package/fjs/effects/list/module.f.mjs +4 -2
- package/fjs/effects/memory/module.f.d.mts +4 -2
- package/fjs/effects/memory/module.f.mjs +4 -3
- package/fjs/effects/memory/proof.f.d.mts +4 -0
- package/fjs/effects/memory/proof.f.mjs +5 -2
- package/fjs/effects/mock/module.f.d.mts +10 -2
- package/fjs/effects/mock/module.f.mjs +4 -2
- package/fjs/effects/module.d.mts +8 -0
- package/fjs/effects/module.f.d.mts +6 -4
- package/fjs/effects/module.f.mjs +6 -5
- package/fjs/effects/module.mjs +9 -1
- package/fjs/effects/node/memory/module.d.mts +3 -0
- package/fjs/effects/node/memory/module.mjs +3 -2
- package/fjs/effects/node/memory/proof.d.mts +2 -0
- package/fjs/effects/node/memory/proof.mjs +2 -1
- package/fjs/effects/node/module.d.mts +5 -0
- package/fjs/effects/node/module.f.d.mts +17 -12
- package/fjs/effects/node/module.f.mjs +6 -12
- package/fjs/effects/node/module.mjs +5 -17
- package/fjs/effects/node/virtual/module.f.d.mts +6 -3
- package/fjs/effects/node/virtual/module.f.mjs +6 -5
- package/fjs/effects/node/virtual/proof.f.d.mts +4 -1
- package/fjs/effects/node/virtual/proof.f.mjs +13 -1
- package/fjs/effects/proof.f.d.mts +3 -0
- package/fjs/effects/proof.f.mjs +4 -1
- 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 +6 -1
- package/fjs/emergent_testing/module.f.mjs +40 -66
- package/fjs/emergent_testing/proof.f.mjs +5 -5
- 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/proof.f.d.mts +3 -0
- package/fjs/fsm/proof.f.mjs +4 -1
- package/fjs/js/tokenizer/module.f.d.mts +7 -0
- package/fjs/js/tokenizer/module.f.mjs +19 -55
- package/fjs/mcp/module.f.d.mts +36 -1
- package/fjs/mcp/module.f.mjs +9 -7
- package/fjs/mcp/proof.f.d.mts +11 -1
- package/fjs/mcp/proof.f.mjs +11 -18
- package/fjs/media/html/module.f.d.mts +12 -0
- package/fjs/media/html/module.f.mjs +6 -4
- package/fjs/media/html/proof.f.d.mts +3 -0
- package/fjs/media/html/proof.f.mjs +4 -1
- package/fjs/media/json/parser/module.f.d.mts +1 -1
- package/fjs/media/json/parser/module.f.mjs +25 -8
- package/fjs/media/json/parser/types.d.ts +5 -0
- package/fjs/media/json/rtti/proof.f.d.mts +3 -0
- package/fjs/media/json/rtti/proof.f.mjs +3 -3
- package/fjs/media/json/schema/module.f.d.mts +61 -27
- package/fjs/media/json/schema/module.f.mjs +228 -63
- package/fjs/media/json/schema/proof.f.d.mts +41 -0
- package/fjs/media/json/schema/proof.f.mjs +219 -7
- package/fjs/media/json/serializer/module.f.d.mts +13 -0
- package/fjs/media/json/serializer/module.f.mjs +7 -7
- package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
- package/fjs/media/json/tokenizer/module.f.mjs +24 -5
- 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/revision/module.f.d.mts +5 -0
- package/fjs/media/revision/module.f.mjs +8 -11
- package/fjs/media/revision/proof.f.d.mts +4 -0
- package/fjs/media/revision/proof.f.mjs +5 -2
- package/fjs/media/type/module.f.d.mts +28 -11
- package/fjs/media/type/module.f.mjs +69 -85
- package/fjs/media/type/proof.f.d.mts +16 -0
- package/fjs/media/type/proof.f.mjs +44 -4
- package/fjs/module.d.mts +5 -0
- package/fjs/module.f.d.mts +8 -0
- package/fjs/module.f.mjs +4 -2
- package/fjs/module.mjs +6 -0
- package/fjs/path/module.f.d.mts +8 -0
- package/fjs/path/module.f.mjs +4 -2
- package/fjs/proof.f.d.mts +4 -0
- package/fjs/proof.f.mjs +5 -2
- package/fjs/protocol/json_rpc/module.f.d.mts +1 -1
- package/fjs/protocol/json_rpc/module.f.mjs +7 -4
- package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +22 -1
- package/fjs/protocol/mcp/proof.f.d.mts +4 -0
- package/fjs/protocol/mcp/proof.f.mjs +47 -24
- package/fjs/protocol/mcp/stdio/module.f.d.mts +2 -4
- package/fjs/protocol/mcp/stdio/module.f.mjs +1 -8
- package/fjs/protocol/mcp/stdio/proof.f.d.mts +1 -1
- package/fjs/protocol/mcp/stdio/proof.f.mjs +1 -1
- package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
- package/fjs/sul/id/module.f.d.mts +5 -0
- package/fjs/sul/id/module.f.mjs +5 -4
- package/fjs/sul/level/hash/module.f.d.mts +4 -1
- package/fjs/sul/level/hash/module.f.mjs +4 -3
- package/fjs/sul/level/hash/proof.f.d.mts +4 -0
- package/fjs/sul/level/hash/proof.f.mjs +5 -2
- 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 +5 -4
- 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 +21 -3
- package/fjs/text/code_point/module.f.mjs +24 -8
- package/fjs/text/code_point/proof.f.d.mts +1 -0
- package/fjs/text/code_point/proof.f.mjs +28 -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 +4 -1
- package/fjs/text/sgr/module.f.mjs +4 -3
- 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 +31 -33
- package/fjs/text/utf16/proof.f.d.mts +3 -1
- package/fjs/text/utf16/proof.f.mjs +18 -1
- package/fjs/text/utf8/module.f.d.mts +9 -5
- package/fjs/text/utf8/module.f.mjs +16 -18
- package/fjs/types/array/module.f.d.mts +2 -1
- package/fjs/types/array/module.f.mjs +2 -2
- 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 -14
- package/fjs/types/bit_vec/module.f.mjs +61 -71
- package/fjs/types/bit_vec/proof.f.d.mts +6 -0
- package/fjs/types/bit_vec/proof.f.mjs +29 -3
- 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 +9 -9
- 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 +5 -6
- package/fjs/types/btree/set/proof.f.d.mts +3 -0
- package/fjs/types/btree/set/proof.f.mjs +4 -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 +10 -1
- package/fjs/types/byte_set/module.f.mjs +5 -3
- package/fjs/types/byte_set/proof.f.d.mts +3 -1
- package/fjs/types/byte_set/proof.f.mjs +3 -1
- package/fjs/types/function/compare/module.f.d.mts +3 -2
- package/fjs/types/function/compare/module.f.mjs +3 -2
- 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 +9 -2
- package/fjs/types/list/module.f.mjs +5 -3
- 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 +8 -2
- package/fjs/types/nullable/module.f.mjs +4 -2
- 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 +14 -2
- package/fjs/types/object/module.f.mjs +15 -6
- 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 +2 -2
- 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 +35 -2
- package/fjs/types/rtti/common/module.f.mjs +9 -7
- package/fjs/types/rtti/common/proof.f.d.mts +4 -0
- package/fjs/types/rtti/common/proof.f.mjs +5 -2
- package/fjs/types/rtti/data/module.f.d.mts +120 -0
- package/fjs/types/rtti/data/module.f.mjs +1030 -0
- package/fjs/types/rtti/data/proof.f.d.mts +75 -0
- package/fjs/types/rtti/data/proof.f.mjs +566 -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 +38 -0
- package/fjs/types/rtti/parse/module.f.mjs +9 -7
- package/fjs/types/rtti/parse/proof.f.mjs +18 -38
- package/fjs/types/rtti/proof.f.d.mts +3 -1
- package/fjs/types/rtti/proof.f.mjs +3 -1
- package/fjs/types/rtti/ts/module.f.d.mts +68 -9
- package/fjs/types/rtti/ts/module.f.mjs +262 -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 +11 -0
- package/fjs/types/rtti/types.d.ts +40 -0
- package/fjs/types/rtti/validate/module.f.d.mts +36 -1
- package/fjs/types/rtti/validate/module.f.mjs +6 -4
- 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 +31 -1
- package/fjs/types/sorted_set/module.f.mjs +4 -2
- package/fjs/types/sorted_set/proof.f.d.mts +3 -1
- package/fjs/types/sorted_set/proof.f.mjs +3 -1
- 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 +3 -0
- package/fjs/website/module.f.mjs +3 -2
- 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/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/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.d.ts +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/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
package/fjs/text/module.f.d.mts
CHANGED
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
* strings and MSB-first UTF-8 bit vectors.
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
|
+
*
|
|
8
|
+
* @import { List } from '../types/list/types.ts'
|
|
9
|
+
* @import { Nullable } from '../types/nullable/types.ts'
|
|
10
|
+
* @import { Block, Item, Utf8 } from './types.ts'
|
|
7
11
|
*/
|
|
8
12
|
import type { List } from '../types/list/types.ts';
|
|
9
13
|
import type { Nullable } from '../types/nullable/types.ts';
|
|
10
14
|
import type { Block, Utf8 } from './types.ts';
|
|
11
|
-
/** @import { Nullable } from '../types/nullable/types.ts' */
|
|
12
|
-
/** @import { Block, Item, Utf8 } from './types.ts' */
|
|
13
15
|
/** @type {(indent: string) => (text: Block) => List<string>} */
|
|
14
16
|
export declare const flat: (indent: string) => (text: Block) => List<string>;
|
|
15
17
|
/**
|
package/fjs/text/module.f.mjs
CHANGED
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
* strings and MSB-first UTF-8 bit vectors.
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
|
+
*
|
|
8
|
+
* @import { List } from '../types/list/types.ts'
|
|
9
|
+
* @import { Nullable } from '../types/nullable/types.ts'
|
|
10
|
+
* @import { Block, Item, Utf8 } from './types.ts'
|
|
7
11
|
*/
|
|
8
12
|
|
|
9
13
|
import { msb, tryU8ListToVec, u8List } from '../types/bit_vec/module.f.mjs'
|
|
10
14
|
import { flatMap } from '../types/list/module.f.mjs'
|
|
11
|
-
/** @import { List } from '../types/list/types.ts' */
|
|
12
15
|
import { fromCodePointList, toCodePointList } from './utf8/module.f.mjs'
|
|
13
16
|
import { stringToCodePointList, codePointListToString } from './utf16/module.f.mjs'
|
|
14
17
|
import { mapUnwrap } from '../types/nullable/module.f.mjs'
|
|
15
|
-
/** @import { Nullable } from '../types/nullable/types.ts' */
|
|
16
|
-
/** @import { Block, Item, Utf8 } from './types.ts' */
|
|
17
18
|
|
|
18
19
|
/** @type {(indent: string) => (text: Block) => List<string>} */
|
|
19
20
|
export const flat = indent => {
|
package/fjs/text/proof.f.d.mts
CHANGED
package/fjs/text/proof.f.mjs
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Block } from './types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
1
5
|
import { assertEq, assertNotNullish } from '../asserts/module.f.mjs'
|
|
2
|
-
/** @import { Block } from './types.ts' */
|
|
3
6
|
import { flat, utf8, utf8ToString, tryUtf8 } from './module.f.mjs'
|
|
4
7
|
import { join } from '../types/string/module.f.mjs'
|
|
5
8
|
import { empty, maxLengthBytes } from '../types/bit_vec/module.f.mjs'
|
|
@@ -5,11 +5,14 @@
|
|
|
5
5
|
* See `./types.ts` for the type-level API.
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
|
+
*
|
|
9
|
+
* @import { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts'
|
|
10
|
+
* @import { Effect } from '../../effects/types.ts'
|
|
11
|
+
* @import { Stdout, WriteText, CsiConsole } from './types.ts'
|
|
8
12
|
*/
|
|
9
13
|
import type { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts';
|
|
10
14
|
import type { Effect } from '../../effects/types.ts';
|
|
11
15
|
import type { Stdout, WriteText } from './types.ts';
|
|
12
|
-
/** @import { Stdout, WriteText, CsiConsole } from './types.ts' */
|
|
13
16
|
/** @type {string} */
|
|
14
17
|
export declare const backspace: string;
|
|
15
18
|
export type _End = 'm';
|
|
@@ -5,16 +5,17 @@
|
|
|
5
5
|
* See `./types.ts` for the type-level API.
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
|
+
*
|
|
9
|
+
* @import { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts'
|
|
10
|
+
* @import { Effect } from '../../effects/types.ts'
|
|
11
|
+
* @import { Stdout, WriteText, CsiConsole } from './types.ts'
|
|
8
12
|
*/
|
|
9
13
|
|
|
10
14
|
// C0 control codes
|
|
11
15
|
// https://en.wikipedia.org/wiki/ANSI_escape_code#C0_control_codes
|
|
12
16
|
|
|
13
17
|
import { write } from '../../effects/node/module.f.mjs'
|
|
14
|
-
/** @import { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts' */
|
|
15
|
-
/** @import { Effect } from '../../effects/types.ts' */
|
|
16
18
|
import { utf8 } from "../module.f.mjs"
|
|
17
|
-
/** @import { Stdout, WriteText, CsiConsole } from './types.ts' */
|
|
18
19
|
|
|
19
20
|
/** @type {string} */
|
|
20
21
|
export const backspace = '\x08'
|
package/fjs/text/sgr/proof.f.mjs
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { NodeProgramOptions } from '../../effects/node/types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
1
5
|
import { fgRed, reset, createConsoleText, backspace, csiWrite } from './module.f.mjs'
|
|
2
6
|
import { virtual, emptyState, defaultNodeProgramOptions } from '../../effects/node/virtual/module.f.mjs'
|
|
3
|
-
/** @import { NodeProgramOptions } from '../../effects/node/types.ts' */
|
|
4
7
|
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
5
8
|
|
|
6
9
|
/** @type {(isTTY: boolean) => NodeProgramOptions} */
|
|
@@ -4,10 +4,14 @@
|
|
|
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
|
import type { List, Thunk } from '../../types/list/types.ts';
|
|
9
|
-
export type _Utf16State = number | null;
|
|
10
13
|
import type { CodePoint, U16 } from './types.ts';
|
|
14
|
+
export type _Utf16State = number | null;
|
|
11
15
|
/**
|
|
12
16
|
* Converts a UTF-16 sequence to its corresponding Unicode code points.
|
|
13
17
|
*
|
|
@@ -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),
|
|
@@ -190,39 +194,33 @@ const utf16ByteToCodePointOp = (word, state) => {
|
|
|
190
194
|
const low = word - 0xdc00
|
|
191
195
|
return [[(high << 10) + low + 0x10000], null]
|
|
192
196
|
}
|
|
197
|
+
// `isLowSurrogate`, `isBmpCodePoint`, and `isHighSurrogate` partition the
|
|
198
|
+
// full `u16` range with no gap, and `isLowSurrogate` was already ruled out
|
|
199
|
+
// above, so a non-BMP `word` here is always a high surrogate.
|
|
193
200
|
if (isBmpCodePoint(word)) { return [[state | errorMask, word], null] }
|
|
194
|
-
|
|
195
|
-
return [[state | errorMask, word | errorMask], null]
|
|
201
|
+
return [[state | errorMask], word]
|
|
196
202
|
}
|
|
197
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Converts a pending UTF-16 decoding state — an unpaired high surrogate
|
|
206
|
+
* (0xD800–0xDBFF) left from an earlier input — to an error code.
|
|
207
|
+
*
|
|
208
|
+
* @type {(state: number) => CodePoint}
|
|
209
|
+
*/
|
|
210
|
+
const utf16StateToError = state => state | errorMask
|
|
198
211
|
|
|
199
212
|
/**
|
|
200
213
|
* Handles the EOF (end-of-file) condition during UTF-16 decoding.
|
|
201
214
|
*
|
|
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
|
|
215
|
+
* If there is no pending state (`state === null`), it returns an empty list of
|
|
216
|
+
* code points, indicating no further input to process. If there is a pending
|
|
217
|
+
* state, it is treated as an unpaired surrogate and the `errorMask` is applied
|
|
218
|
+
* to flag the invalid sequence. The flush itself is `eofFlush` from
|
|
219
|
+
* `code_point`, shared with UTF-8.
|
|
217
220
|
*
|
|
218
|
-
*
|
|
219
|
-
* const eofState = utf16EofToCodePointOp(0xD800) // Unpaired high surrogate
|
|
220
|
-
* const validState = utf16EofToCodePointOp(null) // No pending state
|
|
221
|
-
* ```
|
|
221
|
+
* @type {(state: _Utf16State) => readonly[List<CodePoint>, _Utf16State]}
|
|
222
222
|
*/
|
|
223
|
-
const utf16EofToCodePointOp =
|
|
224
|
-
[state === null ? empty : [state | errorMask], null]
|
|
225
|
-
|
|
223
|
+
const utf16EofToCodePointOp = eofFlush(utf16StateToError)
|
|
226
224
|
|
|
227
225
|
/**
|
|
228
226
|
* 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,
|
|
@@ -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, '[4294967295]')
|
|
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, '[4294967295,-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,22 @@
|
|
|
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
|
+
decoder,
|
|
15
|
+
eofFlush,
|
|
16
|
+
errorMask,
|
|
17
|
+
isValidCodePoint,
|
|
18
|
+
} from '../code_point/module.f.mjs'
|
|
11
19
|
import { msb, u8List, length } from '../../types/bit_vec/module.f.mjs'
|
|
12
|
-
/** @import { Vec } from '../../types/bit_vec/types.ts' */
|
|
13
20
|
import { codePointListToString } from '../utf16/module.f.mjs'
|
|
14
|
-
/**
|
|
15
|
-
* @import {
|
|
16
|
-
* ByteOrEof, I32, U8, Utf8NonEmptyState, Utf8State,
|
|
17
|
-
* } from './types.ts'
|
|
18
|
-
*/
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* UTF-8 byte-format constants. Each byte kind is defined by a tag — the fixed
|
|
@@ -240,17 +242,13 @@ export const utf8ByteToCodePointOp = (byte, state) => {
|
|
|
240
242
|
}
|
|
241
243
|
|
|
242
244
|
/**
|
|
243
|
-
* Handles the end-of-file (EOF) case for UTF-8 decoding
|
|
245
|
+
* Handles the end-of-file (EOF) case for UTF-8 decoding: a leftover incomplete
|
|
246
|
+
* sequence is flushed as a single error code and the state resets to `null`.
|
|
247
|
+
* The flush itself is `eofFlush` from `code_point`, shared with UTF-16.
|
|
244
248
|
*
|
|
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`).
|
|
249
|
+
* @type {(state: Utf8State) => readonly [List<I32>, Utf8State]}
|
|
249
250
|
*/
|
|
250
|
-
export const utf8EofToCodePointOp =
|
|
251
|
-
state === null ? null : [utf8StateToError(state)],
|
|
252
|
-
null,
|
|
253
|
-
]
|
|
251
|
+
export const utf8EofToCodePointOp = eofFlush(utf8StateToError)
|
|
254
252
|
|
|
255
253
|
/**
|
|
256
254
|
* 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
|
*/
|
|
@@ -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
|
|
@@ -126,11 +127,6 @@ export type _Base = {
|
|
|
126
127
|
readonly unpackSplit: (len: bigint) => (u: Unpacked) => readonly [bigint, bigint];
|
|
127
128
|
readonly unpackConcatUint: (a: Unpacked) => (b: Unpacked) => bigint;
|
|
128
129
|
};
|
|
129
|
-
export type _ListToVecState = {
|
|
130
|
-
readonly len: bigint;
|
|
131
|
-
readonly stack: readonly Unpacked[];
|
|
132
|
-
};
|
|
133
|
-
export type _ListToVecOp = Accumulator<Unpacked, _ListToVecState, Vec>;
|
|
134
130
|
/**
|
|
135
131
|
* Implements operations for handling vectors in a least-significant-bit (LSb) first order.
|
|
136
132
|
*
|