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.
- package/CHANGELOG.md +50 -29
- package/README.md +84 -33
- package/assembly/custom/chars.ts +39 -78
- package/assembly/deserialize/index/arbitrary.ts +26 -8
- package/assembly/deserialize/index/float.ts +2 -4
- package/assembly/deserialize/index/integer.ts +2 -4
- package/assembly/deserialize/index/object.ts +6 -1
- package/assembly/deserialize/index/string.ts +2 -7
- package/assembly/deserialize/index/unsigned.ts +2 -4
- package/assembly/deserialize/naive/array/integer.ts +1 -1
- package/assembly/deserialize/naive/array/map.ts +1 -1
- package/assembly/deserialize/naive/array/object.ts +1 -1
- package/assembly/deserialize/naive/array/struct.ts +19 -1
- package/assembly/deserialize/naive/bool.ts +1 -5
- package/assembly/deserialize/naive/date.ts +1 -2
- package/assembly/deserialize/naive/float.ts +2 -7
- package/assembly/deserialize/naive/integer.ts +1 -2
- package/assembly/deserialize/naive/map.ts +5 -6
- package/assembly/deserialize/naive/object.ts +151 -13
- package/assembly/deserialize/naive/raw.ts +1 -5
- package/assembly/deserialize/naive/set.ts +2 -4
- package/assembly/deserialize/naive/staticarray.ts +1 -2
- package/assembly/deserialize/naive/string.ts +6 -9
- package/assembly/deserialize/naive/unsigned.ts +1 -2
- package/assembly/deserialize/simd/array/integer.ts +2 -7
- package/assembly/deserialize/simd/float.ts +3 -5
- package/assembly/deserialize/simd/integer.ts +2 -7
- package/assembly/deserialize/simd/string.ts +5 -22
- package/assembly/deserialize/swar/array/arbitrary.ts +1 -2
- package/assembly/deserialize/swar/array/array.ts +1 -2
- package/assembly/deserialize/swar/array/bool.ts +1 -2
- package/assembly/deserialize/swar/array/box.ts +1 -2
- package/assembly/deserialize/swar/array/float.ts +6 -18
- package/assembly/deserialize/swar/array/generic.ts +1 -2
- package/assembly/deserialize/swar/array/integer.ts +7 -16
- package/assembly/deserialize/swar/array/map.ts +1 -2
- package/assembly/deserialize/swar/array/object.ts +1 -2
- package/assembly/deserialize/swar/array/raw.ts +1 -2
- package/assembly/deserialize/swar/array/shared.ts +6 -13
- package/assembly/deserialize/swar/array/string.ts +3 -8
- package/assembly/deserialize/swar/array/struct.ts +2 -8
- package/assembly/deserialize/swar/array.ts +1 -3
- package/assembly/deserialize/swar/float.ts +4 -9
- package/assembly/deserialize/swar/integer.ts +2 -7
- package/assembly/deserialize/swar/string.ts +13 -15
- package/assembly/deserialize/swar/typedarray.ts +4 -4
- package/assembly/index.d.ts +29 -24
- package/assembly/index.ts +1362 -246
- package/assembly/serialize/index/arbitrary.ts +70 -4
- package/assembly/serialize/index/jsonarray.ts +51 -0
- package/assembly/serialize/index/object.ts +25 -3
- package/assembly/serialize/index/string.ts +1 -2
- package/assembly/serialize/index/typedarray.ts +1 -2
- package/assembly/serialize/index.ts +1 -0
- package/assembly/serialize/naive/array.ts +23 -34
- package/assembly/serialize/naive/bool.ts +0 -1
- package/assembly/serialize/naive/float.ts +16 -25
- package/assembly/serialize/naive/integer.ts +1 -5
- package/assembly/serialize/naive/raw.ts +1 -2
- package/assembly/serialize/naive/set.ts +0 -4
- package/assembly/serialize/naive/staticarray.ts +0 -5
- package/assembly/serialize/naive/string.ts +2 -5
- package/assembly/serialize/naive/typedarray.ts +0 -6
- package/assembly/serialize/simd/string.ts +1 -3
- package/assembly/serialize/swar/string.ts +1 -2
- package/assembly/util/atoi-fast.ts +4 -14
- package/assembly/util/bytes.ts +1 -2
- package/assembly/util/idofd.ts +1 -2
- package/assembly/util/isSpace.ts +1 -2
- package/assembly/util/itoa-fast.ts +6 -9
- package/assembly/util/nextPowerOf2.ts +1 -2
- package/assembly/util/parsefloat-fast.ts +3 -5
- package/assembly/util/ptrToStr.ts +1 -2
- package/assembly/util/scanValueEndSimd.ts +54 -16
- package/assembly/util/scanValueEndSwar.ts +67 -25
- package/assembly/util/scientific.ts +5 -8
- package/assembly/util/snp.ts +1 -2
- package/assembly/util/swar-int.ts +5 -10
- package/assembly/util/swar.ts +2 -4
- package/lib/as-bs.ts +23 -45
- package/package.json +14 -7
- package/transform/lib/index.js +108 -64
- package/transform/lib/types.d.ts +2 -1
- package/transform/lib/types.js +3 -0
- package/assembly/util/dragonbox-cache.ts +0 -445
- package/assembly/util/dragonbox.ts +0 -652
package/assembly/index.d.ts
CHANGED
|
@@ -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)*
|
|
12
|
-
* - `"auto"`
|
|
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"`
|
|
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
|
|
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(..._):
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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`
|