@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.
Files changed (285) hide show
  1. package/.devcontainer/devcontainer.json +38 -0
  2. package/.editorconfig +8 -0
  3. package/.env.example +9 -0
  4. package/.eslintignore +4 -0
  5. package/.eslintrc.json +8 -0
  6. package/.github/ISSUE_TEMPLATE/agenda.md +36 -0
  7. package/.github/ISSUE_TEMPLATE/blank-issue.md +10 -0
  8. package/.github/ISSUE_TEMPLATE/feedback.md +42 -0
  9. package/.github/ISSUE_TEMPLATE/model-plugin.md +63 -0
  10. package/.github/ISSUE_TEMPLATE/user-story.md +10 -0
  11. package/.github/PULL_REQUEST_TEMPLATE.md +21 -0
  12. package/.github/workflows/nodejs-ci.yml +34 -0
  13. package/.gitmodules +3 -0
  14. package/.prettierrc.js +3 -0
  15. package/CONTRIBUTING.md +194 -0
  16. package/LICENSE +21 -0
  17. package/Makefile +16 -0
  18. package/README.md +67 -0
  19. package/build/__mocks__/azure/index.d.ts +11 -0
  20. package/build/__mocks__/azure/index.js +132 -0
  21. package/build/__mocks__/boavizta/countries.json +138 -0
  22. package/build/__mocks__/boavizta/instance_types.json +625 -0
  23. package/build/__mocks__/boavizta/providers.json +1 -0
  24. package/build/__mocks__/fs/index.d.ts +3 -0
  25. package/build/__mocks__/fs/index.js +56 -0
  26. package/build/__mocks__/model-universe/index.d.ts +33 -0
  27. package/build/__mocks__/model-universe/index.js +68 -0
  28. package/build/__mocks__/watt-time/data.json +119 -0
  29. package/build/__tests__/integration/ompl/index.test.d.ts +1 -0
  30. package/build/__tests__/integration/ompl/index.test.js +61 -0
  31. package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +1 -0
  32. package/build/__tests__/unit/lib/azure-importer/index.test.js +152 -0
  33. package/build/__tests__/unit/lib/boavizta/index.test.d.ts +1 -0
  34. package/build/__tests__/unit/lib/boavizta/index.test.js +579 -0
  35. package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +1 -0
  36. package/build/__tests__/unit/lib/case-studies/aveva.test.js +36 -0
  37. package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +1 -0
  38. package/build/__tests__/unit/lib/case-studies/emem.test.js +108 -0
  39. package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +1 -0
  40. package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +53 -0
  41. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +1 -0
  42. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +23 -0
  43. package/build/__tests__/unit/lib/ccf/index.test.d.ts +1 -0
  44. package/build/__tests__/unit/lib/ccf/index.test.js +223 -0
  45. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +1 -0
  46. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +73 -0
  47. package/build/__tests__/unit/lib/sci/index.test.d.ts +1 -0
  48. package/build/__tests__/unit/lib/sci/index.test.js +106 -0
  49. package/build/__tests__/unit/lib/sci-e/index.test.d.ts +1 -0
  50. package/build/__tests__/unit/lib/sci-e/index.test.js +30 -0
  51. package/build/__tests__/unit/lib/sci-m/index.test.d.ts +1 -0
  52. package/build/__tests__/unit/lib/sci-m/index.test.js +58 -0
  53. package/build/__tests__/unit/lib/sci-o/index.test.d.ts +1 -0
  54. package/build/__tests__/unit/lib/sci-o/index.test.js +42 -0
  55. package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +1 -0
  56. package/build/__tests__/unit/lib/shell-imp/index.test.js +21 -0
  57. package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +1 -0
  58. package/build/__tests__/unit/lib/tdp-finder/index.test.js +62 -0
  59. package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +1 -0
  60. package/build/__tests__/unit/lib/teads-aws/index.test.js +170 -0
  61. package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +1 -0
  62. package/build/__tests__/unit/lib/teads-curve/index.test.js +146 -0
  63. package/build/__tests__/unit/lib/watt-time/index.test.d.ts +1 -0
  64. package/build/__tests__/unit/lib/watt-time/index.test.js +106 -0
  65. package/build/__tests__/unit/util/args.test.d.ts +1 -0
  66. package/build/__tests__/unit/util/args.test.js +92 -0
  67. package/build/__tests__/unit/util/models-universe.test.d.ts +1 -0
  68. package/build/__tests__/unit/util/models-universe.test.js +211 -0
  69. package/build/__tests__/unit/util/observatory.test.d.ts +1 -0
  70. package/build/__tests__/unit/util/observatory.test.js +91 -0
  71. package/build/__tests__/unit/util/supercomputer.test.d.ts +1 -0
  72. package/build/__tests__/unit/util/supercomputer.test.js +231 -0
  73. package/build/__tests__/unit/util/yaml.test.d.ts +1 -0
  74. package/build/__tests__/unit/util/yaml.test.js +59 -0
  75. package/build/config/config.d.ts +32 -0
  76. package/build/config/config.js +74 -0
  77. package/build/config/index.d.ts +2 -0
  78. package/build/config/index.js +8 -0
  79. package/build/config/strings.d.ts +14 -0
  80. package/build/config/strings.js +30 -0
  81. package/build/index.d.ts +1 -0
  82. package/build/index.js +46 -0
  83. package/build/lib/azure-importer/index.d.ts +55 -0
  84. package/build/lib/azure-importer/index.js +314 -0
  85. package/build/lib/boavizta/index.d.ts +53 -0
  86. package/build/lib/boavizta/index.js +254 -0
  87. package/build/lib/case-studies/aveva-model.d.ts +29 -0
  88. package/build/lib/case-studies/aveva-model.js +53 -0
  89. package/build/lib/case-studies/emem-model.d.ts +42 -0
  90. package/build/lib/case-studies/emem-model.js +93 -0
  91. package/build/lib/case-studies/eshoppen-model.d.ts +24 -0
  92. package/build/lib/case-studies/eshoppen-model.js +123 -0
  93. package/build/lib/case-studies/index.d.ts +4 -0
  94. package/build/lib/case-studies/index.js +21 -0
  95. package/build/lib/case-studies/sci-accenture-model.d.ts +10 -0
  96. package/build/lib/case-studies/sci-accenture-model.js +37 -0
  97. package/build/lib/ccf/aws-embodied.json +5591 -0
  98. package/build/lib/ccf/aws-instances.json +21116 -0
  99. package/build/lib/ccf/aws-use.json +79 -0
  100. package/build/lib/ccf/azure-embodied.json +6547 -0
  101. package/build/lib/ccf/azure-instances.json +8332 -0
  102. package/build/lib/ccf/azure-use.json +58 -0
  103. package/build/lib/ccf/gcp-embodied.json +3049 -0
  104. package/build/lib/ccf/gcp-instances.json +3880 -0
  105. package/build/lib/ccf/gcp-use.json +58 -0
  106. package/build/lib/ccf/index.d.ts +63 -0
  107. package/build/lib/ccf/index.js +338 -0
  108. package/build/lib/cloud-instance-metadata/aws-instances.json +1 -0
  109. package/build/lib/cloud-instance-metadata/azure-instances.json +1 -0
  110. package/build/lib/cloud-instance-metadata/index.d.ts +15 -0
  111. package/build/lib/cloud-instance-metadata/index.js +104 -0
  112. package/build/lib/index.d.ts +15 -0
  113. package/build/lib/index.js +32 -0
  114. package/build/lib/interfaces/ccf.d.ts +19 -0
  115. package/build/lib/interfaces/ccf.js +3 -0
  116. package/build/lib/interfaces/index.d.ts +7 -0
  117. package/build/lib/interfaces/index.js +18 -0
  118. package/build/lib/sci/index.d.ts +13 -0
  119. package/build/lib/sci/index.js +131 -0
  120. package/build/lib/sci-e/index.d.ts +38 -0
  121. package/build/lib/sci-e/index.js +85 -0
  122. package/build/lib/sci-m/index.d.ts +10 -0
  123. package/build/lib/sci-m/index.js +124 -0
  124. package/build/lib/sci-o/index.d.ts +17 -0
  125. package/build/lib/sci-o/index.js +52 -0
  126. package/build/lib/shell-imp/index.d.ts +32 -0
  127. package/build/lib/shell-imp/index.js +82 -0
  128. package/build/lib/tdp-finder/index.d.ts +19 -0
  129. package/build/lib/tdp-finder/index.js +98 -0
  130. package/build/lib/teads-aws/aws-embodied.json +1 -0
  131. package/build/lib/teads-aws/aws-instances.json +1 -0
  132. package/build/lib/teads-aws/index.d.ts +58 -0
  133. package/build/lib/teads-aws/index.js +208 -0
  134. package/build/lib/teads-curve/index.d.ts +52 -0
  135. package/build/lib/teads-curve/index.js +158 -0
  136. package/build/lib/watt-time/index.d.ts +18 -0
  137. package/build/lib/watt-time/index.js +204 -0
  138. package/build/types/azure-importer.d.ts +29 -0
  139. package/build/types/azure-importer.js +3 -0
  140. package/build/types/boavizta.d.ts +7 -0
  141. package/build/types/boavizta.js +3 -0
  142. package/build/types/common.d.ts +7 -0
  143. package/build/types/common.js +9 -0
  144. package/build/types/impl.d.ts +40 -0
  145. package/build/types/impl.js +3 -0
  146. package/build/types/models-universe.d.ts +24 -0
  147. package/build/types/models-universe.js +3 -0
  148. package/build/types/process-args.d.ts +7 -0
  149. package/build/types/process-args.js +3 -0
  150. package/build/types/supercomputer.d.ts +4 -0
  151. package/build/types/supercomputer.js +3 -0
  152. package/build/util/args.d.ts +8 -0
  153. package/build/util/args.js +48 -0
  154. package/build/util/errors.d.ts +6 -0
  155. package/build/util/errors.js +22 -0
  156. package/build/util/helpers.d.ts +4 -0
  157. package/build/util/helpers.js +18 -0
  158. package/build/util/models-universe.d.ts +28 -0
  159. package/build/util/models-universe.js +95 -0
  160. package/build/util/observatory.d.ts +20 -0
  161. package/build/util/observatory.js +31 -0
  162. package/build/util/supercomputer.d.ts +30 -0
  163. package/build/util/supercomputer.js +109 -0
  164. package/build/util/validations.d.ts +25 -0
  165. package/build/util/validations.js +52 -0
  166. package/build/util/yaml.d.ts +13 -0
  167. package/build/util/yaml.js +36 -0
  168. package/coverage/clover.xml +1172 -0
  169. package/coverage/coverage-final.json +27 -0
  170. package/coverage/lcov-report/base.css +224 -0
  171. package/coverage/lcov-report/block-navigation.js +87 -0
  172. package/coverage/lcov-report/config/config.ts.html +310 -0
  173. package/coverage/lcov-report/config/index.html +146 -0
  174. package/coverage/lcov-report/config/index.ts.html +91 -0
  175. package/coverage/lcov-report/config/strings.ts.html +118 -0
  176. package/coverage/lcov-report/favicon.png +0 -0
  177. package/coverage/lcov-report/index.html +341 -0
  178. package/coverage/lcov-report/lib/boavizta/index.html +116 -0
  179. package/coverage/lcov-report/lib/boavizta/index.ts.html +1171 -0
  180. package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +277 -0
  181. package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +439 -0
  182. package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +550 -0
  183. package/coverage/lcov-report/lib/case-studies/index.html +176 -0
  184. package/coverage/lcov-report/lib/case-studies/index.ts.html +97 -0
  185. package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +232 -0
  186. package/coverage/lcov-report/lib/ccf/index.html +116 -0
  187. package/coverage/lcov-report/lib/ccf/index.ts.html +1339 -0
  188. package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +116 -0
  189. package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +370 -0
  190. package/coverage/lcov-report/lib/index.html +116 -0
  191. package/coverage/lcov-report/lib/index.ts.html +121 -0
  192. package/coverage/lcov-report/lib/sci/index.html +116 -0
  193. package/coverage/lcov-report/lib/sci/index.ts.html +571 -0
  194. package/coverage/lcov-report/lib/sci-e/index.html +116 -0
  195. package/coverage/lcov-report/lib/sci-e/index.ts.html +403 -0
  196. package/coverage/lcov-report/lib/sci-m/index.html +116 -0
  197. package/coverage/lcov-report/lib/sci-m/index.ts.html +487 -0
  198. package/coverage/lcov-report/lib/sci-o/index.html +116 -0
  199. package/coverage/lcov-report/lib/sci-o/index.ts.html +265 -0
  200. package/coverage/lcov-report/lib/shell-imp/index.html +116 -0
  201. package/coverage/lcov-report/lib/shell-imp/index.ts.html +376 -0
  202. package/coverage/lcov-report/lib/teads-aws/index.html +116 -0
  203. package/coverage/lcov-report/lib/teads-aws/index.ts.html +823 -0
  204. package/coverage/lcov-report/lib/teads-curve/index.html +116 -0
  205. package/coverage/lcov-report/lib/teads-curve/index.ts.html +625 -0
  206. package/coverage/lcov-report/lib/watt-time/index.html +116 -0
  207. package/coverage/lcov-report/lib/watt-time/index.ts.html +829 -0
  208. package/coverage/lcov-report/prettify.css +1 -0
  209. package/coverage/lcov-report/prettify.js +2 -0
  210. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  211. package/coverage/lcov-report/sorter.js +196 -0
  212. package/coverage/lcov-report/types/common.ts.html +109 -0
  213. package/coverage/lcov-report/types/index.html +116 -0
  214. package/coverage/lcov-report/util/args.ts.html +244 -0
  215. package/coverage/lcov-report/util/index.html +176 -0
  216. package/coverage/lcov-report/util/models-universe.ts.html +679 -0
  217. package/coverage/lcov-report/util/observatory.ts.html +229 -0
  218. package/coverage/lcov-report/util/supercomputer.ts.html +466 -0
  219. package/coverage/lcov-report/util/yaml.ts.html +193 -0
  220. package/coverage/lcov.info +2094 -0
  221. package/docs/implementations/tdp-finder.md +36 -0
  222. package/examples/impls/case-studies/accenture.yml +155 -0
  223. package/examples/impls/case-studies/aveva.yaml +48 -0
  224. package/examples/impls/case-studies/azure-yassine.yaml +67 -0
  225. package/examples/impls/case-studies/boavizta.yml +26 -0
  226. package/examples/impls/case-studies/dow_msft.yml +173 -0
  227. package/examples/impls/case-studies/farm-insights.yaml +35 -0
  228. package/examples/impls/case-studies/gsf-website.yaml +93 -0
  229. package/examples/impls/case-studies/msft-eshoppen.yaml +162 -0
  230. package/examples/impls/case-studies/msft-green-ai.yaml +58 -0
  231. package/examples/impls/case-studies/ntt-data-on-premise.yaml +201 -0
  232. package/examples/impls/tdp-finder-test.yml +19 -0
  233. package/examples/impls/test/azure.yml +26 -0
  234. package/examples/impls/test/ccf.yml +19 -0
  235. package/examples/impls/test/complex-pipeline.yml +67 -0
  236. package/examples/impls/test/if-demo.yml +51 -0
  237. package/examples/impls/test/metadata.yml +20 -0
  238. package/examples/impls/test/nesting.yml +65 -0
  239. package/examples/impls/test/sci-e.yml +21 -0
  240. package/examples/impls/test/sci-m.yml +24 -0
  241. package/examples/impls/test/sci-o.yml +28 -0
  242. package/examples/impls/test/sci.yml +27 -0
  243. package/examples/impls/test/shell.yml +18 -0
  244. package/examples/impls/test/toto.yaml +22 -0
  245. package/examples/ompls/azure.yml +145 -0
  246. package/examples/ompls/ccf.yml +27 -0
  247. package/examples/ompls/complex-pipeline.yml +105 -0
  248. package/examples/ompls/full-sci.yml +64 -0
  249. package/examples/ompls/if-demo.yml +493 -0
  250. package/examples/ompls/metadata.yml +29 -0
  251. package/examples/ompls/nesting.yml +107 -0
  252. package/examples/ompls/sci-e.yml +23 -0
  253. package/examples/ompls/sci-m.yml +33 -0
  254. package/examples/ompls/sci-o.yml +29 -0
  255. package/examples/ompls/sci.yml +36 -0
  256. package/examples/ompls/shell.yml +23 -0
  257. package/jest.config.js +14 -0
  258. package/package.json +71 -0
  259. package/scripts/impact-test.sh +12 -0
  260. package/src/__mocks__/boavizta/countries.json +138 -0
  261. package/src/__mocks__/boavizta/instance_types.json +625 -0
  262. package/src/__mocks__/boavizta/providers.json +1 -0
  263. package/src/__mocks__/watt-time/data.json +119 -0
  264. package/src/config/units.yaml +125 -0
  265. package/src/lib/ccf/aws-embodied.json +5591 -0
  266. package/src/lib/ccf/aws-instances.json +21116 -0
  267. package/src/lib/ccf/aws-use.json +79 -0
  268. package/src/lib/ccf/azure-embodied.json +6547 -0
  269. package/src/lib/ccf/azure-instances.json +8332 -0
  270. package/src/lib/ccf/azure-use.json +58 -0
  271. package/src/lib/ccf/gcp-embodied.json +3049 -0
  272. package/src/lib/ccf/gcp-instances.json +3880 -0
  273. package/src/lib/ccf/gcp-use.json +58 -0
  274. package/src/lib/cloud-instance-metadata/aws-instances.json +1 -0
  275. package/src/lib/cloud-instance-metadata/azure-instances.json +1 -0
  276. package/src/lib/shell-imp/sampler +30 -0
  277. package/src/lib/tdp-finder/README.md +7 -0
  278. package/src/lib/tdp-finder/boavizta_data.csv +1768 -0
  279. package/src/lib/tdp-finder/data.csv +4460 -0
  280. package/src/lib/tdp-finder/data2.csv +2162 -0
  281. package/src/lib/teads-aws/aws-embodied.json +1 -0
  282. package/src/lib/teads-aws/aws-instances.json +1 -0
  283. package/tsconfig.test.json +39 -0
  284. package/tsconfig.tsbuildinfo +1 -0
  285. 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