functionalscript 0.2.6 → 0.3.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/.github/workflows/ci.yml +19 -4
- package/CHANGELOG.md +5 -0
- package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
- package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
- package/com/cpp/testlib.f.ts +8 -0
- package/com/cs/{module.f.mjs → module.f.ts} +47 -38
- package/com/cs/{test.f.mjs → test.f.ts} +2 -2
- package/com/cs/testlib.f.ts +8 -0
- package/com/rust/module.f.ts +287 -0
- package/com/rust/{test.f.mjs → test.f.ts} +1 -1
- package/com/rust/testlib.f.ts +8 -0
- package/com/test/{build.f.mjs → build.f.ts} +47 -45
- package/com/test/{build.mjs → build.ts} +7 -6
- package/com/types/module.f.ts +62 -0
- package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
- package/commonjs/build/module.f.ts +100 -0
- package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
- package/commonjs/module/function/module.f.ts +13 -0
- package/commonjs/module/module.f.ts +41 -0
- package/commonjs/module.f.ts +7 -0
- package/commonjs/{module.mjs → module.ts} +12 -9
- package/commonjs/package/dependencies/module.f.ts +22 -0
- package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
- package/commonjs/package/module.f.ts +31 -0
- package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
- package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
- package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
- package/commonjs/{test.mjs → test.ts} +5 -4
- package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
- package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
- package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
- package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
- package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
- package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
- package/deno.json +71 -0
- package/dev/README.md +8 -0
- package/dev/index.ts +3 -0
- package/dev/{module.f.mjs → module.f.ts} +0 -2
- package/dev/{module.mjs → module.ts} +65 -60
- package/dev/test/{module.f.mjs → module.f.ts} +57 -70
- package/dev/{test.f.mjs → test.f.ts} +7 -5
- package/dev/test.ts +53 -0
- package/djs/{module.f.mjs → module.f.ts} +31 -31
- package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
- package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
- package/djs/serializer/module.f.ts +90 -0
- package/djs/{test.f.mjs → test.f.ts} +4 -4
- package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
- package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
- package/fsc/{module.f.mjs → module.f.ts} +41 -44
- package/fsc/{test.f.mjs → test.f.ts} +8 -6
- package/fsm/module.f.ts +107 -0
- package/fsm/{test.f.mjs → test.f.ts} +10 -9
- package/html/module.f.ts +108 -0
- package/html/{test.f.mjs → test.f.ts} +10 -7
- package/issues/lang/3110-function.md +25 -1
- package/issues/{test.f.mjs → test.f.ts} +3 -2
- package/js/tokenizer/module.f.ts +882 -0
- package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
- package/json/module.f.ts +94 -0
- package/json/parser/{module.f.mjs → module.f.ts} +113 -109
- package/json/parser/{test.f.mjs → test.f.ts} +10 -9
- package/json/serializer/module.f.ts +70 -0
- package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
- package/json/{test.f.mjs → test.f.ts} +3 -3
- package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
- package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
- package/nanvm-lib/src/extension.rs +15 -4
- package/nanvm-lib/src/interface.rs +7 -10
- package/nanvm-lib/src/lib.rs +3 -3
- package/nanvm-lib/src/naive.rs +10 -3
- package/nanvm-lib/src/nanenum.rs +5 -1
- package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
- package/nodejs/version/{main.mjs → main.ts} +1 -1
- package/nodejs/version/module.f.ts +42 -0
- package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
- package/package.json +9 -9
- package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
- package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
- package/text/module.f.ts +30 -0
- package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
- package/text/{test.f.mjs → test.f.ts} +5 -4
- package/text/utf16/module.f.ts +108 -0
- package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
- package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
- package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
- package/tsconfig.json +4 -1
- package/types/array/module.f.ts +89 -0
- package/types/array/{test.f.mjs → test.f.ts} +3 -3
- package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
- package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
- package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
- package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
- package/types/bit_vec/{module.f.mjs → module.f.ts} +16 -37
- package/types/bit_vec/{test.f.mjs → test.f.ts} +1 -1
- package/types/btree/find/module.f.ts +92 -0
- package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
- package/types/btree/{module.f.mjs → module.f.ts} +9 -9
- package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
- package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
- package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
- package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
- package/types/btree/{test.f.mjs → test.f.ts} +34 -26
- package/types/btree/types/module.f.ts +27 -0
- package/types/byte_set/module.f.ts +70 -0
- package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
- package/types/function/compare/module.f.ts +26 -0
- package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
- package/types/function/module.f.ts +43 -0
- package/types/function/operator/module.f.ts +63 -0
- package/types/function/test.f.ts +20 -0
- package/types/list/module.f.ts +345 -0
- package/types/list/{test.f.mjs → test.f.ts} +30 -24
- package/types/map/module.f.ts +65 -0
- package/types/map/{test.f.mjs → test.f.ts} +6 -5
- package/types/nibble_set/module.f.ts +34 -0
- package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
- package/types/nullable/module.f.ts +9 -0
- package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
- package/types/number/module.f.ts +16 -0
- package/types/number/{test.f.mjs → test.f.ts} +7 -5
- package/types/object/module.f.ts +30 -0
- package/types/object/{test.f.mjs → test.f.ts} +2 -2
- package/types/range/module.f.ts +10 -0
- package/types/range/{test.f.mjs → test.f.ts} +1 -1
- package/types/range_map/module.f.ts +70 -0
- package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
- package/types/result/module.f.ts +20 -0
- package/types/result/{module.mjs → module.ts} +4 -3
- package/types/sorted_list/module.f.ts +83 -0
- package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
- package/types/sorted_set/module.f.ts +36 -0
- package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
- package/types/string/module.f.ts +24 -0
- package/types/string/{test.f.mjs → test.f.ts} +2 -2
- package/types/string_set/module.f.ts +37 -0
- package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
- package/com/cpp/testlib.f.mjs +0 -8
- package/com/cs/testlib.f.mjs +0 -8
- package/com/rust/module.f.mjs +0 -272
- package/com/rust/testlib.f.mjs +0 -8
- package/com/types/module.f.mjs +0 -67
- package/commonjs/build/module.f.mjs +0 -100
- package/commonjs/module/function/module.f.mjs +0 -21
- package/commonjs/module/module.f.mjs +0 -53
- package/commonjs/module.f.mjs +0 -11
- package/commonjs/package/dependencies/module.f.mjs +0 -22
- package/commonjs/package/module.f.mjs +0 -36
- package/dev/index.mjs +0 -3
- package/dev/test.mjs +0 -60
- package/fsm/module.f.mjs +0 -99
- package/html/module.f.mjs +0 -102
- package/js/tokenizer/module.f.mjs +0 -872
- package/json/module.f.mjs +0 -89
- package/json/serializer/module.f.mjs +0 -87
- package/jsr.json +0 -66
- package/nodejs/version/module.f.mjs +0 -47
- package/out/com/cpp/module.f.d.mts +0 -7
- package/out/com/cpp/module.f.mjs +0 -130
- package/out/com/cpp/test.f.d.mts +0 -2
- package/out/com/cpp/test.f.mjs +0 -40
- package/out/com/cpp/testlib.f.d.mts +0 -2
- package/out/com/cpp/testlib.f.mjs +0 -7
- package/out/com/cs/module.f.d.mts +0 -7
- package/out/com/cs/module.f.mjs +0 -104
- package/out/com/cs/test.f.d.mts +0 -2
- package/out/com/cs/test.f.mjs +0 -43
- package/out/com/cs/testlib.f.d.mts +0 -2
- package/out/com/cs/testlib.f.mjs +0 -7
- package/out/com/rust/module.f.d.mts +0 -23
- package/out/com/rust/module.f.mjs +0 -224
- package/out/com/rust/test.f.d.mts +0 -2
- package/out/com/rust/test.f.mjs +0 -123
- package/out/com/rust/testlib.f.d.mts +0 -2
- package/out/com/rust/testlib.f.mjs +0 -7
- package/out/com/test/build.d.mts +0 -1
- package/out/com/test/build.f.d.mts +0 -26
- package/out/com/test/build.f.mjs +0 -98
- package/out/com/test/build.mjs +0 -40
- package/out/com/types/module.f.d.mts +0 -23
- package/out/com/types/module.f.mjs +0 -51
- package/out/com/types/testlib.f.d.mts +0 -44
- package/out/com/types/testlib.f.mjs +0 -30
- package/out/commonjs/build/module.f.d.mts +0 -20
- package/out/commonjs/build/module.f.mjs +0 -107
- package/out/commonjs/build/test.f.d.mts +0 -3
- package/out/commonjs/build/test.f.mjs +0 -102
- package/out/commonjs/module/function/module.f.d.mts +0 -5
- package/out/commonjs/module/function/module.f.mjs +0 -15
- package/out/commonjs/module/module.f.d.mts +0 -52
- package/out/commonjs/module/module.f.mjs +0 -48
- package/out/commonjs/module.d.mts +0 -3
- package/out/commonjs/module.f.d.mts +0 -2
- package/out/commonjs/module.f.mjs +0 -10
- package/out/commonjs/module.mjs +0 -26
- package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
- package/out/commonjs/package/dependencies/module.f.mjs +0 -21
- package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
- package/out/commonjs/package/dependencies/test.f.mjs +0 -15
- package/out/commonjs/package/module.f.d.mts +0 -21
- package/out/commonjs/package/module.f.mjs +0 -40
- package/out/commonjs/package/test.f.d.mts +0 -2
- package/out/commonjs/package/test.f.mjs +0 -27
- package/out/commonjs/path/module.f.d.mts +0 -60
- package/out/commonjs/path/module.f.mjs +0 -171
- package/out/commonjs/path/test.f.d.mts +0 -25
- package/out/commonjs/path/test.f.mjs +0 -231
- package/out/commonjs/test.d.mts +0 -8
- package/out/commonjs/test.mjs +0 -87
- package/out/crypto/prime_field/module.f.d.mts +0 -67
- package/out/crypto/prime_field/module.f.mjs +0 -110
- package/out/crypto/prime_field/test.f.d.mts +0 -13
- package/out/crypto/prime_field/test.f.mjs +0 -152
- package/out/crypto/secp/module.f.d.mts +0 -110
- package/out/crypto/secp/module.f.mjs +0 -173
- package/out/crypto/secp/test.f.d.mts +0 -5
- package/out/crypto/secp/test.f.mjs +0 -78
- package/out/crypto/sha2/module.f.d.mts +0 -15
- package/out/crypto/sha2/module.f.mjs +0 -172
- package/out/crypto/sha2/test.f.d.mts +0 -10
- package/out/crypto/sha2/test.f.mjs +0 -86
- package/out/dev/index.d.mts +0 -1
- package/out/dev/index.mjs +0 -2
- package/out/dev/module.d.mts +0 -26
- package/out/dev/module.f.d.mts +0 -1
- package/out/dev/module.f.mjs +0 -2
- package/out/dev/module.mjs +0 -167
- package/out/dev/test/module.f.d.mts +0 -25
- package/out/dev/test/module.f.mjs +0 -134
- package/out/dev/test.d.mts +0 -3
- package/out/dev/test.f.d.mts +0 -9
- package/out/dev/test.f.mjs +0 -58
- package/out/dev/test.mjs +0 -52
- package/out/djs/module.f.d.mts +0 -20
- package/out/djs/module.f.mjs +0 -79
- package/out/djs/parser/module.f.d.mts +0 -56
- package/out/djs/parser/module.f.mjs +0 -448
- package/out/djs/parser/test.f.d.mts +0 -13
- package/out/djs/parser/test.f.mjs +0 -569
- package/out/djs/test.f.d.mts +0 -12
- package/out/djs/test.f.mjs +0 -84
- package/out/djs/tokenizer/module.f.d.mts +0 -13
- package/out/djs/tokenizer/module.f.mjs +0 -91
- package/out/djs/tokenizer/test.f.d.mts +0 -7
- package/out/djs/tokenizer/test.f.mjs +0 -530
- package/out/fsc/module.f.d.mts +0 -7
- package/out/fsc/module.f.mjs +0 -105
- package/out/fsc/test.f.d.mts +0 -4
- package/out/fsc/test.f.mjs +0 -19
- package/out/fsm/module.f.d.mts +0 -14
- package/out/fsm/module.f.mjs +0 -80
- package/out/fsm/test.f.d.mts +0 -5
- package/out/fsm/test.f.mjs +0 -138
- package/out/html/module.f.d.mts +0 -17
- package/out/html/module.f.mjs +0 -80
- package/out/html/test.f.d.mts +0 -10
- package/out/html/test.f.mjs +0 -45
- package/out/issues/test.f.d.mts +0 -16
- package/out/issues/test.f.mjs +0 -66
- package/out/js/tokenizer/module.f.d.mts +0 -163
- package/out/js/tokenizer/module.f.mjs +0 -729
- package/out/js/tokenizer/test.f.d.mts +0 -9
- package/out/js/tokenizer/test.f.mjs +0 -906
- package/out/json/module.f.d.mts +0 -33
- package/out/json/module.f.mjs +0 -89
- package/out/json/parser/module.f.d.mts +0 -32
- package/out/json/parser/module.f.mjs +0 -224
- package/out/json/parser/test.f.d.mts +0 -5
- package/out/json/parser/test.f.mjs +0 -329
- package/out/json/serializer/module.f.d.mts +0 -36
- package/out/json/serializer/module.f.mjs +0 -67
- package/out/json/serializer/test.f.d.mts +0 -8
- package/out/json/serializer/test.f.mjs +0 -87
- package/out/json/test.f.d.mts +0 -8
- package/out/json/test.f.mjs +0 -61
- package/out/json/tokenizer/module.f.d.mts +0 -13
- package/out/json/tokenizer/module.f.mjs +0 -78
- package/out/json/tokenizer/test.f.d.mts +0 -6
- package/out/json/tokenizer/test.f.mjs +0 -420
- package/out/nanvm-lib/tests/test.f.d.mts +0 -36
- package/out/nanvm-lib/tests/test.f.mjs +0 -87
- package/out/nodejs/version/main.d.mts +0 -1
- package/out/nodejs/version/main.mjs +0 -3
- package/out/nodejs/version/module.f.d.mts +0 -12
- package/out/nodejs/version/module.f.mjs +0 -34
- package/out/nodejs/version/test.f.d.mts +0 -2
- package/out/nodejs/version/test.f.mjs +0 -97
- package/out/text/ascii/module.f.d.mts +0 -70
- package/out/text/ascii/module.f.mjs +0 -154
- package/out/text/ascii/test.f.d.mts +0 -4
- package/out/text/ascii/test.f.mjs +0 -14
- package/out/text/module.f.d.mts +0 -13
- package/out/text/module.f.mjs +0 -19
- package/out/text/sgr/module.f.d.mts +0 -12
- package/out/text/sgr/module.f.mjs +0 -17
- package/out/text/test.f.d.mts +0 -2
- package/out/text/test.f.mjs +0 -19
- package/out/text/utf16/module.f.d.mts +0 -12
- package/out/text/utf16/module.f.mjs +0 -86
- package/out/text/utf16/test.f.d.mts +0 -6
- package/out/text/utf16/test.f.mjs +0 -145
- package/out/text/utf8/module.f.d.mts +0 -10
- package/out/text/utf8/module.f.mjs +0 -126
- package/out/text/utf8/test.f.d.mts +0 -6
- package/out/text/utf8/test.f.mjs +0 -175
- package/out/types/array/module.f.d.mts +0 -31
- package/out/types/array/module.f.mjs +0 -95
- package/out/types/array/test.f.d.mts +0 -10
- package/out/types/array/test.f.mjs +0 -116
- package/out/types/bigfloat/module.f.d.mts +0 -6
- package/out/types/bigfloat/module.f.mjs +0 -77
- package/out/types/bigfloat/test.f.d.mts +0 -6
- package/out/types/bigfloat/test.f.mjs +0 -349
- package/out/types/bigint/module.f.d.mts +0 -29
- package/out/types/bigint/module.f.mjs +0 -114
- package/out/types/bigint/test.f.d.mts +0 -16
- package/out/types/bigint/test.f.mjs +0 -199
- package/out/types/bit_vec/module.f.d.mts +0 -158
- package/out/types/bit_vec/module.f.mjs +0 -194
- package/out/types/bit_vec/test.f.d.mts +0 -23
- package/out/types/bit_vec/test.f.mjs +0 -210
- package/out/types/btree/find/module.f.d.mts +0 -36
- package/out/types/btree/find/module.f.mjs +0 -137
- package/out/types/btree/find/test.f.d.mts +0 -2
- package/out/types/btree/find/test.f.mjs +0 -156
- package/out/types/btree/module.f.d.mts +0 -5
- package/out/types/btree/module.f.mjs +0 -34
- package/out/types/btree/remove/module.f.d.mts +0 -14
- package/out/types/btree/remove/module.f.mjs +0 -209
- package/out/types/btree/remove/test.f.d.mts +0 -7
- package/out/types/btree/remove/test.f.mjs +0 -638
- package/out/types/btree/set/module.f.d.mts +0 -5
- package/out/types/btree/set/module.f.mjs +0 -114
- package/out/types/btree/set/test.f.d.mts +0 -2
- package/out/types/btree/set/test.f.mjs +0 -390
- package/out/types/btree/test.f.d.mts +0 -13
- package/out/types/btree/test.f.mjs +0 -83
- package/out/types/btree/types/module.f.d.mts +0 -14
- package/out/types/btree/types/module.f.mjs +0 -50
- package/out/types/byte_set/module.f.d.mts +0 -25
- package/out/types/byte_set/module.f.mjs +0 -42
- package/out/types/byte_set/test.f.d.mts +0 -13
- package/out/types/byte_set/test.f.mjs +0 -123
- package/out/types/function/compare/module.f.d.mts +0 -23
- package/out/types/function/compare/module.f.mjs +0 -22
- package/out/types/function/compare/test.f.d.mts +0 -2
- package/out/types/function/compare/test.f.mjs +0 -8
- package/out/types/function/module.f.d.mts +0 -51
- package/out/types/function/module.f.mjs +0 -44
- package/out/types/function/operator/module.f.d.mts +0 -60
- package/out/types/function/operator/module.f.mjs +0 -60
- package/out/types/function/test.f.d.mts +0 -2
- package/out/types/function/test.f.mjs +0 -15
- package/out/types/list/module.f.d.mts +0 -82
- package/out/types/list/module.f.mjs +0 -269
- package/out/types/list/test.f.d.mts +0 -38
- package/out/types/list/test.f.mjs +0 -401
- package/out/types/map/module.f.d.mts +0 -21
- package/out/types/map/module.f.mjs +0 -54
- package/out/types/map/test.f.d.mts +0 -5
- package/out/types/map/test.f.mjs +0 -115
- package/out/types/nibble_set/module.f.d.mts +0 -16
- package/out/types/nibble_set/module.f.mjs +0 -19
- package/out/types/nibble_set/test.f.d.mts +0 -13
- package/out/types/nibble_set/test.f.mjs +0 -90
- package/out/types/nullable/module.f.d.mts +0 -9
- package/out/types/nullable/module.f.mjs +0 -9
- package/out/types/nullable/test.f.d.mts +0 -2
- package/out/types/nullable/test.f.mjs +0 -12
- package/out/types/number/module.f.d.mts +0 -7
- package/out/types/number/module.f.mjs +0 -12
- package/out/types/number/test.f.d.mts +0 -11
- package/out/types/number/test.f.mjs +0 -126
- package/out/types/object/module.f.d.mts +0 -22
- package/out/types/object/module.f.mjs +0 -27
- package/out/types/object/test.f.d.mts +0 -5
- package/out/types/object/test.f.mjs +0 -17
- package/out/types/range/module.f.d.mts +0 -6
- package/out/types/range/module.f.mjs +0 -6
- package/out/types/range/test.f.d.mts +0 -2
- package/out/types/range/test.f.mjs +0 -18
- package/out/types/range_map/module.f.d.mts +0 -19
- package/out/types/range_map/module.f.mjs +0 -84
- package/out/types/range_map/test.f.d.mts +0 -6
- package/out/types/range_map/test.f.mjs +0 -201
- package/out/types/result/module.d.mts +0 -7
- package/out/types/result/module.f.d.mts +0 -22
- package/out/types/result/module.f.mjs +0 -25
- package/out/types/result/module.mjs +0 -16
- package/out/types/sorted_list/module.f.d.mts +0 -53
- package/out/types/sorted_list/module.f.mjs +0 -102
- package/out/types/sorted_list/test.f.d.mts +0 -5
- package/out/types/sorted_list/test.f.mjs +0 -66
- package/out/types/sorted_set/module.f.d.mts +0 -19
- package/out/types/sorted_set/module.f.mjs +0 -29
- package/out/types/sorted_set/test.f.d.mts +0 -6
- package/out/types/sorted_set/test.f.mjs +0 -80
- package/out/types/string/module.f.d.mts +0 -9
- package/out/types/string/module.f.mjs +0 -17
- package/out/types/string/test.f.d.mts +0 -15
- package/out/types/string/test.f.mjs +0 -58
- package/out/types/string_set/module.f.d.mts +0 -13
- package/out/types/string_set/module.f.mjs +0 -29
- package/out/types/string_set/test.f.d.mts +0 -5
- package/out/types/string_set/test.f.mjs +0 -65
- package/text/module.f.mjs +0 -27
- package/text/utf16/module.f.mjs +0 -96
- package/types/array/module.f.mjs +0 -119
- package/types/btree/find/module.f.mjs +0 -125
- package/types/btree/types/module.f.mjs +0 -64
- package/types/byte_set/module.f.mjs +0 -61
- package/types/function/compare/module.f.mjs +0 -29
- package/types/function/module.f.mjs +0 -50
- package/types/function/operator/module.f.mjs +0 -78
- package/types/function/test.f.mjs +0 -17
- package/types/list/module.f.mjs +0 -320
- package/types/map/module.f.mjs +0 -67
- package/types/nibble_set/module.f.mjs +0 -28
- package/types/nullable/module.f.mjs +0 -11
- package/types/number/module.f.mjs +0 -16
- package/types/object/module.f.mjs +0 -33
- package/types/range/module.f.mjs +0 -8
- package/types/range_map/module.f.mjs +0 -84
- package/types/result/module.f.mjs +0 -28
- package/types/sorted_list/module.f.mjs +0 -107
- package/types/sorted_set/module.f.mjs +0 -38
- package/types/string/module.f.mjs +0 -22
- package/types/string_set/module.f.mjs +0 -36
|
@@ -1,35 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
import * as
|
|
3
|
-
import * as list from '../../types/list/module.f.mjs'
|
|
1
|
+
import * as Operator from '../../types/function/operator/module.f.ts'
|
|
2
|
+
import * as list from '../../types/list/module.f.ts'
|
|
4
3
|
const { empty, flat, stateScan } = list
|
|
5
|
-
import * as bf from '../../types/bigfloat/module.f.
|
|
4
|
+
import * as bf from '../../types/bigfloat/module.f.ts'
|
|
6
5
|
const { multiply } = bf
|
|
7
|
-
import * as jsTokenizer from '../../js/tokenizer/module.f.
|
|
6
|
+
import * as jsTokenizer from '../../js/tokenizer/module.f.ts'
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* jsTokenizer.ErrorToken
|
|
16
|
-
* } JsonToken
|
|
17
|
-
*/
|
|
8
|
+
export type JsonToken = |
|
|
9
|
+
{readonly kind: 'true' | 'false' | 'null' } |
|
|
10
|
+
{readonly kind: '{' | '}' | ':' | ',' | '[' | ']' } |
|
|
11
|
+
jsTokenizer.StringToken |
|
|
12
|
+
jsTokenizer.NumberToken |
|
|
13
|
+
jsTokenizer.ErrorToken
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
* @typedef {|
|
|
21
|
-
* {readonly kind: 'def' | '-' }
|
|
22
|
-
* } ScanState
|
|
23
|
-
*/
|
|
15
|
+
type ScanState = {readonly kind: 'def' | '-' }
|
|
24
16
|
|
|
25
|
-
|
|
26
|
-
* @typedef {|
|
|
27
|
-
* jsTokenizer.JsToken | null
|
|
28
|
-
* } ScanInput
|
|
29
|
-
*/
|
|
17
|
+
type ScanInput = jsTokenizer.JsToken | null
|
|
30
18
|
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
const mapToken
|
|
20
|
+
: (input: jsTokenizer.JsToken) => list.List<JsonToken>
|
|
21
|
+
= input =>
|
|
33
22
|
{
|
|
34
23
|
switch(input.kind)
|
|
35
24
|
{
|
|
@@ -51,8 +40,9 @@ const mapToken = input =>
|
|
|
51
40
|
}
|
|
52
41
|
}
|
|
53
42
|
|
|
54
|
-
|
|
55
|
-
|
|
43
|
+
const parseDefaultState
|
|
44
|
+
: (input: ScanInput) => readonly [list.List<JsonToken>, ScanState]
|
|
45
|
+
= input =>
|
|
56
46
|
{
|
|
57
47
|
if (input === null) return [empty, { kind: 'def'}]
|
|
58
48
|
switch(input.kind)
|
|
@@ -62,8 +52,9 @@ const parseDefaultState = input =>
|
|
|
62
52
|
}
|
|
63
53
|
}
|
|
64
54
|
|
|
65
|
-
|
|
66
|
-
|
|
55
|
+
const parseMinusState
|
|
56
|
+
: (input: ScanInput) => readonly [list.List<JsonToken>, ScanState]
|
|
57
|
+
= input =>
|
|
67
58
|
{
|
|
68
59
|
if (input === null) return [[{ kind: 'error', message: 'invalid token' }], { kind: 'def'}]
|
|
69
60
|
switch(input.kind)
|
|
@@ -74,8 +65,9 @@ const parseMinusState = input =>
|
|
|
74
65
|
}
|
|
75
66
|
}
|
|
76
67
|
|
|
77
|
-
|
|
78
|
-
|
|
68
|
+
const scanToken
|
|
69
|
+
: Operator.StateScan<ScanInput, ScanState, list.List<JsonToken>>
|
|
70
|
+
= state => input => {
|
|
79
71
|
switch(state.kind)
|
|
80
72
|
{
|
|
81
73
|
case '-': return parseMinusState(input)
|
|
@@ -83,10 +75,11 @@ const scanToken = state => input => {
|
|
|
83
75
|
}
|
|
84
76
|
}
|
|
85
77
|
|
|
86
|
-
|
|
87
|
-
|
|
78
|
+
export const tokenize
|
|
79
|
+
= (input: list.List<number>): list.List<JsonToken> =>
|
|
88
80
|
{
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
const jsTokens
|
|
82
|
+
: list.List<ScanInput>
|
|
83
|
+
= jsTokenizer.tokenize(input)
|
|
91
84
|
return flat(stateScan(scanToken)({ kind: 'def' })(list.concat(jsTokens)([null])))
|
|
92
85
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import * as tokenizer from './module.f.
|
|
2
|
-
import * as list from '../../types/list/module.f.
|
|
1
|
+
import * as tokenizer from './module.f.ts'
|
|
2
|
+
import * as list from '../../types/list/module.f.ts'
|
|
3
3
|
const { toArray } = list
|
|
4
|
-
import * as djs from '../../djs/module.f.
|
|
5
|
-
import * as o from '../../types/object/module.f.
|
|
4
|
+
import * as djs from '../../djs/module.f.ts'
|
|
5
|
+
import * as o from '../../types/object/module.f.ts'
|
|
6
6
|
const { sort } = o
|
|
7
|
-
import * as encoding from '../../text/utf16/module.f.
|
|
7
|
+
import * as encoding from '../../text/utf16/module.f.ts'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const tokenizeString
|
|
10
|
+
: (s: string) => readonly tokenizer.JsonToken[]
|
|
11
|
+
= s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
|
|
11
12
|
|
|
12
13
|
const stringify = djs.stringify(sort)
|
|
13
14
|
|
|
@@ -286,4 +287,4 @@ export default {
|
|
|
286
287
|
if (result !== '[{"kind":"["},{"kind":"null"},{"kind":"]"}]') { throw result }
|
|
287
288
|
},
|
|
288
289
|
]
|
|
289
|
-
}
|
|
290
|
+
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
use crate::{
|
|
1
|
+
use crate::{
|
|
2
|
+
interface::{Any, Extension, Unpacked},
|
|
3
|
+
nullish::Nullish::*,
|
|
4
|
+
simple::Simple,
|
|
5
|
+
};
|
|
2
6
|
|
|
3
7
|
pub trait AnyExtension: Any {
|
|
4
8
|
fn string(c: &str) -> Self::String16 {
|
|
5
|
-
c.encode_utf16().
|
|
9
|
+
c.encode_utf16().to_complex()
|
|
6
10
|
}
|
|
7
11
|
fn to_string(self) -> Self::String16 {
|
|
8
12
|
match self.unpack() {
|
|
@@ -51,7 +55,11 @@ impl<T: Any> AnyExtension for T {}
|
|
|
51
55
|
mod test {
|
|
52
56
|
mod to_string {
|
|
53
57
|
use crate::{
|
|
54
|
-
extension::AnyExtension,
|
|
58
|
+
extension::AnyExtension,
|
|
59
|
+
interface::{Complex, Extension},
|
|
60
|
+
naive::{Any, Array, Object},
|
|
61
|
+
nullish::Nullish::*,
|
|
62
|
+
simple::Simple,
|
|
55
63
|
};
|
|
56
64
|
|
|
57
65
|
#[test]
|
|
@@ -100,7 +108,10 @@ mod test {
|
|
|
100
108
|
}
|
|
101
109
|
|
|
102
110
|
mod own_property {
|
|
103
|
-
use crate::{
|
|
111
|
+
use crate::{
|
|
112
|
+
extension::AnyExtension, interface::Complex, naive::Any, nullish::Nullish::*,
|
|
113
|
+
simple::Simple,
|
|
114
|
+
};
|
|
104
115
|
|
|
105
116
|
#[test]
|
|
106
117
|
#[should_panic]
|
|
@@ -22,10 +22,7 @@ pub trait String16<U: Any<String16 = Self>>:
|
|
|
22
22
|
{
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
pub trait BigInt<U: Any<BigInt = Self>>:
|
|
26
|
-
Complex<U> + Container<Header = Sign, Item = u64>
|
|
27
|
-
{
|
|
28
|
-
}
|
|
25
|
+
pub trait BigInt<U: Any<BigInt = Self>>: Complex<U> + Container<Header = Sign, Item = u64> {}
|
|
29
26
|
|
|
30
27
|
pub trait Array<U: Any<Array = Self>>: Complex<U> + Container<Header = (), Item = U> {}
|
|
31
28
|
|
|
@@ -58,16 +55,16 @@ pub trait Any: PartialEq + Sized + Clone + fmt::Debug {
|
|
|
58
55
|
|
|
59
56
|
fn to_string(self) -> Self::String16 {
|
|
60
57
|
if let Some(simple) = self.try_to_simple() {
|
|
61
|
-
return simple.to_string::<Self>()
|
|
58
|
+
return simple.to_string::<Self>();
|
|
62
59
|
}
|
|
63
60
|
if let Ok(v) = self.clone().try_to::<Self::String16>() {
|
|
64
61
|
return v;
|
|
65
62
|
}
|
|
66
63
|
if self.clone().try_to::<Self::Array>().is_ok() {
|
|
67
|
-
return "".to_string16::<Self>()
|
|
64
|
+
return "".to_string16::<Self>();
|
|
68
65
|
}
|
|
69
66
|
if self.clone().try_to::<Self::Object>().is_ok() {
|
|
70
|
-
return "[object Object]".to_string16::<Self>()
|
|
67
|
+
return "[object Object]".to_string16::<Self>();
|
|
71
68
|
}
|
|
72
69
|
// bigint and function
|
|
73
70
|
todo!()
|
|
@@ -105,12 +102,12 @@ pub trait Extension: Sized {
|
|
|
105
102
|
where
|
|
106
103
|
Self: IntoIterator<Item: Any>,
|
|
107
104
|
{
|
|
108
|
-
self.to_complex::<<Self::Item as Any>::Array>()
|
|
109
|
-
.to_unknown()
|
|
105
|
+
self.to_complex::<<Self::Item as Any>::Array>().to_unknown()
|
|
110
106
|
}
|
|
111
107
|
|
|
112
108
|
fn to_object_unknown<U: Any>(self) -> U
|
|
113
|
-
where
|
|
109
|
+
where
|
|
110
|
+
Self: IntoIterator<Item = (U::String16, U)>,
|
|
114
111
|
{
|
|
115
112
|
self.to_complex::<U::Object>().to_unknown()
|
|
116
113
|
}
|
package/nanvm-lib/src/lib.rs
CHANGED
package/nanvm-lib/src/naive.rs
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
use core::{fmt, marker::PhantomData};
|
|
2
2
|
use std::rc;
|
|
3
3
|
|
|
4
|
-
use crate::{
|
|
4
|
+
use crate::{
|
|
5
|
+
interface::{self},
|
|
6
|
+
sign::Sign,
|
|
7
|
+
simple::Simple,
|
|
8
|
+
};
|
|
5
9
|
|
|
6
10
|
pub trait Policy {
|
|
7
11
|
type Header: PartialEq + fmt::Debug + Clone;
|
|
@@ -38,7 +42,10 @@ pub struct Complex<P: Policy> {
|
|
|
38
42
|
|
|
39
43
|
impl<P: Policy> Clone for Complex<P> {
|
|
40
44
|
fn clone(&self) -> Self {
|
|
41
|
-
Self {
|
|
45
|
+
Self {
|
|
46
|
+
header: self.header.clone(),
|
|
47
|
+
items: self.items.clone(),
|
|
48
|
+
}
|
|
42
49
|
}
|
|
43
50
|
}
|
|
44
51
|
|
|
@@ -61,7 +68,7 @@ impl<P: Policy> interface::Container for Complex<P> {
|
|
|
61
68
|
type Header = P::Header;
|
|
62
69
|
type Item = P::Item;
|
|
63
70
|
fn items(&self) -> &[Self::Item] {
|
|
64
|
-
|
|
71
|
+
&self.items
|
|
65
72
|
}
|
|
66
73
|
fn header(&self) -> &Self::Header {
|
|
67
74
|
&self.header
|
package/nanvm-lib/src/nanenum.rs
CHANGED
|
@@ -99,7 +99,11 @@ impl<T: Raw64> Drop for NaNEnumPack<T> {
|
|
|
99
99
|
|
|
100
100
|
#[cfg(test)]
|
|
101
101
|
mod test {
|
|
102
|
-
use core::{
|
|
102
|
+
use core::{
|
|
103
|
+
mem::forget,
|
|
104
|
+
ptr::null,
|
|
105
|
+
sync::atomic::{AtomicUsize, Ordering},
|
|
106
|
+
};
|
|
103
107
|
use std::rc::Rc;
|
|
104
108
|
|
|
105
109
|
use crate::nanenum::{Raw64, NEGATIVE, NOT_FINITE};
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
const e
|
|
2
|
+
: (a: unknown) => (b: unknown) => void
|
|
3
|
+
= a => b => {
|
|
3
4
|
if (a === b) { } else { throw [a, '===', b] }
|
|
4
5
|
}
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
const n
|
|
8
|
+
: (a: unknown) => (b: unknown) => void
|
|
9
|
+
= a => b => {
|
|
8
10
|
if (a !== b) { } else { throw [a, '!==', b] }
|
|
9
11
|
}
|
|
10
12
|
|
|
@@ -60,8 +62,7 @@ export default {
|
|
|
60
62
|
},
|
|
61
63
|
array: {
|
|
62
64
|
array: () => {
|
|
63
|
-
|
|
64
|
-
const a = []
|
|
65
|
+
const a: any = []
|
|
65
66
|
e(a)(a)
|
|
66
67
|
n([])([])
|
|
67
68
|
const a0 = ['0']
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type Buffer = {}
|
|
2
|
+
|
|
3
|
+
type Fs<T> = {
|
|
4
|
+
readonly readFileSync: (name: string) => Buffer
|
|
5
|
+
readonly writeFileSync: (name: string, content: string) => T
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type Node<T> = {
|
|
9
|
+
readonly fs: Fs<T>
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { stringify, parse } = JSON
|
|
13
|
+
|
|
14
|
+
export const getVersion
|
|
15
|
+
: <T>(fs: Fs<T>) => string
|
|
16
|
+
= fs => readJson(fs)('package').version
|
|
17
|
+
|
|
18
|
+
const jsonFile = (jsonFile: string) => `${jsonFile}.json`
|
|
19
|
+
|
|
20
|
+
const readJson
|
|
21
|
+
: <T>(node: Fs<T>) => (name: string) => any
|
|
22
|
+
= fs => name => parse(fs.readFileSync(jsonFile(name)).toString())
|
|
23
|
+
|
|
24
|
+
export const updateVersion
|
|
25
|
+
: <T>(node: Node<T>) => readonly[T, T]
|
|
26
|
+
= ({ fs }) => {
|
|
27
|
+
const f = (name: string) => {
|
|
28
|
+
return fs.writeFileSync(
|
|
29
|
+
jsonFile(name),
|
|
30
|
+
stringify(
|
|
31
|
+
{
|
|
32
|
+
...readJson(fs)(name),
|
|
33
|
+
version: getVersion(fs)
|
|
34
|
+
},
|
|
35
|
+
null,
|
|
36
|
+
2))
|
|
37
|
+
}
|
|
38
|
+
return [
|
|
39
|
+
f('package'),
|
|
40
|
+
f('deno')
|
|
41
|
+
]
|
|
42
|
+
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import * as _ from './module.f.
|
|
1
|
+
import * as _ from './module.f.ts'
|
|
2
2
|
|
|
3
3
|
const version = '0.3.0'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* }}
|
|
9
|
-
*/
|
|
10
|
-
const x = {
|
|
5
|
+
const x
|
|
6
|
+
: { readonly[k in string]: unknown }
|
|
7
|
+
= {
|
|
11
8
|
'package.json': {
|
|
12
9
|
"name": "functionalscript",
|
|
13
10
|
version,
|
|
@@ -43,7 +40,7 @@ const x = {
|
|
|
43
40
|
"typescript": "^4.7.4"
|
|
44
41
|
}
|
|
45
42
|
},
|
|
46
|
-
"
|
|
43
|
+
"deno.json": {}
|
|
47
44
|
}
|
|
48
45
|
|
|
49
46
|
const e = '{\n' +
|
|
@@ -82,14 +79,16 @@ const e = '{\n' +
|
|
|
82
79
|
' }\n' +
|
|
83
80
|
'}'
|
|
84
81
|
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
const buffer
|
|
83
|
+
: (s: string) => _.Buffer
|
|
84
|
+
= s => ({
|
|
87
85
|
toString: () => s
|
|
88
86
|
})
|
|
89
87
|
|
|
90
88
|
export default () => {
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
const node
|
|
90
|
+
: _.Node<string>
|
|
91
|
+
= {
|
|
93
92
|
fs: {
|
|
94
93
|
readFileSync: n => buffer(JSON.stringify(x[n])),
|
|
95
94
|
writeFileSync: (_, content) => content
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "functionalscript",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "FunctionalScript is a functional subset of JavaScript",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"tscp": "
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
7
|
+
"tscp": "tsc --NoEmit false --emitDeclarationOnly true",
|
|
8
|
+
"tsct": "tsc --NoEmit false --checkJs false",
|
|
9
|
+
"prepack": "npm run tscp && npm run tsct",
|
|
10
|
+
"test20": "npm run prepack && node --trace-uncaught ./dev/test.js",
|
|
11
|
+
"test": "tsc && node --experimental-strip-types --trace-uncaught ./dev/test.ts",
|
|
12
|
+
"comtest": "node --experimental-strip-types ./com/test/build.ts",
|
|
13
|
+
"index": "node --experimental-strip-types ./dev/index.ts",
|
|
14
|
+
"version": "node --experimental-strip-types ./nodejs/version/main.ts"
|
|
15
15
|
},
|
|
16
16
|
"repository": {
|
|
17
17
|
"type": "git",
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
import * as _range from '../../types/range/module.f.mjs'
|
|
1
|
+
import * as _range from '../../types/range/module.f.ts'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const at
|
|
4
|
+
: (s: string) => (i: number) => number
|
|
5
|
+
= s => i => {
|
|
6
6
|
const r = s.codePointAt(i)
|
|
7
7
|
if (r === void 0) { throw s }
|
|
8
8
|
return r
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
export const one
|
|
12
|
+
: (s: string) => number
|
|
13
|
+
= s => at(s)(0)
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
export const range
|
|
16
|
+
: (s: string) => _range.Range
|
|
17
|
+
= s => {
|
|
16
18
|
const f = at(s)
|
|
17
19
|
const f0 = f(0)
|
|
18
20
|
if (s.length === 1) { return [f0, f0] }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as _ from './module.f.
|
|
1
|
+
import * as _ from './module.f.ts'
|
|
2
2
|
const { range } = _
|
|
3
|
-
import * as json from '../../json/module.f.
|
|
4
|
-
import * as o from '../../types/object/module.f.
|
|
3
|
+
import * as json from '../../json/module.f.ts'
|
|
4
|
+
import * as o from '../../types/object/module.f.ts'
|
|
5
5
|
const { sort } = o
|
|
6
6
|
|
|
7
7
|
const stringify = json.stringify(sort)
|
|
@@ -11,4 +11,4 @@ export default {
|
|
|
11
11
|
const r = stringify(range("A"))
|
|
12
12
|
if (r !== '[65,65]') { throw r }
|
|
13
13
|
}
|
|
14
|
-
}
|
|
14
|
+
}
|
package/text/module.f.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as list from '../types/list/module.f.ts'
|
|
2
|
+
const { flatMap } = list
|
|
3
|
+
|
|
4
|
+
export type Block = ItemThunk|ItemArray
|
|
5
|
+
|
|
6
|
+
type ItemArray = readonly Item[]
|
|
7
|
+
|
|
8
|
+
type ItemThunk = () => list.List<Item>
|
|
9
|
+
|
|
10
|
+
export type Item = string|ItemArray|ItemThunk
|
|
11
|
+
|
|
12
|
+
export const flat
|
|
13
|
+
: (indent: string) => (text: Block) => list.List<string>
|
|
14
|
+
= indent => {
|
|
15
|
+
|
|
16
|
+
const f
|
|
17
|
+
: (prefix: string) => (text: Block) => list.List<string>
|
|
18
|
+
= prefix => {
|
|
19
|
+
const g
|
|
20
|
+
: (item: Item) => list.List<string>
|
|
21
|
+
= item => typeof (item) === 'string' ? [`${prefix}${item}`] : f(`${prefix}${indent}`)(item)
|
|
22
|
+
return flatMap(g)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return f('')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const curly
|
|
29
|
+
: (type: string) => (name: string) => (body: Block) => Block
|
|
30
|
+
= type => name => body => [`${type} ${name}`, '{', body, '}']
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
// @ts-self-types="./module.f.d.mts"
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* https://en.wikipedia.org/wiki/ANSI_escape_code#SGR
|
|
5
|
-
*
|
|
6
|
-
* @type {(c: number) => string}
|
|
7
3
|
*/
|
|
8
|
-
export const sgr
|
|
4
|
+
export const sgr
|
|
5
|
+
: (c: number) => string
|
|
6
|
+
= c => `\x1b[${c.toString()}m`
|
|
9
7
|
|
|
10
8
|
export const codes = {
|
|
11
9
|
/** @readonly */
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import * as _ from './module.f.
|
|
2
|
-
import * as string from '../types/string/module.f.
|
|
1
|
+
import * as _ from './module.f.ts'
|
|
2
|
+
import * as string from '../types/string/module.f.ts'
|
|
3
3
|
const { join } = string
|
|
4
4
|
|
|
5
5
|
export default () => {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const text
|
|
7
|
+
: _.Block
|
|
8
|
+
= [
|
|
8
9
|
'a',
|
|
9
10
|
'b',
|
|
10
11
|
() => [
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as list from '../../types/list/module.f.ts'
|
|
2
|
+
import * as operator from '../../types/function/operator/module.f.ts'
|
|
3
|
+
import * as range from '../../types/range/module.f.ts'
|
|
4
|
+
const { contains } = range
|
|
5
|
+
import * as f from '../../types/function/module.f.ts'
|
|
6
|
+
const { fn } = f
|
|
7
|
+
const { map, flat, stateScan, reduce, flatMap, empty } = list
|
|
8
|
+
|
|
9
|
+
type WordOrEof = u16|null
|
|
10
|
+
|
|
11
|
+
type Utf16State = number|null
|
|
12
|
+
|
|
13
|
+
type u16 = number
|
|
14
|
+
|
|
15
|
+
type i32 = number
|
|
16
|
+
|
|
17
|
+
const lowBmp = contains([0x0000, 0xd7ff])
|
|
18
|
+
const highBmp = contains([0xe000, 0xffff])
|
|
19
|
+
|
|
20
|
+
const isBmpCodePoint
|
|
21
|
+
: (codePoint: i32) => boolean
|
|
22
|
+
= codePoint => lowBmp(codePoint) || highBmp(codePoint)
|
|
23
|
+
|
|
24
|
+
const isHighSurrogate
|
|
25
|
+
: (codePoint: i32) => boolean
|
|
26
|
+
= contains([0xd800, 0xdbff])
|
|
27
|
+
|
|
28
|
+
const isLowSurrogate
|
|
29
|
+
: (codePoint: i32) => boolean
|
|
30
|
+
= contains([0xdc00, 0xdfff])
|
|
31
|
+
|
|
32
|
+
const errorMask = 0b1000_0000_0000_0000_0000_0000_0000_0000
|
|
33
|
+
|
|
34
|
+
const isSupplementaryPlane
|
|
35
|
+
: (a: i32) => boolean
|
|
36
|
+
= contains([0x01_0000, 0x10_ffff])
|
|
37
|
+
|
|
38
|
+
const codePointToUtf16
|
|
39
|
+
: (input: i32) => list.List<u16>
|
|
40
|
+
= codePoint => {
|
|
41
|
+
if (isBmpCodePoint(codePoint)) { return [codePoint] }
|
|
42
|
+
if (isSupplementaryPlane(codePoint)) {
|
|
43
|
+
const n = codePoint - 0x1_0000
|
|
44
|
+
const high = (n >> 10) + 0xd800
|
|
45
|
+
const low = (n & 0b0011_1111_1111) + 0xdc00
|
|
46
|
+
return [high, low]
|
|
47
|
+
}
|
|
48
|
+
return [codePoint & 0xffff]
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const fromCodePointList = flatMap(codePointToUtf16)
|
|
52
|
+
|
|
53
|
+
const u16 = contains([0x0000, 0xFFFF])
|
|
54
|
+
|
|
55
|
+
const utf16ByteToCodePointOp
|
|
56
|
+
: operator.StateScan<u16, Utf16State, list.List<i32>>
|
|
57
|
+
= state => word => {
|
|
58
|
+
if (!u16(word)) {
|
|
59
|
+
return [[0xffffffff], state]
|
|
60
|
+
}
|
|
61
|
+
if (state === null) {
|
|
62
|
+
if (isBmpCodePoint(word)) { return [[word], null] }
|
|
63
|
+
if (isHighSurrogate(word)) { return [[], word] }
|
|
64
|
+
return [[word | errorMask], null]
|
|
65
|
+
}
|
|
66
|
+
if (isLowSurrogate(word)) {
|
|
67
|
+
const high = state - 0xd800
|
|
68
|
+
const low = word - 0xdc00
|
|
69
|
+
return [[(high << 10) + low + 0x10000], null]
|
|
70
|
+
}
|
|
71
|
+
if (isBmpCodePoint(word)) { return [[state | errorMask, word], null] }
|
|
72
|
+
if (isHighSurrogate(word)) { return [[state | errorMask], word] }
|
|
73
|
+
return [[state | errorMask, word | errorMask], null]
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const utf16EofToCodePointOp
|
|
77
|
+
: (state: Utf16State) => readonly[list.List<i32>, Utf16State]
|
|
78
|
+
= state => [state === null ? empty : [state | errorMask], null]
|
|
79
|
+
|
|
80
|
+
const utf16ByteOrEofToCodePointOp
|
|
81
|
+
: operator.StateScan<WordOrEof, Utf16State, list.List<i32>>
|
|
82
|
+
= state => input => input === null ? utf16EofToCodePointOp(state) : utf16ByteToCodePointOp(state)(input)
|
|
83
|
+
|
|
84
|
+
const eofList
|
|
85
|
+
: list.List<WordOrEof>
|
|
86
|
+
= [null]
|
|
87
|
+
|
|
88
|
+
export const toCodePointList
|
|
89
|
+
: (input: list.List<u16>) => list.List<i32>
|
|
90
|
+
= input => flat(stateScan(utf16ByteOrEofToCodePointOp)(null)(flat([input, eofList])))
|
|
91
|
+
|
|
92
|
+
export const stringToList
|
|
93
|
+
: (s: string) => list.List<u16>
|
|
94
|
+
= s => {
|
|
95
|
+
const at
|
|
96
|
+
: (i: number) => list.Result<number>
|
|
97
|
+
= i => {
|
|
98
|
+
const first = s.charCodeAt(i)
|
|
99
|
+
return isNaN(first) ? empty : { first, tail: () => at(i + 1) }
|
|
100
|
+
}
|
|
101
|
+
return at(0)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export const listToString
|
|
105
|
+
: (input: list.List<u16>) => string
|
|
106
|
+
= fn(map(String.fromCharCode))
|
|
107
|
+
.then(reduce(operator.concat)(''))
|
|
108
|
+
.result
|