@quadnix/octo 0.0.1 → 0.0.3

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 (173) hide show
  1. package/dist/app.type.d.ts +70 -0
  2. package/dist/app.type.js +8 -0
  3. package/dist/app.type.js.map +1 -0
  4. package/dist/decorators/action.decorator.d.ts +2 -0
  5. package/dist/decorators/action.decorator.js +25 -0
  6. package/dist/decorators/action.decorator.js.map +1 -0
  7. package/dist/decorators/anchor.decorator.d.ts +1 -0
  8. package/dist/decorators/anchor.decorator.js +10 -0
  9. package/dist/decorators/anchor.decorator.js.map +1 -0
  10. package/dist/decorators/container.d.ts +23 -0
  11. package/dist/decorators/container.js +93 -0
  12. package/dist/decorators/container.js.map +1 -0
  13. package/dist/decorators/factory.decorator.d.ts +8 -0
  14. package/dist/decorators/factory.decorator.js +7 -0
  15. package/dist/decorators/factory.decorator.js.map +1 -0
  16. package/dist/decorators/model.decorator.d.ts +1 -0
  17. package/dist/decorators/model.decorator.js +10 -0
  18. package/dist/decorators/model.decorator.js.map +1 -0
  19. package/dist/decorators/module.decorator.d.ts +1 -0
  20. package/dist/decorators/module.decorator.js +12 -0
  21. package/dist/decorators/module.decorator.js.map +1 -0
  22. package/dist/decorators/overlay.decorator.d.ts +1 -0
  23. package/dist/decorators/overlay.decorator.js +10 -0
  24. package/dist/decorators/overlay.decorator.js.map +1 -0
  25. package/dist/decorators/resource.decorator.d.ts +1 -0
  26. package/dist/decorators/resource.decorator.js +10 -0
  27. package/dist/decorators/resource.decorator.js.map +1 -0
  28. package/dist/decorators/test-container.d.ts +16 -0
  29. package/dist/decorators/test-container.js +37 -0
  30. package/dist/decorators/test-container.js.map +1 -0
  31. package/dist/functions/dependency/dependency.model.d.ts +53 -0
  32. package/dist/functions/dependency/dependency.model.js +125 -0
  33. package/dist/functions/dependency/dependency.model.js.map +1 -0
  34. package/dist/functions/diff/diff-metadata.model.d.ts +20 -0
  35. package/dist/functions/diff/diff-metadata.model.js +39 -0
  36. package/dist/functions/diff/diff-metadata.model.js.map +1 -0
  37. package/dist/functions/diff/diff.model.d.ts +15 -0
  38. package/dist/functions/diff/diff.model.js +27 -0
  39. package/dist/functions/diff/diff.model.js.map +1 -0
  40. package/dist/functions/diff/diff.utility.d.ts +10 -0
  41. package/dist/functions/diff/diff.utility.js +99 -0
  42. package/dist/functions/diff/diff.utility.js.map +1 -0
  43. package/dist/functions/module/module.abstract.d.ts +12 -0
  44. package/dist/functions/module/module.abstract.js +39 -0
  45. package/dist/functions/module/module.abstract.js.map +1 -0
  46. package/dist/functions/module/module.interface.d.ts +4 -0
  47. package/dist/functions/module/module.interface.js +2 -0
  48. package/dist/functions/module/module.interface.js.map +1 -0
  49. package/dist/index.d.ts +53 -0
  50. package/dist/index.js +36 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/models/action.interface.d.ts +9 -0
  53. package/dist/models/action.interface.js +2 -0
  54. package/dist/models/action.interface.js.map +1 -0
  55. package/dist/models/app/app.interface.d.ts +4 -0
  56. package/dist/models/app/app.interface.js +2 -0
  57. package/dist/models/app/app.interface.js.map +1 -0
  58. package/dist/models/app/app.model.d.ts +23 -0
  59. package/dist/models/app/app.model.js +97 -0
  60. package/dist/models/app/app.model.js.map +1 -0
  61. package/dist/models/deployment/deployment.interface.d.ts +4 -0
  62. package/dist/models/deployment/deployment.interface.js +2 -0
  63. package/dist/models/deployment/deployment.interface.js.map +1 -0
  64. package/dist/models/deployment/deployment.model.d.ts +11 -0
  65. package/dist/models/deployment/deployment.model.js +39 -0
  66. package/dist/models/deployment/deployment.model.js.map +1 -0
  67. package/dist/models/environment/environment.interface.d.ts +7 -0
  68. package/dist/models/environment/environment.interface.js +2 -0
  69. package/dist/models/environment/environment.interface.js.map +1 -0
  70. package/dist/models/environment/environment.model.d.ts +14 -0
  71. package/dist/models/environment/environment.model.js +49 -0
  72. package/dist/models/environment/environment.model.js.map +1 -0
  73. package/dist/models/execution/execution.interface.d.ts +9 -0
  74. package/dist/models/execution/execution.interface.js +2 -0
  75. package/dist/models/execution/execution.interface.js.map +1 -0
  76. package/dist/models/execution/execution.model.d.ts +18 -0
  77. package/dist/models/execution/execution.model.js +70 -0
  78. package/dist/models/execution/execution.model.js.map +1 -0
  79. package/dist/models/image/image.interface.d.ts +7 -0
  80. package/dist/models/image/image.interface.js +2 -0
  81. package/dist/models/image/image.interface.js.map +1 -0
  82. package/dist/models/image/image.model.d.ts +21 -0
  83. package/dist/models/image/image.model.js +56 -0
  84. package/dist/models/image/image.model.js.map +1 -0
  85. package/dist/models/model.abstract.d.ts +34 -0
  86. package/dist/models/model.abstract.js +245 -0
  87. package/dist/models/model.abstract.js.map +1 -0
  88. package/dist/models/model.interface.d.ts +12 -0
  89. package/dist/models/model.interface.js +2 -0
  90. package/dist/models/model.interface.js.map +1 -0
  91. package/dist/models/pipeline/pipeline.interface.d.ts +5 -0
  92. package/dist/models/pipeline/pipeline.interface.js +2 -0
  93. package/dist/models/pipeline/pipeline.interface.js.map +1 -0
  94. package/dist/models/pipeline/pipeline.model.d.ts +14 -0
  95. package/dist/models/pipeline/pipeline.model.js +47 -0
  96. package/dist/models/pipeline/pipeline.model.js.map +1 -0
  97. package/dist/models/region/region.interface.d.ts +4 -0
  98. package/dist/models/region/region.interface.js +2 -0
  99. package/dist/models/region/region.interface.js.map +1 -0
  100. package/dist/models/region/region.model.d.ts +13 -0
  101. package/dist/models/region/region.model.js +49 -0
  102. package/dist/models/region/region.model.js.map +1 -0
  103. package/dist/models/server/server.interface.d.ts +6 -0
  104. package/dist/models/server/server.interface.js +2 -0
  105. package/dist/models/server/server.interface.js.map +1 -0
  106. package/dist/models/server/server.model.d.ts +15 -0
  107. package/dist/models/server/server.model.js +55 -0
  108. package/dist/models/server/server.model.js.map +1 -0
  109. package/dist/models/service/service.interface.d.ts +4 -0
  110. package/dist/models/service/service.interface.js +2 -0
  111. package/dist/models/service/service.interface.js.map +1 -0
  112. package/dist/models/service/service.model.d.ts +9 -0
  113. package/dist/models/service/service.model.js +33 -0
  114. package/dist/models/service/service.model.js.map +1 -0
  115. package/dist/models/support/support.interface.d.ts +5 -0
  116. package/dist/models/support/support.interface.js +2 -0
  117. package/dist/models/support/support.interface.js.map +1 -0
  118. package/dist/models/support/support.model.d.ts +14 -0
  119. package/dist/models/support/support.model.js +52 -0
  120. package/dist/models/support/support.model.js.map +1 -0
  121. package/dist/overlays/anchor.abstract.d.ts +11 -0
  122. package/dist/overlays/anchor.abstract.js +35 -0
  123. package/dist/overlays/anchor.abstract.js.map +1 -0
  124. package/dist/overlays/anchor.interface.d.ts +6 -0
  125. package/dist/overlays/anchor.interface.js +2 -0
  126. package/dist/overlays/anchor.interface.js.map +1 -0
  127. package/dist/overlays/overlay-data.repository.d.ts +20 -0
  128. package/dist/overlays/overlay-data.repository.js +69 -0
  129. package/dist/overlays/overlay-data.repository.js.map +1 -0
  130. package/dist/overlays/overlay.abstract.d.ts +16 -0
  131. package/dist/overlays/overlay.abstract.js +43 -0
  132. package/dist/overlays/overlay.abstract.js.map +1 -0
  133. package/dist/overlays/overlay.interface.d.ts +8 -0
  134. package/dist/overlays/overlay.interface.js +2 -0
  135. package/dist/overlays/overlay.interface.js.map +1 -0
  136. package/dist/overlays/overlay.service.d.ts +14 -0
  137. package/dist/overlays/overlay.service.js +41 -0
  138. package/dist/overlays/overlay.service.js.map +1 -0
  139. package/dist/resources/resource-action.interface.d.ts +6 -0
  140. package/dist/resources/resource-action.interface.js +2 -0
  141. package/dist/resources/resource-action.interface.js.map +1 -0
  142. package/dist/resources/resource-data.repository.d.ts +20 -0
  143. package/dist/resources/resource-data.repository.js +80 -0
  144. package/dist/resources/resource-data.repository.js.map +1 -0
  145. package/dist/resources/resource.abstract.d.ts +22 -0
  146. package/dist/resources/resource.abstract.js +71 -0
  147. package/dist/resources/resource.abstract.js.map +1 -0
  148. package/dist/resources/resource.interface.d.ts +9 -0
  149. package/dist/resources/resource.interface.js +2 -0
  150. package/dist/resources/resource.interface.js.map +1 -0
  151. package/dist/resources/shared-resource.abstract.d.ts +13 -0
  152. package/dist/resources/shared-resource.abstract.js +44 -0
  153. package/dist/resources/shared-resource.abstract.js.map +1 -0
  154. package/dist/services/serialization/model/model-serialization.service.d.ts +15 -0
  155. package/dist/services/serialization/model/model-serialization.service.js +138 -0
  156. package/dist/services/serialization/model/model-serialization.service.js.map +1 -0
  157. package/dist/services/serialization/resource/resource-serialization.service.d.ts +14 -0
  158. package/dist/services/serialization/resource/resource-serialization.service.js +132 -0
  159. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -0
  160. package/dist/services/state-management/local.state-provider.d.ts +8 -0
  161. package/dist/services/state-management/local.state-provider.js +18 -0
  162. package/dist/services/state-management/local.state-provider.js.map +1 -0
  163. package/dist/services/state-management/state-management.service.d.ts +12 -0
  164. package/dist/services/state-management/state-management.service.js +47 -0
  165. package/dist/services/state-management/state-management.service.js.map +1 -0
  166. package/dist/services/state-management/state-provider.interface.d.ts +5 -0
  167. package/dist/services/state-management/state-provider.interface.js +2 -0
  168. package/dist/services/state-management/state-provider.interface.js.map +1 -0
  169. package/dist/services/transaction/transaction.service.d.ts +26 -0
  170. package/dist/services/transaction/transaction.service.js +254 -0
  171. package/dist/services/transaction/transaction.service.js.map +1 -0
  172. package/package.json +56 -15
  173. package/index.js +0 -5
