json-as 1.4.0 → 1.5.0

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 (86) hide show
  1. package/CHANGELOG.md +50 -29
  2. package/README.md +84 -33
  3. package/assembly/custom/chars.ts +39 -78
  4. package/assembly/deserialize/index/arbitrary.ts +26 -8
  5. package/assembly/deserialize/index/float.ts +2 -4
  6. package/assembly/deserialize/index/integer.ts +2 -4
  7. package/assembly/deserialize/index/object.ts +6 -1
  8. package/assembly/deserialize/index/string.ts +2 -7
  9. package/assembly/deserialize/index/unsigned.ts +2 -4
  10. package/assembly/deserialize/naive/array/integer.ts +1 -1
  11. package/assembly/deserialize/naive/array/map.ts +1 -1
  12. package/assembly/deserialize/naive/array/object.ts +1 -1
  13. package/assembly/deserialize/naive/array/struct.ts +19 -1
  14. package/assembly/deserialize/naive/bool.ts +1 -5
  15. package/assembly/deserialize/naive/date.ts +1 -2
  16. package/assembly/deserialize/naive/float.ts +2 -7
  17. package/assembly/deserialize/naive/integer.ts +1 -2
  18. package/assembly/deserialize/naive/map.ts +5 -6
  19. package/assembly/deserialize/naive/object.ts +151 -13
  20. package/assembly/deserialize/naive/raw.ts +1 -5
  21. package/assembly/deserialize/naive/set.ts +2 -4
  22. package/assembly/deserialize/naive/staticarray.ts +1 -2
  23. package/assembly/deserialize/naive/string.ts +6 -9
  24. package/assembly/deserialize/naive/unsigned.ts +1 -2
  25. package/assembly/deserialize/simd/array/integer.ts +2 -7
  26. package/assembly/deserialize/simd/float.ts +3 -5
  27. package/assembly/deserialize/simd/integer.ts +2 -7
  28. package/assembly/deserialize/simd/string.ts +5 -22
  29. package/assembly/deserialize/swar/array/arbitrary.ts +1 -2
  30. package/assembly/deserialize/swar/array/array.ts +1 -2
  31. package/assembly/deserialize/swar/array/bool.ts +1 -2
  32. package/assembly/deserialize/swar/array/box.ts +1 -2
  33. package/assembly/deserialize/swar/array/float.ts +6 -18
  34. package/assembly/deserialize/swar/array/generic.ts +1 -2
  35. package/assembly/deserialize/swar/array/integer.ts +7 -16
  36. package/assembly/deserialize/swar/array/map.ts +1 -2
  37. package/assembly/deserialize/swar/array/object.ts +1 -2
  38. package/assembly/deserialize/swar/array/raw.ts +1 -2
  39. package/assembly/deserialize/swar/array/shared.ts +6 -13
  40. package/assembly/deserialize/swar/array/string.ts +3 -8
  41. package/assembly/deserialize/swar/array/struct.ts +2 -8
  42. package/assembly/deserialize/swar/array.ts +1 -3
  43. package/assembly/deserialize/swar/float.ts +4 -9
  44. package/assembly/deserialize/swar/integer.ts +2 -7
  45. package/assembly/deserialize/swar/string.ts +13 -15
  46. package/assembly/deserialize/swar/typedarray.ts +4 -4
  47. package/assembly/index.d.ts +29 -24
  48. package/assembly/index.ts +1362 -246
  49. package/assembly/serialize/index/arbitrary.ts +70 -4
  50. package/assembly/serialize/index/jsonarray.ts +51 -0
  51. package/assembly/serialize/index/object.ts +25 -3
  52. package/assembly/serialize/index/string.ts +1 -2
  53. package/assembly/serialize/index/typedarray.ts +1 -2
  54. package/assembly/serialize/index.ts +1 -0
  55. package/assembly/serialize/naive/array.ts +23 -34
  56. package/assembly/serialize/naive/bool.ts +0 -1
  57. package/assembly/serialize/naive/float.ts +16 -25
  58. package/assembly/serialize/naive/integer.ts +1 -5
  59. package/assembly/serialize/naive/raw.ts +1 -2
  60. package/assembly/serialize/naive/set.ts +0 -4
  61. package/assembly/serialize/naive/staticarray.ts +0 -5
  62. package/assembly/serialize/naive/string.ts +2 -5
  63. package/assembly/serialize/naive/typedarray.ts +0 -6
  64. package/assembly/serialize/simd/string.ts +1 -3
  65. package/assembly/serialize/swar/string.ts +1 -2
  66. package/assembly/util/atoi-fast.ts +4 -14
  67. package/assembly/util/bytes.ts +1 -2
  68. package/assembly/util/idofd.ts +1 -2
  69. package/assembly/util/isSpace.ts +1 -2
  70. package/assembly/util/itoa-fast.ts +6 -9
  71. package/assembly/util/nextPowerOf2.ts +1 -2
  72. package/assembly/util/parsefloat-fast.ts +3 -5
  73. package/assembly/util/ptrToStr.ts +1 -2
  74. package/assembly/util/scanValueEndSimd.ts +54 -16
  75. package/assembly/util/scanValueEndSwar.ts +67 -25
  76. package/assembly/util/scientific.ts +5 -8
  77. package/assembly/util/snp.ts +1 -2
  78. package/assembly/util/swar-int.ts +5 -10
  79. package/assembly/util/swar.ts +2 -4
  80. package/lib/as-bs.ts +23 -45
  81. package/package.json +14 -7
  82. package/transform/lib/index.js +108 -64
  83. package/transform/lib/types.d.ts +2 -1
  84. package/transform/lib/types.js +3 -0
  85. package/assembly/util/dragonbox-cache.ts +0 -445
  86. package/assembly/util/dragonbox.ts +0 -652
