json-as 0.5.10 → 0.5.12

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
@@ -10,7 +10,10 @@
10
10
  }
11
11
  },
12
12
  "options": {
13
- "transform": ["./transform"],
13
+ "transform": [
14
+ "./transform",
15
+ "./transform"
16
+ ],
14
17
  "bindings": "esm",
15
18
  "exportStart": "_start"
16
19
  },
@@ -1,7 +1,4 @@
1
- bench("1+1", () => {
2
- blackbox("1+1".split("+w"))
3
- })
4
- /*import { JSON } from "..";
1
+ import { JSON } from "..";
5
2
 
6
3
  @json
7
4
  class Vec2 {
@@ -34,15 +31,14 @@ bench("Stringify Nested Array", () => {
34
31
  blackbox(
35
32
  JSON.stringify<string[][]>(
36
33
  blackbox([
37
- ["a", "b", "c"],
38
- ["d", "e", "f"],
34
+ ["a", "b", "c"]
39
35
  ])
40
36
  )
41
37
  );
42
38
  });
43
39
 
44
40
  bench("Parse Nested Array", () => {
45
- blackbox(JSON.parse<string[][]>(blackbox('[["a","b","c"],["d","e","f"]]')));
41
+ blackbox(JSON.parse<string[][]>(blackbox('[["a","b","c"]]')));
46
42
  });
47
43
 
48
44
  bench("Stringify String", () => {
@@ -52,7 +48,7 @@ bench("Stringify String", () => {
52
48
  bench("Parse String", () => {
53
49
  blackbox(JSON.parse<string>(blackbox('"Hello"')));
54
50
  });
55
-
51
+ /*
56
52
  bench("Stringify Boolean", () => {
57
53
  blackbox(JSON.stringify(blackbox(true)));
58
54
  });
@@ -75,5 +71,4 @@ bench("Stringify Float", () => {
75
71
 
76
72
  bench("Parse Float", () => {
77
73
  blackbox(JSON.parse<f32>(blackbox("3.14")));
78
- });
79
- */
74
+ });*/
@@ -31,7 +31,7 @@ type Null = Nullable | null;
31
31
  describe("Ser/de Nulls", () => {
32
32
  canSerde<Null>(null);
33
33
  });
34
- /*
34
+
35
35
  describe("Ser/de Numbers", () => {
36
36
  it("should ser/de integers", () => {
37
37
  canSerde<i32>(0);
@@ -41,10 +41,10 @@ describe("Ser/de Numbers", () => {
41
41
  canSerde<i32>(-100);
42
42
  canSerde<i64>(-101);
43
43
 
44
- canSerde<u128>(u128.from("0"))
45
- canSerde<u128>(u128.from("100"))
46
- canSerde<u128>(u128.from("101"))
47
- `
44
+ // canSerde<u128>(u128.from("0"))
45
+ // canSerde<u128>(u128.from("100"))
46
+ // canSerde<u128>(u128.from("101"))
47
+
48
48
  canSerde<u128Safe>(u128Safe.from("0"))
49
49
  canSerde<u128Safe>(u128Safe.from("100"))
50
50
  canSerde<u128Safe>(u128Safe.from("101"))
@@ -199,4 +199,4 @@ describe("Ser/de Objects", () => {
199
199
  isVerified: true,
200
200
  });
201
201
  });
202
- });*/
202
+ });
@@ -1,5 +1,5 @@
1
1
  import { StringSink } from "as-string-sink/assembly";
2
- import { isSpace } from "assemblyscript/std/assembly/util/string";
2
+ import { isSpace } from "util/string";
3
3
  import { backSlashCode, quoteCode } from "./chars";
4
4
  import { u128, u128Safe, u256, u256Safe, i128, i128Safe, i256Safe } from "as-bignum/assembly";
5
5
 
@@ -56,6 +56,6 @@ export function escapeChar(char: string): string {
56
56
  case 0x09: return "\\t";
57
57
  case 0x0C: return "\\f";
58
58
  case 0x0B: return "\\u000b";
59
- default: return char;
59
+ default: return char;
60
60
  }
61
61
  }
package/assembly/test.ts CHANGED
@@ -3,48 +3,41 @@ import {
3
3
  JSON
4
4
  } from ".";
