@quadnix/octo 0.0.1 → 0.0.2

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 (258) hide show
  1. package/.eslintrc.cjs +26 -0
  2. package/dist/app.type.d.ts +70 -0
  3. package/dist/app.type.js +8 -0
  4. package/dist/app.type.js.map +1 -0
  5. package/dist/decorators/action.decorator.d.ts +2 -0
  6. package/dist/decorators/action.decorator.js +25 -0
  7. package/dist/decorators/action.decorator.js.map +1 -0
  8. package/dist/decorators/anchor.decorator.d.ts +1 -0
  9. package/dist/decorators/anchor.decorator.js +10 -0
  10. package/dist/decorators/anchor.decorator.js.map +1 -0
  11. package/dist/decorators/container.d.ts +23 -0
  12. package/dist/decorators/container.js +93 -0
  13. package/dist/decorators/container.js.map +1 -0
  14. package/dist/decorators/factory.decorator.d.ts +8 -0
  15. package/dist/decorators/factory.decorator.js +7 -0
  16. package/dist/decorators/factory.decorator.js.map +1 -0
  17. package/dist/decorators/model.decorator.d.ts +1 -0
  18. package/dist/decorators/model.decorator.js +10 -0
  19. package/dist/decorators/model.decorator.js.map +1 -0
  20. package/dist/decorators/module.decorator.d.ts +1 -0
  21. package/dist/decorators/module.decorator.js +12 -0
  22. package/dist/decorators/module.decorator.js.map +1 -0
  23. package/dist/decorators/overlay.decorator.d.ts +1 -0
  24. package/dist/decorators/overlay.decorator.js +10 -0
  25. package/dist/decorators/overlay.decorator.js.map +1 -0
  26. package/dist/decorators/resource.decorator.d.ts +1 -0
  27. package/dist/decorators/resource.decorator.js +10 -0
  28. package/dist/decorators/resource.decorator.js.map +1 -0
  29. package/dist/decorators/test-container.d.ts +16 -0
  30. package/dist/decorators/test-container.js +37 -0
  31. package/dist/decorators/test-container.js.map +1 -0
  32. package/dist/functions/dependency/dependency.model.d.ts +53 -0
  33. package/dist/functions/dependency/dependency.model.js +125 -0
  34. package/dist/functions/dependency/dependency.model.js.map +1 -0
  35. package/dist/functions/diff/diff-metadata.model.d.ts +20 -0
  36. package/dist/functions/diff/diff-metadata.model.js +39 -0
  37. package/dist/functions/diff/diff-metadata.model.js.map +1 -0
  38. package/dist/functions/diff/diff.model.d.ts +15 -0
  39. package/dist/functions/diff/diff.model.js +27 -0
  40. package/dist/functions/diff/diff.model.js.map +1 -0
  41. package/dist/functions/diff/diff.utility.d.ts +10 -0
  42. package/dist/functions/diff/diff.utility.js +99 -0
  43. package/dist/functions/diff/diff.utility.js.map +1 -0
  44. package/dist/functions/module/module.abstract.d.ts +12 -0
  45. package/dist/functions/module/module.abstract.js +39 -0
  46. package/dist/functions/module/module.abstract.js.map +1 -0
  47. package/dist/functions/module/module.interface.d.ts +4 -0
  48. package/dist/functions/module/module.interface.js +2 -0
  49. package/dist/functions/module/module.interface.js.map +1 -0
  50. package/dist/index.d.ts +53 -0
  51. package/dist/index.js +36 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/models/action.interface.d.ts +9 -0
  54. package/dist/models/action.interface.js +2 -0
  55. package/dist/models/action.interface.js.map +1 -0
  56. package/dist/models/app/app.interface.d.ts +4 -0
  57. package/dist/models/app/app.interface.js +2 -0
  58. package/dist/models/app/app.interface.js.map +1 -0
  59. package/dist/models/app/app.model.d.ts +23 -0
  60. package/dist/models/app/app.model.js +97 -0
  61. package/dist/models/app/app.model.js.map +1 -0
  62. package/dist/models/deployment/deployment.interface.d.ts +4 -0
  63. package/dist/models/deployment/deployment.interface.js +2 -0
  64. package/dist/models/deployment/deployment.interface.js.map +1 -0
  65. package/dist/models/deployment/deployment.model.d.ts +11 -0
  66. package/dist/models/deployment/deployment.model.js +39 -0
  67. package/dist/models/deployment/deployment.model.js.map +1 -0
  68. package/dist/models/environment/environment.interface.d.ts +7 -0
  69. package/dist/models/environment/environment.interface.js +2 -0
  70. package/dist/models/environment/environment.interface.js.map +1 -0
  71. package/dist/models/environment/environment.model.d.ts +14 -0
  72. package/dist/models/environment/environment.model.js +49 -0
  73. package/dist/models/environment/environment.model.js.map +1 -0
  74. package/dist/models/execution/execution.interface.d.ts +9 -0
  75. package/dist/models/execution/execution.interface.js +2 -0
  76. package/dist/models/execution/execution.interface.js.map +1 -0
  77. package/dist/models/execution/execution.model.d.ts +18 -0
  78. package/dist/models/execution/execution.model.js +70 -0
  79. package/dist/models/execution/execution.model.js.map +1 -0
  80. package/dist/models/image/image.interface.d.ts +7 -0
  81. package/dist/models/image/image.interface.js +2 -0
  82. package/dist/models/image/image.interface.js.map +1 -0
  83. package/dist/models/image/image.model.d.ts +21 -0
  84. package/dist/models/image/image.model.js +56 -0
  85. package/dist/models/image/image.model.js.map +1 -0
  86. package/dist/models/model.abstract.d.ts +34 -0
  87. package/dist/models/model.abstract.js +245 -0
  88. package/dist/models/model.abstract.js.map +1 -0
  89. package/dist/models/model.interface.d.ts +12 -0
  90. package/dist/models/model.interface.js +2 -0
  91. package/dist/models/model.interface.js.map +1 -0
  92. package/dist/models/pipeline/pipeline.interface.d.ts +5 -0
  93. package/dist/models/pipeline/pipeline.interface.js +2 -0
  94. package/dist/models/pipeline/pipeline.interface.js.map +1 -0
  95. package/dist/models/pipeline/pipeline.model.d.ts +14 -0
  96. package/dist/models/pipeline/pipeline.model.js +47 -0
  97. package/dist/models/pipeline/pipeline.model.js.map +1 -0
  98. package/dist/models/region/region.interface.d.ts +4 -0
  99. package/dist/models/region/region.interface.js +2 -0
  100. package/dist/models/region/region.interface.js.map +1 -0
  101. package/dist/models/region/region.model.d.ts +13 -0
  102. package/dist/models/region/region.model.js +49 -0
  103. package/dist/models/region/region.model.js.map +1 -0
  104. package/dist/models/server/server.interface.d.ts +6 -0
  105. package/dist/models/server/server.interface.js +2 -0
  106. package/dist/models/server/server.interface.js.map +1 -0
  107. package/dist/models/server/server.model.d.ts +15 -0
  108. package/dist/models/server/server.model.js +55 -0
  109. package/dist/models/server/server.model.js.map +1 -0
  110. package/dist/models/service/service.interface.d.ts +4 -0
  111. package/dist/models/service/service.interface.js +2 -0
  112. package/dist/models/service/service.interface.js.map +1 -0
  113. package/dist/models/service/service.model.d.ts +9 -0
  114. package/dist/models/service/service.model.js +33 -0
  115. package/dist/models/service/service.model.js.map +1 -0
  116. package/dist/models/support/support.interface.d.ts +5 -0
  117. package/dist/models/support/support.interface.js +2 -0
  118. package/dist/models/support/support.interface.js.map +1 -0
  119. package/dist/models/support/support.model.d.ts +14 -0
  120. package/dist/models/support/support.model.js +52 -0
  121. package/dist/models/support/support.model.js.map +1 -0
  122. package/dist/overlays/anchor.abstract.d.ts +11 -0
  123. package/dist/overlays/anchor.abstract.js +35 -0
  124. package/dist/overlays/anchor.abstract.js.map +1 -0
  125. package/dist/overlays/anchor.interface.d.ts +6 -0
  126. package/dist/overlays/anchor.interface.js +2 -0
  127. package/dist/overlays/anchor.interface.js.map +1 -0
  128. package/dist/overlays/overlay-data.repository.d.ts +20 -0
  129. package/dist/overlays/overlay-data.repository.js +69 -0
  130. package/dist/overlays/overlay-data.repository.js.map +1 -0
  131. package/dist/overlays/overlay.abstract.d.ts +16 -0
  132. package/dist/overlays/overlay.abstract.js +43 -0
  133. package/dist/overlays/overlay.abstract.js.map +1 -0
  134. package/dist/overlays/overlay.interface.d.ts +8 -0
  135. package/dist/overlays/overlay.interface.js +2 -0
  136. package/dist/overlays/overlay.interface.js.map +1 -0
  137. package/dist/overlays/overlay.service.d.ts +14 -0
  138. package/dist/overlays/overlay.service.js +41 -0
  139. package/dist/overlays/overlay.service.js.map +1 -0
  140. package/dist/resources/resource-action.interface.d.ts +6 -0
  141. package/dist/resources/resource-action.interface.js +2 -0
  142. package/dist/resources/resource-action.interface.js.map +1 -0
  143. package/dist/resources/resource-data.repository.d.ts +20 -0
  144. package/dist/resources/resource-data.repository.js +80 -0
  145. package/dist/resources/resource-data.repository.js.map +1 -0
  146. package/dist/resources/resource.abstract.d.ts +22 -0
  147. package/dist/resources/resource.abstract.js +71 -0
  148. package/dist/resources/resource.abstract.js.map +1 -0
  149. package/dist/resources/resource.interface.d.ts +9 -0
  150. package/dist/resources/resource.interface.js +2 -0
  151. package/dist/resources/resource.interface.js.map +1 -0
  152. package/dist/resources/shared-resource.abstract.d.ts +13 -0
  153. package/dist/resources/shared-resource.abstract.js +44 -0
  154. package/dist/resources/shared-resource.abstract.js.map +1 -0
  155. package/dist/services/serialization/model/model-serialization.service.d.ts +15 -0
  156. package/dist/services/serialization/model/model-serialization.service.js +138 -0
  157. package/dist/services/serialization/model/model-serialization.service.js.map +1 -0
  158. package/dist/services/serialization/resource/resource-serialization.service.d.ts +14 -0
  159. package/dist/services/serialization/resource/resource-serialization.service.js +132 -0
  160. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -0
  161. package/dist/services/state-management/local.state-provider.d.ts +8 -0
  162. package/dist/services/state-management/local.state-provider.js +18 -0
  163. package/dist/services/state-management/local.state-provider.js.map +1 -0
  164. package/dist/services/state-management/state-management.service.d.ts +12 -0
  165. package/dist/services/state-management/state-management.service.js +47 -0
  166. package/dist/services/state-management/state-management.service.js.map +1 -0
  167. package/dist/services/state-management/state-provider.interface.d.ts +5 -0
  168. package/dist/services/state-management/state-provider.interface.js +2 -0
  169. package/dist/services/state-management/state-provider.interface.js.map +1 -0
  170. package/dist/services/transaction/transaction.service.d.ts +26 -0
  171. package/dist/services/transaction/transaction.service.js +254 -0
  172. package/dist/services/transaction/transaction.service.js.map +1 -0
  173. package/dist/tsconfig.build.tsbuildinfo +1 -0
  174. package/package.json +52 -16
  175. package/src/app.type.ts +56 -0
  176. package/src/decorators/action.decorator.spec.ts +43 -0
  177. package/src/decorators/action.decorator.ts +24 -0
  178. package/src/decorators/anchor.decorator.ts +10 -0
  179. package/src/decorators/container.spec.ts +104 -0
  180. package/src/decorators/container.ts +133 -0
  181. package/src/decorators/factory.decorator.ts +13 -0
  182. package/src/decorators/model.decorator.ts +10 -0
  183. package/src/decorators/module.decorator.ts +13 -0
  184. package/src/decorators/overlay.decorator.ts +10 -0
  185. package/src/decorators/resource.decorator.ts +10 -0
  186. package/src/decorators/test-container.spec.ts +50 -0
  187. package/src/decorators/test-container.ts +56 -0
  188. package/src/functions/dependency/dependency.model.spec.ts +43 -0
  189. package/src/functions/dependency/dependency.model.ts +178 -0
  190. package/src/functions/diff/diff-metadata.model.ts +51 -0
  191. package/src/functions/diff/diff.model.ts +33 -0
  192. package/src/functions/diff/diff.utility.ts +163 -0
  193. package/src/functions/module/module.abstract.ts +59 -0
  194. package/src/functions/module/module.interface.ts +5 -0
  195. package/src/index.ts +62 -0
  196. package/src/models/action.interface.ts +35 -0
  197. package/src/models/app/app.interface.ts +5 -0
  198. package/src/models/app/app.model.ts +111 -0
  199. package/src/models/deployment/deployment.interface.ts +5 -0
  200. package/src/models/deployment/deployment.model.ts +35 -0
  201. package/src/models/environment/environment.interface.ts +6 -0
  202. package/src/models/environment/environment.model.spec.ts +125 -0
  203. package/src/models/environment/environment.model.ts +55 -0
  204. package/src/models/execution/execution.interface.ts +8 -0
  205. package/src/models/execution/execution.model.spec.ts +62 -0
  206. package/src/models/execution/execution.model.ts +89 -0
  207. package/src/models/image/image.interface.ts +8 -0
  208. package/src/models/image/image.model.ts +62 -0
  209. package/src/models/model.abstract.ts +324 -0
  210. package/src/models/model.interface.ts +42 -0
  211. package/src/models/pipeline/pipeline.interface.ts +6 -0
  212. package/src/models/pipeline/pipeline.model.ts +47 -0
  213. package/src/models/region/region.interface.ts +5 -0
  214. package/src/models/region/region.model.spec.ts +162 -0
  215. package/src/models/region/region.model.ts +48 -0
  216. package/src/models/server/server.interface.ts +7 -0
  217. package/src/models/server/server.model.ts +56 -0
  218. package/src/models/service/service.interface.ts +5 -0
  219. package/src/models/service/service.model.ts +25 -0
  220. package/src/models/support/support.interface.ts +6 -0
  221. package/src/models/support/support.model.spec.ts +78 -0
  222. package/src/models/support/support.model.ts +52 -0
  223. package/src/overlays/anchor.abstract.ts +41 -0
  224. package/src/overlays/anchor.interface.ts +7 -0
  225. package/src/overlays/anchor.spec.ts +41 -0
  226. package/src/overlays/overlay-data.repository.ts +76 -0
  227. package/src/overlays/overlay.abstract.ts +64 -0
  228. package/src/overlays/overlay.interface.ts +9 -0
  229. package/src/overlays/overlay.service.ts +38 -0
  230. package/src/overlays/overlay.spec.ts +86 -0
  231. package/src/resources/resource-action.interface.ts +9 -0
  232. package/src/resources/resource-data.repository.spec.ts +133 -0
  233. package/src/resources/resource-data.repository.ts +92 -0
  234. package/src/resources/resource.abstract.ts +108 -0
  235. package/src/resources/resource.interface.ts +7 -0
  236. package/src/resources/resource.spec.ts +60 -0
  237. package/src/resources/shared-resource.abstract.ts +53 -0
  238. package/src/resources/shared-resource.spec.ts +133 -0
  239. package/src/services/serialization/model/__snapshots__/model-serialization.service.spec.ts.snap +656 -0
  240. package/src/services/serialization/model/model-serialization.service.spec.ts +195 -0
  241. package/src/services/serialization/model/model-serialization.service.ts +172 -0
  242. package/src/services/serialization/resource/__snapshots__/resource-serialization.service.spec.ts.snap +284 -0
  243. package/src/services/serialization/resource/resource-serialization.service.spec.ts +311 -0
  244. package/src/services/serialization/resource/resource-serialization.service.ts +166 -0
  245. package/src/services/state-management/local.state-provider.spec.ts +42 -0
  246. package/src/services/state-management/local.state-provider.ts +23 -0
  247. package/src/services/state-management/state-management.service.ts +43 -0
  248. package/src/services/state-management/state-provider.interface.ts +5 -0
  249. package/src/services/transaction/__snapshots__/transaction.service.spec.ts.snap +284 -0
  250. package/src/services/transaction/transaction.service.spec.ts +823 -0
  251. package/src/services/transaction/transaction.service.ts +386 -0
  252. package/test/app.e2e-spec.ts +104 -0
  253. package/test/helpers/test-classes.ts +31 -0
  254. package/test/models/__snapshots__/model.e2e-spec.ts.snap +451 -0
  255. package/test/models/model.e2e-spec.ts +366 -0
  256. package/tsconfig.build.json +4 -0
  257. package/tsconfig.json +9 -0
  258. package/index.js +0 -5