@@ -8,12 +8,12 @@ declare class JSONConfig {
8
8
  * access; untouched fields pass their original bytes straight through on
9
9
  * serialize.
10
10
  *
11
- * - `"none"` *(default)* every field is parsed eagerly, up-front.
12
- * - `"auto"` the transform defers fields whose estimated parse cost is high
11
+ * - `"none"` *(default)* - every field is parsed eagerly, up-front.
12
+ * - `"auto"` - the transform defers fields whose estimated parse cost is high
13
13
  * (nested structs, arrays, maps, long strings) and keeps cheap fields
14
14
  * (primitives, enums, `Date`) eager. Use `@eager` to force a field back to
15
15
  * eager, or `@lazy` to force one on.
16
- * - `"all"` every field is deferred. Best for proxy / filter / forward
16
+ * - `"all"` - every field is deferred. Best for proxy / filter / forward
17
17
  * workloads over large payloads; note it generates a getter and a serialize
18
18
  * branch per field, so module size grows with very wide schemas.
19
19
  *
@@ -50,9 +50,9 @@ declare class JSONConfig {
50
50
  * JSON.parse<Vec3>('{"x":1,"y":2,"z":3}');
51
51
  * ```
52
52
  */
53
- // @ts-ignore: type
54
53
  declare function json(config?: JSONConfig): Function;
55
-
54
+ // @ts-expect-error: type
55
+ declare function json(..._): void;
56
56
  /**
57
57
  * Alias for {@link json}. `@serializable` and `@json` are interchangeable.
58
58
  */
@@ -96,7 +96,7 @@ declare function omit(..._): void;
96
96
  * The field is still parsed normally; the condition only affects serialization.
97
97
  *
98
98
  * @param condition - A predicate that receives the **instance** and returns
99
- * `true` to omit the field `(self: T) => boolean` or a string expression
99
+ * `true` to omit the field - `(self: T) => boolean` - or a string expression
100
100
  * evaluated in the instance's scope (reference fields via `this`).
101
101
  *
102
102
  * @example
@@ -124,13 +124,31 @@ declare function omitif(condition: string | ((self: any) => boolean)): Function;
124
124
  * ```
125
125
  */
126
126
  // @ts-ignore: type
127
- declare function omitnull(..._): Function;
127
+ declare function omitnull(..._): void;
128
+
129
+ /**
130
+ * Field decorator that marks a property as optional for deserialization: the
131
+ * key may be absent from (or appear anywhere in) the input, and the field keeps
132
+ * its default. Unlike `@omitnull`/`@omitif` it does NOT omit the field on
133
+ * serialize and has no nullability requirement - it only opts the field into
134
+ * the order-tolerant fast path.
135
+ *
136
+ * @example
137
+ * ```ts
138
+ * @json
139
+ * class Tweet {
140
+ * @optional retweeted_status: Retweet | null = null; // key may be absent
141
+ * }
142
+ * ```
143
+ */
144
+ // @ts-ignore: type
145
+ declare function optional(..._): void;
128
146
 
129
147
  /**
130
148
  * Field decorator that defers parsing of a property until it is first read
131
149
  * (on-demand / lazy parsing). The raw JSON slice is stored at parse time and
132
150
  * materialized into the field's type on first access, then cached; an untouched
133
- * field round-trips by copying its original bytes never re-parsed or
151
+ * field round-trips by copying its original bytes - never re-parsed or
134
152
  * re-serialized.
135
153
  *
136
154
  * Equivalent to the `JSON.Lazy<T>` type-wrapper form. Pays off for fields you
@@ -170,7 +188,7 @@ declare function eager(..._): void;
170
188
  * the generated serialization. The method receives the instance and must return
171
189
  * a **valid JSON string**. Pair with {@link deserializer}.
172
190
  *
173
- * @param shape - Optional JSON value shape the output conforms to one of
191
+ * @param shape - Optional JSON value shape the output conforms to - one of
174
192
  * `"any"` (default), `"string"`, `"number"`, `"object"`, `"array"`,
175
193
  * `"boolean"`, or `"null"`.
176
194
  *
@@ -212,11 +230,11 @@ declare function serializer(
212
230
  /**
213
231
  * Method decorator marking a member as the class's custom deserializer,
214
232
  * replacing the generated deserialization. The method receives the raw JSON
215
- * string and must return a **new** instance never assume an existing
233
+ * string and must return a **new** instance - never assume an existing
216
234
  * destination is reused. Pair with {@link serializer} (see it for a full,
217
235
  * round-tripping example).
218
236
  *
219
- * @param shape - Optional JSON value shape the input conforms to one of
237
+ * @param shape - Optional JSON value shape the input conforms to - one of
220
238
  * `"any"` (default), `"string"`, `"number"`, `"object"`, `"array"`,
221
239
  * `"boolean"`, or `"null"`.
222
240
  *
@@ -235,19 +253,6 @@ declare function deserializer(
235
253
  shape?: "any" | "string" | "number" | "object" | "array" | "boolean" | "null",
236
254
  ): any;
237
255
 
238
- /**
239
- * Parsing/serialization strategy selected at build time via the `JSON_MODE`
240
- * environment variable and exposed as {@link JSON_MODE}.
241
- */
242
- declare const enum JSONMode {
243
- /** Scalar/word-at-a-time (SWAR) scanning. The default; no extra flags. */
244
- SWAR = 0,
245
- /** 128-bit SIMD scanning. Fastest on larger payloads; needs `--enable simd`. */
246
- SIMD = 1,
247
- /** Straightforward byte-at-a-time scanning. Smallest code, slowest. */
248
- NAIVE = 2,
249
- }
250
-
251
256
  /**
252
257
  * The active {@link JSONMode}, injected by the transform from the `JSON_MODE`
253
258
  * build-time environment variable (default `SWAR`). Set it on the `asc`