functionalscript 0.3.3 → 0.3.5
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/com/cpp/module.f.d.ts +10 -0
- package/com/cpp/module.f.js +107 -0
- package/com/cpp/test.f.d.ts +2 -0
- package/com/cpp/{test.f.ts → test.f.js} +9 -11
- package/com/cpp/testlib.f.d.ts +2 -0
- package/com/cpp/testlib.f.js +5 -0
- package/com/cs/module.f.d.ts +12 -0
- package/com/cs/module.f.js +80 -0
- package/com/cs/test.f.d.ts +2 -0
- package/com/cs/{test.f.ts → test.f.js} +9 -11
- package/com/cs/testlib.f.d.ts +2 -0
- package/com/cs/testlib.f.js +5 -0
- package/com/rust/module.f.d.ts +15 -0
- package/com/rust/module.f.js +169 -0
- package/com/rust/test.f.d.ts +2 -0
- package/com/rust/{test.f.ts → test.f.js} +7 -7
- package/com/rust/testlib.f.d.ts +2 -0
- package/com/rust/testlib.f.js +5 -0
- package/com/test/build.f.d.ts +20 -0
- package/com/test/build.f.js +58 -0
- package/com/types/module.f.d.ts +28 -0
- package/com/types/module.f.js +8 -0
- package/com/types/testlib.f.d.ts +44 -0
- package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
- package/commonjs/build/module.f.d.ts +6 -0
- package/commonjs/build/module.f.js +69 -0
- package/commonjs/build/test.f.d.ts +2 -0
- package/commonjs/build/test.f.js +96 -0
- package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
- package/commonjs/module/function/module.f.js +4 -0
- package/commonjs/module/module.f.d.ts +18 -0
- package/commonjs/module/module.f.js +12 -0
- package/commonjs/module.f.d.ts +6 -0
- package/commonjs/module.f.js +1 -0
- package/commonjs/package/dependencies/module.f.d.ts +7 -0
- package/commonjs/package/dependencies/module.f.js +13 -0
- package/commonjs/package/dependencies/test.f.d.ts +2 -0
- package/commonjs/package/dependencies/test.f.js +15 -0
- package/commonjs/package/module.f.d.ts +17 -0
- package/commonjs/package/module.f.js +18 -0
- package/commonjs/package/test.f.d.ts +2 -0
- package/commonjs/package/test.f.js +27 -0
- package/commonjs/path/module.f.d.ts +24 -0
- package/commonjs/path/module.f.js +114 -0
- package/commonjs/path/test.f.d.ts +25 -0
- package/commonjs/path/{test.f.ts → test.f.js} +123 -89
- package/crypto/prime_field/module.f.d.ts +43 -0
- package/crypto/prime_field/module.f.js +78 -0
- package/crypto/prime_field/test.f.d.ts +13 -0
- package/crypto/prime_field/test.f.js +149 -0
- package/crypto/secp/module.f.d.ts +68 -0
- package/crypto/secp/module.f.js +127 -0
- package/crypto/secp/test.f.d.ts +5 -0
- package/crypto/secp/test.f.js +72 -0
- package/crypto/sha2/module.f.d.ts +13 -0
- package/crypto/sha2/module.f.js +145 -0
- package/crypto/sha2/test.f.d.ts +9 -0
- package/crypto/sha2/test.f.js +82 -0
- package/dev/module.f.d.ts +1 -0
- package/dev/module.f.js +1 -0
- package/dev/test/module.f.d.ts +20 -0
- package/dev/test/module.f.js +75 -0
- package/dev/test.f.d.ts +9 -0
- package/dev/{test.f.ts → test.f.js} +22 -24
- package/djs/module.f.d.ts +17 -0
- package/djs/module.f.js +63 -0
- package/djs/parser/module.f.d.ts +12 -0
- package/djs/parser/module.f.js +333 -0
- package/djs/parser/test.f.d.ts +12 -0
- package/djs/parser/test.f.js +717 -0
- package/djs/serializer/module.f.d.ts +9 -0
- package/djs/serializer/module.f.js +81 -0
- package/djs/test/input.f.d.ts +2 -0
- package/djs/test/input.f.js +4 -0
- package/djs/test/m.f.d.ts +2 -0
- package/djs/test/m.f.js +1 -0
- package/djs/test.f.d.ts +12 -0
- package/djs/test.f.js +84 -0
- package/djs/tokenizer/module.f.d.ts +8 -0
- package/djs/tokenizer/module.f.js +60 -0
- package/djs/tokenizer/test.f.d.ts +7 -0
- package/djs/tokenizer/test.f.js +529 -0
- package/fsc/module.f.d.ts +5 -0
- package/fsc/module.f.js +75 -0
- package/fsc/test.f.d.ts +4 -0
- package/fsc/test.f.js +19 -0
- package/fsm/module.f.d.ts +13 -0
- package/fsm/module.f.js +59 -0
- package/fsm/test.f.d.ts +5 -0
- package/fsm/test.f.js +137 -0
- package/html/module.f.d.ts +13 -0
- package/html/module.f.js +58 -0
- package/html/test.f.d.ts +9 -0
- package/html/test.f.js +42 -0
- package/issues/test.f.d.ts +16 -0
- package/issues/test.f.js +70 -0
- package/js/tokenizer/module.f.d.ts +86 -0
- package/js/tokenizer/module.f.js +503 -0
- package/js/tokenizer/test.f.d.ts +9 -0
- package/js/tokenizer/test.f.js +905 -0
- package/json/module.f.d.ts +20 -0
- package/json/module.f.js +68 -0
- package/json/parser/module.f.d.ts +5 -0
- package/json/parser/module.f.js +155 -0
- package/json/parser/test.f.d.ts +5 -0
- package/json/parser/test.f.js +328 -0
- package/json/serializer/module.f.d.ts +7 -0
- package/json/serializer/module.f.js +21 -0
- package/json/serializer/test.f.d.ts +8 -0
- package/json/serializer/test.f.js +87 -0
- package/json/test.f.d.ts +8 -0
- package/json/test.f.js +61 -0
- package/json/tokenizer/module.f.d.ts +8 -0
- package/json/tokenizer/module.f.js +52 -0
- package/json/tokenizer/test.f.d.ts +6 -0
- package/json/tokenizer/test.f.js +419 -0
- package/nanvm-lib/tests/test.f.d.ts +27 -0
- package/nanvm-lib/tests/test.f.js +84 -0
- package/nodejs/version/module.f.d.ts +11 -0
- package/nodejs/version/module.f.js +16 -0
- package/nodejs/version/test.f.d.ts +2 -0
- package/nodejs/version/{test.f.ts → test.f.js} +13 -22
- package/package.json +9 -5
- package/text/ascii/module.f.d.ts +129 -0
- package/text/ascii/module.f.js +148 -0
- package/text/ascii/test.f.d.ts +4 -0
- package/text/ascii/test.f.js +14 -0
- package/text/module.f.d.ts +8 -0
- package/text/module.f.js +10 -0
- package/text/sgr/module.f.d.ts +8 -0
- package/text/sgr/module.f.js +8 -0
- package/text/test.f.d.ts +2 -0
- package/text/test.f.js +18 -0
- package/text/utf16/module.f.d.ts +9 -0
- package/text/utf16/module.f.js +66 -0
- package/text/utf16/test.f.d.ts +6 -0
- package/text/utf16/test.f.js +144 -0
- package/text/utf8/module.f.d.ts +6 -0
- package/text/utf8/module.f.js +112 -0
- package/text/utf8/test.f.d.ts +6 -0
- package/text/utf8/test.f.js +175 -0
- package/types/array/module.f.d.ts +21 -0
- package/types/array/module.f.js +23 -0
- package/types/array/test.f.d.ts +10 -0
- package/types/array/test.f.js +116 -0
- package/types/bigfloat/module.f.d.ts +3 -0
- package/types/bigfloat/module.f.js +66 -0
- package/types/bigfloat/test.f.d.ts +6 -0
- package/types/bigfloat/test.f.js +349 -0
- package/types/bigint/module.f.d.ts +54 -0
- package/types/bigint/{module.f.ts → module.f.js} +42 -65
- package/types/bigint/test.f.d.ts +16 -0
- package/types/bigint/test.f.js +199 -0
- package/types/bit_vec/module.f.d.ts +134 -0
- package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
- package/types/bit_vec/test.f.d.ts +22 -0
- package/types/bit_vec/test.f.js +210 -0
- package/types/btree/find/module.f.d.ts +20 -0
- package/types/btree/find/module.f.js +84 -0
- package/types/btree/find/test.f.d.ts +2 -0
- package/types/btree/find/test.f.js +152 -0
- package/types/btree/module.f.d.ts +4 -0
- package/types/btree/module.f.js +31 -0
- package/types/btree/remove/module.f.d.ts +4 -0
- package/types/btree/remove/module.f.js +174 -0
- package/types/btree/remove/test.f.d.ts +5 -0
- package/types/btree/remove/test.f.js +634 -0
- package/types/btree/set/module.f.d.ts +3 -0
- package/types/btree/set/module.f.js +103 -0
- package/types/btree/set/test.f.d.ts +2 -0
- package/types/btree/set/test.f.js +360 -0
- package/types/btree/test.f.d.ts +8 -0
- package/types/btree/test.f.js +75 -0
- package/types/btree/types/module.f.d.ts +11 -0
- package/types/btree/types/module.f.js +1 -0
- package/types/byte_set/module.f.d.ts +16 -0
- package/types/byte_set/module.f.js +28 -0
- package/types/byte_set/test.f.d.ts +12 -0
- package/types/byte_set/test.f.js +122 -0
- package/types/function/compare/module.f.d.ts +10 -0
- package/types/function/compare/module.f.js +7 -0
- package/types/function/compare/test.f.d.ts +2 -0
- package/types/function/compare/test.f.js +8 -0
- package/types/function/module.f.d.ts +28 -0
- package/types/function/module.f.js +19 -0
- package/types/function/operator/module.f.d.ts +20 -0
- package/types/function/operator/module.f.js +18 -0
- package/types/function/test.f.d.ts +2 -0
- package/types/function/test.f.js +12 -0
- package/types/list/module.f.d.ts +50 -0
- package/types/list/module.f.js +171 -0
- package/types/list/test.f.d.ts +22 -0
- package/types/list/test.f.js +395 -0
- package/types/map/module.f.d.ts +14 -0
- package/types/map/module.f.js +31 -0
- package/types/map/test.f.d.ts +5 -0
- package/types/map/test.f.js +114 -0
- package/types/nibble_set/module.f.d.ts +10 -0
- package/types/nibble_set/module.f.js +9 -0
- package/types/nibble_set/test.f.d.ts +12 -0
- package/types/nibble_set/test.f.js +90 -0
- package/types/nullable/module.f.d.ts +3 -0
- package/types/nullable/module.f.js +2 -0
- package/types/nullable/test.f.d.ts +2 -0
- package/types/nullable/test.f.js +12 -0
- package/types/number/module.f.d.ts +6 -0
- package/types/number/module.f.js +8 -0
- package/types/number/test.f.d.ts +11 -0
- package/types/number/test.f.js +124 -0
- package/types/object/module.f.d.ts +10 -0
- package/types/object/module.f.js +12 -0
- package/types/object/test.f.d.ts +5 -0
- package/types/object/test.f.js +17 -0
- package/types/range/module.f.d.ts +3 -0
- package/types/range/module.f.js +2 -0
- package/types/range/test.f.d.ts +2 -0
- package/types/range/test.f.js +18 -0
- package/types/range_map/module.f.d.ts +14 -0
- package/types/range_map/module.f.js +51 -0
- package/types/range_map/test.f.d.ts +6 -0
- package/types/range_map/test.f.js +176 -0
- package/types/result/module.f.d.ts +7 -0
- package/types/result/module.f.js +8 -0
- package/types/sorted_list/module.f.d.ts +16 -0
- package/types/sorted_list/module.f.js +56 -0
- package/types/sorted_list/test.f.d.ts +5 -0
- package/types/sorted_list/test.f.js +64 -0
- package/types/sorted_set/module.f.d.ts +7 -0
- package/types/sorted_set/module.f.js +14 -0
- package/types/sorted_set/test.f.d.ts +6 -0
- package/types/sorted_set/test.f.js +78 -0
- package/types/string/module.f.d.ts +6 -0
- package/types/string/module.f.js +11 -0
- package/types/string/test.f.d.ts +15 -0
- package/types/string/test.f.js +58 -0
- package/types/string_set/module.f.d.ts +9 -0
- package/types/string_set/module.f.js +22 -0
- package/types/string_set/test.f.d.ts +5 -0
- package/types/string_set/test.f.js +65 -0
- package/.github/FUNDING.yml +0 -12
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -88
- package/.github/workflows/npm-publish.yml +0 -53
- package/CHANGELOG.md +0 -29
- package/Cargo.lock +0 -18
- package/Cargo.toml +0 -7
- package/com/README.md +0 -3
- package/com/cpp/README.md +0 -80
- package/com/cpp/module.f.ts +0 -180
- package/com/cpp/nanocom.hpp +0 -195
- package/com/cpp/testlib.f.ts +0 -8
- package/com/cs/module.f.ts +0 -145
- package/com/cs/testlib.f.ts +0 -8
- package/com/proposals.md +0 -28
- package/com/rust/module.f.ts +0 -287
- package/com/rust/nanocom/Cargo.lock +0 -7
- package/com/rust/nanocom/Cargo.toml +0 -15
- package/com/rust/nanocom/README.md +0 -56
- package/com/rust/nanocom/src/class.rs +0 -6
- package/com/rust/nanocom/src/cobject.rs +0 -90
- package/com/rust/nanocom/src/guid.rs +0 -15
- package/com/rust/nanocom/src/hresult.rs +0 -7
- package/com/rust/nanocom/src/interface.rs +0 -9
- package/com/rust/nanocom/src/iunknown.rs +0 -13
- package/com/rust/nanocom/src/lib.rs +0 -20
- package/com/rust/nanocom/src/object.rs +0 -34
- package/com/rust/nanocom/src/ref.rs +0 -57
- package/com/rust/nanocom/src/vmt.rs +0 -7
- package/com/rust/nanocom/tests/it.rs +0 -186
- package/com/rust/nanocom/tests/itmod.rs +0 -195
- package/com/rust/testlib.f.ts +0 -8
- package/com/test/build.f.ts +0 -111
- package/com/test/build.ts +0 -45
- package/com/test/cpp/main.cpp +0 -74
- package/com/test/cs/Program.cs +0 -31
- package/com/test/cs/cs.csproj +0 -16
- package/com/test/rust/Cargo.toml +0 -12
- package/com/test/rust/src/lib.rs +0 -56
- package/com/types/module.f.ts +0 -62
- package/commonjs/README.md +0 -94
- package/commonjs/build/module.f.ts +0 -100
- package/commonjs/build/test.f.ts +0 -107
- package/commonjs/module/module.f.ts +0 -41
- package/commonjs/module.f.ts +0 -7
- package/commonjs/module.ts +0 -31
- package/commonjs/package/dependencies/module.f.ts +0 -22
- package/commonjs/package/dependencies/test.f.ts +0 -8
- package/commonjs/package/module.f.ts +0 -31
- package/commonjs/package/test.f.ts +0 -12
- package/commonjs/path/README.md +0 -17
- package/commonjs/path/module.f.ts +0 -171
- package/commonjs/test.ts +0 -64
- package/crypto/README.md +0 -3
- package/crypto/prime_field/module.f.ts +0 -114
- package/crypto/prime_field/test.f.ts +0 -95
- package/crypto/secp/module.f.ts +0 -182
- package/crypto/secp/test.f.ts +0 -68
- package/crypto/sha2/module.f.ts +0 -215
- package/crypto/sha2/test.f.ts +0 -83
- package/deno.json +0 -71
- package/dev/README.md +0 -8
- package/dev/index.ts +0 -3
- package/dev/module.f.ts +0 -1
- package/dev/module.ts +0 -196
- package/dev/test/module.f.ts +0 -135
- package/dev/test.ts +0 -53
- package/djs/README.md +0 -54
- package/djs/module.f.ts +0 -76
- package/djs/parser/module.f.ts +0 -509
- package/djs/parser/test.f.ts +0 -461
- package/djs/serializer/module.f.ts +0 -90
- package/djs/test.f.ts +0 -67
- package/djs/tokenizer/module.f.ts +0 -99
- package/djs/tokenizer/test.f.ts +0 -364
- package/doc/LANGUAGE.md +0 -255
- package/doc/README.md +0 -61
- package/doc/byte-code.md +0 -59
- package/doc/fa.md +0 -174
- package/doc/predefined.md +0 -143
- package/doc/proposals.md +0 -21
- package/doc/vm/README.md +0 -24
- package/doc/vm-rearchitecture.md +0 -129
- package/doc/vm.md +0 -150
- package/fsc/README.md +0 -111
- package/fsc/module.f.ts +0 -122
- package/fsc/test.f.ts +0 -21
- package/fsm/README.md +0 -113
- package/fsm/module.f.ts +0 -107
- package/fsm/test.f.ts +0 -139
- package/funding.json +0 -61
- package/html/README.md +0 -32
- package/html/module.f.ts +0 -109
- package/html/test.f.ts +0 -37
- package/issues/01-test-debug.md +0 -3
- package/issues/02-esm.md +0 -8
- package/issues/03-djs.md +0 -57
- package/issues/05-publish.md +0 -40
- package/issues/11-fs-load.md +0 -13
- package/issues/17-djs-extension.md +0 -6
- package/issues/README.md +0 -42
- package/issues/lang/1000-json.md +0 -50
- package/issues/lang/2110-default-export.md +0 -11
- package/issues/lang/2120-const.md +0 -14
- package/issues/lang/2130-default-import.md +0 -10
- package/issues/lang/2210-block-comment.md +0 -12
- package/issues/lang/2220-namespace-import.md +0 -25
- package/issues/lang/2310-undefined.md +0 -7
- package/issues/lang/2320-bigint.md +0 -7
- package/issues/lang/2330-property-accessor.md +0 -225
- package/issues/lang/2340-operators.md +0 -41
- package/issues/lang/2350-grouping.md +0 -11
- package/issues/lang/2360-built-in.md +0 -81
- package/issues/lang/2410-identifier-property.md +0 -9
- package/issues/lang/2420-line-comment.md +0 -10
- package/issues/lang/2430-trailing-comma.md +0 -13
- package/issues/lang/2440-shorthand.md +0 -8
- package/issues/lang/2450-destructuring.md +0 -12
- package/issues/lang/3110-function.md +0 -35
- package/issues/lang/3120-parameters.md +0 -9
- package/issues/lang/3130-body-const.md +0 -12
- package/issues/lang/3220-let.md +0 -11
- package/issues/lang/3240-export.md +0 -44
- package/issues/lang/3370-type-inference.md +0 -69
- package/issues/lang/3380-promise.md +0 -22
- package/issues/lang/3390-class.md +0 -3
- package/issues/lang/3410-expression.md +0 -12
- package/issues/lang/3420-one-parameter.md +0 -10
- package/issues/lang/3430-assignments.md +0 -23
- package/issues/lang/README.md +0 -193
- package/issues/test.f.ts +0 -58
- package/js/tokenizer/module.f.ts +0 -882
- package/js/tokenizer/test.f.ts +0 -617
- package/json/html/README.md +0 -49
- package/json/module.f.ts +0 -94
- package/json/parser/module.f.ts +0 -221
- package/json/parser/test.f.ts +0 -255
- package/json/serializer/module.f.ts +0 -74
- package/json/serializer/test.f.ts +0 -64
- package/json/test.f.ts +0 -48
- package/json/tokenizer/module.f.ts +0 -85
- package/json/tokenizer/test.f.ts +0 -290
- package/nanvm-lib/Cargo.toml +0 -6
- package/nanvm-lib/src/extension.rs +0 -130
- package/nanvm-lib/src/interface.rs +0 -133
- package/nanvm-lib/src/lib.rs +0 -7
- package/nanvm-lib/src/naive.rs +0 -236
- package/nanvm-lib/src/nanenum.rs +0 -236
- package/nanvm-lib/src/nullish.rs +0 -7
- package/nanvm-lib/src/sign.rs +0 -5
- package/nanvm-lib/src/simple.rs +0 -32
- package/nanvm-lib/tests/test.f.ts +0 -80
- package/nanvm-lib/tests/test.rs +0 -108
- package/nodejs/version/main.ts +0 -4
- package/nodejs/version/module.f.ts +0 -42
- package/text/README.md +0 -110
- package/text/ascii/module.f.ts +0 -222
- package/text/ascii/test.f.ts +0 -14
- package/text/module.f.ts +0 -30
- package/text/sgr/README.md +0 -3
- package/text/sgr/module.f.ts +0 -13
- package/text/test.f.ts +0 -19
- package/text/utf16/module.f.ts +0 -120
- package/text/utf16/test.f.ts +0 -107
- package/text/utf8/module.f.ts +0 -116
- package/text/utf8/test.f.ts +0 -125
- package/tsconfig.json +0 -104
- package/types/array/module.f.ts +0 -89
- package/types/array/test.f.ts +0 -88
- package/types/bigfloat/module.f.ts +0 -93
- package/types/bigfloat/test.f.ts +0 -218
- package/types/bigint/README.md +0 -35
- package/types/bigint/test.f.ts +0 -144
- package/types/bit_vec/README.md +0 -18
- package/types/bit_vec/test.f.ts +0 -129
- package/types/btree/README.md +0 -160
- package/types/btree/find/module.f.ts +0 -92
- package/types/btree/find/test.f.ts +0 -122
- package/types/btree/module.f.ts +0 -35
- package/types/btree/remove/module.f.ts +0 -151
- package/types/btree/remove/test.f.ts +0 -498
- package/types/btree/set/module.f.ts +0 -89
- package/types/btree/set/test.f.ts +0 -415
- package/types/btree/test.f.ts +0 -92
- package/types/btree/types/module.f.ts +0 -27
- package/types/byte_set/module.f.ts +0 -73
- package/types/byte_set/test.f.ts +0 -84
- package/types/function/compare/module.f.ts +0 -26
- package/types/function/compare/test.f.ts +0 -7
- package/types/function/module.f.ts +0 -43
- package/types/function/operator/module.f.ts +0 -65
- package/types/function/test.f.ts +0 -20
- package/types/list/module.f.ts +0 -350
- package/types/list/test.f.ts +0 -327
- package/types/map/module.f.ts +0 -65
- package/types/map/test.f.ts +0 -76
- package/types/nibble_set/module.f.ts +0 -34
- package/types/nibble_set/test.f.ts +0 -57
- package/types/nullable/module.f.ts +0 -9
- package/types/nullable/test.f.ts +0 -9
- package/types/number/module.f.ts +0 -20
- package/types/number/test.f.ts +0 -194
- package/types/object/module.f.ts +0 -30
- package/types/object/test.f.ts +0 -14
- package/types/range/module.f.ts +0 -10
- package/types/range/test.f.ts +0 -9
- package/types/range_map/module.f.ts +0 -70
- package/types/range_map/test.f.ts +0 -189
- package/types/result/module.f.ts +0 -20
- package/types/result/module.ts +0 -18
- package/types/sorted_list/module.f.ts +0 -83
- package/types/sorted_list/test.f.ts +0 -57
- package/types/sorted_set/module.f.ts +0 -36
- package/types/sorted_set/test.f.ts +0 -67
- package/types/string/module.f.ts +0 -26
- package/types/string/test.f.ts +0 -43
- package/types/string_set/module.f.ts +0 -37
- package/types/string_set/test.f.ts +0 -34
package/json/module.f.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
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)
|
package/json/parser/module.f.ts
DELETED
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import * as result from '../../types/result/module.f.ts'
|
|
2
|
-
import * as list from '../../types/list/module.f.ts'
|
|
3
|
-
const { fold, first, drop, toArray } = list
|
|
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'
|
|
7
|
-
const { setReplace } = map
|
|
8
|
-
import * as Json from '../module.f.ts'
|
|
9
|
-
import * as o from '../../types/object/module.f.ts'
|
|
10
|
-
const { fromMap } = o
|
|
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]) })
|
|
61
|
-
|
|
62
|
-
const pushKey
|
|
63
|
-
: (state: StateParse) => (key: string) => JsonState
|
|
64
|
-
= state => value => {
|
|
65
|
-
if (state.top?.kind === 'object') { return { status: '{k', top: addKeyToObject(state.top)(value), stack: state.stack } }
|
|
66
|
-
return { status: 'error', message: 'error' }
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const pushValue
|
|
70
|
-
: (state: StateParse) => (value: Json.Unknown) => JsonState
|
|
71
|
-
= state => value => {
|
|
72
|
-
if (state.top === null) { return { status: 'result', value: value } }
|
|
73
|
-
if (state.top.kind === 'array') { return { status: '[v', top: addToArray(state.top)(value), stack: state.stack } }
|
|
74
|
-
return { status: '{v', top: addValueToObject(state.top)(value), stack: state.stack }
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const startArray
|
|
78
|
-
: (state: StateParse) => JsonState
|
|
79
|
-
= state => {
|
|
80
|
-
const newStack = state.top === null ? null : { first: state.top, tail: state.stack }
|
|
81
|
-
return { status: '[', top: { kind: 'array', values: null }, stack: newStack }
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const endArray
|
|
85
|
-
: (state: StateParse) => JsonState
|
|
86
|
-
= state => {
|
|
87
|
-
const array = state.top !== null ? toArray(state.top.values) : null
|
|
88
|
-
const newState
|
|
89
|
-
: StateParse
|
|
90
|
-
= { status: '', top: first(null)(state.stack), stack: drop(1)(state.stack) }
|
|
91
|
-
return pushValue(newState)(array)
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const startObject
|
|
95
|
-
: (state: StateParse) => JsonState
|
|
96
|
-
= state => {
|
|
97
|
-
const newStack = state.top === null ? null : { first: state.top, tail: state.stack }
|
|
98
|
-
return { status: '{', top: { kind: 'object', values: null, key: '' }, stack: newStack }
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const endObject
|
|
102
|
-
: (state: StateParse) => JsonState
|
|
103
|
-
= state => {
|
|
104
|
-
const obj = state.top?.kind === 'object' ? fromMap(state.top.values) : null
|
|
105
|
-
const newState
|
|
106
|
-
: StateParse
|
|
107
|
-
= { status: '', top: first(null)(state.stack), stack: drop(1)(state.stack) }
|
|
108
|
-
return pushValue(newState)(obj)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const tokenToValue
|
|
112
|
-
: (token: Tokenizer.JsonToken) => Json.Unknown
|
|
113
|
-
= token => {
|
|
114
|
-
switch (token.kind) {
|
|
115
|
-
case 'null': return null
|
|
116
|
-
case 'false': return false
|
|
117
|
-
case 'true': return true
|
|
118
|
-
case 'number': return parseFloat(token.value)
|
|
119
|
-
case 'string': return token.value
|
|
120
|
-
default: return null
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const isValueToken
|
|
125
|
-
: (token: Tokenizer.JsonToken) => boolean
|
|
126
|
-
= token => {
|
|
127
|
-
switch (token.kind) {
|
|
128
|
-
case 'null':
|
|
129
|
-
case 'false':
|
|
130
|
-
case 'true':
|
|
131
|
-
case 'number':
|
|
132
|
-
case 'string': return true
|
|
133
|
-
default: return false
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const parseValueOp
|
|
138
|
-
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
139
|
-
= token => state => {
|
|
140
|
-
if (isValueToken(token)) { return pushValue(state)(tokenToValue(token)) }
|
|
141
|
-
if (token.kind === '[') { return startArray(state) }
|
|
142
|
-
if (token.kind === '{') { return startObject(state) }
|
|
143
|
-
return { status: 'error', message: 'unexpected token' }
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const parseArrayStartOp
|
|
147
|
-
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
148
|
-
= token => state => {
|
|
149
|
-
if (isValueToken(token)) { return pushValue(state)(tokenToValue(token)) }
|
|
150
|
-
if (token.kind === '[') { return startArray(state) }
|
|
151
|
-
if (token.kind === ']') { return endArray(state) }
|
|
152
|
-
if (token.kind === '{') { return startObject(state) }
|
|
153
|
-
return { status: 'error', message: 'unexpected token' }
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const parseArrayValueOp
|
|
157
|
-
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
158
|
-
= token => state => {
|
|
159
|
-
if (token.kind === ']') { return endArray(state) }
|
|
160
|
-
if (token.kind === ',') { return { status: '[,', top: state.top, stack: state.stack } }
|
|
161
|
-
return { status: 'error', message: 'unexpected token' }
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const parseObjectStartOp
|
|
165
|
-
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
166
|
-
= token => state => {
|
|
167
|
-
if (token.kind === 'string') { return pushKey(state)(token.value) }
|
|
168
|
-
if (token.kind === '}') { return endObject(state) }
|
|
169
|
-
return { status: 'error', message: 'unexpected token' }
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const parseObjectKeyOp
|
|
173
|
-
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
174
|
-
= token => state => {
|
|
175
|
-
if (token.kind === ':') { return { status: '{:', top: state.top, stack: state.stack } }
|
|
176
|
-
return { status: 'error', message: 'unexpected token' }
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
const parseObjectNextOp
|
|
180
|
-
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
181
|
-
= token => state => {
|
|
182
|
-
if (token.kind === '}') { return endObject(state) }
|
|
183
|
-
if (token.kind === ',') { return { status: '{,', top: state.top, stack: state.stack } }
|
|
184
|
-
return { status: 'error', message: 'unexpected token' }
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const parseObjectCommaOp
|
|
188
|
-
: (token: Tokenizer.JsonToken) => (state: StateParse) => JsonState
|
|
189
|
-
= token => state => {
|
|
190
|
-
if (token.kind === 'string') { return pushKey(state)(token.value) }
|
|
191
|
-
return { status: 'error', message: 'unexpected token' }
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
const foldOp
|
|
195
|
-
: Operator.Fold<Tokenizer.JsonToken, JsonState>
|
|
196
|
-
= token => state => {
|
|
197
|
-
switch (state.status) {
|
|
198
|
-
case 'result': return { status: 'error', message: 'unexpected token' }
|
|
199
|
-
case 'error': return { status: 'error', message: state.message }
|
|
200
|
-
case '': return parseValueOp(token)(state)
|
|
201
|
-
case '[': return parseArrayStartOp(token)(state)
|
|
202
|
-
case '[v': return parseArrayValueOp(token)(state)
|
|
203
|
-
case '[,': return parseValueOp(token)(state)
|
|
204
|
-
case '{': return parseObjectStartOp(token)(state)
|
|
205
|
-
case '{k': return parseObjectKeyOp(token)(state)
|
|
206
|
-
case '{:': return parseValueOp(token)(state)
|
|
207
|
-
case '{v': return parseObjectNextOp(token)(state)
|
|
208
|
-
case '{,': return parseObjectCommaOp(token)(state)
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
export const parse
|
|
213
|
-
: (tokenList: list.List<Tokenizer.JsonToken>) => result.Result<Json.Unknown, string>
|
|
214
|
-
= tokenList => {
|
|
215
|
-
const state = fold(foldOp)({ status: '', top: null, stack: null })(tokenList)
|
|
216
|
-
switch (state.status) {
|
|
217
|
-
case 'result': return result.ok(state.value)
|
|
218
|
-
case 'error': return result.error(state.message)
|
|
219
|
-
default: return result.error('unexpected end')
|
|
220
|
-
}
|
|
221
|
-
}
|
package/json/parser/test.f.ts
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
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
|
-
const { toArray } = list
|
|
5
|
-
import * as json from '../module.f.ts'
|
|
6
|
-
import * as o from '../../types/object/module.f.ts'
|
|
7
|
-
const { sort } = o
|
|
8
|
-
import * as encoding from '../../text/utf16/module.f.ts'
|
|
9
|
-
|
|
10
|
-
const tokenizeString
|
|
11
|
-
: (s: string) => readonly tokenizer.JsonToken[]
|
|
12
|
-
= s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
|
|
13
|
-
|
|
14
|
-
const stringify = json.stringify(sort)
|
|
15
|
-
|
|
16
|
-
export default {
|
|
17
|
-
valid: [
|
|
18
|
-
() => {
|
|
19
|
-
const tokenList = tokenizeString('null')
|
|
20
|
-
const obj = parser.parse(tokenList)
|
|
21
|
-
const result = stringify(obj)
|
|
22
|
-
if (result !== '["ok",null]') { throw result }
|
|
23
|
-
},
|
|
24
|
-
() => {
|
|
25
|
-
const tokenList = tokenizeString('true')
|
|
26
|
-
const obj = parser.parse(tokenList)
|
|
27
|
-
const result = stringify(obj)
|
|
28
|
-
if (result !== '["ok",true]') { throw result }
|
|
29
|
-
},
|
|
30
|
-
() => {
|
|
31
|
-
const tokenList = tokenizeString('false')
|
|
32
|
-
const obj = parser.parse(tokenList)
|
|
33
|
-
const result = stringify(obj)
|
|
34
|
-
if (result !== '["ok",false]') { throw result }
|
|
35
|
-
},
|
|
36
|
-
() => {
|
|
37
|
-
const tokenList = tokenizeString('0.1')
|
|
38
|
-
const obj = parser.parse(tokenList)
|
|
39
|
-
const result = stringify(obj)
|
|
40
|
-
if (result !== '["ok",0.1]') { throw result }
|
|
41
|
-
},
|
|
42
|
-
() => {
|
|
43
|
-
const tokenList = tokenizeString('1.1e+2')
|
|
44
|
-
const obj = parser.parse(tokenList)
|
|
45
|
-
const result = stringify(obj)
|
|
46
|
-
if (result !== '["ok",110]') { throw result }
|
|
47
|
-
},
|
|
48
|
-
() => {
|
|
49
|
-
const tokenList = tokenizeString('"abc"')
|
|
50
|
-
const obj = parser.parse(tokenList)
|
|
51
|
-
const result = stringify(obj)
|
|
52
|
-
if (result !== '["ok","abc"]') { throw result }
|
|
53
|
-
},
|
|
54
|
-
() => {
|
|
55
|
-
const tokenList = tokenizeString('[]')
|
|
56
|
-
const obj = parser.parse(tokenList)
|
|
57
|
-
const result = stringify(obj)
|
|
58
|
-
if (result !== '["ok",[]]') { throw result }
|
|
59
|
-
},
|
|
60
|
-
() => {
|
|
61
|
-
const tokenList = tokenizeString('[1]')
|
|
62
|
-
const obj = parser.parse(tokenList)
|
|
63
|
-
const result = stringify(obj)
|
|
64
|
-
if (result !== '["ok",[1]]') { throw result }
|
|
65
|
-
},
|
|
66
|
-
() => {
|
|
67
|
-
const tokenList = tokenizeString('[[]]')
|
|
68
|
-
const obj = parser.parse(tokenList)
|
|
69
|
-
const result = stringify(obj)
|
|
70
|
-
if (result !== '["ok",[[]]]') { throw result }
|
|
71
|
-
},
|
|
72
|
-
() => {
|
|
73
|
-
const tokenList = tokenizeString('[0,[1,[2,[]]],3]')
|
|
74
|
-
const obj = parser.parse(tokenList)
|
|
75
|
-
const result = stringify(obj)
|
|
76
|
-
if (result !== '["ok",[0,[1,[2,[]]],3]]') { throw result }
|
|
77
|
-
},
|
|
78
|
-
() => {
|
|
79
|
-
const tokenList = tokenizeString('{}')
|
|
80
|
-
const obj = parser.parse(tokenList)
|
|
81
|
-
const result = stringify(obj)
|
|
82
|
-
if (result !== '["ok",{}]') { throw result }
|
|
83
|
-
},
|
|
84
|
-
() => {
|
|
85
|
-
const tokenList = tokenizeString('[{}]')
|
|
86
|
-
const obj = parser.parse(tokenList)
|
|
87
|
-
const result = stringify(obj)
|
|
88
|
-
if (result !== '["ok",[{}]]') { throw result }
|
|
89
|
-
},
|
|
90
|
-
() => {
|
|
91
|
-
const tokenList = tokenizeString('{"a":true,"b":false,"c":null}')
|
|
92
|
-
const obj = parser.parse(tokenList)
|
|
93
|
-
const result = stringify(obj)
|
|
94
|
-
if (result !== '["ok",{"a":true,"b":false,"c":null}]') { throw result }
|
|
95
|
-
},
|
|
96
|
-
() => {
|
|
97
|
-
const tokenList = tokenizeString('{"a":{"b":{"c":["d"]}}}')
|
|
98
|
-
const obj = parser.parse(tokenList)
|
|
99
|
-
const result = stringify(obj)
|
|
100
|
-
if (result !== '["ok",{"a":{"b":{"c":["d"]}}}]') { throw result }
|
|
101
|
-
}
|
|
102
|
-
],
|
|
103
|
-
invalid: [
|
|
104
|
-
() => {
|
|
105
|
-
const tokenList = tokenizeString('')
|
|
106
|
-
const obj = parser.parse(tokenList)
|
|
107
|
-
const result = stringify(obj)
|
|
108
|
-
if (result !== '["error","unexpected end"]') { throw result }
|
|
109
|
-
},
|
|
110
|
-
() => {
|
|
111
|
-
const tokenList = tokenizeString('"123')
|
|
112
|
-
const obj = parser.parse(tokenList)
|
|
113
|
-
const result = stringify(obj)
|
|
114
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
115
|
-
},
|
|
116
|
-
() => {
|
|
117
|
-
const tokenList = tokenizeString('[,]')
|
|
118
|
-
const obj = parser.parse(tokenList)
|
|
119
|
-
const result = stringify(obj)
|
|
120
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
121
|
-
},
|
|
122
|
-
() => {
|
|
123
|
-
const tokenList = tokenizeString('[1 2]')
|
|
124
|
-
const obj = parser.parse(tokenList)
|
|
125
|
-
const result = stringify(obj)
|
|
126
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
127
|
-
},
|
|
128
|
-
() => {
|
|
129
|
-
const tokenList = tokenizeString('[1,,2]')
|
|
130
|
-
const obj = parser.parse(tokenList)
|
|
131
|
-
const result = stringify(obj)
|
|
132
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
133
|
-
},
|
|
134
|
-
() => {
|
|
135
|
-
const tokenList = tokenizeString('[]]')
|
|
136
|
-
const obj = parser.parse(tokenList)
|
|
137
|
-
const result = stringify(obj)
|
|
138
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
139
|
-
},
|
|
140
|
-
() => {
|
|
141
|
-
const tokenList = tokenizeString('["a"')
|
|
142
|
-
const obj = parser.parse(tokenList)
|
|
143
|
-
const result = stringify(obj)
|
|
144
|
-
if (result !== '["error","unexpected end"]') { throw result }
|
|
145
|
-
},
|
|
146
|
-
() => {
|
|
147
|
-
const tokenList = tokenizeString('[1,]')
|
|
148
|
-
const obj = parser.parse(tokenList)
|
|
149
|
-
const result = stringify(obj)
|
|
150
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
151
|
-
},
|
|
152
|
-
() => {
|
|
153
|
-
const tokenList = tokenizeString('[,1]')
|
|
154
|
-
const obj = parser.parse(tokenList)
|
|
155
|
-
const result = stringify(obj)
|
|
156
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
157
|
-
},
|
|
158
|
-
() => {
|
|
159
|
-
const tokenList = tokenizeString('[:]')
|
|
160
|
-
const obj = parser.parse(tokenList)
|
|
161
|
-
const result = stringify(obj)
|
|
162
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
163
|
-
},
|
|
164
|
-
() => {
|
|
165
|
-
const tokenList = tokenizeString(']')
|
|
166
|
-
const obj = parser.parse(tokenList)
|
|
167
|
-
const result = stringify(obj)
|
|
168
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
169
|
-
},
|
|
170
|
-
() => {
|
|
171
|
-
const tokenList = tokenizeString('{,}')
|
|
172
|
-
const obj = parser.parse(tokenList)
|
|
173
|
-
const result = stringify(obj)
|
|
174
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
175
|
-
},
|
|
176
|
-
() => {
|
|
177
|
-
const tokenList = tokenizeString('{1:2}')
|
|
178
|
-
const obj = parser.parse(tokenList)
|
|
179
|
-
const result = stringify(obj)
|
|
180
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
181
|
-
},
|
|
182
|
-
() => {
|
|
183
|
-
const tokenList = tokenizeString('{"1"2}')
|
|
184
|
-
const obj = parser.parse(tokenList)
|
|
185
|
-
const result = stringify(obj)
|
|
186
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
187
|
-
},
|
|
188
|
-
() => {
|
|
189
|
-
const tokenList = tokenizeString('{"1"::2}')
|
|
190
|
-
const obj = parser.parse(tokenList)
|
|
191
|
-
const result = stringify(obj)
|
|
192
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
193
|
-
},
|
|
194
|
-
() => {
|
|
195
|
-
const tokenList = tokenizeString('{"1":2,,"3":4')
|
|
196
|
-
const obj = parser.parse(tokenList)
|
|
197
|
-
const result = stringify(obj)
|
|
198
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
199
|
-
},
|
|
200
|
-
() => {
|
|
201
|
-
const tokenList = tokenizeString('{}}')
|
|
202
|
-
const obj = parser.parse(tokenList)
|
|
203
|
-
const result = stringify(obj)
|
|
204
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
205
|
-
},
|
|
206
|
-
() => {
|
|
207
|
-
const tokenList = tokenizeString('{"1":2')
|
|
208
|
-
const obj = parser.parse(tokenList)
|
|
209
|
-
const result = stringify(obj)
|
|
210
|
-
if (result !== '["error","unexpected end"]') { throw result }
|
|
211
|
-
},
|
|
212
|
-
() => {
|
|
213
|
-
const tokenList = tokenizeString('{"1":2,}')
|
|
214
|
-
const obj = parser.parse(tokenList)
|
|
215
|
-
const result = stringify(obj)
|
|
216
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
217
|
-
},
|
|
218
|
-
() => {
|
|
219
|
-
const tokenList = tokenizeString('{,"1":2}')
|
|
220
|
-
const obj = parser.parse(tokenList)
|
|
221
|
-
const result = stringify(obj)
|
|
222
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
223
|
-
},
|
|
224
|
-
() => {
|
|
225
|
-
const tokenList = tokenizeString('}')
|
|
226
|
-
const obj = parser.parse(tokenList)
|
|
227
|
-
const result = stringify(obj)
|
|
228
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
229
|
-
},
|
|
230
|
-
() => {
|
|
231
|
-
const tokenList = tokenizeString('[{]}')
|
|
232
|
-
const obj = parser.parse(tokenList)
|
|
233
|
-
const result = stringify(obj)
|
|
234
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
235
|
-
},
|
|
236
|
-
() => {
|
|
237
|
-
const tokenList = tokenizeString('{[}]')
|
|
238
|
-
const obj = parser.parse(tokenList)
|
|
239
|
-
const result = stringify(obj)
|
|
240
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
241
|
-
},
|
|
242
|
-
() => {
|
|
243
|
-
const tokenList = tokenizeString('10-5')
|
|
244
|
-
const obj = parser.parse(tokenList)
|
|
245
|
-
const result = stringify(obj)
|
|
246
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
247
|
-
},
|
|
248
|
-
() => {
|
|
249
|
-
const tokenList = tokenizeString('undefined')
|
|
250
|
-
const obj = parser.parse(tokenList)
|
|
251
|
-
const result = stringify(obj)
|
|
252
|
-
if (result !== '["error","unexpected token"]') { throw result }
|
|
253
|
-
},
|
|
254
|
-
]
|
|
255
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
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
|
|
63
|
-
: (input: list.List<list.List<string>>) => list.List<string>
|
|
64
|
-
= wrap('{')('}')
|
|
65
|
-
|
|
66
|
-
export const arrayWrap
|
|
67
|
-
: (input: list.List<list.List<string>>) => list.List<string>
|
|
68
|
-
= wrap('[')(']')
|
|
69
|
-
|
|
70
|
-
type Entry<T> = O.Entry<Unknown<T>>
|
|
71
|
-
|
|
72
|
-
type Entries<T> = list.List<Entry<T>>
|
|
73
|
-
|
|
74
|
-
type MapEntries<T> = (entries: Entries<T>) => Entries<T>
|