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 CHANGED
@@ -11,11 +11,7 @@
11
11
  },
12
12
  "options": {
13
13
  "transform": [
14
- "./transform",
15
14
  "./transform"
16
- ],
17
- "bindings": "esm",
18
- "exportStart": "_start"
19
- },
20
- "extends": "./node_modules/@assemblyscript/wasi-shim/asconfig.json"
15
+ ]
16
+ }
21
17
  }
@@ -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
- canSerde<u128Safe>(u128Safe.from("0"))
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
- canSerde<i32>(0);
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", () => {
@@ -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
- @inline
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 = 1;
519
- let i = 1;
520
- // Find start of bracket
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 === 1) {
527
- lastPos = i;
522
+ if (depth === 0) {
523
+ lastPos = pos;
528
524
  }
529
- // Shifting is 6% faster than incrementing
530
- depth = depth << 1;
525
+ depth++;
531
526
  } else if (char === rightBraceCode) {
532
- depth = depth >> 1;
533
- if (depth === 1) {
534
- i++;
535
- result.push(JSON.parse<valueof<T>>(data.slice(lastPos, i)));
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
  }
@@ -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.16",
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
- "contributors": [
8
- "DogWhich",
9
- "Joshua Tenner",
10
- "Rom"
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.25.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.25.0",
30
- "assemblyscript-prettier": "^1.0.6",
31
- "prettier": "^2.8.1",
32
- "typescript": "^4.9.4",
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.0"
37
+ "as-variant": "^0.4.1"
38
38
  },
39
39
  "repository": {
40
40
  "type": "git",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@json-as/transform",
3
- "version": "0.5.16",
3
+ "version": "0.5.17",
4
4
  "description": "JSON encoder/decoder for AssemblyScript",
5
5
  "main": "./lib/index.js",
6
6
  "author": "Jairus Tanaka",