json-as 0.9.7 → 0.9.8-a

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.
Files changed (63) hide show
  1. package/.github/workflows/nodejs.yml +9 -10
  2. package/CHANGELOG +10 -2
  3. package/README.md +52 -7
  4. package/asconfig.json +24 -3
  5. package/assembly/__tests__/test.spec.ts +564 -0
  6. package/assembly/__tests__/types.ts +82 -0
  7. package/assembly/{src/chars.ts → chars.ts} +36 -36
  8. package/assembly/deserialize/array/array.ts +4 -4
  9. package/assembly/deserialize/array/bool.ts +4 -4
  10. package/assembly/deserialize/array/float.ts +4 -4
  11. package/assembly/deserialize/array/integer.ts +4 -4
  12. package/assembly/deserialize/array/map.ts +4 -4
  13. package/assembly/deserialize/array/object.ts +4 -4
  14. package/assembly/deserialize/array/string.ts +4 -4
  15. package/assembly/deserialize/array.ts +5 -4
  16. package/assembly/deserialize/bool.ts +4 -4
  17. package/assembly/deserialize/date.ts +2 -2
  18. package/assembly/deserialize/float.ts +2 -2
  19. package/assembly/deserialize/integer.ts +3 -3
  20. package/assembly/deserialize/map.ts +4 -4
  21. package/assembly/deserialize/mpz.ts +12 -0
  22. package/assembly/deserialize/object.ts +4 -4
  23. package/assembly/deserialize/string.ts +5 -5
  24. package/assembly/index.ts +25 -33
  25. package/assembly/serialize/array.ts +6 -5
  26. package/assembly/serialize/bool.ts +2 -2
  27. package/assembly/serialize/date.ts +2 -2
  28. package/assembly/serialize/float.ts +2 -2
  29. package/assembly/serialize/integer.ts +2 -2
  30. package/assembly/serialize/map.ts +8 -7
  31. package/assembly/serialize/mpz.ts +6 -0
  32. package/assembly/serialize/object.ts +2 -2
  33. package/assembly/serialize/string.ts +5 -5
  34. package/assembly/serialize/unknown.ts +5 -5
  35. package/assembly/test.ts +79 -45
  36. package/assembly/types.ts +4 -0
  37. package/assembly/{src/util.ts → util.ts} +3 -3
  38. package/bench/benchmark.ts +1 -1
  39. package/build/test.spec.wasm +0 -0
  40. package/build/test.spec.wasm.map +1 -0
  41. package/build/test.spec.wat +114980 -0
  42. package/build/test.wasm +0 -0
  43. package/build/test.wasm.map +1 -0
  44. package/build/test.wat +10948 -0
  45. package/package.json +12 -14
  46. package/transform/lib/index.js +256 -21
  47. package/transform/lib/visitor.js +516 -0
  48. package/transform/package.json +1 -1
  49. package/transform/src/index.ts +360 -25
  50. package/transform/src/visitor.ts +543 -0
  51. package/transform/tsconfig.json +23 -63
  52. package/tsconfig.json +13 -13
  53. package/as-pect.asconfig.json +0 -24
  54. package/as-pect.config.js +0 -30
  55. package/assembly/__tests__/deserialize.spec.ts +0 -301
  56. package/assembly/__tests__/serialize.spec.ts +0 -398
  57. package/assembly/deserialize/box.ts +0 -17
  58. package/assembly/serialize/box.ts +0 -11
  59. package/develop/assembly/serialize/unknown.ts +0 -46
  60. package/transform/lib/index.old.js +0 -257
  61. package/transform/lib/types.js +0 -17
  62. package/transform/src/index.old.ts +0 -312
  63. /package/assembly/{src/sink.ts → sink.ts} +0 -0
@@ -1,7 +1,6 @@
1
1
  import { JSON } from "..";
2
- import { Sink } from "../src/sink";
3
- import { __atoi_fast } from "../src/util";
4
- import { serializeUnknownArray } from "./array/unknown";
2
+ import { Sink } from "../sink";
3
+ import { __atoi_fast } from "../util";
5
4
  import { serializeBool } from "./bool";
6
5
  import { serializeFloat } from "./float";
7
6
  import { serializeInteger } from "./integer";
@@ -13,7 +12,8 @@ import { serializeString } from "./string";
13
12
  * @param data - The JSON.Value to be serialized.
14
13
  * @returns The serialized result.
15
14
  */
