@axi-engine/fields 0.3.2 → 0.3.4

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 (160) hide show
  1. package/README.md +6 -2
  2. package/dist/core-field-tree-factory.d.ts +13 -0
  3. package/dist/core-field-tree-factory.d.ts.map +1 -0
  4. package/dist/core-field-tree-factory.js +14 -0
  5. package/dist/core-field-tree-factory.js.map +1 -0
  6. package/dist/core-field-tree.d.ts +5 -0
  7. package/dist/core-field-tree.d.ts.map +1 -0
  8. package/dist/core-field-tree.js +4 -0
  9. package/dist/core-field-tree.js.map +1 -0
  10. package/dist/core-fields-factory.d.ts +10 -0
  11. package/dist/core-fields-factory.d.ts.map +1 -0
  12. package/dist/core-fields-factory.js +14 -0
  13. package/dist/core-fields-factory.js.map +1 -0
  14. package/dist/core-fields.d.ts +47 -0
  15. package/dist/core-fields.d.ts.map +1 -0
  16. package/dist/core-fields.js +8 -0
  17. package/dist/core-fields.js.map +1 -0
  18. package/dist/data-store-field-resolver.d.ts +26 -0
  19. package/dist/data-store-field-resolver.d.ts.map +1 -0
  20. package/dist/data-store-field-resolver.js +21 -0
  21. package/dist/data-store-field-resolver.js.map +1 -0
  22. package/dist/data-store.d.ts +38 -0
  23. package/dist/data-store.d.ts.map +1 -0
  24. package/dist/data-store.js +141 -0
  25. package/dist/data-store.js.map +1 -0
  26. package/dist/field-definitions/core-boolean-field.d.ts +11 -0
  27. package/dist/field-definitions/core-boolean-field.d.ts.map +1 -0
  28. package/dist/field-definitions/core-boolean-field.js +13 -0
  29. package/dist/field-definitions/core-boolean-field.js.map +1 -0
  30. package/dist/field-definitions/core-field.d.ts +51 -0
  31. package/dist/field-definitions/core-field.d.ts.map +1 -0
  32. package/dist/field-definitions/core-field.js +74 -0
  33. package/dist/field-definitions/core-field.js.map +1 -0
  34. package/dist/field-definitions/core-numeric-field.d.ts +18 -0
  35. package/dist/field-definitions/core-numeric-field.d.ts.map +1 -0
  36. package/dist/field-definitions/core-numeric-field.js +45 -0
  37. package/dist/field-definitions/core-numeric-field.js.map +1 -0
  38. package/dist/field-definitions/core-string-field.d.ts +15 -0
  39. package/dist/field-definitions/core-string-field.d.ts.map +1 -0
  40. package/dist/field-definitions/core-string-field.js +27 -0
  41. package/dist/field-definitions/core-string-field.js.map +1 -0
  42. package/dist/field-definitions/index.d.ts +5 -0
  43. package/dist/field-definitions/index.d.ts.map +1 -0
  44. package/dist/field-definitions/index.js +5 -0
  45. package/dist/field-definitions/index.js.map +1 -0
  46. package/dist/field-registry.d.ts +5 -0
  47. package/dist/field-registry.d.ts.map +1 -0
  48. package/dist/field-registry.js +4 -0
  49. package/dist/field-registry.js.map +1 -0
  50. package/dist/field-tree-factory.d.ts +12 -0
  51. package/dist/field-tree-factory.d.ts.map +1 -0
  52. package/dist/field-tree-factory.js +2 -0
  53. package/dist/field-tree-factory.js.map +1 -0
  54. package/dist/field-tree.d.ts +171 -0
  55. package/dist/field-tree.d.ts.map +1 -0
  56. package/dist/field-tree.js +248 -0
  57. package/dist/field-tree.js.map +1 -0
  58. package/dist/field.d.ts +34 -0
  59. package/dist/field.d.ts.map +1 -0
  60. package/dist/field.js +2 -0
  61. package/dist/field.js.map +1 -0
  62. package/dist/fields-factory.d.ts +5 -0
  63. package/dist/fields-factory.d.ts.map +1 -0
  64. package/dist/fields-factory.js +2 -0
  65. package/dist/fields-factory.js.map +1 -0
  66. package/dist/fields.d.ts +101 -0
  67. package/dist/fields.d.ts.map +1 -0
  68. package/dist/fields.js +143 -0
  69. package/dist/fields.js.map +1 -0
  70. package/dist/index.d.mts +112 -112
  71. package/dist/index.d.ts +18 -997
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +18 -1228
  74. package/dist/index.js.map +1 -0
  75. package/dist/index.mjs +2 -2
  76. package/dist/mixins/mixin-factory.d.ts +29 -0
  77. package/dist/mixins/mixin-factory.d.ts.map +1 -0
  78. package/dist/mixins/mixin-factory.js +32 -0
  79. package/dist/mixins/mixin-factory.js.map +1 -0
  80. package/dist/mixins/with-boolean-fields.mixin.d.ts +9 -0
  81. package/dist/mixins/with-boolean-fields.mixin.d.ts.map +1 -0
  82. package/dist/mixins/with-boolean-fields.mixin.js +4 -0
  83. package/dist/mixins/with-boolean-fields.mixin.js.map +1 -0
  84. package/dist/mixins/with-default-generic-fields.mixin.d.ts +31 -0
  85. package/dist/mixins/with-default-generic-fields.mixin.d.ts.map +1 -0
  86. package/dist/mixins/with-default-generic-fields.mixin.js +15 -0
  87. package/dist/mixins/with-default-generic-fields.mixin.js.map +1 -0
  88. package/dist/mixins/with-numeric-fields.mixin.d.ts +9 -0
  89. package/dist/mixins/with-numeric-fields.mixin.d.ts.map +1 -0
  90. package/dist/mixins/with-numeric-fields.mixin.js +4 -0
  91. package/dist/mixins/with-numeric-fields.mixin.js.map +1 -0
  92. package/dist/mixins/with-string-fields.mixin.d.ts +9 -0
  93. package/dist/mixins/with-string-fields.mixin.d.ts.map +1 -0
  94. package/dist/mixins/with-string-fields.mixin.js +4 -0
  95. package/dist/mixins/with-string-fields.mixin.js.map +1 -0
  96. package/dist/policies/clamp-max-policy.d.ts +11 -0
  97. package/dist/policies/clamp-max-policy.d.ts.map +1 -0
  98. package/dist/policies/clamp-max-policy.js +18 -0
  99. package/dist/policies/clamp-max-policy.js.map +1 -0
  100. package/dist/policies/clamp-min-policy.d.ts +11 -0
  101. package/dist/policies/clamp-min-policy.d.ts.map +1 -0
  102. package/dist/policies/clamp-min-policy.js +18 -0
  103. package/dist/policies/clamp-min-policy.js.map +1 -0
  104. package/dist/policies/clamp-policy.d.ts +12 -0
  105. package/dist/policies/clamp-policy.d.ts.map +1 -0
  106. package/dist/policies/clamp-policy.js +21 -0
  107. package/dist/policies/clamp-policy.js.map +1 -0
  108. package/dist/policies/index.d.ts +6 -0
  109. package/dist/policies/index.d.ts.map +1 -0
  110. package/dist/policies/index.js +6 -0
  111. package/dist/policies/index.js.map +1 -0
  112. package/dist/policies/policies.d.ts +38 -0
  113. package/dist/policies/policies.d.ts.map +1 -0
  114. package/dist/policies/policies.js +62 -0
  115. package/dist/policies/policies.js.map +1 -0
  116. package/dist/policies/policy.d.ts +6 -0
  117. package/dist/policies/policy.d.ts.map +1 -0
  118. package/dist/policies/policy.js +2 -0
  119. package/dist/policies/policy.js.map +1 -0
  120. package/dist/serializer/field-serializer.d.ts +52 -0
  121. package/dist/serializer/field-serializer.d.ts.map +1 -0
  122. package/dist/serializer/field-serializer.js +66 -0
  123. package/dist/serializer/field-serializer.js.map +1 -0
  124. package/dist/serializer/field-tree-serializer.d.ts +50 -0
  125. package/dist/serializer/field-tree-serializer.d.ts.map +1 -0
  126. package/dist/serializer/field-tree-serializer.js +68 -0
  127. package/dist/serializer/field-tree-serializer.js.map +1 -0
  128. package/dist/serializer/fields-serializer.d.ts +49 -0
  129. package/dist/serializer/fields-serializer.d.ts.map +1 -0
  130. package/dist/serializer/fields-serializer.js +57 -0
  131. package/dist/serializer/fields-serializer.js.map +1 -0
  132. package/dist/serializer/index.d.ts +8 -0
  133. package/dist/serializer/index.d.ts.map +1 -0
  134. package/dist/serializer/index.js +8 -0
  135. package/dist/serializer/index.js.map +1 -0
  136. package/dist/serializer/policies/clamp-max-policy-serializer-handler.d.ts +13 -0
  137. package/dist/serializer/policies/clamp-max-policy-serializer-handler.d.ts.map +1 -0
  138. package/dist/serializer/policies/clamp-max-policy-serializer-handler.js +10 -0
  139. package/dist/serializer/policies/clamp-max-policy-serializer-handler.js.map +1 -0
  140. package/dist/serializer/policies/clamp-min-policy-serializer-handler.d.ts +13 -0
  141. package/dist/serializer/policies/clamp-min-policy-serializer-handler.d.ts.map +1 -0
  142. package/dist/serializer/policies/clamp-min-policy-serializer-handler.js +10 -0
  143. package/dist/serializer/policies/clamp-min-policy-serializer-handler.js.map +1 -0
  144. package/dist/serializer/policies/clamp-policy-serializer-handler.d.ts +16 -0
  145. package/dist/serializer/policies/clamp-policy-serializer-handler.d.ts.map +1 -0
  146. package/dist/serializer/policies/clamp-policy-serializer-handler.js +10 -0
  147. package/dist/serializer/policies/clamp-policy-serializer-handler.js.map +1 -0
  148. package/dist/serializer/policy-serializer.d.ts +41 -0
  149. package/dist/serializer/policy-serializer.d.ts.map +1 -0
  150. package/dist/serializer/policy-serializer.js +43 -0
  151. package/dist/serializer/policy-serializer.js.map +1 -0
  152. package/dist/setup.d.ts +41 -0
  153. package/dist/setup.d.ts.map +1 -0
  154. package/dist/setup.js +57 -0
  155. package/dist/setup.js.map +1 -0
  156. package/dist/store.d.ts +137 -0
  157. package/dist/store.d.ts.map +1 -0
  158. package/dist/store.js +2 -0
  159. package/dist/store.js.map +1 -0
  160. package/package.json +7 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-serializer.js","sourceRoot":"","sources":["../../src/serializer/field-serializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAgBlE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,eAAe;IAQP;IACA;IAPnB;;;;OAIG;IACH,YACmB,aAA4B,EAC5B,gBAAkC;QADlC,kBAAa,GAAb,aAAa,CAAe;QAC5B,qBAAgB,GAAhB,gBAAgB,CAAkB;IAErD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAiB;QACxB,IAAI,QAAQ,GAAQ;YAClB,MAAM,EAAE,KAAK,CAAC,QAAQ;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAA;QAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9B,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxG,QAAQ,CAAC,QAAQ,GAAG,kBAAkB,CAAC;QACzC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,QAAuB;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;QAClC,YAAY,CAAC,SAAS,EAAE,sDAAsD,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,QAAmC,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,QAAQ,GAAG,EAAE,CAAC;YACd,QAAQ,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,QAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAC,CAAe,CAAC;IAC3E,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ import { FieldsSerializer, FieldsSnapshot } from './fields-serializer';
