json-as 1.1.20 → 1.1.22

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.
@@ -1,33 +1,53 @@
1
- import { JSON } from "../assembly/index";
2
1
  import { bs } from "../lib/as-bs";
3
-
2
+ import { JSON } from ".";
4
3
 
5
4
  @json
6
- class Vec3 {
7
- x: f32 = 0;
8
- y: f32 = 0;
9
- z: f32 = 0;
5
+ class Example {
6
+ constructor(
7
+ public a: string,
8
+ public b: string,
9
+ public c: string,
10
+ public d: string,
11
+ public e: boolean,
12
+ ) {}
13
+ public f: string = "lol";
10
14
  __SERIALIZE(ptr: usize): void {
11
- bs.proposeSize(32);
12
- store<u64>(bs.offset, 9570664606466171, 0);
15
+ bs.proposeSize(72);
16
+ store<u64>(bs.offset, 9570565822218363, 0);
17
+ store<u16>(bs.offset, 58, 8);
18
+ bs.offset += 10;
19
+ JSON.__serialize<string>(load<string>(ptr, offsetof<this>("a")));
20
+ store<u64>(bs.offset, 9570570117185580, 0);
21
+ store<u16>(bs.offset, 58, 8);
22
+ bs.offset += 10;
23
+ JSON.__serialize<string>(load<string>(ptr, offsetof<this>("b")));
24
+ store<u64>(bs.offset, 9570574412152876, 0);
13
25
  store<u16>(bs.offset, 58, 8);
14
26
  bs.offset += 10;
15
- JSON.__serialize<f32>(load<f32>(ptr, offsetof<this>("x")));
16
- store<u64>(bs.offset, 9570668901433388, 0);
27
+ JSON.__serialize<string>(load<string>(ptr, offsetof<this>("c")));
28
+ store<u64>(bs.offset, 9570578707120172, 0);
17
29
  store<u16>(bs.offset, 58, 8);
18
30
  bs.offset += 10;
19
- JSON.__serialize<f32>(load<f32>(ptr, offsetof<this>("y")));
20
- store<u64>(bs.offset, 9570673196400684, 0);
31
+ JSON.__serialize<string>(load<string>(ptr, offsetof<this>("d")));
32
+ store<u64>(bs.offset, 9570583002087468, 0);
21
33
  store<u16>(bs.offset, 58, 8);
22
34
  bs.offset += 10;
23
- JSON.__serialize<f32>(load<f32>(ptr, offsetof<this>("z")));
35
+ JSON.__serialize<boolean>(load<boolean>(ptr, offsetof<this>("e")));
36
+ store<u64>(bs.offset, 9570587297054764, 0);
37
+ store<u16>(bs.offset, 58, 8);
38
+ bs.offset += 10;
39
+ JSON.__serialize<string>(load<string>(ptr, offsetof<this>("f")));
24
40
  store<u16>(bs.offset, 125, 0);
25
41
  bs.offset += 2;
26
42
  }
27
43
 
28
-
29
44
  @inline
30
45
  __INITIALIZE(): this {
46
+ store<string>(changetype<usize>(this), "", offsetof<this>("a"));
47
+ store<string>(changetype<usize>(this), "", offsetof<this>("b"));
48
+ store<string>(changetype<usize>(this), "", offsetof<this>("c"));
49
+ store<string>(changetype<usize>(this), "", offsetof<this>("d"));
50
+ store<string>(changetype<usize>(this), "lol", offsetof<this>("f"));
31
51
  return this;
32
52
  }
33
53
  __DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {
@@ -50,6 +70,7 @@ class Vec3 {
50
70
  if (isKey) {
51
71
  keyStart = lastIndex;
52
72
  keyEnd = srcStart;
73
+ console.log("Key: " + JSON.Util.ptrToStr(keyStart, keyEnd));
53
74
  while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}
54
75
  if (code !== 58) throw new Error("Expected ':' after key at position " + (srcEnd - srcStart).toString());
55
76
  isKey = false;
@@ -66,269 +87,32 @@ class Vec3 {
66
87
  while (srcStart < srcEnd) {
67
88
  const code = load<u16>(srcStart);
68
89
  if (code == 34 && load<u16>(srcStart - 2) !== 92) {
69
- srcStart += 4;
70
- keyStart = 0;
71
- break;
72
- }
73
- srcStart += 2;
74
- }
75
- } else if (code - 48 <= 9 || code == 45) {
76
- lastIndex = srcStart;
77
- srcStart += 2;
78
- while (srcStart < srcEnd) {
79
- const code = load<u16>(srcStart);
80
- if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {
90
+ console.log("Value (string, 1): " + JSON.Util.ptrToStr(lastIndex, srcStart + 2));
81
91
  switch (<u32>keyEnd - <u32>keyStart) {
82
92
  case 2: {
83
93
  const code16 = load<u16>(keyStart);
84
- if (code16 == 120) {
85
- store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("x"));
86
- srcStart += 2;
87
- keyStart = 0;
88
- break;
89
- } else if (code16 == 121) {
90
- store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("y"));
91
- srcStart += 2;
92
- keyStart = 0;
93
- break;
94
- } else if (code16 == 122) {
95
- store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("z"));
96
- srcStart += 2;
97
- keyStart = 0;
98
- break;
99
- } else {
100
- srcStart += 2;
94
+ if (code16 == 97) {
95
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("a"));
96
+ srcStart += 4;
101
97
  keyStart = 0;
102
98
  break;
103
- }
104
- }
105
-
106
- default: {
107
- srcStart += 2;
108
- keyStart = 0;
109
- break;
110
- }
111
- }
112
- break;
113
- }
114
- srcStart += 2;
115
- }
116
- } else if (code == 123) {
117
- lastIndex = srcStart;
118
- depth++;
119
- srcStart += 2;
120
- while (srcStart < srcEnd) {
121
- const code = load<u16>(srcStart);
122
- if (code == 34) {
123
- srcStart += 2;
124
- while (!(load<u16>(srcStart) == 34 && load<u16>(srcStart - 2) != 92)) srcStart += 2;
125
- } else if (code == 125) {
126
- if (--depth == 0) {
127
- srcStart += 2;
128
- switch (<u32>keyEnd - <u32>keyStart) {
129
- case 2: {
130
- const code16 = load<u16>(keyStart);
131
- if (code16 == 120) {
132
- store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("x"));
133
- keyStart = 0;
134
- break;
135
- } else if (code16 == 121) {
136
- store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("y"));
137
- keyStart = 0;
138
- break;
139
- } else if (code16 == 122) {
140
- store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("z"));
141
- keyStart = 0;
142
- break;
143
- } else {
144
- keyStart = 0;
145
- break;
146
- }
147
- }
148
-
149
- default: {
99
+ } else if (code16 == 98) {
100
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("b"));
101
+ srcStart += 4;
150
102
  keyStart = 0;
151
103
  break;
152
- }
153
- }
154
- break;
155
- }
156
- } else if (code == 123) depth++;
157
- srcStart += 2;
158
- }
159
- } else if (code == 91) {
160
- lastIndex = srcStart;
161
- depth++;
162
- srcStart += 2;
163
- while (srcStart < srcEnd) {
164
- const code = load<u16>(srcStart);
165
- if (code == 34) {
166
- srcStart += 2;
167
- while (!(load<u16>(srcStart) == 34 && load<u16>(srcStart - 2) != 92)) srcStart += 2;
168
- } else if (code == 93) {
169
- if (--depth == 0) {
170
- srcStart += 2;
171
- keyStart = 0;
172
- break;
173
- }
174
- } else if (code == 91) depth++;
175
- srcStart += 2;
176
- }
177
- } else if (code == 116) {
178
- if (load<u64>(srcStart) == 28429475166421108) {
179
- srcStart += 8;
180
- srcStart += 2;
181
- keyStart = 0;
182
- } else {
183
- throw new Error("Expected to find 'true' but found '" + JSON.Util.ptrToStr(lastIndex, srcStart) + "' instead at position " + (srcEnd - srcStart).toString());
184
- }
185
- } else if (code == 102) {
186
- if (load<u64>(srcStart, 2) == 28429466576093281) {
187
- srcStart += 10;
188
- srcStart += 2;
189
- keyStart = 0;
190
- } else {
191
- throw new Error("Expected to find 'false' but found '" + JSON.Util.ptrToStr(lastIndex, srcStart) + "' instead at position " + (srcEnd - srcStart).toString());
192
- }
193
- } else if (code == 110) {
194
- if (load<u64>(srcStart) == 30399761348886638) {
195
- srcStart += 8;
196
- srcStart += 2;
197
- keyStart = 0;
198
- }
199
- } else {
200
- srcStart += 2;
201
- keyStart = 0;
202
- }
203
- }
204
- }
205
- return out;
206
- }
207
- }
208
-
209
-
210
- @json
211
- class Player {
212
-
213
- @alias("first name")
214
- firstName!: string | null;
215
- lastName!: string;
216
- lastActive!: Array<i32>;
217
-
218
-
219
- @omitif((self: this): boolean => self.age < 18)
220
- age!: i32;
221
- pos!: Vec3 | null;
222
- isVerified!: boolean;
223
- __SERIALIZE(ptr: usize): void {
224
- bs.proposeSize(158);
225
- store<u16>(bs.offset, 123, 0);
226
- bs.offset += 2;
227
- if (!((self: this): boolean => self.age < 18)(this)) {
228
- store<u64>(bs.offset, 28429415035764770, 0);
229
- store<u32>(bs.offset, 3801122, 8);
230
- bs.offset += 12;
231
- JSON.__serialize<i32>(load<i32>(ptr, offsetof<this>("age")));
232
- store<u16>(bs.offset, 44, 0);
233
- bs.offset += 2;
234
- }
235
- store<u64>(bs.offset, 32088598323265570, 0);
236
- store<u64>(bs.offset, 30962384884727923, 8);
237
- store<u64>(bs.offset, 9570583007002721, 16);
238
- store<u16>(bs.offset, 58, 24);
239
- bs.offset += 26;
240
- JSON.__serialize<string | null>(load<string | null>(ptr, offsetof<this>("firstName")));
241
- store<u64>(bs.offset, 27303536599629868, 0);
242
- store<u64>(bs.offset, 27303407755985011, 8);
243
- store<u64>(bs.offset, 16325694684725357, 16);
244
- bs.offset += 24;
245
- JSON.__serialize<string>(load<string>(ptr, offsetof<this>("lastName")));
246
- store<u64>(bs.offset, 27303536599629868, 0);
247
- store<u64>(bs.offset, 27866301874831475, 8);
248
- store<u64>(bs.offset, 28429479460798580, 16);
249
- store<u32>(bs.offset, 3801122, 24);
250
- bs.offset += 28;
251
- JSON.__serialize<Array<i32>>(load<Array<i32>>(ptr, offsetof<this>("lastActive")));
252
- store<u64>(bs.offset, 31244203453448236, 0);
253
- store<u32>(bs.offset, 2228339, 8);
254
- store<u16>(bs.offset, 58, 12);
255
- bs.offset += 14;
256
- JSON.__serialize<Vec3 | null>(load<Vec3 | null>(ptr, offsetof<this>("pos")));
257
- store<u64>(bs.offset, 32370073295519788, 0);
258
- store<u64>(bs.offset, 29555362187509846, 8);
259
- store<u64>(bs.offset, 28147931469643878, 16);
260
- store<u32>(bs.offset, 3801122, 24);
261
- bs.offset += 28;
262
- JSON.__serialize<boolean>(load<boolean>(ptr, offsetof<this>("isVerified")));
263
- store<u16>(bs.offset, 125, 0);
264
- bs.offset += 2;
265
- }
266
-
267
-
268
- @inline
269
- __INITIALIZE(): this {
270
- store<string>(changetype<usize>(this), "", offsetof<this>("lastName"));
271
- store<Array<i32>>(changetype<usize>(this), [], offsetof<this>("lastActive"));
272
- return this;
273
- }
274
- __DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {
275
- let keyStart: usize = 0;
276
- let keyEnd: usize = 0;
277
- let isKey = false;
278
- let depth: i32 = 0;
279
- let lastIndex: usize = 0;
280
- while (srcStart < srcEnd && JSON.Util.isSpace(load<u16>(srcStart))) srcStart += 2;
281
- while (srcEnd > srcStart && JSON.Util.isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
282
- if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
283
- if (load<u16>(srcStart) != 123) throw new Error("Expected '{' at start of object at position " + (srcEnd - srcStart).toString());
284
- if (load<u16>(srcEnd - 2) != 125) throw new Error("Expected '}' at end of object at position " + (srcEnd - srcStart).toString());
285
- srcStart += 2;
286
- while (srcStart < srcEnd) {
287
- let code = load<u16>(srcStart);
288
- while (JSON.Util.isSpace(code)) code = load<u16>((srcStart += 2));
289
- if (keyStart == 0) {
290
- if (code == 34 && load<u16>(srcStart - 2) !== 92) {
291
- if (isKey) {
292
- keyStart = lastIndex;
293
- keyEnd = srcStart;
294
- while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}
295
- if (code !== 58) throw new Error("Expected ':' after key at position " + (srcEnd - srcStart).toString());
296
- isKey = false;
297
- } else {
298
- isKey = true;
299
- lastIndex = srcStart + 2;
300
- }
301
- }
302
- srcStart += 2;
303
- } else {
304
- if (code == 34) {
305
- lastIndex = srcStart;
306
- srcStart += 2;
307
- while (srcStart < srcEnd) {
308
- const code = load<u16>(srcStart);
309
- if (code == 34 && load<u16>(srcStart - 2) !== 92) {
310
- switch (<u32>keyEnd - <u32>keyStart) {
311
- case 20: {
312
- const codeS8 = load<u64>(keyStart, 0);
313
- const codeS16 = load<u64>(keyStart, 8);
314
- const codeS20 = load<u32>(keyStart, 16);
315
- if (codeS8 == 32370111954878566 && codeS16 == 27303545189433460 && codeS20 == 6619245) {
316
- store<string | null>(changetype<usize>(out), JSON.__deserialize<string | null>(lastIndex, srcStart + 2), offsetof<this>("firstName"));
104
+ } else if (code16 == 99) {
105
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("c"));
317
106
  srcStart += 4;
318
107
  keyStart = 0;
319
108
  break;
320
- } else {
109
+ } else if (code16 == 100) {
110
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("d"));
321
111
  srcStart += 4;
322
112
  keyStart = 0;
323
113
  break;
324
- }
325
- }
326
-
327
- case 16: {
328
- const codeS8 = load<u64>(keyStart, 0);
329
- const codeS16 = load<u64>(keyStart, 8);
330
- if (codeS8 == 32651591226032236 && codeS16 == 28429440805568590) {
331
- store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("lastName"));
114
+ } else if (code16 == 102) {
115
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("f"));
332
116
  srcStart += 4;
333
117
  keyStart = 0;
334
118
  break;
@@ -355,27 +139,9 @@ class Player {
355
139
  while (srcStart < srcEnd) {
356
140
  const code = load<u16>(srcStart);
357
141
  if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {
358
- switch (<u32>keyEnd - <u32>keyStart) {
359
- case 6: {
360
- const code48 = load<u64>(keyStart) & 281474976710655;
361
- if (code48 == 433798447201) {
362
- store<i32>(changetype<usize>(out), JSON.__deserialize<i32>(lastIndex, srcStart), offsetof<this>("age"));
363
- srcStart += 2;
364
- keyStart = 0;
365
- break;
366
- } else {
367
- srcStart += 2;
368
- keyStart = 0;
369
- break;
370
- }
371
- }
372
-
373
- default: {
374
- srcStart += 2;
375
- keyStart = 0;
376
- break;
377
- }
378
- }
142
+ console.log("Value (number, 2): " + JSON.Util.ptrToStr(lastIndex, srcStart));
143
+ srcStart += 2;
144
+ keyStart = 0;
379
145
  break;
380
146
  }
381
147
  srcStart += 2;
@@ -392,50 +158,32 @@ class Player {
392
158
  } else if (code == 125) {
393
159
  if (--depth == 0) {
394
160
  srcStart += 2;
161
+ console.log("Value (object, 3): " + JSON.Util.ptrToStr(lastIndex, srcStart));
395
162
  switch (<u32>keyEnd - <u32>keyStart) {
396
- case 20: {
397
- const codeS8 = load<u64>(keyStart, 0);
398
- const codeS16 = load<u64>(keyStart, 8);
399
- const codeS20 = load<u32>(keyStart, 16);
400
- if (codeS8 == 32370111954878566 && codeS16 == 27303545189433460 && codeS20 == 6619245) {
401
- store<string | null>(changetype<usize>(out), JSON.__deserialize<string | null>(lastIndex, srcStart), offsetof<this>("firstName"));
402
- keyStart = 0;
403
- break;
404
- } else if (codeS8 == 32651591226032236 && codeS16 == 29555370777313345 && codeS20 == 6619254) {
405
- store<Array<i32>>(changetype<usize>(out), JSON.__deserialize<Array<i32>>(lastIndex, srcStart), offsetof<this>("lastActive"));
406
- keyStart = 0;
407
- break;
408
- } else if (codeS8 == 28429342022500457 && codeS16 == 29555310648164466 && codeS20 == 6553701) {
409
- store<boolean>(changetype<usize>(out), JSON.__deserialize<boolean>(lastIndex, srcStart), offsetof<this>("isVerified"));
163
+ case 2: {
164
+ const code16 = load<u16>(keyStart);
165
+ if (code16 == 97) {
166
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart), offsetof<this>("a"));
410
167
  keyStart = 0;
411
168
  break;
412
- } else {
169
+ } else if (code16 == 98) {
170
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart), offsetof<this>("b"));
413
171
  keyStart = 0;
414
172
  break;
415
- }
416
- }
417
-
418
- case 6: {
419
- const code48 = load<u64>(keyStart) & 281474976710655;
420
- if (code48 == 433798447201) {
421
- store<i32>(changetype<usize>(out), JSON.__deserialize<i32>(lastIndex, srcStart), offsetof<this>("age"));
173
+ } else if (code16 == 99) {
174
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart), offsetof<this>("c"));
422
175
  keyStart = 0;
423
176
  break;
424
- } else if (code48 == 493928513648) {
425
- store<Vec3 | null>(changetype<usize>(out), JSON.__deserialize<Vec3 | null>(lastIndex, srcStart), offsetof<this>("pos"));
177
+ } else if (code16 == 100) {
178
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart), offsetof<this>("d"));
426
179
  keyStart = 0;
427
180
  break;
428
- } else {
181
+ } else if (code16 == 101) {
182
+ store<boolean>(changetype<usize>(out), JSON.__deserialize<boolean>(lastIndex, srcStart), offsetof<this>("e"));
429
183
  keyStart = 0;
430
184
  break;
431
- }
432
- }
433
-
434
- case 16: {
435
- const codeS8 = load<u64>(keyStart, 0);
436
- const codeS16 = load<u64>(keyStart, 8);
437
- if (codeS8 == 32651591226032236 && codeS16 == 28429440805568590) {
438
- store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart), offsetof<this>("lastName"));
185
+ } else if (code16 == 102) {
186
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart), offsetof<this>("f"));
439
187
  keyStart = 0;
440
188
  break;
441
189
  } else {
@@ -466,26 +214,8 @@ class Player {
466
214
  } else if (code == 93) {
467
215
  if (--depth == 0) {
468
216
  srcStart += 2;
469
- switch (<u32>keyEnd - <u32>keyStart) {
470
- case 20: {
471
- const codeS8 = load<u64>(keyStart, 0);
472
- const codeS16 = load<u64>(keyStart, 8);
473
- const codeS20 = load<u32>(keyStart, 16);
474
- if (codeS8 == 32651591226032236 && codeS16 == 29555370777313345 && codeS20 == 6619254) {
475
- store<Array<i32>>(changetype<usize>(out), JSON.__deserialize<Array<i32>>(lastIndex, srcStart), offsetof<this>("lastActive"));
476
- keyStart = 0;
477
- break;
478
- } else {
479
- keyStart = 0;
480
- break;
481
- }
482
- }
483
-
484
- default: {
485
- keyStart = 0;
486
- break;
487
- }
488
- }
217
+ console.log("Value (object, 4): " + JSON.Util.ptrToStr(lastIndex, srcStart));
218
+ keyStart = 0;
489
219
  break;
490
220
  }
491
221
  } else if (code == 91) depth++;
@@ -494,13 +224,12 @@ class Player {
494
224
  } else if (code == 116) {
495
225
  if (load<u64>(srcStart) == 28429475166421108) {
496
226
  srcStart += 8;
227
+ console.log("Value (bool, 5): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));
497
228
  switch (<u32>keyEnd - <u32>keyStart) {
498
- case 20: {
499
- const codeS8 = load<u64>(keyStart, 0);
500
- const codeS16 = load<u64>(keyStart, 8);
501
- const codeS20 = load<u32>(keyStart, 16);
502
- if (codeS8 == 28429342022500457 && codeS16 == 29555310648164466 && codeS20 == 6553701) {
503
- store<boolean>(changetype<usize>(out), true, offsetof<this>("isVerified"));
229
+ case 2: {
230
+ const code16 = load<u16>(keyStart);
231
+ if (code16 == 101) {
232
+ store<boolean>(changetype<usize>(out), true, offsetof<this>("e"));
504
233
  srcStart += 2;
505
234
  keyStart = 0;
506
235
  break;
@@ -522,13 +251,12 @@ class Player {
522
251
  } else if (code == 102) {
523
252
  if (load<u64>(srcStart, 2) == 28429466576093281) {
524
253
  srcStart += 10;
254
+ console.log("Value (bool, 6): " + JSON.Util.ptrToStr(lastIndex, srcStart - 10));
525
255
  switch (<u32>keyEnd - <u32>keyStart) {
526
- case 20: {
527
- const codeS8 = load<u64>(keyStart, 0);
528
- const codeS16 = load<u64>(keyStart, 8);
529
- const codeS20 = load<u32>(keyStart, 16);
530
- if (codeS8 == 28429342022500457 && codeS16 == 29555310648164466 && codeS20 == 6553701) {
531
- store<boolean>(changetype<usize>(out), false, offsetof<this>("isVerified"));
256
+ case 2: {
257
+ const code16 = load<u16>(keyStart);
258
+ if (code16 == 101) {
259
+ store<boolean>(changetype<usize>(out), false, offsetof<this>("e"));
532
260
  srcStart += 2;
533
261
  keyStart = 0;
534
262
  break;
@@ -550,42 +278,9 @@ class Player {
550
278
  } else if (code == 110) {
551
279
  if (load<u64>(srcStart) == 30399761348886638) {
552
280
  srcStart += 8;
553
- switch (<u32>keyEnd - <u32>keyStart) {
554
- case 20: {
555
- const codeS8 = load<u64>(keyStart, 0);
556
- const codeS16 = load<u64>(keyStart, 8);
557
- const codeS20 = load<u32>(keyStart, 16);
558
- if (codeS8 == 32370111954878566 && codeS16 == 27303545189433460 && codeS20 == 6619245) {
559
- store<usize>(changetype<usize>(out), 0, offsetof<this>("firstName"));
560
- srcStart += 2;
561
- keyStart = 0;
562
- break;
563
- } else {
564
- srcStart += 2;
565
- keyStart = 0;
566
- break;
567
- }
568
- }
569
-
570
- case 6: {
571
- const code48 = load<u64>(keyStart) & 281474976710655;
572
- if (code48 == 493928513648) {
573
- store<usize>(changetype<usize>(out), 0, offsetof<this>("pos"));
574
- srcStart += 2;
575
- keyStart = 0;
576
- break;
577
- } else {
578
- srcStart += 2;
579
- keyStart = 0;
580
- break;
581
- }
582
- }
583
-
584
- default: {
585
- srcStart += 2;
586
- keyStart = 0;
587
- }
588
- }
281
+ console.log("Value (null, 7): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));
282
+ srcStart += 2;
283
+ keyStart = 0;
589
284
  }
590
285
  } else {
591
286
  srcStart += 2;
@@ -596,19 +291,13 @@ class Player {
596
291
  return out;
597
292
  }
598
293
  }
599
- const player: Player = {
600
- firstName: "Jairus",
601
- lastName: "Tanaka",
602
- lastActive: [3, 9, 2025],
603
- age: 18,
604
- pos: {
605
- x: 3.4,
606
- y: 1.2,
607
- z: 8.3,
608
- },
609
- isVerified: true,
610
- };
611
- const serialized = JSON.stringify<Player>(player);
612
- const deserialized = JSON.parse<Player>(serialized);
613
- console.log("Serialized " + serialized);
614
- console.log("Deserialized " + JSON.stringify(deserialized));
294
+ const good = `{"a":"a","b":"b","e":true,"c":"c","d":"d"}`;
295
+ const good2 = `{"a":"a","b":"b","c":"c","d":"d","e":false}`;
296
+ const bad = `{"a":"a","b":"b","e":false,"c":"c","d":"d"}`;
297
+ const parsedGood = JSON.parse<Example>(good);
298
+ console.log("a: " + JSON.stringify(parsedGood));
299
+ const parsedGood2 = JSON.parse<Example>(good2);
300
+ console.log("b: " + JSON.stringify(parsedGood2));
301
+ const parsedBad = JSON.parse<Example>(bad);
302
+ console.log("c: " + JSON.stringify(parsedBad));
303
+ console.log(load<u64>(changetype<usize>("alse")).toString());
package/assembly/test.ts CHANGED
@@ -1,42 +1,25 @@
1
-
2
- @json
3
- class Vec3 {
4
- x: f32 = 0.0;
5
- y: f32 = 0.0;
6
- z: f32 = 0.0;
7
- }
1
+ import { JSON } from ".";
8
2
 
9
3
 
10
4
  @json
11
- class Player {
12
-
13
- @alias("first name")
14
- firstName!: string | null;
15
- lastName!: string;
16
- lastActive!: i32[];
17
- // Drop in a code block, function, or expression that evaluates to a boolean
18
- @omitif((self: Player) => self.age < 18)
19
- age!: i32;
20
-
21
- pos!: Vec3 | null;
22
- isVerified!: boolean;
5
+ class Example {
6
+ constructor(
7
+ public a: string,
8
+ public b: string,
9
+ public c: string,
10
+ public d: string,
11
+ public e: boolean,
12
+ ) {}
23
13
  }
24
14
 
25
- const player: Player = {
26
- firstName: "Jairus",
27
- lastName: "Tanaka",
28
- lastActive: [3, 9, 2025],
29
- age: 18,
30
- pos: {
31
- x: 3.4,
32
- y: 1.2,
33
- z: 8.3,
34
- },
35
- isVerified: true,
36
- };
37
-
38
- const serialized = JSON.stringify<Player>(player);
39
- const deserialized = JSON.parse<Player>(serialized);
40
-
41
- console.log("Serialized " + serialized);
42
- console.log("Deserialized " + JSON.stringify(deserialized));
15
+ const good = `{"a":"a","b":"b","e":true,"c":"c","d":"d"}`;
16
+ const good2 = `{"a":"a","b":"b","c":"c","d":"d","e":false}`;
17
+ const bad = `{"a":"a","b":"b","e":false,"c":"c","d":"d"}`;
18
+ const parsedGood = JSON.parse<Example>(good);
19
+ console.log("a: " + JSON.stringify(parsedGood));
20
+ const parsedGood2 = JSON.parse<Example>(good2);
21
+ console.log("b: " + JSON.stringify(parsedGood2));
22
+ const parsedBad = JSON.parse<Example>(bad);
23
+ console.log("c: " + JSON.stringify(parsedBad));
24
+
25
+ console.log(load<u64>(changetype<usize>("alse")).toString());