json-as 1.3.5 → 1.3.7

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 (107) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/assembly/deserialize/helpers/uint.ts +4 -1
  3. package/assembly/deserialize/index/arbitrary.ts +5 -1
  4. package/assembly/deserialize/index/array.ts +13 -3
  5. package/assembly/deserialize/index/integer.ts +68 -1
  6. package/assembly/deserialize/index/string.ts +4 -1
  7. package/assembly/deserialize/index/typedarray.ts +13 -3
  8. package/assembly/deserialize/index/unsigned.ts +78 -1
  9. package/assembly/deserialize/simd/array/integer.ts +327 -50
  10. package/assembly/deserialize/simd/integer.ts +233 -0
  11. package/assembly/deserialize/simd/string.ts +45 -11
  12. package/assembly/deserialize/simple/arbitrary.ts +11 -4
  13. package/assembly/deserialize/simple/array/arbitrary.ts +24 -5
  14. package/assembly/deserialize/simple/array/array.ts +8 -2
  15. package/assembly/deserialize/simple/array/bool.ts +38 -7
  16. package/assembly/deserialize/simple/array/box.ts +8 -2
  17. package/assembly/deserialize/simple/array/float.ts +36 -9
  18. package/assembly/deserialize/simple/array/generic.ts +12 -4
  19. package/assembly/deserialize/simple/array/integer.ts +8 -2
  20. package/assembly/deserialize/simple/array/map.ts +26 -6
  21. package/assembly/deserialize/simple/array/object.ts +26 -6
  22. package/assembly/deserialize/simple/array/raw.ts +34 -7
  23. package/assembly/deserialize/simple/array/string.ts +8 -2
  24. package/assembly/deserialize/simple/array/struct.ts +26 -6
  25. package/assembly/deserialize/simple/array.ts +13 -3
  26. package/assembly/deserialize/simple/bool.ts +6 -2
  27. package/assembly/deserialize/simple/float.ts +6 -1
  28. package/assembly/deserialize/simple/integer.ts +10 -2
  29. package/assembly/deserialize/simple/map.ts +95 -22
  30. package/assembly/deserialize/simple/object.ts +63 -14
  31. package/assembly/deserialize/simple/raw.ts +4 -1
  32. package/assembly/deserialize/simple/set.ts +59 -14
  33. package/assembly/deserialize/simple/staticarray/string.ts +11 -3
  34. package/assembly/deserialize/simple/staticarray.ts +64 -14
  35. package/assembly/deserialize/simple/string.ts +5 -92
  36. package/assembly/deserialize/simple/struct.ts +5 -1
  37. package/assembly/deserialize/simple/typedarray.ts +16 -3
  38. package/assembly/deserialize/simple/unsigned.ts +10 -15
  39. package/assembly/deserialize/swar/array/arbitrary.ts +5 -1
  40. package/assembly/deserialize/swar/array/array.ts +30 -6
  41. package/assembly/deserialize/swar/array/bool.ts +22 -4
  42. package/assembly/deserialize/swar/array/box.ts +5 -1
  43. package/assembly/deserialize/swar/array/float.ts +15 -3
  44. package/assembly/deserialize/swar/array/generic.ts +24 -7
  45. package/assembly/deserialize/swar/array/integer.ts +328 -84
  46. package/assembly/deserialize/swar/array/map.ts +5 -1
  47. package/assembly/deserialize/swar/array/object.ts +27 -7
  48. package/assembly/deserialize/swar/array/raw.ts +5 -1
  49. package/assembly/deserialize/swar/array/shared.ts +36 -11
  50. package/assembly/deserialize/swar/array/string.ts +20 -4
  51. package/assembly/deserialize/swar/array/struct.ts +27 -7
  52. package/assembly/deserialize/swar/array.ts +19 -4
  53. package/assembly/deserialize/swar/integer.ts +246 -0
  54. package/assembly/deserialize/swar/string.ts +98 -194
  55. package/assembly/index.d.ts +3 -1
  56. package/assembly/index.ts +312 -81
  57. package/assembly/serialize/index/float.ts +5 -1
  58. package/assembly/serialize/index/typedarray.ts +25 -7
  59. package/assembly/serialize/simd/string.ts +6 -2
  60. package/assembly/serialize/simple/array.ts +179 -1
  61. package/assembly/serialize/simple/float.ts +4 -1
  62. package/assembly/serialize/simple/integer.ts +9 -9
  63. package/assembly/serialize/simple/map.ts +6 -2
  64. package/assembly/serialize/simple/raw.ts +5 -1
  65. package/assembly/serialize/simple/set.ts +6 -1
  66. package/assembly/serialize/simple/staticarray.ts +6 -1
  67. package/assembly/serialize/simple/string.ts +0 -1
  68. package/assembly/serialize/simple/typedarray.ts +10 -3
  69. package/assembly/serialize/swar/string.ts +25 -8
  70. package/assembly/tsconfig.json +1 -21
  71. package/assembly/util/atoi-fast.ts +81 -0
  72. package/assembly/util/concat.ts +5 -1
  73. package/assembly/util/dragonbox-cache.ts +443 -2
  74. package/assembly/util/dragonbox.ts +43 -14
  75. package/assembly/util/itoa-fast.ts +230 -0
  76. package/assembly/util/masks.ts +18 -1
  77. package/assembly/util/parsefloat-fast.ts +167 -0
  78. package/assembly/util/simd-int.ts +191 -0
  79. package/assembly/util/snp.ts +4 -1
  80. package/assembly/util/swar-int.ts +248 -0
  81. package/assembly/util/swar.ts +13 -3
  82. package/lib/as-bs.ts +13 -5
  83. package/package.json +12 -4
  84. package/transform/lib/builder.d.ts.map +1 -1
  85. package/transform/lib/builder.js +13 -5
  86. package/transform/lib/builder.js.map +1 -1
  87. package/transform/lib/index.d.ts +1 -0
  88. package/transform/lib/index.d.ts.map +1 -1
  89. package/transform/lib/index.js +1030 -241
  90. package/transform/lib/index.js.map +1 -1
  91. package/transform/lib/linkers/alias.d.ts.map +1 -1
  92. package/transform/lib/linkers/alias.js.map +1 -1
  93. package/transform/lib/linkers/custom.d.ts.map +1 -1
  94. package/transform/lib/linkers/custom.js +3 -2
  95. package/transform/lib/linkers/custom.js.map +1 -1
  96. package/transform/lib/linkers/imports.d.ts.map +1 -1
  97. package/transform/lib/linkers/imports.js.map +1 -1
  98. package/transform/lib/types.d.ts.map +1 -1
  99. package/transform/lib/types.js +54 -16
  100. package/transform/lib/types.js.map +1 -1
  101. package/transform/lib/util.d.ts.map +1 -1
  102. package/transform/lib/util.js +1 -1
  103. package/transform/lib/util.js.map +1 -1
  104. package/transform/lib/visitor.d.ts.map +1 -1
  105. package/transform/lib/visitor.js +2 -1
  106. package/transform/lib/visitor.js.map +1 -1
  107. package/assembly/custom/util.ts +0 -310
