json-as 0.9.2 → 0.9.3

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/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  ██║ ██║███████║ ╚█████╔╝███████║╚██████╔╝██║ ╚████║
8
8
  ╚═╝ ╚═╝╚══════╝ ╚════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═══╝
9
9
 
10
- v0.9.1
10
+ v0.9.3
11
11
  </pre>
12
12
  </h3>
13
13
 
@@ -240,7 +240,7 @@ describe("Should deserialize object arrays", () => {
240
240
 
241
241
  });
242
242
 
243
- describe("Ser/de Objects", () => {
243
+ describe("Should deserialize Objects", () => {
244
244
 
245
245
  expect(
246
246
  JSON.stringify(JSON.parse<Vec3>('{"x":3.4,"y":1.2,"z":8.3}'))
@@ -48,6 +48,16 @@ class Player {
48
48
  isVerified: boolean;
49
49
  }
50
50
 
51
+ @json
52
+ class OmitIf {
53
+ x: i32 = 1;
54
+ @omitif("this.y == -1")
55
+ y: i32 = -1;
56
+ z: i32 = 1;
57
+ @omitnull()
58
+ foo: string | null = null
59
+ }
60
+
51
61
  class Nullable { }
52
62
  type Null = Nullable | null;
53
63
 
@@ -297,7 +307,7 @@ describe("Should serialize object arrays", () => {
297
307
 
298
308
  });
299
309
 
300
- describe("Ser/de Objects", () => {
310
+ describe("Should serialize objects", () => {
301
311
 
302
312
  expect(
303
313
  JSON.stringify<Vec3>({
@@ -348,6 +358,16 @@ describe("Ser/de Objects", () => {
348
358
 
349
359
  });
350
360
 
361
+ describe("Should serialize @omit'ed objects", () => {
362
+
363
+ expect(
364
+ JSON.stringify(<OmitIf>{
365
+ y: 1
366
+ })
367
+ ).toBe('{"x":1,"y":1,"z":1}');
368
+
369
+ });
370
+
351
371
  @json
352
372
  class ObjWithString {
353
373
  s!: string;
package/assembly/test.ts CHANGED
@@ -4,10 +4,11 @@ import { JSON } from ".";
4
4
  class Base {}
5
5
  @json
6
6
  class Vec1 extends Base {
7
- x: f32 = 1.0;
7
+ x: f64 = 1.0;
8
8
  }
9
9
  @json
10
10
  class Vec2 extends Vec1 {
11
+ @omit()
11
12
  y: f32 = 2.0;
12
13
  }
13
14
  @json
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-as",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "JSON encoder/decoder for AssemblyScript",
5
5
  "types": "assembly/index.ts",
6
6
  "author": "Jairus Tanaka",
@@ -17,7 +17,7 @@
17
17
  "scripts": {
18
18
  "test": "wasmtime build/serialize.spec.wasm && wasmtime build/deserialize.spec.wasm",
19
19
  "tests:build": "asc assembly/__tests__/serialize.spec.ts -o build/serialize.spec.wasm --transform ./transform --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --optimizeLevel 0 --shrinkLevel 0 --noAssert --uncheckedBehavior always & asc assembly/__tests__/deserialize.spec.ts -o build/deserialize.spec.wasm --transform ./transform --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --optimizeLevel 0 --shrinkLevel 0 --noAssert --uncheckedBehavior always",
20
- "build:test": "asc assembly/test.ts -o build/test.wasm --transform ./transform --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --optimizeLevel 0 --shrinkLevel 0 --noAssert --uncheckedBehavior always",
20
+ "build:test": "JSON_DEBUG=true asc assembly/test.ts -o build/test.wasm --transform ./transform --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --optimizeLevel 0 --shrinkLevel 0 --noAssert --uncheckedBehavior always",
21
21
  "build:bench": "asc bench/benchmark.ts -o bench/benchmark.wasm --transform ./transform --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --optimizeLevel 3 --shrinkLevel 0 --converge --noAssert --uncheckedBehavior always --runtime stub",
22
22
  "bench:wasmtime": "wasmtime ./bench/benchmark.wasm",
23
23
  "bench:wasmer": "wasmer --llvm ./bench/benchmark.wasm",
@@ -33,8 +33,9 @@ class JSONTransform extends BaseVisitor {
33
33
  if (schema.parent?.members) {
34
34
  for (let i = 0; i < schema.parent.members.length; i++) {
35
35
  const replace = schema.members.find((v) => v.name == schema.parent?.members[i]?.name);
36
- if (!replace)
36
+ if (!replace) {
37
37
  schema.members.unshift(schema.parent.members[i]);
38
+ }
38
39
  }
39
40
  }
40
41
  }
@@ -76,29 +77,31 @@ class JSONTransform extends BaseVisitor {
76
77
  continue;
77
78
  if (member.flags === 1024 /* CommonFlags.Protected */)
78
79
  continue;
80
+ if (member.decorators && member.decorators.find((v) => v.name.text == "omit"))
81
+ continue;
79
82
  const mem = new Property();
80
83
  mem.name = name.text;
81
84
  mem.type = type;
82
85
  mem.value = value;
83
86
  mem.node = member;
84
- for (const decorator of member.decorators || []) {
85
- if (decorator.name.text == "alias") {
86
- if (!decorator.args?.length)
87
- throw new Error("Expected 1 argument but got zero at @alias in " + node.range.source.normalizedPath);
88
- mem.flag = PropertyFlags.Alias;
89
- mem.alias = decorator.args[0].value;
90
- }
91
- else if (decorator.name.text == "omit") {
92
- mem.flag = PropertyFlags.Omit;
93
- }
94
- else if (decorator.name.text == "omitnull") {
95
- mem.flag = PropertyFlags.OmitNull;
96
- }
97
- else if (decorator.name.text == "omitif") {
98
- if (!decorator.args?.length)
99
- throw new Error("Expected 1 argument but got zero at @omitif in " + node.range.source.normalizedPath);
100
- mem.args?.push(decorator.args[0].value);
101
- mem.flag = PropertyFlags.OmitIf;
87
+ if (member.decorators) {
88
+ for (let i = 0; i < (member.decorators).length; i++) {
89
+ const decorator = member.decorators[i];
90
+ if (decorator.name.text == "alias") {
91
+ if (!decorator.args?.length)
92
+ throw new Error("Expected 1 argument but got zero at @alias in " + node.range.source.normalizedPath);
93
+ mem.flag = PropertyFlags.Alias;
94
+ mem.alias = decorator.args[0].value;
95
+ }
96
+ else if (decorator.name.text == "omitnull") {
97
+ mem.flag = PropertyFlags.OmitNull;
98
+ }
99
+ else if (decorator.name.text == "omitif") {
100
+ if (!decorator.args?.length)
101
+ throw new Error("Expected 1 argument but got zero at @omitif in " + node.range.source.normalizedPath);
102
+ mem.args?.push(decorator.args[0].value);
103
+ mem.flag = PropertyFlags.OmitIf;
104
+ }
102
105
  }
103
106
  }
104
107
  if (mem.flag === PropertyFlags.Alias) {
@@ -113,7 +116,7 @@ class JSONTransform extends BaseVisitor {
113
116
  mem.deserialize = "this." + name.text + " = " + "__DESERIALIZE<" + type + ">(data.substring(value_start, value_end));";
114
117
  }
115
118
  else if (mem.flag == PropertyFlags.OmitIf) {
116
- mem.serialize = "${" + mem.args[0] + " ? \"\" : '" + escapeString(JSON.stringify(mem.name)) + ":' + __SERIALIZE<" + type + ">(this." + name.text + ")}";
119
+ mem.serialize = "${" + mem.args[0] + " ? \"\" : '" + escapeString(JSON.stringify(mem.name)) + ":' + __SERIALIZE<" + type + ">(this." + name.text + ") + \",\"}";
117
120
  mem.deserialize = "this." + name.text + " = " + "__DESERIALIZE<" + type + ">(data.substring(value_start, value_end));";
118
121
  }
119
122
  else if (mem.flag == PropertyFlags.Alias) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@json-as/transform",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "JSON encoder/decoder for AssemblyScript",
5
5
  "main": "./lib/index.js",
6
6
  "author": "Jairus Tanaka",
@@ -49,8 +49,10 @@ class JSONTransform extends BaseVisitor {
49
49
  for (let i = 0; i < schema.parent.members.length; i++) {
50
50
  const replace = schema.members.find(
51
51
  (v) => v.name == schema.parent?.members[i]?.name
52
- )
53
- if (!replace) schema.members.unshift(schema.parent.members[i]!);
52
+ );
53
+ if (!replace) {
54
+ schema.members.unshift(schema.parent.members[i]!);
55
+ }
54
56
  }
55
57
  }
56
58
  }
@@ -94,6 +96,7 @@ class JSONTransform extends BaseVisitor {
94
96
  if (member.flags == CommonFlags.Static) continue;
95
97
  if (member.flags === CommonFlags.Private) continue;
96
98
  if (member.flags === CommonFlags.Protected) continue;
99
+ if (member.decorators && member.decorators.find((v) => (<IdentifierExpression>v.name).text == "omit")) continue;
97
100
 
98
101
  const mem = new Property();
99
102
  mem.name = name.text;
@@ -101,19 +104,20 @@ class JSONTransform extends BaseVisitor {
101
104
  mem.value = value;
102
105
  mem.node = member;
103
106
 
104
- for (const decorator of member.decorators || []) {
105
- if ((<IdentifierExpression>decorator.name).text == "alias") {
106
- if (!decorator.args?.length) throw new Error("Expected 1 argument but got zero at @alias in " + node.range.source.normalizedPath);
107
- mem.flag = PropertyFlags.Alias;
108
- mem.alias = (decorator.args[0] as StringLiteralExpression).value;
109
- } else if ((<IdentifierExpression>decorator.name).text == "omit") {
110
- mem.flag = PropertyFlags.Omit;
111
- } else if ((<IdentifierExpression>decorator.name).text == "omitnull") {
112
- mem.flag = PropertyFlags.OmitNull;
113
- } else if ((<IdentifierExpression>decorator.name).text == "omitif") {
114
- if (!decorator.args?.length) throw new Error("Expected 1 argument but got zero at @omitif in " + node.range.source.normalizedPath);
115
- mem.args?.push((decorator.args[0] as StringLiteralExpression).value);
116
- mem.flag = PropertyFlags.OmitIf;
107
+ if (member.decorators) {
108
+ for (let i = 0; i < (member.decorators).length; i++) {
109
+ const decorator = member.decorators[i]!;
110
+ if ((<IdentifierExpression>decorator.name).text == "alias") {
111
+ if (!decorator.args?.length) throw new Error("Expected 1 argument but got zero at @alias in " + node.range.source.normalizedPath);
112
+ mem.flag = PropertyFlags.Alias;
113
+ mem.alias = (decorator.args[0] as StringLiteralExpression).value;
114
+ } else if ((<IdentifierExpression>decorator.name).text == "omitnull") {
115
+ mem.flag = PropertyFlags.OmitNull;
116
+ } else if ((<IdentifierExpression>decorator.name).text == "omitif") {
117
+ if (!decorator.args?.length) throw new Error("Expected 1 argument but got zero at @omitif in " + node.range.source.normalizedPath);
118
+ mem.args?.push((decorator.args[0] as StringLiteralExpression).value);
119
+ mem.flag = PropertyFlags.OmitIf;
120
+ }
117
121
  }
118
122
  }
119
123
 
@@ -128,7 +132,7 @@ class JSONTransform extends BaseVisitor {
128
132
  mem.serialize = "${changetype<usize>(this." + mem.name + ") == <usize>0" + " ? \"\" : '" + escapeString(JSON.stringify(mem.name)) + ":' + __SERIALIZE<" + type + ">(this." + name.text + ") + \",\"}";
129
133
  mem.deserialize = "this." + name.text + " = " + "__DESERIALIZE<" + type + ">(data.substring(value_start, value_end));"
130
134
  } else if (mem.flag == PropertyFlags.OmitIf) {
131
- mem.serialize = "${" + mem.args![0]! + " ? \"\" : '" + escapeString(JSON.stringify(mem.name)) + ":' + __SERIALIZE<" + type + ">(this." + name.text + ")}";
135
+ mem.serialize = "${" + mem.args![0]! + " ? \"\" : '" + escapeString(JSON.stringify(mem.name)) + ":' + __SERIALIZE<" + type + ">(this." + name.text + ") + \",\"}";
132
136
  mem.deserialize = "this." + name.text + " = " + "__DESERIALIZE<" + type + ">(data.substring(value_start, value_end));"
133
137
  } else if (mem.flag == PropertyFlags.Alias) {
134
138
  mem.serialize = escapeString(JSON.stringify(mem.name)) + ":${__SERIALIZE<" + type + ">(this." + name.text + ")}";