2
+ import { Fields } from '../fields';
3
+ import { FieldTreeFactory } from '../field-tree-factory';
4
+ import { FieldTree } from '../field-tree';
5
+ /**
6
+ * Represents the serializable state of a `FieldTree` container.
7
+ *
8
+ * This type describes a plain object that has:
9
+ * 1. A required `__type` property to identify the tree's class.
10
+ * 2. An arbitrary number of other properties, where each key is the `name`
11
+ * of a child node, and the value is the snapshot of that child node.
12
+ * The `| string` is included to ensure compatibility with the `__type` property.
13
+ */
14
+ export interface FieldTreeSnapshot {
15
+ __type: string;
16
+ [fieldName: string]: FieldsSnapshot | FieldTreeSnapshot | string;
17
+ }
18
+ /**
19
+ * Orchestrates the recursive serialization and deserialization of `FieldTree` instances.
20
+ *
21
+ * This class handles the conversion of an entire `FieldTree` object graph into a
22
+ * plain, storable snapshot and vice-versa. It delegates the processing of `Fields`
23
+ * leaf nodes to a dedicated `FieldsSerializer`.
24
+ * @todo Refactoring: The current implementation uses `if/else` logic in `snapshot` and `hydrate`
25
+ * to process different node types. A more extensible approach would be to use a
26
+ * registry of dedicated handlers for each node type.
27
+ * This would allow new node types to be supported without
28
+ * modifying this class, adhering to the Open/Closed Principle.
29
+ *
30
+ * @todo Implement a `patch(tree, snapshot)` method for recursive, non-destructive
31
+ * updates. This method should traverse the existing tree and the snapshot,
32
+ * patching nodes in place to maintain object references.
33
+ */
34
+ export declare class FieldTreeSerializer<TFields extends Fields> {
35
+ private readonly fieldTreeNodeFactory;
36
+ private readonly fieldsSerializer;
37
+ constructor(fieldTreeNodeFactory: FieldTreeFactory<TFields>, fieldsSerializer: FieldsSerializer<TFields>);
38
+ /**
39
+ * Creates a serializable snapshot of the entire tree and its contained fields.
40
+ * @returns A plain JavaScript object representing the complete state managed by this tree.
41
+ */
42
+ snapshot(tree: FieldTree<TFields>): FieldTreeSnapshot;
43
+ /**
44
+ * Restores the state of the tree from a snapshot.
45
+ * It intelligently creates missing nodes based on `__type` metadata and delegates hydration to child nodes.
46
+ * @param snapshot The snapshot object to load.
47
+ */
48
+ hydrate(snapshot: FieldTreeSnapshot): FieldTree<TFields>;
49
+ }
50
+ //# sourceMappingURL=field-tree-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-tree-serializer.d.ts","sourceRoot":"","sources":["../../src/serializer/field-tree-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AACjC,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,SAAS,EAAW,MAAM,eAAe,CAAC;AAGlD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,iBAAiB,GAAG,MAAM,CAAC;CAClE;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB,CAAC,OAAO,SAAS,MAAM;IAGnD,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBADhB,oBAAoB,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC/C,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAI9D;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,iBAAiB;IAerD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC,OAAO,CAAC;CAkBzD"}
@@ -0,0 +1,68 @@
1
+ import { isString } from '@axi-engine/utils';
2
+ import { Fields } from '../fields';
3
+ import { FieldTree } from '../field-tree';
4
+ /**
5
+ * Orchestrates the recursive serialization and deserialization of `FieldTree` instances.
6
+ *
7
+ * This class handles the conversion of an entire `FieldTree` object graph into a
8
+ * plain, storable snapshot and vice-versa. It delegates the processing of `Fields`
9
+ * leaf nodes to a dedicated `FieldsSerializer`.
10
+ * @todo Refactoring: The current implementation uses `if/else` logic in `snapshot` and `hydrate`
11
+ * to process different node types. A more extensible approach would be to use a
12
+ * registry of dedicated handlers for each node type.
13
+ * This would allow new node types to be supported without
14
+ * modifying this class, adhering to the Open/Closed Principle.
15
+ *
16
+ * @todo Implement a `patch(tree, snapshot)` method for recursive, non-destructive
17
+ * updates. This method should traverse the existing tree and the snapshot,
18
+ * patching nodes in place to maintain object references.
19
+ */
20
+ export class FieldTreeSerializer {
21
+ fieldTreeNodeFactory;
22
+ fieldsSerializer;
23
+ constructor(fieldTreeNodeFactory, fieldsSerializer) {
24
+ this.fieldTreeNodeFactory = fieldTreeNodeFactory;
25
+ this.fieldsSerializer = fieldsSerializer;
26
+ }
27
+ /**
28
+ * Creates a serializable snapshot of the entire tree and its contained fields.
29
+ * @returns A plain JavaScript object representing the complete state managed by this tree.
30
+ */
31
+ snapshot(tree) {
32
+ const res = {
33
+ __type: tree.typeName
34
+ };
35
+ tree.nodes.forEach((node, key) => {
36
+ if (node.typeName === tree.typeName) {
37
+ res[key] = this.snapshot(node);
38
+ }
39
+ else if (node.typeName === Fields.typeName) {
40
+ res[key] = this.fieldsSerializer.snapshot(node);
41
+ }
42
+ });
43
+ return res;
44
+ }
45
+ /**
46
+ * Restores the state of the tree from a snapshot.
47
+ * It intelligently creates missing nodes based on `__type` metadata and delegates hydration to child nodes.
48
+ * @param snapshot The snapshot object to load.
49
+ */
50
+ hydrate(snapshot) {
51
+ const { __type, ...nodes } = snapshot;
52
+ const tree = this.fieldTreeNodeFactory.tree();
53
+ for (const key in nodes) {
54
+ const nodeData = nodes[key];
55
+ if (isString(nodeData)) {
56
+ continue;
57
+ }
58
+ if (nodeData.__type === FieldTree.typeName) {
59
+ tree.addNode(key, this.hydrate(nodeData));
60
+ }
61
+ else if (nodeData.__type === Fields.typeName) {
62
+ tree.addNode(key, this.fieldsSerializer.hydrate(nodeData));
63
+ }
64
+ }
65
+ return tree;
66
+ }
67
+ }
68
+ //# sourceMappingURL=field-tree-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-tree-serializer.js","sourceRoot":"","sources":["../../src/serializer/field-tree-serializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAC,SAAS,EAAW,MAAM,eAAe,CAAC;AAiBlD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,mBAAmB;IAGX;IACA;IAFnB,YACmB,oBAA+C,EAC/C,gBAA2C;QAD3C,yBAAoB,GAApB,oBAAoB,CAA2B;QAC/C,qBAAgB,GAAhB,gBAAgB,CAA2B;IAE9D,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAwB;QAC/B,MAAM,GAAG,GAAwB;YAC/B,MAAM,EAAE,IAAI,CAAC,QAAQ;SACtB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAuB,EAAE,GAAW,EAAE,EAAE;YAC1D,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAwB,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,QAA2B;QACjC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAE9C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAA6B,CAAC,CAAC,CAAA;YAChE,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAA0B,CAAC,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ import { FieldSerializer, FieldSnapshot } from './field-serializer';
2
+ import { Fields } from '../fields';
3
+ import { FieldsFactory } from '../fields-factory';
4
+ /**
5
+ * A plain object representation of a Fields container's state for serialization.
6
+ */
7
+ export interface FieldsSnapshot {
8
+ __type: string;
9
+ [fieldName: string]: FieldSnapshot | string;
10
+ }
11
+ /**
12
+ * Orchestrates the serialization and deserialization of `Fields` container instances.
13
+ *
14
+ * This class acts as a high-level composer, responsible for converting an entire `Fields` object
15
+ * into a storable snapshot and back.
16
+ * It delegates the actual serialization of each `Field` and `Policy` to their respective serializers.
17
+ *
18
+ * @todo Implement a `patch(fields, snapshot)` method. It should perform a non-destructive
19
+ * update, creating new fields, removing missing ones, and patching existing ones
20
+ * in place, preserving the container instance itself.
21
+ */
22
+ export declare class FieldsSerializer<TFields extends Fields> {
23
+ private readonly fieldsFactory;
24
+ private readonly fieldSerializer;
25
+ /**
26
+ * Creates an instance of FieldsSerializer.
27
+ * @param {FieldsFactory} fieldsFactory - A registry that maps string type names to Field constructors.
28
+ * @param {FieldSerializer} fieldSerializer - A serializer of field instances.
29
+ */
30
+ constructor(fieldsFactory: FieldsFactory<TFields>, fieldSerializer: FieldSerializer);
31
+ /**
32
+ * Creates a serializable snapshot of a `Fields` container.
33
+ *
34
+ * The snapshot includes a `__type` identifier (currently hardcoded) and an array of snapshots
35
+ * for each `Field` within the container.
36
+ * @param {Fields} fields - The `Fields` instance to serialize.
37
+ * @returns {FieldsSnapshot} A plain object ready for JSON serialization.
38
+ */
39
+ snapshot(fields: Fields): FieldsSnapshot;
40
+ /**
41
+ * Restores a `Fields` container instance from its snapshot representation.
42
+ *
43
+ * It iterates through the field snapshots and hydrates them individually, adding them to the new container.
44
+ * @param {FieldsSnapshot} snapshot - The plain object snapshot to deserialize.
45
+ * @returns {Fields} A new `DefaultFields` instance populated with the restored fields.
46
+ */
47
+ hydrate(snapshot: FieldsSnapshot): TFields;
48
+ }
49
+ //# sourceMappingURL=fields-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields-serializer.d.ts","sourceRoot":"","sources":["../../src/serializer/fields-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;CAC7C;AAED;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB,CAAC,OAAO,SAAS,MAAM;IAOhD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAPlC;;;;OAIG;gBAEgB,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,EACrC,eAAe,EAAE,eAAe;IAInD;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IASxC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;CAY3C"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Orchestrates the serialization and deserialization of `Fields` container instances.
3
+ *
4
+ * This class acts as a high-level composer, responsible for converting an entire `Fields` object
5
+ * into a storable snapshot and back.
6
+ * It delegates the actual serialization of each `Field` and `Policy` to their respective serializers.
7
+ *
8
+ * @todo Implement a `patch(fields, snapshot)` method. It should perform a non-destructive
9
+ * update, creating new fields, removing missing ones, and patching existing ones
10
+ * in place, preserving the container instance itself.
11
+ */
12
+ export class FieldsSerializer {
13
+ fieldsFactory;
14
+ fieldSerializer;
15
+ /**
16
+ * Creates an instance of FieldsSerializer.
17
+ * @param {FieldsFactory} fieldsFactory - A registry that maps string type names to Field constructors.
18
+ * @param {FieldSerializer} fieldSerializer - A serializer of field instances.
19
+ */
20
+ constructor(fieldsFactory, fieldSerializer) {
21
+ this.fieldsFactory = fieldsFactory;
22
+ this.fieldSerializer = fieldSerializer;
23
+ }
24
+ /**
25
+ * Creates a serializable snapshot of a `Fields` container.
26
+ *
27
+ * The snapshot includes a `__type` identifier (currently hardcoded) and an array of snapshots
28
+ * for each `Field` within the container.
29
+ * @param {Fields} fields - The `Fields` instance to serialize.
30
+ * @returns {FieldsSnapshot} A plain object ready for JSON serialization.
31
+ */
32
+ snapshot(fields) {
33
+ const res = {
34
+ __type: fields.typeName,
35
+ };
36
+ fields.fields.forEach(field => res[field.name] = this.fieldSerializer.snapshot(field));
37
+ return res;
38
+ }
39
+ /**
40
+ * Restores a `Fields` container instance from its snapshot representation.
41
+ *
42
+ * It iterates through the field snapshots and hydrates them individually, adding them to the new container.
43
+ * @param {FieldsSnapshot} snapshot - The plain object snapshot to deserialize.
44
+ * @returns {Fields} A new `DefaultFields` instance populated with the restored fields.
45
+ */
46
+ hydrate(snapshot) {
47
+ const { __type, ...fieldsData } = snapshot;
48
+ const fields = this.fieldsFactory.fields();
49
+ for (const fieldName in fieldsData) {
50
+ const fieldSnapshot = fieldsData[fieldName];
51
+ const restoredField = this.fieldSerializer.hydrate(fieldSnapshot);
52
+ fields.add(restoredField);
53
+ }
54
+ return fields;
55
+ }
56
+ }
57
+ //# sourceMappingURL=fields-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields-serializer.js","sourceRoot":"","sources":["../../src/serializer/fields-serializer.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAOR;IACA;IAPnB;;;;OAIG;IACH,YACmB,aAAqC,EACrC,eAAgC;QADhC,kBAAa,GAAb,aAAa,CAAwB;QACrC,oBAAe,GAAf,eAAe,CAAiB;IAEnD,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAc;QACrB,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,MAAM,CAAC,QAAQ;SACxB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,QAAwB;QAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAE3C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,aAA8B,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export * from './policies/clamp-policy-serializer-handler';
2
+ export * from './policies/clamp-max-policy-serializer-handler';
3
+ export * from './policies/clamp-min-policy-serializer-handler';
4
+ export * from './policy-serializer';
5
+ export * from './field-serializer';
6
+ export * from './fields-serializer';
7
+ export * from './field-tree-serializer';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA,cAAc,4CAA4C,CAAA;AAC1D,cAAc,gDAAgD,CAAA;AAC9D,cAAc,gDAAgD,CAAA;AAE9D,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1,8 @@
1
+ export * from './policies/clamp-policy-serializer-handler';
2
+ export * from './policies/clamp-max-policy-serializer-handler';
3
+ export * from './policies/clamp-min-policy-serializer-handler';
4
+ export * from './policy-serializer';
5
+ export * from './field-serializer';
6
+ export * from './fields-serializer';
7
+ export * from './field-tree-serializer';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA,cAAc,4CAA4C,CAAA;AAC1D,cAAc,gDAAgD,CAAA;AAC9D,cAAc,gDAAgD,CAAA;AAE9D,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { PolicySerializerHandler } from '../policy-serializer';
2
+ import { ClampMaxPolicy } from '../../policies';
3
+ export declare class ClampMaxPolicySerializerHandler implements PolicySerializerHandler<ClampMaxPolicy, {
4
+ max: number;
5
+ }> {
6
+ snapshot(policy: ClampMaxPolicy): {
7
+ max: number;
8
+ };
9
+ hydrate(data: {
10
+ max: number;
11
+ }): ClampMaxPolicy;
12
+ }
13
+ //# sourceMappingURL=clamp-max-policy-serializer-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clamp-max-policy-serializer-handler.d.ts","sourceRoot":"","sources":["../../../src/serializer/policies/clamp-max-policy-serializer-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,+BAAgC,YAAW,uBAAuB,CAAC,cAAc,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IAC9G,QAAQ,CAAC,MAAM,EAAE,cAAc;;;IAI/B,OAAO,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;CAG9B"}
@@ -0,0 +1,10 @@
1
+ import { ClampMaxPolicy } from '../../policies';
2
+ export class ClampMaxPolicySerializerHandler {
3
+ snapshot(policy) {
4
+ return { max: policy.max };
5
+ }
6
+ hydrate(data) {
7
+ return new ClampMaxPolicy(data.max);
8
+ }
9
+ }
10
+ //# sourceMappingURL=clamp-max-policy-serializer-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clamp-max-policy-serializer-handler.js","sourceRoot":"","sources":["../../../src/serializer/policies/clamp-max-policy-serializer-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAE9C,MAAM,OAAO,+BAA+B;IAC1C,QAAQ,CAAC,MAAsB;QAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,IAAqB;QAC3B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { PolicySerializerHandler } from '../policy-serializer';
2
+ import { ClampMinPolicy } from '../../policies';
3
+ export declare class ClampMinPolicySerializerHandler implements PolicySerializerHandler<ClampMinPolicy, {
4
+ min: number;
5
+ }> {
6
+ snapshot(policy: ClampMinPolicy): {
7
+ min: number;
8
+ };
9
+ hydrate(data: {
10
+ min: number;
11
+ }): ClampMinPolicy;
12
+ }
13
+ //# sourceMappingURL=clamp-min-policy-serializer-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clamp-min-policy-serializer-handler.d.ts","sourceRoot":"","sources":["../../../src/serializer/policies/clamp-min-policy-serializer-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAG9C,qBAAa,+BAAgC,YAAW,uBAAuB,CAAC,cAAc,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IAC9G,QAAQ,CAAC,MAAM,EAAE,cAAc;;;IAI/B,OAAO,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;CAG9B"}
@@ -0,0 +1,10 @@
1
+ import { ClampMinPolicy } from '../../policies';
2
+ export class ClampMinPolicySerializerHandler {
3
+ snapshot(policy) {
4
+ return { min: policy.min };
5
+ }
6
+ hydrate(data) {
7
+ return new ClampMinPolicy(data.min);
8
+ }
9
+ }
10
+ //# sourceMappingURL=clamp-min-policy-serializer-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clamp-min-policy-serializer-handler.js","sourceRoot":"","sources":["../../../src/serializer/policies/clamp-min-policy-serializer-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAG9C,MAAM,OAAO,+BAA+B;IAC1C,QAAQ,CAAC,MAAsB;QAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,IAAqB;QAC3B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { PolicySerializerHandler } from '../policy-serializer';
2
+ import { ClampPolicy } from '../../policies';
3
+ export declare class ClampPolicySerializerHandler implements PolicySerializerHandler<ClampPolicy, {
4
+ min: number;
5
+ max: number;
6
+ }> {
7
+ snapshot(policy: ClampPolicy): {
8
+ min: number;
9
+ max: number;
10
+ };
11
+ hydrate(data: {
12
+ min: number;
13
+ max: number;
14
+ }): ClampPolicy;
15
+ }
16
+ //# sourceMappingURL=clamp-policy-serializer-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clamp-policy-serializer-handler.d.ts","sourceRoot":"","sources":["../../../src/serializer/policies/clamp-policy-serializer-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAG3C,qBAAa,4BAA6B,YAAW,uBAAuB,CAAC,WAAW,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IACrH,QAAQ,CAAC,MAAM,EAAE,WAAW;;;;IAI5B,OAAO,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;CAG3C"}
@@ -0,0 +1,10 @@
1
+ import { ClampPolicy } from '../../policies';
2
+ export class ClampPolicySerializerHandler {
3
+ snapshot(policy) {
4
+ return { min: policy.min, max: policy.max };
5
+ }
6
+ hydrate(data) {
7
+ return new ClampPolicy(data.min, data.max);
8
+ }
9
+ }
10
+ //# sourceMappingURL=clamp-policy-serializer-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clamp-policy-serializer-handler.js","sourceRoot":"","sources":["../../../src/serializer/policies/clamp-policy-serializer-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAG3C,MAAM,OAAO,4BAA4B;IACvC,QAAQ,CAAC,MAAmB;QAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,IAAkC;QACxC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import { Policy } from '../policies';
2
+ /**
3
+ * Defines the contract for a handler that can serialize and deserialize a specific type of Policy.
4
+ * @template T - The specific Policy class this handler manages.
5
+ * @template S - The shape of the plain object this handler produces/consumes.
6
+ */
7
+ export interface PolicySerializerHandler<T extends Policy<any>, S extends object> {
8
+ /**
9
+ * Converts a Policy instance into a serializable plain object.
10
+ * @param policy The Policy instance to serialize.
11
+ * @returns A plain object representing the policy's state.
12
+ */
13
+ snapshot(policy: T): S;
14
+ /**
15
+ * Creates a new Policy instance from a plain object.
16
+ * @param snapshotData The plain object containing the policy's state.
17
+ * @returns A new instance of the Policy.
18
+ */
19
+ hydrate(snapshotData: S): T;
20
+ }
21
+ export declare class PolicySerializer {
22
+ private readonly handlers;
23
+ register(policyId: string, handler: PolicySerializerHandler<any, any>): this;
24
+ clearHandlers(): void;
25
+ /**
26
+ * Creates a serializable snapshot of a policy instance.
27
+ * The snapshot includes the policy's state and a `__type` identifier.
28
+ * @param policy The policy instance to snapshot.
29
+ * @returns A plain object ready for JSON serialization.
30
+ * @throws If no handler is registered for the policy's ID.
31
+ */
32
+ snapshot(policy: Policy<any>): object;
33
+ /**
34
+ * Restores a policy instance from its snapshot representation.
35
+ * @param snapshot The plain object snapshot, which must contain a `__type` property.
36
+ * @returns A new, fully functional policy instance.
37
+ * @throws If the snapshot is invalid or no handler is registered for its `__type`.
38
+ */
39
+ hydrate(snapshot: any): Policy<any>;
40
+ }
41
+ //# sourceMappingURL=policy-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-serializer.d.ts","sourceRoot":"","sources":["../../src/serializer/policy-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAGnC;;;;GAIG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM;IAC9E;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB;;;;OAIG;IACH,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;CAC7B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwD;IAEjF,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC;IAMrE,aAAa;IAIb;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;IAWrC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;CASpC"}
@@ -0,0 +1,43 @@
1
+ import { throwIf, throwIfEmpty } from '@axi-engine/utils';
2
+ export class PolicySerializer {
3
+ handlers = new Map();
4
+ register(policyId, handler) {
5
+ throwIf(this.handlers.has(policyId), `A handler for policy ID '${policyId}' is already registered.`);
6
+ this.handlers.set(policyId, handler);
7
+ return this;
8
+ }
9
+ clearHandlers() {
10
+ this.handlers.clear();
11
+ }
12
+ /**
13
+ * Creates a serializable snapshot of a policy instance.
14
+ * The snapshot includes the policy's state and a `__type` identifier.
15
+ * @param policy The policy instance to snapshot.
16
+ * @returns A plain object ready for JSON serialization.
17
+ * @throws If no handler is registered for the policy's ID.
18
+ */
19
+ snapshot(policy) {
20
+ const handler = this.handlers.get(policy.id);
21
+ throwIfEmpty(handler, `No serializer handler registered for policy ID: '${policy.id}'`);
22
+ const data = handler.snapshot(policy);
23
+ return {
24
+ __type: policy.id,
25
+ ...data
26
+ };
27
+ }
28
+ /**
29
+ * Restores a policy instance from its snapshot representation.
30
+ * @param snapshot The plain object snapshot, which must contain a `__type` property.
31
+ * @returns A new, fully functional policy instance.
32
+ * @throws If the snapshot is invalid or no handler is registered for its `__type`.
33
+ */
34
+ hydrate(snapshot) {
35
+ const typeId = snapshot?.__type;
36
+ throwIfEmpty(typeId, 'Invalid policy snapshot: missing "__type" identifier.');
37
+ const handler = this.handlers.get(typeId);
38
+ throwIfEmpty(handler, `No serializer handler registered for policy ID: '${typeId}'`);
39
+ const { __type, ...data } = snapshot;
40
+ return handler.hydrate(data);
41
+ }
42
+ }
43
+ //# sourceMappingURL=policy-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-serializer.js","sourceRoot":"","sources":["../../src/serializer/policy-serializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAuBxD,MAAM,OAAO,gBAAgB;IACV,QAAQ,GAAG,IAAI,GAAG,EAA6C,CAAC;IAEjF,QAAQ,CAAC,QAAgB,EAAE,OAA0C;QACnE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,4BAA4B,QAAQ,0BAA0B,CAAC,CAAC;QACrG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,MAAmB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7C,YAAY,CAAC,OAAO,EAAE,oDAAoD,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEtC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,EAAE;YACjB,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAa;QACnB,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC;QAChC,YAAY,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,YAAY,CAAC,OAAO,EAAE,oDAAoD,MAAM,GAAG,CAAC,CAAC;QACrF,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QAErC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import { FieldRegistry } from './field-registry';
2
+ import { FieldTreeSerializer, PolicySerializer } from './serializer';
3
+ import { CoreFields } from './core-fields';
4
+ import { CoreTreeNodeFactory } from './core-field-tree-factory';
5
+ /**
6
+ * Creates and configures a FieldRegistry with all the core field types.
7
+ * @returns {FieldRegistry} A pre-configured FieldRegistry instance.
8
+ */
9
+ export declare function createCoreFieldRegistry(): FieldRegistry;
10
+ /**
11
+ * Creates and configures a PolicySerializer with handlers for core policies.
12
+ * @returns {PolicySerializer} A pre-configured PolicySerializer instance.
13
+ */
14
+ export declare function createCorePolicySerializer(): PolicySerializer;
15
+ /**
16
+ * Creates a factory for CoreFieldTree and CoreFields nodes.
17
+ * @param {FieldRegistry} fieldRegistry - The registry to be used by the factory.
18
+ * @returns {CoreTreeNodeFactory} A new CoreTreeNodeFactory instance.
19
+ */
20
+ export declare function createCoreTreeNodeFactory(fieldRegistry: FieldRegistry): CoreTreeNodeFactory;
21
+ /**
22
+ * Creates a fully configured serializer for a FieldTree.
23
+ * This function composes all necessary serializers (FieldTree, Fields, Field) for a complete setup.
24
+ * @param {CoreTreeNodeFactory} fieldTreeNodeFactory - The factory used to create new tree nodes during deserialization.
25
+ * @param policySerializer
26
+ * @returns {FieldTreeSerializer<CoreFields>} A top-level serializer for the entire field tree.
27
+ */
28
+ export declare function createCoreTreeSerializer(fieldTreeNodeFactory: CoreTreeNodeFactory, policySerializer?: PolicySerializer): FieldTreeSerializer<CoreFields>;
29
+ export interface CoreFieldSystemConfig {
30
+ registry?: FieldRegistry;
31
+ policySerializer?: PolicySerializer;
32
+ }
33
+ /**
34
+ * Creates a complete core setup for the field system.
35
+ * @returns {{factory: CoreTreeNodeFactory, serializer: FieldTreeSerializer<CoreFields>}}
36
+ */
37
+ export declare function createCoreFieldSystem(config?: CoreFieldSystemConfig): {
38
+ factory: CoreTreeNodeFactory;
39
+ serializer: FieldTreeSerializer<CoreFields>;
40
+ };
41
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAG4D,mBAAmB,EACpF,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAG9D;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,CAOvD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,gBAAgB,CAM7D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,aAAa,GAAG,mBAAmB,CAE3F;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,mBAAmB,EACzC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,mBAAmB,CAAC,UAAU,CAAC,CAQjC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAClE;IAAE,OAAO,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAA;CAAE,CAM9E"}
package/dist/setup.js ADDED
@@ -0,0 +1,57 @@
1
+ import { FieldRegistry } from './field-registry';
2
+ import { ClampMaxPolicySerializerHandler, ClampMinPolicySerializerHandler, ClampPolicySerializerHandler, FieldSerializer, FieldsSerializer, FieldTreeSerializer, PolicySerializer } from './serializer';
3
+ import { ClampMaxPolicy, ClampMinPolicy, ClampPolicy } from './policies';
4
+ import { CoreBooleanField, CoreField, CoreNumericField, CoreStringField } from './field-definitions';
5
+ import { CoreTreeNodeFactory } from './core-field-tree-factory';
6
+ /**
7
+ * Creates and configures a FieldRegistry with all the core field types.
8
+ * @returns {FieldRegistry} A pre-configured FieldRegistry instance.
9
+ */
10
+ export function createCoreFieldRegistry() {
11
+ const fieldRegistry = new FieldRegistry();
12
+ fieldRegistry.register(CoreField.typeName, CoreField);
13
+ fieldRegistry.register(CoreNumericField.typeName, CoreNumericField);
14
+ fieldRegistry.register(CoreStringField.typeName, CoreStringField);
15
+ fieldRegistry.register(CoreBooleanField.typeName, CoreBooleanField);
16
+ return fieldRegistry;
17
+ }
18
+ /**
19
+ * Creates and configures a PolicySerializer with handlers for core policies.
20
+ * @returns {PolicySerializer} A pre-configured PolicySerializer instance.
21
+ */
22
+ export function createCorePolicySerializer() {
23
+ const policySerializer = new PolicySerializer();
24
+ policySerializer.register(ClampPolicy.id, new ClampPolicySerializerHandler());
25
+ policySerializer.register(ClampMinPolicy.id, new ClampMinPolicySerializerHandler());
26
+ policySerializer.register(ClampMaxPolicy.id, new ClampMaxPolicySerializerHandler());
27
+ return policySerializer;
28
+ }
29
+ /**
30
+ * Creates a factory for CoreFieldTree and CoreFields nodes.
31
+ * @param {FieldRegistry} fieldRegistry - The registry to be used by the factory.
32
+ * @returns {CoreTreeNodeFactory} A new CoreTreeNodeFactory instance.
33
+ */
34
+ export function createCoreTreeNodeFactory(fieldRegistry) {
35
+ return new CoreTreeNodeFactory(fieldRegistry);
36
+ }
37
+ /**
38
+ * Creates a fully configured serializer for a FieldTree.
39
+ * This function composes all necessary serializers (FieldTree, Fields, Field) for a complete setup.
40
+ * @param {CoreTreeNodeFactory} fieldTreeNodeFactory - The factory used to create new tree nodes during deserialization.
41
+ * @param policySerializer
42
+ * @returns {FieldTreeSerializer<CoreFields>} A top-level serializer for the entire field tree.
43
+ */
44
+ export function createCoreTreeSerializer(fieldTreeNodeFactory, policySerializer) {
45
+ return new FieldTreeSerializer(fieldTreeNodeFactory, new FieldsSerializer(fieldTreeNodeFactory, new FieldSerializer(fieldTreeNodeFactory.fieldRegistry, policySerializer ?? createCorePolicySerializer())));
46
+ }
47
+ /**
48
+ * Creates a complete core setup for the field system.
49
+ * @returns {{factory: CoreTreeNodeFactory, serializer: FieldTreeSerializer<CoreFields>}}
50
+ */
51
+ export function createCoreFieldSystem(config) {
52
+ const registry = config?.registry ?? createCoreFieldRegistry();
53
+ const factory = createCoreTreeNodeFactory(registry);
54
+ const serializer = createCoreTreeSerializer(factory, config?.policySerializer);
55
+ return { factory, serializer };
56
+ }
57
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,4BAA4B,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EACpF,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,WAAW,EAAC,MAAM,YAAY,CAAC;AACvE,OAAO,EAAC,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEnG,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAG9D;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACpE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAClE,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACpE,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAChD,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,4BAA4B,EAAE,CAAC,CAAC;IAC9E,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,+BAA+B,EAAE,CAAC,CAAC;IACpF,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,+BAA+B,EAAE,CAAC,CAAC;IACpF,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,aAA4B;IACpE,OAAO,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,oBAAyC,EACzC,gBAAmC;IAEnC,OAAO,IAAI,mBAAmB,CAC5B,oBAAoB,EACpB,IAAI,gBAAgB,CAClB,oBAAoB,EACpB,IAAI,eAAe,CAAC,oBAAoB,CAAC,aAAa,EAAE,gBAAgB,IAAI,0BAA0B,EAAE,CAAC,CAC1G,CACF,CAAC;AACJ,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA8B;IAGlE,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,uBAAuB,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC/E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC"}