json-as 0.5.15 → 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 +21 -23
- 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
|
@@ -394,13 +394,16 @@ function parseArray<T extends unknown[]>(data: string): T {
|
|
|
394
394
|
// @ts-ignore
|
|
395
395
|
return parseArrayArray<T>(data);
|
|
396
396
|
// @ts-ignore
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
// @ts-ignore
|
|
400
|
-
if (isDefined(type.__JSON_Set_Key)) {
|
|
397
|
+
} else if (isManaged<valueof<T>>() || isReference<valueof<T>>()) {
|
|
398
|
+
const type = changetype<nonnull<valueof<T>>>(__new(offsetof<nonnull<valueof<T>>>(), idof <nonnull<valueof<T>>>()));
|
|
401
399
|
// @ts-ignore
|
|
402
|
-
|
|
400
|
+
if (isDefined(type.__JSON_Set_Key)) {
|
|
401
|
+
// @ts-ignore
|
|
402
|
+
return parseObjectArray<T>(data);
|
|
403
|
+
}
|
|
404
|
+
return unreachable();
|
|
403
405
|
}
|
|
406
|
+
return unreachable();
|
|
404
407
|
}
|
|
405
408
|
|
|
406
409
|
// @ts-ignore
|
|
@@ -508,29 +511,24 @@ function parseArrayArray<T extends unknown[][]>(data: string): T {
|
|
|
508
511
|
}
|
|
509
512
|
|
|
510
513
|
// @ts-ignore
|
|
511
|
-
|
|
512
|
-
function parseObjectArray<T extends unknown[][]>(data: string): T {
|
|
514
|
+
export function parseObjectArray<T extends unknown[]>(data: string): T {
|
|
513
515
|
const result = instantiate<T>();
|
|
514
516
|
let char = 0;
|
|
515
|
-
let lastPos = 1;
|
|
516
|
-
let depth =
|
|
517
|
-
let
|
|
518
|
-
|
|
519
|
-
//for (; unsafeCharCodeAt(data, i) !== leftBracketCode; i++) { }
|
|
520
|
-
//i++;
|
|
521
|
-
for (; i < data.length - 1; i++) {
|
|
522
|
-
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);
|
|
523
521
|
if (char === leftBraceCode) {
|
|
524
|
-
if (depth ===
|
|
525
|
-
lastPos =
|
|
522
|
+
if (depth === 0) {
|
|
523
|
+
lastPos = pos;
|
|
526
524
|
}
|
|
527
|
-
|
|
528
|
-
depth = depth << 1;
|
|
525
|
+
depth++;
|
|
529
526
|
} else if (char === rightBraceCode) {
|
|
530
|
-
depth
|
|
531
|
-
if (depth ===
|
|
532
|
-
|
|
533
|
-
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;
|
|
534
532
|
}
|
|
535
533
|
}
|
|
536
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",
|