functionalscript 0.2.6 → 0.3.1
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 +20 -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} +66 -61
- 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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as list from '../../types/list/module.f.ts'
|
|
2
|
+
const { flat, map, entries: listEntries, concat: listConcat, flatMap } = list
|
|
3
|
+
import * as string from '../../types/string/module.f.ts'
|
|
4
|
+
const { concat } = string
|
|
5
|
+
import * as O from '../../types/object/module.f.ts'
|
|
6
|
+
import * as f from '../../types/function/module.f.ts'
|
|
7
|
+
const { compose, fn } = f
|
|
8
|
+
const { entries } = Object
|
|
9
|
+
import * as bi from '../../types/bigint/module.f.ts'
|
|
10
|
+
const { serialize: bigintSerialize } = bi
|
|
11
|
+
import * as j from '../../json/serializer/module.f.ts'
|
|
12
|
+
const { objectWrap, arrayWrap, stringSerialize, numberSerialize, nullSerialize, boolSerialize } = j
|
|
13
|
+
import * as DjsParser from '../parser/module.f.ts'
|
|
14
|
+
|
|
15
|
+
const colon = [':']
|
|
16
|
+
|
|
17
|
+
export const undefinedSerialize = ['undefined']
|
|
18
|
+
|
|
19
|
+
type Entry = O.Entry<DjsParser.DjsConst>
|
|
20
|
+
|
|
21
|
+
type Entries = list.List<Entry>
|
|
22
|
+
|
|
23
|
+
type MapEntries = (entries: Entries) => Entries
|
|
24
|
+
|
|
25
|
+
const djsConstSerialize
|
|
26
|
+
: (mapEntries: MapEntries) => (value: DjsParser.DjsConst) => list.List<string>
|
|
27
|
+
= sort => {
|
|
28
|
+
const propertySerialize
|
|
29
|
+
: (kv: readonly[string, DjsParser.DjsConst]) => list.List<string>
|
|
30
|
+
= ([k, v]) => flat([
|
|
31
|
+
stringSerialize(k),
|
|
32
|
+
colon,
|
|
33
|
+
f(v)
|
|
34
|
+
])
|
|
35
|
+
const mapPropertySerialize = map(propertySerialize)
|
|
36
|
+
const objectSerialize
|
|
37
|
+
: (object: DjsParser.DjsObject) => list.List<string>
|
|
38
|
+
= fn(entries)
|
|
39
|
+
.then(sort)
|
|
40
|
+
.then(mapPropertySerialize)
|
|
41
|
+
.then(objectWrap)
|
|
42
|
+
.result
|
|
43
|
+
const f
|
|
44
|
+
: (value: DjsParser.DjsConst) => list.List<string>
|
|
45
|
+
= value => {
|
|
46
|
+
switch (typeof value) {
|
|
47
|
+
case 'boolean': { return boolSerialize(value) }
|
|
48
|
+
case 'number': { return numberSerialize(value) }
|
|
49
|
+
case 'string': { return stringSerialize(value) }
|
|
50
|
+
case 'bigint': { return [bigintSerialize(value)] }
|
|
51
|
+
default: {
|
|
52
|
+
if (value === null) { return nullSerialize }
|
|
53
|
+
if (value === undefined) { return undefinedSerialize }
|
|
54
|
+
if (value instanceof Array) {
|
|
55
|
+
switch (value[0]) {
|
|
56
|
+
case 'aref': { return [`a${value[1]}`] }
|
|
57
|
+
case 'cref': { return [`c${value[1]}`] }
|
|
58
|
+
case 'array': { return arraySerialize(value[1]) }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return objectSerialize(value)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const arraySerialize = compose(map(f))(arrayWrap)
|
|
66
|
+
return f
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export const djsModuleStringify
|
|
70
|
+
: (mapEntries: MapEntries) => (djsModule: DjsParser.DjsModule) => string
|
|
71
|
+
= sort => djsModule => {
|
|
72
|
+
const importEntries = listEntries(djsModule[0])
|
|
73
|
+
const importSerialize
|
|
74
|
+
: (entry: list.Entry<string>) => list.List<string>
|
|
75
|
+
= entry => flat([['import a'], numberSerialize(entry[0]), [' from "', entry[1], '"\n']])
|
|
76
|
+
|
|
77
|
+
const len = djsModule[1].length
|
|
78
|
+
const constEntries = listEntries(djsModule[1])
|
|
79
|
+
const moduleEntrySerialize
|
|
80
|
+
: (entry: list.Entry<DjsParser.DjsConst>) => list.List<string>
|
|
81
|
+
= entry => {
|
|
82
|
+
if (entry[0] === len - 1) {
|
|
83
|
+
return listConcat(['export default '])(djsConstSerialize(sort)(entry[1]))
|
|
84
|
+
}
|
|
85
|
+
return flat([['const c'], numberSerialize(entry[0]), [' = '], djsConstSerialize(sort)(entry[1]), ['\n']])
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return concat(listConcat(flatMap(importSerialize)(importEntries))(flatMap(moduleEntrySerialize)(constEntries)))
|
|
89
|
+
}
|
|
90
|
+
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import * as json from '../json/module.f.
|
|
2
|
-
import * as list from '../types/object/module.f.
|
|
1
|
+
import * as json from '../json/module.f.ts'
|
|
2
|
+
import * as list from '../types/object/module.f.ts'
|
|
3
3
|
const { sort } = list
|
|
4
|
-
import * as f from '../types/function/module.f.
|
|
4
|
+
import * as f from '../types/function/module.f.ts'
|
|
5
5
|
const { identity } = f
|
|
6
|
-
import * as djs from './module.f.
|
|
6
|
+
import * as djs from './module.f.ts'
|
|
7
7
|
|
|
8
8
|
export default {
|
|
9
9
|
stringify: [
|
|
@@ -1,41 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import * as Operator from '../../types/function/operator/module.f.mjs'
|
|
4
|
-
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'
|
|
5
3
|
const { empty, flat, stateScan } = list
|
|
6
|
-
import * as bf from '../../types/bigfloat/module.f.
|
|
4
|
+
import * as bf from '../../types/bigfloat/module.f.ts'
|
|
7
5
|
const { multiply } = bf
|
|
8
|
-
import * as jsTokenizer from '../../js/tokenizer/module.f.
|
|
6
|
+
import * as jsTokenizer from '../../js/tokenizer/module.f.ts'
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* jsTokenizer.CommentToken
|
|
22
|
-
* } DjsToken
|
|
23
|
-
*/
|
|
8
|
+
export type DjsToken = |
|
|
9
|
+
{readonly kind: 'true' | 'false' | 'null' | 'undefined'} |
|
|
10
|
+
{readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=' } |
|
|
11
|
+
jsTokenizer.StringToken |
|
|
12
|
+
jsTokenizer.NumberToken |
|
|
13
|
+
jsTokenizer.ErrorToken |
|
|
14
|
+
jsTokenizer.IdToken |
|
|
15
|
+
jsTokenizer.BigIntToken |
|
|
16
|
+
jsTokenizer.WhitespaceToken |
|
|
17
|
+
jsTokenizer.NewLineToken |
|
|
18
|
+
jsTokenizer.CommentToken
|
|
24
19
|
|
|
25
|
-
|
|
26
|
-
* @typedef {|
|
|
27
|
-
* {readonly kind: 'def' | '-' }
|
|
28
|
-
* } ScanState
|
|
29
|
-
*/
|
|
20
|
+
type ScanState = {readonly kind: 'def' | '-' }
|
|
30
21
|
|
|
31
|
-
|
|
32
|
-
* @typedef {|
|
|
33
|
-
* jsTokenizer.JsToken | null
|
|
34
|
-
* } ScanInput
|
|
35
|
-
*/
|
|
22
|
+
type ScanInput = | jsTokenizer.JsToken | null
|
|
36
23
|
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
const mapToken
|
|
25
|
+
: (input: jsTokenizer.JsToken) => list.List<DjsToken>
|
|
26
|
+
= input =>
|
|
39
27
|
{
|
|
40
28
|
switch(input.kind)
|
|
41
29
|
{
|
|
@@ -64,8 +52,9 @@ const mapToken = input =>
|
|
|
64
52
|
}
|
|
65
53
|
}
|
|
66
54
|
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
const parseDefaultState
|
|
56
|
+
: (input: ScanInput) => readonly [list.List<DjsToken>, ScanState]
|
|
57
|
+
= input =>
|
|
69
58
|
{
|
|
70
59
|
if (input === null) return [empty, { kind: 'def'}]
|
|
71
60
|
switch(input.kind)
|
|
@@ -75,8 +64,9 @@ const parseDefaultState = input =>
|
|
|
75
64
|
}
|
|
76
65
|
}
|
|
77
66
|
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
const parseMinusState
|
|
68
|
+
: (input: ScanInput) => readonly [list.List<DjsToken>, ScanState]
|
|
69
|
+
= input =>
|
|
80
70
|
{
|
|
81
71
|
if (input === null) return [[{ kind: 'error', message: 'invalid token' }], { kind: 'def'}]
|
|
82
72
|
switch(input.kind)
|
|
@@ -88,8 +78,9 @@ const parseMinusState = input =>
|
|
|
88
78
|
}
|
|
89
79
|
}
|
|
90
80
|
|
|
91
|
-
|
|
92
|
-
|
|
81
|
+
const scanToken
|
|
82
|
+
: Operator.StateScan<ScanInput, ScanState, list.List<DjsToken>>
|
|
83
|
+
= state => input => {
|
|
93
84
|
switch(state.kind)
|
|
94
85
|
{
|
|
95
86
|
case '-': return parseMinusState(input)
|
|
@@ -97,10 +88,12 @@ const scanToken = state => input => {
|
|
|
97
88
|
}
|
|
98
89
|
}
|
|
99
90
|
|
|
100
|
-
|
|
101
|
-
|
|
91
|
+
export const tokenize
|
|
92
|
+
: (input: list.List<number>) => list.List<DjsToken>
|
|
93
|
+
= input =>
|
|
102
94
|
{
|
|
103
|
-
|
|
104
|
-
|
|
95
|
+
const jsTokens
|
|
96
|
+
: list.List<ScanInput>
|
|
97
|
+
= jsTokenizer.tokenize(input)
|
|
105
98
|
return flat(stateScan(scanToken)({ kind: 'def' })(list.concat(jsTokens)([null])))
|
|
106
99
|
}
|
|
@@ -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 '../module.f.
|
|
5
|
-
import * as o from '../../types/object/module.f.
|
|
4
|
+
import * as djs from '../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.DjsToken[]
|
|
11
|
+
= s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
|
|
11
12
|
|
|
12
13
|
const stringify = djs.stringify(sort)
|
|
13
14
|
|
|
@@ -360,4 +361,4 @@ export default {
|
|
|
360
361
|
if (result !== '[{"kind":"/*","value":" multiline comment *\\n * *"},{"kind":"nl"}]') { throw result }
|
|
361
362
|
},
|
|
362
363
|
]
|
|
363
|
-
}
|
|
364
|
+
}
|
|
@@ -1,53 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
import * as
|
|
3
|
-
import * as rangeMap from '../types/range_map/module.f.mjs'
|
|
1
|
+
import * as operator from '../types/function/operator/module.f.ts'
|
|
2
|
+
import * as rangeMap from '../types/range_map/module.f.ts'
|
|
4
3
|
const { merge: rangeMapMerge, fromRange, get } = rangeMap
|
|
5
|
-
import * as list from '../types/list/module.f.
|
|
4
|
+
import * as list from '../types/list/module.f.ts'
|
|
6
5
|
const { reduce: listReduce } = list
|
|
7
|
-
import * as ascii from '../text/ascii/module.f.
|
|
6
|
+
import * as ascii from '../text/ascii/module.f.ts'
|
|
8
7
|
const { range: asciiRange } = ascii
|
|
9
8
|
const { fromCharCode } = String
|
|
10
|
-
import * as f from '../types/function/module.f.
|
|
9
|
+
import * as f from '../types/function/module.f.ts'
|
|
11
10
|
const { fn } = f
|
|
12
|
-
import * as _range from '../types/range/module.f.
|
|
11
|
+
import * as _range from '../types/range/module.f.ts'
|
|
13
12
|
const { one } = _range
|
|
14
13
|
const { toArray, map } = list
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
type Result = readonly[readonly string[], ToResult]
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
type ToResult = (codePoint: number) => Result
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
* @template T
|
|
22
|
-
* @typedef {(state: T) => ToResult} CreateToResult
|
|
23
|
-
*/
|
|
19
|
+
type CreateToResult<T> = (state: T) => ToResult
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
* @template T
|
|
27
|
-
* @typedef {rangeMap.RangeMapArray<CreateToResult<T>>} State
|
|
28
|
-
*/
|
|
21
|
+
type State<T> = rangeMap.RangeMapArray<CreateToResult<T>>
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
const unexpectedSymbol
|
|
24
|
+
: ToResult
|
|
25
|
+
= codePoint => [[`unexpected symbol ${codePoint}`], unexpectedSymbol]
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
const def
|
|
28
|
+
: <T>(state: T) => ToResult
|
|
29
|
+
= () => unexpectedSymbol
|
|
35
30
|
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
const union
|
|
32
|
+
: <T>(a: CreateToResult<T>) => (b: CreateToResult<T>) => CreateToResult<T>
|
|
33
|
+
= a => b => {
|
|
38
34
|
if (a === def || a === b) { return b }
|
|
39
35
|
if (b === def) { return a }
|
|
40
36
|
throw [a, b]
|
|
41
37
|
}
|
|
42
38
|
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
const empty
|
|
40
|
+
: readonly never[]
|
|
41
|
+
= []
|
|
45
42
|
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const merge = rangeMapMerge({
|
|
43
|
+
const reduce = <T>(a: list.List<State<T>>): State<T> => {
|
|
44
|
+
const merge
|
|
45
|
+
: rangeMap.RangeMerge<CreateToResult<T>>
|
|
46
|
+
= rangeMapMerge({
|
|
51
47
|
union,
|
|
52
48
|
equal: operator.strictEqual,
|
|
53
49
|
})
|
|
@@ -58,29 +54,30 @@ const codePointRange = fromRange(def)
|
|
|
58
54
|
|
|
59
55
|
const range = fn(asciiRange).then(codePointRange).result
|
|
60
56
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
const rangeSet
|
|
58
|
+
= (l: readonly string[]) => <T>(f: CreateToResult<T>): State<T> => {
|
|
59
|
+
const codePointRange
|
|
60
|
+
: (a: _range.Range) => (f: CreateToResult<T>) => State<T>
|
|
61
|
+
= fromRange(def)
|
|
62
|
+
const g
|
|
63
|
+
: (r: string) => State<T>
|
|
64
|
+
= r => codePointRange(asciiRange(r))(f)
|
|
68
65
|
return reduce(map(g)(l))
|
|
69
66
|
}
|
|
70
67
|
|
|
71
|
-
|
|
72
|
-
const create = a => {
|
|
73
|
-
/** @typedef {typeof a extends list.List<State<infer T>> ? T : never} T */
|
|
68
|
+
const create = <T>(a: list.List<State<T>>): CreateToResult<T> => {
|
|
74
69
|
const i = reduce(a)
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
const x
|
|
71
|
+
: (v: number) => (i: State<T>) => (v: T) => ToResult
|
|
72
|
+
= get(def)
|
|
77
73
|
return v => c => x(c)(i)(v)(c)
|
|
78
74
|
}
|
|
79
75
|
|
|
80
76
|
export const terminal = -1
|
|
81
77
|
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
const toInit
|
|
79
|
+
: () => ToResult
|
|
80
|
+
= () => () => [[], init]
|
|
84
81
|
|
|
85
82
|
export const init = create([
|
|
86
83
|
codePointRange(one(terminal))(toInit),
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import * as _ from './module.f.
|
|
2
|
-
import * as ascii from '../text/ascii/module.f.
|
|
1
|
+
import * as _ from './module.f.ts'
|
|
2
|
+
import * as ascii from '../text/ascii/module.f.ts'
|
|
3
3
|
const { one } = ascii
|
|
4
|
-
import * as j from '../json/module.f.
|
|
4
|
+
import * as j from '../json/module.f.ts'
|
|
5
5
|
const { stringify } = j
|
|
6
6
|
const s = stringify(i => i)
|
|
7
7
|
|
|
8
|
-
/** @type {
|
|
9
|
-
const f
|
|
8
|
+
/** @type {} */
|
|
9
|
+
const f
|
|
10
|
+
: (v: string) => string
|
|
11
|
+
= v => {
|
|
10
12
|
const n = one(v)
|
|
11
13
|
return s(_.init(n)[0])
|
|
12
14
|
}
|
|
@@ -16,4 +18,4 @@ export default {
|
|
|
16
18
|
const x = f('1')
|
|
17
19
|
if (x != '["1"]') { throw x }
|
|
18
20
|
}
|
|
19
|
-
}
|
|
21
|
+
}
|
package/fsm/module.f.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as list from '../types/list/module.f.ts'
|
|
2
|
+
const { equal, isEmpty, fold, toArray, scan, foldScan, empty: emptyList } = list
|
|
3
|
+
import * as byteSet from '../types/byte_set/module.f.ts'
|
|
4
|
+
const { toRangeMap, union: byteSetUnion, one, empty } = byteSet
|
|
5
|
+
import * as sortedSet from '../types/sorted_set/module.f.ts'
|
|
6
|
+
const { intersect, union: sortedSetUnion } = sortedSet
|
|
7
|
+
import * as rangeMap from '../types/range_map/module.f.ts'
|
|
8
|
+
const { merge } = rangeMap
|
|
9
|
+
import * as cmp from '../types/function/compare/module.f.ts'
|
|
10
|
+
const { unsafeCmp } = cmp
|
|
11
|
+
import * as operator from '../types/function/operator/module.f.ts'
|
|
12
|
+
const { strictEqual } = operator
|
|
13
|
+
import * as j from '../json/module.f.ts'
|
|
14
|
+
const { stringify } = j
|
|
15
|
+
import * as f from '../types/function/module.f.ts'
|
|
16
|
+
const { identity } = f
|
|
17
|
+
import * as utf16 from '../text/utf16/module.f.ts'
|
|
18
|
+
const { stringToList } = utf16
|
|
19
|
+
|
|
20
|
+
type Rule = readonly[string, byteSet.ByteSet, string]
|
|
21
|
+
|
|
22
|
+
export type Grammar = list.List<Rule>
|
|
23
|
+
|
|
24
|
+
type Dfa = {
|
|
25
|
+
readonly[state in string]: rangeMap.RangeMapArray<string>
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const stringifyIdentity = stringify(identity)
|
|
29
|
+
|
|
30
|
+
export const toRange
|
|
31
|
+
: (s: string) => byteSet.ByteSet
|
|
32
|
+
= s => {
|
|
33
|
+
const [b, e] = toArray(stringToList(s))
|
|
34
|
+
return byteSet.range([b, e])
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const toUnionOp
|
|
38
|
+
: operator.Fold<number, byteSet.ByteSet>
|
|
39
|
+
= i => bs => byteSetUnion(bs)(one(i))
|
|
40
|
+
|
|
41
|
+
export const toUnion
|
|
42
|
+
: (s: string) => byteSet.ByteSet
|
|
43
|
+
= s => {
|
|
44
|
+
const codePoints = stringToList(s)
|
|
45
|
+
return fold(toUnionOp)(empty)(codePoints)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const mergeOp
|
|
49
|
+
: rangeMap.Operators<sortedSet.SortedSet<string>>
|
|
50
|
+
= { union: sortedSetUnion(unsafeCmp), equal: equal(strictEqual) }
|
|
51
|
+
|
|
52
|
+
const hasState
|
|
53
|
+
: (s: string) => (set: sortedSet.SortedSet<string>) => boolean
|
|
54
|
+
= s => set => !isEmpty(intersect(unsafeCmp)([s])(set))
|
|
55
|
+
|
|
56
|
+
const foldOp
|
|
57
|
+
: (set: sortedSet.SortedSet<string>) => operator.Fold<Rule, rangeMap.RangeMap<sortedSet.SortedSet<string>>>
|
|
58
|
+
= set => ([ruleIn, bs, ruleOut]) => rm => {
|
|
59
|
+
if (hasState(ruleIn)(set)) { return merge(mergeOp)(rm)(toRangeMap(bs)(ruleOut)) }
|
|
60
|
+
return rm
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const stringifyOp
|
|
64
|
+
: operator.Scan<rangeMap.Entry<sortedSet.SortedSet<string>>, rangeMap.Entry<string>>
|
|
65
|
+
= ([sortedSet, max]) => [[stringifyIdentity(sortedSet), max], stringifyOp]
|
|
66
|
+
|
|
67
|
+
const scanStringify = scan(stringifyOp)
|
|
68
|
+
|
|
69
|
+
const fetchOp
|
|
70
|
+
: operator.Scan<rangeMap.Entry<sortedSet.SortedSet<string>>, sortedSet.SortedSet<string>>
|
|
71
|
+
= ([item, _]) => [item, fetchOp]
|
|
72
|
+
|
|
73
|
+
const scanFetch = scan(fetchOp)
|
|
74
|
+
|
|
75
|
+
const addEntry
|
|
76
|
+
: (grammar: Grammar) => operator.Fold<sortedSet.SortedSet<string>, Dfa>
|
|
77
|
+
= grammar => set => dfa => {
|
|
78
|
+
const s = stringifyIdentity(set)
|
|
79
|
+
if (s in dfa) { return dfa }
|
|
80
|
+
const setMap = fold(foldOp(set))(emptyList)(grammar)
|
|
81
|
+
const stringMap = toArray(scanStringify(setMap))
|
|
82
|
+
const newDfa = { ...dfa, [s]: stringMap }
|
|
83
|
+
const newStates = scanFetch(setMap)
|
|
84
|
+
return fold(addEntry(grammar))(newDfa)(newStates)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const emptyState: string[] = []
|
|
88
|
+
|
|
89
|
+
const emptyStateStringify = stringifyIdentity(emptyState)
|
|
90
|
+
|
|
91
|
+
const initialState = ['']
|
|
92
|
+
|
|
93
|
+
const initialStateStringify = stringifyIdentity(initialState)
|
|
94
|
+
|
|
95
|
+
export const dfa
|
|
96
|
+
: (grammar: Grammar) => Dfa
|
|
97
|
+
= grammar => addEntry(grammar)(initialState)({})
|
|
98
|
+
|
|
99
|
+
const get = rangeMap.get(emptyStateStringify)
|
|
100
|
+
|
|
101
|
+
const runOp
|
|
102
|
+
: (dfa: Dfa) => operator.Fold<number, string>
|
|
103
|
+
= dfa => input => s => get(input)(dfa[s])
|
|
104
|
+
|
|
105
|
+
export const run
|
|
106
|
+
: (dfa: Dfa) => (input: list.List<number>) => list.List<string>
|
|
107
|
+
= dfa => input => foldScan(runOp(dfa))(initialStateStringify)(input)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import * as _ from './module.f.
|
|
2
|
-
import * as byteSet from '../types/byte_set/module.f.
|
|
3
|
-
import * as o from '../types/object/module.f.
|
|
1
|
+
import * as _ from './module.f.ts'
|
|
2
|
+
import * as byteSet from '../types/byte_set/module.f.ts'
|
|
3
|
+
import * as o from '../types/object/module.f.ts'
|
|
4
4
|
const { sort, fromEntries } = o
|
|
5
|
-
import * as json from '../json/module.f.
|
|
6
|
-
import * as f from '../types/function/module.f.
|
|
5
|
+
import * as json from '../json/module.f.ts'
|
|
6
|
+
import * as f from '../types/function/module.f.ts'
|
|
7
7
|
const { identity } = f
|
|
8
|
-
import * as list from '../types/list/module.f.
|
|
8
|
+
import * as list from '../types/list/module.f.ts'
|
|
9
9
|
const { toArray } = list
|
|
10
|
-
import * as utf16 from '../text/utf16/module.f.
|
|
10
|
+
import * as utf16 from '../text/utf16/module.f.ts'
|
|
11
11
|
const { stringToList } = utf16
|
|
12
12
|
|
|
13
13
|
const stringifyIdentity = json.stringify(identity)
|
|
@@ -22,8 +22,9 @@ const buildDfa = () => {
|
|
|
22
22
|
const idNext = byteSet.union(idBegin)(digit)
|
|
23
23
|
const dot = _.toUnion('.')
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const grammar
|
|
26
|
+
: _.Grammar
|
|
27
|
+
= [
|
|
27
28
|
['', digit, 'int'],
|
|
28
29
|
['int', digit, 'int'],
|
|
29
30
|
['', digit, 'floatBegin'],
|
package/html/module.f.ts
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as list from '../types/list/module.f.ts'
|
|
2
|
+
const { map, flatMap, flat, concat: listConcat } = list
|
|
3
|
+
import * as s from '../types/string/module.f.ts'
|
|
4
|
+
const { concat: stringConcat } = s
|
|
5
|
+
import * as O from '../types/object/module.f.ts'
|
|
6
|
+
import * as f from '../types/function/module.f.ts'
|
|
7
|
+
const { compose } = f
|
|
8
|
+
import * as utf16 from '../text/utf16/module.f.ts'
|
|
9
|
+
const { stringToList } = utf16
|
|
10
|
+
const { fromCharCode } = String
|
|
11
|
+
const { entries } = Object
|
|
12
|
+
|
|
13
|
+
type Tag = string
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Void Elements
|
|
17
|
+
*
|
|
18
|
+
* https://developer.mozilla.org/en-US/docs/Glossary/Void_element
|
|
19
|
+
*/
|
|
20
|
+
const voidTagList = [
|
|
21
|
+
'area',
|
|
22
|
+
'base',
|
|
23
|
+
'br',
|
|
24
|
+
'col',
|
|
25
|
+
'embed',
|
|
26
|
+
'hr',
|
|
27
|
+
'img',
|
|
28
|
+
'input',
|
|
29
|
+
'link',
|
|
30
|
+
'meta',
|
|
31
|
+
'param',
|
|
32
|
+
'source',
|
|
33
|
+
'track',
|
|
34
|
+
'wbr',
|
|
35
|
+
] as const
|
|
36
|
+
|
|
37
|
+
type VoidTagList = typeof voidTagList
|
|
38
|
+
|
|
39
|
+
type VoidTag = keyof VoidTagList
|
|
40
|
+
|
|
41
|
+
const isVoid
|
|
42
|
+
: (tag: string) => boolean
|
|
43
|
+
= tag => (voidTagList as readonly string[]).includes(tag)
|
|
44
|
+
|
|
45
|
+
type Element1 = readonly[Tag, ...Node[]]
|
|
46
|
+
|
|
47
|
+
type Element2 = readonly[Tag, Attributes, ...Node[]]
|
|
48
|
+
|
|
49
|
+
export type Element = Element1 | Element2
|
|
50
|
+
|
|
51
|
+
type Attributes = {
|
|
52
|
+
readonly[k in string]: string
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
type Node = Element | string
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* https://stackoverflow.com/questions/7381974/which-characters-need-to-be-escaped-in-html
|
|
59
|
+
*/
|
|
60
|
+
const escapeCharCode
|
|
61
|
+
: (code: number) => string
|
|
62
|
+
= code => {
|
|
63
|
+
switch (code) {
|
|
64
|
+
case 0x22: return '"'
|
|
65
|
+
case 0x26: return '&'
|
|
66
|
+
case 0x3C: return '<'
|
|
67
|
+
case 0x3E: return '>'
|
|
68
|
+
default: return fromCharCode(code)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const escape = compose(stringToList)(map(escapeCharCode))
|
|
73
|
+
|
|
74
|
+
const node
|
|
75
|
+
: (n: Node) => list.List<string>
|
|
76
|
+
= n => typeof n === 'string' ? escape(n) : element(n)
|
|
77
|
+
|
|
78
|
+
const nodes = flatMap(node)
|
|
79
|
+
|
|
80
|
+
const attribute
|
|
81
|
+
: (a: O.Entry<string>) => list.List<string>
|
|
82
|
+
= ([name, value]) => flat([[' ', name, '="'], escape(value), ['"']])
|
|
83
|
+
|
|
84
|
+
const attributes
|
|
85
|
+
: (a: Attributes) => list.List<string>
|
|
86
|
+
= compose(entries)(flatMap(attribute))
|
|
87
|
+
|
|
88
|
+
const open
|
|
89
|
+
: (t: string) => (a: Attributes) => list.List<string>
|
|
90
|
+
= t => a => flat([[`<`, t], attributes(a), [`>`]])
|
|
91
|
+
|
|
92
|
+
const element3
|
|
93
|
+
: (t: string) => (an: readonly[Attributes, readonly Node[]]) => list.List<string>
|
|
94
|
+
= t => ([a, n]) => {
|
|
95
|
+
const o = flat([[`<`, t], attributes(a), [`>`]])
|
|
96
|
+
return isVoid(t) ? o : flat([o, nodes(n), ['</', t, '>']])
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export const element
|
|
100
|
+
: (element: Element) => list.List<string>
|
|
101
|
+
= e => {
|
|
102
|
+
const [t, a, ...n] = e
|
|
103
|
+
return element3(t)(a === undefined ? [{}, []]: typeof a === 'object' && !(a instanceof Array) ? [a, n] : [{}, [a, ...n]])
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const html = compose(element)(listConcat(['<!DOCTYPE html>']))
|
|
107
|
+
|
|
108
|
+
export const htmlToString = compose(html)(stringConcat)
|