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
|
@@ -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.JsToken[]
|
|
11
|
+
= s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
|
|
11
12
|
|
|
12
13
|
const stringify = djs.stringify(sort)
|
|
13
14
|
|
|
@@ -91,11 +92,11 @@ export default {
|
|
|
91
92
|
},
|
|
92
93
|
() => {
|
|
93
94
|
const result = stringify(tokenizeString('"\r"'))
|
|
94
|
-
if (result !== '[{"kind":"error","message":"unterminated string literal"},{"kind":"nl"},{"kind":"error","message":"\\" are missing"}]') { throw result }
|
|
95
|
+
if (result !== '[{"kind":"error","message":"unterminated string literal"},{"kind":"nl"},{"kind":"error","message":"\\" are missing"}]') { throw result }
|
|
95
96
|
},
|
|
96
97
|
() => {
|
|
97
98
|
const result = stringify(tokenizeString('"\n null'))
|
|
98
|
-
if (result !== '[{"kind":"error","message":"unterminated string literal"},{"kind":"nl"},{"kind":"null"}]') { throw result }
|
|
99
|
+
if (result !== '[{"kind":"error","message":"unterminated string literal"},{"kind":"nl"},{"kind":"null"}]') { throw result }
|
|
99
100
|
},
|
|
100
101
|
() => {
|
|
101
102
|
const result = stringify(tokenizeString('"\\b\\f\\n\\r\\t"'))
|
|
@@ -613,4 +614,4 @@ export default {
|
|
|
613
614
|
if (result !== '[{"kind":"/*","value":" multiline comment *\\n * *"},{"kind":"nl"}]') { throw result }
|
|
614
615
|
},
|
|
615
616
|
]
|
|
616
|
-
}
|
|
617
|
+
}
|
package/json/module.f.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as list from '../types/list/module.f.ts'
|
|
2
|
+
const { next, flat, map } = list
|
|
3
|
+
import * as string from '../types/string/module.f.ts'
|
|
4
|
+
const { concat } = string
|
|
5
|
+
import * as object from '../types/object/module.f.ts'
|
|
6
|
+
const { at } = object
|
|
7
|
+
import * as f from '../types/function/module.f.ts'
|
|
8
|
+
const { compose, fn } = f
|
|
9
|
+
const { entries } = Object
|
|
10
|
+
import * as s from './serializer/module.f.ts'
|
|
11
|
+
const { objectWrap, arrayWrap, stringSerialize, numberSerialize, nullSerialize, boolSerialize } = s
|
|
12
|
+
|
|
13
|
+
type Object = {
|
|
14
|
+
readonly [k in string]: Unknown
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type Array = readonly Unknown[]
|
|
18
|
+
|
|
19
|
+
export type Unknown = Object|boolean|string|number|null|Array
|
|
20
|
+
|
|
21
|
+
export const setProperty
|
|
22
|
+
: (value: Unknown) => (path: list.List<string>) => (src: Unknown) => Unknown
|
|
23
|
+
= value => {
|
|
24
|
+
const f
|
|
25
|
+
: (path: list.List<string>) => (src: Unknown) => Unknown
|
|
26
|
+
= path => src => {
|
|
27
|
+
const result = next(path)
|
|
28
|
+
if (result === null) { return value }
|
|
29
|
+
const srcObject = (src === null || typeof src !== 'object' || src instanceof Array) ? {} : src
|
|
30
|
+
const { first, tail } = result
|
|
31
|
+
return { ...srcObject, [first]: f(tail)(at(first)(srcObject)) }
|
|
32
|
+
}
|
|
33
|
+
return f
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const colon = [':']
|
|
37
|
+
|
|
38
|
+
export type Entry = object.Entry<Unknown>
|
|
39
|
+
|
|
40
|
+
type Entries = list.List<Entry>
|
|
41
|
+
|
|
42
|
+
type MapEntries = (entries: Entries) => Entries
|
|
43
|
+
|
|
44
|
+
export const serialize
|
|
45
|
+
: (mapEntries: MapEntries) => (value: Unknown) => list.List<string>
|
|
46
|
+
= sort => {
|
|
47
|
+
const propertySerialize
|
|
48
|
+
: (kv: readonly[string, Unknown]) => list.List<string>
|
|
49
|
+
= ([k, v]) => flat([
|
|
50
|
+
stringSerialize(k),
|
|
51
|
+
colon,
|
|
52
|
+
f(v)
|
|
53
|
+
])
|
|
54
|
+
const mapPropertySerialize = map(propertySerialize)
|
|
55
|
+
const objectSerialize
|
|
56
|
+
: (object: Object) => list.List<string>
|
|
57
|
+
= fn(entries)
|
|
58
|
+
.then(sort)
|
|
59
|
+
.then(mapPropertySerialize)
|
|
60
|
+
.then(objectWrap)
|
|
61
|
+
.result
|
|
62
|
+
const f
|
|
63
|
+
: (value: Unknown) => list.List<string>
|
|
64
|
+
= value => {
|
|
65
|
+
switch (typeof value) {
|
|
66
|
+
case 'boolean': { return boolSerialize(value) }
|
|
67
|
+
case 'number': { return numberSerialize(value) }
|
|
68
|
+
case 'string': { return stringSerialize(value) }
|
|
69
|
+
default: {
|
|
70
|
+
if (value === null) { return nullSerialize }
|
|
71
|
+
if (value instanceof Array) { return arraySerialize(value) }
|
|
72
|
+
return objectSerialize(value)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const arraySerialize = compose(map(f))(arrayWrap)
|
|
77
|
+
return f
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The standard `JSON.stringify` rules determined by
|
|
82
|
+
* https://262.ecma-international.org/6.0/#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys
|
|
83
|
+
*/
|
|
84
|
+
export const stringify
|
|
85
|
+
: (mapEntries: MapEntries) => (value: Unknown) => string
|
|
86
|
+
= sort => compose(serialize(sort))(concat)
|
|
87
|
+
|
|
88
|
+
export const parse
|
|
89
|
+
: (value: string) => Unknown
|
|
90
|
+
= JSON.parse
|
|
91
|
+
|
|
92
|
+
export const isObject
|
|
93
|
+
= (value: Unknown): value is Object =>
|
|
94
|
+
typeof value === 'object' && value !== null && !(value instanceof Array)
|
|
@@ -1,122 +1,116 @@
|
|
|
1
|
-
|
|
2
|
-
import * as
|
|
3
|
-
import * as list from '../../types/list/module.f.mjs'
|
|
1
|
+
import * as result from '../../types/result/module.f.ts'
|
|
2
|
+
import * as list from '../../types/list/module.f.ts'
|
|
4
3
|
const { fold, first, drop, toArray } = list
|
|
5
|
-
import * as Operator from '../../types/function/operator/module.f.
|
|
6
|
-
import * as Tokenizer from '../tokenizer/module.f.
|
|
7
|
-
import * as map from '../../types/map/module.f.
|
|
4
|
+
import * as Operator from '../../types/function/operator/module.f.ts'
|
|
5
|
+
import * as Tokenizer from '../tokenizer/module.f.ts'
|
|
6
|
+
import * as map from '../../types/map/module.f.ts'
|
|
8
7
|
const { setReplace } = map
|
|
9
|
-
import * as Json from '../module.f.
|
|
10
|
-
import * as o from '../../types/object/module.f.
|
|
8
|
+
import * as Json from '../module.f.ts'
|
|
9
|
+
import * as o from '../../types/object/module.f.ts'
|
|
11
10
|
const { fromMap } = o
|
|
12
11
|
|
|
12
|
+
type JsonObject = {
|
|
13
|
+
readonly kind: 'object'
|
|
14
|
+
readonly values: map.Map<Json.Unknown>
|
|
15
|
+
readonly key: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type JsonArray = {
|
|
19
|
+
readonly kind: 'array'
|
|
20
|
+
readonly values: list.List<Json.Unknown>
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type JsonStackElement = |
|
|
24
|
+
JsonObject |
|
|
25
|
+
JsonArray
|
|
26
|
+
|
|
27
|
+
type JsonStack = list.List<JsonStackElement>
|
|
28
|
+
|
|
29
|
+
type StateParse = {
|
|
30
|
+
readonly status: '' | '[' | '[v' | '[,' | '{' | '{k' | '{:' | '{v' | '{,'
|
|
31
|
+
readonly top: JsonStackElement | null
|
|
32
|
+
readonly stack: JsonStack
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type StateResult = {
|
|
36
|
+
readonly status: 'result'
|
|
37
|
+
readonly value: Json.Unknown
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type StateError = {
|
|
41
|
+
readonly status: 'error'
|
|
42
|
+
readonly message: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
type JsonState = |
|
|
46
|
+
StateParse |
|
|
47
|
+
StateResult |
|
|
48
|
+
StateError
|
|
49
|
+
|
|
50
|
+
const addKeyToObject
|
|
51
|
+
: (obj: JsonObject) => (key: string) => JsonObject
|
|
52
|
+
= obj => key => ({ kind: 'object', values: obj.values, key: key })
|
|
53
|
+
|
|
54
|
+
const addValueToObject
|
|
55
|
+
: (obj: JsonObject) => (value: Json.Unknown) => JsonObject
|
|
56
|
+
= obj => value => ({ kind: 'object', values: setReplace(obj.key)(value)(obj.values), key: '' })
|
|
57
|
+
|
|
58
|
+
const addToArray
|
|
59
|
+
: (array: JsonArray) => (value: Json.Unknown) => JsonArray
|
|
60
|
+
= array => value => ({ kind: 'array', values: list.concat(array.values)([value]) })
|
|
13
61
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* readonly values: map.Map<Json.Unknown>
|
|
18
|
-
* readonly key: string
|
|
19
|
-
* }} JsonObject
|
|
20
|
-
* */
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* @typedef {{
|
|
24
|
-
* readonly kind: 'array'
|
|
25
|
-
* readonly values: list.List<Json.Unknown>
|
|
26
|
-
* }} JsonArray
|
|
27
|
-
* */
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @typedef {|
|
|
31
|
-
* JsonObject |
|
|
32
|
-
* JsonArray
|
|
33
|
-
* } JsonStackElement
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
/** @typedef {list.List<JsonStackElement>} JsonStack */
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @typedef {{
|
|
40
|
-
* readonly status: '' | '[' | '[v' | '[,' | '{' | '{k' | '{:' | '{v' | '{,'
|
|
41
|
-
* readonly top: JsonStackElement | null
|
|
42
|
-
* readonly stack: JsonStack
|
|
43
|
-
* }} StateParse
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @typedef {{
|
|
48
|
-
* readonly status: 'result'
|
|
49
|
-
* readonly value: Json.Unknown
|
|
50
|
-
* }} StateResult
|
|
51
|
-
*/
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @typedef {{
|
|
55
|
-
* readonly status: 'error'
|
|
56
|
-
* readonly message: string
|
|
57
|
-
* }} StateError
|
|
58
|
-
*/
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* @typedef {|
|
|
62
|
-
* StateParse |
|
|
63
|
-
* StateResult |
|
|
64
|
-
* StateError
|
|
65
|
-
* } JsonState
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
/** @type {(obj: JsonObject) => (key: string) => JsonObject} */
|
|
69
|
-
const addKeyToObject = obj => key => ({ kind: 'object', values: obj.values, key: key })
|
|
70
|
-
|
|
71
|
-
/** @type {(obj: JsonObject) => (value: Json.Unknown) => JsonObject} */
|
|
72
|
-
const addValueToObject = obj => value => ({ kind: 'object', values: setReplace(obj.key)(value)(obj.values), key: '' })
|
|
73
|
-
|
|
74
|
-
/** @type {(array: JsonArray) => (value: Json.Unknown) => JsonArray} */
|
|
75
|
-
const addToArray = array => value => ({ kind: 'array', values: list.concat(array.values)([value]) })
|
|
76
|
-
|
|
77
|
-
/** @type {(state: StateParse) => (key: string) => JsonState} */
|
|
78
|
-
const pushKey = state => value => {
|
|
62
|
+
const pushKey
|
|
63
|
+
: (state: StateParse) => (key: string) => JsonState
|
|
64
|
+
= state => value => {
|
|
79
65
|
if (state.top?.kind === 'object') { return { status: '{k', top: addKeyToObject(state.top)(value), stack: state.stack } }
|
|
80
66
|
return { status: 'error', message: 'error' }
|
|
81
67
|
}
|
|
82
68
|
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
const pushValue
|
|
70
|
+
: (state: StateParse) => (value: Json.Unknown) => JsonState
|
|
71
|
+
= state => value => {
|
|
85
72
|
if (state.top === null) { return { status: 'result', value: value } }
|
|
86
73
|
if (state.top.kind === 'array') { return { status: '[v', top: addToArray(state.top)(value), stack: state.stack } }
|
|
87
74
|
return { status: '{v', top: addValueToObject(state.top)(value), stack: state.stack }
|
|
88
75
|
}
|
|
89
76
|
|
|
90
|
-
|
|
91
|
-
|
|
77
|
+
const startArray
|
|
78
|
+
: (state: StateParse) => JsonState
|
|
79
|
+
= state => {
|
|
92
80
|
const newStack = state.top === null ? null : { first: state.top, tail: state.stack }
|
|
93
81
|
return { status: '[', top: { kind: 'array', values: null }, stack: newStack }
|
|
94
82
|
}
|
|
95
83
|
|
|
96
|
-
|
|
97
|
-
|
|
84
|
+
const endArray
|
|
85
|
+
: (state: StateParse) => JsonState
|
|
86
|
+
= state => {
|
|
98
87
|
const array = state.top !== null ? toArray(state.top.values) : null
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
const newState
|
|
89
|
+
: StateParse
|
|
90
|
+
= { status: '', top: first(null)(state.stack), stack: drop(1)(state.stack) }
|
|
101
91
|
return pushValue(newState)(array)
|
|
102
92
|
}
|
|
103
93
|
|
|
104
|
-
|
|
105
|
-
|
|
94
|
+
const startObject
|
|
95
|
+
: (state: StateParse) => JsonState
|
|
96
|
+
= state => {
|
|
106
97
|
const newStack = state.top === null ? null : { first: state.top, tail: state.stack }
|
|
107
98
|
return { status: '{', top: { kind: 'object', values: null, key: '' }, stack: newStack }
|
|
108
99
|
}
|
|
109
100
|
|
|
110
|
-
|
|
111
|
-
|
|
101
|
+
const endObject
|
|
102
|
+
: (state: StateParse) => JsonState
|
|
103
|
+
= state => {
|
|
112
104
|
const obj = state.top?.kind === 'object' ? fromMap(state.top.values) : null
|
|
113
|
-
|
|
114
|
-
|
|
105
|
+
const newState
|
|
106
|
+
: StateParse
|
|
107
|
+
= { status: '', top: first(null)(state.stack), stack: drop(1)(state.stack) }
|
|
115
108
|
return pushValue(newState)(obj)
|
|
116
109
|
}
|
|
117
110
|
|
|
118
|
-
|
|
119
|
-
|
|
111
|
+
const tokenToValue
|
|
112
|
+
: (token: Tokenizer.JsonToken) => Json.Unknown
|
|
113
|
+
= token => {
|
|
120
114
|
switch (token.kind) {
|
|
121
115
|
case 'null': return null
|
|
122
116
|
case 'false': return false
|
|
@@ -127,8 +121,9 @@ const tokenToValue = token => {
|
|
|
127
121
|
}
|
|
128
122
|
}
|
|
129
123
|
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
const isValueToken
|
|
125
|
+
: (token: Tokenizer.JsonToken) => boolean
|
|
126
|
+
= token => {
|
|
132
127
|
switch (token.kind) {
|
|
133
128
|
case 'null':
|
|
134
129
|
case 'false':
|
|
@@ -139,16 +134,18 @@ const isValueToken = token => {
|
|
|
139
134
|
}
|
|
140
135
|
}
|
|
141
136
|
|
|
142
|
-
|
|
143
|
-
|
|
137
|
+
const parseValueOp
|
|
138
|
+
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
139
|
+
= token => state => {
|
|
144
140
|
if (isValueToken(token)) { return pushValue(state)(tokenToValue(token)) }
|
|
145
141
|
if (token.kind === '[') { return startArray(state) }
|
|
146
142
|
if (token.kind === '{') { return startObject(state) }
|
|
147
143
|
return { status: 'error', message: 'unexpected token' }
|
|
148
144
|
}
|
|
149
145
|
|
|
150
|
-
|
|
151
|
-
|
|
146
|
+
const parseArrayStartOp
|
|
147
|
+
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
148
|
+
= token => state => {
|
|
152
149
|
if (isValueToken(token)) { return pushValue(state)(tokenToValue(token)) }
|
|
153
150
|
if (token.kind === '[') { return startArray(state) }
|
|
154
151
|
if (token.kind === ']') { return endArray(state) }
|
|
@@ -156,41 +153,47 @@ const parseArrayStartOp = token => state => {
|
|
|
156
153
|
return { status: 'error', message: 'unexpected token' }
|
|
157
154
|
}
|
|
158
155
|
|
|
159
|
-
|
|
160
|
-
|
|
156
|
+
const parseArrayValueOp
|
|
157
|
+
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
158
|
+
= token => state => {
|
|
161
159
|
if (token.kind === ']') { return endArray(state) }
|
|
162
160
|
if (token.kind === ',') { return { status: '[,', top: state.top, stack: state.stack } }
|
|
163
161
|
return { status: 'error', message: 'unexpected token' }
|
|
164
162
|
}
|
|
165
163
|
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
const parseObjectStartOp
|
|
165
|
+
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
166
|
+
= token => state => {
|
|
168
167
|
if (token.kind === 'string') { return pushKey(state)(token.value) }
|
|
169
168
|
if (token.kind === '}') { return endObject(state) }
|
|
170
169
|
return { status: 'error', message: 'unexpected token' }
|
|
171
170
|
}
|
|
172
171
|
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
const parseObjectKeyOp
|
|
173
|
+
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
174
|
+
= token => state => {
|
|
175
175
|
if (token.kind === ':') { return { status: '{:', top: state.top, stack: state.stack } }
|
|
176
176
|
return { status: 'error', message: 'unexpected token' }
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
const parseObjectNextOp
|
|
180
|
+
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
181
|
+
= token => state => {
|
|
181
182
|
if (token.kind === '}') { return endObject(state) }
|
|
182
183
|
if (token.kind === ',') { return { status: '{,', top: state.top, stack: state.stack } }
|
|
183
184
|
return { status: 'error', message: 'unexpected token' }
|
|
184
185
|
}
|
|
185
186
|
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
const parseObjectCommaOp
|
|
188
|
+
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
189
|
+
= token => state => {
|
|
188
190
|
if (token.kind === 'string') { return pushKey(state)(token.value) }
|
|
189
191
|
return { status: 'error', message: 'unexpected token' }
|
|
190
192
|
}
|
|
191
193
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
+
const foldOp
|
|
195
|
+
: Operator.Fold<Tokenizer.JsonToken, JsonState>
|
|
196
|
+
= token => state => {
|
|
194
197
|
switch (state.status) {
|
|
195
198
|
case 'result': return { status: 'error', message: 'unexpected token' }
|
|
196
199
|
case 'error': return { status: 'error', message: state.message }
|
|
@@ -206,8 +209,9 @@ const foldOp = token => state => {
|
|
|
206
209
|
}
|
|
207
210
|
}
|
|
208
211
|
|
|
209
|
-
|
|
210
|
-
|
|
212
|
+
export const parse
|
|
213
|
+
: (tokenList: list.List<Tokenizer.JsonToken>) => result.Result<Json.Unknown, string>
|
|
214
|
+
= tokenList => {
|
|
211
215
|
const state = fold(foldOp)({ status: '', top: null, stack: null })(tokenList)
|
|
212
216
|
switch (state.status) {
|
|
213
217
|
case 'result': return result.ok(state.value)
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import * as parser from './module.f.
|
|
2
|
-
import * as tokenizer from '../tokenizer/module.f.
|
|
3
|
-
import * as list from '../../types/list/module.f.
|
|
1
|
+
import * as parser from './module.f.ts'
|
|
2
|
+
import * as tokenizer from '../tokenizer/module.f.ts'
|
|
3
|
+
import * as list from '../../types/list/module.f.ts'
|
|
4
4
|
const { toArray } = list
|
|
5
|
-
import * as json from '../module.f.
|
|
6
|
-
import * as o from '../../types/object/module.f.
|
|
5
|
+
import * as json from '../module.f.ts'
|
|
6
|
+
import * as o from '../../types/object/module.f.ts'
|
|
7
7
|
const { sort } = o
|
|
8
|
-
import * as encoding from '../../text/utf16/module.f.
|
|
8
|
+
import * as encoding from '../../text/utf16/module.f.ts'
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const tokenizeString
|
|
11
|
+
: (s: string) => readonly tokenizer.JsonToken[]
|
|
12
|
+
= s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
|
|
12
13
|
|
|
13
14
|
const stringify = json.stringify(sort)
|
|
14
15
|
|
|
@@ -251,4 +252,4 @@ export default {
|
|
|
251
252
|
if (result !== '["error","unexpected token"]') { throw result }
|
|
252
253
|
},
|
|
253
254
|
]
|
|
254
|
-
}
|
|
255
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as list from '../../types/list/module.f.ts'
|
|
2
|
+
const { flat, reduce, empty } = list
|
|
3
|
+
import * as O from '../../types/object/module.f.ts'
|
|
4
|
+
import * as Operator from '../../types/function/operator/module.f.ts'
|
|
5
|
+
|
|
6
|
+
type Obj<T> = {
|
|
7
|
+
readonly [k in string]: Unknown<T>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type Arr<T> = readonly Unknown<T>[]
|
|
11
|
+
|
|
12
|
+
type Primitive = |
|
|
13
|
+
boolean |
|
|
14
|
+
string |
|
|
15
|
+
number |
|
|
16
|
+
null
|
|
17
|
+
|
|
18
|
+
type Unknown<T> = |
|
|
19
|
+
Arr<T>|
|
|
20
|
+
Obj<T>|
|
|
21
|
+
null|
|
|
22
|
+
T
|
|
23
|
+
|
|
24
|
+
const jsonStringify = JSON.stringify
|
|
25
|
+
|
|
26
|
+
export const stringSerialize
|
|
27
|
+
: (_: string) => list.List<string>
|
|
28
|
+
= input => [jsonStringify(input)]
|
|
29
|
+
|
|
30
|
+
export const numberSerialize
|
|
31
|
+
: (_: number) => list.List<string>
|
|
32
|
+
= input => [jsonStringify(input)]
|
|
33
|
+
|
|
34
|
+
export const nullSerialize = ['null']
|
|
35
|
+
|
|
36
|
+
const trueSerialize = ['true']
|
|
37
|
+
|
|
38
|
+
const falseSerialize = ['false']
|
|
39
|
+
|
|
40
|
+
export const boolSerialize
|
|
41
|
+
: (_: boolean) => list.List<string>
|
|
42
|
+
= value => value ? trueSerialize : falseSerialize
|
|
43
|
+
|
|
44
|
+
const comma = [',']
|
|
45
|
+
|
|
46
|
+
const joinOp
|
|
47
|
+
: Operator.Reduce<list.List<string>>
|
|
48
|
+
= b => prior => flat([prior, comma, b])
|
|
49
|
+
|
|
50
|
+
const join
|
|
51
|
+
: (input: list.List<list.List<string>>) => list.List<string>
|
|
52
|
+
= reduce(joinOp)(empty)
|
|
53
|
+
|
|
54
|
+
const wrap
|
|
55
|
+
: (open: string) => (close: string) => (input: list.List<list.List<string>>) => list.List<string>
|
|
56
|
+
= open => close => {
|
|
57
|
+
const seqOpen = [open]
|
|
58
|
+
const seqClose = [close]
|
|
59
|
+
return input => flat([seqOpen, join(input), seqClose])
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const objectWrap = wrap('{')('}')
|
|
63
|
+
|
|
64
|
+
export const arrayWrap = wrap('[')(']')
|
|
65
|
+
|
|
66
|
+
type Entry<T> = O.Entry<Unknown<T>>
|
|
67
|
+
|
|
68
|
+
type Entries<T> = list.List<Entry<T>>
|
|
69
|
+
|
|
70
|
+
type MapEntries<T> = (entries: Entries<T>) => Entries<T>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as _ from './module.f.
|
|
2
|
-
import * as list from '../../types/list/module.f.
|
|
1
|
+
import * as _ from './module.f.ts'
|
|
2
|
+
import * as list from '../../types/list/module.f.ts'
|
|
3
3
|
const { toArray } = list
|
|
4
4
|
|
|
5
5
|
export default {
|
|
@@ -61,4 +61,4 @@ export default {
|
|
|
61
61
|
if (result !== '["true"]') { throw result }
|
|
62
62
|
}
|
|
63
63
|
]
|
|
64
|
-
}
|
|
64
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as json from './module.f.
|
|
2
|
-
import * as o from '../types/object/module.f.
|
|
1
|
+
import * as json from './module.f.ts'
|
|
2
|
+
import * as o from '../types/object/module.f.ts'
|
|
3
3
|
const { sort } = o
|
|
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
6
|
|
|
7
7
|
export default {
|