@grnsft/if 0.1.3 → 0.1.5

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 (134) hide show
  1. package/README.md +21 -2
  2. package/build/config/config.d.ts +12 -0
  3. package/build/config/config.js +54 -0
  4. package/build/config/index.d.ts +2 -0
  5. package/build/config/index.js +8 -0
  6. package/build/config/strings.d.ts +19 -0
  7. package/build/config/strings.js +34 -0
  8. package/build/index.d.ts +2 -0
  9. package/build/index.js +53 -0
  10. package/build/lib/models-universe.d.ts +36 -0
  11. package/build/lib/models-universe.js +113 -0
  12. package/build/lib/observatory.d.ts +20 -0
  13. package/build/lib/observatory.js +31 -0
  14. package/build/lib/planet-aggregator.d.ts +6 -0
  15. package/build/lib/planet-aggregator.js +35 -0
  16. package/build/lib/supercomputer.d.ts +37 -0
  17. package/build/lib/supercomputer.js +148 -0
  18. package/build/models/index.d.ts +1 -0
  19. package/build/models/index.js +6 -0
  20. package/build/models/time-sync.d.ts +55 -0
  21. package/build/models/time-sync.js +235 -0
  22. package/build/types/helpers.d.ts +1 -0
  23. package/build/types/helpers.js +3 -0
  24. package/build/types/impl.d.ts +45 -0
  25. package/build/types/impl.js +5 -0
  26. package/build/types/model-interface.d.ts +14 -0
  27. package/build/types/model-interface.js +3 -0
  28. package/build/types/models-universe.d.ts +23 -0
  29. package/build/types/models-universe.js +3 -0
  30. package/build/types/planet-aggregator.d.ts +6 -0
  31. package/build/types/planet-aggregator.js +3 -0
  32. package/build/types/process-args.d.ts +7 -0
  33. package/build/types/process-args.js +3 -0
  34. package/build/types/supercomputer.d.ts +4 -0
  35. package/build/types/supercomputer.js +3 -0
  36. package/build/types/time-sync.d.ts +9 -0
  37. package/build/types/time-sync.js +3 -0
  38. package/build/types/units-dealer.d.ts +3 -0
  39. package/build/types/units-dealer.js +3 -0
  40. package/build/types/units.d.ts +11 -0
  41. package/build/types/units.js +37 -0
  42. package/build/util/args.d.ts +8 -0
  43. package/build/util/args.js +58 -0
  44. package/build/util/errors.d.ts +6 -0
  45. package/build/util/errors.js +25 -0
  46. package/build/util/helpers.d.ts +4 -0
  47. package/build/util/helpers.js +18 -0
  48. package/build/util/units-dealer.d.ts +10 -0
  49. package/build/util/units-dealer.js +32 -0
  50. package/build/util/validations.d.ts +29 -0
  51. package/build/util/validations.js +80 -0
  52. package/build/util/yaml.d.ts +12 -0
  53. package/build/util/yaml.js +36 -0
  54. package/examples/impls/test/time-sync.yml +75 -0
  55. package/examples/ompls/test/time-sync.yml +255 -0
  56. package/examples/ompls/time-sync.yml +212 -0
  57. package/hack-banner.png +0 -0
  58. package/package.json +3 -1
  59. package/src/config/units.yaml +11 -24
  60. package/src/models/README.md +266 -0
  61. package/tsconfig.build.tsbuildinfo +1 -1
  62. package/.devcontainer/devcontainer.json +0 -38
  63. package/.examples/ompls/azure.yml +0 -205
  64. package/.github/ISSUE_TEMPLATE/agenda.md +0 -37
  65. package/.github/ISSUE_TEMPLATE/blank-issue.md +0 -10
  66. package/.github/ISSUE_TEMPLATE/bug-report.md +0 -32
  67. package/.github/ISSUE_TEMPLATE/dev-ticket.md +0 -44
  68. package/.github/ISSUE_TEMPLATE/feedback.md +0 -42
  69. package/.github/ISSUE_TEMPLATE/model-plugin.md +0 -63
  70. package/.github/ISSUE_TEMPLATE/sprint-planning.md +0 -39
  71. package/.github/ISSUE_TEMPLATE/sprint-retro.md +0 -41
  72. package/.github/ISSUE_TEMPLATE/user-story.md +0 -10
  73. package/.github/PULL_REQUEST_TEMPLATE.md +0 -21
  74. package/.github/workflows/nodejs-ci.yml +0 -26
  75. package/coverage/clover.xml +0 -237
  76. package/coverage/coverage-final.json +0 -11
  77. package/coverage/lcov-report/base.css +0 -224
  78. package/coverage/lcov-report/block-navigation.js +0 -87
  79. package/coverage/lcov-report/config/config.ts.html +0 -256
  80. package/coverage/lcov-report/config/index.html +0 -146
  81. package/coverage/lcov-report/config/index.ts.html +0 -91
  82. package/coverage/lcov-report/config/strings.ts.html +0 -187
  83. package/coverage/lcov-report/favicon.png +0 -0
  84. package/coverage/lcov-report/index.html +0 -146
  85. package/coverage/lcov-report/lib/boavizta/index.html +0 -116
  86. package/coverage/lcov-report/lib/boavizta/index.ts.html +0 -1171
  87. package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +0 -277
  88. package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +0 -439
  89. package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +0 -550
  90. package/coverage/lcov-report/lib/case-studies/index.html +0 -176
  91. package/coverage/lcov-report/lib/case-studies/index.ts.html +0 -97
  92. package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +0 -232
  93. package/coverage/lcov-report/lib/ccf/index.html +0 -116
  94. package/coverage/lcov-report/lib/ccf/index.ts.html +0 -1339
  95. package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +0 -116
  96. package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +0 -370
  97. package/coverage/lcov-report/lib/index.html +0 -161
  98. package/coverage/lcov-report/lib/index.ts.html +0 -121
  99. package/coverage/lcov-report/lib/models-universe.ts.html +0 -475
  100. package/coverage/lcov-report/lib/observatory.ts.html +0 -187
  101. package/coverage/lcov-report/lib/planet-aggregator.ts.html +0 -253
  102. package/coverage/lcov-report/lib/sci/index.html +0 -116
  103. package/coverage/lcov-report/lib/sci/index.ts.html +0 -571
  104. package/coverage/lcov-report/lib/sci-e/index.html +0 -116
  105. package/coverage/lcov-report/lib/sci-e/index.ts.html +0 -403
  106. package/coverage/lcov-report/lib/sci-m/index.html +0 -116
  107. package/coverage/lcov-report/lib/sci-m/index.ts.html +0 -487
  108. package/coverage/lcov-report/lib/sci-o/index.html +0 -116
  109. package/coverage/lcov-report/lib/sci-o/index.ts.html +0 -265
  110. package/coverage/lcov-report/lib/shell-imp/index.html +0 -116
  111. package/coverage/lcov-report/lib/shell-imp/index.ts.html +0 -376
  112. package/coverage/lcov-report/lib/supercomputer.ts.html +0 -712
  113. package/coverage/lcov-report/lib/teads-aws/index.html +0 -116
  114. package/coverage/lcov-report/lib/teads-aws/index.ts.html +0 -823
  115. package/coverage/lcov-report/lib/teads-curve/index.html +0 -116
  116. package/coverage/lcov-report/lib/teads-curve/index.ts.html +0 -625
  117. package/coverage/lcov-report/lib/watt-time/index.html +0 -116
  118. package/coverage/lcov-report/lib/watt-time/index.ts.html +0 -829
  119. package/coverage/lcov-report/prettify.css +0 -1
  120. package/coverage/lcov-report/prettify.js +0 -2
  121. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  122. package/coverage/lcov-report/sorter.js +0 -196
  123. package/coverage/lcov-report/types/common.ts.html +0 -109
  124. package/coverage/lcov-report/types/index.html +0 -116
  125. package/coverage/lcov-report/util/args.ts.html +0 -259
  126. package/coverage/lcov-report/util/errors.ts.html +0 -160
  127. package/coverage/lcov-report/util/index.html +0 -146
  128. package/coverage/lcov-report/util/models-universe.ts.html +0 -679
  129. package/coverage/lcov-report/util/observatory.ts.html +0 -229
  130. package/coverage/lcov-report/util/supercomputer.ts.html +0 -466
  131. package/coverage/lcov-report/util/yaml.ts.html +0 -199
  132. package/coverage/lcov.info +0 -403
  133. package/scripts/impact-test.sh +0 -12
  134. package/yarn-error.log +0 -5431
