json-as 1.1.19 → 1.1.21
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 +6 -34
- package/assembly/__benches__/abc.bench.ts +12 -4
- package/assembly/__benches__/lib/bench.ts +19 -7
- 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 +32 -20
- package/assembly/serialize/simd/string.ts +8 -95
- 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 +16 -609
- package/assembly/test.ts +2 -0
- package/bench/abc.bench.ts +9 -2
- package/bench/lib/bench.ts +33 -18
- package/bench/runners/assemblyscript.js +1 -0
- package/bench.ts +18 -0
- package/lib/as-bs.ts +13 -12
- package/package.json +6 -6
- package/run-bench.as.sh +5 -6
- package/run-bench.js.sh +2 -6
- package/run-tests.sh +1 -1
- package/transform/lib/index.js +4 -1
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/types.js +21 -0
- package/transform/lib/types.js.map +1 -1
- package/transform/src/index.ts +5 -1
- package/transform/src/types.ts +35 -1
- package/bench.js +0 -83
package/transform/lib/types.js
CHANGED
|
@@ -89,6 +89,7 @@ export class Src {
|
|
|
89
89
|
exports;
|
|
90
90
|
nodeMap = new Map();
|
|
91
91
|
classes = {};
|
|
92
|
+
enums = {};
|
|
92
93
|
imports = [];
|
|
93
94
|
constructor(source, sourceSet) {
|
|
94
95
|
this.sourceSet = sourceSet;
|
|
@@ -108,6 +109,10 @@ export class Src {
|
|
|
108
109
|
const classDeclaration = node;
|
|
109
110
|
this.classes[this.qualifiedName(classDeclaration, path)] = classDeclaration;
|
|
110
111
|
break;
|
|
112
|
+
case 52:
|
|
113
|
+
const enumDeclaration = node;
|
|
114
|
+
this.enums[this.qualifiedName(enumDeclaration, path)] = enumDeclaration;
|
|
115
|
+
break;
|
|
111
116
|
case 42:
|
|
112
117
|
const importStatement = node;
|
|
113
118
|
this.imports.push(importStatement);
|
|
@@ -122,6 +127,9 @@ export class Src {
|
|
|
122
127
|
getClass(qualifiedName) {
|
|
123
128
|
return this.classes[qualifiedName] || null;
|
|
124
129
|
}
|
|
130
|
+
getEnum(qualifiedName) {
|
|
131
|
+
return this.enums[qualifiedName] || null;
|
|
132
|
+
}
|
|
125
133
|
getImportedClass(qualifiedName, parser) {
|
|
126
134
|
for (const stmt of this.imports) {
|
|
127
135
|
const externalSource = parser.sources.filter((src) => src.internalPath != this.internalPath).find((src) => src.internalPath == stmt.internalPath);
|
|
@@ -135,6 +143,19 @@ export class Src {
|
|
|
135
143
|
}
|
|
136
144
|
return null;
|
|
137
145
|
}
|
|
146
|
+
getImportedEnum(qualifiedName, parser) {
|
|
147
|
+
for (const stmt of this.imports) {
|
|
148
|
+
const externalSource = parser.sources.filter((src) => src.internalPath != this.internalPath).find((src) => src.internalPath == stmt.internalPath);
|
|
149
|
+
if (!externalSource)
|
|
150
|
+
continue;
|
|
151
|
+
const source = this.sourceSet.get(externalSource);
|
|
152
|
+
const enumDeclaration = source.getEnum(qualifiedName);
|
|
153
|
+
if (enumDeclaration && enumDeclaration.flags & 2) {
|
|
154
|
+
return enumDeclaration;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
138
159
|
getFullPath(node) {
|
|
139
160
|
return this.internalPath + "/" + this.getQualifiedName(node);
|
|
140
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/transform/src/index.ts
CHANGED
|
@@ -448,7 +448,7 @@ export class JSONTransform extends Visitor {
|
|
|
448
448
|
if (member.node.type.isNullable) sortedMembers.null.push(member);
|
|
449
449
|
if (isString(type) || type == "JSON.Raw") sortedMembers.string.push(member);
|
|
450
450
|
else if (isBoolean(type) || type.startsWith("JSON.Box<bool")) sortedMembers.boolean.push(member);
|
|
451
|
-
else if (isPrimitive(type) || type.startsWith("JSON.Box<")) sortedMembers.number.push(member);
|
|
451
|
+
else if (isPrimitive(type) || type.startsWith("JSON.Box<") || isEnum(type, this.sources.get(this.schema.node.range.source), this.parser)) sortedMembers.number.push(member);
|
|
452
452
|
else if (isArray(type)) sortedMembers.array.push(member);
|
|
453
453
|
/*else if (isStruct(type)) */ sortedMembers.object.push(member);
|
|
454
454
|
// else console.warn("Could not determine type " + type + " for member " + member.name + " in class " + this.schema.name);
|
|
@@ -1414,6 +1414,10 @@ function isArray(type: string): boolean {
|
|
|
1414
1414
|
return type.startsWith("Array<");
|
|
1415
1415
|
}
|
|
1416
1416
|
|
|
1417
|
+
function isEnum(type: string, source: Src, parser: Parser): boolean {
|
|
1418
|
+
return source.getEnum(type) != null || source.getImportedEnum(type, parser) != null;
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1417
1421
|
export function stripNull(type: string): string {
|
|
1418
1422
|
if (type.endsWith(" | null")) {
|
|
1419
1423
|
return type.slice(0, type.length - 7);
|
package/transform/src/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ClassDeclaration, Expression, FieldDeclaration, Source, NodeKind, Node, NamespaceDeclaration, DeclarationStatement, TypeName, Parser, ImportStatement, CommonFlags } from "assemblyscript/dist/assemblyscript.js";
|
|
1
|
+
import { ClassDeclaration, Expression, FieldDeclaration, Source, NodeKind, Node, NamespaceDeclaration, DeclarationStatement, TypeName, Parser, ImportStatement, CommonFlags, EnumDeclaration } from "assemblyscript/dist/assemblyscript.js";
|
|
2
2
|
import { TypeAlias } from "./linkers/alias.js";
|
|
3
3
|
import { stripNull } from "./index.js";
|
|
4
4
|
|
|
@@ -102,6 +102,7 @@ export class Src {
|
|
|
102
102
|
public exports: Schema[];
|
|
103
103
|
private nodeMap: Map<Node, NamespaceDeclaration[]> = new Map<Node, NamespaceDeclaration[]>();
|
|
104
104
|
private classes: Record<string, ClassDeclaration> = {};
|
|
105
|
+
private enums: Record<string, EnumDeclaration> = {};
|
|
105
106
|
private imports: ImportStatement[] = [];
|
|
106
107
|
|
|
107
108
|
constructor(
|
|
@@ -130,6 +131,10 @@ export class Src {
|
|
|
130
131
|
const classDeclaration = node as ClassDeclaration;
|
|
131
132
|
this.classes[this.qualifiedName(classDeclaration, path)] = classDeclaration;
|
|
132
133
|
break;
|
|
134
|
+
case NodeKind.EnumDeclaration:
|
|
135
|
+
const enumDeclaration = node as EnumDeclaration;
|
|
136
|
+
this.enums[this.qualifiedName(enumDeclaration, path)] = enumDeclaration;
|
|
137
|
+
break;
|
|
133
138
|
case NodeKind.Import:
|
|
134
139
|
const importStatement = node as ImportStatement;
|
|
135
140
|
this.imports.push(importStatement);
|
|
@@ -157,6 +162,15 @@ export class Src {
|
|
|
157
162
|
return this.classes[qualifiedName] || null;
|
|
158
163
|
}
|
|
159
164
|
|
|
165
|
+
/**
|
|
166
|
+
* Get an enum declaration by its qualified name.
|
|
167
|
+
* @param qualifiedName Qualified name (eg. "Namespace.MyEnum")
|
|
168
|
+
* @returns Enum declaration or null if not found.
|
|
169
|
+
*/
|
|
170
|
+
getEnum(qualifiedName: string): EnumDeclaration | null {
|
|
171
|
+
return this.enums[qualifiedName] || null;
|
|
172
|
+
}
|
|
173
|
+
|
|
160
174
|
/**
|
|
161
175
|
* Get imported class from other sources in the parser.
|
|
162
176
|
* @param qualifiedName Qualified name of class.
|
|
@@ -177,6 +191,26 @@ export class Src {
|
|
|
177
191
|
return null;
|
|
178
192
|
}
|
|
179
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Get imported enum from other sources in the parser.
|
|
196
|
+
* @param qualifiedName Qualified name of enum.
|
|
197
|
+
* @param parser AssemblyScript parser.
|
|
198
|
+
* @returns Enum declaration or null if not found.
|
|
199
|
+
*/
|
|
200
|
+
getImportedEnum(qualifiedName: string, parser: Parser): EnumDeclaration | null {
|
|
201
|
+
for (const stmt of this.imports) {
|
|
202
|
+
const externalSource = parser.sources.filter((src) => src.internalPath != this.internalPath).find((src) => src.internalPath == stmt.internalPath);
|
|
203
|
+
if (!externalSource) continue;
|
|
204
|
+
|
|
205
|
+
const source = this.sourceSet.get(externalSource);
|
|
206
|
+
const enumDeclaration = source.getEnum(qualifiedName);
|
|
207
|
+
if (enumDeclaration && enumDeclaration.flags & CommonFlags.Export) {
|
|
208
|
+
return enumDeclaration;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
|
|
180
214
|
/**
|
|
181
215
|
* Gets a unique path string to the node by combining the internalPath with
|
|
182
216
|
* the qualified name of the node.
|
package/bench.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Bench } from "tinybench";
|
|
2
|
-
// Trying a new benchmarking lib.
|
|
3
|
-
|
|
4
|
-
// JavaScript Results
|
|
5
|
-
// ┌─────────┬───────────────────────────┬─────────────┬────────────────────┬──────────┬─────────┐
|
|
6
|
-
// │ (index) │ Task Name │ ops / sec │ Average Time(ns) │ Margin │ Samples │
|
|
7
|
-
// ├─────────┼───────────────────────────┼─────────────┼────────────────────┼──────────┼─────────┤
|
|
8
|
-
// │ 0 │ 'Stringify Object (Vec3)' │ '817,816' │ 1222.76 │ '±3.55%' │ 81782 │
|
|
9
|
-
// │ 1 │ 'Parse Object (Vec3)' │ '726,115' │ 1377.19 │ '±3.21%' │ 72612 │
|
|
10
|
-
// │ 2 │ 'Stringify Number Array' │ '1,104,036' │ 905.77 │ '±6.48%' │ 110404 │
|
|
11
|
-
// │ 3 │ 'Parse Number Array' │ '1,114,053' │ 897.62 │ '±2.58%' │ 111406 │
|
|
12
|
-
// │ 4 │ 'Stringify String' │ '1,565,716' │ 638.69 │ '±2.04%' │ 156572 │
|
|
13
|
-
// │ 5 │ 'Parse String' │ '69,568' │ 14374.22 │ '±2.55%' │ 6957 │
|
|
14
|
-
// └─────────┴───────────────────────────┴─────────────┴────────────────────┴──────────┴─────────┘
|
|
15
|
-
|
|
16
|
-
// AssemblyScript Results (Runtime Minimal)
|
|
17
|
-
// ┌─────────┬───────────────────────────┬─────────────┬────────────────────┬──────────┬─────────┐
|
|
18
|
-
// │ (index) │ Task Name │ ops / sec │ Average Time(ns) │ Diff │ Samples │
|
|
19
|
-
// ├─────────┼───────────────────────────┼─────────────┼────────────────────┼──────────┼─────────┤
|
|
20
|
-
// │ 0 │ 'Stringify Object (Vec3)' │ '2,091,000' │ 417.22 │ -805ns │ ------- │
|
|
21
|
-
// │ 1 │ 'Parse Object (Vec3)' │ '1,780,000' │ 539.02 │ -838ns │ ------- |
|
|
22
|
-
// │ 2 │ 'Stringify Number Array' │ '1,920,000' │ 445.43 │ -460ns │ ------- │
|
|
23
|
-
// │ 3 │ 'Parse Number Array' │ '1,660,000' │ 597.17 │ -300ns │ ------- │
|
|
24
|
-
// │ 4 │ 'Stringify String' │ '1,280,000' │ 736.27 │ +97ns │ ------- │
|
|
25
|
-
// │ 5 │ 'Parse String' │ '4,230,000' │ 239.21 │ -14135ns │ ------- │
|
|
26
|
-
// └─────────┴───────────────────────────┴─────────────┴────────────────────┴──────────┴─────────┘
|
|
27
|
-
|
|
28
|
-
const vec = {
|
|
29
|
-
x: 3,
|
|
30
|
-
y: 1,
|
|
31
|
-
z: 8,
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
let data;
|
|
35
|
-
|
|
36
|
-
const bench = new Bench({ time: 1000 })
|
|
37
|
-
.add("serialize vec3", () => (data = JSON.stringify(vec)))
|
|
38
|
-
.add("deserialize vec3", () => {
|
|
39
|
-
data = JSON.parse('{"x":3,"y":1,"z":8}');
|
|
40
|
-
})
|
|
41
|
-
.add("serialize alphabet string", () => {
|
|
42
|
-
data = JSON.stringify("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~`!@#$%^&*()-_=+{[}]|\\:;\"'?/>.<,'\"}");
|
|
43
|
-
})
|
|
44
|
-
.add("deserialize alphabet string", () => {
|
|
45
|
-
data = JSON.parse('"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~`!@#$%^&*()-_=+{[}]|\\\\:;\\"\'?/>.<,\'\\"}"');
|
|
46
|
-
}) /*
|
|
47
|
-
.add("parse float", () => {
|
|
48
|
-
data = JSON.parse("1.2345")
|
|
49
|
-
})
|
|
50
|
-
.add("stringify iny", () => {
|
|
51
|
-
data = JSON.stringify(12345)
|
|
52
|
-
})
|
|
53
|
-
.add("parse int", () => {
|
|
54
|
-
data = JSON.parse("12345")
|
|
55
|
-
})
|
|
56
|
-
.add("Stringify Object (Vec3)", () => {
|
|
57
|
-
data = JSON.stringify(vec);
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
.add("Parse Object (Vec3)", () => {
|
|
61
|
-
data = JSON.parse('{"x":0,"y":0,"z":0}');
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
.add("Stringify Number Array", () => {
|
|
65
|
-
data = JSON.stringify([1, 2, 3]);
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
.add("Parse Number Array", () => {
|
|
69
|
-
data = JSON.parse("[1,2,3]");
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
.add("Stringify String", () => {
|
|
73
|
-
data = JSON.stringify('Hello "World!');
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
.add("Parse String", () => {
|
|
77
|
-
data = JSON.stringify('hello "world abc');
|
|
78
|
-
})*/
|
|
79
|
-
.todo("unimplemented .add");
|
|
80
|
-
|
|
81
|
-
await bench.run();
|
|
82
|
-
|
|
83
|
-
console.table(bench.table());
|