json-as 0.9.29 → 1.0.0-alpha.1

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/.github/workflows/nodejs.yml +0 -3
  2. package/.prettierrc.json +3 -2
  3. package/CHANGELOG +13 -0
  4. package/LICENSE +1 -1
  5. package/README.md +22 -7
  6. package/as-test.config.json +1 -1
  7. package/asconfig.json +2 -2
  8. package/assembly/__benches__/misc.bench.ts +17 -32
  9. package/assembly/__tests__/bool.spec.ts +1 -1
  10. package/assembly/__tests__/simd/string.spec.ts +32 -0
  11. package/assembly/custom/memory.ts +25 -0
  12. package/assembly/custom/util.ts +14 -92
  13. package/assembly/deserialize/simd/string.ts +103 -0
  14. package/assembly/deserialize/simple/arbitrary.ts +17 -0
  15. package/assembly/deserialize/simple/array/arbitrary.ts +113 -0
  16. package/assembly/deserialize/simple/array/array.ts +18 -0
  17. package/assembly/deserialize/simple/array/bool.ts +17 -0
  18. package/assembly/deserialize/simple/array/float.ts +28 -0
  19. package/assembly/deserialize/simple/array/integer.ts +27 -0
  20. package/assembly/deserialize/simple/array/map.ts +18 -0
  21. package/assembly/deserialize/simple/array/object.ts +18 -0
  22. package/assembly/deserialize/simple/array/string.ts +22 -0
  23. package/assembly/deserialize/simple/array.ts +48 -0
  24. package/assembly/deserialize/simple/bool.ts +9 -0
  25. package/assembly/deserialize/simple/date.ts +11 -0
  26. package/assembly/deserialize/simple/float.ts +10 -0
  27. package/assembly/deserialize/simple/integer.ts +5 -0
  28. package/assembly/deserialize/simple/map.ts +154 -0
  29. package/assembly/deserialize/simple/object.ts +159 -0
  30. package/assembly/deserialize/simple/string.ts +48 -0
  31. package/assembly/globals/tables.ts +417 -0
  32. package/assembly/index.d.ts +9 -13
  33. package/assembly/index.ts +266 -146
  34. package/assembly/serialize/simd/string.ts +176 -0
  35. package/assembly/serialize/simple/arbitrary.ts +36 -0
  36. package/assembly/serialize/simple/array.ts +32 -0
  37. package/assembly/serialize/simple/bool.ts +19 -0
  38. package/assembly/serialize/simple/date.ts +13 -0
  39. package/assembly/serialize/simple/float.ts +7 -0
  40. package/assembly/serialize/simple/integer.ts +7 -0
  41. package/assembly/serialize/simple/map.ts +43 -0
  42. package/assembly/serialize/simple/object.ts +7 -0
  43. package/assembly/serialize/simple/string.ts +48 -0
  44. package/assembly/test.ts +41 -27
  45. package/assembly/tsconfig.json +2 -91
  46. package/assembly/types.ts +0 -0
  47. package/assembly/util/atoi.ts +35 -0
  48. package/assembly/util/bytes.ts +12 -0
  49. package/assembly/util/concat.ts +9 -0
  50. package/assembly/util/getArrayDepth.ts +17 -0
  51. package/assembly/util/index.ts +5 -0
  52. package/assembly/util/isSpace.ts +4 -0
  53. package/assembly/util/nextPowerOf2.ts +4 -0
  54. package/assembly/util/ptrToStr.ts +7 -0
  55. package/assembly/util/snp.ts +69 -0
  56. package/bench.js +5 -5
  57. package/modules/bs/index.ts +167 -0
  58. package/modules/tsconfig.json +8 -0
  59. package/package.json +42 -48
  60. package/transform/lib/builder.js +1353 -0
  61. package/transform/lib/builder.js.map +1 -0
  62. package/transform/lib/index.js +497 -332
  63. package/transform/lib/index.js.map +1 -1
  64. package/transform/lib/index.old.js +404 -0
  65. package/transform/lib/index.old.js.map +1 -0
  66. package/transform/lib/linker.js +18 -0
  67. package/transform/lib/linker.js.map +1 -0
  68. package/transform/lib/types.js +25 -0
  69. package/transform/lib/types.js.map +1 -0
  70. package/transform/lib/util.js +47 -0
  71. package/transform/lib/util.js.map +1 -0
  72. package/transform/lib/visitor.js +529 -446
  73. package/transform/lib/visitor.js.map +1 -0
  74. package/transform/package.json +1 -34
  75. package/transform/src/builder.ts +1371 -0
  76. package/transform/src/index.ts +564 -341
  77. package/transform/src/linker.ts +21 -0
  78. package/transform/src/types.ts +27 -0
  79. package/transform/src/util.ts +56 -0
  80. package/transform/src/visitor.ts +531 -0
  81. package/transform/tsconfig.json +3 -1
  82. package/assembly/__benches__/as-tral.d.ts +0 -1
  83. package/assembly/__tests__/date.spec.ts +0 -12
  84. package/assembly/custom/bs.ts +0 -202
  85. package/assembly/deserialize/array/array.ts +0 -31
  86. package/assembly/deserialize/array/bool.ts +0 -19
  87. package/assembly/deserialize/array/float.ts +0 -24
  88. package/assembly/deserialize/array/integer.ts +0 -24
  89. package/assembly/deserialize/array/map.ts +0 -27
  90. package/assembly/deserialize/array/object.ts +0 -27
  91. package/assembly/deserialize/array/string.ts +0 -29
  92. package/assembly/deserialize/array.ts +0 -46
  93. package/assembly/deserialize/bool.ts +0 -34
  94. package/assembly/deserialize/date.ts +0 -19
  95. package/assembly/deserialize/float.ts +0 -21
  96. package/assembly/deserialize/integer.ts +0 -16
  97. package/assembly/deserialize/map.ts +0 -139
  98. package/assembly/deserialize/object.ts +0 -211
  99. package/assembly/deserialize/string.ts +0 -149
  100. package/assembly/serialize/array.ts +0 -44
  101. package/assembly/serialize/bool.ts +0 -10
  102. package/assembly/serialize/date.ts +0 -4
  103. package/assembly/serialize/float.ts +0 -4
  104. package/assembly/serialize/integer.ts +0 -5
  105. package/assembly/serialize/map.ts +0 -24
  106. package/assembly/serialize/object.ts +0 -13
  107. package/assembly/serialize/string.ts +0 -284