package/README.md CHANGED
@@ -1,10 +1,29 @@
1
- > [!IMPORTANT]
2
- > Incubation Project: This project is an incubation project being run inside the Green Software Foundation; as such, we DON’T recommend using it in any critical use case. Incubation projects are experimental, offer no support guarantee, have minimal governance and process, and may be retired at any moment. This project may one day Graduate, in which case this disclaimer will be removed.
1
+ <div id="header" align="center">
2
+ <img style=”margin: 0px” src=hack-banner.png alt=”banner” height=”500" />
3
+ </div>
4
+
5
+ ----------------------------
6
+
7
+ **Welcome to [CarbonHack 24](https://grnsft.org/hack/github) from the Green Software Foundation.**
3
8
 
9
+ > From Monday, February 26 - Friday, March 15, 2024, participants will compete to showcase their best application of IF in measuring the environmental impacts of software.
10
+ >
11
+ > Carbon Hack is a dynamic competition that combines healthy rivalry with collaborative innovation. Hackers will push the limits of the framework, uncover potential weaknesses, and create innovations to enhance the tool.
12
+ >
13
+ > CarbonHack is open to all, including software practitioners and those with a passion for Green Software.
14
+ >
15
+ > Find out more about CarbonHack 2024 on the [CarbonHack website](https://grnsft.org/hack/github). Check out the [FAQ on GitHub](https://github.com/Green-Software-Foundation/hack/blob/main/FAQ.md).
16
+ >
17
+ > Registration opens 15th January!
18
+ ----------------------------
4
19
 
5
20
 
6
21
  # Impact Framework
7
22
 
23
+
24
+ > [!IMPORTANT]
25
+ > Incubation Project: This project is an incubation project being run inside the Green Software Foundation; as such, we DON’T recommend using it in any critical use case. Incubation projects are experimental, offer no support guarantee, have minimal governance and process, and may be retired at any moment. This project may one day Graduate, in which case this disclaimer will be removed.
26
+
8
27
  [Impact Framework](https://greensoftwarefoundation.atlassian.net/wiki/spaces/~612dd45e45cd76006a84071a/pages/17072136/Opensource+Impact+Engine+Framework) (IF) is an [Incubation](https://oc.greensoftware.foundation/project-lifecycle.html#incubation) project from the [Open Source Working Group](https://greensoftwarefoundation.atlassian.net/wiki/spaces/~612dd45e45cd76006a84071a/pages/852049/Open+Source+Working+Group) in the [Green Software Foundation](https://greensoftware.foundation/).
9
28
 
10
29
 
@@ -0,0 +1,12 @@
1
+ import { ArgumentConfig } from 'ts-command-line-args';
2
+ import { impactProcessArgs } from '../types/process-args';
3
+ export declare const CONFIG: {
4
+ AGGREGATION_METRICS: string[];
5
+ AGGREGATION_METHODS: string[];
6
+ impact: {
7
+ ARGS: ArgumentConfig<impactProcessArgs>;
8
+ HELP: string;
9
+ };
10
+ GITHUB_PATH: string;
11
+ NATIVE_MODEL: string;
12
+ };
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONFIG = void 0;
4
+ exports.CONFIG = {
5
+ AGGREGATION_METRICS: ['carbon', 'energy'],
6
+ AGGREGATION_METHODS: ['sum', 'avg'],
7
+ impact: {
8
+ ARGS: {
9
+ impl: {
10
+ type: String,
11
+ optional: true,
12
+ alias: 'i',
13
+ description: 'Path to an input IMPL file.',
14
+ },
15
+ ompl: {
16
+ type: String,
17
+ optional: true,
18
+ description: 'Path to the output IMPL file where the results as saved, if none is provided it prints to stdout.',
19
+ },
20
+ format: {
21
+ type: String,
22
+ optional: true,
23
+ description: 'The output file format. default to yaml but if csv is specified then it formats the outputs as a csv file for loading into another program.',
24
+ defaultValue: 'yaml',
25
+ },
26
+ verbose: {
27
+ type: Boolean,
28
+ optional: true,
29
+ description: 'How much information to output about the calculation to aid investigation and debugging.',
30
+ },
31
+ help: {
32
+ type: Boolean,
33
+ optional: true,
34
+ alias: 'h',
35
+ description: 'Prints this usage guide.',
36
+ },
37
+ },
38
+ HELP: `impact
39
+ -impl [path to the input impl file]
40
+ -ompl [path to the output impl file]
41
+ -format [yaml|csv]
42
+ -verbose
43
+ -help
44
+ impl: path to an input IMPL file
45
+ ompl: path to the output IMPL file where the results as saved, if none is provided it prints to stdout.
46
+ format: the output file format. default to yaml but if csv is specified then it formats the outputs as a csv file for loading into another program.
47
+ verbose: how much information to output about the calculation to aid investigation and debugging.
48
+ help: prints out the above help instruction.
49
+ `,
50
+ },
51
+ GITHUB_PATH: 'https://github.com',
52
+ NATIVE_MODEL: 'if-models',
53
+ };
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSWEsUUFBQSxNQUFNLEdBQUc7SUFDcEIsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ3pDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUNuQyxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLE1BQU07Z0JBQ1osUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsV0FBVyxFQUFFLDZCQUE2QjthQUMzQztZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsTUFBTTtnQkFDWixRQUFRLEVBQUUsSUFBSTtnQkFDZCxXQUFXLEVBQ1QsbUdBQW1HO2FBQ3RHO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFDVCw2SUFBNkk7Z0JBQy9JLFlBQVksRUFBRSxNQUFNO2FBQ3JCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFDVCwwRkFBMEY7YUFDN0Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsV0FBVyxFQUFFLDBCQUEwQjthQUN4QztTQUNtQztRQUN0QyxJQUFJLEVBQUU7Ozs7Ozs7Ozs7O0dBV1A7S0FDQTtJQUNELFdBQVcsRUFBRSxvQkFBb0I7SUFDakMsWUFBWSxFQUFFLFdBQVc7Q0FDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXJndW1lbnRDb25maWd9IGZyb20gJ3RzLWNvbW1hbmQtbGluZS1hcmdzJztcblxuaW1wb3J0IHtpbXBhY3RQcm9jZXNzQXJnc30gZnJvbSAnLi4vdHlwZXMvcHJvY2Vzcy1hcmdzJztcblxuZXhwb3J0IGNvbnN0IENPTkZJRyA9IHtcbiAgQUdHUkVHQVRJT05fTUVUUklDUzogWydjYXJib24nLCAnZW5lcmd5J10sXG4gIEFHR1JFR0FUSU9OX01FVEhPRFM6IFsnc3VtJywgJ2F2ZyddLFxuICBpbXBhY3Q6IHtcbiAgICBBUkdTOiB7XG4gICAgICBpbXBsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGFsaWFzOiAnaScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUGF0aCB0byBhbiBpbnB1dCBJTVBMIGZpbGUuJyxcbiAgICAgIH0sXG4gICAgICBvbXBsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICdQYXRoIHRvIHRoZSBvdXRwdXQgSU1QTCBmaWxlIHdoZXJlIHRoZSByZXN1bHRzIGFzIHNhdmVkLCBpZiBub25lIGlzIHByb3ZpZGVkIGl0IHByaW50cyB0byBzdGRvdXQuJyxcbiAgICAgIH0sXG4gICAgICBmb3JtYXQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgJ1RoZSBvdXRwdXQgZmlsZSBmb3JtYXQuIGRlZmF1bHQgdG8geWFtbCBidXQgaWYgY3N2IGlzIHNwZWNpZmllZCB0aGVuIGl0IGZvcm1hdHMgdGhlIG91dHB1dHMgYXMgYSBjc3YgZmlsZSBmb3IgbG9hZGluZyBpbnRvIGFub3RoZXIgcHJvZ3JhbS4nLFxuICAgICAgICBkZWZhdWx0VmFsdWU6ICd5YW1sJyxcbiAgICAgIH0sXG4gICAgICB2ZXJib3NlOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnSG93IG11Y2ggaW5mb3JtYXRpb24gdG8gb3V0cHV0IGFib3V0IHRoZSBjYWxjdWxhdGlvbiB0byBhaWQgaW52ZXN0aWdhdGlvbiBhbmQgZGVidWdnaW5nLicsXG4gICAgICB9LFxuICAgICAgaGVscDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgYWxpYXM6ICdoJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdQcmludHMgdGhpcyB1c2FnZSBndWlkZS4nLFxuICAgICAgfSxcbiAgICB9IGFzIEFyZ3VtZW50Q29uZmlnPGltcGFjdFByb2Nlc3NBcmdzPixcbiAgICBIRUxQOiBgaW1wYWN0IFxuICAtaW1wbCBbcGF0aCB0byB0aGUgaW5wdXQgaW1wbCBmaWxlXVxuICAtb21wbCBbcGF0aCB0byB0aGUgb3V0cHV0IGltcGwgZmlsZV1cbiAgLWZvcm1hdCBbeWFtbHxjc3ZdIFxuICAtdmVyYm9zZVxuICAtaGVscCBcbiAgaW1wbDogcGF0aCB0byBhbiBpbnB1dCBJTVBMIGZpbGVcbiAgb21wbDogcGF0aCB0byB0aGUgb3V0cHV0IElNUEwgZmlsZSB3aGVyZSB0aGUgcmVzdWx0cyBhcyBzYXZlZCwgaWYgbm9uZSBpcyBwcm92aWRlZCBpdCBwcmludHMgdG8gc3Rkb3V0LlxuICBmb3JtYXQ6IHRoZSBvdXRwdXQgZmlsZSBmb3JtYXQuIGRlZmF1bHQgdG8geWFtbCBidXQgaWYgY3N2IGlzIHNwZWNpZmllZCB0aGVuIGl0IGZvcm1hdHMgdGhlIG91dHB1dHMgYXMgYSBjc3YgZmlsZSBmb3IgbG9hZGluZyBpbnRvIGFub3RoZXIgcHJvZ3JhbS5cbiAgdmVyYm9zZTogaG93IG11Y2ggaW5mb3JtYXRpb24gdG8gb3V0cHV0IGFib3V0IHRoZSBjYWxjdWxhdGlvbiB0byBhaWQgaW52ZXN0aWdhdGlvbiBhbmQgZGVidWdnaW5nLlxuICBoZWxwOiBwcmludHMgb3V0IHRoZSBhYm92ZSBoZWxwIGluc3RydWN0aW9uLlxuICBgLFxuICB9LFxuICBHSVRIVUJfUEFUSDogJ2h0dHBzOi8vZ2l0aHViLmNvbScsXG4gIE5BVElWRV9NT0RFTDogJ2lmLW1vZGVscycsXG59O1xuIl19
@@ -0,0 +1,2 @@
1
+ export { CONFIG } from './config';
2
+ export { STRINGS } from './strings';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STRINGS = exports.CONFIG = void 0;
4
+ var config_1 = require("./config");
5
+ Object.defineProperty(exports, "CONFIG", { enumerable: true, get: function () { return config_1.CONFIG; } });
6
+ var strings_1 = require("./strings");
7
+ Object.defineProperty(exports, "STRINGS", { enumerable: true, get: function () { return strings_1.STRINGS; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFnQztBQUF4QixnR0FBQSxNQUFNLE9BQUE7QUFDZCxxQ0FBa0M7QUFBMUIsa0dBQUEsT0FBTyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtDT05GSUd9IGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCB7U1RSSU5HU30gZnJvbSAnLi9zdHJpbmdzJztcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { ClassContainerParams } from '../types/models-universe';
2
+ export declare const STRINGS: {
3
+ FILE_IS_NOT_YAML: string;
4
+ IMPL_IS_MISSING: string;
5
+ MISSING_CLASSNAME: string;
6
+ MISSING_PATH: string;
7
+ NOT_MODEL_PLUGIN_EXTENSION: string;
8
+ STRUCTURE_MALFORMED: (childName: string) => string;
9
+ NOT_INITIALIZED_MODEL: (className: string) => string;
10
+ DISCLAIMER_MESSAGE: string;
11
+ NOT_NATIVE_MODEL: string;
12
+ SOMETHING_WRONG: string;
13
+ ISSUE_TEMPLATE: string;
14
+ NOT_CONSTRUCTABLE_MODEL: (params: ClassContainerParams) => string;
15
+ INVALID_MODULE_PATH: (path: string) => string;
16
+ INVALID_TIME_NORMALIZATION: string;
17
+ INVALID_TIME_INTERVAL: string;
18
+ INVALID_OBSERVATION_OVERLAP: string;
19
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STRINGS = void 0;
4
+ exports.STRINGS = {
5
+ FILE_IS_NOT_YAML: 'Provided impl file is not in yaml format.',
6
+ IMPL_IS_MISSING: 'Impl file is missing.',
7
+ MISSING_CLASSNAME: "Initalization param 'model' is missing.",
8
+ MISSING_PATH: "Initalization param 'path' is missing.",
9
+ NOT_MODEL_PLUGIN_EXTENSION: "Provided model does not extend 'ModelPluginInterface'.",
10
+ STRUCTURE_MALFORMED: (childName) => `Graph is malformed: graph.children.${childName} is not valid.`,
11
+ NOT_INITIALIZED_MODEL: (className) => `You're trying to use not initalized model: ${className}.`,
12
+ DISCLAIMER_MESSAGE: `
13
+ [!important] Incubation Project
14
+
15
+ This project is an incubation project being run inside the Green Software Foundation; as such, we *DON’T recommend using it in any critical use case.
16
+ Incubation projects are experimental, offer no support guarantee, have minimal governance and process, and may be retired at any moment. This project may one day graduate, in which case this disclaimer will be removed.
17
+ `,
18
+ NOT_NATIVE_MODEL: `
19
+ [!important]
20
+
21
+ You are using models that are not part of the Impact Framework standard library. You should do your own research to ensure the models are up to date and accurate. They may not be actively maintained.
22
+ `,
23
+ SOMETHING_WRONG: 'Something wrong with cli arguments. Please check docs.',
24
+ ISSUE_TEMPLATE: `
25
+ Impact Framework is an alpha release from the Green Software Foundation and is released to capture early feedback. If you'd like to offer some feedback, please use this issue template:
26
+ https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+
27
+ `,
28
+ NOT_CONSTRUCTABLE_MODEL: (params) => `Provided model '${params.model}' is not constructable or does not belong to given plugin '${params.path}'.`,
29
+ INVALID_MODULE_PATH: (path) => `Provided module path: '${path}' is invalid.`,
30
+ INVALID_TIME_NORMALIZATION: 'Start time or end time is missing.',
31
+ INVALID_TIME_INTERVAL: 'Interval is missing.',
32
+ INVALID_OBSERVATION_OVERLAP: 'Observation timestamps overlap.',
33
+ };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvc3RyaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLE9BQU8sR0FBRztJQUNyQixnQkFBZ0IsRUFBRSwyQ0FBMkM7SUFDN0QsZUFBZSxFQUFFLHVCQUF1QjtJQUN4QyxpQkFBaUIsRUFBRSx5Q0FBeUM7SUFDNUQsWUFBWSxFQUFFLHdDQUF3QztJQUN0RCwwQkFBMEIsRUFDeEIsd0RBQXdEO0lBQzFELG1CQUFtQixFQUFFLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQ3pDLHNDQUFzQyxTQUFTLGdCQUFnQjtJQUNqRSxxQkFBcUIsRUFBRSxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUMzQyw4Q0FBOEMsU0FBUyxHQUFHO0lBQzVELGtCQUFrQixFQUFFOzs7OztDQUtyQjtJQUNDLGdCQUFnQixFQUFFOzs7O0NBSW5CO0lBQ0MsZUFBZSxFQUFFLHdEQUF3RDtJQUN6RSxjQUFjLEVBQUU7OztDQUdqQjtJQUNDLHVCQUF1QixFQUFFLENBQUMsTUFBNEIsRUFBRSxFQUFFLENBQ3hELG1CQUFtQixNQUFNLENBQUMsS0FBSyw4REFBOEQsTUFBTSxDQUFDLElBQUksSUFBSTtJQUM5RyxtQkFBbUIsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3BDLDBCQUEwQixJQUFJLGVBQWU7SUFDL0MsMEJBQTBCLEVBQUUsb0NBQW9DO0lBQ2hFLHFCQUFxQixFQUFFLHNCQUFzQjtJQUM3QywyQkFBMkIsRUFBRSxpQ0FBaUM7Q0FDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NDb250YWluZXJQYXJhbXN9IGZyb20gJy4uL3R5cGVzL21vZGVscy11bml2ZXJzZSc7XG5cbmV4cG9ydCBjb25zdCBTVFJJTkdTID0ge1xuICBGSUxFX0lTX05PVF9ZQU1MOiAnUHJvdmlkZWQgaW1wbCBmaWxlIGlzIG5vdCBpbiB5YW1sIGZvcm1hdC4nLFxuICBJTVBMX0lTX01JU1NJTkc6ICdJbXBsIGZpbGUgaXMgbWlzc2luZy4nLFxuICBNSVNTSU5HX0NMQVNTTkFNRTogXCJJbml0YWxpemF0aW9uIHBhcmFtICdtb2RlbCcgaXMgbWlzc2luZy5cIixcbiAgTUlTU0lOR19QQVRIOiBcIkluaXRhbGl6YXRpb24gcGFyYW0gJ3BhdGgnIGlzIG1pc3NpbmcuXCIsXG4gIE5PVF9NT0RFTF9QTFVHSU5fRVhURU5TSU9OOlxuICAgIFwiUHJvdmlkZWQgbW9kZWwgZG9lcyBub3QgZXh0ZW5kICdNb2RlbFBsdWdpbkludGVyZmFjZScuXCIsXG4gIFNUUlVDVFVSRV9NQUxGT1JNRUQ6IChjaGlsZE5hbWU6IHN0cmluZykgPT5cbiAgICBgR3JhcGggaXMgbWFsZm9ybWVkOiBncmFwaC5jaGlsZHJlbi4ke2NoaWxkTmFtZX0gaXMgbm90IHZhbGlkLmAsXG4gIE5PVF9JTklUSUFMSVpFRF9NT0RFTDogKGNsYXNzTmFtZTogc3RyaW5nKSA9PlxuICAgIGBZb3UncmUgdHJ5aW5nIHRvIHVzZSBub3QgaW5pdGFsaXplZCBtb2RlbDogJHtjbGFzc05hbWV9LmAsXG4gIERJU0NMQUlNRVJfTUVTU0FHRTogYFxuWyFpbXBvcnRhbnRdIEluY3ViYXRpb24gUHJvamVjdFxuXG5UaGlzIHByb2plY3QgaXMgYW4gaW5jdWJhdGlvbiBwcm9qZWN0IGJlaW5nIHJ1biBpbnNpZGUgdGhlIEdyZWVuIFNvZnR3YXJlIEZvdW5kYXRpb247IGFzIHN1Y2gsIHdlICpET07igJlUIHJlY29tbWVuZCB1c2luZyBpdCBpbiBhbnkgY3JpdGljYWwgdXNlIGNhc2UuIFxuSW5jdWJhdGlvbiBwcm9qZWN0cyBhcmUgZXhwZXJpbWVudGFsLCBvZmZlciBubyBzdXBwb3J0IGd1YXJhbnRlZSwgaGF2ZSBtaW5pbWFsIGdvdmVybmFuY2UgYW5kIHByb2Nlc3MsIGFuZCBtYXkgYmUgcmV0aXJlZCBhdCBhbnkgbW9tZW50LiBUaGlzIHByb2plY3QgbWF5IG9uZSBkYXkgZ3JhZHVhdGUsIGluIHdoaWNoIGNhc2UgdGhpcyBkaXNjbGFpbWVyIHdpbGwgYmUgcmVtb3ZlZC5cbmAsXG4gIE5PVF9OQVRJVkVfTU9ERUw6IGBcblshaW1wb3J0YW50XVxuXG5Zb3UgYXJlIHVzaW5nIG1vZGVscyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgSW1wYWN0IEZyYW1ld29yayBzdGFuZGFyZCBsaWJyYXJ5LiBZb3Ugc2hvdWxkIGRvIHlvdXIgb3duIHJlc2VhcmNoIHRvIGVuc3VyZSB0aGUgbW9kZWxzIGFyZSB1cCB0byBkYXRlIGFuZCBhY2N1cmF0ZS4gVGhleSBtYXkgbm90IGJlIGFjdGl2ZWx5IG1haW50YWluZWQuICBcbmAsXG4gIFNPTUVUSElOR19XUk9ORzogJ1NvbWV0aGluZyB3cm9uZyB3aXRoIGNsaSBhcmd1bWVudHMuIFBsZWFzZSBjaGVjayBkb2NzLicsXG4gIElTU1VFX1RFTVBMQVRFOiBgXG5JbXBhY3QgRnJhbWV3b3JrIGlzIGFuIGFscGhhIHJlbGVhc2UgZnJvbSB0aGUgR3JlZW4gU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgaXMgcmVsZWFzZWQgdG8gY2FwdHVyZSBlYXJseSBmZWVkYmFjay4gSWYgeW91J2QgbGlrZSB0byBvZmZlciBzb21lIGZlZWRiYWNrLCBwbGVhc2UgdXNlIHRoaXMgaXNzdWUgdGVtcGxhdGU6IFxuaHR0cHM6Ly9naXRodWIuY29tL0dyZWVuLVNvZnR3YXJlLUZvdW5kYXRpb24vaWYvaXNzdWVzL25ldz9hc3NpZ25lZXM9JmxhYmVscz1mZWVkYmFjayZwcm9qZWN0cz0mdGVtcGxhdGU9ZmVlZGJhY2subWQmdGl0bGU9RmVlZGJhY2srLStcbmAsXG4gIE5PVF9DT05TVFJVQ1RBQkxFX01PREVMOiAocGFyYW1zOiBDbGFzc0NvbnRhaW5lclBhcmFtcykgPT5cbiAgICBgUHJvdmlkZWQgbW9kZWwgJyR7cGFyYW1zLm1vZGVsfScgaXMgbm90IGNvbnN0cnVjdGFibGUgb3IgZG9lcyBub3QgYmVsb25nIHRvIGdpdmVuIHBsdWdpbiAnJHtwYXJhbXMucGF0aH0nLmAsXG4gIElOVkFMSURfTU9EVUxFX1BBVEg6IChwYXRoOiBzdHJpbmcpID0+XG4gICAgYFByb3ZpZGVkIG1vZHVsZSBwYXRoOiAnJHtwYXRofScgaXMgaW52YWxpZC5gLFxuICBJTlZBTElEX1RJTUVfTk9STUFMSVpBVElPTjogJ1N0YXJ0IHRpbWUgb3IgZW5kIHRpbWUgaXMgbWlzc2luZy4nLFxuICBJTlZBTElEX1RJTUVfSU5URVJWQUw6ICdJbnRlcnZhbCBpcyBtaXNzaW5nLicsXG4gIElOVkFMSURfT0JTRVJWQVRJT05fT1ZFUkxBUDogJ09ic2VydmF0aW9uIHRpbWVzdGFtcHMgb3ZlcmxhcC4nLFxufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/build/index.js ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const models_universe_1 = require("./lib/models-universe");
5
+ const supercomputer_1 = require("./lib/supercomputer");
6
+ const args_1 = require("./util/args");
7
+ const errors_1 = require("./util/errors");
8
+ const helpers_1 = require("./util/helpers");
9
+ const validations_1 = require("./util/validations");
10
+ const yaml_1 = require("./util/yaml");
11
+ const config_1 = require("./config");
12
+ const { CliInputError } = errors_1.ERRORS;
13
+ const { DISCLAIMER_MESSAGE, SOMETHING_WRONG } = config_1.STRINGS;
14
+ /**
15
+ * 1. Parses yml input/output process arguments.
16
+ * 2. Opens yaml file as an object.
17
+ * 3. Validates given impl to match basic structure.
18
+ * 4. Initializes requested models.
19
+ * 5. Initializes graph, does computing.
20
+ * 6. Saves processed object as a yaml file.
21
+ * @example run `yarn impact-engine --impl ./test.yml --ompl ./result.yml`
22
+ */
23
+ const impactEngine = async () => {
24
+ console.log(DISCLAIMER_MESSAGE);
25
+ const processParams = (0, args_1.parseProcessArgument)();
26
+ if (processParams) {
27
+ const { inputPath, outputPath } = processParams;
28
+ const rawImpl = await (0, yaml_1.openYamlFileAsObject)(inputPath);
29
+ // Lifecycle Validation
30
+ const impl = (0, validations_1.validateImpl)(rawImpl);
31
+ // Lifecycle Initialize Models
32
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
33
+ for (const model of impl.initialize.models) {
34
+ await modelsHandbook.writeDown(model);
35
+ }
36
+ // Lifecycle Computing
37
+ const engine = new supercomputer_1.Supercomputer(impl, modelsHandbook);
38
+ const ompl = await engine.compute();
39
+ if (impl.aggregation) {
40
+ const aggregations = engine.calculateAggregation();
41
+ ompl['aggregated-outputs'] = aggregations;
42
+ }
43
+ if (!outputPath) {
44
+ console.log(JSON.stringify(ompl));
45
+ return;
46
+ }
47
+ await (0, yaml_1.saveYamlFileAs)(ompl, outputPath);
48
+ return;
49
+ }
50
+ return Promise.reject(new CliInputError(SOMETHING_WRONG));
51
+ };
52
+ impactEngine().catch(helpers_1.andHandle);
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkRBQXFEO0FBQ3JELHVEQUFrRDtBQUVsRCxzQ0FBaUQ7QUFDakQsMENBQXFDO0FBQ3JDLDRDQUF5QztBQUN6QyxvREFBZ0Q7QUFDaEQsc0NBQWlFO0FBRWpFLHFDQUFpQztBQUlqQyxNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9CLE1BQU0sRUFBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXREOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRWhDLE1BQU0sYUFBYSxHQUFHLElBQUEsMkJBQW9CLEdBQUUsQ0FBQztJQUU3QyxJQUFJLGFBQWEsRUFBRTtRQUNqQixNQUFNLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQyxHQUFHLGFBQWEsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsMkJBQW9CLEVBQU8sU0FBUyxDQUFDLENBQUM7UUFFNUQsdUJBQXVCO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUEsMEJBQVksRUFBQyxPQUFPLENBQUMsQ0FBQztRQUVuQyw4QkFBOEI7UUFDOUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxnQ0FBYyxFQUFFLENBQUM7UUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUMxQyxNQUFNLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSw2QkFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsWUFBWSxDQUFDO1NBQzNDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBQSxxQkFBYyxFQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2QyxPQUFPO0tBQ1I7SUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUM7QUFFRixZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHtNb2RlbHNVbml2ZXJzZX0gZnJvbSAnLi9saWIvbW9kZWxzLXVuaXZlcnNlJztcbmltcG9ydCB7U3VwZXJjb21wdXRlcn0gZnJvbSAnLi9saWIvc3VwZXJjb21wdXRlcic7XG5cbmltcG9ydCB7cGFyc2VQcm9jZXNzQXJndW1lbnR9IGZyb20gJy4vdXRpbC9hcmdzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL3V0aWwvZXJyb3JzJztcbmltcG9ydCB7YW5kSGFuZGxlfSBmcm9tICcuL3V0aWwvaGVscGVycyc7XG5pbXBvcnQge3ZhbGlkYXRlSW1wbH0gZnJvbSAnLi91dGlsL3ZhbGlkYXRpb25zJztcbmltcG9ydCB7b3BlbllhbWxGaWxlQXNPYmplY3QsIHNhdmVZYW1sRmlsZUFzfSBmcm9tICcuL3V0aWwveWFtbCc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi9jb25maWcnO1xuXG5pbXBvcnQge0ltcGx9IGZyb20gJy4vdHlwZXMvaW1wbCc7XG5cbmNvbnN0IHtDbGlJbnB1dEVycm9yfSA9IEVSUk9SUztcblxuY29uc3Qge0RJU0NMQUlNRVJfTUVTU0FHRSwgU09NRVRISU5HX1dST05HfSA9IFNUUklOR1M7XG5cbi8qKlxuICogMS4gUGFyc2VzIHltbCBpbnB1dC9vdXRwdXQgcHJvY2VzcyBhcmd1bWVudHMuXG4gKiAyLiBPcGVucyB5YW1sIGZpbGUgYXMgYW4gb2JqZWN0LlxuICogMy4gVmFsaWRhdGVzIGdpdmVuIGltcGwgdG8gbWF0Y2ggYmFzaWMgc3RydWN0dXJlLlxuICogNC4gSW5pdGlhbGl6ZXMgcmVxdWVzdGVkIG1vZGVscy5cbiAqIDUuIEluaXRpYWxpemVzIGdyYXBoLCBkb2VzIGNvbXB1dGluZy5cbiAqIDYuIFNhdmVzIHByb2Nlc3NlZCBvYmplY3QgYXMgYSB5YW1sIGZpbGUuXG4gKiBAZXhhbXBsZSBydW4gYHlhcm4gaW1wYWN0LWVuZ2luZSAtLWltcGwgLi90ZXN0LnltbCAtLW9tcGwgLi9yZXN1bHQueW1sYFxuICovXG5jb25zdCBpbXBhY3RFbmdpbmUgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnNvbGUubG9nKERJU0NMQUlNRVJfTUVTU0FHRSk7XG5cbiAgY29uc3QgcHJvY2Vzc1BhcmFtcyA9IHBhcnNlUHJvY2Vzc0FyZ3VtZW50KCk7XG5cbiAgaWYgKHByb2Nlc3NQYXJhbXMpIHtcbiAgICBjb25zdCB7aW5wdXRQYXRoLCBvdXRwdXRQYXRofSA9IHByb2Nlc3NQYXJhbXM7XG4gICAgY29uc3QgcmF3SW1wbCA9IGF3YWl0IG9wZW5ZYW1sRmlsZUFzT2JqZWN0PEltcGw+KGlucHV0UGF0aCk7XG5cbiAgICAvLyBMaWZlY3ljbGUgVmFsaWRhdGlvblxuICAgIGNvbnN0IGltcGwgPSB2YWxpZGF0ZUltcGwocmF3SW1wbCk7XG5cbiAgICAvLyBMaWZlY3ljbGUgSW5pdGlhbGl6ZSBNb2RlbHNcbiAgICBjb25zdCBtb2RlbHNIYW5kYm9vayA9IG5ldyBNb2RlbHNVbml2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgaW1wbC5pbml0aWFsaXplLm1vZGVscykge1xuICAgICAgYXdhaXQgbW9kZWxzSGFuZGJvb2sud3JpdGVEb3duKG1vZGVsKTtcbiAgICB9XG5cbiAgICAvLyBMaWZlY3ljbGUgQ29tcHV0aW5nXG4gICAgY29uc3QgZW5naW5lID0gbmV3IFN1cGVyY29tcHV0ZXIoaW1wbCwgbW9kZWxzSGFuZGJvb2spO1xuICAgIGNvbnN0IG9tcGwgPSBhd2FpdCBlbmdpbmUuY29tcHV0ZSgpO1xuXG4gICAgaWYgKGltcGwuYWdncmVnYXRpb24pIHtcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9ucyA9IGVuZ2luZS5jYWxjdWxhdGVBZ2dyZWdhdGlvbigpO1xuICAgICAgb21wbFsnYWdncmVnYXRlZC1vdXRwdXRzJ10gPSBhZ2dyZWdhdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKCFvdXRwdXRQYXRoKSB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShvbXBsKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgc2F2ZVlhbWxGaWxlQXMob21wbCwgb3V0cHV0UGF0aCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IENsaUlucHV0RXJyb3IoU09NRVRISU5HX1dST05HKSk7XG59O1xuXG5pbXBhY3RFbmdpbmUoKS5jYXRjaChhbmRIYW5kbGUpO1xuIl19
@@ -0,0 +1,36 @@
1
+ import { ImplInitializeModel, InitalizedModels } from '../types/models-universe';
2
+ /**
3
+ * Models Initialization Lifecycle.
4
+ */
5
+ export declare class ModelsUniverse {
6
+ /**
7
+ * Models list.
8
+ */
9
+ initalizedModels: InitalizedModels;
10
+ /**
11
+ * Checks if model is instance of `IOutputModelInterface`.
12
+ */
13
+ private instanceOfModel;
14
+ /**
15
+ * Imports module by given `path`.
16
+ */
17
+ private importModuleFrom;
18
+ /**
19
+ * Imports `module` from given `path`, then checks if it's `ModelPluginInterface` extension.
20
+ */
21
+ private importAndVerifyModule;
22
+ /**
23
+ * Returns plugin model. Checks if model is missing then rejects with error.
24
+ * Then checks if `path` is starting with github, then grabs the repository name.
25
+ * Imports module, then checks if it's a class which implements input model interface.
26
+ */
27
+ private handModel;
28
+ /**
29
+ * Initializes and registers model.
30
+ */
31
+ writeDown(modelToInitalize: ImplInitializeModel): Promise<InitalizedModels>;
32
+ /**
33
+ * Returns existing model by `name`.
34
+ */
35
+ getInitializedModel(modelName: string, config: any): Promise<import("../types/model-interface").ModelPluginInterface>;
36
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelsUniverse = void 0;
4
+ const pathLib = require("path");
5
+ const errors_1 = require("../util/errors");
6
+ const config_1 = require("../config");
7
+ const { ModelInitializationError, ModelCredentialError } = errors_1.ERRORS;
8
+ const { GITHUB_PATH, NATIVE_MODEL } = config_1.CONFIG;
9
+ const { MISSING_CLASSNAME, NOT_MODEL_PLUGIN_EXTENSION, MISSING_PATH, NOT_NATIVE_MODEL, NOT_CONSTRUCTABLE_MODEL, NOT_INITIALIZED_MODEL, INVALID_MODULE_PATH, } = config_1.STRINGS;
10
+ /**
11
+ * Models Initialization Lifecycle.
12
+ */
13
+ class ModelsUniverse {
14
+ constructor() {
15
+ /**
16
+ * Models list.
17
+ */
18
+ this.initalizedModels = {};
19
+ }
20
+ /**
21
+ * Checks if model is instance of `IOutputModelInterface`.
22
+ */
23
+ instanceOfModel(ClassContainer, params) {
24
+ try {
25
+ const testModel = new ClassContainer();
26
+ const boolable = 'configure' in testModel && 'execute' in testModel;
27
+ return boolable;
28
+ }
29
+ catch (error) {
30
+ throw new ModelInitializationError(NOT_CONSTRUCTABLE_MODEL(params));
31
+ }
32
+ }
33
+ /**
34
+ * Imports module by given `path`.
35
+ */
36
+ async importModuleFrom(path) {
37
+ try {
38
+ const module = await Promise.resolve(`${path}`).then(s => require(s));
39
+ return module;
40
+ }
41
+ catch (error) {
42
+ console.log(error);
43
+ throw new ModelInitializationError(INVALID_MODULE_PATH(path));
44
+ }
45
+ }
46
+ /**
47
+ * Imports `module` from given `path`, then checks if it's `ModelPluginInterface` extension.
48
+ */
49
+ async importAndVerifyModule(model, path) {
50
+ const pluginModule = await this.importModuleFrom(path);
51
+ if (!this.instanceOfModel(pluginModule[model], { model, path })) {
52
+ throw new ModelInitializationError(NOT_MODEL_PLUGIN_EXTENSION);
53
+ }
54
+ return pluginModule[model];
55
+ }
56
+ /**
57
+ * Returns plugin model. Checks if model is missing then rejects with error.
58
+ * Then checks if `path` is starting with github, then grabs the repository name.
59
+ * Imports module, then checks if it's a class which implements input model interface.
60
+ */
61
+ async handModel(model, path) {
62
+ if (path === 'builtin') {
63
+ path = pathLib.normalize(`${__dirname}/../models`);
64
+ }
65
+ else {
66
+ if (path?.startsWith(GITHUB_PATH)) {
67
+ const parts = path.split('/');
68
+ path = parts[parts.length - 1];
69
+ }
70
+ if (!path.includes(NATIVE_MODEL)) {
71
+ console.log(NOT_NATIVE_MODEL);
72
+ }
73
+ }
74
+ return this.importAndVerifyModule(model, path);
75
+ }
76
+ /**
77
+ * Initializes and registers model.
78
+ */
79
+ async writeDown(modelToInitalize) {
80
+ const { model, path, config, name } = modelToInitalize;
81
+ if (!model) {
82
+ throw new ModelCredentialError(MISSING_CLASSNAME);
83
+ }
84
+ if (!path) {
85
+ throw new ModelCredentialError(MISSING_PATH);
86
+ }
87
+ const Model = await this.handModel(model, path);
88
+ const callback = async (graphOptions) => {
89
+ const params = {
90
+ ...config,
91
+ ...graphOptions,
92
+ };
93
+ const initalizedModel = await new Model().configure(params);
94
+ return initalizedModel;
95
+ };
96
+ this.initalizedModels = {
97
+ ...this.initalizedModels,
98
+ [name]: callback,
99
+ };
100
+ return this.initalizedModels;
101
+ }
102
+ /**
103
+ * Returns existing model by `name`.
104
+ */
105
+ async getInitializedModel(modelName, config) {
106
+ if (this.initalizedModels[modelName]) {
107
+ return this.initalizedModels[modelName](config);
108
+ }
109
+ throw new ModelInitializationError(NOT_INITIALIZED_MODEL(modelName));
110
+ }
111
+ }
112
+ exports.ModelsUniverse = ModelsUniverse;
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2RlbHMtdW5pdmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0NBQWlDO0FBRWpDLDJDQUFzQztBQUV0QyxzQ0FBMEM7QUFTMUMsTUFBTSxFQUFDLHdCQUF3QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRWhFLE1BQU0sRUFBQyxXQUFXLEVBQUUsWUFBWSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNDLE1BQU0sRUFDSixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsR0FBRyxnQkFBTyxDQUFDO0FBRVo7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFBM0I7UUFDRTs7V0FFRztRQUNJLHFCQUFnQixHQUFxQixFQUFFLENBQUM7SUE4R2pELENBQUM7SUE1R0M7O09BRUc7SUFDSyxlQUFlLENBQUMsY0FBbUIsRUFBRSxNQUE0QjtRQUN2RSxJQUFJO1lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FBRyxXQUFXLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUM7WUFFcEUsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQVk7UUFDekMsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLHlCQUFhLElBQUkseUJBQUMsQ0FBQztZQUVsQyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFD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d0JBQXdCLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0Y7QUFsSEQsd0NBa0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGhMaWIgPSByZXF1aXJlKCdwYXRoJyk7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi91dGlsL2Vycm9ycyc7XG5cbmltcG9ydCB7Q09ORklHLCBTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbXBvcnQge1xuICBDbGFzc0NvbnRhaW5lclBhcmFtcyxcbiAgR3JhcGhPcHRpb25zLFxuICBJbXBsSW5pdGlhbGl6ZU1vZGVsLFxuICBJbml0YWxpemVkTW9kZWxzLFxufSBmcm9tICcuLi90eXBlcy9tb2RlbHMtdW5pdmVyc2UnO1xuXG5jb25zdCB7TW9kZWxJbml0aWFsaXphdGlvbkVycm9yLCBNb2RlbENyZWRlbnRpYWxFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtHSVRIVUJfUEFUSCwgTkFUSVZFX01PREVMfSA9IENPTkZJRztcbmNvbnN0IHtcbiAgTUlTU0lOR19DTEFTU05BTUUsXG4gIE5PVF9NT0RFTF9QTFVHSU5fRVhURU5TSU9OLFxuICBNSVNTSU5HX1BBVEgsXG4gIE5PVF9OQVRJVkVfTU9ERUwsXG4gIE5PVF9DT05TVFJVQ1RBQkxFX01PREVMLFxuICBOT1RfSU5JVElBTElaRURfTU9ERUwsXG4gIElOVkFMSURfTU9EVUxFX1BBVEgsXG59ID0gU1RSSU5HUztcblxuLyoqXG4gKiBNb2RlbHMgSW5pdGlhbGl6YXRpb24gTGlmZWN5Y2xlLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWxzVW5pdmVyc2Uge1xuICAvKipcbiAgICogTW9kZWxzIGxpc3QuXG4gICAqL1xuICBwdWJsaWMgaW5pdGFsaXplZE1vZGVsczogSW5pdGFsaXplZE1vZGVscyA9IHt9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbW9kZWwgaXMgaW5zdGFuY2Ugb2YgYElPdXRwdXRNb2RlbEludGVyZmFjZWAuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbmNlT2ZNb2RlbChDbGFzc0NvbnRhaW5lcjogYW55LCBwYXJhbXM6IENsYXNzQ29udGFpbmVyUGFyYW1zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlc3RNb2RlbCA9IG5ldyBDbGFzc0NvbnRhaW5lcigpO1xuICAgICAgY29uc3QgYm9vbGFibGUgPSAnY29uZmlndXJlJyBpbiB0ZXN0TW9kZWwgJiYgJ2V4ZWN1dGUnIGluIHRlc3RNb2RlbDtcblxuICAgICAgcmV0dXJuIGJvb2xhYmxlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE5PVF9DT05TVFJVQ1RBQkxFX01PREVMKHBhcmFtcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIG1vZHVsZSBieSBnaXZlbiBgcGF0aGAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGltcG9ydE1vZHVsZUZyb20ocGF0aDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKTtcblxuICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IE1vZGVsSW5pdGlhbGl6YXRpb25FcnJvcihJTlZBTElEX01PRFVMRV9QQVRIKHBhdGgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBgbW9kdWxlYCBmcm9tIGdpdmVuIGBwYXRoYCwgdGhlbiBjaGVja3MgaWYgaXQncyBgTW9kZWxQbHVnaW5JbnRlcmZhY2VgIGV4dGVuc2lvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0QW5kVmVyaWZ5TW9kdWxlKG1vZGVsOiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdWdpbk1vZHVsZSA9IGF3YWl0IHRoaXMuaW1wb3J0TW9kdWxlRnJvbShwYXRoKTtcblxuICAgIGlmICghdGhpcy5pbnN0YW5jZU9mTW9kZWwocGx1Z2luTW9kdWxlW21vZGVsXSwge21vZGVsLCBwYXRofSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2RlbEluaXRpYWxpemF0aW9uRXJyb3IoTk9UX01PREVMX1BMVUdJTl9FWFRFTlNJT04pO1xuICAgIH1cblxuICAgIHJldHVybiBwbHVnaW5Nb2R1bGVbbW9kZWxdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGx1Z2luIG1vZGVsLiBDaGVja3MgaWYgbW9kZWwgaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAgICogVGhlbiBjaGVja3MgaWYgYHBhdGhgIGlzIHN0YXJ0aW5nIHdpdGggZ2l0aHViLCB0aGVuIGdyYWJzIHRoZSByZXBvc2l0b3J5IG5hbWUuXG4gICAqIEltcG9ydHMgbW9kdWxlLCB0aGVuIGNoZWNrcyBpZiBpdCdzIGEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBpbnB1dCBtb2RlbCBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRNb2RlbChtb2RlbDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAocGF0aCA9PT0gJ2J1aWx0aW4nKSB7XG4gICAgICBwYXRoID0gcGF0aExpYi5ub3JtYWxpemUoYCR7X19kaXJuYW1lfS8uLi9tb2RlbHNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhdGg/LnN0YXJ0c1dpdGgoR0lUSFVCX1BBVEgpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBwYXRoID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICB9XG5cbiAgICAgIGlmICghcGF0aC5pbmNsdWRlcyhOQVRJVkVfTU9ERUwpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKE5PVF9OQVRJVkVfTU9ERUwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmltcG9ydEFuZFZlcmlmeU1vZHVsZShtb2RlbCwgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYW5kIHJlZ2lzdGVycyBtb2RlbC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB3cml0ZURvd24obW9kZWxUb0luaXRhbGl6ZTogSW1wbEluaXRpYWxpemVNb2RlbCkge1xuICAgIGNvbnN0IHttb2RlbCwgcGF0aCwgY29uZmlnLCBuYW1lfSA9IG1vZGVsVG9Jbml0YWxpemU7XG5cbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgTW9kZWxDcmVkZW50aWFsRXJyb3IoTUlTU0lOR19DTEFTU05BTUUpO1xuICAgIH1cblxuICAgIGlmICghcGF0aCkge1xuICAgICAgdGhyb3cgbmV3IE1vZGVsQ3JlZGVudGlhbEVycm9yKE1JU1NJTkdfUEFUSCk7XG4gICAgfVxuXG4gICAgY29uc3QgTW9kZWwgPSBhd2FpdCB0aGlzLmhhbmRNb2RlbChtb2RlbCwgcGF0aCk7XG5cbiAgICBjb25zdCBjYWxsYmFjayA9IGFzeW5jIChncmFwaE9wdGlvbnM6IEdyYXBoT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIC4uLmdyYXBoT3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGluaXRhbGl6ZWRNb2RlbCA9IGF3YWl0IG5ldyBNb2RlbCgpLmNvbmZpZ3VyZShwYXJhbXMpO1xuXG4gICAgICByZXR1cm4gaW5pdGFsaXplZE1vZGVsO1xuICAgIH07XG5cbiAgICB0aGlzLmluaXRhbGl6ZWRNb2RlbHMgPSB7XG4gICAgICAuLi50aGlzLmluaXRhbGl6ZWRNb2RlbHMsXG4gICAgICBbbmFtZV06IGNhbGxiYWNrLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pbml0YWxpemVkTW9kZWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZXhpc3RpbmcgbW9kZWwgYnkgYG5hbWVgLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEluaXRpYWxpemVkTW9kZWwobW9kZWxOYW1lOiBzdHJpbmcsIGNvbmZpZzogYW55KSB7XG4gICAgaWYgKHRoaXMuaW5pdGFsaXplZE1vZGVsc1ttb2RlbE5hbWVdKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0YWxpemVkTW9kZWxzW21vZGVsTmFtZV0oY29uZmlnKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE5PVF9JTklUSUFMSVpFRF9NT0RFTChtb2RlbE5hbWUpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { ModelParams, ModelPluginInterface } from '../types/model-interface';
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: ModelParams[]);
12
+ /**
13
+ * Does investigations by given `output` information
14
+ */
15
+ doInvestigationsWith(modelInstance: ModelPluginInterface): Promise<this>;
16
+ /**
17
+ * Getter for output data.
18
+ */
19
+ getOutputs(): ModelParams[];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL29ic2VydmF0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBSXRCOztPQUVHO0lBQ0gsWUFBWSxNQUFxQjtRQUx6QixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQU1sQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsYUFBbUM7UUFDbkUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUUxRSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTdELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUE1QkQsa0NBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb2RlbFBhcmFtcywgTW9kZWxQbHVnaW5JbnRlcmZhY2V9IGZyb20gJy4uL3R5cGVzL21vZGVsLWludGVyZmFjZSc7XG5cbi8qKlxuICogT2JzZXJ2YXRvcnkgaXMgcmVzcG9uc2libGUgZm9yIG91dHB1dCBjYWxjdWxhdGlvbnMgYmFzZWQgb24gdGhlIGBpbnB1dHNgIGFuZCB0aGUgYG1vZGVsYC5cbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmF0b3J5IHtcbiAgcHJpdmF0ZSBpbnB1dHM6IE1vZGVsUGFyYW1zW107XG4gIHByaXZhdGUgb3V0cHV0czogTW9kZWxQYXJhbXNbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJbml0IGlucHV0cyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpbnB1dHM6IE1vZGVsUGFyYW1zW10pIHtcbiAgICB0aGlzLmlucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBEb2VzIGludmVzdGlnYXRpb25zIGJ5IGdpdmVuIGBvdXRwdXRgIGluZm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZG9JbnZlc3RpZ2F0aW9uc1dpdGgobW9kZWxJbnN0YW5jZTogTW9kZWxQbHVnaW5JbnRlcmZhY2UpIHtcbiAgICBjb25zdCByZXVzZUNhbGN1bGF0aW9uID0gdGhpcy5vdXRwdXRzLmxlbmd0aCA/IHRoaXMub3V0cHV0cyA6IHRoaXMuaW5wdXRzO1xuXG4gICAgdGhpcy5vdXRwdXRzID0gYXdhaXQgbW9kZWxJbnN0YW5jZS5leGVjdXRlKHJldXNlQ2FsY3VsYXRpb24pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIGZvciBvdXRwdXQgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBnZXRPdXRwdXRzKCkge1xuICAgIHJldHVybiB0aGlzLm91dHB1dHM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ import { AggregationResult, PlanetAggregatorParams } from '../types/planet-aggregator';
2
+ import { ModelParams } from '../types/model-interface';
3
+ /**
4
+ * Aggregates child node level metrics. Uses provided aggregation `params`.
5
+ */
6
+ export declare const planetAggregator: (inputs: ModelParams[], params: PlanetAggregatorParams) => AggregationResult;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.planetAggregator = void 0;
4
+ const errors_1 = require("../util/errors");
5
+ const { InvalidAggregationParams } = errors_1.ERRORS;
6
+ /**
7
+ * Aggregates child node level metrics. Uses provided aggregation `params`.
8
+ */
9
+ const planetAggregator = (inputs, params) => {
10
+ if (!params['aggregation-metrics'] ||
11
+ params['aggregation-metrics'].length === 0) {
12
+ throw new InvalidAggregationParams('Provided aggregation metrics are invalid. Please provide an array of strings.');
13
+ }
14
+ const aggregationMetrics = params['aggregation-metrics'];
15
+ const aggregationMethod = params['aggregation-method'];
16
+ return inputs.reduce((acc, input, index) => {
17
+ for (const metric of aggregationMetrics) {
18
+ if (!(metric in input)) {
19
+ throw new InvalidAggregationParams(`Aggregation metric ${metric} is not found in inputs[${index}].`);
20
+ }
21
+ const accessKey = `aggregated-${metric}`;
22
+ const value = parseFloat(input[metric]);
23
+ acc[accessKey] = acc[accessKey] ?? 0;
24
+ acc[accessKey] += value;
25
+ if (index === inputs.length - 1) {
26
+ if (aggregationMethod === 'avg') {
27
+ acc[accessKey] /= inputs.length;
28
+ }
29
+ }
30
+ }
31
+ return acc;
32
+ }, {});
33
+ };
34
+ exports.planetAggregator = planetAggregator;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFnZ3JlZ2F0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BsYW5ldC1hZ2dyZWdhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFzQztBQVN0QyxNQUFNLEVBQUMsd0JBQXdCLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFMUM7O0dBRUc7QUFDSSxNQUFNLGdCQUFnQixHQUFHLENBQzlCLE1BQXFCLEVBQ3JCLE1BQThCLEVBQzlCLEVBQUU7SUFDRixJQUNFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1FBQzlCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQzFDO1FBQ0EsTUFBTSxJQUFJLHdCQUF3QixDQUNoQywrRUFBK0UsQ0FDaEYsQ0FBQztLQUNIO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQWtCLENBQUM7SUFDMUUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUV2RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3pDLEtBQUssTUFBTSxNQUFNLElBQUksa0JBQWtCLEVBQUU7WUFDdkMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixNQUFNLElBQUksd0JBQXdCLENBQ2hDLHNCQUFzQixNQUFNLDJCQUEyQixLQUFLLElBQUksQ0FDakUsQ0FBQzthQUNIO1lBRUQsTUFBTSxTQUFTLEdBQUcsY0FBYyxNQUFNLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUV4QixJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7b0JBQy9CLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNqQzthQUNGO1NBQ0Y7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUF1QixDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDO0FBdENXLFFBQUEsZ0JBQWdCLG9CQXNDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VSUk9SU30gZnJvbSAnLi4vdXRpbC9lcnJvcnMnO1xuXG5pbXBvcnQge1xuICBBZ2dyZWdhdGlvblJlc3VsdCxcbiAgUGxhbmV0QWdncmVnYXRvclBhcmFtcyxcbn0gZnJvbSAnLi4vdHlwZXMvcGxhbmV0LWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHtNb2RlbFBhcmFtc30gZnJvbSAnLi4vdHlwZXMvbW9kZWwtaW50ZXJmYWNlJztcbmltcG9ydCB7VW5pdEtleU5hbWV9IGZyb20gJy4uL3R5cGVzL3VuaXRzJztcblxuY29uc3Qge0ludmFsaWRBZ2dyZWdhdGlvblBhcmFtc30gPSBFUlJPUlM7XG5cbi8qKlxuICogQWdncmVnYXRlcyBjaGlsZCBub2RlIGxldmVsIG1ldHJpY3MuIFVzZXMgcHJvdmlkZWQgYWdncmVnYXRpb24gYHBhcmFtc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBwbGFuZXRBZ2dyZWdhdG9yID0gKFxuICBpbnB1dHM6IE1vZGVsUGFyYW1zW10sXG4gIHBhcmFtczogUGxhbmV0QWdncmVnYXRvclBhcmFtc1xuKSA9PiB7XG4gIGlmIChcbiAgICAhcGFyYW1zWydhZ2dyZWdhdGlvbi1tZXRyaWNzJ10gfHxcbiAgICBwYXJhbXNbJ2FnZ3JlZ2F0aW9uLW1ldHJpY3MnXS5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBZ2dyZWdhdGlvblBhcmFtcyhcbiAgICAgICdQcm92aWRlZCBhZ2dyZWdhdGlvbiBtZXRyaWNzIGFyZSBpbnZhbGlkLiBQbGVhc2UgcHJvdmlkZSBhbiBhcnJheSBvZiBzdHJpbmdzLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYWdncmVnYXRpb25NZXRyaWNzID0gcGFyYW1zWydhZ2dyZWdhdGlvbi1tZXRyaWNzJ10gYXMgVW5pdEtleU5hbWVbXTtcbiAgY29uc3QgYWdncmVnYXRpb25NZXRob2QgPSBwYXJhbXNbJ2FnZ3JlZ2F0aW9uLW1ldGhvZCddO1xuXG4gIHJldHVybiBpbnB1dHMucmVkdWNlKChhY2MsIGlucHV0LCBpbmRleCkgPT4ge1xuICAgIGZvciAoY29uc3QgbWV0cmljIG9mIGFnZ3JlZ2F0aW9uTWV0cmljcykge1xuICAgICAgaWYgKCEobWV0cmljIGluIGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFnZ3JlZ2F0aW9uUGFyYW1zKFxuICAgICAgICAgIGBBZ2dyZWdhdGlvbiBtZXRyaWMgJHttZXRyaWN9IGlzIG5vdCBmb3VuZCBpbiBpbnB1dHNbJHtpbmRleH1dLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjZXNzS2V5ID0gYGFnZ3JlZ2F0ZWQtJHttZXRyaWN9YDtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChpbnB1dFttZXRyaWNdKTtcbiAgICAgIGFjY1thY2Nlc3NLZXldID0gYWNjW2FjY2Vzc0tleV0gPz8gMDtcbiAgICAgIGFjY1thY2Nlc3NLZXldICs9IHZhbHVlO1xuXG4gICAgICBpZiAoaW5kZXggPT09IGlucHV0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChhZ2dyZWdhdGlvbk1ldGhvZCA9PT0gJ2F2ZycpIHtcbiAgICAgICAgICBhY2NbYWNjZXNzS2V5XSAvPSBpbnB1dHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30gYXMgQWdncmVnYXRpb25SZXN1bHQpO1xufTtcbiJdfQ==
@@ -0,0 +1,37 @@
1
+ import { ModelsUniverse } from './models-universe';
2
+ import { Impl } from '../types/impl';
3
+ import { AggregationResult } from '../types/planet-aggregator';
4
+ /**
5
+ * Computer for `impl` documents.
6
+ */
7
+ export declare class Supercomputer {
8
+ private olderChild;
9
+ private impl;
10
+ private modelsHandbook;
11
+ private aggregatedImpacts;
12
+ private childAmount;
13
+ constructor(impl: Impl, modelsHandbook: ModelsUniverse);
14
+ /**
15
+ * Goes through all aggregations collected from child components, then calculates the average.
16
+ */
17
+ calculateAggregation(): AggregationResult;
18
+ /**
19
+ * Flattens config entries.
20
+ */
21
+ private flattenConfigValues;
22
+ /**
23
+ * Adds config entries to each obsercation object passed.
24
+ */
25
+ private enrichInputs;
26
+ /**
27
+ * If child is top level, then initializes `this.olderChild`.
28
+ * If `children` object contains `children` property, it means inputs are nested (calls compute again).
29
+ * Otherwise enriches inputs, passes them to Observatory.
30
+ * For each model from pipeline Observatory gathers inputs. Then results are stored.
31
+ */
32
+ private calculateOutputsForChild;
33
+ /**
34
+ * Checks if object is top level children or nested, then runs through all children and calculates outputs.
35
+ */
36
+ compute(childrenObject?: any): Promise<Impl>;
37
+ }