json-as 0.9.29 → 1.0.0-alpha.2
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/nodejs.yml +0 -3
- package/.gitmodules +0 -0
- package/.prettierrc.json +3 -2
- package/CHANGELOG +24 -0
- package/LICENSE +1 -1
- package/README.md +23 -7
- package/as-test.config.json +1 -1
- package/asconfig.json +2 -2
- package/assembly/__benches__/misc.bench.ts +0 -34
- package/assembly/__tests__/bool.spec.ts +1 -1
- package/assembly/__tests__/simd/string.spec.ts +32 -0
- package/assembly/custom/memory.ts +25 -0
- package/assembly/custom/util.ts +14 -92
- package/assembly/deserialize/simd/string.ts +103 -0
- package/assembly/deserialize/simple/arbitrary.ts +17 -0
- package/assembly/deserialize/simple/array/arbitrary.ts +113 -0
- package/assembly/deserialize/simple/array/array.ts +18 -0
- package/assembly/deserialize/simple/array/bool.ts +17 -0
- package/assembly/deserialize/simple/array/float.ts +28 -0
- package/assembly/deserialize/simple/array/integer.ts +27 -0
- package/assembly/deserialize/simple/array/map.ts +18 -0
- package/assembly/deserialize/simple/array/object.ts +18 -0
- package/assembly/deserialize/simple/array/string.ts +22 -0
- package/assembly/deserialize/simple/array.ts +48 -0
- package/assembly/deserialize/simple/bool.ts +9 -0
- package/assembly/deserialize/simple/date.ts +11 -0
- package/assembly/deserialize/simple/float.ts +10 -0
- package/assembly/deserialize/simple/integer.ts +5 -0
- package/assembly/deserialize/simple/map.ts +154 -0
- package/assembly/deserialize/simple/object.ts +158 -0
- package/assembly/deserialize/simple/string.ts +48 -0
- package/assembly/globals/tables.ts +417 -0
- package/assembly/index.d.ts +9 -13
- package/assembly/index.ts +261 -146
- package/assembly/serialize/simd/string.ts +176 -0
- package/assembly/serialize/simple/arbitrary.ts +36 -0
- package/assembly/serialize/simple/array.ts +32 -0
- package/assembly/serialize/simple/bool.ts +19 -0
- package/assembly/serialize/simple/date.ts +13 -0
- package/assembly/serialize/simple/float.ts +7 -0
- package/assembly/serialize/simple/integer.ts +7 -0
- package/assembly/serialize/simple/map.ts +43 -0
- package/assembly/serialize/simple/object.ts +7 -0
- package/assembly/serialize/simple/string.ts +48 -0
- package/assembly/test.ts +36 -27
- package/assembly/tsconfig.json +2 -91
- package/assembly/types.ts +0 -0
- package/assembly/util/atoi.ts +35 -0
- package/assembly/util/bytes.ts +12 -0
- package/assembly/util/concat.ts +9 -0
- package/assembly/util/getArrayDepth.ts +17 -0
- package/assembly/util/index.ts +5 -0
- package/assembly/util/isSpace.ts +4 -0
- package/assembly/util/nextPowerOf2.ts +4 -0
- package/assembly/util/ptrToStr.ts +7 -0
- package/assembly/util/snp.ts +69 -0
- package/bench.js +5 -5
- package/modules/as-bs/LICENSE +21 -0
- package/modules/as-bs/README.md +95 -0
- package/modules/as-bs/assembly/index.ts +166 -0
- package/modules/as-bs/assembly/tsconfig.json +97 -0
- package/modules/as-bs/index.ts +1 -0
- package/modules/as-bs/package.json +32 -0
- package/package.json +41 -48
- package/transform/lib/builder.js +1275 -0
- package/transform/lib/builder.js.map +1 -0
- package/transform/lib/index.js +548 -443
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/linker.js +16 -0
- package/transform/lib/linker.js.map +1 -0
- package/transform/lib/types.js +26 -0
- package/transform/lib/types.js.map +1 -0
- package/transform/lib/util.js +47 -0
- package/transform/lib/util.js.map +1 -0
- package/transform/lib/visitor.js +510 -430
- package/transform/lib/visitor.js.map +1 -0
- package/transform/package.json +1 -33
- package/transform/src/builder.ts +1371 -0
- package/transform/src/index.ts +574 -340
- package/transform/src/linker.ts +21 -0
- package/transform/src/types.ts +28 -0
- package/transform/src/util.ts +56 -0
- package/transform/src/visitor.ts +531 -0
- package/transform/tsconfig.json +3 -1
- package/assembly/__benches__/as-tral.d.ts +0 -1
- package/assembly/__tests__/date.spec.ts +0 -12
- package/assembly/custom/bs.ts +0 -202
- package/assembly/deserialize/array/array.ts +0 -31
- package/assembly/deserialize/array/bool.ts +0 -19
- package/assembly/deserialize/array/float.ts +0 -24
- package/assembly/deserialize/array/integer.ts +0 -24
- package/assembly/deserialize/array/map.ts +0 -27
- package/assembly/deserialize/array/object.ts +0 -27
- package/assembly/deserialize/array/string.ts +0 -29
- package/assembly/deserialize/array.ts +0 -46
- package/assembly/deserialize/bool.ts +0 -34
- package/assembly/deserialize/date.ts +0 -19
- package/assembly/deserialize/float.ts +0 -21
- package/assembly/deserialize/integer.ts +0 -16
- package/assembly/deserialize/map.ts +0 -139
- package/assembly/deserialize/object.ts +0 -211
- package/assembly/deserialize/string.ts +0 -149
- package/assembly/serialize/array.ts +0 -44
- package/assembly/serialize/bool.ts +0 -10
- package/assembly/serialize/date.ts +0 -4
- package/assembly/serialize/float.ts +0 -4
- package/assembly/serialize/integer.ts +0 -5
- package/assembly/serialize/map.ts +0 -24
- package/assembly/serialize/object.ts +0 -13
- package/assembly/serialize/string.ts +0 -284
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { unsafeCharCodeAt } from "../custom/util";
|
|
2
|
-
import { CHAR_A, BACK_SLASH, COMMA, CHAR_E, CHAR_F, CHAR_L, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, CHAR_R, BRACE_RIGHT, BRACKET_RIGHT, CHAR_S, CHAR_T, CHAR_U } from "../custom/chars";
|
|
3
|
-
import { isSpace } from "util/string";
|
|
4
|
-
|
|
5
|
-
// @ts-ignore: Decorator valid here
|
|
6
|
-
@inline export function deserializeObject<T>(data: string): T {
|
|
7
|
-
const schema: nonnull<T> = changetype<nonnull<T>>(__new(offsetof<nonnull<T>>(), idof<nonnull<T>>()));
|
|
8
|
-
|
|
9
|
-
// @ts-ignore
|
|
10
|
-
schema.__INITIALIZE();
|
|
11
|
-
|
|
12
|
-
let key_start: i32 = 0;
|
|
13
|
-
let key_end: i32 = 0;
|
|
14
|
-
let isKey = false;
|
|
15
|
-
let depth = 0;
|
|
16
|
-
let outerLoopIndex = 1;
|
|
17
|
-
for (; outerLoopIndex < data.length - 1; outerLoopIndex++) {
|
|
18
|
-
const char = unsafeCharCodeAt(data, outerLoopIndex);
|
|
19
|
-
if (char === BRACKET_LEFT) {
|
|
20
|
-
for (let arrayValueIndex = outerLoopIndex; arrayValueIndex < data.length - 1; arrayValueIndex++) {
|
|
21
|
-
const char = unsafeCharCodeAt(data, arrayValueIndex);
|
|
22
|
-
if (char === BRACKET_LEFT) {
|
|
23
|
-
depth++;
|
|
24
|
-
} else if (char === BRACKET_RIGHT) {
|
|
25
|
-
depth--;
|
|
26
|
-
if (depth === 0) {
|
|
27
|
-
++arrayValueIndex;
|
|
28
|
-
// @ts-ignore
|
|
29
|
-
schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, arrayValueIndex);
|
|
30
|
-
outerLoopIndex = arrayValueIndex;
|
|
31
|
-
isKey = false;
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
} else if (char === BRACE_LEFT) {
|
|
37
|
-
for (let objectValueIndex = outerLoopIndex; objectValueIndex < data.length - 1; objectValueIndex++) {
|
|
38
|
-
const char = unsafeCharCodeAt(data, objectValueIndex);
|
|
39
|
-
if (char === BRACE_LEFT) {
|
|
40
|
-
depth++;
|
|
41
|
-
} else if (char === BRACE_RIGHT) {
|
|
42
|
-
depth--;
|
|
43
|
-
if (depth === 0) {
|
|
44
|
-
++objectValueIndex;
|
|
45
|
-
// @ts-ignore
|
|
46
|
-
schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, objectValueIndex);
|
|
47
|
-
outerLoopIndex = objectValueIndex;
|
|
48
|
-
isKey = false;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
} else if (char === QUOTE) {
|
|
54
|
-
let escaping = false;
|
|
55
|
-
for (let stringValueIndex = ++outerLoopIndex; stringValueIndex < data.length - 1; stringValueIndex++) {
|
|
56
|
-
const char = unsafeCharCodeAt(data, stringValueIndex);
|
|
57
|
-
if (char === BACK_SLASH && !escaping) {
|
|
58
|
-
escaping = true;
|
|
59
|
-
} else {
|
|
60
|
-
if (char === QUOTE && !escaping) {
|
|
61
|
-
if (isKey === false) {
|
|
62
|
-
key_start = outerLoopIndex;
|
|
63
|
-
key_end = stringValueIndex;
|
|
64
|
-
isKey = true;
|
|
65
|
-
} else {
|
|
66
|
-
// @ts-ignore
|
|
67
|
-
schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex - 1, stringValueIndex + 1);
|
|
68
|
-
isKey = false;
|
|
69
|
-
}
|
|
70
|
-
outerLoopIndex = ++stringValueIndex;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
escaping = false;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
} else if (char == CHAR_N && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_L) {
|
|
77
|
-
// @ts-ignore
|
|
78
|
-
schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 4);
|
|
79
|
-
outerLoopIndex += 3;
|
|
80
|
-
isKey = false;
|
|
81
|
-
} else if (char === CHAR_T && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_R && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_E) {
|
|
82
|
-
// @ts-ignore
|
|
83
|
-
schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 4);
|
|
84
|
-
outerLoopIndex += 3;
|
|
85
|
-
isKey = false;
|
|
86
|
-
} else if (char === CHAR_F && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_A && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_S && unsafeCharCodeAt(data, outerLoopIndex + 4) === CHAR_E) {
|
|
87
|
-
// @ts-ignore
|
|
88
|
-
schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 5);
|
|
89
|
-
outerLoopIndex += 4;
|
|
90
|
-
isKey = false;
|
|
91
|
-
} else if ((char >= 48 && char <= 57) || char === 45) {
|
|
92
|
-
let numberValueIndex = ++outerLoopIndex;
|
|
93
|
-
for (; numberValueIndex < data.length; numberValueIndex++) {
|
|
94
|
-
const char = unsafeCharCodeAt(data, numberValueIndex);
|
|
95
|
-
if (char === COMMA || char === BRACE_RIGHT || isSpace(char)) {
|
|
96
|
-
// @ts-ignore
|
|
97
|
-
schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex - 1, numberValueIndex);
|
|
98
|
-
outerLoopIndex = numberValueIndex;
|
|
99
|
-
isKey = false;
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return schema;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// @ts-ignore: Decorator valid here
|
|
109
|
-
@inline export function deserializeObject_Safe<T>(data: string): T {
|
|
110
|
-
const firstChar = load<u8>(changetype<usize>(data));
|
|
111
|
-
if (firstChar != BRACE_LEFT) throw new Error("Mismatched Types! Expected " + nameof<T>() + ' but got "' + data.slice(0, 100) + '" instead!');
|
|
112
|
-
const schema: nonnull<T> = changetype<nonnull<T>>(__new(offsetof<nonnull<T>>(), idof<nonnull<T>>()));
|
|
113
|
-
|
|
114
|
-
// @ts-ignore
|
|
115
|
-
schema.__INITIALIZE();
|
|
116
|
-
|
|
117
|
-
let key_start: i32 = 0;
|
|
118
|
-
let key_end: i32 = 0;
|
|
119
|
-
let isKey = false;
|
|
120
|
-
let depth = 0;
|
|
121
|
-
let outerLoopIndex = 1;
|
|
122
|
-
for (; outerLoopIndex < data.length - 1; outerLoopIndex++) {
|
|
123
|
-
const char = unsafeCharCodeAt(data, outerLoopIndex);
|
|
124
|
-
if (char === BRACKET_LEFT) {
|
|
125
|
-
for (let arrayValueIndex = outerLoopIndex; arrayValueIndex < data.length - 1; arrayValueIndex++) {
|
|
126
|
-
const char = unsafeCharCodeAt(data, arrayValueIndex);
|
|
127
|
-
if (char === BRACKET_LEFT) {
|
|
128
|
-
depth++;
|
|
129
|
-
} else if (char === BRACKET_RIGHT) {
|
|
130
|
-
depth--;
|
|
131
|
-
if (depth === 0) {
|
|
132
|
-
++arrayValueIndex;
|
|
133
|
-
// @ts-ignore
|
|
134
|
-
schema.__DESERIALIZE_SAFE(data, key_start, key_end, outerLoopIndex, arrayValueIndex);
|
|
135
|
-
outerLoopIndex = arrayValueIndex;
|
|
136
|
-
isKey = false;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
} else if (char === BRACE_LEFT) {
|
|
142
|
-
for (let objectValueIndex = outerLoopIndex; objectValueIndex < data.length - 1; objectValueIndex++) {
|
|
143
|
-
const char = unsafeCharCodeAt(data, objectValueIndex);
|
|
144
|
-
if (char === BRACE_LEFT) {
|
|
145
|
-
depth++;
|
|
146
|
-
} else if (char === BRACE_RIGHT) {
|
|
147
|
-
depth--;
|
|
148
|
-
if (depth === 0) {
|
|
149
|
-
++objectValueIndex;
|
|
150
|
-
// @ts-ignore
|
|
151
|
-
schema.__DESERIALIZE_SAFE(data, key_start, key_end, outerLoopIndex, objectValueIndex);
|
|
152
|
-
outerLoopIndex = objectValueIndex;
|
|
153
|
-
isKey = false;
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
} else if (char === QUOTE) {
|
|
159
|
-
let escaping = false;
|
|
160
|
-
for (let stringValueIndex = ++outerLoopIndex; stringValueIndex < data.length - 1; stringValueIndex++) {
|
|
161
|
-
const char = unsafeCharCodeAt(data, stringValueIndex);
|
|
162
|
-
if (char === BACK_SLASH && !escaping) {
|
|
163
|
-
escaping = true;
|
|
164
|
-
} else {
|
|
165
|
-
if (char === QUOTE && !escaping) {
|
|
166
|
-
if (isKey === false) {
|
|
167
|
-
key_start = outerLoopIndex;
|
|
168
|
-
key_end = stringValueIndex;
|
|
169
|
-
isKey = true;
|
|
170
|
-
} else {
|
|
171
|
-
// @ts-ignore
|
|
172
|
-
schema.__DESERIALIZE_SAFE(data, key_start, key_end, outerLoopIndex - 1, stringValueIndex + 1);
|
|
173
|
-
isKey = false;
|
|
174
|
-
}
|
|
175
|
-
outerLoopIndex = ++stringValueIndex;
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
escaping = false;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
} else if (char == CHAR_N && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_L) {
|
|
182
|
-
// @ts-ignore
|
|
183
|
-
schema.__DESERIALIZE_SAFE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 4);
|
|
184
|
-
outerLoopIndex += 3;
|
|
185
|
-
isKey = false;
|
|
186
|
-
} else if (char === CHAR_T && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_R && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_E) {
|
|
187
|
-
// @ts-ignore
|
|
188
|
-
schema.__DESERIALIZE_SAFE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 4);
|
|
189
|
-
outerLoopIndex += 3;
|
|
190
|
-
isKey = false;
|
|
191
|
-
} else if (char === CHAR_F && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_A && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_S && unsafeCharCodeAt(data, outerLoopIndex + 4) === CHAR_E) {
|
|
192
|
-
// @ts-ignore
|
|
193
|
-
schema.__DESERIALIZE_SAFE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 5);
|
|
194
|
-
outerLoopIndex += 4;
|
|
195
|
-
isKey = false;
|
|
196
|
-
} else if ((char >= 48 && char <= 57) || char === 45) {
|
|
197
|
-
let numberValueIndex = ++outerLoopIndex;
|
|
198
|
-
for (; numberValueIndex < data.length; numberValueIndex++) {
|
|
199
|
-
const char = unsafeCharCodeAt(data, numberValueIndex);
|
|
200
|
-
if (char === COMMA || char === BRACE_RIGHT || isSpace(char)) {
|
|
201
|
-
// @ts-ignore
|
|
202
|
-
schema.__DESERIALIZE_SAFE(data, key_start, key_end, outerLoopIndex - 1, numberValueIndex);
|
|
203
|
-
outerLoopIndex = numberValueIndex;
|
|
204
|
-
isKey = false;
|
|
205
|
-
break;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
return schema;
|
|
211
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { CHAR_B, BACK_SLASH, BACKSPACE, CARRIAGE_RETURN, CHAR_F, FORM_FEED, FWD_SLASH, CHAR_N, NEW_LINE, QUOTE, CHAR_R, CHAR_T, TAB, CHAR_U } from "../custom/chars";
|
|
2
|
-
import { Sink } from "../custom/sink";
|
|
3
|
-
import { unsafeCharCodeAt } from "../custom/util";
|
|
4
|
-
|
|
5
|
-
// @ts-ignore: Decorator valid here
|
|
6
|
-
@inline export function deserializeString(data: string, start: i32 = 0, end: i32 = 0): string {
|
|
7
|
-
end = end || data.length - 1;
|
|
8
|
-
let result = Sink.withCapacity(end - start - 1);
|
|
9
|
-
let last = start + 1;
|
|
10
|
-
for (let i = last; i < end; i++) {
|
|
11
|
-
if (unsafeCharCodeAt(data, i) !== BACK_SLASH) {
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
const char = unsafeCharCodeAt(data, ++i);
|
|
15
|
-
result.write(data, last, i - 1);
|
|
16
|
-
switch (char) {
|
|
17
|
-
case QUOTE: {
|
|
18
|
-
result.writeCodePoint(QUOTE);
|
|
19
|
-
last = i + 1;
|
|
20
|
-
break;
|
|
21
|
-
}
|
|
22
|
-
case BACK_SLASH: {
|
|
23
|
-
result.writeCodePoint(BACK_SLASH);
|
|
24
|
-
last = i + 1;
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
case FWD_SLASH: {
|
|
28
|
-
result.writeCodePoint(FWD_SLASH);
|
|
29
|
-
last = i + 1;
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
case CHAR_B: {
|
|
33
|
-
result.writeCodePoint(BACKSPACE);
|
|
34
|
-
last = i + 1;
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
case CHAR_F: {
|
|
38
|
-
result.writeCodePoint(FORM_FEED);
|
|
39
|
-
last = i + 1;
|
|
40
|
-
break;
|
|
41
|
-
}
|
|
42
|
-
case CHAR_N: {
|
|
43
|
-
result.writeCodePoint(NEW_LINE);
|
|
44
|
-
last = i + 1;
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
case CHAR_R: {
|
|
48
|
-
result.writeCodePoint(CARRIAGE_RETURN);
|
|
49
|
-
last = i + 1;
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
case CHAR_T: {
|
|
53
|
-
result.writeCodePoint(TAB);
|
|
54
|
-
last = i + 1;
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
case CHAR_U: {
|
|
58
|
-
const code = u16.parse(data.slice(i + 1, i + 5), 16);
|
|
59
|
-
result.writeCodePoint(code);
|
|
60
|
-
i += 4;
|
|
61
|
-
last = i + 1;
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
default: {
|
|
65
|
-
throw new Error(`JSON: Cannot parse "${data}" as string. Invalid escape sequence: \\${data.charAt(i)}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (end > last) {
|
|
70
|
-
result.write(data, last, end);
|
|
71
|
-
}
|
|
72
|
-
return result.toString();
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// @ts-ignore: Decorator valid here
|
|
76
|
-
// @inline export function deserializeString_BS(data: string, start: i32 = 0, end: i32 = 0): void {
|
|
77
|
-
// end = end || data.length - 1;
|
|
78
|
-
// let last = start + 1;
|
|
79
|
-
// for (let i = last; i < end; i++) {
|
|
80
|
-
// if (unsafeCharCodeAt(data, i) !== BACK_SLASH) {
|
|
81
|
-
// continue;
|
|
82
|
-
// }
|
|
83
|
-
// const char = unsafeCharCodeAt(data, ++i);
|
|
84
|
-
// bs.write_s_se_u(data, last, i - 1);
|
|
85
|
-
// switch (char) {
|
|
86
|
-
// case QUOTE: {
|
|
87
|
-
// bs.write_8(QUOTE);
|
|
88
|
-
// last = i + 1;
|
|
89
|
-
// break;
|
|
90
|
-
// }
|
|
91
|
-
// case BACK_SLASH: {
|
|
92
|
-
// bs.write_8(BACK_SLASH);
|
|
93
|
-
// last = i + 1;
|
|
94
|
-
// break;
|
|
95
|
-
// }
|
|
96
|
-
// case FWD_SLASH: {
|
|
97
|
-
// bs.write_8(FWD_SLASH);
|
|
98
|
-
// last = i + 1;
|
|
99
|
-
// break;
|
|
100
|
-
// }
|
|
101
|
-
// case CHAR_B: {
|
|
102
|
-
// bs.write_8(BACKSPACE);
|
|
103
|
-
// last = i + 1;
|
|
104
|
-
// break;
|
|
105
|
-
// }
|
|
106
|
-
// case CHAR_F: {
|
|
107
|
-
// bs.write_8(FORM_FEED);
|
|
108
|
-
// last = i + 1;
|
|
109
|
-
// break;
|
|
110
|
-
// }
|
|
111
|
-
// case CHAR_N: {
|
|
112
|
-
// bs.write_8(NEW_LINE);
|
|
113
|
-
// last = i + 1;
|
|
114
|
-
// break;
|
|
115
|
-
// }
|
|
116
|
-
// case CHAR_R: {
|
|
117
|
-
// bs.write_8(CARRIAGE_RETURN);
|
|
118
|
-
// last = i + 1;
|
|
119
|
-
// break;
|
|
120
|
-
// }
|
|
121
|
-
// case CHAR_T: {
|
|
122
|
-
// bs.write_8(TAB);
|
|
123
|
-
// last = i + 1;
|
|
124
|
-
// break;
|
|
125
|
-
// }
|
|
126
|
-
// case CHAR_U: {
|
|
127
|
-
|
|
128
|
-
// const code = u16.parse(data.slice(i + 1, i + 5), 16);
|
|
129
|
-
// bs.w(code);
|
|
130
|
-
// i += 4;
|
|
131
|
-
// last = i + 1;
|
|
132
|
-
// break;
|
|
133
|
-
// }
|
|
134
|
-
// default: {
|
|
135
|
-
// throw new Error(`JSON: Cannot parse "${data}" as string. Invalid escape sequence: \\${data.charAt(i)}`);
|
|
136
|
-
// }
|
|
137
|
-
// }
|
|
138
|
-
// }
|
|
139
|
-
// if (end > last) {
|
|
140
|
-
// result.write(data, last, end);
|
|
141
|
-
// }
|
|
142
|
-
// }
|
|
143
|
-
|
|
144
|
-
// @ts-ignore: Decorator valid here
|
|
145
|
-
@inline export function deserializeString_Safe(data: string, start: i32 = 0, end: i32 = 0): string {
|
|
146
|
-
const firstChar = load<u8>(changetype<usize>(data));
|
|
147
|
-
if (firstChar != QUOTE) throw new Error('Mismatched Types! Expected string but got "' + data.slice(0, 100) + '" instead!');
|
|
148
|
-
return deserializeString(data, start, end);
|
|
149
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { JSON } from "..";
|
|
2
|
-
import { COMMA, COMMA_WORD, EMPTY_BRACKET_WORD, BRACKET_LEFT_WORD, BRACKET_RIGHT, BRACKET_RIGHT_WORD } from "../custom/chars";
|
|
3
|
-
import { Sink } from "../custom/sink";
|
|
4
|
-
import { serializeString } from "./string";
|
|
5
|
-
|
|
6
|
-
// @ts-ignore: Decorator valid here
|
|
7
|
-
@inline export function serializeArray<T extends any[]>(data: T): string {
|
|
8
|
-
if (data.length == 0) {
|
|
9
|
-
return EMPTY_BRACKET_WORD;
|
|
10
|
-
// @ts-ignore
|
|
11
|
-
} else if (isString<valueof<T>>()) {
|
|
12
|
-
let result = BRACKET_LEFT_WORD;
|
|
13
|
-
// @ts-ignore
|
|
14
|
-
for (let i = 0; i < data.length - 1; i++) {
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
result += serializeString(unchecked(data[i]));
|
|
17
|
-
result += COMMA_WORD;
|
|
18
|
-
}
|
|
19
|
-
// @ts-ignore
|
|
20
|
-
result += serializeString(unchecked(data[data.length - 1]));
|
|
21
|
-
result += BRACKET_RIGHT_WORD;
|
|
22
|
-
return result;
|
|
23
|
-
// @ts-ignore
|
|
24
|
-
} else if (isBoolean<valueof<T>>()) {
|
|
25
|
-
// @ts-ignore
|
|
26
|
-
return BRACKET_LEFT_WORD + data.join(COMMA_WORD) + BRACKET_RIGHT_WORD;
|
|
27
|
-
// @ts-ignore
|
|
28
|
-
} else if (isFloat<valueof<T>>() || isInteger<valueof<T>>()) {
|
|
29
|
-
// @ts-ignore
|
|
30
|
-
return BRACKET_LEFT_WORD + data.join(COMMA_WORD) + BRACKET_RIGHT_WORD;
|
|
31
|
-
} else {
|
|
32
|
-
let result = Sink.fromString(BRACKET_LEFT_WORD);
|
|
33
|
-
// @ts-ignore
|
|
34
|
-
for (let i = 0; i < data.length - 1; i++) {
|
|
35
|
-
// @ts-ignore
|
|
36
|
-
result.write(JSON.stringify(unchecked(data[i])));
|
|
37
|
-
result.writeCodePoint(COMMA);
|
|
38
|
-
}
|
|
39
|
-
// @ts-ignore
|
|
40
|
-
result.write(JSON.stringify(unchecked(data[data.length - 1])));
|
|
41
|
-
result.writeCodePoint(BRACKET_RIGHT);
|
|
42
|
-
return result.toString();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { COLON, COMMA, BRACE_LEFT_WORD, BRACE_RIGHT } from "../custom/chars";
|
|
2
|
-
import { JSON } from "..";
|
|
3
|
-
import { Sink } from "../custom/sink";
|
|
4
|
-
|
|
5
|
-
// @ts-ignore: Decorator valid here
|
|
6
|
-
@inline export function serializeMap<T extends Map<any, any>>(data: T): string {
|
|
7
|
-
let result = Sink.fromString(BRACE_LEFT_WORD);
|
|
8
|
-
if (!data.size) return "{}";
|
|
9
|
-
let keys = data.keys();
|
|
10
|
-
let values = data.values();
|
|
11
|
-
const end = data.size - 1;
|
|
12
|
-
for (let i = 0; i < end; i++) {
|
|
13
|
-
result.write(JSON.stringify(unchecked(keys[i]).toString()));
|
|
14
|
-
result.writeCodePoint(COLON);
|
|
15
|
-
result.write(JSON.stringify(unchecked(values[i])));
|
|
16
|
-
result.writeCodePoint(COMMA);
|
|
17
|
-
}
|
|
18
|
-
result.write(JSON.stringify(unchecked(keys[end]).toString()));
|
|
19
|
-
result.writeCodePoint(COLON);
|
|
20
|
-
result.write(JSON.stringify(unchecked(values[end])));
|
|
21
|
-
|
|
22
|
-
result.writeCodePoint(BRACE_RIGHT);
|
|
23
|
-
return result.toString();
|
|
24
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
interface GeneratedInterface {
|
|
2
|
-
__SERIALIZE(): string;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
// @ts-ignore: Decorator valid here
|
|
6
|
-
@inline export function serializeObject<T extends GeneratedInterface>(data: T): string {
|
|
7
|
-
return changetype<nonnull<T>>(data).__SERIALIZE();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
// @ts-ignore: Decorator valid here
|
|
11
|
-
@inline export function serializeObject_Pretty<T extends GeneratedInterface>(data: T): string {
|
|
12
|
-
return changetype<nonnull<T>>(data).__SERIALIZE_PRETTY();
|
|
13
|
-
}
|