16
- export function serializeUnknown(data: JSON.Value): string {
15
+ // @ts-ignore: Decorator valid here
16
+ @inline export function serializeUnknown(data: JSON.Value): string {
17
17
  const type = data.type;
18
18
  switch (type) {
19
19
  case JSON.Types.String: {
@@ -41,5 +41,5 @@ export function serializeUnknown(data: JSON.Value): string {
41
41
  return serializeFloat(data.get<f64>());
42
42
  }
43
43
  }
44
- return serializeUnknownArray(data.get<JSON.Value[]>());
44
+ return "ERROR"//serializeUnknownArray(data.get<JSON.Value[]>());
45
45
  }
package/assembly/test.ts CHANGED
@@ -1,51 +1,85 @@
1
- import { JSON } from ".";
2
-
3
- // @json or @serializable work here
1
+ import {
2
+ __atoi_fast
3
+ } from "json-as/assembly/util";
4
+ import {
5
+ JSON as __JSON
6
+ } from "json-as/assembly";
7
+ import {
8
+ JSON
9
+ } from ".";
4
10
  @json
5
- class Vec3 {
6
- x: f32 = 0.0;
7
- y: f32 = 0.0;
8
- z: f32 = 0.0;
9
- }
10
-
11
- class Box<T> {
12
- value: T;
11
+ class Inner {
12
+ name: string;
13
+ constructor(name: string) {
14
+ this.name = name;
15
+ }
16
+ __SERIALIZE(): string {
17
+ let out = `{"name":${__JSON.stringify<string>(this.name)},`;
18
+ store<u16>(changetype<usize>(out) + ((out.length - 1) << 1), 125);
19
+ return out;
20
+ }
21
+ __INITIALIZE(): this {
22
+ return this;
23
+ }
24
+ __DESERIALIZE(data: string, key_start: i32, key_end: i32, value_start: i32, value_end: i32): boolean {
25
+ const len = key_end - key_start;
26
+ if (4 === len) {
27
+ const code = load<u64>(changetype<usize>(data) + (key_start << 1));
28
+ if (28429440805568622 === code) {
29
+ this.name = __JSON.parse<string>(data.substring(value_start, value_end));
30
+ return true;
31
+ } else {
32
+ return false;
33
+ }
34
+ }
35
+ return false;
36
+ }
13
37
  }
14
-
15
38
  @json
16
- class Player {
17
- @alias("first name")
18
- @omitnull()
19
- firstName: string | null;
20
- lastName!: string;
21
- lastActive!: i32[];
22
- // Drop in a code block, function, or expression that evaluates to a boolean
23
- @omitif("this.age < 18")
24
- age!: i32;
25
- @omitnull()
26
- pos!: Vec3 | null;
27
- isVerified!: boolean;
28
- @flatten("value")
29
- box: Box<i32> | null;
30
- }
31
-
32
- const player: Player = {
33
- firstName: null,
34
- lastName: "West",
35
- lastActive: [8, 27, 2022],
36
- age: 23,
37
- pos: {
38
- x: 3.4,
39
- y: 1.2,
40
- z: 8.3
41
- },
42
- isVerified: true,
43
- box: null
44
- };
39
+ class Outer {
40
+ name: string;
41
+ m: Map<string, Inner>;
42
+ constructor(name: string) {
43
+ this.name = name;
44
+ this.m = new Map<string, Inner>();
45
+ }
46
+ __SERIALIZE(): string {
47
+ let out = `{"name":${__JSON.stringify<string>(this.name)},"m":${__JSON.stringify<Map<string, Inner>>(this.m)},`;
48
+ store<u16>(changetype<usize>(out) + ((out.length - 1) << 1), 125);
49
+ return out;
50
+ }
51
+ __INITIALIZE(): this {
52
+ return this;
53
+ }
54
+ __DESERIALIZE(data: string, key_start: i32, key_end: i32, value_start: i32, value_end: i32): boolean {
55
+ const len = key_end - key_start;
56
+ if (1 === len) {
57
+ switch (load<u16>(changetype<usize>(data) + (key_start << 1))) {
58
+ case 109:
59
+ {
60
+ this.m = __JSON.parse<Map<string, Inner>>(data.substring(value_start, value_end));
61
+ return true;
62
+ }
45
63
 
46
- const stringified = JSON.stringify<Player>(player);
64
+ default:
65
+ {
66
+ return false;
67
+ }
47
68
 
48
- const parsed = JSON.parse<Player>(stringified);
69
+ }
70
+ } else if (4 === len) {
71
+ const code = load<u64>(changetype<usize>(data) + (key_start << 1));
72
+ if (28429440805568622 === code) {
73
+ this.name = __JSON.parse<string>(data.substring(value_start, value_end));
74
+ return true;
75
+ } else {
76
+ return false;
77
+ }
78
+ }
79
+ return false;
80
+ }
81
+ }
49
82
 
50
- console.log("Stringified: " + stringified);
51
- console.log("Parsed: " + JSON.stringify(parsed));
83
+ console.log(JSON.stringify(new Map<string, Inner>()))
84
+ let serializedState = JSON.stringify(new Outer("haadf"));
85
+ console.log(serializedState);
@@ -0,0 +1,4 @@
1
+ @json
2
+ export class Vec3 {
3
+ x: f64 = 1.0;
4
+ }
@@ -1,6 +1,6 @@
1
- import { StringSink } from "as-string-sink/assembly";
2
1
  import { isSpace } from "util/string";
3
2
  import { BACK_SLASH, QUOTE } from "./chars";
3
+ import { Sink } from "./sink";
4
4
 
5
5
  // @ts-ignore: Decorator
6
6
  export function isMap<T>(): bool {
@@ -15,7 +15,7 @@ export function unsafeCharCodeAt(data: string, pos: i32): i32 {
15
15
 
16
16
  // @ts-ignore: Decorator
17
17
  export function removeWhitespace(data: string): string {
18
- const result = new StringSink();
18
+ const result = new Sink();
19
19
  let instr = false;
20
20
  for (let i = 0; i < data.length; i++) {
21
21
  const char = unsafeCharCodeAt(data, i);
@@ -258,7 +258,7 @@ export function snip_fast<T extends number>(str: string, len: u32 = 0, offset: u
258
258
  */
259
259
 
260
260
  // @ts-ignore
261
- @global export function __atoi_fast<T extends number>(str: string, start: u32 = 0, end: u32 = 0): T {
261
+ export function __atoi_fast<T extends number>(str: string, start: u32 = 0, end: u32 = 0): T {
262
262
  // @ts-ignore
263
263
  let val: T = 0;
264
264
  if (!end) end = start + u32(str.length << 1);
@@ -1,5 +1,5 @@
1
1
  import { bench, blackbox } from "as-bench/assembly/bench";
2
- import { __atoi_fast } from "../assembly/src/util";
2
+ import { __atoi_fast } from "../assembly/util";
3
3
  import { JSON } from "../assembly";
4
4
 
5
5
  @json
Binary file