@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.
- package/.eslintrc.cjs +26 -0
- package/dist/app.type.d.ts +70 -0
- package/dist/app.type.js +8 -0
- package/dist/app.type.js.map +1 -0
- package/dist/decorators/action.decorator.d.ts +2 -0
- package/dist/decorators/action.decorator.js +25 -0
- package/dist/decorators/action.decorator.js.map +1 -0
- package/dist/decorators/anchor.decorator.d.ts +1 -0
- package/dist/decorators/anchor.decorator.js +10 -0
- package/dist/decorators/anchor.decorator.js.map +1 -0
- package/dist/decorators/container.d.ts +23 -0
- package/dist/decorators/container.js +93 -0
- package/dist/decorators/container.js.map +1 -0
- package/dist/decorators/factory.decorator.d.ts +8 -0
- package/dist/decorators/factory.decorator.js +7 -0
- package/dist/decorators/factory.decorator.js.map +1 -0
- package/dist/decorators/model.decorator.d.ts +1 -0
- package/dist/decorators/model.decorator.js +10 -0
- package/dist/decorators/model.decorator.js.map +1 -0
- package/dist/decorators/module.decorator.d.ts +1 -0
- package/dist/decorators/module.decorator.js +12 -0
- package/dist/decorators/module.decorator.js.map +1 -0
- package/dist/decorators/overlay.decorator.d.ts +1 -0
- package/dist/decorators/overlay.decorator.js +10 -0
- package/dist/decorators/overlay.decorator.js.map +1 -0
- package/dist/decorators/resource.decorator.d.ts +1 -0
- package/dist/decorators/resource.decorator.js +10 -0
- package/dist/decorators/resource.decorator.js.map +1 -0
- package/dist/decorators/test-container.d.ts +16 -0
- package/dist/decorators/test-container.js +37 -0
- package/dist/decorators/test-container.js.map +1 -0
- package/dist/functions/dependency/dependency.model.d.ts +53 -0
- package/dist/functions/dependency/dependency.model.js +125 -0
- package/dist/functions/dependency/dependency.model.js.map +1 -0
- package/dist/functions/diff/diff-metadata.model.d.ts +20 -0
- package/dist/functions/diff/diff-metadata.model.js +39 -0
- package/dist/functions/diff/diff-metadata.model.js.map +1 -0
- package/dist/functions/diff/diff.model.d.ts +15 -0
- package/dist/functions/diff/diff.model.js +27 -0
- package/dist/functions/diff/diff.model.js.map +1 -0
- package/dist/functions/diff/diff.utility.d.ts +10 -0
- package/dist/functions/diff/diff.utility.js +99 -0
- package/dist/functions/diff/diff.utility.js.map +1 -0
- package/dist/functions/module/module.abstract.d.ts +12 -0
- package/dist/functions/module/module.abstract.js +39 -0
- package/dist/functions/module/module.abstract.js.map +1 -0
- package/dist/functions/module/module.interface.d.ts +4 -0
- package/dist/functions/module/module.interface.js +2 -0
- package/dist/functions/module/module.interface.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/models/action.interface.d.ts +9 -0
- package/dist/models/action.interface.js +2 -0
- package/dist/models/action.interface.js.map +1 -0
- package/dist/models/app/app.interface.d.ts +4 -0
- package/dist/models/app/app.interface.js +2 -0
- package/dist/models/app/app.interface.js.map +1 -0
- package/dist/models/app/app.model.d.ts +23 -0
- package/dist/models/app/app.model.js +97 -0
- package/dist/models/app/app.model.js.map +1 -0
- package/dist/models/deployment/deployment.interface.d.ts +4 -0
- package/dist/models/deployment/deployment.interface.js +2 -0
- package/dist/models/deployment/deployment.interface.js.map +1 -0
- package/dist/models/deployment/deployment.model.d.ts +11 -0
- package/dist/models/deployment/deployment.model.js +39 -0
- package/dist/models/deployment/deployment.model.js.map +1 -0
- package/dist/models/environment/environment.interface.d.ts +7 -0
- package/dist/models/environment/environment.interface.js +2 -0
- package/dist/models/environment/environment.interface.js.map +1 -0
- package/dist/models/environment/environment.model.d.ts +14 -0
- package/dist/models/environment/environment.model.js +49 -0
- package/dist/models/environment/environment.model.js.map +1 -0
- package/dist/models/execution/execution.interface.d.ts +9 -0
- package/dist/models/execution/execution.interface.js +2 -0
- package/dist/models/execution/execution.interface.js.map +1 -0
- package/dist/models/execution/execution.model.d.ts +18 -0
- package/dist/models/execution/execution.model.js +70 -0
- package/dist/models/execution/execution.model.js.map +1 -0
- package/dist/models/image/image.interface.d.ts +7 -0
- package/dist/models/image/image.interface.js +2 -0
- package/dist/models/image/image.interface.js.map +1 -0
- package/dist/models/image/image.model.d.ts +21 -0
- package/dist/models/image/image.model.js +56 -0
- package/dist/models/image/image.model.js.map +1 -0
- package/dist/models/model.abstract.d.ts +34 -0
- package/dist/models/model.abstract.js +245 -0
- package/dist/models/model.abstract.js.map +1 -0
- package/dist/models/model.interface.d.ts +12 -0
- package/dist/models/model.interface.js +2 -0
- package/dist/models/model.interface.js.map +1 -0
- package/dist/models/pipeline/pipeline.interface.d.ts +5 -0
- package/dist/models/pipeline/pipeline.interface.js +2 -0
- package/dist/models/pipeline/pipeline.interface.js.map +1 -0
- package/dist/models/pipeline/pipeline.model.d.ts +14 -0
- package/dist/models/pipeline/pipeline.model.js +47 -0
- package/dist/models/pipeline/pipeline.model.js.map +1 -0
- package/dist/models/region/region.interface.d.ts +4 -0
- package/dist/models/region/region.interface.js +2 -0
- package/dist/models/region/region.interface.js.map +1 -0
- package/dist/models/region/region.model.d.ts +13 -0
- package/dist/models/region/region.model.js +49 -0
- package/dist/models/region/region.model.js.map +1 -0
- package/dist/models/server/server.interface.d.ts +6 -0
- package/dist/models/server/server.interface.js +2 -0
- package/dist/models/server/server.interface.js.map +1 -0
- package/dist/models/server/server.model.d.ts +15 -0
- package/dist/models/server/server.model.js +55 -0
- package/dist/models/server/server.model.js.map +1 -0
- package/dist/models/service/service.interface.d.ts +4 -0
- package/dist/models/service/service.interface.js +2 -0
- package/dist/models/service/service.interface.js.map +1 -0
- package/dist/models/service/service.model.d.ts +9 -0
- package/dist/models/service/service.model.js +33 -0
- package/dist/models/service/service.model.js.map +1 -0
- package/dist/models/support/support.interface.d.ts +5 -0
- package/dist/models/support/support.interface.js +2 -0
- package/dist/models/support/support.interface.js.map +1 -0
- package/dist/models/support/support.model.d.ts +14 -0
- package/dist/models/support/support.model.js +52 -0
- package/dist/models/support/support.model.js.map +1 -0
- package/dist/overlays/anchor.abstract.d.ts +11 -0
- package/dist/overlays/anchor.abstract.js +35 -0
- package/dist/overlays/anchor.abstract.js.map +1 -0
- package/dist/overlays/anchor.interface.d.ts +6 -0
- package/dist/overlays/anchor.interface.js +2 -0
- package/dist/overlays/anchor.interface.js.map +1 -0
- package/dist/overlays/overlay-data.repository.d.ts +20 -0
- package/dist/overlays/overlay-data.repository.js +69 -0
- package/dist/overlays/overlay-data.repository.js.map +1 -0
- package/dist/overlays/overlay.abstract.d.ts +16 -0
- package/dist/overlays/overlay.abstract.js +43 -0
- package/dist/overlays/overlay.abstract.js.map +1 -0
- package/dist/overlays/overlay.interface.d.ts +8 -0
- package/dist/overlays/overlay.interface.js +2 -0
- package/dist/overlays/overlay.interface.js.map +1 -0
- package/dist/overlays/overlay.service.d.ts +14 -0
- package/dist/overlays/overlay.service.js +41 -0
- package/dist/overlays/overlay.service.js.map +1 -0
- package/dist/resources/resource-action.interface.d.ts +6 -0
- package/dist/resources/resource-action.interface.js +2 -0
- package/dist/resources/resource-action.interface.js.map +1 -0
- package/dist/resources/resource-data.repository.d.ts +20 -0
- package/dist/resources/resource-data.repository.js +80 -0
- package/dist/resources/resource-data.repository.js.map +1 -0
- package/dist/resources/resource.abstract.d.ts +22 -0
- package/dist/resources/resource.abstract.js +71 -0
- package/dist/resources/resource.abstract.js.map +1 -0
- package/dist/resources/resource.interface.d.ts +9 -0
- package/dist/resources/resource.interface.js +2 -0
- package/dist/resources/resource.interface.js.map +1 -0
- package/dist/resources/shared-resource.abstract.d.ts +13 -0
- package/dist/resources/shared-resource.abstract.js +44 -0
- package/dist/resources/shared-resource.abstract.js.map +1 -0
- package/dist/services/serialization/model/model-serialization.service.d.ts +15 -0
- package/dist/services/serialization/model/model-serialization.service.js +138 -0
- package/dist/services/serialization/model/model-serialization.service.js.map +1 -0
- package/dist/services/serialization/resource/resource-serialization.service.d.ts +14 -0
- package/dist/services/serialization/resource/resource-serialization.service.js +132 -0
- package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -0
- package/dist/services/state-management/local.state-provider.d.ts +8 -0
- package/dist/services/state-management/local.state-provider.js +18 -0
- package/dist/services/state-management/local.state-provider.js.map +1 -0
- package/dist/services/state-management/state-management.service.d.ts +12 -0
- package/dist/services/state-management/state-management.service.js +47 -0
- package/dist/services/state-management/state-management.service.js.map +1 -0
- package/dist/services/state-management/state-provider.interface.d.ts +5 -0
- package/dist/services/state-management/state-provider.interface.js +2 -0
- package/dist/services/state-management/state-provider.interface.js.map +1 -0
- package/dist/services/transaction/transaction.service.d.ts +26 -0
- package/dist/services/transaction/transaction.service.js +254 -0
- package/dist/services/transaction/transaction.service.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +52 -16
- package/src/app.type.ts +56 -0
- package/src/decorators/action.decorator.spec.ts +43 -0
- package/src/decorators/action.decorator.ts +24 -0
- package/src/decorators/anchor.decorator.ts +10 -0
- package/src/decorators/container.spec.ts +104 -0
- package/src/decorators/container.ts +133 -0
- package/src/decorators/factory.decorator.ts +13 -0
- package/src/decorators/model.decorator.ts +10 -0
- package/src/decorators/module.decorator.ts +13 -0
- package/src/decorators/overlay.decorator.ts +10 -0
- package/src/decorators/resource.decorator.ts +10 -0
- package/src/decorators/test-container.spec.ts +50 -0
- package/src/decorators/test-container.ts +56 -0
- package/src/functions/dependency/dependency.model.spec.ts +43 -0
- package/src/functions/dependency/dependency.model.ts +178 -0
- package/src/functions/diff/diff-metadata.model.ts +51 -0
- package/src/functions/diff/diff.model.ts +33 -0
- package/src/functions/diff/diff.utility.ts +163 -0
- package/src/functions/module/module.abstract.ts +59 -0
- package/src/functions/module/module.interface.ts +5 -0
- package/src/index.ts +62 -0
- package/src/models/action.interface.ts +35 -0
- package/src/models/app/app.interface.ts +5 -0
- package/src/models/app/app.model.ts +111 -0
- package/src/models/deployment/deployment.interface.ts +5 -0
- package/src/models/deployment/deployment.model.ts +35 -0
- package/src/models/environment/environment.interface.ts +6 -0
- package/src/models/environment/environment.model.spec.ts +125 -0
- package/src/models/environment/environment.model.ts +55 -0
- package/src/models/execution/execution.interface.ts +8 -0
- package/src/models/execution/execution.model.spec.ts +62 -0
- package/src/models/execution/execution.model.ts +89 -0
- package/src/models/image/image.interface.ts +8 -0
- package/src/models/image/image.model.ts +62 -0
- package/src/models/model.abstract.ts +324 -0
- package/src/models/model.interface.ts +42 -0
- package/src/models/pipeline/pipeline.interface.ts +6 -0
- package/src/models/pipeline/pipeline.model.ts +47 -0
- package/src/models/region/region.interface.ts +5 -0
- package/src/models/region/region.model.spec.ts +162 -0
- package/src/models/region/region.model.ts +48 -0
- package/src/models/server/server.interface.ts +7 -0
- package/src/models/server/server.model.ts +56 -0
- package/src/models/service/service.interface.ts +5 -0
- package/src/models/service/service.model.ts +25 -0
- package/src/models/support/support.interface.ts +6 -0
- package/src/models/support/support.model.spec.ts +78 -0
- package/src/models/support/support.model.ts +52 -0
- package/src/overlays/anchor.abstract.ts +41 -0
- package/src/overlays/anchor.interface.ts +7 -0
- package/src/overlays/anchor.spec.ts +41 -0
- package/src/overlays/overlay-data.repository.ts +76 -0
- package/src/overlays/overlay.abstract.ts +64 -0
- package/src/overlays/overlay.interface.ts +9 -0
- package/src/overlays/overlay.service.ts +38 -0
- package/src/overlays/overlay.spec.ts +86 -0
- package/src/resources/resource-action.interface.ts +9 -0
- package/src/resources/resource-data.repository.spec.ts +133 -0
- package/src/resources/resource-data.repository.ts +92 -0
- package/src/resources/resource.abstract.ts +108 -0
- package/src/resources/resource.interface.ts +7 -0
- package/src/resources/resource.spec.ts +60 -0
- package/src/resources/shared-resource.abstract.ts +53 -0
- package/src/resources/shared-resource.spec.ts +133 -0
- package/src/services/serialization/model/__snapshots__/model-serialization.service.spec.ts.snap +656 -0
- package/src/services/serialization/model/model-serialization.service.spec.ts +195 -0
- package/src/services/serialization/model/model-serialization.service.ts +172 -0
- package/src/services/serialization/resource/__snapshots__/resource-serialization.service.spec.ts.snap +284 -0
- package/src/services/serialization/resource/resource-serialization.service.spec.ts +311 -0
- package/src/services/serialization/resource/resource-serialization.service.ts +166 -0
- package/src/services/state-management/local.state-provider.spec.ts +42 -0
- package/src/services/state-management/local.state-provider.ts +23 -0
- package/src/services/state-management/state-management.service.ts +43 -0
- package/src/services/state-management/state-provider.interface.ts +5 -0
- package/src/services/transaction/__snapshots__/transaction.service.spec.ts.snap +284 -0
- package/src/services/transaction/transaction.service.spec.ts +823 -0
- package/src/services/transaction/transaction.service.ts +386 -0
- package/test/app.e2e-spec.ts +104 -0
- package/test/helpers/test-classes.ts +31 -0
- package/test/models/__snapshots__/model.e2e-spec.ts.snap +451 -0
- package/test/models/model.e2e-spec.ts +366 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.json +9 -0
- 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>;
|
package/dist/app.type.js
ADDED
|
@@ -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,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 @@
|
|
|
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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"}
|