5
5
 
6
- // @ts-ignore
7
- @json
8
- class Stats {
9
- wins!: u128
10
- loss!: u128
11
- }
12
6
  // @ts-ignore
13
7
  @json
14
8
  class Vec3 {
15
- x!: f32;
16
- y!: f32;
17
- z!: f32;
9
+ x: f32 = 3.4;
10
+ y: f32 = 1.2;
11
+ z: f32 = 8.3;
18
12
  }
19
13
 
20
- const vec: Vec3 = {
21
- x: 3.4,
22
- y: 1.2,
23
- z: 8.3
14
+ // @ts-ignore
15
+ @json
16
+ class Stats extends Vec3 {
17
+ wins: u128
18
+ loss: u128
24
19
  }
25
20
 
26
21
  // @ts-ignore
27
22
  @json
28
23
  class Player {
29
- firstName!: string;
30
- lastName!: string;
31
- lastActive!: i32[];
32
- age!: i32;
33
- pos!: Vec3 | null;
34
- isVerified!: boolean;
35
- stats!: Stats
24
+ firstName: string;
25
+ lastName: string;
26
+ lastActive: i32[];
27
+ age: i32;
28
+ isVerified: boolean;
29
+ stats: Stats
36
30
  }
37
31
 
38
32
  const player: Player = {
39
33
  firstName: "Emmet",
40
34
  lastName: "West",
41
- lastActive: [8, 27, 2022],
35
+ lastActive: [
36
+ 8,
37
+ 27,
38
+ 2022
39
+ ],
42
40
  age: 23,
43
- pos: {
44
- x: 3.4,
45
- y: 1.2,
46
- z: 8.3
47
- },
48
41
  isVerified: true,
49
42
  stats: {
50
43
  wins: u128.fromString("443"),
@@ -55,4 +48,26 @@ const player: Player = {
55
48
  const serializedPlayer = JSON.stringify<Player>(player);
56
49
  console.log("Serialized Player: " + serializedPlayer);
57
50
  const deserializedPlayer = JSON.parse<Player>(serializedPlayer);
58
- console.log("Deserialized Player: " + JSON.stringify(deserializedPlayer));
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`)*/
package/package.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "name": "json-as",
3
- "version": "0.5.10",
3
+ "version": "0.5.12",
4
4
  "description": "JSON encoder/decoder for AssemblyScript",
5
5
  "types": "assembly/index.ts",
6
6
  "author": "Jairus Tanaka",
7
- "contributors": [
8
- "DogWhich"
9
- ],
7
+ "contributors": [
8
+ "DogWhich",
9
+ "Joshua Tenner",
10
+ "Rom"
11
+ ],
10
12
  "license": "MIT",
11
13
  "scripts": {
12
14
  "aspect": "asp",
13
15
  "bench:astral": "astral",
14
- "build:test": "asc assembly/test.ts --target test",
16
+ "build:test": "asc assembly/test.ts --target test --runtime stub",
15
17
  "build:transform": "tsc -p ./transform",
16
18
  "test:wasmtime": "wasmtime ./build/test.wasm",
17
19
  "test:lunatic": "lunatic ./build/test.wasm",
@@ -19,15 +21,16 @@
19
21
  "prettier": "as-prettier -w ."
20
22
  },
21
23
  "devDependencies": {
22
- "@as-pect/cli": "^8.0.0",
23
- "@as-tral/cli": "^1.2.0",
24
+ "@as-pect/cli": "^8.0.1",
25
+ "@as-tral/cli": "^2.0.0",
24
26
  "@assemblyscript/loader": "^0.25.0",
25
27
  "@assemblyscript/wasi-shim": "^0.1.0",
26
28
  "as-bignum": "^0.2.23",
27
29
  "assemblyscript": "^0.25.0",
28
30
  "assemblyscript-prettier": "^1.0.6",
29
31
  "prettier": "^2.8.1",
30
- "typescript": "^4.9.4"
32
+ "typescript": "^4.9.4",
33
+ "visitor-as": "^0.11.4"
31
34
  },
32
35
  "dependencies": {
33
36
  "as-string-sink": "^0.5.0",
@@ -100,12 +100,7 @@ class AsJSONTransform extends ClassDecorator {
100
100
  this.currentClass.setDataStmts.join("")}
101
101
  }
102
102
  `;
103
- //console.log(serializeFunc)
104
- //const serializedProperty = SimpleParser.parseClassMember(
105
- // serializedProp,
106
- // node
107
- //);
108
- //node.members.push(serializedProperty);
103
+ //console.log(serializeFunc, setKeyFunc)
109
104
  const serializeMethod = SimpleParser.parseClassMember(serializeFunc, node);
110
105
  node.members.push(serializeMethod);
111
106
  const setDataMethod = SimpleParser.parseClassMember(setKeyFunc, node);
@@ -1,19 +1,17 @@
1
1
  {
2
2
  "name": "@json-as/transform",
3
- "version": "0.5.10",
3
+ "version": "0.5.12",
4
4
  "description": "JSON encoder/decoder for AssemblyScript",
5
5
  "main": "./lib/index.js",
6
6
  "author": "Jairus Tanaka",
7
7
  "contributors": [
8
8
  "DogWhich",
9
- "Josh Tenner",
9
+ "Joshua Tenner",
10
10
  "Rom"
11
11
  ],
12
12
  "license": "MIT",
13
13
  "devDependencies": {},
14
- "dependencies": {
15
- "visitor-as": "^0.11.3"
16
- },
14
+ "dependencies": {},
17
15
  "repository": {
18
16
  "type": "git",
19
17
  "url": "git+https://github.com/JairusSW/as-json.git"
@@ -9,6 +9,7 @@ import {
9
9
  } from "visitor-as/dist/decorator.js";
10
10
  import { getName, toString } from "visitor-as/dist/utils.js";
11
11
  import { SimpleParser } from "visitor-as/dist/index.js";
12
+ import { NodeKind } from "types:assemblyscript/src/ast";
12
13
 
13
14
  class SchemaData {
14
15
  public keys: string[] = [];
@@ -27,6 +28,7 @@ class AsJSONTransform extends ClassDecorator {
27
28
 
28
29
  visitMethodDeclaration(): void { }
29
30
  visitFieldDeclaration(node: FieldDeclaration): void {
31
+ if (toString(node).startsWith("static")) return;
30
32
  const lineText = toString(node);
31
33
  if (lineText.startsWith("private")) return;
32
34
  const name = getName(node);
@@ -64,6 +66,11 @@ class AsJSONTransform extends ClassDecorator {
64
66
  return;
65
67
  }
66
68
 
69
+ // Prevent from being triggered twice
70
+ for (const member of node.members) {
71
+ if (member.name.text == "__JSON_Serialize") return;
72
+ }
73
+
67
74
  this.currentClass = {
68
75
  name: toString(node.name),
69
76
  keys: [],
@@ -81,7 +88,7 @@ class AsJSONTransform extends ClassDecorator {
81
88
  return v;
82
89
  }
83
90
  });
84
- if (parentSchema.length > 0) {
91
+ if (parentSchema.length > 0 && parentSchema[0]?.encodeStmts) {
85
92
  parentSchema[0]?.encodeStmts.push(parentSchema[0]?.encodeStmts.pop() + ",")
86
93
  this.currentClass.encodeStmts.push(...parentSchema[0]?.encodeStmts)
87
94
  } else {
@@ -122,12 +129,8 @@ class AsJSONTransform extends ClassDecorator {
122
129
  }
123
130
  }
124
131
  `
125
- //console.log(serializeFunc)
126
- //const serializedProperty = SimpleParser.parseClassMember(
127
- // serializedProp,
128
- // node
129
- //);
130
- //node.members.push(serializedProperty);
132
+
133
+ //console.log(serializeFunc, setKeyFunc)
131
134
 
132
135
  const serializeMethod = SimpleParser.parseClassMember(serializeFunc, node);
133
136
  node.members.push(serializeMethod);
package/index.html DELETED
@@ -1,10 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <script type="module">
5
- import { add } from "./build/release.js";
6
- document.body.innerText = add(1, 2);
7
- </script>
8
- </head>
9
- <body></body>
10
- </html>