@@ -1,284 +0,0 @@
1
- import { _intTo16, intTo16, unsafeCharCodeAt } from "../custom/util";
2
- import { Sink } from "../custom/sink";
3
-
4
- // function needsEscaping(data: string): bool {
5
- // let len = data.length;
6
-
7
- // // if (len < 16) {
8
- // // while (len--) {
9
- // // const char = load<u16>(changetype<usize>(data) + len);
10
- // // if (char == 34 || char == 92 || char <= 31) {
11
- // // return true;
12
- // // }
13
- // // }
14
- // // return false;
15
- // // }
16
-
17
- // let running = v128.splat<i64>(0);
18
- // //let i = 0;
19
-
20
- // //while (i + 15 < len) {
21
- // let w = v128.load(changetype<usize>(data));
22
- // running = v128.or(running, v128.eq<i16>(w, i16x8.splat(34)));
23
- // running = v128.or(running, v128.eq<i16>(w, i16x8.splat(92)));
24
-
25
- // let subtracted = v128.sub<i16>(w, i8x16.splat(31));
26
- // running = v128.or(running, v128.eq<i16>(subtracted, v128.splat<i64>(0)));
27
- // //i += 16;
28
- // //}
29
-
30
- // return v128.any_true(running);
31
- // }
32
-
33
- // /**
34
- // * A prototype SIMD implementation for string serialization which can only work in 128-byte (or 16 chars with wtf-16).
35
- // *
36
- // * A faster version could perhaps look like the following:
37
- // */
38
- // // @ts-ignore: Decorator
39
- // @inline export function serialize_simd_v1(src: string, dst: usize): void {
40
- // let src_ptr = changetype<usize>(src);
41
- // let dst_ptr = changetype<usize>(dst) + 2;
42
-
43
- // store<u16>(changetype<usize>(dst), 34); /* " */
44
-
45
- // const src_end = src_ptr + u32(src.length << 1);
46
- // const src_end_15 = src_end - 15;
47
-
48
- // while (src_ptr < src_end_15) {
49
- // const currentBlock = v128.load(src_ptr);
50
- // const backslash_indices = i16x8.eq(currentBlock, i16x8.splat(92));
51
- // const quote_indices = i16x8.eq(currentBlock, i16x8.splat(34));
52
- // const concat_indices = v128.or(quote_indices, backslash_indices);
53
-
54
- // const escape_indices = i16x8.lt_u(currentBlock, i16x8.splat(32));
55
-
56
- // if (v128.any_true(v128.or(escape_indices, concat_indices))) {
57
- // const mask = i16x8.bitmask(concat_indices);
58
-
59
- // const anomalies = popcnt(mask);
60
- // const start_index = (clz(mask) & ~1) + 2 // This essentially floors to the nearest even integer
61
- // if (anomalies === 1) {
62
- // memory.copy(dst_ptr, src_ptr, start_index >> 1);
63
- // store<u16>(dst_ptr + start_index, 34);
64
- // memory.copy(dst_ptr + start_index + 2, src_ptr + start_index, (32 - start_index) >> 1)
65
- // }
66
-
67
- // if (v128.any_true(escape_indices)) {
68
-
69
- // }
70
- // dst_ptr += 16;
71
- // src_ptr += 16;
72
- // } else {
73
- // v128.store(dst_ptr, currentBlock);
74
- // src_ptr += 16;
75
- // dst_ptr += 16;
76
- // }
77
- // }
78
- // }
79
-
80
- // const back_slash_reg = i16x8.splat(92); // "\"
81
- // const quote_reg = i16x8.splat(34); // "\""
82
-
83
- // // @ts-ignore: Decorator
84
- // @inline export function serialize_simd_v2(src: string, dst: usize): void {
85
- // let src_ptr = changetype<usize>(src);
86
- // let dst_ptr = changetype<usize>(dst);
87
-
88
- // let i = 0;
89
- // const len = src.length;
90
-
91
- // while (i < len) {
92
- // const block = v128.load16x4_u(src_ptr);
93
- // console.log("block: " + prt(block));
94
- // const backslash_mask = i16x8.eq(block, back_slash_reg);
95
- // const quote_mask = i16x8.eq(block, quote_reg);
96
- // const is_quote_or_backslash = v128.or(quote_mask, backslash_mask);
97
- // console.log("mask: " + prt10(is_quote_or_backslash))
98
-
99
- // // store<v128>(dst_ptr, expanded);
100
- // src_ptr += 8;
101
- // dst_ptr += 16;
102
- // i += 8;
103
- // }
104
- // }
105
-
106
- // function prt(obj: v128): string {
107
- // let out = "";
108
- // out += i16x8.extract_lane_u(obj, 0).toString() + " ";
109
- // out += i16x8.extract_lane_u(obj, 1).toString() + " ";
110
- // out += i16x8.extract_lane_u(obj, 2).toString() + " ";
111
- // out += i16x8.extract_lane_u(obj, 3).toString() + " ";
112
- // out += i16x8.extract_lane_u(obj, 4).toString() + " ";
113
- // out += i16x8.extract_lane_u(obj, 5).toString() + " ";
114
- // out += i16x8.extract_lane_u(obj, 6).toString() + " ";
115
- // out += i16x8.extract_lane_u(obj, 7).toString();
116
- // return out;
117
- // }
118
-
119
- // function prt10(obj: v128): string {
120
- // let out = "";
121
- // out += (i16x8.extract_lane_u(obj, 0) ? "1" : "0") + " ";
122
- // out += (i16x8.extract_lane_u(obj, 1) ? "1" : "0") + " ";
123
- // out += (i16x8.extract_lane_u(obj, 2) ? "1" : "0") + " ";
124
- // out += (i16x8.extract_lane_u(obj, 3) ? "1" : "0") + " ";
125
- // out += (i16x8.extract_lane_u(obj, 4) ? "1" : "0") + " ";
126
- // out += (i16x8.extract_lane_u(obj, 5) ? "1" : "0") + " ";
127
- // out += (i16x8.extract_lane_u(obj, 6) ? "1" : "0") + " ";
128
- // out += i16x8.extract_lane_u(obj, 7) ? "1" : "0";
129
- // return out;
130
- // }
131
-
132
- // function vis(src_ptr: usize, mask: i32): void {
133
- // let chars = "";
134
- // let bits = "";
135
- // for (let i = 0; i < 8; i++) {
136
- // const char = load<u16>(src_ptr + (i << 1));
137
- // const bit = (mask >> i) & 1;
138
- // chars += String.fromCharCode(char) + " ";
139
- // bits += bit.toString() + " ";
140
- // }
141
- // console.log(chars);
142
- // console.log(bits);
143
- // }
144
-
145
- // @ts-ignore: Decorator
146
- @inline export function serializeString(data: string): string {
147
- // if (!needsEscaping(data)) {
148
- // return "\"" + data + "\"";
149
- // }
150
-
151
- if (data.length === 0) {
152
- return '""';
153
- }
154
- let result = Sink.fromString('"');
155
-
156
- let last: i32 = 0;
157
- for (let i = 0; i < data.length; i++) {
158
- const char = unsafeCharCodeAt(<string>data, i);
159
- if (char === 34 || char === 92) {
160
- result.write(<string>data, last, i);
161
- result.writeCodePoint(92);
162
- last = i;
163
- } else if (char < 16) {
164
- result.write(<string>data, last, i);
165
- last = i + 1;
166
- switch (char) {
167
- case 8: {
168
- result.write("\\b");
169
- break;
170
- }
171
- case 9: {
172
- result.write("\\t");
173
- break;
174
- }
175
- case 10: {
176
- result.write("\\n");
177
- break;
178
- }
179
- case 12: {
180
- result.write("\\f");
181
- break;
182
- }
183
- case 13: {
184
- result.write("\\r");
185
- break;
186
- }
187
- default: {
188
- // all chars 0-31 must be encoded as a four digit unicode escape sequence
189
- // \u0000 to \u000f handled here
190
- result.write("\\u000");
191
- result.write(char.toString(16));
192
- break;
193
- }
194
- }
195
- } else if (char < 32) {
196
- result.write(<string>data, last, i);
197
- last = i + 1;
198
- // all chars 0-31 must be encoded as a four digit unicode escape sequence
199
- // \u0010 to \u001f handled here
200
- result.write("\\u00");
201
- result.write(char.toString(16));
202
- }
203
- }
204
- result.write(<string>data, last);
205
- result.writeCodePoint(34);
206
- return result.toString();
207
- }
208
-
209
- // // @ts-ignore: Decorator valid here
210
- // @inline export function serializeString_BS(data: string): void {
211
- // const len = data.length << 1;
212
- // if (len === 0) {
213
- // bs.write_32(2228258); /* "" */
214
- // return;
215
- // }
216
-
217
- // bs.write_16(QUOTE);
218
-
219
- // let last: i32 = 0;
220
- // for (let i = 0; i < len; i += 2) {
221
- // const char = load<u16>(changetype<usize>(data) + i);
222
- // if (char < 35) {
223
- // if (char === QUOTE) {
224
- // bs.write_s_se(<string>data, last, i);
225
- // bs.write_16(BACK_SLASH);
226
- // last = i;
227
- // continue;
228
- // } else if (char < 32) {
229
- // if (char < 16) {
230
- // bs.write_s_se(<string>data, last, i);
231
- // last = i + 2;
232
- // switch (char) {
233
- // case BACKSPACE: {
234
- // bs.write_32(6422620);
235
- // continue;
236
- // }
237
- // case TAB: {
238
- // bs.write_32(7602268);
239
- // continue;
240
- // }
241
- // case NEW_LINE: {
242
- // bs.write_32(7209052);
243
- // continue;
244
- // }
245
- // case FORM_FEED: {
246
- // bs.write_32(6684764);
247
- // continue;
248
- // }
249
- // case CARRIAGE_RETURN: {
250
- // bs.write_32(7471196);
251
- // continue;
252
- // }
253
- // default: {
254
- // // all chars 0-31 must be encoded as a four digit unicode escape sequence
255
- // // \u0000 to \u000f handled here
256
- // bs.write_64(13511005048209500) /* \\u00 */
257
- // bs.write_32((_intTo16(char) << 16) | 48); /* 0_ */
258
- // continue;
259
- // }
260
- // }
261
- // } else {
262
- // bs.write_s_se(<string>data, last, i);
263
- // last = i + 2;
264
- // // all chars 0-31 must be encoded as a four digit unicode escape sequence
265
- // // \u0010 to \u001f handled here
266
- // bs.write_64(13511005048209500) /* \\u00 */
267
- // bs.write_32((intTo16(char) << 16) | 48); /* 0_ */
268
- // }
269
- // }
270
- // } else if (char === BACK_SLASH) {
271
- // bs.write_s_se(<string>data, last, i);
272
- // bs.write_16(BACK_SLASH);
273
- // last = i;
274
- // }
275
- // }
276
-
277
- // if (last === 0) {
278
- // bs.write_s(data);
279
- // bs.write_16(QUOTE)
280
- // } else {
281
- // bs.write_s_se(<string>data, last, changetype<OBJECT>(changetype<usize>(data) - TOTAL_OVERHEAD).rtSize);
282
- // bs.write_16(QUOTE);
283
- // }
284
- // }