@@ -1,19 +1,39 @@
1
- import { BRACE_LEFT, BRACE_RIGHT, BRACKET_LEFT, BRACKET_RIGHT } from "../../../custom/chars";
1
+ import {
2
+ BRACE_LEFT,
3
+ BRACE_RIGHT,
4
+ BRACKET_LEFT,
5
+ BRACKET_RIGHT,
6
+ } from "../../../custom/chars";
2
7
  import { JSON } from "../../..";
3
8
  import { isSpace } from "util/string";
4
9
 
5
- export function deserializeMapArray<T extends Map<any, any>[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
6
- const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
10
+ export function deserializeMapArray<T extends Map<any, any>[]>(
11
+ srcStart: usize,
12
+ srcEnd: usize,
13
+ dst: usize,
14
+ ): T {
15
+ const out = changetype<nonnull<T>>(
16
+ dst || changetype<usize>(instantiate<T>()),
17
+ );
7
18
  let lastIndex: usize = 0;
8
19
  let depth: u32 = 0;
9
20
 
10
21
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
11
22
  while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
12
23
 
13
- if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
24
+ if (srcStart - srcEnd == 0)
25
+ throw new Error("Input string had zero length or was all whitespace");
14
26
 
15
- if (load<u16>(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of object at position " + (srcEnd - srcStart).toString());
16
- if (load<u16>(srcEnd - 2) != BRACKET_RIGHT) throw new Error("Expected ']' at end of object at position " + (srcEnd - srcStart).toString());
27
+ if (load<u16>(srcStart) != BRACKET_LEFT)
28
+ throw new Error(
29
+ "Expected '[' at start of object at position " +
30
+ (srcEnd - srcStart).toString(),
31
+ );
32
+ if (load<u16>(srcEnd - 2) != BRACKET_RIGHT)
33
+ throw new Error(
34
+ "Expected ']' at end of object at position " +
35
+ (srcEnd - srcStart).toString(),
36
+ );
17
37
 
18
38
  while (srcStart < srcEnd) {
19
39
  const code = load<u16>(srcStart);
@@ -1,19 +1,39 @@
1
- import { BRACE_LEFT, BRACE_RIGHT, BRACKET_LEFT, BRACKET_RIGHT } from "../../../custom/chars";
1
+ import {
2
+ BRACE_LEFT,
3
+ BRACE_RIGHT,
4
+ BRACKET_LEFT,
5
+ BRACKET_RIGHT,
6
+ } from "../../../custom/chars";
2
7
  import { JSON } from "../../..";
3
8
  import { isSpace } from "util/string";
4
9
 
5
- export function deserializeObjectArray<T extends unknown[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
6
- const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
10
+ export function deserializeObjectArray<T extends unknown[]>(
11
+ srcStart: usize,
12
+ srcEnd: usize,
13
+ dst: usize,
14
+ ): T {
15
+ const out = changetype<nonnull<T>>(
16
+ dst || changetype<usize>(instantiate<T>()),
17
+ );
7
18
  let lastIndex: usize = 0;
8
19
  let depth: u32 = 0;
9
20
 
10
21
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
11
22
  while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
12
23
 
13
- if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
24
+ if (srcStart - srcEnd == 0)
25
+ throw new Error("Input string had zero length or was all whitespace");
14
26
 
15
- if (load<u16>(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of object at position " + (srcEnd - srcStart).toString());
16
- if (load<u16>(srcEnd - 2) != BRACKET_RIGHT) throw new Error("Expected ']' at end of object at position " + (srcEnd - srcStart).toString());
27
+ if (load<u16>(srcStart) != BRACKET_LEFT)
28
+ throw new Error(
29
+ "Expected '[' at start of object at position " +
30
+ (srcEnd - srcStart).toString(),
31
+ );
32
+ if (load<u16>(srcEnd - 2) != BRACKET_RIGHT)
33
+ throw new Error(
34
+ "Expected ']' at end of object at position " +
35
+ (srcEnd - srcStart).toString(),
36
+ );
17
37
 
18
38
  while (srcStart < srcEnd) {
19
39
  const code = load<u16>(srcStart);
@@ -1,11 +1,28 @@
1
1
  import { isSpace, isUnescapedQuote, scanStringEnd } from "../../../util";
2
- import { COMMA, BRACKET_RIGHT, QUOTE, BRACE_LEFT, BRACE_RIGHT, BRACKET_LEFT, BACK_SLASH, CHAR_T, CHAR_F, CHAR_N } from "../../../custom/chars";
2
+ import {
3
+ COMMA,
4
+ BRACKET_RIGHT,
5
+ QUOTE,
6
+ BRACE_LEFT,
7
+ BRACE_RIGHT,
8
+ BRACKET_LEFT,
9
+ BACK_SLASH,
10
+ CHAR_T,
11
+ CHAR_F,
12
+ CHAR_N,
13
+ } from "../../../custom/chars";
3
14
  import { JSON } from "../../..";
4
15
  import { ptrToStr } from "../../../util/ptrToStr";
5
16
 
6
- export function deserializeRawArray(srcStart: usize, srcEnd: usize, dst: usize): JSON.Raw[] {
17
+ export function deserializeRawArray(
18
+ srcStart: usize,
19
+ srcEnd: usize,
20
+ dst: usize,
21
+ ): JSON.Raw[] {
7
22
  // console.log("data: " + ptrToStr(srcStart, srcEnd));
8
- const out = changetype<JSON.Raw[]>(dst || changetype<usize>(instantiate<JSON.Raw[]>()));
23
+ const out = changetype<JSON.Raw[]>(
24
+ dst || changetype<usize>(instantiate<JSON.Raw[]>()),
25
+ );
9
26
  let lastIndex: usize = 0;
10
27
  let depth = 0;
11
28
  srcStart += 2;
@@ -19,7 +36,8 @@ export function deserializeRawArray(srcStart: usize, srcEnd: usize, dst: usize):
19
36
  } else if (code == QUOTE) {
20
37
  lastIndex = srcStart;
21
38
  srcStart = scanStringEnd(srcStart, srcEnd);
22
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON array");
39
+ if (srcStart >= srcEnd)
40
+ throw new Error("Unterminated string in JSON array");
23
41
  out.push(JSON.Raw.from(ptrToStr(lastIndex, srcStart + 2)));
24
42
  srcStart += 2;
25
43
  } else if (code - 48 <= 9 || code == 45) {
@@ -43,7 +61,8 @@ export function deserializeRawArray(srcStart: usize, srcEnd: usize, dst: usize):
43
61
  const code = load<u16>(srcStart);
44
62
  if (code == QUOTE) {
45
63
  srcStart = scanStringEnd(srcStart, srcEnd);
46
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON array");
64
+ if (srcStart >= srcEnd)
65
+ throw new Error("Unterminated string in JSON array");
47
66
  } else if (code == BRACE_RIGHT) {
48
67
  if (--depth == 0) {
49
68
  // console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
@@ -62,7 +81,8 @@ export function deserializeRawArray(srcStart: usize, srcEnd: usize, dst: usize):
62
81
  const code = load<u16>(srcStart);
63
82
  if (code == QUOTE) {
64
83
  srcStart = scanStringEnd(srcStart, srcEnd);
65
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON array");
84
+ if (srcStart >= srcEnd)
85
+ throw new Error("Unterminated string in JSON array");
66
86
  } else if (code == BRACKET_RIGHT) {
67
87
  if (--depth == 0) {
68
88
  // console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
@@ -92,7 +112,14 @@ export function deserializeRawArray(srcStart: usize, srcEnd: usize, dst: usize):
92
112
  srcStart += 10;
93
113
  }
94
114
  } else {
95
- throw new Error("Unexpected character in JSON object '" + String.fromCharCode(code) + "' at position " + (srcEnd - srcStart).toString() + " " + ptrToStr(lastIndex, srcStart + 10));
115
+ throw new Error(
116
+ "Unexpected character in JSON object '" +
117
+ String.fromCharCode(code) +
118
+ "' at position " +
119
+ (srcEnd - srcStart).toString() +
120
+ " " +
121
+ ptrToStr(lastIndex, srcStart + 10),
122
+ );
96
123
  }
97
124
  }
98
125
  return out;
@@ -2,8 +2,14 @@ import { JSON } from "../../..";
2
2
  import { QUOTE } from "../../../custom/chars";
3
3
  import { isUnescapedQuote } from "../../../util";
4
4
 
5
- export function deserializeStringArray(srcStart: usize, srcEnd: usize, dst: usize): string[] {
6
- const out = changetype<string[]>(dst || changetype<usize>(instantiate<string[]>()));
5
+ export function deserializeStringArray(
6
+ srcStart: usize,
7
+ srcEnd: usize,
8
+ dst: usize,
9
+ ): string[] {
10
+ const out = changetype<string[]>(
11
+ dst || changetype<usize>(instantiate<string[]>()),
12
+ );
7
13
  let lastPos: usize = 2;
8
14
  let inString = false;
9
15
  while (srcStart < srcEnd) {
@@ -1,19 +1,39 @@
1
- import { BRACE_LEFT, BRACE_RIGHT, BRACKET_LEFT, BRACKET_RIGHT } from "../../../custom/chars";
1
+ import {
2
+ BRACE_LEFT,
3
+ BRACE_RIGHT,
4
+ BRACKET_LEFT,
5
+ BRACKET_RIGHT,
6
+ } from "../../../custom/chars";
2
7
  import { JSON } from "../../..";
3
8
  import { isSpace } from "util/string";
4
9
 
5
- export function deserializeStructArray<T extends unknown[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
6
- const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
10
+ export function deserializeStructArray<T extends unknown[]>(
11
+ srcStart: usize,
12
+ srcEnd: usize,
13
+ dst: usize,
14
+ ): T {
15
+ const out = changetype<nonnull<T>>(
16
+ dst || changetype<usize>(instantiate<T>()),
17
+ );
7
18
  let lastIndex: usize = 0;
8
19
  let depth: u32 = 0;
9
20
 
10
21
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
11
22
  while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
12
23
 
13
- if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
24
+ if (srcStart - srcEnd == 0)
25
+ throw new Error("Input string had zero length or was all whitespace");
14
26
 
15
- if (load<u16>(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of object at position " + (srcEnd - srcStart).toString());
16
- if (load<u16>(srcEnd - 2) != BRACKET_RIGHT) throw new Error("Expected ']' at end of object at position " + (srcEnd - srcStart).toString());
27
+ if (load<u16>(srcStart) != BRACKET_LEFT)
28
+ throw new Error(
29
+ "Expected '[' at start of object at position " +
30
+ (srcEnd - srcStart).toString(),
31
+ );
32
+ if (load<u16>(srcEnd - 2) != BRACKET_RIGHT)
33
+ throw new Error(
34
+ "Expected ']' at end of object at position " +
35
+ (srcEnd - srcStart).toString(),
36
+ );
17
37
 
18
38
  while (srcStart < srcEnd) {
19
39
  const code = load<u16>(srcStart);
@@ -11,10 +11,17 @@ import { deserializeStringArray } from "./array/string";
11
11
  import { deserializeObjectArray } from "./array/object";
12
12
  import { deserializeBoxArray } from "./array/box";
13
13
  import { deserializeRawArray } from "./array/raw";
14
- export { deserializeArrayField, deserializeArrayField as deserializeArrayField_SWAR } from "../swar/array";
14
+ export {
15
+ deserializeArrayField,
16
+ deserializeArrayField as deserializeArrayField_SWAR,
17
+ } from "../swar/array";
15
18
 
16
19
  // @ts-ignore: Decorator valid here
17
- export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
20
+ export function deserializeArray<T extends unknown[]>(
21
+ srcStart: usize,
22
+ srcEnd: usize,
23
+ dst: usize,
24
+ ): T {
18
25
  if (isString<valueof<T>>()) {
19
26
  return <T>deserializeStringArray(srcStart, srcEnd, dst);
20
27
  } else if (isBoolean<valueof<T>>()) {
@@ -56,7 +63,10 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
56
63
  } else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
57
64
  return deserializeStructArray<T>(srcStart, srcEnd, dst);
58
65
  // @ts-ignore: defined by transform
59
- } else if (isDefined(type.__DESERIALIZE_SLOW) || isDefined(type.__DESERIALIZE_FAST)) {
66
+ } else if (
67
+ isDefined(type.__DESERIALIZE_SLOW) ||
68
+ isDefined(type.__DESERIALIZE_FAST)
69
+ ) {
60
70
  return deserializeStructArray<T>(srcStart, srcEnd, dst);
61
71
  }
62
72
  throw new Error("Could not parse array of type " + nameof<T>() + "!");
@@ -1,7 +1,11 @@
1
1
  // @ts-ignore: inline
2
- @inline export function deserializeBoolean(srcStart: usize, srcEnd: usize): boolean {
2
+ @inline export function deserializeBoolean(
3
+ srcStart: usize,
4
+ srcEnd: usize,
5
+ ): boolean {
3
6
  const block = load<u64>(srcStart);
4
7
  if (block == 28429475166421108) return true;
5
- else if (block == 32370086184550502 && load<u16>(srcStart, 8) == 101) return false;
8
+ else if (block == 32370086184550502 && load<u16>(srcStart, 8) == 101)
9
+ return false;
6
10
  return false; //throw new Error(`Expected to find boolean, but found "${data.slice(0, 100)}" instead!`);
7
11
  }
@@ -119,7 +119,12 @@ import { ptrToStr } from "../../util/ptrToStr";
119
119
  }
120
120
 
121
121
  // @ts-ignore: inline
122
- @inline export function deserializeFloatField<T extends number>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
122
+ @inline export function deserializeFloatField<T extends number>(
123
+ srcStart: usize,
124
+ srcEnd: usize,
125
+ dstObj: usize,
126
+ dstOffset: usize = 0,
127
+ ): usize {
123
128
  const fieldPtr = dstObj + dstOffset;
124
129
  let negative = false;
125
130
  if (load<u16>(srcStart) == 45) {
@@ -1,12 +1,20 @@
1
1
  import { atoi } from "../../util/atoi";
2
2
 
3
3
  // @ts-ignore: inline
4
- @inline export function deserializeInteger<T>(srcStart: usize, srcEnd: usize): T {
4
+ @inline export function deserializeInteger<T>(
5
+ srcStart: usize,
6
+ srcEnd: usize,
7
+ ): T {
5
8
  return atoi<T>(srcStart, srcEnd);
6
9
  }
7
10
 
8
11
  // @ts-ignore: inline
9
- @inline export function deserializeIntegerField<T extends number>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
12
+ @inline export function deserializeIntegerField<T extends number>(
13
+ srcStart: usize,
14
+ srcEnd: usize,
15
+ dstObj: usize,
16
+ dstOffset: usize = 0,
17
+ ): usize {
10
18
  const fieldPtr = dstObj + dstOffset;
11
19
  let negative = false;
12
20
  if (load<u16>(srcStart) == 45) {
@@ -1,5 +1,17 @@
1
1
  import { JSON } from "../..";
2
- import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
2
+ import {
3
+ BACK_SLASH,
4
+ COMMA,
5
+ CHAR_F,
6
+ BRACE_LEFT,
7
+ BRACKET_LEFT,
8
+ CHAR_N,
9
+ QUOTE,
10
+ BRACE_RIGHT,
11
+ BRACKET_RIGHT,
12
+ CHAR_T,
13
+ COLON,
14
+ } from "../../custom/chars";
3
15
  import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
4
16
  import { scanValueEnd } from "../swar/array/shared";
5
17
 
@@ -10,8 +22,14 @@ import { scanValueEnd } from "../swar/array/shared";
10
22
  return JSON.parse<T>(keyText);
11
23
  }
12
24
 
13
- export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
14
- const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
25
+ export function deserializeMap<T extends Map<any, any>>(
26
+ srcStart: usize,
27
+ srcEnd: usize,
28
+ dst: usize,
29
+ ): T {
30
+ const out = changetype<nonnull<T>>(
31
+ dst || changetype<usize>(instantiate<T>()),
32
+ );
15
33
 
16
34
  let keyStart: usize = 0;
17
35
  let keyEnd: usize = 0;
@@ -22,9 +40,18 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
22
40
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
23
41
  while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2; // would like to optimize this later
24
42
 
25
- if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
26
- if (load<u16>(srcStart) != BRACE_LEFT) throw new Error("Expected '{' at start of object at position " + (srcEnd - srcStart).toString());
27
- if (load<u16>(srcEnd - 2) != BRACE_RIGHT) throw new Error("Expected '}' at end of object at position " + (srcEnd - srcStart).toString());
43
+ if (srcStart - srcEnd == 0)
44
+ throw new Error("Input string had zero length or was all whitespace");
45
+ if (load<u16>(srcStart) != BRACE_LEFT)
46
+ throw new Error(
47
+ "Expected '{' at start of object at position " +
48
+ (srcEnd - srcStart).toString(),
49
+ );
50
+ if (load<u16>(srcEnd - 2) != BRACE_RIGHT)
51
+ throw new Error(
52
+ "Expected '}' at end of object at position " +
53
+ (srcEnd - srcStart).toString(),
54
+ );
28
55
 
29
56
  srcStart += 2;
30
57
  while (srcStart < srcEnd) {
@@ -37,7 +64,11 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
37
64
  // console.log("Key: " + ptrToStr(lastIndex, srcStart));
38
65
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart + 2)));
39
66
  while (isSpace((code = load<u16>((srcStart += 2))))) {}
40
- if (code !== COLON) throw new Error("Expected ':' after key at position " + (srcEnd - srcStart).toString());
67
+ if (code !== COLON)
68
+ throw new Error(
69
+ "Expected ':' after key at position " +
70
+ (srcEnd - srcStart).toString(),
71
+ );
41
72
  isKey = false;
42
73
  } else {
43
74
  // console.log("Got key start");
@@ -51,9 +82,13 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
51
82
  if (code == QUOTE) {
52
83
  lastIndex = srcStart;
53
84
  srcStart = scanStringEnd(srcStart, srcEnd);
54
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
85
+ if (srcStart >= srcEnd)
86
+ throw new Error("Unterminated string in JSON object");
55
87
  // @ts-ignore: type
56
- out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
88
+ out.set(
89
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
90
+ JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2),
91
+ );
57
92
  srcStart += 2;
58
93
  keyStart = 0;
59
94
  continue;
@@ -65,7 +100,10 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
65
100
  if (code == COMMA || code == BRACE_RIGHT || isSpace(code)) {
66
101
  // console.log("Value (number): " + ptrToStr(lastIndex, srcStart));
67
102
  // @ts-ignore: type
68
- out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart));
103
+ out.set(
104
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
105
+ JSON.__deserialize<valueof<T>>(lastIndex, srcStart),
106
+ );
69
107
  // while (isSpace(load<u16>((srcStart += 2)))) {
70
108
  // /* empty */
71
109
  // }
@@ -84,12 +122,16 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
84
122
  const code = load<u16>(srcStart);
85
123
  if (code == QUOTE) {
86
124
  srcStart = scanStringEnd(srcStart, srcEnd);
87
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
125
+ if (srcStart >= srcEnd)
126
+ throw new Error("Unterminated string in JSON object");
88
127
  } else if (code == BRACE_RIGHT) {
89
128
  if (--depth == 0) {
90
129
  // console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
91
130
  // @ts-ignore: type
92
- out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
131
+ out.set(
132
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
133
+ JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)),
134
+ );
93
135
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
94
136
  keyStart = 0;
95
137
  // while (isSpace(load<u16>(srcStart))) {
@@ -108,12 +150,16 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
108
150
  const code = load<u16>(srcStart);
109
151
  if (code == QUOTE) {
110
152
  srcStart = scanStringEnd(srcStart, srcEnd);
111
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
153
+ if (srcStart >= srcEnd)
154
+ throw new Error("Unterminated string in JSON object");
112
155
  } else if (code == BRACKET_RIGHT) {
113
156
  if (--depth == 0) {
114
157
  // console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
115
158
  // @ts-ignore: type
116
- out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
159
+ out.set(
160
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
161
+ JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)),
162
+ );
117
163
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
118
164
  keyStart = 0;
119
165
  // while (isSpace(load<u16>((srcStart += 2)))) {
@@ -128,7 +174,10 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
128
174
  if (load<u64>(srcStart) == 28429475166421108) {
129
175
  // console.log("Value (bool): " + ptrToStr(srcStart, srcStart + 8));
130
176
  // @ts-ignore: type
131
- out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
177
+ out.set(
178
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
179
+ JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)),
180
+ );
132
181
  // while (isSpace(load<u16>((srcStart += 2)))) {
133
182
  // /* empty */
134
183
  // }
@@ -140,7 +189,10 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
140
189
  if (load<u64>(srcStart, 2) == 28429466576093281) {
141
190
  // console.log("Value (bool): " + ptrToStr(srcStart, srcStart + 10));
142
191
  // @ts-ignore: type
143
- out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 10)));
192
+ out.set(
193
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
194
+ JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 10)),
195
+ );
144
196
  // while (isSpace(load<u16>((srcStart += 2)))) {
145
197
  // /* empty */
146
198
  // }
@@ -152,7 +204,10 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
152
204
  if (load<u64>(srcStart) == 30399761348886638) {
153
205
  // console.log("Value (null): " + ptrToStr(srcStart, srcStart + 8));
154
206
  // @ts-ignore: type
155
- out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
207
+ out.set(
208
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
209
+ JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)),
210
+ );
156
211
  // while (isSpace(load<u16>((srcStart += 2)))) {
157
212
  /* empty */
158
213
  // }
@@ -163,7 +218,12 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
163
218
  } else if (isSpace(code)) {
164
219
  srcStart += 2;
165
220
  } else {
166
- throw new Error("Unexpected character in JSON object '" + String.fromCharCode(code) + "' at position " + (srcEnd - srcStart).toString());
221
+ throw new Error(
222
+ "Unexpected character in JSON object '" +
223
+ String.fromCharCode(code) +
224
+ "' at position " +
225
+ (srcEnd - srcStart).toString(),
226
+ );
167
227
  }
168
228
  }
169
229
  }
@@ -171,10 +231,15 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
171
231
  }
172
232
 
173
233
 
174
- @inline export function deserializeMapInto<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, out: T): usize {
234
+ @inline export function deserializeMapInto<T extends Map<any, any>>(
235
+ srcStart: usize,
236
+ srcEnd: usize,
237
+ out: T,
238
+ ): usize {
175
239
  changetype<nonnull<T>>(out).clear();
176
240
 
177
- if (srcStart >= srcEnd || load<u16>(srcStart) != BRACE_LEFT) throw new Error("Failed to parse JSON!");
241
+ if (srcStart >= srcEnd || load<u16>(srcStart) != BRACE_LEFT)
242
+ throw new Error("Failed to parse JSON!");
178
243
  srcStart += 2;
179
244
  if (srcStart >= srcEnd) throw new Error("Failed to parse JSON!");
180
245
  if (load<u16>(srcStart) == BRACE_RIGHT) return srcStart + 2;
@@ -194,7 +259,10 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
194
259
  if (!valueEnd || valueEnd <= srcStart) break;
195
260
 
196
261
  // @ts-ignore: type
197
- changetype<nonnull<T>>(out).set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, valueEnd));
262
+ changetype<nonnull<T>>(out).set(
263
+ deserializeMapKey<indexof<T>>(keyStart, keyEnd),
264
+ JSON.__deserialize<valueof<T>>(srcStart, valueEnd),
265
+ );
198
266
  srcStart = valueEnd;
199
267
 
200
268
  if (srcStart >= srcEnd) break;
@@ -211,7 +279,12 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
211
279
  }
212
280
 
213
281
 
214
- @inline export function deserializeMapField<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
282
+ @inline export function deserializeMapField<T extends Map<any, any>>(
283
+ srcStart: usize,
284
+ srcEnd: usize,
285
+ dstObj: usize,
286
+ dstOffset: usize = 0,
287
+ ): usize {
215
288
  let out = load<T>(dstObj, dstOffset);
216
289
  if (!changetype<usize>(out)) {
217
290
  out = changetype<T>(instantiate<T>());