@oyinlola141/lattice-serialization 0.1.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 (82) hide show
  1. package/README.md +19 -0
  2. package/dist/index.d.ts +40 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +44 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/serializerEnvelope/envelope.core.d.ts +53 -0
  7. package/dist/serializerEnvelope/envelope.core.d.ts.map +1 -0
  8. package/dist/serializerEnvelope/envelope.core.js +68 -0
  9. package/dist/serializerEnvelope/envelope.core.js.map +1 -0
  10. package/dist/serializerEnvelope/index.d.ts +7 -0
  11. package/dist/serializerEnvelope/index.d.ts.map +1 -0
  12. package/dist/serializerEnvelope/index.js +7 -0
  13. package/dist/serializerEnvelope/index.js.map +1 -0
  14. package/dist/serializerJson/index.d.ts +8 -0
  15. package/dist/serializerJson/index.d.ts.map +1 -0
  16. package/dist/serializerJson/index.js +8 -0
  17. package/dist/serializerJson/index.js.map +1 -0
  18. package/dist/serializerJson/jsonSerializer.core.d.ts +26 -0
  19. package/dist/serializerJson/jsonSerializer.core.d.ts.map +1 -0
  20. package/dist/serializerJson/jsonSerializer.core.js +149 -0
  21. package/dist/serializerJson/jsonSerializer.core.js.map +1 -0
  22. package/dist/serializerRegistry/index.d.ts +9 -0
  23. package/dist/serializerRegistry/index.d.ts.map +1 -0
  24. package/dist/serializerRegistry/index.js +9 -0
  25. package/dist/serializerRegistry/index.js.map +1 -0
  26. package/dist/serializerRegistry/serializerRegistry.core.d.ts +31 -0
  27. package/dist/serializerRegistry/serializerRegistry.core.d.ts.map +1 -0
  28. package/dist/serializerRegistry/serializerRegistry.core.js +48 -0
  29. package/dist/serializerRegistry/serializerRegistry.core.js.map +1 -0
  30. package/dist/serializerRegistry/serializerRegistry.factory.d.ts +30 -0
  31. package/dist/serializerRegistry/serializerRegistry.factory.d.ts.map +1 -0
  32. package/dist/serializerRegistry/serializerRegistry.factory.js +39 -0
  33. package/dist/serializerRegistry/serializerRegistry.factory.js.map +1 -0
  34. package/dist/serializerTransforms/bigint.transformer.d.ts +10 -0
  35. package/dist/serializerTransforms/bigint.transformer.d.ts.map +1 -0
  36. package/dist/serializerTransforms/bigint.transformer.js +35 -0
  37. package/dist/serializerTransforms/bigint.transformer.js.map +1 -0
  38. package/dist/serializerTransforms/date.transformer.d.ts +10 -0
  39. package/dist/serializerTransforms/date.transformer.d.ts.map +1 -0
  40. package/dist/serializerTransforms/date.transformer.js +34 -0
  41. package/dist/serializerTransforms/date.transformer.js.map +1 -0
  42. package/dist/serializerTransforms/index.d.ts +11 -0
  43. package/dist/serializerTransforms/index.d.ts.map +1 -0
  44. package/dist/serializerTransforms/index.js +11 -0
  45. package/dist/serializerTransforms/index.js.map +1 -0
  46. package/dist/serializerTransforms/map.transformer.d.ts +10 -0
  47. package/dist/serializerTransforms/map.transformer.d.ts.map +1 -0
  48. package/dist/serializerTransforms/map.transformer.js +34 -0
  49. package/dist/serializerTransforms/map.transformer.js.map +1 -0
  50. package/dist/serializerTransforms/set.transformer.d.ts +10 -0
  51. package/dist/serializerTransforms/set.transformer.d.ts.map +1 -0
  52. package/dist/serializerTransforms/set.transformer.js +30 -0
  53. package/dist/serializerTransforms/set.transformer.js.map +1 -0
  54. package/dist/serializerTransforms/transformerRegistry.core.d.ts +33 -0
  55. package/dist/serializerTransforms/transformerRegistry.core.d.ts.map +1 -0
  56. package/dist/serializerTransforms/transformerRegistry.core.js +60 -0
  57. package/dist/serializerTransforms/transformerRegistry.core.js.map +1 -0
  58. package/dist/serializerTransformsExt/buffer.transformer.d.ts +10 -0
  59. package/dist/serializerTransformsExt/buffer.transformer.d.ts.map +1 -0
  60. package/dist/serializerTransformsExt/buffer.transformer.js +32 -0
  61. package/dist/serializerTransformsExt/buffer.transformer.js.map +1 -0
  62. package/dist/serializerTransformsExt/encoding.utils.d.ts +14 -0
  63. package/dist/serializerTransformsExt/encoding.utils.d.ts.map +1 -0
  64. package/dist/serializerTransformsExt/encoding.utils.js +43 -0
  65. package/dist/serializerTransformsExt/encoding.utils.js.map +1 -0
  66. package/dist/serializerTransformsExt/error.transformer.d.ts +10 -0
  67. package/dist/serializerTransformsExt/error.transformer.d.ts.map +1 -0
  68. package/dist/serializerTransformsExt/error.transformer.js +49 -0
  69. package/dist/serializerTransformsExt/error.transformer.js.map +1 -0
  70. package/dist/serializerTransformsExt/index.d.ts +10 -0
  71. package/dist/serializerTransformsExt/index.d.ts.map +1 -0
  72. package/dist/serializerTransformsExt/index.js +10 -0
  73. package/dist/serializerTransformsExt/index.js.map +1 -0
  74. package/dist/serializerTypes/index.d.ts +7 -0
  75. package/dist/serializerTypes/index.d.ts.map +1 -0
  76. package/dist/serializerTypes/index.js +7 -0
  77. package/dist/serializerTypes/index.js.map +1 -0
  78. package/dist/serializerTypes/serializer.type.d.ts +83 -0
  79. package/dist/serializerTypes/serializer.type.d.ts.map +1 -0
  80. package/dist/serializerTypes/serializer.type.js +9 -0
  81. package/dist/serializerTypes/serializer.type.js.map +1 -0
  82. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # @latticejs/serialization