@@ -0,0 +1,14 @@
1
+ import { UnknownOverlay } from '../app.type.js';
2
+ export declare class OverlayService {
3
+ addOverlay(overlay: UnknownOverlay): Promise<void>;
4
+ getOverlayById(overlayId: string): Promise<UnknownOverlay | undefined>;
5
+ getOverlayByProperties(filters?: {
6
+ key: string;
7
+ value: any;
8
+ }[]): Promise<UnknownOverlay[]>;
9
+ removeOverlay(overlay: UnknownOverlay): Promise<void>;
10
+ }
11
+ export declare class OverlayServiceFactory {
12
+ private static instance;
13
+ static create(): Promise<OverlayService>;
14
+ }
@@ -0,0 +1,41 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Container } from '../decorators/container.js';
8
+ import { Factory } from '../decorators/factory.decorator.js';
9
+ import { OverlayDataRepository } from './overlay-data.repository.js';
10
+ export class OverlayService {
11
+ async addOverlay(overlay) {
12
+ const overlayDataRepository = await Container.get(OverlayDataRepository);
13
+ overlayDataRepository.add(overlay);
14
+ }
15
+ async getOverlayById(overlayId) {
16
+ const overlayDataRepository = await Container.get(OverlayDataRepository);
17
+ return overlayDataRepository.getById(overlayId);
18
+ }
19
+ async getOverlayByProperties(filters = []) {
20
+ const overlayDataRepository = await Container.get(OverlayDataRepository);
21
+ return overlayDataRepository.getByProperties(filters);
22
+ }
23
+ async removeOverlay(overlay) {
24
+ const overlayDataRepository = await Container.get(OverlayDataRepository);
25
+ overlayDataRepository.remove(overlay);
26
+ }
27
+ }
28
+ let OverlayServiceFactory = class OverlayServiceFactory {
29
+ static instance;
30
+ static async create() {
31
+ if (!this.instance) {
32
+ this.instance = new OverlayService();
33
+ }
34
+ return this.instance;
35
+ }
36
+ };
37
+ OverlayServiceFactory = __decorate([
38
+ Factory(OverlayService)
39
+ ], OverlayServiceFactory);
40
+ export { OverlayServiceFactory };
41
+ //# sourceMappingURL=overlay.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.service.js","sourceRoot":"","sources":["../../src/overlays/overlay.service.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,UAAU,CAAC,OAAuB;QACtC,MAAM,qBAAqB,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzE,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,qBAAqB,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzE,OAAO,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,UAAyC,EAAE;QACtE,MAAM,qBAAqB,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzE,OAAO,qBAAqB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAuB;QACzC,MAAM,qBAAqB,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzE,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AAGD,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IACxB,MAAM,CAAC,QAAQ,CAAiB;IAExC,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;SACtC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF,CAAA;AATY,qBAAqB;IADjC,OAAO,CAAiB,cAAc,CAAC;GAC3B,qBAAqB,CASjC;SATY,qBAAqB"}
@@ -0,0 +1,6 @@
1
+ import { Diff } from '../functions/diff/diff.model.js';
2
+ export interface IResourceAction {
3
+ readonly ACTION_NAME: string;
4
+ filter(diff: Diff): boolean;
5
+ handle(diff: Diff): Promise<void>;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resource-action.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-action.interface.js","sourceRoot":"","sources":["../../src/resources/resource-action.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { UnknownResource } from '../app.type.js';
2
+ import { Diff } from '../functions/diff/diff.model.js';
3
+ import { IResource } from './resource.interface.js';
4
+ export declare class ResourceDataRepository {
5
+ private readonly newResources;
6
+ private readonly oldResources;
7
+ constructor(newResources?: UnknownResource[], oldResources?: UnknownResource[]);
8
+ private _diffResources;
9
+ add(resource: UnknownResource): void;
10
+ diff(): Promise<Diff[]>;
11
+ getById(resourceId: IResource['resourceId']): UnknownResource | undefined;
12
+ getByProperties(filters?: {
13
+ key: string;
14
+ value: any;
15
+ }[]): UnknownResource[];
16
+ }
17
+ export declare class ResourceDataRepositoryFactory {
18
+ private static instance;
19
+ static create(forceNew: boolean, newResources: UnknownResource[], oldResources: UnknownResource[]): Promise<ResourceDataRepository>;
20
+ }
@@ -0,0 +1,80 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { ModelType } from '../app.type.js';
8
+ import { Factory } from '../decorators/factory.decorator.js';
9
+ import { Diff, DiffAction } from '../functions/diff/diff.model.js';
10
+ export class ResourceDataRepository {
11
+ newResources;
12
+ oldResources;
13
+ constructor(newResources = [], oldResources = []) {
14
+ this.newResources = newResources;
15
+ this.oldResources = oldResources;
16
+ Object.freeze(this.oldResources);
17
+ }
18
+ async _diffResources(newResources, oldResources) {
19
+ const diffs = [];
20
+ for (const oldResourceId in oldResources) {
21
+ if (!newResources[oldResourceId]) {
22
+ diffs.push(new Diff(oldResources[oldResourceId], DiffAction.DELETE, 'resourceId', oldResourceId));
23
+ }
24
+ else {
25
+ const rDiff = await newResources[oldResourceId].diff(oldResources[oldResourceId]);
26
+ diffs.push(...rDiff);
27
+ }
28
+ }
29
+ for (const newResourceId in newResources) {
30
+ if (!oldResources[newResourceId]) {
31
+ const newResource = newResources[newResourceId];
32
+ if (newResource.MODEL_TYPE === 'shared-resource' || newResource.getSharedResource() !== undefined) {
33
+ const rDiff = await newResource.diff();
34
+ diffs.push(...rDiff);
35
+ }
36
+ else {
37
+ diffs.push(new Diff(newResource, DiffAction.ADD, 'resourceId', newResource.resourceId));
38
+ }
39
+ }
40
+ }
41
+ return diffs;
42
+ }
43
+ add(resource) {
44
+ if (resource.MODEL_TYPE !== ModelType.RESOURCE && resource.MODEL_TYPE !== ModelType.SHARED_RESOURCE) {
45
+ throw new Error('Adding non-resource model!');
46
+ }
47
+ const rIndex = this.newResources.findIndex((r) => r.resourceId === resource.resourceId);
48
+ if (rIndex === -1) {
49
+ this.newResources.push(resource);
50
+ }
51
+ else {
52
+ this.newResources[rIndex] = resource;
53
+ }
54
+ }
55
+ async diff() {
56
+ const newResources = this.newResources.reduce((accumulator, current) => ({ ...accumulator, [current.resourceId]: current }), {});
57
+ const oldResources = this.oldResources.reduce((accumulator, current) => ({ ...accumulator, [current.resourceId]: current }), {});
58
+ return this._diffResources(newResources, oldResources);
59
+ }
60
+ getById(resourceId) {
61
+ return this.newResources.find((r) => r.resourceId === resourceId);
62
+ }
63
+ getByProperties(filters = []) {
64
+ return this.newResources.filter((r) => filters.every((c) => r.properties[c.key] === c.value));
65
+ }
66
+ }
67
+ let ResourceDataRepositoryFactory = class ResourceDataRepositoryFactory {
68
+ static instance;
69
+ static async create(forceNew, newResources, oldResources) {
70
+ if (forceNew || !this.instance) {
71
+ this.instance = new ResourceDataRepository(newResources, oldResources);
72
+ }
73
+ return this.instance;
74
+ }
75
+ };
76
+ ResourceDataRepositoryFactory = __decorate([
77
+ Factory(ResourceDataRepository)
78
+ ], ResourceDataRepositoryFactory);
79
+ export { ResourceDataRepositoryFactory };
80
+ //# sourceMappingURL=resource-data.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-data.repository.js","sourceRoot":"","sources":["../../src/resources/resource-data.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ModelType, UnknownResource } from '../app.type.js';
2
+ import { Diff } from '../functions/diff/diff.model.js';
3
+ import { AModel } from '../models/model.abstract.js';
4
+ import { IResource } from './resource.interface.js';
5
+ import { ASharedResource } from './shared-resource.abstract.js';
6
+ export declare abstract class AResource<T> extends AModel<IResource, T> {
7
+ abstract readonly MODEL_NAME: string;
8
+ readonly MODEL_TYPE: ModelType;
9
+ private _deleteMarker;
10
+ readonly properties: IResource['properties'];
11
+ readonly resourceId: IResource['resourceId'];
12
+ readonly response: IResource['response'];
13
+ protected constructor(resourceId: IResource['resourceId'], properties: IResource['properties'], parents: UnknownResource[]);
14
+ diff(previous?: T): Promise<Diff[]>;
15
+ getContext(): string;
16
+ getSharedResource(): ASharedResource<T> | undefined;
17
+ isMarkedDeleted(): boolean;
18
+ markDeleted(): void;
19
+ remove(): void;
20
+ synth(): IResource;
21
+ static unSynth(deserializationClass: any, resource: IResource, parentResourceIds: string[], deReferenceResource: (resourceId: string) => Promise<UnknownResource>): Promise<UnknownResource>;
22
+ }
@@ -0,0 +1,71 @@
1
+ import { ModelType } from '../app.type.js';
2
+ import { Diff, DiffAction } from '../functions/diff/diff.model.js';
3
+ import { DiffUtility } from '../functions/diff/diff.utility.js';
4
+ import { AModel } from '../models/model.abstract.js';
5
+ export class AResource extends AModel {
6
+ MODEL_TYPE = ModelType.RESOURCE;
7
+ _deleteMarker = false;
8
+ properties = {};
9
+ resourceId;
10
+ response = {};
11
+ constructor(resourceId, properties, parents) {
12
+ super();
13
+ this.resourceId = resourceId;
14
+ for (const key in properties) {
15
+ this.properties[key] = properties[key];
16
+ }
17
+ for (const parent of parents) {
18
+ parent.addChild('resourceId', this, 'resourceId');
19
+ }
20
+ }
21
+ async diff(previous) {
22
+ const diffs = [];
23
+ if (this.isMarkedDeleted()) {
24
+ diffs.push(new Diff((previous || this), DiffAction.DELETE, 'resourceId', this.resourceId));
25
+ return diffs;
26
+ }
27
+ if (previous) {
28
+ if (!DiffUtility.isObjectDeepEquals(this.properties, previous.properties)) {
29
+ diffs.push(new Diff(this, DiffAction.UPDATE, 'resourceId', this.resourceId));
30
+ }
31
+ }
32
+ else {
33
+ diffs.push(new Diff(this, DiffAction.ADD, 'resourceId', this.resourceId));
34
+ }
35
+ return diffs;
36
+ }
37
+ getContext() {
38
+ return `${this.MODEL_NAME}=${this.resourceId}`;
39
+ }
40
+ getSharedResource() {
41
+ const sameModelDependencies = this.getChildren(this.MODEL_NAME)[this.MODEL_NAME];
42
+ const sharedResourceDependency = sameModelDependencies?.find((d) => d.to.MODEL_TYPE === ModelType.SHARED_RESOURCE);
43
+ return sharedResourceDependency?.to;
44
+ }
45
+ isMarkedDeleted() {
46
+ return this._deleteMarker;
47
+ }
48
+ markDeleted() {
49
+ super.remove();
50
+ this._deleteMarker = true;
51
+ }
52
+ remove() {
53
+ throw new Error('Cannot use remove() on resources! Use a delete marker instead.');
54
+ }
55
+ synth() {
56
+ return {
57
+ properties: { ...this.properties },
58
+ resourceId: this.resourceId,
59
+ response: { ...this.response },
60
+ };
61
+ }
62
+ static async unSynth(deserializationClass, resource, parentResourceIds, deReferenceResource) {
63
+ const parents = await Promise.all(parentResourceIds.map((p) => deReferenceResource(p)));
64
+ const deReferencedResource = new deserializationClass(resource.resourceId, resource.properties, parents);
65
+ for (const key in resource.response) {
66
+ deReferencedResource.response[key] = resource.response[key];
67
+ }
68
+ return deReferencedResource;
69
+ }
70
+ }
71
+ //# sourceMappingURL=resource.abstract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.abstract.js","sourceRoot":"","sources":["../../src/resources/resource.abstract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface IResource {
2
+ properties: {
3
+ [key: string]: unknown;
4
+ };
5
+ resourceId: string;
6
+ response: {
7
+ [key: string]: unknown;
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resource.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.interface.js","sourceRoot":"","sources":["../../src/resources/resource.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { ModelType } from '../app.type.js';
2
+ import { Diff } from '../functions/diff/diff.model.js';
3
+ import { AResource } from './resource.abstract.js';
4
+ export declare abstract class ASharedResource<T> extends AResource<T> {
5
+ readonly MODEL_TYPE: ModelType;
6
+ diff(): Promise<Diff[]>;
7
+ findParentsByProperty(filters: {
8
+ key: keyof AResource<T>['properties'];
9
+ value: any;
10
+ }[]): AResource<T>[];
11
+ getSharedResource(): ASharedResource<T> | undefined;
12
+ merge(previousSharedResource: ASharedResource<T>): ASharedResource<T>;
13
+ }
@@ -0,0 +1,44 @@
1
+ import { ModelType } from '../app.type.js';
2
+ import { AResource } from './resource.abstract.js';
3
+ export class ASharedResource extends AResource {
4
+ MODEL_TYPE = ModelType.SHARED_RESOURCE;
5
+ async diff() {
6
+ return [];
7
+ }
8
+ findParentsByProperty(filters) {
9
+ const parents = [];
10
+ const dependencies = Object.values(this.getParents()).flat();
11
+ for (const d of dependencies) {
12
+ const resource = d.to;
13
+ if (filters.every((c) => resource.properties[c.key] === c.value)) {
14
+ parents.push(resource);
15
+ }
16
+ }
17
+ return parents;
18
+ }
19
+ getSharedResource() {
20
+ return undefined;
21
+ }
22
+ merge(previousSharedResource) {
23
+ const currentDependencies = Object.values(this.getParents()).flat();
24
+ const previousDependencies = Object.values(previousSharedResource.getParents()).flat();
25
+ for (const key in previousSharedResource.properties) {
26
+ if (previousSharedResource.properties.hasOwnProperty(key) && !(key in this.properties)) {
27
+ this.properties[key] = previousSharedResource.properties[key];
28
+ }
29
+ }
30
+ for (const key in previousSharedResource.response) {
31
+ if (previousSharedResource.response.hasOwnProperty(key) && !(key in this.response)) {
32
+ this.response[key] = previousSharedResource.response[key];
33
+ }
34
+ }
35
+ const previousParentsNotInCurrentSharedResource = previousDependencies
36
+ .filter((pd) => !currentDependencies.find((cd) => cd.isEqual(pd)))
37
+ .map((pd) => pd.to);
38
+ for (const parent of previousParentsNotInCurrentSharedResource) {
39
+ parent.addChild('resourceId', this, 'resourceId');
40
+ }
41
+ return this;
42
+ }
43
+ }
44
+ //# sourceMappingURL=shared-resource.abstract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-resource.abstract.js","sourceRoot":"","sources":["../../src/resources/shared-resource.abstract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,OAAgB,eAAmB,SAAQ,SAAY;IACzC,UAAU,GAAc,SAAS,CAAC,eAAe,CAAC;IAEpE,KAAK,CAAC,IAAI;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAqB,CAAC,OAAgE;QACpF,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;YAC5B,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAkB,CAAC;YACtC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;gBAChE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACxB;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEQ,iBAAiB;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,sBAA0C;QAC9C,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvF,KAAK,MAAM,GAAG,IAAI,sBAAsB,CAAC,UAAU,EAAE;YACnD,IAAI,sBAAsB,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE;gBACtF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAC/D;SACF;QAED,KAAK,MAAM,GAAG,IAAI,sBAAsB,CAAC,QAAQ,EAAE;YACjD,IAAI,sBAAsB,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAClF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC3D;SACF;QAED,MAAM,yCAAyC,GAAG,oBAAoB;aACnE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;aACjE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,MAAM,MAAM,IAAI,yCAAyC,EAAE;YAC9D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;SACnD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { ModelSerializedOutput, UnknownModel } from '../../../app.type.js';
2
+ import { AModule } from '../../../functions/module/module.abstract.js';
3
+ export declare class ModelSerializationService {
4
+ private MODEL_DESERIALIZATION_TIMEOUT_IN_MS;
5
+ private readonly classMapping;
6
+ private readonly modules;
7
+ deserialize(serializedOutput: ModelSerializedOutput): Promise<UnknownModel>;
8
+ registerClass(className: string, deserializationClass: any): void;
9
+ registerModule(module: AModule): void;
10
+ serialize(root: UnknownModel): Promise<ModelSerializedOutput>;
11
+ }
12
+ export declare class ModelSerializationServiceFactory {
13
+ private static instance;
14
+ static create(): Promise<ModelSerializationService>;
15
+ }
@@ -0,0 +1,138 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Container } from '../../../decorators/container.js';
8
+ import { Factory } from '../../../decorators/factory.decorator.js';
9
+ import { Dependency } from '../../../functions/dependency/dependency.model.js';
10
+ import { OverlayDataRepository } from '../../../overlays/overlay-data.repository.js';
11
+ export class ModelSerializationService {
12
+ MODEL_DESERIALIZATION_TIMEOUT_IN_MS = 5000;
13
+ classMapping = {};
14
+ modules = [];
15
+ async deserialize(serializedOutput) {
16
+ const deReferencePromises = {};
17
+ const seen = {};
18
+ const deReferenceContext = async (context) => {
19
+ if (!seen[context]) {
20
+ if (deReferencePromises[context]) {
21
+ await deReferencePromises[context][0];
22
+ }
23
+ else {
24
+ deReferencePromises[context] = [];
25
+ const promise = new Promise((resolve, reject) => {
26
+ deReferencePromises[context][1] = resolve;
27
+ deReferencePromises[context][2] = reject;
28
+ });
29
+ deReferencePromises[context][0] = promise;
30
+ deReferencePromises[context][3] = setTimeout(() => {
31
+ deReferencePromises[context][2](new Error('DeReferencing model operation timed out!'));
32
+ }, this.MODEL_DESERIALIZATION_TIMEOUT_IN_MS);
33
+ await promise;
34
+ }
35
+ }
36
+ return seen[context];
37
+ };
38
+ const deserializeModel = async (context) => {
39
+ const { className, model } = serializedOutput.models[context];
40
+ const deserializationClass = this.classMapping[className];
41
+ seen[context] = await deserializationClass.unSynth(model, deReferenceContext);
42
+ if (deReferencePromises[context] !== undefined) {
43
+ deReferencePromises[context][1](true);
44
+ clearTimeout(deReferencePromises[context][3]);
45
+ }
46
+ return seen[context];
47
+ };
48
+ const promiseToDeserializeModels = [];
49
+ for (const context in serializedOutput.models) {
50
+ promiseToDeserializeModels.push(deserializeModel(context));
51
+ }
52
+ await Promise.all(promiseToDeserializeModels);
53
+ for (const a of serializedOutput.anchors) {
54
+ const { className, parent } = a;
55
+ const deserializationClass = this.classMapping[className];
56
+ const anchor = await deserializationClass.unSynth(deserializationClass, a, deReferenceContext);
57
+ seen[parent.context]['anchors'].push(anchor);
58
+ }
59
+ for (const d of serializedOutput.dependencies) {
60
+ const dependency = Dependency.unSynth(seen[d.from], seen[d.to], d);
61
+ if (!seen[d.from]['dependencies'].some((d) => d.from === dependency.from && d.to === dependency.to)) {
62
+ seen[d.from]['dependencies'].push(dependency);
63
+ }
64
+ }
65
+ this.modules.splice(0, this.modules.length);
66
+ for (const { className, module } of serializedOutput.modules) {
67
+ const deserializationClass = this.classMapping[className];
68
+ const newModule = await deserializationClass.unSynth(deserializationClass, module, deReferenceContext);
69
+ this.modules.push(newModule);
70
+ }
71
+ const newOverlays = [];
72
+ const oldOverlays = [];
73
+ for (const { className, overlay } of serializedOutput.overlays) {
74
+ const deserializationClass = this.classMapping[className];
75
+ const newOverlay = await deserializationClass.unSynth(deserializationClass, overlay, deReferenceContext);
76
+ newOverlays.push(newOverlay);
77
+ const oldOverlay = await deserializationClass.unSynth(deserializationClass, overlay, deReferenceContext);
78
+ oldOverlays.push(oldOverlay);
79
+ }
80
+ await Container.get(OverlayDataRepository, { args: [true, newOverlays, oldOverlays] });
81
+ return serializedOutput.dependencies.length > 0 ? seen[serializedOutput.dependencies[0].from] : seen[0];
82
+ }
83
+ registerClass(className, deserializationClass) {
84
+ this.classMapping[className] = deserializationClass;
85
+ }
86
+ registerModule(module) {
87
+ this.modules.push(module);
88
+ }
89
+ async serialize(root) {
90
+ const boundary = root.getBoundaryMembers();
91
+ const anchors = [];
92
+ const dependencies = [];
93
+ const models = {};
94
+ const modules = [];
95
+ const overlays = [];
96
+ for (const model of boundary) {
97
+ for (const a of model['anchors']) {
98
+ anchors.push({ ...a.synth(), className: a.constructor.name });
99
+ }
100
+ for (const d of model['dependencies']) {
101
+ if (!boundary.some((m) => m.getContext() === d.from.getContext()) ||
102
+ !boundary.some((m) => m.getContext() === d.to.getContext())) {
103
+ continue;
104
+ }
105
+ dependencies.push(d.synth());
106
+ }
107
+ const context = model.getContext();
108
+ if (!models[context]) {
109
+ models[context] = {
110
+ className: model.constructor.name,
111
+ model: model.synth(),
112
+ };
113
+ }
114
+ }
115
+ for (const module of this.modules) {
116
+ modules.push({ className: module.constructor.name, module: module.synth() });
117
+ }
118
+ const overlayDataRepository = await Container.get(OverlayDataRepository);
119
+ for (const overlay of overlayDataRepository.getByProperties()) {
120
+ overlays.push({ className: overlay.constructor.name, overlay: overlay.synth() });
121
+ }
122
+ return { anchors, dependencies, models, modules, overlays };
123
+ }
124
+ }
125
+ let ModelSerializationServiceFactory = class ModelSerializationServiceFactory {
126
+ static instance;
127
+ static async create() {
128
+ if (!this.instance) {
129
+ this.instance = new ModelSerializationService();
130
+ }
131
+ return this.instance;
132
+ }
133
+ };
134
+ ModelSerializationServiceFactory = __decorate([
135
+ Factory(ModelSerializationService)
136
+ ], ModelSerializationServiceFactory);
137
+ export { ModelSerializationServiceFactory };
138
+ //# sourceMappingURL=model-serialization.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-serialization.service.js","sourceRoot":"","sources":["../../../../src/services/serialization/model/model-serialization.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ResourceSerializedOutput } from '../../../app.type.js';
2
+ export declare class ResourceSerializationService {
3
+ private RESOURCE_DESERIALIZATION_TIMEOUT_IN_MS;
4
+ private readonly classMapping;
5
+ private _deserialize;
6
+ deserialize(serializedOutput: ResourceSerializedOutput): Promise<void>;
7
+ registerClass(className: string, deserializationClass: any): void;
8
+ serialize(): Promise<ResourceSerializedOutput>;
9
+ setResourceDeserializationTimeout(timeoutInMs: number): void;
10
+ }
11
+ export declare class ResourceSerializationServiceFactory {
12
+ private static instance;
13
+ static create(): Promise<ResourceSerializationService>;
14
+ }