@quadnix/octo 0.0.21 → 0.0.22

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 (131) hide show
  1. package/dist/app.type.d.ts +3 -1
  2. package/dist/app.type.js +7 -7
  3. package/dist/app.type.js.map +1 -1
  4. package/dist/decorators/action.decorator.d.ts +6 -6
  5. package/dist/decorators/action.decorator.js +9 -9
  6. package/dist/decorators/action.decorator.js.map +1 -1
  7. package/dist/decorators/anchor.decorator.js +1 -1
  8. package/dist/decorators/anchor.decorator.js.map +1 -1
  9. package/dist/decorators/factory.decorator.d.ts +34 -15
  10. package/dist/decorators/factory.decorator.js +36 -13
  11. package/dist/decorators/factory.decorator.js.map +1 -1
  12. package/dist/decorators/model.decorator.js +1 -1
  13. package/dist/decorators/model.decorator.js.map +1 -1
  14. package/dist/decorators/module.decorator.d.ts +36 -32
  15. package/dist/decorators/module.decorator.js +2 -2
  16. package/dist/decorators/module.decorator.js.map +1 -1
  17. package/dist/decorators/overlay.decorator.js +1 -1
  18. package/dist/decorators/overlay.decorator.js.map +1 -1
  19. package/dist/decorators/resource.decorator.js +1 -1
  20. package/dist/decorators/resource.decorator.js.map +1 -1
  21. package/dist/{decorators → functions/container}/container.d.ts +2 -33
  22. package/dist/{decorators → functions/container}/container.js +8 -63
  23. package/dist/functions/container/container.js.map +1 -0
  24. package/dist/{decorators → functions/container}/test-container.d.ts +2 -6
  25. package/dist/{decorators → functions/container}/test-container.js +7 -14
  26. package/dist/functions/container/test-container.js.map +1 -0
  27. package/dist/functions/dependency/dependency.d.ts +6 -6
  28. package/dist/functions/dependency/dependency.js.map +1 -1
  29. package/dist/functions/diff/diff-metadata.d.ts +2 -2
  30. package/dist/functions/diff/diff-metadata.js +1 -1
  31. package/dist/functions/diff/diff-metadata.js.map +1 -1
  32. package/dist/functions/diff/diff.d.ts +4 -4
  33. package/dist/functions/diff/diff.js +6 -10
  34. package/dist/functions/diff/diff.js.map +1 -1
  35. package/dist/functions/diff/diff.utility.d.ts +23 -23
  36. package/dist/functions/diff/diff.utility.js +23 -23
  37. package/dist/functions/diff/diff.utility.js.map +1 -1
  38. package/dist/functions/hook/commit.hook.js.map +1 -1
  39. package/dist/functions/hook/model-action.hook.js +1 -1
  40. package/dist/functions/hook/model-action.hook.js.map +1 -1
  41. package/dist/functions/node/node.abstract.d.ts +84 -0
  42. package/dist/functions/node/node.abstract.js +275 -0
  43. package/dist/functions/node/node.abstract.js.map +1 -0
  44. package/dist/functions/node/node.interface.d.ts +176 -0
  45. package/dist/functions/node/node.interface.js +2 -0
  46. package/dist/functions/node/node.interface.js.map +1 -0
  47. package/dist/index.d.ts +11 -12
  48. package/dist/index.js +10 -11
  49. package/dist/index.js.map +1 -1
  50. package/dist/main.d.ts +7 -9
  51. package/dist/main.js +51 -24
  52. package/dist/main.js.map +1 -1
  53. package/dist/models/app/app.model.d.ts +1 -3
  54. package/dist/models/app/app.model.js +5 -8
  55. package/dist/models/app/app.model.js.map +1 -1
  56. package/dist/models/deployment/deployment.model.d.ts +1 -3
  57. package/dist/models/deployment/deployment.model.js +5 -8
  58. package/dist/models/deployment/deployment.model.js.map +1 -1
  59. package/dist/models/environment/environment.model.d.ts +1 -3
  60. package/dist/models/environment/environment.model.js +5 -9
  61. package/dist/models/environment/environment.model.js.map +1 -1
  62. package/dist/models/execution/execution.model.d.ts +1 -3
  63. package/dist/models/execution/execution.model.js +2 -6
  64. package/dist/models/execution/execution.model.js.map +1 -1
  65. package/dist/models/image/image.model.d.ts +1 -3
  66. package/dist/models/image/image.model.js +5 -8
  67. package/dist/models/image/image.model.js.map +1 -1
  68. package/dist/models/model-action.interface.d.ts +2 -6
  69. package/dist/models/model.abstract.d.ts +7 -307
  70. package/dist/models/model.abstract.js +20 -560
  71. package/dist/models/model.abstract.js.map +1 -1
  72. package/dist/models/model.interface.d.ts +36 -21
  73. package/dist/models/pipeline/pipeline.model.d.ts +1 -3
  74. package/dist/models/pipeline/pipeline.model.js +5 -9
  75. package/dist/models/pipeline/pipeline.model.js.map +1 -1
  76. package/dist/models/region/region.model.d.ts +1 -3
  77. package/dist/models/region/region.model.js +5 -8
  78. package/dist/models/region/region.model.js.map +1 -1
  79. package/dist/models/server/server.model.d.ts +1 -3
  80. package/dist/models/server/server.model.js +5 -8
  81. package/dist/models/server/server.model.js.map +1 -1
  82. package/dist/models/service/service.model.d.ts +1 -3
  83. package/dist/models/service/service.model.js +3 -7
  84. package/dist/models/service/service.model.js.map +1 -1
  85. package/dist/models/subnet/subnet.model.d.ts +3 -4
  86. package/dist/models/subnet/subnet.model.js +9 -18
  87. package/dist/models/subnet/subnet.model.js.map +1 -1
  88. package/dist/modules/module.container.d.ts +2 -2
  89. package/dist/modules/module.container.js.map +1 -1
  90. package/dist/modules/test-module.container.d.ts +2 -2
  91. package/dist/modules/test-module.container.js +8 -10
  92. package/dist/modules/test-module.container.js.map +1 -1
  93. package/dist/overlays/overlay-data.repository.d.ts +2 -4
  94. package/dist/overlays/overlay-data.repository.js +8 -33
  95. package/dist/overlays/overlay-data.repository.js.map +1 -1
  96. package/dist/overlays/overlay.abstract.d.ts +6 -7
  97. package/dist/overlays/overlay.abstract.js +20 -42
  98. package/dist/overlays/overlay.abstract.js.map +1 -1
  99. package/dist/overlays/overlay.service.d.ts +0 -1
  100. package/dist/overlays/overlay.service.js +1 -5
  101. package/dist/overlays/overlay.service.js.map +1 -1
  102. package/dist/resources/resource-data.repository.d.ts +16 -6
  103. package/dist/resources/resource-data.repository.js +115 -15
  104. package/dist/resources/resource-data.repository.js.map +1 -1
  105. package/dist/resources/resource.abstract.d.ts +23 -6
  106. package/dist/resources/resource.abstract.js +144 -10
  107. package/dist/resources/resource.abstract.js.map +1 -1
  108. package/dist/resources/shared-resource.abstract.d.ts +2 -2
  109. package/dist/resources/shared-resource.abstract.js +2 -2
  110. package/dist/resources/shared-resource.abstract.js.map +1 -1
  111. package/dist/services/capture/capture.service.d.ts +1 -2
  112. package/dist/services/capture/capture.service.js +2 -2
  113. package/dist/services/capture/capture.service.js.map +1 -1
  114. package/dist/services/event/event.service.js +1 -1
  115. package/dist/services/event/event.service.js.map +1 -1
  116. package/dist/services/input/input.service.js +2 -2
  117. package/dist/services/input/input.service.js.map +1 -1
  118. package/dist/services/serialization/model/model-serialization.service.js +4 -11
  119. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  120. package/dist/services/serialization/resource/resource-serialization.service.d.ts +4 -4
  121. package/dist/services/serialization/resource/resource-serialization.service.js +15 -18
  122. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  123. package/dist/services/state-management/state-management.service.d.ts +1 -1
  124. package/dist/services/state-management/state-management.service.js +6 -7
  125. package/dist/services/state-management/state-management.service.js.map +1 -1
  126. package/dist/services/transaction/transaction.service.d.ts +2 -3
  127. package/dist/services/transaction/transaction.service.js +88 -90
  128. package/dist/services/transaction/transaction.service.js.map +1 -1
  129. package/package.json +1 -1
  130. package/dist/decorators/container.js.map +0 -1
  131. package/dist/decorators/test-container.js.map +0 -1
