json-as 1.1.14 → 1.1.15-preview.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.
@@ -9,6 +9,7 @@ import { deserializeStructArray } from "./array/struct";
9
9
  import { deserializeStringArray } from "./array/string";
10
10
  import { deserializeObjectArray } from "./array/object";
11
11
  import { deserializeBoxArray } from "./array/box";
12
+ import { deserializeRawArray } from "./array/raw";
12
13
 
13
14
  // @ts-ignore: Decorator valid here
14
15
  export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
@@ -23,7 +24,7 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
23
24
  } else if (isFloat<valueof<T>>()) {
24
25
  // @ts-ignore
25
26
  return deserializeFloatArray<T>(srcStart, srcEnd, dst);
26
- } else if (isArrayLike<valueof<T>>()) {
27
+ } else if (isArray<valueof<T>>()) {
27
28
  // @ts-ignore: type
28
29
  return deserializeArrayArray<T>(srcStart, srcEnd, dst);
29
30
  } else if (isManaged<valueof<T>>() || isReference<valueof<T>>()) {
@@ -37,6 +38,9 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
37
38
  } else if (type instanceof JSON.Obj) {
38
39
  // @ts-ignore: type
39
40
  return deserializeObjectArray<T>(srcStart, srcEnd, dst);
41
+ } else if (type instanceof JSON.Raw) {
42
+ // @ts-ignore: type
43
+ return deserializeRawArray(srcStart, srcEnd, dst);
40
44
  } else if (type instanceof Map) {
41
45
  // @ts-ignore: type
42
46
  return deserializeMapArray<T>(srcStart, srcEnd, dst);
package/assembly/index.ts CHANGED
@@ -131,7 +131,7 @@ export namespace JSON {
131
131
  memory.copy(changetype<usize>(out) + 2, changetype<usize>(data.toISOString()), 48);
132
132
  store<u16>(changetype<usize>(out), QUOTE, 50);
133
133
  return changetype<string>(out);
134
- } else if (data instanceof Array) {
134
+ } else if (data instanceof Array || data instanceof StaticArray) {
135
135
  // @ts-ignore
136
136
  inline.always(serializeArray(changetype<nonnull<T>>(data)));
137
137
  return bs.out<string>();
@@ -332,13 +332,6 @@ export namespace JSON {
332
332
  this.type = JSON.Types.Struct;
333
333
  store<T>(changetype<usize>(this), value, STORAGE);
334
334
  // @ts-ignore: supplied by transform
335
- } else if (isDefined(value.__SERIALIZE_CUSTOM)) {
336
- this.type = idof<T>() + JSON.Types.Struct;
337
- // @ts-ignore
338
- if (!JSON.Value.METHODS.has(idof<T>())) JSON.Value.METHODS.set(idof<T>(), value.__SERIALIZE_CUSTOM.index);
339
- // @ts-ignore
340
- store<usize>(changetype<usize>(this), changetype<usize>(value), STORAGE);
341
- // @ts-ignore: supplied by transform
342
335
  } else if (isDefined(value.__SERIALIZE)) {
343
336
  this.type = idof<T>() + JSON.Types.Struct;
344
337
  // @ts-ignore
@@ -364,6 +357,15 @@ export namespace JSON {
364
357
  return load<T>(changetype<usize>(this), STORAGE);
365
358
  }
366
359
 
360
+ /**
361
+ * Gets the value of the JSON.Value instance.
362
+ * Alias for .get<T>()
363
+ * @returns The encapsulated value.
364
+ */
365
+ @inline as<T>(): T {
366
+ return load<T>(changetype<usize>(this), STORAGE);
367
+ }
368
+
367
369
  /**
368
370
  * Converts the JSON.Value to a string representation.
369
371
  * @returns The string representation of the JSON.Value.
@@ -552,7 +554,7 @@ export namespace JSON {
552
554
  } else if (src instanceof Date) {
553
555
  // @ts-ignore
554
556
  inline.always(serializeDate(changetype<nonnull<T>>(src)));
555
- } else if (src instanceof Array) {
557
+ } else if (src instanceof Array || src instanceof StaticArray) {
556
558
  // @ts-ignore
557
559
  serializeArray(changetype<nonnull<T>>(src));
558
560
  } else if (src instanceof Map) {
@@ -733,7 +735,7 @@ export namespace JSON {
733
735
  memory.copy(changetype<usize>(out) + 2, changetype<usize>(data.toISOString()), 48);
734
736
  store<u16>(changetype<usize>(out), QUOTE, 50);
735
737
  return changetype<string>(out);
736
- } else if (data instanceof Array) {
738
+ } else if (data instanceof Array || data instanceof StaticArray) {
737
739
  bs.saveState();
738
740
  // @ts-ignore
739
741
  inline.always(serializeArray(changetype<nonnull<T>>(data)));
@@ -0,0 +1,378 @@
1
+ import { bs } from "../lib/as-bs";
2
+ import { JSON } from ".";
3
+
4
+ @json
5
+ class GenericEnum<T> {
6
+ private tag: string = "";
7
+ private value: T | null = null;
8
+ constructor() {
9
+ this.tag = "";
10
+ this.value = null;
11
+ }
12
+ static create<T>(tag: string, value: T): GenericEnum<T> {
13
+ const item = new GenericEnum<T>();
14
+ item.tag = tag;
15
+ item.value = value;
16
+ return item;
17
+ }
18
+ getTag(): string {
19
+ return this.tag;
20
+ }
21
+ getValue(): T | null {
22
+ return this.value;
23
+ }
24
+
25
+ @serializer
26
+ @inline
27
+ serialize<T>(self: GenericEnum<T>): string {
28
+ const tagJson = JSON.internal.stringify(self.tag);
29
+ const valueJson = JSON.internal.stringify(self.value);
30
+ return `{${tagJson}:${valueJson}}`;
31
+ }
32
+
33
+ @deserializer
34
+ @inline
35
+ deserialize(data: string): GenericEnum<T> {
36
+ const parsed = JSON.parse<Map<string, JSON.Raw>>(data);
37
+ const result = new GenericEnum<T>();
38
+ const keys = parsed.keys();
39
+ const values = parsed.values();
40
+ result.tag = keys[0];
41
+ result.value = JSON.parse<T>(values[0].data);
42
+ return result;
43
+ }
44
+ __SERIALIZE(ptr: usize): void {
45
+ const data = this.serialize(this);
46
+ bs.resetState();
47
+ const dataSize = data.length << 1;
48
+ memory.copy(bs.offset, changetype<usize>(data), dataSize);
49
+ bs.offset += dataSize;
50
+ }
51
+
52
+ @inline
53
+ __INITIALIZE(): this {
54
+ this.tag = "";
55
+ this.value = null;
56
+ return this;
57
+ }
58
+ __DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {
59
+ return inline.always(this.deserialize(JSON.Util.ptrToStr(srcStart, srcEnd)));
60
+ }
61
+ }
62
+
63
+ @json
64
+ class Node<T> {
65
+ name: string;
66
+ id: u32;
67
+ data: T;
68
+ constructor() {
69
+ this.name = "";
70
+ this.id = 0;
71
+ this.data = changetype<T>(0);
72
+ }
73
+ __SERIALIZE(ptr: usize): void {
74
+ bs.proposeSize(66);
75
+ store<u64>(bs.offset, 27303545189564539, 0);
76
+ store<u64>(bs.offset, 16325694684725357, 8);
77
+ bs.offset += 16;
78
+ JSON.__serialize<string>(load<string>(ptr, offsetof<this>("name")));
79
+ store<u64>(bs.offset, 28147948644859948, 0);
80
+ store<u32>(bs.offset, 3801122, 8);
81
+ bs.offset += 12;
82
+ JSON.__serialize<u32>(load<u32>(ptr, offsetof<this>("id")));
83
+ store<u64>(bs.offset, 27303502239891500, 0);
84
+ store<u64>(bs.offset, 16325694684463220, 8);
85
+ bs.offset += 16;
86
+ JSON.__serialize<T>(load<T>(ptr, offsetof<this>("data")));
87
+ store<u16>(bs.offset, 125, 0);
88
+ bs.offset += 2;
89
+ }
90
+
91
+ @inline
92
+ __INITIALIZE(): this {
93
+ this.name = "";
94
+ return this;
95
+ }
96
+ __DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {
97
+ let keyStart: usize = 0;
98
+ let keyEnd: usize = 0;
99
+ let isKey = false;
100
+ let depth: i32 = 0;
101
+ let lastIndex: usize = 0;
102
+ while (srcStart < srcEnd && JSON.Util.isSpace(load<u16>(srcStart))) srcStart += 2;
103
+ while (srcEnd > srcStart && JSON.Util.isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
104
+ if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
105
+ if (load<u16>(srcStart) != 123) throw new Error("Expected '{' at start of object at position " + (srcEnd - srcStart).toString());
106
+ if (load<u16>(srcEnd - 2) != 125) throw new Error("Expected '}' at end of object at position " + (srcEnd - srcStart).toString());
107
+ srcStart += 2;
108
+ while (srcStart < srcEnd) {
109
+ let code = load<u16>(srcStart);
110
+ while (JSON.Util.isSpace(code)) code = load<u16>((srcStart += 2));
111
+ if (keyStart == 0) {
112
+ if (code == 34 && load<u16>(srcStart - 2) !== 92) {
113
+ if (isKey) {
114
+ keyStart = lastIndex;
115
+ keyEnd = srcStart;
116
+ console.log("Key: " + JSON.Util.ptrToStr(keyStart, keyEnd));
117
+ while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}
118
+ if (code !== 58) throw new Error("Expected ':' after key at position " + (srcEnd - srcStart).toString());
119
+ isKey = false;
120
+ } else {
121
+ isKey = true;
122
+ lastIndex = srcStart + 2;
123
+ }
124
+ }
125
+ srcStart += 2;
126
+ } else {
127
+ if (code == 34) {
128
+ lastIndex = srcStart;
129
+ srcStart += 2;
130
+ while (srcStart < srcEnd) {
131
+ const code = load<u16>(srcStart);
132
+ if (code == 34 && load<u16>(srcStart - 2) !== 92) {
133
+ console.log("Value (string, 8): " + JSON.Util.ptrToStr(lastIndex, srcStart + 2));
134
+ switch (<u32>keyEnd - <u32>keyStart) {
135
+ case 8: {
136
+ const code64 = load<u64>(keyStart);
137
+ if (code64 == 28429440805568622) {
138
+ store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("name"));
139
+ srcStart += 4;
140
+ keyStart = 0;
141
+ break;
142
+ } else if (isString<T>() && code64 == 27303570963497060) {
143
+ store<T>(changetype<usize>(out), JSON.__deserialize<T>(lastIndex, srcStart + 2), offsetof<this>("data"));
144
+ srcStart += 4;
145
+ keyStart = 0;
146
+ break;
147
+ } else {
148
+ srcStart += 4;
149
+ keyStart = 0;
150
+ break;
151
+ }
152
+ }
153
+
154
+ default: {
155
+ srcStart += 4;
156
+ keyStart = 0;
157
+ break;
158
+ }
159
+ }
160
+ break;
161
+ }
162
+ srcStart += 2;
163
+ }
164
+ } else if (code - 48 <= 9 || code == 45) {
165
+ lastIndex = srcStart;
166
+ srcStart += 2;
167
+ while (srcStart < srcEnd) {
168
+ const code = load<u16>(srcStart);
169
+ if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {
170
+ console.log("Value (number, 9): " + JSON.Util.ptrToStr(lastIndex, srcStart));
171
+ switch (<u32>keyEnd - <u32>keyStart) {
172
+ case 4: {
173
+ const code32 = load<u32>(keyStart);
174
+ if (code32 == 6553705) {
175
+ store<u32>(changetype<usize>(out), JSON.__deserialize<u32>(lastIndex, srcStart), offsetof<this>("id"));
176
+ srcStart += 2;
177
+ keyStart = 0;
178
+ break;
179
+ } else {
180
+ srcStart += 2;
181
+ keyStart = 0;
182
+ break;
183
+ }
184
+ }
185
+
186
+ case 8: {
187
+ const code64 = load<u64>(keyStart);
188
+ if ((isInteger<T>() || isFloat<T>()) && code64 == 27303570963497060) {
189
+ store<T>(changetype<usize>(out), JSON.__deserialize<T>(lastIndex, srcStart), offsetof<this>("data"));
190
+ srcStart += 2;
191
+ keyStart = 0;
192
+ break;
193
+ } else {
194
+ srcStart += 2;
195
+ keyStart = 0;
196
+ break;
197
+ }
198
+ }
199
+
200
+ default: {
201
+ srcStart += 2;
202
+ keyStart = 0;
203
+ break;
204
+ }
205
+ }
206
+ break;
207
+ }
208
+ srcStart += 2;
209
+ }
210
+ } else if (code == 123) {
211
+ lastIndex = srcStart;
212
+ depth++;
213
+ srcStart += 2;
214
+ while (srcStart < srcEnd) {
215
+ const code = load<u16>(srcStart);
216
+ if (code == 34) {
217
+ srcStart += 2;
218
+ while (!(load<u16>(srcStart) == 34 && load<u16>(srcStart - 2) != 92)) srcStart += 2;
219
+ } else if (code == 125) {
220
+ if (--depth == 0) {
221
+ srcStart += 2;
222
+ console.log("Value (object, 10): " + JSON.Util.ptrToStr(lastIndex, srcStart));
223
+ switch (<u32>keyEnd - <u32>keyStart) {
224
+ case 8: {
225
+ const code64 = load<u64>(keyStart);
226
+ if (isDefined(out.__DESERIALIZE) && code64 == 27303570963497060) {
227
+ store<T>(changetype<usize>(out), JSON.__deserialize<T>(lastIndex, srcStart), offsetof<this>("data"));
228
+ keyStart = 0;
229
+ break;
230
+ } else {
231
+ keyStart = 0;
232
+ break;
233
+ }
234
+ }
235
+
236
+ default: {
237
+ keyStart = 0;
238
+ break;
239
+ }
240
+ }
241
+ break;
242
+ }
243
+ } else if (code == 123) depth++;
244
+ srcStart += 2;
245
+ }
246
+ } else if (code == 91) {
247
+ lastIndex = srcStart;
248
+ depth++;
249
+ srcStart += 2;
250
+ while (srcStart < srcEnd) {
251
+ const code = load<u16>(srcStart);
252
+ if (code == 34) {
253
+ srcStart += 2;
254
+ while (!(load<u16>(srcStart) == 34 && load<u16>(srcStart - 2) != 92)) srcStart += 2;
255
+ } else if (code == 93) {
256
+ if (--depth == 0) {
257
+ srcStart += 2;
258
+ console.log("Value (object, 11): " + JSON.Util.ptrToStr(lastIndex, srcStart));
259
+ switch (<u32>keyEnd - <u32>keyStart) {
260
+ case 8: {
261
+ const code64 = load<u64>(keyStart);
262
+ if (isArray<T>() && code64 == 27303570963497060) {
263
+ store<T>(changetype<usize>(out), JSON.__deserialize<T>(lastIndex, srcStart), offsetof<this>("data"));
264
+ keyStart = 0;
265
+ break;
266
+ } else {
267
+ keyStart = 0;
268
+ break;
269
+ }
270
+ }
271
+
272
+ default: {
273
+ keyStart = 0;
274
+ break;
275
+ }
276
+ }
277
+ break;
278
+ }
279
+ } else if (code == 91) depth++;
280
+ srcStart += 2;
281
+ }
282
+ } else if (code == 116) {
283
+ if (load<u64>(srcStart) == 28429475166421108) {
284
+ srcStart += 8;
285
+ console.log("Value (bool, 12): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));
286
+ switch (<u32>keyEnd - <u32>keyStart) {
287
+ case 8: {
288
+ const code64 = load<u64>(keyStart);
289
+ if (isBoolean<T>() && code64 == 27303570963497060) {
290
+ store<boolean>(changetype<usize>(out), true, offsetof<this>("data"));
291
+ srcStart += 2;
292
+ keyStart = 0;
293
+ break;
294
+ } else {
295
+ srcStart += 2;
296
+ keyStart = 0;
297
+ break;
298
+ }
299
+ }
300
+
301
+ default: {
302
+ srcStart += 2;
303
+ keyStart = 0;
304
+ }
305
+ }
306
+ } else {
307
+ throw new Error("Expected to find 'true' but found '" + JSON.Util.ptrToStr(lastIndex, srcStart) + "' instead at position " + (srcEnd - srcStart).toString());
308
+ }
309
+ } else if (code == 102) {
310
+ if (load<u64>(srcStart, 2) == 28429466576093281) {
311
+ srcStart += 10;
312
+ console.log("Value (bool, 13): " + JSON.Util.ptrToStr(lastIndex, srcStart - 10));
313
+ switch (<u32>keyEnd - <u32>keyStart) {
314
+ case 8: {
315
+ const code64 = load<u64>(keyStart);
316
+ if (isBoolean<T>() && code64 == 27303570963497060) {
317
+ store<boolean>(changetype<usize>(out), false, offsetof<this>("data"));
318
+ srcStart += 2;
319
+ keyStart = 0;
320
+ break;
321
+ } else {
322
+ srcStart += 2;
323
+ keyStart = 0;
324
+ break;
325
+ }
326
+ }
327
+
328
+ default: {
329
+ srcStart += 2;
330
+ keyStart = 0;
331
+ }
332
+ }
333
+ } else {
334
+ throw new Error("Expected to find 'false' but found '" + JSON.Util.ptrToStr(lastIndex, srcStart) + "' instead at position " + (srcEnd - srcStart).toString());
335
+ }
336
+ } else if (code == 110) {
337
+ if (load<u64>(srcStart) == 30399761348886638) {
338
+ srcStart += 8;
339
+ console.log("Value (null, 14): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));
340
+ switch (<u32>keyEnd - <u32>keyStart) {
341
+ case 8: {
342
+ const code64 = load<u64>(keyStart);
343
+ if (isNullable<T>() && code64 == 27303570963497060) {
344
+ store<usize>(changetype<usize>(out), 0, offsetof<this>("data"));
345
+ srcStart += 2;
346
+ keyStart = 0;
347
+ break;
348
+ } else {
349
+ srcStart += 2;
350
+ keyStart = 0;
351
+ break;
352
+ }
353
+ }
354
+
355
+ default: {
356
+ srcStart += 2;
357
+ keyStart = 0;
358
+ }
359
+ }
360
+ }
361
+ } else {
362
+ srcStart += 2;
363
+ keyStart = 0;
364
+ }
365
+ }
366
+ }
367
+ return out;
368
+ }
369
+ }
370
+ const enumValue = GenericEnum.create<string>("success", "Hello World");
371
+ const node = new Node<GenericEnum<string>>();
372
+ node.name = "test-node";
373
+ node.id = 42;
374
+ node.data = enumValue;
375
+ const serialized = JSON.stringify(node);
376
+ console.log("Serialized Node: " + serialized);
377
+ const deserialized = JSON.parse<Node<GenericEnum<string>>>(serialized);
378
+ console.log("Deserialized Node: " + JSON.stringify(deserialized));
package/assembly/test.ts CHANGED
@@ -1,33 +1,76 @@
1
1
  import { JSON } from ".";
2
- import { Vec3 } from "./types";
2
+
3
+
4
+ @json
5
+ class GenericEnum<T> {
6
+ private tag: string = "";
7
+ private value: T | null = null;
8
+
9
+ constructor() {
10
+ this.tag = "";
11
+ this.value = null;
12
+ }
13
+
14
+ static create<T>(tag: string, value: T): GenericEnum<T> {
15
+ const item = new GenericEnum<T>();
16
+ item.tag = tag;
17
+ item.value = value;
18
+ return item;
19
+ }
20
+
21
+ getTag(): string {
22
+ return this.tag;
23
+ }
24
+
25
+ getValue(): T | null {
26
+ return this.value;
27
+ }
28
+
29
+ @serializer
30
+ serialize<T>(self: GenericEnum<T>): string {
31
+ const tagJson = JSON.stringify(self.tag);
32
+ const valueJson = JSON.stringify(self.value);
33
+ return `{${tagJson}:${valueJson}}`;
34
+ }
35
+
36
+ @deserializer
37
+ deserialize(data: string): GenericEnum<T> {
38
+ const parsed = JSON.parse<Map<string, JSON.Raw>>(data);
39
+ const result = new GenericEnum<T>();
40
+
41
+ const keys = parsed.keys();
42
+ const values = parsed.values();
43
+
44
+ result.tag = keys[0];
45
+ result.value = JSON.parse<T>(values[0].data);
46
+
47
+ return result;
48
+ }
49
+ }
50
+
3
51
 
4
52
  @json
5
- class Player {
6
- @alias("first name")
7
- firstName!: string;
8
- lastName!: string;
9
- lastActive!: i32[];
10
- @omitif((self: Player) => self.age < 18)
11
- age!: i32;
12
- @omitnull()
13
- pos!: Vec3 | null;
14
- isVerified!: boolean;
53
+ class Node<T> {
54
+ name: string;
55
+ id: u32;
56
+ data: T;
57
+
58
+ constructor() {
59
+ this.name = "";
60
+ this.id = 0;
61
+ this.data = changetype<T>(0);
62
+ }
15
63
  }
16
64
 
17
- const player: Player = {
18
- firstName: "Jairus",
19
- lastName: "Tanaka",
20
- lastActive: [3, 9, 2025],
21
- age: 18,
22
- pos: {
23
- x: 3.4,
24
- y: 1.2,
25
- z: 8.3,
26
- },
27
- isVerified: true,
28
- };
29
-
30
- const serialized = JSON.stringify(player);
31
- console.log("Serialized: " + serialized);
32
- const deserialized = JSON.parse<Player>(serialized);
33
- console.log("Deserialized: " + JSON.stringify(deserialized))
65
+ const enumValue = GenericEnum.create<string>("success", "Hello World");
66
+
67
+ const node = new Node<GenericEnum<string>>();
68
+ node.name = "test-node";
69
+ node.id = 42;
70
+ node.data = enumValue;
71
+
72
+ const serialized = JSON.stringify(node);
73
+ console.log("Serialized Node: " + serialized);
74
+
75
+ const deserialized = JSON.parse<Node<GenericEnum<string>>>(serialized);
76
+ console.log("Deserialized Node: " + JSON.stringify(deserialized));
package/assembly/types.ts CHANGED
@@ -1,35 +1,40 @@
1
- import { JSON } from "."
1
+ import { JSON } from ".";
2
+
2
3
 
3
4
  @json
4
5
  export class GenericEnum<T> {
5
- private tag: string = ""
6
- private value: T | null = null
6
+ private tag: string = "";
7
+ private value: T | null = null;
7
8
 
8
9
  constructor() {
9
- this.tag = ""
10
- this.value = null
10
+ this.tag = "";
11
+ this.value = null;
11
12
  }
12
13
 
13
14
  static create<T>(tag: string, value: T): GenericEnum<T> {
14
- const item = new GenericEnum<T>()
15
- item.tag = tag
16
- item.value = value
17
- return item
15
+ const item = new GenericEnum<T>();
16
+ item.tag = tag;
17
+ item.value = value;
18
+ return item;
18
19
  }
19
20
 
20
21
  getTag(): string {
21
- return this.tag
22
+ return this.tag;
22
23
  }
23
24
 
24
25
  getValue(): T | null {
25
- return this.value
26
+ return this.value;
26
27
  }
28
+
29
+
27
30
  @serializer
28
31
  serialize<T>(self: GenericEnum<T>): string {
29
32
  const tagJson = JSON.stringify(self.tag);
30
33
  const valueJson = JSON.stringify(self.value);
31
- return `{${tagJson}:${valueJson}}`
34
+ return `{${tagJson}:${valueJson}}`;
32
35
  }
36
+
37
+
33
38
  @deserializer
34
39
  deserialize(data: string): GenericEnum<T> {
35
40
  const parsed = JSON.parse<Map<string, JSON.Raw>>(data);
@@ -45,19 +50,21 @@ export class GenericEnum<T> {
45
50
  }
46
51
  }
47
52
 
53
+
48
54
  @json
49
55
  export class Node<T> {
50
- name: string
51
- id: u32
52
- data: T
56
+ name: string;
57
+ id: u32;
58
+ data: T;
53
59
 
54
60
  constructor() {
55
- this.name = ""
56
- this.id = 0
61
+ this.name = "";
62
+ this.id = 0;
57
63
  this.data = changetype<T>(0);
58
64
  }
59
65
  }
60
66
 
67
+
61
68
  @json
62
69
  export class Vec3 {
63
70
  x: f32 = 0.0;
@@ -65,5 +72,6 @@ export class Vec3 {
65
72
  z: f32 = 0.0;
66
73
  }
67
74
 
75
+
68
76
  @json
69
- export class Point { }
77
+ export class Point {}