@grnsft/if 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/.devcontainer/devcontainer.json +38 -0
- package/.editorconfig +8 -0
- package/.env.example +9 -0
- package/.eslintignore +4 -0
- package/.eslintrc.json +8 -0
- package/.github/ISSUE_TEMPLATE/agenda.md +36 -0
- package/.github/ISSUE_TEMPLATE/blank-issue.md +10 -0
- package/.github/ISSUE_TEMPLATE/feedback.md +42 -0
- package/.github/ISSUE_TEMPLATE/model-plugin.md +63 -0
- package/.github/ISSUE_TEMPLATE/user-story.md +10 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +21 -0
- package/.github/workflows/nodejs-ci.yml +34 -0
- package/.gitmodules +3 -0
- package/.prettierrc.js +3 -0
- package/CONTRIBUTING.md +194 -0
- package/LICENSE +21 -0
- package/Makefile +16 -0
- package/README.md +67 -0
- package/build/__mocks__/azure/index.d.ts +11 -0
- package/build/__mocks__/azure/index.js +132 -0
- package/build/__mocks__/boavizta/countries.json +138 -0
- package/build/__mocks__/boavizta/instance_types.json +625 -0
- package/build/__mocks__/boavizta/providers.json +1 -0
- package/build/__mocks__/fs/index.d.ts +3 -0
- package/build/__mocks__/fs/index.js +56 -0
- package/build/__mocks__/model-universe/index.d.ts +33 -0
- package/build/__mocks__/model-universe/index.js +68 -0
- package/build/__mocks__/watt-time/data.json +119 -0
- package/build/__tests__/integration/ompl/index.test.d.ts +1 -0
- package/build/__tests__/integration/ompl/index.test.js +61 -0
- package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/azure-importer/index.test.js +152 -0
- package/build/__tests__/unit/lib/boavizta/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/boavizta/index.test.js +579 -0
- package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/aveva.test.js +36 -0
- package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/emem.test.js +108 -0
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +53 -0
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +23 -0
- package/build/__tests__/unit/lib/ccf/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/ccf/index.test.js +223 -0
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +73 -0
- package/build/__tests__/unit/lib/sci/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci/index.test.js +106 -0
- package/build/__tests__/unit/lib/sci-e/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-e/index.test.js +30 -0
- package/build/__tests__/unit/lib/sci-m/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-m/index.test.js +58 -0
- package/build/__tests__/unit/lib/sci-o/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-o/index.test.js +42 -0
- package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/shell-imp/index.test.js +21 -0
- package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/tdp-finder/index.test.js +62 -0
- package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/teads-aws/index.test.js +170 -0
- package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/teads-curve/index.test.js +146 -0
- package/build/__tests__/unit/lib/watt-time/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/watt-time/index.test.js +106 -0
- package/build/__tests__/unit/util/args.test.d.ts +1 -0
- package/build/__tests__/unit/util/args.test.js +92 -0
- package/build/__tests__/unit/util/models-universe.test.d.ts +1 -0
- package/build/__tests__/unit/util/models-universe.test.js +211 -0
- package/build/__tests__/unit/util/observatory.test.d.ts +1 -0
- package/build/__tests__/unit/util/observatory.test.js +91 -0
- package/build/__tests__/unit/util/supercomputer.test.d.ts +1 -0
- package/build/__tests__/unit/util/supercomputer.test.js +231 -0
- package/build/__tests__/unit/util/yaml.test.d.ts +1 -0
- package/build/__tests__/unit/util/yaml.test.js +59 -0
- package/build/config/config.d.ts +32 -0
- package/build/config/config.js +74 -0
- package/build/config/index.d.ts +2 -0
- package/build/config/index.js +8 -0
- package/build/config/strings.d.ts +14 -0
- package/build/config/strings.js +30 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +46 -0
- package/build/lib/azure-importer/index.d.ts +55 -0
- package/build/lib/azure-importer/index.js +314 -0
- package/build/lib/boavizta/index.d.ts +53 -0
- package/build/lib/boavizta/index.js +254 -0
- package/build/lib/case-studies/aveva-model.d.ts +29 -0
- package/build/lib/case-studies/aveva-model.js +53 -0
- package/build/lib/case-studies/emem-model.d.ts +42 -0
- package/build/lib/case-studies/emem-model.js +93 -0
- package/build/lib/case-studies/eshoppen-model.d.ts +24 -0
- package/build/lib/case-studies/eshoppen-model.js +123 -0
- package/build/lib/case-studies/index.d.ts +4 -0
- package/build/lib/case-studies/index.js +21 -0
- package/build/lib/case-studies/sci-accenture-model.d.ts +10 -0
- package/build/lib/case-studies/sci-accenture-model.js +37 -0
- package/build/lib/ccf/aws-embodied.json +5591 -0
- package/build/lib/ccf/aws-instances.json +21116 -0
- package/build/lib/ccf/aws-use.json +79 -0
- package/build/lib/ccf/azure-embodied.json +6547 -0
- package/build/lib/ccf/azure-instances.json +8332 -0
- package/build/lib/ccf/azure-use.json +58 -0
- package/build/lib/ccf/gcp-embodied.json +3049 -0
- package/build/lib/ccf/gcp-instances.json +3880 -0
- package/build/lib/ccf/gcp-use.json +58 -0
- package/build/lib/ccf/index.d.ts +63 -0
- package/build/lib/ccf/index.js +338 -0
- package/build/lib/cloud-instance-metadata/aws-instances.json +1 -0
- package/build/lib/cloud-instance-metadata/azure-instances.json +1 -0
- package/build/lib/cloud-instance-metadata/index.d.ts +15 -0
- package/build/lib/cloud-instance-metadata/index.js +104 -0
- package/build/lib/index.d.ts +15 -0
- package/build/lib/index.js +32 -0
- package/build/lib/interfaces/ccf.d.ts +19 -0
- package/build/lib/interfaces/ccf.js +3 -0
- package/build/lib/interfaces/index.d.ts +7 -0
- package/build/lib/interfaces/index.js +18 -0
- package/build/lib/sci/index.d.ts +13 -0
- package/build/lib/sci/index.js +131 -0
- package/build/lib/sci-e/index.d.ts +38 -0
- package/build/lib/sci-e/index.js +85 -0
- package/build/lib/sci-m/index.d.ts +10 -0
- package/build/lib/sci-m/index.js +124 -0
- package/build/lib/sci-o/index.d.ts +17 -0
- package/build/lib/sci-o/index.js +52 -0
- package/build/lib/shell-imp/index.d.ts +32 -0
- package/build/lib/shell-imp/index.js +82 -0
- package/build/lib/tdp-finder/index.d.ts +19 -0
- package/build/lib/tdp-finder/index.js +98 -0
- package/build/lib/teads-aws/aws-embodied.json +1 -0
- package/build/lib/teads-aws/aws-instances.json +1 -0
- package/build/lib/teads-aws/index.d.ts +58 -0
- package/build/lib/teads-aws/index.js +208 -0
- package/build/lib/teads-curve/index.d.ts +52 -0
- package/build/lib/teads-curve/index.js +158 -0
- package/build/lib/watt-time/index.d.ts +18 -0
- package/build/lib/watt-time/index.js +204 -0
- package/build/types/azure-importer.d.ts +29 -0
- package/build/types/azure-importer.js +3 -0
- package/build/types/boavizta.d.ts +7 -0
- package/build/types/boavizta.js +3 -0
- package/build/types/common.d.ts +7 -0
- package/build/types/common.js +9 -0
- package/build/types/impl.d.ts +40 -0
- package/build/types/impl.js +3 -0
- package/build/types/models-universe.d.ts +24 -0
- package/build/types/models-universe.js +3 -0
- package/build/types/process-args.d.ts +7 -0
- package/build/types/process-args.js +3 -0
- package/build/types/supercomputer.d.ts +4 -0
- package/build/types/supercomputer.js +3 -0
- package/build/util/args.d.ts +8 -0
- package/build/util/args.js +48 -0
- package/build/util/errors.d.ts +6 -0
- package/build/util/errors.js +22 -0
- package/build/util/helpers.d.ts +4 -0
- package/build/util/helpers.js +18 -0
- package/build/util/models-universe.d.ts +28 -0
- package/build/util/models-universe.js +95 -0
- package/build/util/observatory.d.ts +20 -0
- package/build/util/observatory.js +31 -0
- package/build/util/supercomputer.d.ts +30 -0
- package/build/util/supercomputer.js +109 -0
- package/build/util/validations.d.ts +25 -0
- package/build/util/validations.js +52 -0
- package/build/util/yaml.d.ts +13 -0
- package/build/util/yaml.js +36 -0
- package/coverage/clover.xml +1172 -0
- package/coverage/coverage-final.json +27 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/config/config.ts.html +310 -0
- package/coverage/lcov-report/config/index.html +146 -0
- package/coverage/lcov-report/config/index.ts.html +91 -0
- package/coverage/lcov-report/config/strings.ts.html +118 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +341 -0
- package/coverage/lcov-report/lib/boavizta/index.html +116 -0
- package/coverage/lcov-report/lib/boavizta/index.ts.html +1171 -0
- package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +277 -0
- package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +439 -0
- package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +550 -0
- package/coverage/lcov-report/lib/case-studies/index.html +176 -0
- package/coverage/lcov-report/lib/case-studies/index.ts.html +97 -0
- package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +232 -0
- package/coverage/lcov-report/lib/ccf/index.html +116 -0
- package/coverage/lcov-report/lib/ccf/index.ts.html +1339 -0
- package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +116 -0
- package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +370 -0
- package/coverage/lcov-report/lib/index.html +116 -0
- package/coverage/lcov-report/lib/index.ts.html +121 -0
- package/coverage/lcov-report/lib/sci/index.html +116 -0
- package/coverage/lcov-report/lib/sci/index.ts.html +571 -0
- package/coverage/lcov-report/lib/sci-e/index.html +116 -0
- package/coverage/lcov-report/lib/sci-e/index.ts.html +403 -0
- package/coverage/lcov-report/lib/sci-m/index.html +116 -0
- package/coverage/lcov-report/lib/sci-m/index.ts.html +487 -0
- package/coverage/lcov-report/lib/sci-o/index.html +116 -0
- package/coverage/lcov-report/lib/sci-o/index.ts.html +265 -0
- package/coverage/lcov-report/lib/shell-imp/index.html +116 -0
- package/coverage/lcov-report/lib/shell-imp/index.ts.html +376 -0
- package/coverage/lcov-report/lib/teads-aws/index.html +116 -0
- package/coverage/lcov-report/lib/teads-aws/index.ts.html +823 -0
- package/coverage/lcov-report/lib/teads-curve/index.html +116 -0
- package/coverage/lcov-report/lib/teads-curve/index.ts.html +625 -0
- package/coverage/lcov-report/lib/watt-time/index.html +116 -0
- package/coverage/lcov-report/lib/watt-time/index.ts.html +829 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/types/common.ts.html +109 -0
- package/coverage/lcov-report/types/index.html +116 -0
- package/coverage/lcov-report/util/args.ts.html +244 -0
- package/coverage/lcov-report/util/index.html +176 -0
- package/coverage/lcov-report/util/models-universe.ts.html +679 -0
- package/coverage/lcov-report/util/observatory.ts.html +229 -0
- package/coverage/lcov-report/util/supercomputer.ts.html +466 -0
- package/coverage/lcov-report/util/yaml.ts.html +193 -0
- package/coverage/lcov.info +2094 -0
- package/docs/implementations/tdp-finder.md +36 -0
- package/examples/impls/case-studies/accenture.yml +155 -0
- package/examples/impls/case-studies/aveva.yaml +48 -0
- package/examples/impls/case-studies/azure-yassine.yaml +67 -0
- package/examples/impls/case-studies/boavizta.yml +26 -0
- package/examples/impls/case-studies/dow_msft.yml +173 -0
- package/examples/impls/case-studies/farm-insights.yaml +35 -0
- package/examples/impls/case-studies/gsf-website.yaml +93 -0
- package/examples/impls/case-studies/msft-eshoppen.yaml +162 -0
- package/examples/impls/case-studies/msft-green-ai.yaml +58 -0
- package/examples/impls/case-studies/ntt-data-on-premise.yaml +201 -0
- package/examples/impls/tdp-finder-test.yml +19 -0
- package/examples/impls/test/azure.yml +26 -0
- package/examples/impls/test/ccf.yml +19 -0
- package/examples/impls/test/complex-pipeline.yml +67 -0
- package/examples/impls/test/if-demo.yml +51 -0
- package/examples/impls/test/metadata.yml +20 -0
- package/examples/impls/test/nesting.yml +65 -0
- package/examples/impls/test/sci-e.yml +21 -0
- package/examples/impls/test/sci-m.yml +24 -0
- package/examples/impls/test/sci-o.yml +28 -0
- package/examples/impls/test/sci.yml +27 -0
- package/examples/impls/test/shell.yml +18 -0
- package/examples/impls/test/toto.yaml +22 -0
- package/examples/ompls/azure.yml +145 -0
- package/examples/ompls/ccf.yml +27 -0
- package/examples/ompls/complex-pipeline.yml +105 -0
- package/examples/ompls/full-sci.yml +64 -0
- package/examples/ompls/if-demo.yml +493 -0
- package/examples/ompls/metadata.yml +29 -0
- package/examples/ompls/nesting.yml +107 -0
- package/examples/ompls/sci-e.yml +23 -0
- package/examples/ompls/sci-m.yml +33 -0
- package/examples/ompls/sci-o.yml +29 -0
- package/examples/ompls/sci.yml +36 -0
- package/examples/ompls/shell.yml +23 -0
- package/jest.config.js +14 -0
- package/package.json +71 -0
- package/scripts/impact-test.sh +12 -0
- package/src/__mocks__/boavizta/countries.json +138 -0
- package/src/__mocks__/boavizta/instance_types.json +625 -0
- package/src/__mocks__/boavizta/providers.json +1 -0
- package/src/__mocks__/watt-time/data.json +119 -0
- package/src/config/units.yaml +125 -0
- package/src/lib/ccf/aws-embodied.json +5591 -0
- package/src/lib/ccf/aws-instances.json +21116 -0
- package/src/lib/ccf/aws-use.json +79 -0
- package/src/lib/ccf/azure-embodied.json +6547 -0
- package/src/lib/ccf/azure-instances.json +8332 -0
- package/src/lib/ccf/azure-use.json +58 -0
- package/src/lib/ccf/gcp-embodied.json +3049 -0
- package/src/lib/ccf/gcp-instances.json +3880 -0
- package/src/lib/ccf/gcp-use.json +58 -0
- package/src/lib/cloud-instance-metadata/aws-instances.json +1 -0
- package/src/lib/cloud-instance-metadata/azure-instances.json +1 -0
- package/src/lib/shell-imp/sampler +30 -0
- package/src/lib/tdp-finder/README.md +7 -0
- package/src/lib/tdp-finder/boavizta_data.csv +1768 -0
- package/src/lib/tdp-finder/data.csv +4460 -0
- package/src/lib/tdp-finder/data2.csv +2162 -0
- package/src/lib/teads-aws/aws-embodied.json +1 -0
- package/src/lib/teads-aws/aws-instances.json +1 -0
- package/tsconfig.test.json +39 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/yarn-error.log +5854 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelsUniverse = void 0;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
const { ModelInitializationError, ModelCredentialError } = errors_1.ERRORS;
|
|
7
|
+
const { GITHUB_PATH } = config_1.CONFIG;
|
|
8
|
+
const { MISSING_CLASSNAME, NOT_OUTPUT_MODEL_EXTENSION, NOT_INITIALIZED_MODEL, MISSING_PATH, MODEL_DOESNT_EXIST, NOT_NATIVE_MODEL, } = config_1.STRINGS;
|
|
9
|
+
/**
|
|
10
|
+
* Models Initialization Lifecycle.
|
|
11
|
+
*/
|
|
12
|
+
class ModelsUniverse {
|
|
13
|
+
constructor() {
|
|
14
|
+
/**
|
|
15
|
+
* Models list.
|
|
16
|
+
*/
|
|
17
|
+
this.initalizedModels = {};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Checks if model is instance of `IOutputModelInterface`.
|
|
21
|
+
*/
|
|
22
|
+
instanceOfModel(ClassContainer) {
|
|
23
|
+
try {
|
|
24
|
+
const testModel = new ClassContainer();
|
|
25
|
+
const boolable = 'configure' in testModel && 'execute' in testModel;
|
|
26
|
+
return boolable;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw ModelInitializationError(MODEL_DOESNT_EXIST);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns plugin model. Checks if model is missing then rejects with error.
|
|
34
|
+
* Then checks if `path` is starting with github, then grabs the repository name.
|
|
35
|
+
* Imports module, then checks if it's a class which implements input model interface.
|
|
36
|
+
*/
|
|
37
|
+
async handPluginModel(model, path) {
|
|
38
|
+
if (!model) {
|
|
39
|
+
throw new ModelCredentialError(MISSING_CLASSNAME);
|
|
40
|
+
}
|
|
41
|
+
if (!path) {
|
|
42
|
+
throw new ModelCredentialError(MISSING_PATH);
|
|
43
|
+
}
|
|
44
|
+
if (path?.startsWith(GITHUB_PATH)) {
|
|
45
|
+
const parts = path.split('/');
|
|
46
|
+
path = parts[parts.length - 1];
|
|
47
|
+
}
|
|
48
|
+
if (!path.includes('if-models')) {
|
|
49
|
+
console.log(NOT_NATIVE_MODEL);
|
|
50
|
+
}
|
|
51
|
+
const pluginModule = await Promise.resolve(`${path}`).then(s => require(s));
|
|
52
|
+
if (this.instanceOfModel(pluginModule[model])) {
|
|
53
|
+
return pluginModule[model];
|
|
54
|
+
}
|
|
55
|
+
throw new Error(NOT_OUTPUT_MODEL_EXTENSION);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Initializes and registers model.
|
|
59
|
+
*/
|
|
60
|
+
writeDown(modelToInitalize) {
|
|
61
|
+
const { name, config, model, path } = modelToInitalize;
|
|
62
|
+
const callback = async (graphOptions) => {
|
|
63
|
+
const Model = await this.handPluginModel(model, path);
|
|
64
|
+
const params = {
|
|
65
|
+
...config,
|
|
66
|
+
...graphOptions,
|
|
67
|
+
};
|
|
68
|
+
const initalizedModel = await new Model().configure(params);
|
|
69
|
+
return initalizedModel;
|
|
70
|
+
};
|
|
71
|
+
this.initalizedModels = {
|
|
72
|
+
...this.initalizedModels,
|
|
73
|
+
[name]: callback,
|
|
74
|
+
};
|
|
75
|
+
return this.initalizedModels;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns existing model by `name`.
|
|
79
|
+
*/
|
|
80
|
+
async getInitializedModel(modelName, config) {
|
|
81
|
+
try {
|
|
82
|
+
if (this.initalizedModels[modelName]) {
|
|
83
|
+
return await this.initalizedModels[modelName](config);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (error instanceof Error) {
|
|
88
|
+
throw new ModelInitializationError(error.message);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
throw new ModelInitializationError(NOT_INITIALIZED_MODEL(modelName));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.ModelsUniverse = ModelsUniverse;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvbW9kZWxzLXVuaXZlcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFnQztBQUVoQyxzQ0FBMEM7QUFRMUMsTUFBTSxFQUFDLHdCQUF3QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRWhFLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDN0IsTUFBTSxFQUNKLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEdBQ2pCLEdBQUcsZ0JBQU8sQ0FBQztBQUVaOztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQTNCO1FBQ0U7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBcUIsRUFBRSxDQUFDO0lBNEZqRCxDQUFDO0lBMUZDOztPQUVHO0lBQ0ssZUFBZSxDQUFDLGNBQW1CO1FBQ3pDLElBQUk7WUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBRXZDLE1BQU0sUUFBUSxHQUFHLFdBQVcsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQztZQUVwRSxPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQWMsRUFBRSxJQUFhO1FBQ3pELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLElBQUksb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNuRDtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0I7UUFFRCxNQUFNLFlBQVksR0FBRyx5QkFBYSxJQUFJLHlCQUFDLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxnQkFBcUM7UUFDcEQsTUFBTSxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxHQUFHLGdCQUFnQixDQUFDO1FBRXJELE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxZQUEwQixFQUFFLEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV0RCxNQUFNLE1BQU0sR0FBRztnQkFDYixHQUFHLE1BQU07Z0JBQ1QsR0FBRyxZQUFZO2FBQ2hCLENBQUM7WUFFRixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTVELE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN0QixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7WUFDeEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO1NBQ2pCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxNQUFXO1FBQzdELElBQUk7WUFDRixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2RDtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbkQ7U0FDRjtRQUVELE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQWhHRCx3Q0FnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge0NPTkZJRywgU1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtcbiAgR3JhcGhPcHRpb25zLFxuICBJbXBsSW5pdGlhbGl6ZU1vZGVsLFxuICBJbml0YWxpemVkTW9kZWxzLFxufSBmcm9tICcuLi90eXBlcy9tb2RlbHMtdW5pdmVyc2UnO1xuXG5jb25zdCB7TW9kZWxJbml0aWFsaXphdGlvbkVycm9yLCBNb2RlbENyZWRlbnRpYWxFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtHSVRIVUJfUEFUSH0gPSBDT05GSUc7XG5jb25zdCB7XG4gIE1JU1NJTkdfQ0xBU1NOQU1FLFxuICBOT1RfT1VUUFVUX01PREVMX0VYVEVOU0lPTixcbiAgTk9UX0lOSVRJQUxJWkVEX01PREVMLFxuICBNSVNTSU5HX1BBVEgsXG4gIE1PREVMX0RPRVNOVF9FWElTVCxcbiAgTk9UX05BVElWRV9NT0RFTCxcbn0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIE1vZGVscyBJbml0aWFsaXphdGlvbiBMaWZlY3ljbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RlbHNVbml2ZXJzZSB7XG4gIC8qKlxuICAgKiBNb2RlbHMgbGlzdC5cbiAgICovXG4gIHB1YmxpYyBpbml0YWxpemVkTW9kZWxzOiBJbml0YWxpemVkTW9kZWxzID0ge307XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBtb2RlbCBpcyBpbnN0YW5jZSBvZiBgSU91dHB1dE1vZGVsSW50ZXJmYWNlYC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFuY2VPZk1vZGVsKENsYXNzQ29udGFpbmVyOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVzdE1vZGVsID0gbmV3IENsYXNzQ29udGFpbmVyKCk7XG5cbiAgICAgIGNvbnN0IGJvb2xhYmxlID0gJ2NvbmZpZ3VyZScgaW4gdGVzdE1vZGVsICYmICdleGVjdXRlJyBpbiB0ZXN0TW9kZWw7XG5cbiAgICAgIHJldHVybiBib29sYWJsZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE1PREVMX0RPRVNOVF9FWElTVCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGx1Z2luIG1vZGVsLiBDaGVja3MgaWYgbW9kZWwgaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAgICogVGhlbiBjaGVja3MgaWYgYHBhdGhgIGlzIHN0YXJ0aW5nIHdpdGggZ2l0aHViLCB0aGVuIGdyYWJzIHRoZSByZXBvc2l0b3J5IG5hbWUuXG4gICAqIEltcG9ydHMgbW9kdWxlLCB0aGVuIGNoZWNrcyBpZiBpdCdzIGEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBpbnB1dCBtb2RlbCBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRQbHVnaW5Nb2RlbChtb2RlbD86IHN0cmluZywgcGF0aD86IHN0cmluZykge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBNb2RlbENyZWRlbnRpYWxFcnJvcihNSVNTSU5HX0NMQVNTTkFNRSk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgTW9kZWxDcmVkZW50aWFsRXJyb3IoTUlTU0lOR19QQVRIKTtcbiAgICB9XG5cbiAgICBpZiAocGF0aD8uc3RhcnRzV2l0aChHSVRIVUJfUEFUSCkpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgcGF0aCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIGlmICghcGF0aC5pbmNsdWRlcygnaWYtbW9kZWxzJykpIHtcbiAgICAgIGNvbnNvbGUubG9nKE5PVF9OQVRJVkVfTU9ERUwpO1xuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpbk1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKTtcblxuICAgIGlmICh0aGlzLmluc3RhbmNlT2ZNb2RlbChwbHVnaW5Nb2R1bGVbbW9kZWxdKSkge1xuICAgICAgcmV0dXJuIHBsdWdpbk1vZHVsZVttb2RlbF07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKE5PVF9PVVRQVVRfTU9ERUxfRVhURU5TSU9OKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhbmQgcmVnaXN0ZXJzIG1vZGVsLlxuICAgKi9cbiAgcHVibGljIHdyaXRlRG93bihtb2RlbFRvSW5pdGFsaXplOiBJbXBsSW5pdGlhbGl6ZU1vZGVsKSB7XG4gICAgY29uc3Qge25hbWUsIGNvbmZpZywgbW9kZWwsIHBhdGh9ID0gbW9kZWxUb0luaXRhbGl6ZTtcblxuICAgIGNvbnN0IGNhbGxiYWNrID0gYXN5bmMgKGdyYXBoT3B0aW9uczogR3JhcGhPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBNb2RlbCA9IGF3YWl0IHRoaXMuaGFuZFBsdWdpbk1vZGVsKG1vZGVsLCBwYXRoKTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIC4uLmdyYXBoT3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGluaXRhbGl6ZWRNb2RlbCA9IGF3YWl0IG5ldyBNb2RlbCgpLmNvbmZpZ3VyZShwYXJhbXMpO1xuXG4gICAgICByZXR1cm4gaW5pdGFsaXplZE1vZGVsO1xuICAgIH07XG5cbiAgICB0aGlzLmluaXRhbGl6ZWRNb2RlbHMgPSB7XG4gICAgICAuLi50aGlzLmluaXRhbGl6ZWRNb2RlbHMsXG4gICAgICBbbmFtZV06IGNhbGxiYWNrLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pbml0YWxpemVkTW9kZWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZXhpc3RpbmcgbW9kZWwgYnkgYG5hbWVgLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEluaXRpYWxpemVkTW9kZWwobW9kZWxOYW1lOiBzdHJpbmcsIGNvbmZpZzogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmluaXRhbGl6ZWRNb2RlbHNbbW9kZWxOYW1lXSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0YWxpemVkTW9kZWxzW21vZGVsTmFtZV0oY29uZmlnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IE1vZGVsSW5pdGlhbGl6YXRpb25FcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE5PVF9JTklUSUFMSVpFRF9NT0RFTChtb2RlbE5hbWUpKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IOutputModelInterface } from '../lib';
|
|
2
|
+
/**
|
|
3
|
+
* Observatory is responsible for output calculations based on the `inputs` and the `model`.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Observatory {
|
|
6
|
+
private inputs;
|
|
7
|
+
private outputs;
|
|
8
|
+
/**
|
|
9
|
+
* Init inputs object.
|
|
10
|
+
*/
|
|
11
|
+
constructor(inputs: any);
|
|
12
|
+
/**
|
|
13
|
+
* Does investigations by given `output` information
|
|
14
|
+
*/
|
|
15
|
+
doInvestigationsWith(modelInstance: IOutputModelInterface): Promise<this>;
|
|
16
|
+
/**
|
|
17
|
+
* Getter for output data.
|
|
18
|
+
*/
|
|
19
|
+
getOutputs(): any[];
|
|
20
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Observatory = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Observatory is responsible for output calculations based on the `inputs` and the `model`.
|
|
6
|
+
*/
|
|
7
|
+
class Observatory {
|
|
8
|
+
/**
|
|
9
|
+
* Init inputs object.
|
|
10
|
+
*/
|
|
11
|
+
constructor(inputs) {
|
|
12
|
+
this.outputs = [];
|
|
13
|
+
this.inputs = inputs;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Does investigations by given `output` information
|
|
17
|
+
*/
|
|
18
|
+
async doInvestigationsWith(modelInstance) {
|
|
19
|
+
const reuseCalculation = this.outputs.length ? this.outputs : this.inputs;
|
|
20
|
+
this.outputs = await modelInstance.execute(reuseCalculation);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Getter for output data.
|
|
25
|
+
*/
|
|
26
|
+
getOutputs() {
|
|
27
|
+
return this.outputs;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.Observatory = Observatory;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9vYnNlcnZhdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7R0FFRztBQUNILE1BQWEsV0FBVztJQUl0Qjs7T0FFRztJQUNILFlBQVksTUFBVztRQUxmLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFNMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLG9CQUFvQixDQUFDLGFBQW9DO1FBQ3BFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBNUJELGtDQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SU91dHB1dE1vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi9saWInO1xuXG4vKipcbiAqIE9ic2VydmF0b3J5IGlzIHJlc3BvbnNpYmxlIGZvciBvdXRwdXQgY2FsY3VsYXRpb25zIGJhc2VkIG9uIHRoZSBgaW5wdXRzYCBhbmQgdGhlIGBtb2RlbGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBPYnNlcnZhdG9yeSB7XG4gIHByaXZhdGUgaW5wdXRzOiBhbnlbXTtcbiAgcHJpdmF0ZSBvdXRwdXRzOiBhbnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJbml0IGlucHV0cyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpbnB1dHM6IGFueSkge1xuICAgIHRoaXMuaW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIERvZXMgaW52ZXN0aWdhdGlvbnMgYnkgZ2l2ZW4gYG91dHB1dGAgaW5mb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkb0ludmVzdGlnYXRpb25zV2l0aChtb2RlbEluc3RhbmNlOiBJT3V0cHV0TW9kZWxJbnRlcmZhY2UpIHtcbiAgICBjb25zdCByZXVzZUNhbGN1bGF0aW9uID0gdGhpcy5vdXRwdXRzLmxlbmd0aCA/IHRoaXMub3V0cHV0cyA6IHRoaXMuaW5wdXRzO1xuXG4gICAgdGhpcy5vdXRwdXRzID0gYXdhaXQgbW9kZWxJbnN0YW5jZS5leGVjdXRlKHJldXNlQ2FsY3VsYXRpb24pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIGZvciBvdXRwdXQgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBnZXRPdXRwdXRzKCkge1xuICAgIHJldHVybiB0aGlzLm91dHB1dHM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ModelsUniverse } from './models-universe';
|
|
2
|
+
import { Impl } from '../types/impl';
|
|
3
|
+
/**
|
|
4
|
+
* Computer for `impl` documents.
|
|
5
|
+
*/
|
|
6
|
+
export declare class Supercomputer {
|
|
7
|
+
private olderChild;
|
|
8
|
+
private impl;
|
|
9
|
+
private modelsHandbook;
|
|
10
|
+
constructor(impl: Impl, modelsHandbook: ModelsUniverse);
|
|
11
|
+
/**
|
|
12
|
+
* Flattens config entries.
|
|
13
|
+
*/
|
|
14
|
+
private flattenConfigValues;
|
|
15
|
+
/**
|
|
16
|
+
* Adds config entries to each obsercation object passed.
|
|
17
|
+
*/
|
|
18
|
+
private enrichInputs;
|
|
19
|
+
/**
|
|
20
|
+
* If child is top level, then initializes `this.olderChild`.
|
|
21
|
+
* If `children` object contains `children` property, it means inputs are nested (calls compute again).
|
|
22
|
+
* Otherwise enriches inputs, passes them to Observatory.
|
|
23
|
+
* For each model from pipeline Observatory gathers inputs. Then results are stored.
|
|
24
|
+
*/
|
|
25
|
+
private calculateOutputsForChild;
|
|
26
|
+
/**
|
|
27
|
+
* Checks if object is top level children or nested, then runs through all children and calculates outputs.
|
|
28
|
+
*/
|
|
29
|
+
compute(childrenObject?: any): Promise<Impl>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Supercomputer = void 0;
|
|
4
|
+
const observatory_1 = require("./observatory");
|
|
5
|
+
const errors_1 = require("./errors");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
const { ImplValidationError } = errors_1.ERRORS;
|
|
8
|
+
const { STRUCTURE_MALFORMED } = config_1.STRINGS;
|
|
9
|
+
/**
|
|
10
|
+
* Computer for `impl` documents.
|
|
11
|
+
*/
|
|
12
|
+
class Supercomputer {
|
|
13
|
+
constructor(impl, modelsHandbook) {
|
|
14
|
+
this.olderChild = { name: '', info: {} };
|
|
15
|
+
this.impl = impl;
|
|
16
|
+
this.modelsHandbook = modelsHandbook;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Flattens config entries.
|
|
20
|
+
*/
|
|
21
|
+
flattenConfigValues(config) {
|
|
22
|
+
if (!config) {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
const configModelNames = Object.keys(config);
|
|
26
|
+
const values = configModelNames.reduce((acc, name) => {
|
|
27
|
+
acc = {
|
|
28
|
+
...acc,
|
|
29
|
+
...config[name],
|
|
30
|
+
};
|
|
31
|
+
return acc;
|
|
32
|
+
}, {});
|
|
33
|
+
return values;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Adds config entries to each obsercation object passed.
|
|
37
|
+
*/
|
|
38
|
+
enrichInputs(inputs, config, nestedConfig) {
|
|
39
|
+
const configValues = this.flattenConfigValues(config);
|
|
40
|
+
const nestedConfigValues = this.flattenConfigValues(nestedConfig);
|
|
41
|
+
return inputs.map((input) => ({
|
|
42
|
+
...input,
|
|
43
|
+
...configValues,
|
|
44
|
+
...nestedConfigValues,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* If child is top level, then initializes `this.olderChild`.
|
|
49
|
+
* If `children` object contains `children` property, it means inputs are nested (calls compute again).
|
|
50
|
+
* Otherwise enriches inputs, passes them to Observatory.
|
|
51
|
+
* For each model from pipeline Observatory gathers inputs. Then results are stored.
|
|
52
|
+
*/
|
|
53
|
+
async calculateOutputsForChild(childrenObject, params) {
|
|
54
|
+
const { childName, areChildrenNested } = params;
|
|
55
|
+
if (!areChildrenNested) {
|
|
56
|
+
this.olderChild = {
|
|
57
|
+
name: childName,
|
|
58
|
+
info: this.impl.graph.children[childName],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const { pipeline, inputs, config } = this.olderChild.info;
|
|
62
|
+
if ('children' in childrenObject[childName]) {
|
|
63
|
+
return this.compute(childrenObject[childName].children);
|
|
64
|
+
}
|
|
65
|
+
if (!('inputs' in childrenObject[childName])) {
|
|
66
|
+
throw new ImplValidationError(STRUCTURE_MALFORMED(childName));
|
|
67
|
+
}
|
|
68
|
+
const specificInputs = areChildrenNested
|
|
69
|
+
? childrenObject[childName].inputs
|
|
70
|
+
: inputs;
|
|
71
|
+
const childrenConfig = childrenObject[childName].config || {};
|
|
72
|
+
const enrichedInputs = this.enrichInputs(specificInputs, config, childrenConfig);
|
|
73
|
+
const observatory = new observatory_1.Observatory(enrichedInputs);
|
|
74
|
+
for (const modelName of pipeline) {
|
|
75
|
+
const params = config && config[modelName];
|
|
76
|
+
const modelInstance = await this.modelsHandbook.getInitializedModel(modelName, params);
|
|
77
|
+
await observatory.doInvestigationsWith(modelInstance);
|
|
78
|
+
}
|
|
79
|
+
const outputs = observatory.getOutputs();
|
|
80
|
+
if (areChildrenNested) {
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
this.impl.graph.children[this.olderChild.name].children[childName].outputs = observatory.getOutputs();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.impl.graph.children[this.olderChild.name].outputs = outputs;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Checks if object is top level children or nested, then runs through all children and calculates outputs.
|
|
91
|
+
*/
|
|
92
|
+
async compute(childrenObject) {
|
|
93
|
+
const implOrChildren = childrenObject || this.impl;
|
|
94
|
+
const areChildrenNested = !!childrenObject;
|
|
95
|
+
const children = areChildrenNested
|
|
96
|
+
? implOrChildren
|
|
97
|
+
: implOrChildren.graph.children;
|
|
98
|
+
const childrenNames = Object.keys(children);
|
|
99
|
+
for (const childName of childrenNames) {
|
|
100
|
+
await this.calculateOutputsForChild(children, {
|
|
101
|
+
childName,
|
|
102
|
+
areChildrenNested,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return this.impl;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.Supercomputer = Supercomputer;
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwZXJjb21wdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3N1cGVyY29tcHV0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0NBQTBDO0FBRTFDLHFDQUFnQztBQUVoQyxzQ0FBa0M7QUFLbEMsTUFBTSxFQUFDLG1CQUFtQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRXJDLE1BQU0sRUFBQyxtQkFBbUIsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFLeEIsWUFBWSxJQUFVLEVBQUUsY0FBOEI7UUFKOUMsZUFBVSxHQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBSzFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUFDLE1BQWM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxFQUFFO1lBQ2hFLEdBQUcsR0FBRztnQkFDSixHQUFHLEdBQUc7Z0JBQ04sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2hCLENBQUM7WUFFRixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FDbEIsTUFBcUIsRUFDckIsTUFBYyxFQUNkLFlBQW9CO1FBRXBCLE1BQU0sWUFBWSxHQUFH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SUFBSSxDQUFDLElBQUksQ0FBQztRQUNuRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQWEsaUJBQWlCO1lBQzFDLENBQUMsQ0FBQyxjQUFjO1lBQ2hCLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVDLEtBQUssTUFBTSxTQUFTLElBQUksYUFBYSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtnQkFDNUMsU0FBUztnQkFDVCxpQkFBaUI7YUFDbEIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBMUlELHNDQTBJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9kZWxzVW5pdmVyc2V9IGZyb20gJy4vbW9kZWxzLXVuaXZlcnNlJztcbmltcG9ydCB7T2JzZXJ2YXRvcnl9IGZyb20gJy4vb2JzZXJ2YXRvcnknO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7Q2hpbGRJbmZvcm1hdGlvbn0gZnJvbSAnLi4vdHlwZXMvc3VwZXJjb21wdXRlcic7XG5pbXBvcnQge0NoaWxkcmVuLCBDb25maWcsIEltcGwsIE1vZGVsUGFyYW1zfSBmcm9tICcuLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0ltcGxWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCB7U1RSVUNUVVJFX01BTEZPUk1FRH0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIENvbXB1dGVyIGZvciBgaW1wbGAgZG9jdW1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU3VwZXJjb21wdXRlciB7XG4gIHByaXZhdGUgb2xkZXJDaGlsZDogQ2hpbGRJbmZvcm1hdGlvbiA9IHtuYW1lOiAnJywgaW5mbzoge319O1xuICBwcml2YXRlIGltcGw6IEltcGw7XG4gIHByaXZhdGUgbW9kZWxzSGFuZGJvb2s6IE1vZGVsc1VuaXZlcnNlO1xuXG4gIGNvbnN0cnVjdG9yKGltcGw6IEltcGwsIG1vZGVsc0hhbmRib29rOiBNb2RlbHNVbml2ZXJzZSkge1xuICAgIHRoaXMuaW1wbCA9IGltcGw7XG4gICAgdGhpcy5tb2RlbHNIYW5kYm9vayA9IG1vZGVsc0hhbmRib29rO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW5zIGNvbmZpZyBlbnRyaWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBmbGF0dGVuQ29uZmlnVmFsdWVzKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdNb2RlbE5hbWVzID0gT2JqZWN0LmtleXMoY29uZmlnKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBjb25maWdNb2RlbE5hbWVzLnJlZHVjZSgoYWNjOiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgYWNjID0ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIC4uLmNvbmZpZ1tuYW1lXSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNvbmZpZyBlbnRyaWVzIHRvIGVhY2ggb2JzZXJjYXRpb24gb2JqZWN0IHBhc3NlZC5cbiAgICovXG4gIHByaXZhdGUgZW5yaWNoSW5wdXRzKFxuICAgIGlucHV0czogTW9kZWxQYXJhbXNbXSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBuZXN0ZWRDb25maWc6IENvbmZpZ1xuICApIHtcbiAgICBjb25zdCBjb25maWdWYWx1ZXMgPSB0aGlzLmZsYXR0ZW5Db25maWdWYWx1ZXMoY29uZmlnKTtcbiAgICBjb25zdCBuZXN0ZWRDb25maWdWYWx1ZXMgPSB0aGlzLmZsYXR0ZW5Db25maWdWYWx1ZXMobmVzdGVkQ29uZmlnKTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKChpbnB1dDogYW55KSA9PiAoe1xuICAgICAgLi4uaW5wdXQsXG4gICAgICAuLi5jb25maWdWYWx1ZXMsXG4gICAgICAuLi5uZXN0ZWRDb25maWdWYWx1ZXMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGNoaWxkIGlzIHRvcCBsZXZlbCwgdGhlbiBpbml0aWFsaXplcyBgdGhpcy5vbGRlckNoaWxkYC5cbiAgICogSWYgYGNoaWxkcmVuYCBvYmplY3QgY29udGFpbnMgYGNoaWxkcmVuYCBwcm9wZXJ0eSwgaXQgbWVhbnMgaW5wdXRzIGFyZSBuZXN0ZWQgKGNhbGxzIGNvbXB1dGUgYWdhaW4pLlxuICAgKiBPdGhlcndpc2UgZW5yaWNoZXMgaW5wdXRzLCBwYXNzZXMgdGhlbSB0byBPYnNlcnZhdG9yeS5cbiAgICogRm9yIGVhY2ggbW9kZWwgZnJvbSBwaXBlbGluZSBPYnNlcnZhdG9yeSBnYXRoZXJzIGlucHV0cy4gVGhlbiByZXN1bHRzIGFyZSBzdG9yZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZU91dHB1dHNGb3JDaGlsZChcbiAgICBjaGlsZHJlbk9iamVjdDogQ2hpbGRyZW4sXG4gICAgcGFyYW1zOiBhbnlcbiAgKSB7XG4gICAgY29uc3Qge2NoaWxkTmFtZSwgYXJlQ2hpbGRyZW5OZXN0ZWR9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCFhcmVDaGlsZHJlbk5lc3RlZCkge1xuICAgICAgdGhpcy5vbGRlckNoaWxkID0ge1xuICAgICAgICBuYW1lOiBjaGlsZE5hbWUsXG4gICAgICAgIGluZm86IHRoaXMuaW1wbC5ncmFwaC5jaGlsZHJlbltjaGlsZE5hbWVdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cGlwZWxpbmUsIGlucHV0cywgY29uZmlnfSA9IHRoaXMub2xkZXJDaGlsZC5pbmZvO1xuXG4gICAgaWYgKCdjaGlsZHJlbicgaW4gY2hpbGRyZW5PYmplY3RbY2hpbGROYW1lXSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZShjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdLmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBpZiAoISgnaW5wdXRzJyBpbiBjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdKSkge1xuICAgICAgdGhyb3cgbmV3IEltcGxWYWxpZGF0aW9uRXJyb3IoU1RSVUNUVVJFX01BTEZPUk1FRChjaGlsZE5hbWUpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWZpY0lucHV0cyA9IGFyZUNoaWxkcmVuTmVzdGVkXG4gICAgICA/IGNoaWxkcmVuT2JqZWN0W2NoaWxkTmFtZV0uaW5wdXRzXG4gICAgICA6IGlucHV0cztcblxuICAgIGNvbnN0IGNoaWxkcmVuQ29uZmlnID0gY2hpbGRyZW5PYmplY3RbY2hpbGROYW1lXS5jb25maWcgfHwge307XG5cbiAgICBjb25zdCBlbnJpY2hlZElucHV0cyA9IHRoaXMuZW5yaWNoSW5wdXRzKFxuICAgICAgc3BlY2lmaWNJbnB1dHMsXG4gICAgICBjb25maWcsXG4gICAgICBjaGlsZHJlbkNvbmZpZ1xuICAgICk7XG5cbiAgICBjb25zdCBvYnNlcnZhdG9yeSA9IG5ldyBPYnNlcnZhdG9yeShlbnJpY2hlZElucHV0cyk7XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBvZiBwaXBlbGluZSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gY29uZmlnICYmIGNvbmZpZ1ttb2RlbE5hbWVdO1xuICAgICAgY29uc3QgbW9kZWxJbnN0YW5jZSA9IGF3YWl0IHRoaXMubW9kZWxzSGFuZGJvb2suZ2V0SW5pdGlhbGl6ZWRNb2RlbChcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBwYXJhbXNcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IG9ic2VydmF0b3J5LmRvSW52ZXN0aWdhdGlvbnNXaXRoKG1vZGVsSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHMgPSBvYnNlcnZhdG9yeS5nZXRPdXRwdXRzKCk7XG5cbiAgICBpZiAoYXJlQ2hpbGRyZW5OZXN0ZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuaW1wbC5ncmFwaC5jaGlsZHJlblt0aGlzLm9sZGVyQ2hpbGQubmFtZV0uY2hpbGRyZW5bXG4gICAgICAgIGNoaWxkTmFtZVxuICAgICAgXS5vdXRwdXRzID0gb2JzZXJ2YXRvcnkuZ2V0T3V0cHV0cygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsLmdyYXBoLmNoaWxkcmVuW3RoaXMub2xkZXJDaGlsZC5uYW1lXS5vdXRwdXRzID0gb3V0cHV0cztcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG9iamVjdCBpcyB0b3AgbGV2ZWwgY2hpbGRyZW4gb3IgbmVzdGVkLCB0aGVuIHJ1bnMgdGhyb3VnaCBhbGwgY2hpbGRyZW4gYW5kIGNhbGN1bGF0ZXMgb3V0cHV0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wdXRlKGNoaWxkcmVuT2JqZWN0PzogYW55KSB7XG4gICAgY29uc3QgaW1wbE9yQ2hpbGRyZW4gPSBjaGlsZHJlbk9iamVjdCB8fCB0aGlzLmltcGw7XG4gICAgY29uc3QgYXJlQ2hpbGRyZW5OZXN0ZWQgPSAhIWNoaWxkcmVuT2JqZWN0O1xuICAgIGNvbnN0IGNoaWxkcmVuOiBDaGlsZHJlbiA9IGFyZUNoaWxkcmVuTmVzdGVkXG4gICAgICA/IGltcGxPckNoaWxkcmVuXG4gICAgICA6IGltcGxPckNoaWxkcmVuLmdyYXBoLmNoaWxkcmVuO1xuICAgIGNvbnN0IGNoaWxkcmVuTmFtZXMgPSBPYmplY3Qua2V5cyhjaGlsZHJlbik7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTmFtZSBvZiBjaGlsZHJlbk5hbWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbGN1bGF0ZU91dHB1dHNGb3JDaGlsZChjaGlsZHJlbiwge1xuICAgICAgICBjaGlsZE5hbWUsXG4gICAgICAgIGFyZUNoaWxkcmVuTmVzdGVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW1wbDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Impl } from '../types/impl';
|
|
2
|
+
/**
|
|
3
|
+
* Validates given `impl` object to match pattern.
|
|
4
|
+
*/
|
|
5
|
+
export declare const validateImpl: (impl: Impl) => {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string | null;
|
|
8
|
+
tags: {
|
|
9
|
+
kind?: string | undefined;
|
|
10
|
+
complexity?: string | undefined;
|
|
11
|
+
category?: string | undefined;
|
|
12
|
+
} | null;
|
|
13
|
+
initialize: {
|
|
14
|
+
models: {
|
|
15
|
+
name: string;
|
|
16
|
+
kind?: string | undefined;
|
|
17
|
+
path?: string | undefined;
|
|
18
|
+
model?: string | undefined;
|
|
19
|
+
config?: Record<string, any> | undefined;
|
|
20
|
+
}[];
|
|
21
|
+
};
|
|
22
|
+
graph: {
|
|
23
|
+
children: Record<string, any>;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateImpl = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const errors_1 = require("./errors");
|
|
6
|
+
const { ImplValidationError } = errors_1.ERRORS;
|
|
7
|
+
const implValidation = zod_1.z.object({
|
|
8
|
+
name: zod_1.z.string(),
|
|
9
|
+
description: zod_1.z.string().nullable(),
|
|
10
|
+
tags: zod_1.z
|
|
11
|
+
.object({
|
|
12
|
+
kind: zod_1.z.string().optional(),
|
|
13
|
+
complexity: zod_1.z.string().optional(),
|
|
14
|
+
category: zod_1.z.string().optional(),
|
|
15
|
+
})
|
|
16
|
+
.nullable(),
|
|
17
|
+
initialize: zod_1.z.object({
|
|
18
|
+
models: zod_1.z.array(zod_1.z.object({
|
|
19
|
+
name: zod_1.z.string(),
|
|
20
|
+
kind: zod_1.z.string().optional(),
|
|
21
|
+
path: zod_1.z.string().optional(),
|
|
22
|
+
model: zod_1.z.string().optional(),
|
|
23
|
+
config: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(),
|
|
24
|
+
})),
|
|
25
|
+
}),
|
|
26
|
+
graph: zod_1.z
|
|
27
|
+
.object({
|
|
28
|
+
children: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
|
|
29
|
+
})
|
|
30
|
+
.required(),
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Validates given `impl` object to match pattern.
|
|
34
|
+
*/
|
|
35
|
+
const validateImpl = (impl) => {
|
|
36
|
+
const validatedImpl = implValidation.safeParse(impl);
|
|
37
|
+
if (!validatedImpl.success) {
|
|
38
|
+
const prettifyErrorMessage = (issues) => {
|
|
39
|
+
const issuesArray = JSON.parse(issues);
|
|
40
|
+
return issuesArray.map((issue) => {
|
|
41
|
+
const { code, path, message } = issue;
|
|
42
|
+
const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
|
|
43
|
+
const fullPath = flattenPath.join('.');
|
|
44
|
+
return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
throw new ImplValidationError(prettifyErrorMessage(validatedImpl.error.message));
|
|
48
|
+
}
|
|
49
|
+
return validatedImpl.data;
|
|
50
|
+
};
|
|
51
|
+
exports.validateImpl = validateImpl;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBZ0M7QUFFaEMscUNBQWdDO0FBSWhDLE1BQU0sRUFBQyxtQkFBbUIsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUVyQyxNQUFNLGNBQWMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xDLElBQUksRUFBRSxPQUFDO1NBQ0osTUFBTSxDQUFDO1FBQ04sSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDM0IsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDakMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQztTQUNELFFBQVEsRUFBRTtJQUNiLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25CLE1BQU0sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUNiLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDUCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMzQixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMzQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUM1QixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQ2pELENBQUMsQ0FDSDtLQUNGLENBQUM7SUFDRixLQUFLLEVBQUUsT0FBQztTQUNMLE1BQU0sQ0FBQztRQUNOLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDeEMsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0ksTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtJQUN6QyxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1FBQzFCLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZDLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWUsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7Z0JBQ0YsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFdkMsT0FBTyxJQUFJLFFBQVEsa0JBQWtCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLElBQUksR0FBRyxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsTUFBTSxJQUFJLG1CQUFtQixDQUMzQixvQkFBb0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUNsRCxDQUFDO0tBQ0g7SUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBeEJXLFFBQUEsWUFBWSxnQkF3QnZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgen0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IHtJbXBsfSBmcm9tICcuLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0ltcGxWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCBpbXBsVmFsaWRhdGlvbiA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdGFnczogelxuICAgIC5vYmplY3Qoe1xuICAgICAga2luZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY29tcGxleGl0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC5udWxsYWJsZSgpLFxuICBpbml0aWFsaXplOiB6Lm9iamVjdCh7XG4gICAgbW9kZWxzOiB6LmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgY29uZmlnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICB9KSxcbiAgZ3JhcGg6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGNoaWxkcmVuOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICB9KVxuICAgIC5yZXF1aXJlZCgpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBpbXBsYCBvYmplY3QgdG8gbWF0Y2ggcGF0dGVybi5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlSW1wbCA9IChpbXBsOiBJbXBsKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZEltcGwgPSBpbXBsVmFsaWRhdGlvbi5zYWZlUGFyc2UoaW1wbCk7XG5cbiAgaWYgKCF2YWxpZGF0ZWRJbXBsLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBwcmV0dGlmeUVycm9yTWVzc2FnZSA9IChpc3N1ZXM6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaXNzdWVzQXJyYXkgPSBKU09OLnBhcnNlKGlzc3Vlcyk7XG5cbiAgICAgIHJldHVybiBpc3N1ZXNBcnJheS5tYXAoKGlzc3VlOiBab2RJc3N1ZSkgPT4ge1xuICAgICAgICBjb25zdCB7Y29kZSwgcGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcbiAgICAgICAgY29uc3QgZmxhdHRlblBhdGggPSBwYXRoLm1hcChwYXJ0ID0+XG4gICAgICAgICAgdHlwZW9mIHBhcnQgPT09ICdudW1iZXInID8gYFske3BhcnR9XWAgOiBwYXJ0XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gZmxhdHRlblBhdGguam9pbignLicpO1xuXG4gICAgICAgIHJldHVybiBgXCIke2Z1bGxQYXRofVwiIHBhcmFtZXRlciBpcyAke21lc3NhZ2UudG9Mb3dlckNhc2UoKX0uIEVycm9yIGNvZGU6ICR7Y29kZX0uYDtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aHJvdyBuZXcgSW1wbFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHByZXR0aWZ5RXJyb3JNZXNzYWdlKHZhbGlkYXRlZEltcGwuZXJyb3IubWVzc2FnZSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEltcGwuZGF0YTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Impl } from '../types/impl';
|
|
2
|
+
/**
|
|
3
|
+
* Reads and parses `yaml` file to object.
|
|
4
|
+
*/
|
|
5
|
+
export declare const openYamlFileAsObject: (filePath: string) => Promise<Impl>;
|
|
6
|
+
/**
|
|
7
|
+
* Saves given `yaml` dump as a file.
|
|
8
|
+
*/
|
|
9
|
+
export declare const saveYamlFileAs: (object: any, pathToFile: string) => Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Checks if given `fileName` is yaml.
|
|
12
|
+
*/
|
|
13
|
+
export declare const checkIfFileIsYaml: (fileName: string) => boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkIfFileIsYaml = exports.saveYamlFileAs = exports.openYamlFileAsObject = void 0;
|
|
4
|
+
const fs = require("fs/promises");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const YAML = require("js-yaml");
|
|
7
|
+
/**
|
|
8
|
+
* Reads and parses `yaml` file to object.
|
|
9
|
+
*/
|
|
10
|
+
const openYamlFileAsObject = async (filePath) => {
|
|
11
|
+
const yamlFileBuffer = await fs.readFile(filePath, 'utf8');
|
|
12
|
+
return YAML.load(yamlFileBuffer);
|
|
13
|
+
};
|
|
14
|
+
exports.openYamlFileAsObject = openYamlFileAsObject;
|
|
15
|
+
/**
|
|
16
|
+
* Saves given `yaml` dump as a file.
|
|
17
|
+
*/
|
|
18
|
+
const saveYamlFileAs = async (object, pathToFile) => {
|
|
19
|
+
const dirPath = path.dirname(pathToFile);
|
|
20
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
21
|
+
const yamlString = YAML.dump(object, { noRefs: true });
|
|
22
|
+
return fs.writeFile(pathToFile, yamlString);
|
|
23
|
+
};
|
|
24
|
+
exports.saveYamlFileAs = saveYamlFileAs;
|
|
25
|
+
/**
|
|
26
|
+
* Checks if given `fileName` is yaml.
|
|
27
|
+
*/
|
|
28
|
+
const checkIfFileIsYaml = (fileName) => {
|
|
29
|
+
const yamlFileTypes = ['yaml', 'yml'];
|
|
30
|
+
const splittedParts = fileName.split('.');
|
|
31
|
+
const lastIndex = splittedParts.length - 1;
|
|
32
|
+
const extension = splittedParts[lastIndex];
|
|
33
|
+
return yamlFileTypes.includes(extension);
|
|
34
|
+
};
|
|
35
|
+
exports.checkIfFileIsYaml = checkIfFileIsYaml;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3lhbWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUU3QixnQ0FBZ0M7QUFJaEM7O0dBRUc7QUFDSSxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBRSxRQUFnQixFQUFpQixFQUFFO0lBQzVFLE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBUyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQUpXLFFBQUEsb0JBQW9CLHdCQUkvQjtBQUVGOztHQUVHO0FBQ0ksTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLE1BQVcsRUFBRSxVQUFrQixFQUFFLEVBQUU7SUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUVyRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQztBQU5XLFFBQUEsY0FBYyxrQkFNekI7QUFFRjs7R0FFRztBQUNJLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFM0MsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQVBXLFFBQUEsaUJBQWlCLHFCQU81QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCAqIGFzIFlBTUwgZnJvbSAnanMteWFtbCc7XG5cbmltcG9ydCB7SW1wbH0gZnJvbSAnLi4vdHlwZXMvaW1wbCc7XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBgeWFtbGAgZmlsZSB0byBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuWWFtbEZpbGVBc09iamVjdCA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJbXBsPiA9PiB7XG4gIGNvbnN0IHlhbWxGaWxlQnVmZmVyID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsICd1dGY4Jyk7XG5cbiAgcmV0dXJuIFlBTUwubG9hZCh5YW1sRmlsZUJ1ZmZlcikgYXMgSW1wbDtcbn07XG5cbi8qKlxuICogU2F2ZXMgZ2l2ZW4gYHlhbWxgIGR1bXAgYXMgYSBmaWxlLlxuICovXG5leHBvcnQgY29uc3Qgc2F2ZVlhbWxGaWxlQXMgPSBhc3luYyAob2JqZWN0OiBhbnksIHBhdGhUb0ZpbGU6IHN0cmluZykgPT4ge1xuICBjb25zdCBkaXJQYXRoID0gcGF0aC5kaXJuYW1lKHBhdGhUb0ZpbGUpO1xuICBhd2FpdCBmcy5ta2RpcihkaXJQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IHlhbWxTdHJpbmcgPSBZQU1MLmR1bXAob2JqZWN0LCB7bm9SZWZzOiB0cnVlfSk7XG5cbiAgcmV0dXJuIGZzLndyaXRlRmlsZShwYXRoVG9GaWxlLCB5YW1sU3RyaW5nKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGdpdmVuIGBmaWxlTmFtZWAgaXMgeWFtbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrSWZGaWxlSXNZYW1sID0gKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgeWFtbEZpbGVUeXBlcyA9IFsneWFtbCcsICd5bWwnXTtcbiAgY29uc3Qgc3BsaXR0ZWRQYXJ0cyA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHNwbGl0dGVkUGFydHMubGVuZ3RoIC0gMTtcbiAgY29uc3QgZXh0ZW5zaW9uID0gc3BsaXR0ZWRQYXJ0c1tsYXN0SW5kZXhdO1xuXG4gIHJldHVybiB5YW1sRmlsZVR5cGVzLmluY2x1ZGVzKGV4dGVuc2lvbik7XG59O1xuIl19
|