2
+
3
+ Serialization framework for Lattice — multiple format support, type preservation, and streaming
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @latticejs/serialization
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```typescript
14
+ import { /* add usage here */ } from "@latticejs/serialization";
15
+ ```
16
+
17
+ ## License
18
+
19
+ MIT
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @oyinlola141/lattice-serialization
3
+ *
4
+ * Data translation layer for the Lattice 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 "@oyinlola141/lattice-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,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @latticejs/serialization
3
+ *
4
+ * Data translation layer for the Lattice 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 "@latticejs/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,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @oyinlola141/lattice-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;AAIrC;;;;;;;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
+ * @latticejs/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 "@latticejs/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,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACnH,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
+ * @oyinlola141/lattice-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
+ * @latticejs/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
+ * @oyinlola141/lattice-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
+ * @latticejs/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,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAmBvE,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,CAAC,WAAW,EAAE,OAAO,6BAA6B,EAAE,eAAe,GAAG,IAAI;IAI7F,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;IA6CtB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gBAAgB;CAQzB"}
@@ -0,0 +1,149 @@
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 "@latticejs/constants";
12
+ import { isPlainObject } from "@latticejs/types";
13
+ import { assertNoCircularReference, assertDepthWithinLimit, assertSizeWithinLimit } from "@latticejs/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([this.transformValue(k, depth + 1, maxDepth), this.transformValue(v, depth + 1, maxDepth)]);
89
+ }
90
+ return { [SerializationTags.TYPE]: "Map", [SerializationTags.VALUE]: entries };
91
+ }
92
+ if (value instanceof Set) {
93
+ return {
94
+ [SerializationTags.TYPE]: "Set",
95
+ [SerializationTags.VALUE]: [...value].map((v) => this.transformValue(v, depth + 1, maxDepth)),
96
+ };
97
+ }
98
+ if (isPlainObject(value)) {
99
+ const result = {};
100
+ for (const key of Object.keys(value)) {
101
+ result[key] = this.transformValue(value[key], depth + 1, maxDepth);
102
+ }
103
+ return result;
104
+ }
105
+ return value;
106
+ }
107
+ restoreValue(value, depth, maxDepth) {
108
+ if (value === null || value === undefined)
109
+ return value;
110
+ if (typeof value !== "object")
111
+ return value;
112
+ if (depth >= maxDepth)
113
+ return value;
114
+ if (Array.isArray(value)) {
115
+ return value.map((item) => this.restoreValue(item, depth + 1, maxDepth));
116
+ }
117
+ const obj = value;
118
+ const typeTag = obj[SerializationTags.TYPE];
119
+ if (typeof typeTag === "string") {
120
+ const transformer = this.transformers.get(typeTag);
121
+ return transformer.deserialize(value);
122
+ }
123
+ if (isPlainObject(value)) {
124
+ const result = {};
125
+ for (const key of Object.keys(value)) {
126
+ result[key] = this.restoreValue(value[key], depth + 1, maxDepth);
127
+ }
128
+ return result;
129
+ }
130
+ return value;
131
+ }
132
+ assertValidJson(value) {
133
+ try {
134
+ JSON.parse(value);
135
+ }
136
+ catch (err) {
137
+ throw new Error(`Invalid JSON: ${err.message}`);
138
+ }
139
+ }
140
+ assertOutputSize(json, maxSize) {
141
+ const size = typeof Buffer !== "undefined"
142
+ ? Buffer.byteLength(json, "utf-8")
143
+ : new TextEncoder().encode(json).byteLength;
144
+ if (size > maxSize) {
145
+ throw new Error(`Serialized payload too large: ${size} bytes (max: ${maxSize})`);
146
+ }
147
+ }
148
+ }
149
+ //# 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
+ * @oyinlola141/lattice-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,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @latticejs/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,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @oyinlola141/lattice-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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @latticejs/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 { SerializerNotFoundError } from "@latticejs/errors";
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 class SerializerRegistry {
15
+ serializers = new Map();
16
+ /** Register a serializer. Overwrites any existing registration with the same name. */
17
+ register(serializer) {
18
+ this.serializers.set(serializer.name, serializer);
19
+ }
20
+ /** Unregister a serializer by name. */
21
+ unregister(name) {
22
+ return this.serializers.delete(name);
23
+ }
24
+ /** Retrieve a serializer by name. Throws SerializerNotFoundError if not found. */
25
+ get(name) {
26
+ const serializer = this.serializers.get(name);
27
+ if (!serializer)
28
+ throw new SerializerNotFoundError(name);
29
+ return serializer;
30
+ }
31
+ /** Returns true when a serializer is registered for the name. */
32
+ has(name) {
33
+ return this.serializers.has(name);
34
+ }
35
+ /** Returns all registered serializer names. */
36
+ names() {
37
+ return [...this.serializers.keys()];
38
+ }
39
+ /** Remove all registered serializers. */
40
+ clear() {
41
+ this.serializers.clear();
42
+ }
43
+ /** Number of registered serializers. */
44
+ get size() {
45
+ return this.serializers.size;
46
+ }
47
+ }
48
+ //# sourceMappingURL=serializerRegistry.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializerRegistry.core.js","sourceRoot":"","sources":["../../src/serializerRegistry/serializerRegistry.core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IACZ,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE7D,sFAAsF;IACtF,QAAQ,CAAC,UAAsB;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,uCAAuC;IACvC,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,kFAAkF;IAClF,GAAG,CAAC,IAAY;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,iEAAiE;IACjE,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,+CAA+C;IAC/C,KAAK;QACH,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,yCAAyC;IACzC,KAAK;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,wCAAwC;IACxC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @oyinlola141/lattice-serialization — Serializer factory.
3
+ *
4
+ * Factory function for creating serializer instances by format name.
5
+ * Provides a clean public API for creating serializers without
6
+ * exposing concrete class constructors.
7
+ */
8
+ import type { Serializer, SerializationFormat } from "../serializerTypes/index.js";
9
+ import { TransformerRegistry } from "../serializerTransforms/index.js";
10
+ import { SerializerRegistry } from "./serializerRegistry.core.js";
11
+ /**
12
+ * Create a serializer for the given format.
13
+ *
14
+ * @param format - The serialization format (e.g., "json").
15
+ * @param options - Optional configuration for the serializer.
16
+ * @returns A Serializer instance.
17
+ * @throws {UnsupportedSerializationFormatError} when the format is not supported.
18
+ */
19
+ export declare function createSerializer(format: SerializationFormat, options?: {
20
+ readonly transformers?: TransformerRegistry;
21
+ readonly pretty?: boolean;
22
+ readonly preserveTypes?: boolean;
23
+ }): Serializer;
24
+ /**
25
+ * Create a default serializer registry pre-populated with built-in serializers.
26
+ *
27
+ * @returns A SerializerRegistry with "json" registered.
28
+ */
29
+ export declare function createDefaultRegistry(): SerializerRegistry;
30
+ //# sourceMappingURL=serializerRegistry.factory.d.ts.map