@zudojs/serialization 0.0.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.
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/serializerEnvelope/envelope.core.d.ts +53 -0
- package/dist/serializerEnvelope/envelope.core.d.ts.map +1 -0
- package/dist/serializerEnvelope/envelope.core.js +68 -0
- package/dist/serializerEnvelope/envelope.core.js.map +1 -0
- package/dist/serializerEnvelope/index.d.ts +7 -0
- package/dist/serializerEnvelope/index.d.ts.map +1 -0
- package/dist/serializerEnvelope/index.js +7 -0
- package/dist/serializerEnvelope/index.js.map +1 -0
- package/dist/serializerJson/index.d.ts +8 -0
- package/dist/serializerJson/index.d.ts.map +1 -0
- package/dist/serializerJson/index.js +8 -0
- package/dist/serializerJson/index.js.map +1 -0
- package/dist/serializerJson/jsonSerializer.core.d.ts +26 -0
- package/dist/serializerJson/jsonSerializer.core.d.ts.map +1 -0
- package/dist/serializerJson/jsonSerializer.core.js +155 -0
- package/dist/serializerJson/jsonSerializer.core.js.map +1 -0
- package/dist/serializerRegistry/index.d.ts +9 -0
- package/dist/serializerRegistry/index.d.ts.map +1 -0
- package/dist/serializerRegistry/index.js +9 -0
- package/dist/serializerRegistry/index.js.map +1 -0
- package/dist/serializerRegistry/serializerRegistry.core.d.ts +31 -0
- package/dist/serializerRegistry/serializerRegistry.core.d.ts.map +1 -0
- package/dist/serializerRegistry/serializerRegistry.core.js +48 -0
- package/dist/serializerRegistry/serializerRegistry.core.js.map +1 -0
- package/dist/serializerRegistry/serializerRegistry.factory.d.ts +30 -0
- package/dist/serializerRegistry/serializerRegistry.factory.d.ts.map +1 -0
- package/dist/serializerRegistry/serializerRegistry.factory.js +39 -0
- package/dist/serializerRegistry/serializerRegistry.factory.js.map +1 -0
- package/dist/serializerTransforms/bigint.transformer.d.ts +10 -0
- package/dist/serializerTransforms/bigint.transformer.d.ts.map +1 -0
- package/dist/serializerTransforms/bigint.transformer.js +35 -0
- package/dist/serializerTransforms/bigint.transformer.js.map +1 -0
- package/dist/serializerTransforms/date.transformer.d.ts +10 -0
- package/dist/serializerTransforms/date.transformer.d.ts.map +1 -0
- package/dist/serializerTransforms/date.transformer.js +34 -0
- package/dist/serializerTransforms/date.transformer.js.map +1 -0
- package/dist/serializerTransforms/index.d.ts +11 -0
- package/dist/serializerTransforms/index.d.ts.map +1 -0
- package/dist/serializerTransforms/index.js +11 -0
- package/dist/serializerTransforms/index.js.map +1 -0
- package/dist/serializerTransforms/map.transformer.d.ts +10 -0
- package/dist/serializerTransforms/map.transformer.d.ts.map +1 -0
- package/dist/serializerTransforms/map.transformer.js +34 -0
- package/dist/serializerTransforms/map.transformer.js.map +1 -0
- package/dist/serializerTransforms/set.transformer.d.ts +10 -0
- package/dist/serializerTransforms/set.transformer.d.ts.map +1 -0
- package/dist/serializerTransforms/set.transformer.js +30 -0
- package/dist/serializerTransforms/set.transformer.js.map +1 -0
- package/dist/serializerTransforms/transformerRegistry.core.d.ts +33 -0
- package/dist/serializerTransforms/transformerRegistry.core.d.ts.map +1 -0
- package/dist/serializerTransforms/transformerRegistry.core.js +60 -0
- package/dist/serializerTransforms/transformerRegistry.core.js.map +1 -0
- package/dist/serializerTransformsExt/buffer.transformer.d.ts +10 -0
- package/dist/serializerTransformsExt/buffer.transformer.d.ts.map +1 -0
- package/dist/serializerTransformsExt/buffer.transformer.js +32 -0
- package/dist/serializerTransformsExt/buffer.transformer.js.map +1 -0
- package/dist/serializerTransformsExt/encoding.utils.d.ts +14 -0
- package/dist/serializerTransformsExt/encoding.utils.d.ts.map +1 -0
- package/dist/serializerTransformsExt/encoding.utils.js +43 -0
- package/dist/serializerTransformsExt/encoding.utils.js.map +1 -0
- package/dist/serializerTransformsExt/error.transformer.d.ts +10 -0
- package/dist/serializerTransformsExt/error.transformer.d.ts.map +1 -0
- package/dist/serializerTransformsExt/error.transformer.js +49 -0
- package/dist/serializerTransformsExt/error.transformer.js.map +1 -0
- package/dist/serializerTransformsExt/index.d.ts +10 -0
- package/dist/serializerTransformsExt/index.d.ts.map +1 -0
- package/dist/serializerTransformsExt/index.js +10 -0
- package/dist/serializerTransformsExt/index.js.map +1 -0
- package/dist/serializerTypes/index.d.ts +7 -0
- package/dist/serializerTypes/index.d.ts.map +1 -0
- package/dist/serializerTypes/index.js +7 -0
- package/dist/serializerTypes/index.js.map +1 -0
- package/dist/serializerTypes/serializer.type.d.ts +83 -0
- package/dist/serializerTypes/serializer.type.d.ts.map +1 -0
- package/dist/serializerTypes/serializer.type.js +9 -0
- package/dist/serializerTypes/serializer.type.js.map +1 -0
- package/package.json +53 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Zudojs Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# @zudojs/serialization
|
|
2
|
+
|
|
3
|
+
Data translation layer with JSON serializer, type transformers, envelopes, and registry for Zudojs applications.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @zudojs/serialization
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { createSerializer } from "@zudojs/serialization";
|
|
15
|
+
|
|
16
|
+
const serializer = createSerializer({
|
|
17
|
+
format: "json",
|
|
18
|
+
transformers: [dateTransformer, bigIntTransformer],
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const json = serializer.stringify({ id: "123", createdAt: new Date() });
|
|
22
|
+
const obj = serializer.parse(json);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Features
|
|
26
|
+
|
|
27
|
+
- JSON serialization with type transformers
|
|
28
|
+
- Envelope pattern for API responses
|
|
29
|
+
- Transformer registry
|
|
30
|
+
- Support for BigInt, Date, Buffer, and custom types
|
|
31
|
+
- Circular reference detection
|
|
32
|
+
|
|
33
|
+
## Use Cases
|
|
34
|
+
|
|
35
|
+
- API response serialization
|
|
36
|
+
- Event payload serialization
|
|
37
|
+
- Cache serialization
|
|
38
|
+
- Cross-service data transfer
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization
|
|
3
|
+
*
|
|
4
|
+
* Data translation layer for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides JSON serialization with type preservation, a transformer
|
|
7
|
+
* system for custom types, serialization envelopes for cross-service
|
|
8
|
+
* communication, and a registry for managing multiple serializers.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { createSerializer, JSONSerializer } from "@zudojs/serialization";
|
|
13
|
+
*
|
|
14
|
+
* // Fast path (default) — nearly zero overhead over native JSON
|
|
15
|
+
* const serializer = createSerializer("json");
|
|
16
|
+
* const json = serializer.serialize({ hello: "world" });
|
|
17
|
+
* const data = serializer.deserialize(json);
|
|
18
|
+
*
|
|
19
|
+
* // Advanced path — type preservation for Date, BigInt, Map, Set, etc.
|
|
20
|
+
* const advanced = new JSONSerializer();
|
|
21
|
+
* const result = advanced.serialize(
|
|
22
|
+
* { createdAt: new Date(), amount: 100n },
|
|
23
|
+
* { preserveTypes: true },
|
|
24
|
+
* );
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export type { SerializationFormat, SerializedValue, SerializeOptions, DeserializeOptions, SerializationMetadata, SerializedEnvelope, Serializer, AsyncSerializer, TypeTransformer, UndefinedStrategy, } from "./serializerTypes/index.js";
|
|
28
|
+
export { JSONSerializer } from "./serializerJson/index.js";
|
|
29
|
+
export { TransformerRegistry } from "./serializerTransforms/index.js";
|
|
30
|
+
export { DateTransformer } from "./serializerTransforms/index.js";
|
|
31
|
+
export { BigIntTransformer } from "./serializerTransforms/index.js";
|
|
32
|
+
export { MapTransformer } from "./serializerTransforms/index.js";
|
|
33
|
+
export { SetTransformer } from "./serializerTransforms/index.js";
|
|
34
|
+
export { BufferTransformer } from "./serializerTransformsExt/index.js";
|
|
35
|
+
export { ErrorTransformer } from "./serializerTransformsExt/index.js";
|
|
36
|
+
export { toBase64, fromBase64, encodeUtf8, decodeUtf8, } from "./serializerTransformsExt/index.js";
|
|
37
|
+
export { createEnvelope, unwrapEnvelope, serializeToEnvelope, deserializeFromEnvelope, } from "./serializerEnvelope/index.js";
|
|
38
|
+
export { SerializerRegistry } from "./serializerRegistry/index.js";
|
|
39
|
+
export { createSerializer, createDefaultRegistry, } from "./serializerRegistry/index.js";
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization
|
|
3
|
+
*
|
|
4
|
+
* Data translation layer for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides JSON serialization with type preservation, a transformer
|
|
7
|
+
* system for custom types, serialization envelopes for cross-service
|
|
8
|
+
* communication, and a registry for managing multiple serializers.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { createSerializer, JSONSerializer } from "@zudojs/serialization";
|
|
13
|
+
*
|
|
14
|
+
* // Fast path (default) — nearly zero overhead over native JSON
|
|
15
|
+
* const serializer = createSerializer("json");
|
|
16
|
+
* const json = serializer.serialize({ hello: "world" });
|
|
17
|
+
* const data = serializer.deserialize(json);
|
|
18
|
+
*
|
|
19
|
+
* // Advanced path — type preservation for Date, BigInt, Map, Set, etc.
|
|
20
|
+
* const advanced = new JSONSerializer();
|
|
21
|
+
* const result = advanced.serialize(
|
|
22
|
+
* { createdAt: new Date(), amount: 100n },
|
|
23
|
+
* { preserveTypes: true },
|
|
24
|
+
* );
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
// ─── JSON Serializer ──────────────────────────────────────────
|
|
28
|
+
export { JSONSerializer } from "./serializerJson/index.js";
|
|
29
|
+
// ─── Transformer Registry ─────────────────────────────────────
|
|
30
|
+
export { TransformerRegistry } from "./serializerTransforms/index.js";
|
|
31
|
+
export { DateTransformer } from "./serializerTransforms/index.js";
|
|
32
|
+
export { BigIntTransformer } from "./serializerTransforms/index.js";
|
|
33
|
+
export { MapTransformer } from "./serializerTransforms/index.js";
|
|
34
|
+
export { SetTransformer } from "./serializerTransforms/index.js";
|
|
35
|
+
// ─── Extended Transformers ────────────────────────────────────
|
|
36
|
+
export { BufferTransformer } from "./serializerTransformsExt/index.js";
|
|
37
|
+
export { ErrorTransformer } from "./serializerTransformsExt/index.js";
|
|
38
|
+
export { toBase64, fromBase64, encodeUtf8, decodeUtf8, } from "./serializerTransformsExt/index.js";
|
|
39
|
+
// ─── Envelope ─────────────────────────────────────────────────
|
|
40
|
+
export { createEnvelope, unwrapEnvelope, serializeToEnvelope, deserializeFromEnvelope, } from "./serializerEnvelope/index.js";
|
|
41
|
+
// ─── Registry & Factory ───────────────────────────────────────
|
|
42
|
+
export { SerializerRegistry } from "./serializerRegistry/index.js";
|
|
43
|
+
export { createSerializer, createDefaultRegistry, } from "./serializerRegistry/index.js";
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAgBH,iEAAiE;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,iEAAiE;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,iEAAiE;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,oCAAoC,CAAC;AAE5C,iEAAiE;AACjE,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AAEvC,iEAAiE;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — Serialization envelope.
|
|
3
|
+
*
|
|
4
|
+
* Wraps serialized data with metadata (format, version, encoding)
|
|
5
|
+
* so consumers know how to deserialize the payload. Essential for
|
|
6
|
+
* messaging, queues, RPC, and cross-service communication.
|
|
7
|
+
*/
|
|
8
|
+
import type { SerializedEnvelope, SerializedValue } from "../serializerTypes/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Create a serialization envelope wrapping data with metadata.
|
|
11
|
+
*
|
|
12
|
+
* @param data - The serialized data payload.
|
|
13
|
+
* @param format - The serialization format used (default: "json").
|
|
14
|
+
* @param options - Additional metadata options.
|
|
15
|
+
* @returns A SerializedEnvelope with metadata and data.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createEnvelope(data: SerializedValue, format?: string, options?: {
|
|
18
|
+
readonly version?: number;
|
|
19
|
+
readonly contentType?: string;
|
|
20
|
+
readonly encoding?: string;
|
|
21
|
+
}): SerializedEnvelope;
|
|
22
|
+
/**
|
|
23
|
+
* Extract the data from an envelope, validating metadata.
|
|
24
|
+
*
|
|
25
|
+
* @param envelope - The envelope to unwrap.
|
|
26
|
+
* @param expectedFormat - Optional format to validate against.
|
|
27
|
+
* @returns The raw serialized data.
|
|
28
|
+
* @throws {Error} when the envelope format doesn't match expectations.
|
|
29
|
+
*/
|
|
30
|
+
export declare function unwrapEnvelope(envelope: SerializedEnvelope, expectedFormat?: string): SerializedValue;
|
|
31
|
+
/**
|
|
32
|
+
* Serialize a value and wrap it in an envelope.
|
|
33
|
+
*
|
|
34
|
+
* @param value - The value to serialize.
|
|
35
|
+
* @param serializer - The serializer to use.
|
|
36
|
+
* @param format - The format identifier for metadata.
|
|
37
|
+
* @returns A SerializedEnvelope containing the serialized data.
|
|
38
|
+
*/
|
|
39
|
+
export declare function serializeToEnvelope<T>(value: T, serializer: {
|
|
40
|
+
serialize: (v: T) => string;
|
|
41
|
+
}, format?: string): SerializedEnvelope;
|
|
42
|
+
/**
|
|
43
|
+
* Unwrap an envelope and deserialize the data.
|
|
44
|
+
*
|
|
45
|
+
* @param envelope - The envelope to unwrap.
|
|
46
|
+
* @param deserializer - The deserializer to use.
|
|
47
|
+
* @param expectedFormat - Optional format to validate against.
|
|
48
|
+
* @returns The deserialized value.
|
|
49
|
+
*/
|
|
50
|
+
export declare function deserializeFromEnvelope<T>(envelope: SerializedEnvelope, deserializer: {
|
|
51
|
+
deserialize: <U>(v: string) => U;
|
|
52
|
+
}, expectedFormat?: string): T;
|
|
53
|
+
//# sourceMappingURL=envelope.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.core.d.ts","sourceRoot":"","sources":["../../src/serializerEnvelope/envelope.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAElB,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAQrC;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,EACrB,MAAM,GAAE,MAAiC,EACzC,OAAO,GAAE;IACP,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACvB,GACL,kBAAkB,CAUpB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,eAAe,CAOjB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,CAAC,EACR,UAAU,EAAE;IAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;CAAE,EAC3C,MAAM,GAAE,MAAiC,GACxC,kBAAkB,CAGpB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE;IAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,CAAA;CAAE,EAClD,cAAc,CAAC,EAAE,MAAM,GACtB,CAAC,CAIH"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — Serialization envelope.
|
|
3
|
+
*
|
|
4
|
+
* Wraps serialized data with metadata (format, version, encoding)
|
|
5
|
+
* so consumers know how to deserialize the payload. Essential for
|
|
6
|
+
* messaging, queues, RPC, and cross-service communication.
|
|
7
|
+
*/
|
|
8
|
+
import { SerializationFormat, SerializationContentType, SERIALIZATION_SCHEMA_VERSION, } from "@zudojs/constants";
|
|
9
|
+
import { encodeUtf8, decodeUtf8 } from "../serializerTransformsExt/index.js";
|
|
10
|
+
/**
|
|
11
|
+
* Create a serialization envelope wrapping data with metadata.
|
|
12
|
+
*
|
|
13
|
+
* @param data - The serialized data payload.
|
|
14
|
+
* @param format - The serialization format used (default: "json").
|
|
15
|
+
* @param options - Additional metadata options.
|
|
16
|
+
* @returns A SerializedEnvelope with metadata and data.
|
|
17
|
+
*/
|
|
18
|
+
export function createEnvelope(data, format = SerializationFormat.JSON, options = {}) {
|
|
19
|
+
return {
|
|
20
|
+
metadata: {
|
|
21
|
+
format,
|
|
22
|
+
version: options.version ?? SERIALIZATION_SCHEMA_VERSION,
|
|
23
|
+
contentType: options.contentType ?? SerializationContentType.JSON,
|
|
24
|
+
encoding: options.encoding ?? "utf-8",
|
|
25
|
+
},
|
|
26
|
+
data,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extract the data from an envelope, validating metadata.
|
|
31
|
+
*
|
|
32
|
+
* @param envelope - The envelope to unwrap.
|
|
33
|
+
* @param expectedFormat - Optional format to validate against.
|
|
34
|
+
* @returns The raw serialized data.
|
|
35
|
+
* @throws {Error} when the envelope format doesn't match expectations.
|
|
36
|
+
*/
|
|
37
|
+
export function unwrapEnvelope(envelope, expectedFormat) {
|
|
38
|
+
if (expectedFormat && envelope.metadata.format !== expectedFormat) {
|
|
39
|
+
throw new Error(`Envelope format mismatch: expected "${expectedFormat}", got "${envelope.metadata.format}"`);
|
|
40
|
+
}
|
|
41
|
+
return envelope.data;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Serialize a value and wrap it in an envelope.
|
|
45
|
+
*
|
|
46
|
+
* @param value - The value to serialize.
|
|
47
|
+
* @param serializer - The serializer to use.
|
|
48
|
+
* @param format - The format identifier for metadata.
|
|
49
|
+
* @returns A SerializedEnvelope containing the serialized data.
|
|
50
|
+
*/
|
|
51
|
+
export function serializeToEnvelope(value, serializer, format = SerializationFormat.JSON) {
|
|
52
|
+
const data = serializer.serialize(value);
|
|
53
|
+
return createEnvelope(data, format);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Unwrap an envelope and deserialize the data.
|
|
57
|
+
*
|
|
58
|
+
* @param envelope - The envelope to unwrap.
|
|
59
|
+
* @param deserializer - The deserializer to use.
|
|
60
|
+
* @param expectedFormat - Optional format to validate against.
|
|
61
|
+
* @returns The deserialized value.
|
|
62
|
+
*/
|
|
63
|
+
export function deserializeFromEnvelope(envelope, deserializer, expectedFormat) {
|
|
64
|
+
const data = unwrapEnvelope(envelope, expectedFormat);
|
|
65
|
+
const str = typeof data === "string" ? data : decodeUtf8(data);
|
|
66
|
+
return deserializer.deserialize(str);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=envelope.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.core.js","sourceRoot":"","sources":["../../src/serializerEnvelope/envelope.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAE7E;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAqB,EACrB,SAAiB,mBAAmB,CAAC,IAAI,EACzC,UAII,EAAE;IAEN,OAAO;QACL,QAAQ,EAAE;YACR,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,4BAA4B;YACxD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,wBAAwB,CAAC,IAAI;YACjE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;SACtC;QACD,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,QAA4B,EAC5B,cAAuB;IAEvB,IAAI,cAAc,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,uCAAuC,cAAc,WAAW,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAQ,EACR,UAA2C,EAC3C,SAAiB,mBAAmB,CAAC,IAAI;IAEzC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAA4B,EAC5B,YAAkD,EAClD,cAAuB;IAEvB,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,YAAY,CAAC,WAAW,CAAI,GAAG,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — Serialization envelope.
|
|
3
|
+
*
|
|
4
|
+
* Wraps serialized data with metadata for cross-service communication.
|
|
5
|
+
*/
|
|
6
|
+
export { createEnvelope, unwrapEnvelope, serializeToEnvelope, deserializeFromEnvelope, } from "./envelope.core.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serializerEnvelope/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — Serialization envelope.
|
|
3
|
+
*
|
|
4
|
+
* Wraps serialized data with metadata for cross-service communication.
|
|
5
|
+
*/
|
|
6
|
+
export { createEnvelope, unwrapEnvelope, serializeToEnvelope, deserializeFromEnvelope, } from "./envelope.core.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializerEnvelope/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — JSON serializer.
|
|
3
|
+
*
|
|
4
|
+
* JSON serializer with fast path (native JSON) and advanced path
|
|
5
|
+
* with type preservation via transformer registry.
|
|
6
|
+
*/
|
|
7
|
+
export { JSONSerializer } from "./jsonSerializer.core.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serializerJson/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — JSON serializer.
|
|
3
|
+
*
|
|
4
|
+
* JSON serializer with fast path (native JSON) and advanced path
|
|
5
|
+
* with type preservation via transformer registry.
|
|
6
|
+
*/
|
|
7
|
+
export { JSONSerializer } from "./jsonSerializer.core.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializerJson/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON serializer with optional type preservation.
|
|
3
|
+
*
|
|
4
|
+
* Fast path (default): delegates to native JSON.stringify/parse.
|
|
5
|
+
* Advanced path (preserveTypes: true): recursive traversal with
|
|
6
|
+
* transformer-based type preservation.
|
|
7
|
+
*/
|
|
8
|
+
import type { Serializer, SerializeOptions, DeserializeOptions } from "../serializerTypes/index.js";
|
|
9
|
+
import { TransformerRegistry } from "../serializerTransforms/index.js";
|
|
10
|
+
export declare class JSONSerializer implements Serializer<unknown, string> {
|
|
11
|
+
readonly name = "json";
|
|
12
|
+
readonly contentType = "application/json";
|
|
13
|
+
private readonly transformers;
|
|
14
|
+
constructor(options?: {
|
|
15
|
+
readonly transformers?: TransformerRegistry;
|
|
16
|
+
});
|
|
17
|
+
/** Register a custom type transformer. */
|
|
18
|
+
registerTransformer(transformer: import("../serializerTypes/index.js").TypeTransformer): void;
|
|
19
|
+
serialize(value: unknown, options?: SerializeOptions): string;
|
|
20
|
+
deserialize<T = unknown>(value: string, options?: DeserializeOptions): T;
|
|
21
|
+
private transformValue;
|
|
22
|
+
private restoreValue;
|
|
23
|
+
private assertValidJson;
|
|
24
|
+
private assertOutputSize;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=jsonSerializer.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonSerializer.core.d.ts","sourceRoot":"","sources":["../../src/serializerJson/jsonSerializer.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AA+BvE,qBAAa,cAAe,YAAW,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAChE,SAAgB,IAAI,UAAU;IAC9B,SAAgB,WAAW,sBAAsB;IAEjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAEvC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAA;KAAE;IAIrE,0CAA0C;IAC1C,mBAAmB,CACjB,WAAW,EAAE,OAAO,6BAA6B,EAAE,eAAe,GACjE,IAAI;IAIP,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAsB7D,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC;IAcxE,OAAO,CAAC,cAAc;IA+DtB,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gBAAgB;CAWzB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON serializer with optional type preservation.
|
|
3
|
+
*
|
|
4
|
+
* Fast path (default): delegates to native JSON.stringify/parse.
|
|
5
|
+
* Advanced path (preserveTypes: true): recursive traversal with
|
|
6
|
+
* transformer-based type preservation.
|
|
7
|
+
*/
|
|
8
|
+
import { TransformerRegistry } from "../serializerTransforms/index.js";
|
|
9
|
+
import { DateTransformer, BigIntTransformer, MapTransformer, SetTransformer, } from "../serializerTransforms/index.js";
|
|
10
|
+
import { BufferTransformer, ErrorTransformer, } from "../serializerTransformsExt/index.js";
|
|
11
|
+
import { SerializationLimits, SerializationTags } from "@zudojs/constants";
|
|
12
|
+
import { isPlainObject } from "@zudojs/types";
|
|
13
|
+
import { assertNoCircularReference, assertDepthWithinLimit, assertSizeWithinLimit, } from "@zudojs/validation";
|
|
14
|
+
/** Default transformer registry with all built-in transformers. */
|
|
15
|
+
function createDefaultTransformers() {
|
|
16
|
+
const registry = new TransformerRegistry();
|
|
17
|
+
registry.register(DateTransformer);
|
|
18
|
+
registry.register(BigIntTransformer);
|
|
19
|
+
registry.register(MapTransformer);
|
|
20
|
+
registry.register(SetTransformer);
|
|
21
|
+
registry.register(BufferTransformer);
|
|
22
|
+
registry.register(ErrorTransformer);
|
|
23
|
+
return registry;
|
|
24
|
+
}
|
|
25
|
+
export class JSONSerializer {
|
|
26
|
+
name = "json";
|
|
27
|
+
contentType = "application/json";
|
|
28
|
+
transformers;
|
|
29
|
+
constructor(options) {
|
|
30
|
+
this.transformers = options?.transformers ?? createDefaultTransformers();
|
|
31
|
+
}
|
|
32
|
+
/** Register a custom type transformer. */
|
|
33
|
+
registerTransformer(transformer) {
|
|
34
|
+
this.transformers.register(transformer);
|
|
35
|
+
}
|
|
36
|
+
serialize(value, options) {
|
|
37
|
+
const maxDepth = options?.maxDepth ?? SerializationLimits.MAX_DEPTH;
|
|
38
|
+
const maxSize = options?.maxSize ?? SerializationLimits.MAX_SIZE;
|
|
39
|
+
if (options?.preserveTypes === true) {
|
|
40
|
+
assertNoCircularReference(value);
|
|
41
|
+
assertDepthWithinLimit(value, maxDepth);
|
|
42
|
+
const transformed = this.transformValue(value, 0, maxDepth);
|
|
43
|
+
const json = options?.pretty
|
|
44
|
+
? JSON.stringify(transformed, null, options?.indent ?? 2)
|
|
45
|
+
: JSON.stringify(transformed);
|
|
46
|
+
this.assertOutputSize(json, maxSize);
|
|
47
|
+
return json;
|
|
48
|
+
}
|
|
49
|
+
const json = options?.pretty
|
|
50
|
+
? JSON.stringify(value, null, options?.indent ?? 2)
|
|
51
|
+
: JSON.stringify(value);
|
|
52
|
+
this.assertOutputSize(json, maxSize);
|
|
53
|
+
return json;
|
|
54
|
+
}
|
|
55
|
+
deserialize(value, options) {
|
|
56
|
+
if (options?.strict === true)
|
|
57
|
+
this.assertValidJson(value);
|
|
58
|
+
const parsed = JSON.parse(value);
|
|
59
|
+
if (options?.preserveTypes === true) {
|
|
60
|
+
const maxDepth = options?.maxDepth ?? SerializationLimits.MAX_DEPTH;
|
|
61
|
+
assertDepthWithinLimit(parsed, maxDepth);
|
|
62
|
+
return this.restoreValue(parsed, 0, maxDepth);
|
|
63
|
+
}
|
|
64
|
+
return parsed;
|
|
65
|
+
}
|
|
66
|
+
transformValue(value, depth, maxDepth) {
|
|
67
|
+
if (value === null || value === undefined)
|
|
68
|
+
return value;
|
|
69
|
+
if (typeof value === "bigint") {
|
|
70
|
+
const transformer = this.transformers.findForValue(value);
|
|
71
|
+
return transformer ? transformer.serialize(value) : value.toString();
|
|
72
|
+
}
|
|
73
|
+
if (typeof value !== "object")
|
|
74
|
+
return value;
|
|
75
|
+
if (depth >= maxDepth)
|
|
76
|
+
return value;
|
|
77
|
+
if (Array.isArray(value)) {
|
|
78
|
+
return value.map((item) => this.transformValue(item, depth + 1, maxDepth));
|
|
79
|
+
}
|
|
80
|
+
const transformer = this.transformers.findForValue(value);
|
|
81
|
+
if (transformer) {
|
|
82
|
+
const raw = transformer.serialize(value);
|
|
83
|
+
return this.transformValue(raw, depth + 1, maxDepth);
|
|
84
|
+
}
|
|
85
|
+
if (value instanceof Map) {
|
|
86
|
+
const entries = [];
|
|
87
|
+
for (const [k, v] of value) {
|
|
88
|
+
entries.push([
|
|
89
|
+
this.transformValue(k, depth + 1, maxDepth),
|
|
90
|
+
this.transformValue(v, depth + 1, maxDepth),
|
|
91
|
+
]);
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
[SerializationTags.TYPE]: "Map",
|
|
95
|
+
[SerializationTags.VALUE]: entries,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (value instanceof Set) {
|
|
99
|
+
return {
|
|
100
|
+
[SerializationTags.TYPE]: "Set",
|
|
101
|
+
[SerializationTags.VALUE]: [...value].map((v) => this.transformValue(v, depth + 1, maxDepth)),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (isPlainObject(value)) {
|
|
105
|
+
const result = {};
|
|
106
|
+
for (const key of Object.keys(value)) {
|
|
107
|
+
result[key] = this.transformValue(value[key], depth + 1, maxDepth);
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
113
|
+
restoreValue(value, depth, maxDepth) {
|
|
114
|
+
if (value === null || value === undefined)
|
|
115
|
+
return value;
|
|
116
|
+
if (typeof value !== "object")
|
|
117
|
+
return value;
|
|
118
|
+
if (depth >= maxDepth)
|
|
119
|
+
return value;
|
|
120
|
+
if (Array.isArray(value)) {
|
|
121
|
+
return value.map((item) => this.restoreValue(item, depth + 1, maxDepth));
|
|
122
|
+
}
|
|
123
|
+
const obj = value;
|
|
124
|
+
const typeTag = obj[SerializationTags.TYPE];
|
|
125
|
+
if (typeof typeTag === "string") {
|
|
126
|
+
const transformer = this.transformers.get(typeTag);
|
|
127
|
+
return transformer.deserialize(value);
|
|
128
|
+
}
|
|
129
|
+
if (isPlainObject(value)) {
|
|
130
|
+
const result = {};
|
|
131
|
+
for (const key of Object.keys(value)) {
|
|
132
|
+
result[key] = this.restoreValue(value[key], depth + 1, maxDepth);
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
return value;
|
|
137
|
+
}
|
|
138
|
+
assertValidJson(value) {
|
|
139
|
+
try {
|
|
140
|
+
JSON.parse(value);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
throw new Error(`Invalid JSON: ${err.message}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
assertOutputSize(json, maxSize) {
|
|
147
|
+
const size = typeof Buffer !== "undefined"
|
|
148
|
+
? Buffer.byteLength(json, "utf-8")
|
|
149
|
+
: new TextEncoder().encode(json).byteLength;
|
|
150
|
+
if (size > maxSize) {
|
|
151
|
+
throw new Error(`Serialized payload too large: ${size} bytes (max: ${maxSize})`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=jsonSerializer.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonSerializer.core.js","sourceRoot":"","sources":["../../src/serializerJson/jsonSerializer.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — Serializer registry and factory.
|
|
3
|
+
*
|
|
4
|
+
* Central registry for named serializer instances and factory
|
|
5
|
+
* functions for creating serializers by format.
|
|
6
|
+
*/
|
|
7
|
+
export { SerializerRegistry } from "./serializerRegistry.core.js";
|
|
8
|
+
export { createSerializer, createDefaultRegistry, } from "./serializerRegistry.factory.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serializerRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — Serializer registry and factory.
|
|
3
|
+
*
|
|
4
|
+
* Central registry for named serializer instances and factory
|
|
5
|
+
* functions for creating serializers by format.
|
|
6
|
+
*/
|
|
7
|
+
export { SerializerRegistry } from "./serializerRegistry.core.js";
|
|
8
|
+
export { createSerializer, createDefaultRegistry, } from "./serializerRegistry.factory.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializerRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/serialization — Serializer registry.
|
|
3
|
+
*
|
|
4
|
+
* Central registry for named serializer instances. Other packages
|
|
5
|
+
* look up serializers by name instead of importing concrete classes.
|
|
6
|
+
*/
|
|
7
|
+
import type { Serializer } from "../serializerTypes/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* Registry of serializer instances keyed by canonical name.
|
|
10
|
+
*
|
|
11
|
+
* Provides a lookup mechanism so consuming packages depend on
|
|
12
|
+
* interfaces, not concrete serializer implementations.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SerializerRegistry {
|
|
15
|
+
private readonly serializers;
|
|
16
|
+
/** Register a serializer. Overwrites any existing registration with the same name. */
|
|
17
|
+
register(serializer: Serializer): void;
|
|
18
|
+
/** Unregister a serializer by name. */
|
|
19
|
+
unregister(name: string): boolean;
|
|
20
|
+
/** Retrieve a serializer by name. Throws SerializerNotFoundError if not found. */
|
|
21
|
+
get(name: string): Serializer;
|
|
22
|
+
/** Returns true when a serializer is registered for the name. */
|
|
23
|
+
has(name: string): boolean;
|
|
24
|
+
/** Returns all registered serializer names. */
|
|
25
|
+
names(): string[];
|
|
26
|
+
/** Remove all registered serializers. */
|
|
27
|
+
clear(): void;
|
|
28
|
+
/** Number of registered serializers. */
|
|
29
|
+
get size(): number;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=serializerRegistry.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializerRegistry.core.d.ts","sourceRoot":"","sources":["../../src/serializerRegistry/serializerRegistry.core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D,sFAAsF;IACtF,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAItC,uCAAuC;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,kFAAkF;IAClF,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAM7B,iEAAiE;IACjE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,+CAA+C;IAC/C,KAAK,IAAI,MAAM,EAAE;IAIjB,yCAAyC;IACzC,KAAK,IAAI,IAAI;IAIb,wCAAwC;IACxC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|