package/.eslintrc.cjs ADDED
@@ -0,0 +1,26 @@
1
+ module.exports = {
2
+ extends: ['../../.eslintrc.cjs'],
3
+ ignorePatterns: ['coverage', 'dist', 'node_modules'],
4
+ parserOptions: {
5
+ ecmaVersion: '2022',
6
+ extraFileExtensions: ['.json'],
7
+ project: 'tsconfig.json',
8
+ sourceType: 'module',
9
+ tsconfigRootDir: __dirname,
10
+ },
11
+ root: true,
12
+ rules: {
13
+ '@nx/enforce-module-boundaries': [
14
+ 'error',
15
+ {
16
+ allow: [],
17
+ depConstraints: [
18
+ {
19
+ onlyDependOnLibsWithTags: ['scope:octo'],
20
+ sourceTag: 'scope:octo',
21
+ },
22
+ ],
23
+ },
24
+ ],
25
+ },
26
+ };
@@ -0,0 +1,70 @@
1
+ import { IDependency } from './functions/dependency/dependency.model.js';
2
+ import { IModule } from './functions/module/module.interface.js';
3
+ import { IAnchor } from './overlays/anchor.interface.js';
4
+ import { AOverlay } from './overlays/overlay.abstract.js';
5
+ import { AModel } from './models/model.abstract.js';
6
+ import { IModel } from './models/model.interface.js';
7
+ import { IOverlay } from './overlays/overlay.interface.js';
8
+ import { AResource } from './resources/resource.abstract.js';
9
+ import { IResource } from './resources/resource.interface.js';
10
+ import { ASharedResource } from './resources/shared-resource.abstract.js';
11
+ export declare enum ModelType {
12
+ MODEL = "model",
13
+ OVERLAY = "overlay",
14
+ RESOURCE = "resource",
15
+ SHARED_RESOURCE = "shared-resource"
16
+ }
17
+ export type ActionInputs = {
18
+ [key: string]: string | UnknownResource;
19
+ };
20
+ export type ActionOutputs = {
21
+ [key: string]: UnknownResource;
22
+ };
23
+ export type Constructable<T> = new (...args: any[]) => T;
24
+ export type ModelSerializedOutput = {
25
+ anchors: (IAnchor & {
26
+ className: string;
27
+ })[];
28
+ dependencies: IDependency[];
29
+ models: {
30
+ [p: string]: {
31
+ className: string;
32
+ model: IUnknownModel;
33
+ };
34
+ };
35
+ modules: {
36
+ className: string;
37
+ module: IModule;
38
+ }[];
39
+ overlays: {
40
+ className: string;
41
+ overlay: IOverlay;
42
+ }[];
43
+ };
44
+ export type ResourceSerializedOutput = {
45
+ dependencies: IDependency[];
46
+ resources: {
47
+ [p: string]: {
48
+ className: string;
49
+ resource: IResource;
50
+ };
51
+ };
52
+ sharedResources: {
53
+ [p: string]: {
54
+ className: string;
55
+ resource: IResource;
56
+ };
57
+ };
58
+ };
59
+ export type SupportApplicationType = 'nginx';
60
+ export type TransactionOptions = {
61
+ yieldModelTransaction?: boolean;
62
+ yieldNewResources?: boolean;
63
+ yieldResourceDiffs?: boolean;
64
+ yieldResourceTransaction?: boolean;
65
+ };
66
+ export type IUnknownModel = IModel<unknown, unknown>;
67
+ export type UnknownModel = AModel<unknown, unknown>;
68
+ export type UnknownOverlay = AOverlay<unknown>;
69
+ export type UnknownResource = AResource<unknown>;
70
+ export type UnknownSharedResource = ASharedResource<unknown>;
@@ -0,0 +1,8 @@
1
+ export var ModelType;
2
+ (function (ModelType) {
3
+ ModelType["MODEL"] = "model";
4
+ ModelType["OVERLAY"] = "overlay";
5
+ ModelType["RESOURCE"] = "resource";
6
+ ModelType["SHARED_RESOURCE"] = "shared-resource";
7
+ })(ModelType = ModelType || (ModelType = {}));
8
+ //# sourceMappingURL=app.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.type.js","sourceRoot":"","sources":["../src/app.type.ts"],"names":[],"mappings":"AAWA,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,gCAAmB,CAAA;IACnB,kCAAqB,CAAA;IACrB,gDAAmC,CAAA;AACrC,CAAC,EALW,SAAS,GAAT,SAAS,KAAT,SAAS,QAKpB"}
@@ -0,0 +1,2 @@
1
+ import { ModelType } from '../app.type.js';
2
+ export declare function Action(type: ModelType): (constructor: any) => void;
@@ -0,0 +1,25 @@
1
+ import { ModelType } from '../app.type.js';
2
+ import { TransactionService } from '../services/transaction/transaction.service.js';
3
+ import { Container } from './container.js';
4
+ export function Action(type) {
5
+ return function (constructor) {
6
+ Container.get(TransactionService).then(async (transactionService) => {
7
+ if (type === ModelType.MODEL) {
8
+ const modelAction = await Container.get(constructor.name);
9
+ transactionService.registerModelActions([modelAction]);
10
+ }
11
+ else if (type === ModelType.OVERLAY) {
12
+ const modelAction = await Container.get(constructor.name);
13
+ transactionService.registerOverlayActions([modelAction]);
14
+ }
15
+ else if (type === ModelType.RESOURCE) {
16
+ const resourceAction = await Container.get(constructor.name);
17
+ transactionService.registerResourceActions([resourceAction]);
18
+ }
19
+ else {
20
+ throw new Error('ModelType not recognized in @Action decorator!');
21
+ }
22
+ });
23
+ };
24
+ }
25
+ //# sourceMappingURL=action.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.decorator.js","sourceRoot":"","sources":["../../src/decorators/action.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,MAAM,CAAC,IAAe;IACpC,OAAO,UAAU,WAAgB;QAC/B,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE;YAClE,IAAI,IAAI,KAAK,SAAS,CAAC,KAAK,EAAE;gBAC5B,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,GAAG,CAAuC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAChG,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;aACxD;iBAAM,IAAI,IAAI,KAAK,SAAS,CAAC,OAAO,EAAE;gBACrC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,GAAG,CAAuC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAChG,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;aAC1D;iBAAM,IAAI,IAAI,KAAK,SAAS,CAAC,QAAQ,EAAE;gBACtC,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,GAAG,CAAkB,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9E,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;aAC9D;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;aACnE;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function Anchor(): (constructor: any) => void;
@@ -0,0 +1,10 @@
1
+ import { ModelSerializationService } from '../services/serialization/model/model-serialization.service.js';
2
+ import { Container } from './container.js';
3
+ export function Anchor() {
4
+ return function (constructor) {
5
+ Container.get(ModelSerializationService).then((modelSerializationService) => {
6
+ modelSerializationService.registerClass(constructor.name, constructor);
7
+ });
8
+ };
9
+ }
10
+ //# sourceMappingURL=anchor.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor.decorator.js","sourceRoot":"","sources":["../../src/decorators/anchor.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,MAAM;IACpB,OAAO,UAAU,WAAgB;QAC/B,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,EAAE;YAC1E,yBAAyB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Constructable } from '../app.type.js';
2
+ type Factory<T> = {
3
+ create: (...args: unknown[]) => Promise<T>;
4
+ };
5
+ export declare class Container {
6
+ private static FACTORY_TIMEOUT_IN_MS;
7
+ private static readonly factories;
8
+ static get<T>(type: Constructable<T> | string, options?: {
9
+ args?: unknown[];
10
+ metadata?: {
11
+ [key: string]: string;
12
+ };
13
+ }): Promise<T>;
14
+ static registerFactory<T>(type: Constructable<T> | string, factory: Factory<T>, options?: {
15
+ metadata?: {
16
+ [key: string]: string;
17
+ };
18
+ }): void;
19
+ static reset(): void;
20
+ static setDefault<T>(type: Constructable<T> | string, factory: Factory<T>): void;
21
+ static setFactoryTimeout(timeoutInMs: number): void;
22
+ }
23
+ export {};
@@ -0,0 +1,93 @@
1
+ class Container {
2
+ static FACTORY_TIMEOUT_IN_MS = 5000;
3
+ static factories = {};
4
+ static async get(type, options) {
5
+ const args = options?.args || [];
6
+ const metadata = options?.metadata;
7
+ const name = typeof type === 'string' ? type : type.name;
8
+ if (!(name in this.factories)) {
9
+ this.factories[name] = [];
10
+ }
11
+ let factoryContainer;
12
+ if (!metadata) {
13
+ factoryContainer = this.factories[name].find((f) => f.default);
14
+ }
15
+ else {
16
+ const filters = [];
17
+ for (const key in metadata) {
18
+ filters.push({ key, value: metadata[key] });
19
+ }
20
+ factoryContainer = this.factories[name].find((f) => filters.every((c) => f.metadata[c.key] === c.value));
21
+ }
22
+ if (factoryContainer?.factory) {
23
+ if (!Array.isArray(factoryContainer.factory)) {
24
+ return factoryContainer.factory.create(...args);
25
+ }
26
+ else {
27
+ const factory = await factoryContainer.factory[0];
28
+ return factory.create(...args);
29
+ }
30
+ }
31
+ const newFactoryContainer = {
32
+ default: false,
33
+ metadata,
34
+ };
35
+ this.factories[name].push(newFactoryContainer);
36
+ let promiseResolver;
37
+ let promiseTimeout;
38
+ const promise = new Promise((resolve, reject) => {
39
+ promiseTimeout = setTimeout(() => {
40
+ reject(new Error(`Timed out waiting for factory ${name} to resolve!`));
41
+ }, this.FACTORY_TIMEOUT_IN_MS);
42
+ promiseResolver = resolve;
43
+ });
44
+ newFactoryContainer.factory = [promise, promiseResolver];
45
+ const factory = await promise;
46
+ if (promiseTimeout) {
47
+ clearTimeout(promiseTimeout);
48
+ }
49
+ return factory.create(...args);
50
+ }
51
+ static registerFactory(type, factory, options) {
52
+ const metadata = options?.metadata || {};
53
+ const name = typeof type === 'string' ? type : type.name;
54
+ if (!(name in this.factories)) {
55
+ this.factories[name] = [];
56
+ }
57
+ const filters = [];
58
+ for (const key in metadata) {
59
+ filters.push({ key, value: metadata[key] });
60
+ }
61
+ const factoryContainer = this.factories[name].find((f) => filters.every((c) => f.metadata[c.key] === c.value));
62
+ if (factoryContainer?.factory) {
63
+ if (!Array.isArray(factoryContainer.factory)) {
64
+ return;
65
+ }
66
+ factoryContainer.metadata = metadata;
67
+ const resolve = factoryContainer.factory[1];
68
+ resolve(factory);
69
+ factoryContainer.factory = factory;
70
+ this.setDefault(type, factory);
71
+ return;
72
+ }
73
+ this.factories[name].push({ default: false, factory, metadata });
74
+ this.setDefault(type, factory);
75
+ }
76
+ static reset() {
77
+ this.FACTORY_TIMEOUT_IN_MS = 5000;
78
+ for (const name in this.factories) {
79
+ delete this.factories[name];
80
+ }
81
+ }
82
+ static setDefault(type, factory) {
83
+ const name = typeof type === 'string' ? type : type.name;
84
+ this.factories[name]?.forEach((f) => {
85
+ f.default = f.factory.name === factory.name;
86
+ });
87
+ }
88
+ static setFactoryTimeout(timeoutInMs) {
89
+ this.FACTORY_TIMEOUT_IN_MS = timeoutInMs;
90
+ }
91
+ }
92
+ export { Container };
93
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/decorators/container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Constructable } from '../app.type.js';
2
+ export declare function Factory<T>(type: Constructable<T> | string, options?: {
3
+ metadata?: {
4
+ [key: string]: string;
5
+ };
6
+ }): (constructor: {
7
+ create: (...args: unknown[]) => Promise<T>;
8
+ }) => void;
@@ -0,0 +1,7 @@
1
+ import { Container } from './container.js';
2
+ export function Factory(type, options) {
3
+ return function (constructor) {
4
+ Container.registerFactory(type, constructor, options);
5
+ };
6
+ }
7
+ //# sourceMappingURL=factory.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.decorator.js","sourceRoot":"","sources":["../../src/decorators/factory.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,OAAO,CACrB,IAA+B,EAC/B,OAEC;IAED,OAAO,UAAU,WAA2D;QAC1E,SAAS,CAAC,eAAe,CAAI,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function Model(): (constructor: any) => void;
@@ -0,0 +1,10 @@
1
+ import { ModelSerializationService } from '../services/serialization/model/model-serialization.service.js';
2
+ import { Container } from './container.js';
3
+ export function Model() {
4
+ return function (constructor) {
5
+ Container.get(ModelSerializationService).then((modelSerializationService) => {
6
+ modelSerializationService.registerClass(constructor.name, constructor);
7
+ });
8
+ };
9
+ }
10
+ //# sourceMappingURL=model.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.decorator.js","sourceRoot":"","sources":["../../src/decorators/model.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,KAAK;IACnB,OAAO,UAAU,WAAgB;QAC/B,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,EAAE;YAC1E,yBAAyB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function Module(): (constructor: any) => void;
@@ -0,0 +1,12 @@
1
+ import { ModelSerializationService } from '../services/serialization/model/model-serialization.service.js';
2
+ import { Container } from './container.js';
3
+ export function Module() {
4
+ return function (constructor) {
5
+ Container.get(ModelSerializationService).then((modelSerializationService) => {
6
+ Container.get(constructor.name).then((module) => {
7
+ modelSerializationService.registerModule(module);
8
+ });
9
+ });
10
+ };
11
+ }
12
+ //# sourceMappingURL=module.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.decorator.js","sourceRoot":"","sources":["../../src/decorators/module.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,MAAM;IACpB,OAAO,UAAU,WAAgB;QAC/B,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,EAAE;YAC1E,SAAS,CAAC,GAAG,CAAU,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvD,yBAAyB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function Overlay(): (constructor: any) => void;
@@ -0,0 +1,10 @@
1
+ import { ModelSerializationService } from '../services/serialization/model/model-serialization.service.js';
2
+ import { Container } from './container.js';
3
+ export function Overlay() {
4
+ return function (constructor) {
5
+ Container.get(ModelSerializationService).then((modelSerializationService) => {
6
+ modelSerializationService.registerClass(constructor.name, constructor);
7
+ });
8
+ };
9
+ }
10
+ //# sourceMappingURL=overlay.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.decorator.js","sourceRoot":"","sources":["../../src/decorators/overlay.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,OAAO;IACrB,OAAO,UAAU,WAAgB;QAC/B,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,EAAE;YAC1E,yBAAyB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function Resource(): (constructor: any) => void;
@@ -0,0 +1,10 @@
1
+ import { ResourceSerializationService } from '../services/serialization/resource/resource-serialization.service.js';
2
+ import { Container } from './container.js';
3
+ export function Resource() {
4
+ return function (constructor) {
5
+ Container.get(ResourceSerializationService).then((resourceSerializationService) => {
6
+ resourceSerializationService.registerClass(constructor.name, constructor);
7
+ });
8
+ };
9
+ }
10
+ //# sourceMappingURL=resource.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.decorator.js","sourceRoot":"","sources":["../../src/decorators/resource.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sEAAsE,CAAC;AACpH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,WAAgB;QAC/B,SAAS,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,4BAA4B,EAAE,EAAE;YAChF,4BAA4B,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Constructable } from '../app.type.js';
2
+ type FactoryMock<T> = {
3
+ metadata?: {
4
+ [key: string]: string;
5
+ };
6
+ type: Constructable<T> | string;
7
+ value: T;
8
+ };
9
+ type TestContainerOptions = {
10
+ factoryTimeoutInMs?: number;
11
+ };
12
+ export declare class TestContainer {
13
+ private static createTestFactory;
14
+ static create(mocks: FactoryMock<unknown>[], options: TestContainerOptions): void;
15
+ }
16
+ export {};
@@ -0,0 +1,37 @@
1
+ import { DiffUtility } from '../functions/diff/diff.utility.js';
2
+ import { Container } from './container.js';
3
+ export class TestContainer {
4
+ static createTestFactory(mock) {
5
+ return class {
6
+ static mock = mock;
7
+ static async create() {
8
+ return this.mock.value;
9
+ }
10
+ };
11
+ }
12
+ static create(mocks, options) {
13
+ const oldFactories = { ...Container['factories'] };
14
+ Container.reset();
15
+ if (options.factoryTimeoutInMs) {
16
+ Container.setFactoryTimeout(options.factoryTimeoutInMs);
17
+ }
18
+ for (const mock of mocks) {
19
+ const mockClassName = typeof mock.type === 'string' ? mock.type : mock.type.name;
20
+ const mockMetadata = mock.metadata || {};
21
+ const registeredFactories = oldFactories[mockClassName] || [];
22
+ const matchingFactoryIndex = registeredFactories.findIndex((f) => DiffUtility.isObjectDeepEquals(f.metadata, mockMetadata));
23
+ if (matchingFactoryIndex > -1) {
24
+ oldFactories[mockClassName][matchingFactoryIndex].factory = this.createTestFactory(mock);
25
+ }
26
+ }
27
+ for (const name in oldFactories) {
28
+ for (const oldFactory of oldFactories[name]) {
29
+ Container.registerFactory(name, oldFactory.factory, { metadata: oldFactory.metadata });
30
+ if (oldFactory.default) {
31
+ Container.setDefault(name, oldFactory.factory);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=test-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-container.js","sourceRoot":"","sources":["../../src/decorators/test-container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAY3C,MAAM,OAAO,aAAa;IAChB,MAAM,CAAC,iBAAiB,CAAI,IAAoB;QACtD,OAAO;YACL,MAAM,CAAC,IAAI,GAAmB,IAAI,CAAC;YAEnC,MAAM,CAAC,KAAK,CAAC,MAAM;gBACjB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAA6B,EAAE,OAA6B;QACxE,MAAM,YAAY,GAAG,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,IAAI,OAAO,CAAC,kBAAkB,EAAE;YAC9B,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;SACzD;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACzC,MAAM,mBAAmB,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/D,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CACzD,CAAC;YAEF,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE;gBAC7B,YAAY,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aAC1F;SACF;QAED,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;YAC/B,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;gBAC3C,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,OAA2B,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3G,IAAI,UAAU,CAAC,OAAO,EAAE;oBACtB,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAA2B,CAAC,CAAC;iBACpE;aACF;SACF;IACH,CAAC;CACF"}
@@ -0,0 +1,53 @@
1
+ import { UnknownModel } from '../../app.type.js';
2
+ import { DiffAction } from '../diff/diff.model.js';
3
+ declare class DependencyBehavior {
4
+ forAction: DiffAction;
5
+ onAction: DiffAction;
6
+ onField: string;
7
+ toField: string;
8
+ constructor(onField: string, onAction: DiffAction, toField: string, forAction: DiffAction);
9
+ }
10
+ export declare enum DependencyRelationship {
11
+ CHILD = "child",
12
+ PARENT = "parent"
13
+ }
14
+ export interface IDependency {
15
+ behaviors: {
16
+ forAction: DependencyBehavior['forAction'];
17
+ onAction: DependencyBehavior['onAction'];
18
+ onField: DependencyBehavior['onField'];
19
+ toField: DependencyBehavior['toField'];
20
+ }[];
21
+ from: string;
22
+ relationship?: {
23
+ onField: DependencyBehavior['onField'];
24
+ toField: DependencyBehavior['toField'];
25
+ type: DependencyRelationship;
26
+ };
27
+ to: string;
28
+ }
29
+ export declare class Dependency {
30
+ private readonly behaviors;
31
+ readonly from: UnknownModel;
32
+ private relationship;
33
+ readonly to: UnknownModel;
34
+ constructor(from: UnknownModel, to: UnknownModel);
35
+ private getBehaviorIndex;
36
+ addBehavior(onField: string, onAction: DiffAction, toField: string, forAction: DiffAction): void;
37
+ addChildRelationship(onField: string, toField: string): void;
38
+ addParentRelationship(onField: string, toField: string): void;
39
+ hasMatchingBehavior(onField?: string, onAction?: DiffAction, toField?: string, forAction?: DiffAction): boolean;
40
+ isChildRelationship(): boolean;
41
+ isEqual(dependency: Dependency): boolean;
42
+ isParentRelationship(): boolean;
43
+ getRelationship(): {
44
+ onField: string;
45
+ toField: string;
46
+ type: DependencyRelationship;
47
+ } | undefined;
48
+ removeBehavior(onField: string, onAction: DiffAction, toField: string, forAction: DiffAction): void;
49
+ synth(): IDependency;
50
+ toJSON(): object;
51
+ static unSynth(from: UnknownModel, to: UnknownModel, dependency: IDependency): Dependency;
52
+ }
53
+ export {};
@@ -0,0 +1,125 @@
1
+ class DependencyBehavior {
2
+ forAction;
3
+ onAction;
4
+ onField;
5
+ toField;
6
+ constructor(onField, onAction, toField, forAction) {
7
+ this.onField = onField;
8
+ this.onAction = onAction;
9
+ this.toField = toField;
10
+ this.forAction = forAction;
11
+ }
12
+ }
13
+ export var DependencyRelationship;
14
+ (function (DependencyRelationship) {
15
+ DependencyRelationship["CHILD"] = "child";
16
+ DependencyRelationship["PARENT"] = "parent";
17
+ })(DependencyRelationship = DependencyRelationship || (DependencyRelationship = {}));
18
+ export class Dependency {
19
+ behaviors = [];
20
+ from;
21
+ relationship;
22
+ to;
23
+ constructor(from, to) {
24
+ this.from = from;
25
+ this.to = to;
26
+ }
27
+ getBehaviorIndex(onField, onAction, toField, forAction) {
28
+ return this.behaviors.findIndex((b) => b.onField === onField && b.onAction === onAction && b.toField === toField && b.forAction === forAction);
29
+ }
30
+ addBehavior(onField, onAction, toField, forAction) {
31
+ if (!this.from.hasOwnProperty(onField) || !this.to.hasOwnProperty(toField)) {
32
+ throw new Error('Invalid field name is not a property of given model!');
33
+ }
34
+ if (this.getBehaviorIndex(onField, onAction, toField, forAction) === -1) {
35
+ this.behaviors.push(new DependencyBehavior(onField, onAction, toField, forAction));
36
+ }
37
+ }
38
+ addChildRelationship(onField, toField) {
39
+ if (this.relationship) {
40
+ throw new Error('Dependency relationship already exists!');
41
+ }
42
+ this.relationship = { onField, toField, type: DependencyRelationship.CHILD };
43
+ }
44
+ addParentRelationship(onField, toField) {
45
+ if (this.relationship) {
46
+ throw new Error('Dependency relationship already exists!');
47
+ }
48
+ this.relationship = { onField, toField, type: DependencyRelationship.PARENT };
49
+ }
50
+ hasMatchingBehavior(onField, onAction, toField, forAction) {
51
+ return this.behaviors.some((b) => {
52
+ const onFieldCondition = onField ? b.onField === onField : true;
53
+ const onActionCondition = onAction ? b.onAction === onAction : true;
54
+ const toFieldCondition = toField ? b.toField === toField : true;
55
+ const forActionCondition = forAction ? b.forAction === forAction : true;
56
+ return onFieldCondition && onActionCondition && toFieldCondition && forActionCondition;
57
+ });
58
+ }
59
+ isChildRelationship() {
60
+ return this.relationship && this.relationship.type === DependencyRelationship.CHILD;
61
+ }
62
+ isEqual(dependency) {
63
+ return (this.from.getContext() === dependency.from.getContext() && this.to.getContext() === dependency.to.getContext());
64
+ }
65
+ isParentRelationship() {
66
+ return this.relationship && this.relationship.type === DependencyRelationship.PARENT;
67
+ }
68
+ getRelationship() {
69
+ return this.relationship;
70
+ }
71
+ removeBehavior(onField, onAction, toField, forAction) {
72
+ const index = this.getBehaviorIndex(onField, onAction, toField, forAction);
73
+ if (index === -1) {
74
+ throw new Error('Dependency behavior not found!');
75
+ }
76
+ this.behaviors.splice(index, 1);
77
+ }
78
+ synth() {
79
+ const behaviors = [];
80
+ this.behaviors.forEach((b) => {
81
+ behaviors.push({
82
+ forAction: b.forAction,
83
+ onAction: b.onAction,
84
+ onField: b.onField,
85
+ toField: b.toField,
86
+ });
87
+ });
88
+ return {
89
+ behaviors,
90
+ from: this.from.getContext(),
91
+ relationship: this.relationship
92
+ ? {
93
+ onField: this.relationship.onField,
94
+ toField: this.relationship.toField,
95
+ type: this.relationship.type,
96
+ }
97
+ : undefined,
98
+ to: this.to.getContext(),
99
+ };
100
+ }
101
+ toJSON() {
102
+ return {
103
+ from: this.from.getContext(),
104
+ relationship: this.relationship
105
+ ? {
106
+ onField: this.relationship.onField,
107
+ toField: this.relationship.toField,
108
+ type: this.relationship.type,
109
+ }
110
+ : undefined,
111
+ to: this.to.getContext(),
112
+ };
113
+ }
114
+ static unSynth(from, to, dependency) {
115
+ const newDependency = new Dependency(from, to);
116
+ dependency.behaviors.forEach((b) => {
117
+ newDependency.addBehavior(b.onField, b.onAction, b.toField, b.forAction);
118
+ });
119
+ if (dependency.relationship) {
120
+ newDependency.relationship = { ...dependency.relationship };
121
+ }
122
+ return newDependency;
123
+ }
124
+ }
125
+ //# sourceMappingURL=dependency.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency.model.js","sourceRoot":"","sources":["../../../src/functions/dependency/dependency.model.ts"],"names":[],"mappings":"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"}