@@ -0,0 +1,275 @@
1
+ import { Dependency } from '../dependency/dependency.js';
2
+ import { DiffAction } from '../diff/diff.js';
3
+ /**
4
+ * This is Octo's base class, and all other classes extend from it.
5
+ * It helps provide a common set of methods and properties that is core to Octo.
6
+ *
7
+ * Octo is built as a graph, and this base class can be considered as a generic node.
8
+ * Nodes can have children, and siblings, but only if connected via an edge, called {@link Dependency} here.
9
+ *
10
+ * From this base class, three more base classes are derived,
11
+ * - [Models](/docs/fundamentals/models)
12
+ * - [Resources](/docs/fundamentals/resources)
13
+ * - [Overlays](/docs/fundamentals/overlay-and-anchor)
14
+ *
15
+ * Each of these derived base classes, using the base methods of this class,
16
+ * define their own specific rules on how their graphs should be constructed.
17
+ */
18
+ export class ANode {
19
+ constructor() {
20
+ /**
21
+ * A set of node dependencies with other nodes, represented using a {@link Dependency}.
22
+ */
23
+ this.dependencies = [];
24
+ }
25
+ addChild(onField, child, toField) {
26
+ const cIndex = child.dependencies.findIndex((d) => Object.is(d.to, this));
27
+ const pIndex = this.dependencies.findIndex((d) => Object.is(d.to, child));
28
+ if (cIndex !== -1 || pIndex !== -1) {
29
+ throw new Error('Dependency relationship already exists!');
30
+ }
31
+ const childToParentDependency = new Dependency(child, this);
32
+ childToParentDependency.addBehavior(toField, DiffAction.ADD, onField, DiffAction.ADD);
33
+ childToParentDependency.addBehavior(toField, DiffAction.ADD, onField, DiffAction.UPDATE);
34
+ childToParentDependency.addChildRelationship(toField, onField);
35
+ child.dependencies.push(childToParentDependency);
36
+ const parentToChildDependency = new Dependency(this, child);
37
+ parentToChildDependency.addBehavior(onField, DiffAction.DELETE, toField, DiffAction.DELETE);
38
+ parentToChildDependency.addParentRelationship(onField, toField);
39
+ this.dependencies.push(parentToChildDependency);
40
+ return { childToParentDependency, parentToChildDependency };
41
+ }
42
+ addFieldDependency(behaviors) {
43
+ const index = this.dependencies.findIndex((d) => Object.is(d.from, this) && Object.is(d.to, this));
44
+ const dependency = index > -1 ? this.dependencies[index] : new Dependency(this, this);
45
+ if (index === -1) {
46
+ this.dependencies.push(dependency);
47
+ }
48
+ for (const behavior of behaviors) {
49
+ if (!dependency.hasMatchingBehavior(behavior.onField, behavior.onAction, behavior.toField, behavior.forAction)) {
50
+ dependency.addBehavior(behavior.onField, behavior.onAction, behavior.toField, behavior.forAction);
51
+ }
52
+ }
53
+ }
54
+ addRelationship(to) {
55
+ const thisToThatDependency = new Dependency(this, to);
56
+ this.dependencies.push(thisToThatDependency);
57
+ const thatToThisDependency = new Dependency(to, this);
58
+ to.dependencies.push(thatToThisDependency);
59
+ return { thatToThisDependency, thisToThatDependency };
60
+ }
61
+ getAncestors() {
62
+ const members = [this];
63
+ const membersProcessed = [];
64
+ while (members.length > 0) {
65
+ const member = members.pop();
66
+ // Skip processing an already processed member.
67
+ if (membersProcessed.some((m) => m.getContext() === member.getContext())) {
68
+ continue;
69
+ }
70
+ for (const d of member.dependencies) {
71
+ // If in dependency I am not declared a parent, then d.to is either my parent or has a relationship to me.
72
+ // The behavior of that relationship should be that it must exist for me to exist.
73
+ if (!d.isParentRelationship() &&
74
+ d.hasMatchingBehavior(undefined, DiffAction.ADD, undefined, DiffAction.ADD) &&
75
+ !membersProcessed.some((m) => m.getContext() === d.to.getContext())) {
76
+ members.push(d.to);
77
+ }
78
+ }
79
+ membersProcessed.push(member);
80
+ }
81
+ return membersProcessed;
82
+ }
83
+ getBoundaryMembers() {
84
+ const extenders = [this];
85
+ const members = [];
86
+ const parentOf = {};
87
+ const pushToExtenders = (nodes) => {
88
+ nodes.forEach((node) => {
89
+ if (!members.some((m) => m.getContext() === node.getContext())) {
90
+ extenders.push(node);
91
+ }
92
+ });
93
+ };
94
+ while (extenders.length > 0) {
95
+ const node = extenders.pop();
96
+ const ancestors = node.getAncestors();
97
+ for (const ancestor of ancestors) {
98
+ // Skip processing an already processed ancestor.
99
+ if (members.some((m) => m.getContext() === ancestor.getContext())) {
100
+ continue;
101
+ }
102
+ members.push(ancestor);
103
+ // Check for circular dependencies on ancestor.
104
+ for (const d of ancestor.dependencies) {
105
+ let childContext;
106
+ let parentContext;
107
+ if (d.isParentRelationship()) {
108
+ childContext = d.to.getContext();
109
+ parentContext = d.from.getContext();
110
+ }
111
+ else if (d.isChildRelationship()) {
112
+ childContext = d.from.getContext();
113
+ parentContext = d.to.getContext();
114
+ }
115
+ else {
116
+ // A relationship that is neither parent nor child, will not be reported in circular dependency!
117
+ continue;
118
+ }
119
+ const seen = {};
120
+ const toProcess = [parentContext];
121
+ while (toProcess.length > 0) {
122
+ const context = toProcess.pop();
123
+ if (seen[context]) {
124
+ throw new Error('Found circular dependencies!');
125
+ }
126
+ else {
127
+ seen[context] = true;
128
+ }
129
+ toProcess.push(...(parentOf[context] || []));
130
+ }
131
+ if (!parentOf[childContext]) {
132
+ parentOf[childContext] = [];
133
+ parentOf[childContext].push(parentContext);
134
+ }
135
+ else if (!parentOf[childContext].some((p) => p === parentContext)) {
136
+ parentOf[childContext].push(parentContext);
137
+ }
138
+ }
139
+ }
140
+ const children = node.getChildren();
141
+ for (const name in children) {
142
+ pushToExtenders(children[name].map((d) => d.to));
143
+ }
144
+ const dependents = node.dependencies
145
+ .filter((d) => !d.isParentRelationship() && !d.isChildRelationship())
146
+ .map((d) => d.to);
147
+ pushToExtenders(dependents);
148
+ }
149
+ return members;
150
+ }
151
+ getChild(name, filters = []) {
152
+ const dependencies = this.getChildren(name)[name]?.filter((d) => filters.every((c) => d.to[c.key] === c.value));
153
+ if (!dependencies) {
154
+ return undefined;
155
+ }
156
+ if (dependencies.length > 1) {
157
+ throw new Error('More than one children found! Use getChildren() instead.');
158
+ }
159
+ return dependencies[0].to;
160
+ }
161
+ getChildren(name) {
162
+ return this.dependencies
163
+ .filter((d) => d.isParentRelationship() && (name ? d.to.NODE_NAME === name : true))
164
+ .reduce((accumulator, currentValue) => {
165
+ if (!(currentValue.to.NODE_NAME in accumulator)) {
166
+ accumulator[currentValue.to.NODE_NAME] = [];
167
+ }
168
+ accumulator[currentValue.to.NODE_NAME].push(currentValue);
169
+ return accumulator;
170
+ }, {});
171
+ }
172
+ getContext() {
173
+ if (!this.context) {
174
+ this.context = this.setContext();
175
+ }
176
+ return this.context;
177
+ }
178
+ getDependencies(to) {
179
+ const filters = [];
180
+ if (to) {
181
+ filters.push({ key: 'to', value: to.getContext() });
182
+ }
183
+ return this.dependencies.filter((d) => {
184
+ return filters.every((c) => {
185
+ if (c.key === 'to') {
186
+ return d.to.getContext() === c.value;
187
+ }
188
+ else {
189
+ return true;
190
+ }
191
+ });
192
+ });
193
+ }
194
+ getDependency(to, relationship) {
195
+ const index = this.getDependencyIndex(to, relationship);
196
+ return index > -1 ? this.dependencies[index] : undefined;
197
+ }
198
+ getDependencyIndex(to, relationship) {
199
+ return this.dependencies.findIndex((d) => d.from.getContext() === this.getContext() &&
200
+ d.to.getContext() === to.getContext() &&
201
+ d.getRelationship() !== undefined &&
202
+ d.getRelationship().type === relationship);
203
+ }
204
+ getParents(name) {
205
+ return this.dependencies
206
+ .filter((d) => d.isChildRelationship() && (name ? d.to.NODE_NAME === name : true))
207
+ .reduce((accumulator, currentValue) => {
208
+ if (!(currentValue.to.NODE_NAME in accumulator)) {
209
+ accumulator[currentValue.to.NODE_NAME] = [];
210
+ }
211
+ accumulator[currentValue.to.NODE_NAME].push(currentValue);
212
+ return accumulator;
213
+ }, {});
214
+ }
215
+ getSiblings(name) {
216
+ return this.dependencies
217
+ .filter((d) => !d.isChildRelationship() && !d.isParentRelationship() && (name ? d.to.NODE_NAME === name : true))
218
+ .reduce((accumulator, currentValue) => {
219
+ if (!(currentValue.to.NODE_NAME in accumulator)) {
220
+ accumulator[currentValue.to.NODE_NAME] = [];
221
+ }
222
+ accumulator[currentValue.to.NODE_NAME].push(currentValue);
223
+ return accumulator;
224
+ }, {});
225
+ }
226
+ hasAncestor(node) {
227
+ const nodeParts = node
228
+ .getContext()
229
+ .split(',')
230
+ .map((p) => p.split('='));
231
+ const ancestors = this.getAncestors();
232
+ return ancestors.some((a) => {
233
+ const ancestorParts = a
234
+ .getContext()
235
+ .split(',')
236
+ .reduce((map, p) => {
237
+ const parts = p.split('=');
238
+ map[parts[0]] = parts[1];
239
+ return map;
240
+ }, {});
241
+ return nodeParts.every((p) => ancestorParts[p[0]] === p[1]);
242
+ });
243
+ }
244
+ removeDependency(dependencyIndex) {
245
+ if (dependencyIndex > -1 && dependencyIndex < this.dependencies.length) {
246
+ this.dependencies.splice(dependencyIndex, 1);
247
+ }
248
+ }
249
+ removeRelationship(node) {
250
+ for (let i = this.dependencies.length - 1; i >= 0; i--) {
251
+ const dependency = this.dependencies[i];
252
+ if (dependency.to.getContext() === node.getContext()) {
253
+ this.dependencies.splice(i, 1);
254
+ }
255
+ }
256
+ for (let i = node.dependencies.length - 1; i >= 0; i--) {
257
+ const dependency = node.dependencies[i];
258
+ if (dependency.to.getContext() === this.getContext()) {
259
+ node.dependencies.splice(i, 1);
260
+ }
261
+ }
262
+ }
263
+ /**
264
+ * To create self given its serialized representation.
265
+ * - First argument is the serialized representation.
266
+ * - Second argument is the `deReferenceContext()` function to resolve other nodes self depends on.
267
+ */
268
+ static async unSynth(...args) {
269
+ if (args.length > 4) {
270
+ throw new Error('Too many args in unSynth()');
271
+ }
272
+ throw new Error('Method not implemented! Use derived class implementation');
273
+ }
274
+ }
275
+ //# sourceMappingURL=node.abstract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.abstract.js","sourceRoot":"","sources":["../../../src/functions/node/node.abstract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import type { NodeType, UnknownNode } from '../../app.type.js';
2
+ import type { Dependency, DependencyRelationship } from '../dependency/dependency.js';
3
+ import type { Diff } from '../diff/diff.js';
4
+ /**
5
+ * {@link ANode} interface.
6
+ */
7
+ export interface INode<I, T> {
8
+ /**
9
+ * The unique name of the node.
10
+ * All nodes with same name are of the same category.
11
+ */
12
+ readonly NODE_NAME: string;
13
+ /**
14
+ * The type of the node.
15
+ */
16
+ readonly NODE_TYPE: NodeType;
17
+ /**
18
+ * To add another node as a child of self.
19
+ *
20
+ * @param onField The field in self on which the dependency is being defined.
21
+ * @param child The child node.
22
+ * @param toField The field in child on which the dependency is being defined.
23
+ * @returns
24
+ * - childToParentDependency: The dependency edge from child to self.
25
+ * - parentToChildDependency: The dependency edge from self to child.
26
+ * @throws {@link Error} Dependency relationship already exists!
27
+ */
28
+ addChild(onField: keyof T | string, child: UnknownNode, toField: string): {
29
+ childToParentDependency: Dependency;
30
+ parentToChildDependency: Dependency;
31
+ };
32
+ /**
33
+ * To add another node as a sibling of self.
34
+ *
35
+ * @param to The sibling node.
36
+ * @returns
37
+ * - thatToThisDependency: The dependency edge from sibling to self.
38
+ * - thisToThatDependency: The dependency edge from self to sibling.
39
+ */
40
+ addRelationship(to: UnknownNode): {
41
+ thatToThisDependency: Dependency;
42
+ thisToThatDependency: Dependency;
43
+ };
44
+ /**
45
+ * Compares and calculates the difference between the current version of self node, and the previous version.
46
+ * - Recursively compares self children too.
47
+ *
48
+ * @param previous The previous version of self.
49
+ */
50
+ diff(previous?: T): Promise<Diff[]>;
51
+ /**
52
+ * To compare properties of the current version of self node, vs. the previous version.
53
+ * It is a helper method to the `diff()` method.
54
+ * - This method is called by the {@link diff()} method.
55
+ *
56
+ * @param previous The previous version of self.
57
+ */
58
+ diffProperties(previous: T): Promise<Diff[]>;
59
+ /**
60
+ * To get all ancestors of self.
61
+ * - Includes parent nodes.
62
+ * - Might include sibling nodes,
63
+ * if the dependency behaviors dictate the sibling is necessary for self node to exist.
64
+ */
65
+ getAncestors(): UnknownNode[];
66
+ /**
67
+ * To get a boundary (sub graph) of self.
68
+ * A boundary is a group of nodes that must belong together.
69
+ * The boundary consists of all nodes associated with self,
70
+ * which includes parents, grand parents, children, grand children, and siblings.
71
+ */
72
+ getBoundaryMembers(): UnknownNode[];
73
+ /**
74
+ * To get a child of self that matches the given filters.
75
+ *
76
+ * @param name The {@link NODE_NAME} of the child.
77
+ * @param filters A set of filters, to be applied on children,
78
+ * where `key` is the property name and `value` is the value to filter by.
79
+ * @throws {@link Error} If more than one child is found.
80
+ */
81
+ getChild(name: string, filters: {
82
+ key: string;
83
+ value: any;
84
+ }[]): UnknownNode | undefined;
85
+ /**
86
+ * To get all children of self.
87
+ *
88
+ * @param name The {@link NODE_NAME} of the children.
89
+ * @returns All children as an object with the {@link NODE_NAME} as the key,
90
+ * and self's dependency to the child as the value.
91
+ */
92
+ getChildren(name?: string): {
93
+ [key: string]: Dependency[];
94
+ };
95
+ /**
96
+ * To get the context of self.
97
+ * A context is a string representation of self that uniquely identifies self in the graph.
98
+ */
99
+ getContext(): string;
100
+ /**
101
+ * To get all dependencies of self.
102
+ * - Can be filtered to just dependencies with a single node.
103
+ *
104
+ * @param to The other node. If present, will only return dependencies of self with this node.
105
+ */
106
+ getDependencies(to?: UnknownNode): Dependency[];
107
+ /**
108
+ * To get a dependency of self with another node.
109
+ *
110
+ * @param to The other node.
111
+ * @param relationship The relationship between self and the other node.
112
+ * @returns The dependency with the other node having the given relationship, or `undefined` if not found.
113
+ */
114
+ getDependency(to: UnknownNode, relationship: DependencyRelationship): Dependency | undefined;
115
+ /**
116
+ * To get the index of a dependency of self with another node.
117
+ *
118
+ * @param to The other node.
119
+ * @param relationship The relationship between self and the other node.
120
+ * @returns The index of the dependency with the other node having the given relationship, or `-1` if not found.
121
+ */
122
+ getDependencyIndex(to: UnknownNode, relationship: DependencyRelationship): number;
123
+ /**
124
+ * To get all parent of self.
125
+ *
126
+ * @param name The {@link NODE_NAME} of the parent.
127
+ * @returns All parents as an object with the {@link NODE_NAME} as the key,
128
+ * and self's dependency to the parent as the value.
129
+ */
130
+ getParents(name?: string): {
131
+ [key: string]: Dependency[];
132
+ };
133
+ /**
134
+ * To get all siblings of self.
135
+ *
136
+ * @param name The {@link NODE_NAME} of the sibling.
137
+ * @returns All siblings as an object with the {@link NODE_NAME} as the key,
138
+ * and self's dependency to the sibling as the value.
139
+ */
140
+ getSiblings(name?: string): {
141
+ [key: string]: Dependency[];
142
+ };
143
+ /**
144
+ * To check if given node is an ancestor of self.
145
+ *
146
+ * @param node The other node.
147
+ */
148
+ hasAncestor(node: UnknownNode): boolean;
149
+ /**
150
+ * To remove a dependency from self.
151
+ *
152
+ * @param dependencyIndex The index of the dependency to remove.
153
+ */
154
+ removeDependency(dependencyIndex: number): void;
155
+ /**
156
+ * To remove ALL dependencies from self for the given node.
157
+ *
158
+ * @param node The other node.
159
+ */
160
+ removeRelationship(node: UnknownNode): void;
161
+ /**
162
+ * To set the context of self.
163
+ * A context is a string representation of self that uniquely identifies self in the graph.
164
+ */
165
+ setContext(): string;
166
+ /**
167
+ * Generates a serializable representation of self.
168
+ */
169
+ synth(): I;
170
+ }
171
+ /**
172
+ * Node Reference encapsulates identification information of self.
173
+ */
174
+ export interface INodeReference {
175
+ context: string;
176
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.interface.js","sourceRoot":"","sources":["../../../src/functions/node/node.interface.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,26 +1,25 @@
1
1
  export { Action } from './decorators/action.decorator.js';
2
2
  export { Anchor } from './decorators/anchor.decorator.js';
3
- export { Container } from './decorators/container.js';
4
- export { EnableHook } from './decorators/enable-hook.decorator.js';
5
3
  export { Factory } from './decorators/factory.decorator.js';
6
4
  export { Model } from './decorators/model.decorator.js';
7
- export { Module } from './decorators/module.decorator.js';
5
+ export { type IModuleOptions, Module } from './decorators/module.decorator.js';
8
6
  export { OnEvent } from './decorators/on-event.decorator.js';
9
7
  export { Overlay } from './decorators/overlay.decorator.js';
10
8
  export { Resource } from './decorators/resource.decorator.js';
11
- export { IPackageMock, TestContainer } from './decorators/test-container.js';
12
9
  export { Validate } from './decorators/validate.decorator.js';
13
- export { DependencyRelationship } from './functions/dependency/dependency.js';
10
+ export * from './events/error.event.js';
11
+ export * from './events/event.model.js';
12
+ export * from './events/hook.event.js';
13
+ export * from './events/module.event.js';
14
+ export * from './events/registration.event.js';
15
+ export * from './events/serialization.event.js';
16
+ export * from './events/transaction.event.js';
17
+ export { Container } from './functions/container/container.js';
18
+ export { IPackageMock, TestContainer } from './functions/container/test-container.js';
19
+ export { Dependency, DependencyRelationship, IDependency } from './functions/dependency/dependency.js';
14
20
  export { Diff, DiffAction } from './functions/diff/diff.js';
15
21
  export { DiffUtility } from './functions/diff/diff.utility.js';
16
22
  export { DiffMetadata } from './functions/diff/diff-metadata.js';
17
- export { ErrorEvent, RegistrationErrorEvent } from './events/error.event.js';
18
- export { Event } from './events/event.model.js';
19
- export { CommitHookCallbackDoneEvent, CommitHookEvent, HookEvent, ModelActionHookCallbackDoneEvent, ModelActionHookEvent, PostCommitHookCallbackDoneEvent, PostModelActionHookCallbackDoneEvent, PostResourceActionHookCallbackDoneEvent, PreCommitHookCallbackDoneEvent, PreModelActionHookCallbackDoneEvent, PreResourceActionHookCallbackDoneEvent, ResourceActionHookCallbackDoneEvent, ResourceActionHookEvent, } from './events/hook.event.js';
20
- export { ModuleEvent } from './events/module.event.js';
21
- export { AnchorRegistrationEvent, ModelActionRegistrationEvent, ModelRegistrationEvent, OverlayRegistrationEvent, RegistrationEvent, ResourceActionRegistrationEvent, ResourceRegistrationEvent, } from './events/registration.event.js';
22
- export { ModelDeserializedEvent, ModelSerializedEvent, ResourceDeserializedEvent, ResourceSerializedEvent, SerializationEvent, } from './events/serialization.event.js';
23
- export { ModelActionTransactionEvent, ResourceActionTransactionEvent, TransactionEvent, } from './events/transaction.event.js';
24
23
  export { type IApp } from './models/app/app.interface.js';
25
24
  export { App } from './models/app/app.model.js';
26
25
  export { type IDeployment } from './models/deployment/deployment.interface.js';
package/dist/index.js CHANGED
@@ -1,26 +1,25 @@
1
1
  export { Action } from './decorators/action.decorator.js';
2
2
  export { Anchor } from './decorators/anchor.decorator.js';
3
- export { Container } from './decorators/container.js';
4
- export { EnableHook } from './decorators/enable-hook.decorator.js';
5
3
  export { Factory } from './decorators/factory.decorator.js';
6
4
  export { Model } from './decorators/model.decorator.js';
7
5
  export { Module } from './decorators/module.decorator.js';
8
6
  export { OnEvent } from './decorators/on-event.decorator.js';
9
7
  export { Overlay } from './decorators/overlay.decorator.js';
10
8
  export { Resource } from './decorators/resource.decorator.js';
11
- export { TestContainer } from './decorators/test-container.js';
12
9
  export { Validate } from './decorators/validate.decorator.js';
13
- export { DependencyRelationship } from './functions/dependency/dependency.js';
10
+ export * from './events/error.event.js';
11
+ export * from './events/event.model.js';
12
+ export * from './events/hook.event.js';
13
+ export * from './events/module.event.js';
14
+ export * from './events/registration.event.js';
15
+ export * from './events/serialization.event.js';
16
+ export * from './events/transaction.event.js';
17
+ export { Container } from './functions/container/container.js';
18
+ export { TestContainer } from './functions/container/test-container.js';
19
+ export { Dependency, DependencyRelationship } from './functions/dependency/dependency.js';
14
20
  export { Diff, DiffAction } from './functions/diff/diff.js';
15
21
  export { DiffUtility } from './functions/diff/diff.utility.js';
16
22
  export { DiffMetadata } from './functions/diff/diff-metadata.js';
17
- export { ErrorEvent, RegistrationErrorEvent } from './events/error.event.js';
18
- export { Event } from './events/event.model.js';
19
- export { CommitHookCallbackDoneEvent, CommitHookEvent, HookEvent, ModelActionHookCallbackDoneEvent, ModelActionHookEvent, PostCommitHookCallbackDoneEvent, PostModelActionHookCallbackDoneEvent, PostResourceActionHookCallbackDoneEvent, PreCommitHookCallbackDoneEvent, PreModelActionHookCallbackDoneEvent, PreResourceActionHookCallbackDoneEvent, ResourceActionHookCallbackDoneEvent, ResourceActionHookEvent, } from './events/hook.event.js';
20
- export { ModuleEvent } from './events/module.event.js';
21
- export { AnchorRegistrationEvent, ModelActionRegistrationEvent, ModelRegistrationEvent, OverlayRegistrationEvent, RegistrationEvent, ResourceActionRegistrationEvent, ResourceRegistrationEvent, } from './events/registration.event.js';
22
- export { ModelDeserializedEvent, ModelSerializedEvent, ResourceDeserializedEvent, ResourceSerializedEvent, SerializationEvent, } from './events/serialization.event.js';
23
- export { ModelActionTransactionEvent, ResourceActionTransactionEvent, TransactionEvent, } from './events/transaction.event.js';
24
23
  export { App } from './models/app/app.model.js';
25
24
  export { Deployment } from './models/deployment/deployment.model.js';
26
25
  export { Environment } from './models/environment/environment.model.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAuB,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAgB,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAe,MAAM,sCAAsC,CAAC;AACvG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAElE,OAAO,EAA4B,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAKpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AAEjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAEvF,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
package/dist/main.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { ActionInputs, Constructable, TransactionOptions, UnknownResource } from './app.type.js';
2
- import { Container } from './decorators/container.js';
3
- import { DiffMetadata } from './functions/diff/diff-metadata.js';
2
+ import { Container } from './functions/container/container.js';
4
3
  import { App } from './models/app/app.model.js';
5
4
  import { IModule } from './modules/module.interface.js';
6
5
  import { AResource } from './resources/resource.abstract.js';
@@ -8,8 +7,8 @@ import { IStateProvider } from './services/state-management/state-provider.inter
8
7
  import { TransactionService } from './services/transaction/transaction.service.js';
9
8
  export declare class Octo {
10
9
  private readonly modelStateFileName;
11
- private readonly resourceStateFileName;
12
- private previousApp;
10
+ private readonly actualResourceStateFileName;
11
+ private readonly oldResourceStateFileName;
13
12
  private captureService;
14
13
  private inputService;
15
14
  private modelSerializationService;
@@ -19,21 +18,20 @@ export declare class Octo {
19
18
  private stateManagementService;
20
19
  private transactionService;
21
20
  private validationService;
22
- beginTransaction(app: App, options?: TransactionOptions): Promise<ReturnType<TransactionService['beginTransaction']>>;
23
- commitTransaction(app: App, modelTransaction: DiffMetadata[][]): Promise<void>;
21
+ beginTransaction(app: App, { enableResourceCapture, yieldModelDiffs, yieldModelTransaction, yieldResourceDiffs, yieldResourceTransaction, }?: TransactionOptions): ReturnType<TransactionService['beginTransaction']>;
22
+ private commitTransaction;
24
23
  compose(): Promise<void>;
25
24
  getAllResources(): UnknownResource[];
26
25
  getModuleOutput<T>(module: Constructable<IModule<T>> | string): T | undefined;
27
26
  initialize(stateProvider: IStateProvider, initializeInContainer?: {
28
27
  type: Parameters<typeof Container.get>[0];
29
- options: Parameters<typeof Container.get>[1];
28
+ options?: Parameters<typeof Container.get>[1];
30
29
  }[], excludeInContainer?: {
31
30
  type: Parameters<typeof Container.unRegisterFactory>[0];
32
31
  }[]): Promise<void>;
33
32
  loadModules(modules: Constructable<IModule<any>>[]): void;
34
- registerCapture<T extends AResource<T>>(resourceId: T['resourceId'], properties: Partial<T['properties']>, response: Partial<T['response']>): void;
33
+ registerCapture<T extends AResource<T>>(resourceId: T['resourceId'], response: Partial<T['response']>): void;
35
34
  registerInputs(inputs: ActionInputs): void;
36
- private retrieveModelState;
37
35
  private retrieveResourceState;
38
36
  private saveModelState;
39
37
  private saveResourceState;