json-as 0.5.16 → 0.5.17
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/asconfig.json +2 -6
- package/assembly/__tests__/as-json.spec.ts +19 -4
- package/assembly/src/json.ts +14 -18
- package/assembly/src/util.ts +19 -0
- package/assembly/test.ts +25 -23
- package/package.json +12 -12
- package/transform/package.json +1 -1
package/asconfig.json
CHANGED
|
@@ -45,7 +45,7 @@ describe("Ser/de Numbers", () => {
|
|
|
45
45
|
// canSerde<u128>(u128.from("100"))
|
|
46
46
|
// canSerde<u128>(u128.from("101"))
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
/* canSerde<u128Safe>(u128Safe.from("0"))
|
|
49
49
|
canSerde<u128Safe>(u128Safe.from("100"))
|
|
50
50
|
canSerde<u128Safe>(u128Safe.from("101"))
|
|
51
51
|
|
|
@@ -66,7 +66,7 @@ describe("Ser/de Numbers", () => {
|
|
|
66
66
|
canSerde<i128Safe>(i128Safe.from("101"))
|
|
67
67
|
canSerde<i128Safe>(i128Safe.from("-100"))
|
|
68
68
|
canSerde<i128Safe>(i128Safe.from("-101"))
|
|
69
|
-
|
|
69
|
+
*/
|
|
70
70
|
//canSerde<i256Safe>(new i256Safe(10, 11, 500, 501))
|
|
71
71
|
});
|
|
72
72
|
|
|
@@ -102,7 +102,7 @@ describe("Ser/de Numbers", () => {
|
|
|
102
102
|
});
|
|
103
103
|
|
|
104
104
|
it("should ser/de BigInt objects", () => {
|
|
105
|
-
|
|
105
|
+
/* canSerde<i32>(0);
|
|
106
106
|
|
|
107
107
|
canSerde<u32>(100);
|
|
108
108
|
canSerde<u64>(101);
|
|
@@ -113,7 +113,7 @@ describe("Ser/de Numbers", () => {
|
|
|
113
113
|
canSerde<u128>(u128.from("101"))
|
|
114
114
|
canSerde<u128>(u128.from("-100"))
|
|
115
115
|
canSerde<u128>(u128.from("-101"))
|
|
116
|
-
|
|
116
|
+
*/
|
|
117
117
|
})
|
|
118
118
|
});
|
|
119
119
|
|
|
@@ -175,6 +175,21 @@ describe("Ser/de Array", () => {
|
|
|
175
175
|
],
|
|
176
176
|
]);
|
|
177
177
|
});
|
|
178
|
+
|
|
179
|
+
it("should ser/de object arrays", () => {
|
|
180
|
+
canSerde<Vec3[]>([{
|
|
181
|
+
x: 3.4,
|
|
182
|
+
y: 1.2,
|
|
183
|
+
z: 8.3
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
x: 3.4,
|
|
187
|
+
y: -2.1,
|
|
188
|
+
z: 9.3
|
|
189
|
+
}
|
|
190
|
+
]);
|
|
191
|
+
|
|
192
|
+
})
|
|
178
193
|
});
|
|
179
194
|
|
|
180
195
|
describe("Ser/de Objects", () => {
|
package/assembly/src/json.ts
CHANGED
|
@@ -401,6 +401,7 @@ function parseArray<T extends unknown[]>(data: string): T {
|
|
|
401
401
|
// @ts-ignore
|
|
402
402
|
return parseObjectArray<T>(data);
|
|
403
403
|
}
|
|
404
|
+
return unreachable();
|
|
404
405
|
}
|
|
405
406
|
return unreachable();
|
|
406
407
|
}
|
|
@@ -510,29 +511,24 @@ function parseArrayArray<T extends unknown[][]>(data: string): T {
|
|
|
510
511
|
}
|
|
511
512
|
|
|
512
513
|
// @ts-ignore
|
|
513
|
-
|
|
514
|
-
function parseObjectArray<T extends unknown[][]>(data: string): T {
|
|
514
|
+
export function parseObjectArray<T extends unknown[]>(data: string): T {
|
|
515
515
|
const result = instantiate<T>();
|
|
516
516
|
let char = 0;
|
|
517
|
-
let lastPos = 1;
|
|
518
|
-
let depth =
|
|
519
|
-
let
|
|
520
|
-
|
|
521
|
-
//for (; unsafeCharCodeAt(data, i) !== leftBracketCode; i++) { }
|
|
522
|
-
//i++;
|
|
523
|
-
for (; i < data.length - 1; i++) {
|
|
524
|
-
char = unsafeCharCodeAt(data, i);
|
|
517
|
+
let lastPos: u32 = 1;
|
|
518
|
+
let depth: u32 = 0;
|
|
519
|
+
for (let pos: u32 = 0; pos < <u32>data.length; pos++) {
|
|
520
|
+
char = unsafeCharCodeAt(data, pos);
|
|
525
521
|
if (char === leftBraceCode) {
|
|
526
|
-
if (depth ===
|
|
527
|
-
lastPos =
|
|
522
|
+
if (depth === 0) {
|
|
523
|
+
lastPos = pos;
|
|
528
524
|
}
|
|
529
|
-
|
|
530
|
-
depth = depth << 1;
|
|
525
|
+
depth++;
|
|
531
526
|
} else if (char === rightBraceCode) {
|
|
532
|
-
depth
|
|
533
|
-
if (depth ===
|
|
534
|
-
|
|
535
|
-
result.push(JSON.parse<valueof<T>>(data.slice(lastPos,
|
|
527
|
+
depth--;
|
|
528
|
+
if (depth === 0) {
|
|
529
|
+
pos++;
|
|
530
|
+
result.push(JSON.parse<valueof<T>>(data.slice(lastPos, pos)));
|
|
531
|
+
lastPos = pos + 2;
|
|
536
532
|
}
|
|
537
533
|
}
|
|
538
534
|
}
|
package/assembly/src/util.ts
CHANGED
|
@@ -58,4 +58,23 @@ export function escapeChar(char: string): string {
|
|
|
58
58
|
case 0x0B: return "\\u000b";
|
|
59
59
|
default: return char;
|
|
60
60
|
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* A terrible function which finds the depth of a certain array.
|
|
65
|
+
* Suffers no overhead besides function calling and a if/else.
|
|
66
|
+
* @returns depth of array
|
|
67
|
+
*/
|
|
68
|
+
export function getArrayDepth<T>(depth: i32 = 1): i32 {
|
|
69
|
+
// @ts-ignore
|
|
70
|
+
if (isArray<T>()) {
|
|
71
|
+
return 0;
|
|
72
|
+
// @ts-ignore
|
|
73
|
+
} else if (isArray<valueof<T>>()) {
|
|
74
|
+
depth++;
|
|
75
|
+
// @ts-ignore
|
|
76
|
+
return getArrayDepth<valueof<T>>(depth);
|
|
77
|
+
} else {
|
|
78
|
+
return depth;
|
|
79
|
+
}
|
|
61
80
|
}
|
package/assembly/test.ts
CHANGED
|
@@ -2,7 +2,31 @@ import { u128 } from "as-bignum/assembly";
|
|
|
2
2
|
import {
|
|
3
3
|
JSON
|
|
4
4
|
} from ".";
|
|
5
|
+
import { parseObjectArray } from "./src/json";
|
|
5
6
|
|
|
7
|
+
@json
|
|
8
|
+
class Candle {
|
|
9
|
+
timestamp!: i64;
|
|
10
|
+
high!: f64;
|
|
11
|
+
low!: f64;
|
|
12
|
+
open!: f64;
|
|
13
|
+
close!: f64;
|
|
14
|
+
constructor(timestamp: i64, high: f64, low: f64, open: f64, close: f64) {
|
|
15
|
+
this.timestamp = timestamp;
|
|
16
|
+
this.high = high;
|
|
17
|
+
this.low = low;
|
|
18
|
+
this.open = open;
|
|
19
|
+
this.close = close;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//console.log(JSON.stringify(candle));
|
|
24
|
+
|
|
25
|
+
const parsedCandleArray: Candle[] = parseObjectArray<Candle[]>('{"timestamp":1620248400000,"high":573.3476371851107,"low":572.7653897862947,"open":573.3476371851107,"close":572.7653897862947},{"timestamp":1620249300000,"high":572.4966600947654,"low":572.3690847959957,"open":572.4966600947654,"close":572.3690847959957}');
|
|
26
|
+
|
|
27
|
+
console.log(JSON.stringify(parsedCandleArray[0]));
|
|
28
|
+
console.log(JSON.stringify(parsedCandleArray[1]));
|
|
29
|
+
/*
|
|
6
30
|
// @ts-ignore
|
|
7
31
|
@JSON
|
|
8
32
|
class Vec3 {
|
|
@@ -48,26 +72,4 @@ const player: Player = {
|
|
|
48
72
|
const serializedPlayer = JSON.stringify<Player>(player);
|
|
49
73
|
console.log("Serialized Player: " + serializedPlayer);
|
|
50
74
|
const deserializedPlayer = JSON.parse<Player>(serializedPlayer);
|
|
51
|
-
console.log("Deserialized Player: " + JSON.stringify(deserializedPlayer))
|
|
52
|
-
|
|
53
|
-
@json
|
|
54
|
-
class Vec2 {
|
|
55
|
-
x: f32;
|
|
56
|
-
y: f32;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const vec: Vec2 = {
|
|
60
|
-
x: 0.0,
|
|
61
|
-
y: 0.0,
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
let i = 5_000_000;
|
|
65
|
-
while (i--) {
|
|
66
|
-
JSON.stringify<Vec2>(vec);
|
|
67
|
-
}
|
|
68
|
-
let start = Date.now();
|
|
69
|
-
i = 10_000_000;
|
|
70
|
-
while (i--) {
|
|
71
|
-
JSON.stringify<Vec2>(vec);
|
|
72
|
-
}
|
|
73
|
-
console.log(`Took: ${Date.now() - start}ms`)*/
|
|
75
|
+
console.log("Deserialized Player: " + JSON.stringify(deserializedPlayer));*/
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-as",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.17",
|
|
4
4
|
"description": "JSON encoder/decoder for AssemblyScript",
|
|
5
5
|
"types": "assembly/index.ts",
|
|
6
6
|
"author": "Jairus Tanaka",
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
"contributors": [
|
|
8
|
+
"DogWhich",
|
|
9
|
+
"Joshua Tenner",
|
|
10
|
+
"Rom"
|
|
11
|
+
],
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"scripts": {
|
|
14
14
|
"aspect": "asp",
|
|
@@ -23,18 +23,18 @@
|
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@as-pect/cli": "^8.0.1",
|
|
25
25
|
"@as-tral/cli": "^2.0.0",
|
|
26
|
-
"@assemblyscript/loader": "^0.
|
|
26
|
+
"@assemblyscript/loader": "^0.27.0",
|
|
27
27
|
"@assemblyscript/wasi-shim": "^0.1.0",
|
|
28
28
|
"as-bignum": "^0.2.23",
|
|
29
|
-
"assemblyscript": "^0.
|
|
30
|
-
"assemblyscript-prettier": "^1.0.
|
|
31
|
-
"prettier": "^2.8.
|
|
32
|
-
"typescript": "^4.9.
|
|
29
|
+
"assemblyscript": "^0.27.0",
|
|
30
|
+
"assemblyscript-prettier": "^1.0.7",
|
|
31
|
+
"prettier": "^2.8.3",
|
|
32
|
+
"typescript": "^4.9.5",
|
|
33
33
|
"visitor-as": "^0.11.4"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"as-string-sink": "^0.5.0",
|
|
37
|
-
"as-variant": "^0.4.
|
|
37
|
+
"as-variant": "^0.4.1"
|
|
38
38
|
},
|
|
39
39
|
"repository": {
|
|
40
40
|
"type": "git",
|