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.
- package/CHANGELOG.md +9 -0
- package/README.md +42 -50
- package/assembly/__tests__/arbitrary.spec.ts +16 -0
- package/assembly/__tests__/enum.spec.ts +35 -0
- package/assembly/deserialize/simd/string.ts +18 -19
- package/assembly/deserialize/simple/object.ts +15 -8
- package/assembly/index.ts +15 -9
- package/assembly/serialize/simd/string.ts +2 -3
- package/assembly/serialize/simple/arbitrary.ts +1 -0
- package/assembly/serialize/simple/array.ts +1 -1
- package/assembly/serialize/simple/bool.ts +1 -1
- package/assembly/serialize/simple/float.ts +3 -1
- package/assembly/serialize/simple/integer.ts +1 -1
- package/assembly/serialize/simple/map.ts +2 -2
- package/assembly/serialize/simple/object.ts +28 -26
- package/assembly/test.tmp.ts +91 -402
- package/assembly/test.ts +20 -37
- package/lib/as-bs.ts +13 -12
- package/package.json +7 -7
- package/run-bench.as.sh +3 -3
- package/run-bench.js.sh +1 -1
- package/run-tests.sh +1 -1
- package/transform/lib/index.js +52 -18
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/types.js +22 -1
- package/transform/lib/types.js.map +1 -1
- package/transform/src/index.ts +61 -19
- package/transform/src/types.ts +36 -2
package/lib/as-bs.ts
CHANGED
|
@@ -5,13 +5,13 @@ import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
|
5
5
|
*/
|
|
6
6
|
export namespace bs {
|
|
7
7
|
/** Current buffer pointer. */ // @ts-ignore
|
|
8
|
-
export let buffer: ArrayBuffer = new ArrayBuffer(
|
|
8
|
+
export let buffer: ArrayBuffer = new ArrayBuffer(128); //__new(128, idof<ArrayBuffer>());
|
|
9
9
|
|
|
10
10
|
/** Current offset within the buffer. */
|
|
11
11
|
export let offset: usize = changetype<usize>(buffer);
|
|
12
12
|
|
|
13
13
|
/** Byte length of the buffer. */
|
|
14
|
-
let bufferSize: usize =
|
|
14
|
+
let bufferSize: usize = 128;
|
|
15
15
|
|
|
16
16
|
/** Proposed size of output */
|
|
17
17
|
export let stackSize: usize = 0;
|
|
@@ -56,9 +56,9 @@ export namespace bs {
|
|
|
56
56
|
*/
|
|
57
57
|
// @ts-ignore: decorator
|
|
58
58
|
@inline export function ensureSize(size: u32): void {
|
|
59
|
-
// console.log("Ensure " + (
|
|
59
|
+
// console.log("Ensure " + (size).toString() + " -> " + (offset + size).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
|
|
60
60
|
if (offset + size > bufferSize + changetype<usize>(buffer)) {
|
|
61
|
-
const deltaBytes =
|
|
61
|
+
const deltaBytes = size + 128;
|
|
62
62
|
bufferSize += deltaBytes;
|
|
63
63
|
// @ts-ignore: exists
|
|
64
64
|
const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
|
|
@@ -74,9 +74,9 @@ export namespace bs {
|
|
|
74
74
|
*/
|
|
75
75
|
// @ts-ignore: decorator
|
|
76
76
|
@inline export function proposeSize(size: u32): void {
|
|
77
|
-
// console.log("Propose " + (
|
|
77
|
+
// console.log("Propose " + (size).toString() + " -> " + (stackSize + size).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
|
|
78
78
|
if ((stackSize += size) > bufferSize) {
|
|
79
|
-
const deltaBytes =
|
|
79
|
+
const deltaBytes = size;
|
|
80
80
|
bufferSize += deltaBytes;
|
|
81
81
|
// @ts-ignore: exists
|
|
82
82
|
const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
|
|
@@ -86,15 +86,15 @@ export namespace bs {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
|
-
* Increases the proposed size by
|
|
89
|
+
* Increases the proposed size by n + 128 if necessary.
|
|
90
90
|
* If necessary, reallocates the buffer to the exact new size.
|
|
91
91
|
* @param size - The size to grow by.
|
|
92
92
|
*/
|
|
93
93
|
// @ts-ignore: decorator
|
|
94
94
|
@inline export function growSize(size: u32): void {
|
|
95
|
-
// console.log("Grow " + (
|
|
95
|
+
// console.log("Grow " + (size).toString() + " -> " + (stackSize + size).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
|
|
96
96
|
if ((stackSize += size) > bufferSize) {
|
|
97
|
-
const deltaBytes =
|
|
97
|
+
const deltaBytes = size + 128;
|
|
98
98
|
bufferSize += deltaBytes;
|
|
99
99
|
// @ts-ignore
|
|
100
100
|
const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
|
|
@@ -147,6 +147,7 @@ export namespace bs {
|
|
|
147
147
|
// @ts-ignore: Decorator valid here
|
|
148
148
|
@inline export function out<T>(): T {
|
|
149
149
|
const len = offset - changetype<usize>(buffer);
|
|
150
|
+
// console.log("Out " + (len).toString() + " -> " + (stackSize).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
|
|
150
151
|
// @ts-ignore: exists
|
|
151
152
|
const _out = __new(len, idof<T>());
|
|
152
153
|
memory.copy(_out, changetype<usize>(buffer), len);
|
|
@@ -177,9 +178,9 @@ export namespace bs {
|
|
|
177
178
|
}
|
|
178
179
|
|
|
179
180
|
// @ts-ignore: Decorator valid here
|
|
180
|
-
@inline function nextPowerOf2(n: u32): u32 {
|
|
181
|
-
|
|
182
|
-
}
|
|
181
|
+
// @inline function nextPowerOf2(n: u32): u32 {
|
|
182
|
+
// return 1 << (32 - clz(n - 1));
|
|
183
|
+
// }
|
|
183
184
|
|
|
184
185
|
// @ts-ignore: Decorator valid here
|
|
185
186
|
@inline function bytes<T>(o: T): i32 {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-as",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.22",
|
|
4
4
|
"author": "Jairus Tanaka",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,13 +9,12 @@
|
|
|
9
9
|
"main": "transform/lib/index.js",
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"@assemblyscript/wasi-shim": "^0.1.0",
|
|
12
|
-
"@types/node": "^24.
|
|
13
|
-
"assemblyscript": "^0.28.
|
|
12
|
+
"@types/node": "^24.2.1",
|
|
13
|
+
"assemblyscript": "^0.28.4",
|
|
14
14
|
"assemblyscript-prettier": "^3.0.1",
|
|
15
15
|
"prettier": "^3.6.2",
|
|
16
|
-
"tinybench": "^
|
|
17
|
-
"
|
|
18
|
-
"typescript": "^5.8.3"
|
|
16
|
+
"tinybench": "^5.0.1",
|
|
17
|
+
"typescript": "^5.9.2"
|
|
19
18
|
},
|
|
20
19
|
"bugs": {
|
|
21
20
|
"url": "https://github.com/JairusSW/json-as/issues"
|
|
@@ -58,7 +57,8 @@
|
|
|
58
57
|
"test": "bash ./run-tests.sh",
|
|
59
58
|
"bench:as": "bash ./run-bench.as.sh",
|
|
60
59
|
"bench:js": "bash ./run-bench.js.sh",
|
|
61
|
-
"build:test": "rm -rf ./build/ && JSON_DEBUG=
|
|
60
|
+
"build:test": "rm -rf ./build/ && JSON_DEBUG=2 JSON_WRITE=assembly/test.ts asc assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --enable simd --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
|
|
61
|
+
"build:tmp:test": "rm -rf ./build/ && JSON_DEBUG=1 asc assembly/test.tmp.ts -o ./build/test.wasm --textFile ./build/test.wat --enable simd --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
|
|
62
62
|
"build:test:wine": "JSON_DEBUG=1 JSON_WRITE=assembly/test.ts NODE_SKIP_PLATFORM_CHECK=1 wine ~/.win-bin/node/node.exe ./node_modules/assemblyscript/bin/asc.js assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
|
|
63
63
|
"test:wasmtime": "wasmtime ./build/test.wasm",
|
|
64
64
|
"test:wasmer": "wasmer ./build/test.wasm",
|
package/run-bench.as.sh
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
RUNTIMES=${RUNTIMES:-"minimal stub"}
|
|
3
3
|
ENGINES=${ENGINES:-"liftoff ignition sparkplug turbofan llvm"}
|
|
4
|
-
for file in ./assembly/__benches__/
|
|
4
|
+
for file in ./assembly/__benches__/vec3.bench.ts; do
|
|
5
5
|
filename=$(basename -- "$file")
|
|
6
6
|
for runtime in $RUNTIMES; do
|
|
7
7
|
output="./build/${filename%.ts}.${runtime}"
|
|
8
8
|
|
|
9
|
-
npx asc "$file" --transform ./transform -o "${output}.1" -O3 --converge --noAssert --uncheckedBehavior always --runtime $runtime --enable bulk-memory --exportStart start || {
|
|
9
|
+
npx asc "$file" --transform ./transform -o "${output}.1" -O3 --converge --noAssert --uncheckedBehavior always --runtime $runtime --enable simd --enable bulk-memory --exportStart start || {
|
|
10
10
|
echo "Build failed"
|
|
11
11
|
exit 1
|
|
12
12
|
}
|
|
@@ -43,7 +43,7 @@ for file in ./assembly/__benches__/abc.bench.ts; do
|
|
|
43
43
|
fi
|
|
44
44
|
|
|
45
45
|
if [[ "$engine" == "llvm" ]]; then
|
|
46
|
-
wasmer run --
|
|
46
|
+
wasmer run --cranelift --enable-simd --enable-bulk-memory "${output}.wasi.wasm"
|
|
47
47
|
fi
|
|
48
48
|
done
|
|
49
49
|
done
|
package/run-bench.js.sh
CHANGED
package/run-tests.sh
CHANGED
|
@@ -8,7 +8,7 @@ for file in ./assembly/__tests__/*.spec.ts; do
|
|
|
8
8
|
output="./build/${filename%.ts}.wasm"
|
|
9
9
|
|
|
10
10
|
start_time=$(date +%s%3N)
|
|
11
|
-
npx asc "$file" --transform ./transform -o "$output" --enable simd --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --disableWarning 226 || { echo "Tests failed"; exit 1; }
|
|
11
|
+
npx asc "$file" --transform ./transform -o "$output" --runtime incremental --enable simd --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --debug --disableWarning 226 || { echo "Tests failed"; exit 1; }
|
|
12
12
|
end_time=$(date +%s%3N)
|
|
13
13
|
|
|
14
14
|
build_time=$((end_time - start_time))
|
package/transform/lib/index.js
CHANGED
|
@@ -33,6 +33,37 @@ export class JSONTransform extends Visitor {
|
|
|
33
33
|
throw new Error("Class " + node.name.text + " is missing an @json or @serializable decorator in " + node.range.source.internalPath);
|
|
34
34
|
this.visitClassDeclaration(node);
|
|
35
35
|
}
|
|
36
|
+
resolveType(type, source, visited = new Set()) {
|
|
37
|
+
const stripped = stripNull(type);
|
|
38
|
+
if (visited.has(stripped)) {
|
|
39
|
+
return stripped;
|
|
40
|
+
}
|
|
41
|
+
visited.add(stripped);
|
|
42
|
+
const resolvedType = source.aliases.find(v => stripNull(v.name) === stripped)?.getBaseType();
|
|
43
|
+
if (resolvedType) {
|
|
44
|
+
return this.resolveType(resolvedType, source, visited);
|
|
45
|
+
}
|
|
46
|
+
for (const imp of source.imports) {
|
|
47
|
+
if (!imp.declarations)
|
|
48
|
+
continue;
|
|
49
|
+
for (const decl of imp.declarations) {
|
|
50
|
+
if (decl.name.text === stripped) {
|
|
51
|
+
const externalSource = this.parser.sources.find(s => s.internalPath === imp.internalPath);
|
|
52
|
+
if (externalSource) {
|
|
53
|
+
const externalSrc = this.sources.get(externalSource);
|
|
54
|
+
if (!externalSrc)
|
|
55
|
+
continue;
|
|
56
|
+
const externalAlias = externalSrc.aliases.find(a => a.name === decl.foreignName.text);
|
|
57
|
+
if (externalAlias) {
|
|
58
|
+
const externalType = externalAlias.getBaseType();
|
|
59
|
+
return this.resolveType(externalType, externalSrc, visited);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return type;
|
|
66
|
+
}
|
|
36
67
|
visitClassDeclaration(node) {
|
|
37
68
|
if (!node.decorators?.length)
|
|
38
69
|
return;
|
|
@@ -113,7 +144,7 @@ export class JSONTransform extends Visitor {
|
|
|
113
144
|
}
|
|
114
145
|
const getUnknownTypes = (type, types = []) => {
|
|
115
146
|
type = stripNull(type);
|
|
116
|
-
type =
|
|
147
|
+
type = this.resolveType(type, source);
|
|
117
148
|
if (type.startsWith("Array<")) {
|
|
118
149
|
return getUnknownTypes(type.slice(6, -1));
|
|
119
150
|
}
|
|
@@ -252,7 +283,7 @@ export class JSONTransform extends Visitor {
|
|
|
252
283
|
if (!member.type)
|
|
253
284
|
throwError("Fields must be strongly typed", node.range);
|
|
254
285
|
let type = toString(member.type);
|
|
255
|
-
type =
|
|
286
|
+
type = this.resolveType(type, source);
|
|
256
287
|
const name = member.name;
|
|
257
288
|
const value = member.initializer ? toString(member.initializer) : null;
|
|
258
289
|
if (type.startsWith("(") && type.includes("=>"))
|
|
@@ -433,7 +464,7 @@ export class JSONTransform extends Visitor {
|
|
|
433
464
|
sortedMembers.string.push(member);
|
|
434
465
|
else if (isBoolean(type) || type.startsWith("JSON.Box<bool"))
|
|
435
466
|
sortedMembers.boolean.push(member);
|
|
436
|
-
else if (isPrimitive(type) || type.startsWith("JSON.Box<"))
|
|
467
|
+
else if (isPrimitive(type) || type.startsWith("JSON.Box<") || isEnum(type, this.sources.get(this.schema.node.range.source), this.parser))
|
|
437
468
|
sortedMembers.number.push(member);
|
|
438
469
|
else if (isArray(type))
|
|
439
470
|
sortedMembers.array.push(member);
|
|
@@ -569,7 +600,7 @@ export class JSONTransform extends Visitor {
|
|
|
569
600
|
generateConsts(group);
|
|
570
601
|
const first = group[0];
|
|
571
602
|
const fName = first.alias || first.name;
|
|
572
|
-
DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") +
|
|
603
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
|
|
573
604
|
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
574
605
|
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
575
606
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -578,7 +609,7 @@ export class JSONTransform extends Visitor {
|
|
|
578
609
|
for (let i = 1; i < group.length; i++) {
|
|
579
610
|
const mem = group[i];
|
|
580
611
|
const memName = mem.alias || mem.name;
|
|
581
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") +
|
|
612
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
|
|
582
613
|
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
583
614
|
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
584
615
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -617,7 +648,7 @@ export class JSONTransform extends Visitor {
|
|
|
617
648
|
generateConsts(group);
|
|
618
649
|
const first = group[0];
|
|
619
650
|
const fName = first.alias || first.name;
|
|
620
|
-
DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") +
|
|
651
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparison(fName) + ") { // " + fName + "\n";
|
|
621
652
|
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
622
653
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
623
654
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -626,7 +657,7 @@ export class JSONTransform extends Visitor {
|
|
|
626
657
|
for (let i = 1; i < group.length; i++) {
|
|
627
658
|
const mem = group[i];
|
|
628
659
|
const memName = mem.alias || mem.name;
|
|
629
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") +
|
|
660
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparison(memName) + ") { // " + memName + "\n";
|
|
630
661
|
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
631
662
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
632
663
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -672,7 +703,7 @@ export class JSONTransform extends Visitor {
|
|
|
672
703
|
generateConsts(group);
|
|
673
704
|
const first = group[0];
|
|
674
705
|
const fName = first.alias || first.name;
|
|
675
|
-
DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") +
|
|
706
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparison(fName) + ") { // " + fName + "\n";
|
|
676
707
|
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
677
708
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
678
709
|
DESERIALIZE += indent + " break;\n";
|
|
@@ -680,7 +711,7 @@ export class JSONTransform extends Visitor {
|
|
|
680
711
|
for (let i = 1; i < group.length; i++) {
|
|
681
712
|
const mem = group[i];
|
|
682
713
|
const memName = mem.alias || mem.name;
|
|
683
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") +
|
|
714
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparison(memName) + ") { // " + memName + "\n";
|
|
684
715
|
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
685
716
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
686
717
|
DESERIALIZE += indent + " break;\n";
|
|
@@ -726,7 +757,7 @@ export class JSONTransform extends Visitor {
|
|
|
726
757
|
generateConsts(group);
|
|
727
758
|
const first = group[0];
|
|
728
759
|
const fName = first.alias || first.name;
|
|
729
|
-
DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") +
|
|
760
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
|
|
730
761
|
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
731
762
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
732
763
|
DESERIALIZE += indent + " break;\n";
|
|
@@ -734,7 +765,7 @@ export class JSONTransform extends Visitor {
|
|
|
734
765
|
for (let i = 1; i < group.length; i++) {
|
|
735
766
|
const mem = group[i];
|
|
736
767
|
const memName = mem.alias || mem.name;
|
|
737
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") +
|
|
768
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
|
|
738
769
|
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
739
770
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
740
771
|
DESERIALIZE += indent + " break;\n";
|
|
@@ -770,7 +801,7 @@ export class JSONTransform extends Visitor {
|
|
|
770
801
|
generateConsts(group);
|
|
771
802
|
const first = group[0];
|
|
772
803
|
const fName = first.alias || first.name;
|
|
773
|
-
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") +
|
|
804
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
|
|
774
805
|
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
775
806
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
776
807
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -779,7 +810,7 @@ export class JSONTransform extends Visitor {
|
|
|
779
810
|
for (let i = 1; i < group.length; i++) {
|
|
780
811
|
const mem = group[i];
|
|
781
812
|
const memName = mem.alias || mem.name;
|
|
782
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") +
|
|
813
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
|
|
783
814
|
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
784
815
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
785
816
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -814,7 +845,7 @@ export class JSONTransform extends Visitor {
|
|
|
814
845
|
generateConsts(group);
|
|
815
846
|
const first = group[0];
|
|
816
847
|
const fName = first.alias || first.name;
|
|
817
|
-
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") +
|
|
848
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
|
|
818
849
|
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
819
850
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
820
851
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -823,7 +854,7 @@ export class JSONTransform extends Visitor {
|
|
|
823
854
|
for (let i = 1; i < group.length; i++) {
|
|
824
855
|
const mem = group[i];
|
|
825
856
|
const memName = mem.alias || mem.name;
|
|
826
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") +
|
|
857
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
|
|
827
858
|
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
828
859
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
829
860
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -860,7 +891,7 @@ export class JSONTransform extends Visitor {
|
|
|
860
891
|
generateConsts(group);
|
|
861
892
|
const first = group[0];
|
|
862
893
|
const fName = first.alias || first.name;
|
|
863
|
-
DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") +
|
|
894
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
|
|
864
895
|
DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
865
896
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
866
897
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -869,7 +900,7 @@ export class JSONTransform extends Visitor {
|
|
|
869
900
|
for (let i = 1; i < group.length; i++) {
|
|
870
901
|
const mem = group[i];
|
|
871
902
|
const memName = mem.alias || mem.name;
|
|
872
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") +
|
|
903
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
|
|
873
904
|
DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
874
905
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
875
906
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
@@ -1226,6 +1257,9 @@ function isString(type) {
|
|
|
1226
1257
|
function isArray(type) {
|
|
1227
1258
|
return type.startsWith("Array<");
|
|
1228
1259
|
}
|
|
1260
|
+
function isEnum(type, source, parser) {
|
|
1261
|
+
return source.getEnum(type) != null || source.getImportedEnum(type, parser) != null;
|
|
1262
|
+
}
|
|
1229
1263
|
export function stripNull(type) {
|
|
1230
1264
|
if (type.endsWith(" | null")) {
|
|
1231
1265
|
return type.slice(0, type.length - 7);
|
|
@@ -1235,7 +1269,7 @@ export function stripNull(type) {
|
|
|
1235
1269
|
}
|
|
1236
1270
|
return type;
|
|
1237
1271
|
}
|
|
1238
|
-
function
|
|
1272
|
+
function getComparison(data) {
|
|
1239
1273
|
switch (data.length << 1) {
|
|
1240
1274
|
case 2: {
|
|
1241
1275
|
return "code16 == " + data.charCodeAt(0);
|