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 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", () => {
@@ -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
- const type = instantiate<T>();
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
- return parseObjectArray<T>(data);
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
- @inline
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 = 1;
517
- let i = 1;
518
- // Find start of bracket
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 === 1) {
525
- lastPos = i;
522
+ if (depth === 0) {
523
+ lastPos = pos;
526
524
  }
527
- // Shifting is 6% faster than incrementing
528
- depth = depth << 1;
525
+ depth++;
529
526
  } else if (char === rightBraceCode) {
530
- depth = depth >> 1;
531
- if (depth === 1) {
532
- i++;
533
- 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;
534
532
  }
535
533
  }
536
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.15",
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.15",
3
+ "version": "0.5.17",
4
4
  "description": "JSON encoder/decoder for AssemblyScript",
5
5
  "main": "./lib/index.js",
6
6
  "author": "Jairus Tanaka",