@grnsft/if 0.1.2 → 0.1.3-beta

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 (85) hide show
  1. package/CONTRIBUTING.md +13 -17
  2. package/README.md +36 -18
  3. package/build/config/config.d.ts +12 -0
  4. package/build/config/config.js +54 -0
  5. package/build/config/strings.d.ts +8 -3
  6. package/build/config/strings.js +10 -6
  7. package/build/index.js +15 -8
  8. package/build/lib/models-universe.d.ts +10 -2
  9. package/build/lib/models-universe.js +52 -34
  10. package/build/lib/observatory.d.ts +20 -0
  11. package/build/lib/observatory.js +31 -0
  12. package/build/lib/planet-aggregator.d.ts +6 -0
  13. package/build/lib/planet-aggregator.js +35 -0
  14. package/build/lib/supercomputer.d.ts +7 -0
  15. package/build/lib/supercomputer.js +45 -6
  16. package/build/models/index.d.ts +1 -0
  17. package/build/models/index.js +6 -0
  18. package/build/models/time-sync.d.ts +55 -0
  19. package/build/models/time-sync.js +235 -0
  20. package/build/types/helpers.d.ts +1 -0
  21. package/build/types/helpers.js +3 -0
  22. package/build/types/impl.d.ts +14 -9
  23. package/build/types/impl.js +3 -1
  24. package/build/types/model-interface.d.ts +14 -0
  25. package/build/types/model-interface.js +3 -0
  26. package/build/types/models-universe.d.ts +5 -6
  27. package/build/types/models-universe.js +1 -1
  28. package/build/types/planet-aggregator.d.ts +6 -0
  29. package/build/types/planet-aggregator.js +3 -0
  30. package/build/types/process-args.d.ts +7 -0
  31. package/build/types/process-args.js +3 -0
  32. package/build/types/supercomputer.d.ts +4 -0
  33. package/build/types/supercomputer.js +3 -0
  34. package/build/types/time-sync.d.ts +9 -0
  35. package/build/types/time-sync.js +3 -0
  36. package/build/types/units-dealer.d.ts +3 -0
  37. package/build/types/units-dealer.js +3 -0
  38. package/build/types/units.d.ts +11 -0
  39. package/build/types/units.js +37 -0
  40. package/build/util/args.js +58 -0
  41. package/build/util/errors.d.ts +6 -0
  42. package/build/util/errors.js +25 -0
  43. package/build/util/helpers.js +18 -0
  44. package/build/util/units-dealer.d.ts +10 -0
  45. package/build/util/units-dealer.js +32 -0
  46. package/build/util/validations.d.ts +4 -0
  47. package/build/util/validations.js +29 -1
  48. package/build/util/yaml.d.ts +1 -2
  49. package/build/util/yaml.js +1 -1
  50. package/coverage/clover.xml +111 -65
  51. package/coverage/coverage-final.json +7 -6
  52. package/coverage/lcov-report/config/config.ts.html +12 -3
  53. package/coverage/lcov-report/config/index.html +1 -1
  54. package/coverage/lcov-report/config/index.ts.html +3 -3
  55. package/coverage/lcov-report/config/strings.ts.html +2 -2
  56. package/coverage/lcov-report/index.html +9 -9
  57. package/coverage/lcov-report/lib/index.html +24 -9
  58. package/coverage/lcov-report/lib/models-universe.ts.html +1 -1
  59. package/coverage/lcov-report/lib/observatory.ts.html +7 -7
  60. package/coverage/lcov-report/lib/planet-aggregator.ts.html +253 -0
  61. package/coverage/lcov-report/lib/supercomputer.ts.html +211 -52
  62. package/coverage/lcov-report/util/args.ts.html +1 -1
  63. package/coverage/lcov-report/util/errors.ts.html +10 -7
  64. package/coverage/lcov-report/util/index.html +1 -1
  65. package/coverage/lcov-report/util/yaml.ts.html +1 -1
  66. package/coverage/lcov.info +184 -105
  67. package/examples/impls/case-studies/aggregation.yml +97 -0
  68. package/examples/impls/case-studies/ntt-data-on-premise.yaml +0 -42
  69. package/examples/impls/test/aggregation-test.yml +109 -0
  70. package/examples/impls/test/large-impl.yml +257303 -0
  71. package/examples/impls/test/time-sync.yml +75 -0
  72. package/examples/ompls/aggregation-test.yml +340 -0
  73. package/examples/ompls/test/time-sync.yml +255 -0
  74. package/examples/ompls/time-sync.yml +212 -0
  75. package/hack-banner.png +0 -0
  76. package/package.json +3 -1
  77. package/src/config/units.yaml +11 -24
  78. package/src/models/README.md +266 -0
  79. package/tsconfig.build.tsbuildinfo +1 -0
  80. package/build/types/azure-importer.d.ts +0 -29
  81. package/build/types/azure-importer.js +0 -3
  82. package/build/types/boavizta.d.ts +0 -7
  83. package/build/types/boavizta.js +0 -3
  84. package/build/types/common.d.ts +0 -7
  85. package/build/types/common.js +0 -9
package/CONTRIBUTING.md CHANGED
@@ -1,4 +1,5 @@
1
- # Contributing to IEF <!-- omit from toc -->
1
+ ## Contribution Guidelines <!-- omit from toc -->
2
+
2
3
 
3
4
  First off, thanks for taking the time to contribute! 🎉
4
5
 
@@ -7,7 +8,7 @@ The following document is a rule set of guidelines for contributing.
7
8
  ## Table of Contents <!-- omit from toc -->
8
9
 
9
10
  - [Code Contributions](#code-contributions)
10
- - [Step 1: Clone](#step-1-clone)
11
+ - [Step 1: Fork](#step-1-fork)
11
12
  - [Step 2: Branch](#step-2-branch)
12
13
  - [Step 3: Commit](#step-3-commit)
13
14
  - [Step 4: Sync](#step-4-sync)
@@ -24,20 +25,15 @@ The following document is a rule set of guidelines for contributing.
24
25
 
25
26
  ## Code Contributions
26
27
 
27
- #### Step 1: Clone
28
+ #### Step 1: Fork
28
29
 
29
- Clone the project on [GitHub](git@github.com:Green-Software-Foundation/ief.git)
30
-
31
- ```bash
32
- $ git clone git@github.com:Green-Software-Foundation/ief.git
33
- $ cd ief
34
- ```
35
-
36
- For developing new features and bug fixes, the development branch should be pulled and built upon.
30
+ Fork the project on [GitHub](git@github.com:Green-Software-Foundation/if.git)
31
+
32
+ You then have your own copy of the repository that you can change.
37
33
 
38
34
  #### Step 2: Branch
39
35
 
40
- Create new branch from main (`staging` or `master`), which will contain your new feature, fix or change.
36
+ Create new branch in your forked copy of the `if` repository, which will contain your new feature, fix or change.
41
37
 
42
38
  ```bash
43
39
  $ git checkout -b <topic-branch-name>
@@ -71,15 +67,15 @@ Please adhere to these [Commit message guidelines](#commit-message-guidelines)
71
67
 
72
68
  #### Step 4: Sync
73
69
 
74
- Use git pull/merge to synchronize your work with the main repository.
70
+ Use git pull/merge to synchronize your work with the IF repository.
75
71
 
76
72
  ```bash
77
- $ git pull origin dev
73
+ $ git pull upstream dev
78
74
  ```
79
75
 
80
76
  #### Step 5: Push
81
77
 
82
- Push your topic branch:
78
+ Push your topic branch to your fork:
83
79
 
84
80
  ```bash
85
81
  $ git push origin <topic-branch-name>
@@ -87,7 +83,7 @@ Push your topic branch:
87
83
 
88
84
  #### Step 6: Pull Request
89
85
 
90
- Open a Pull Request with a clear title and description according to [template](.github/PULL_REQUEST_TEMPLATE.md).
86
+ Open a Pull Request from your fork of the repository to the `dev` branch of the IF repository with a clear title and description according to [template](.github/PULL_REQUEST_TEMPLATE.md).
91
87
 
92
88
  Pull request should pass all CI which are defined, should have at least one approve. It should adher to the specification for getting approved.
93
89
 
@@ -191,4 +187,4 @@ describe('util/args: ', () => {
191
187
  })
192
188
  ```
193
189
 
194
- *[⬅️ back to the root](/README.md#ief)*
190
+ *[⬅️ back to the root](/README.md#ief)*
package/README.md CHANGED
@@ -1,7 +1,35 @@
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.**
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
+ ----------------------------
19
+
20
+
1
21
  # Impact Framework
2
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
+
3
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/).
4
28
 
29
+
30
+ **Our documentation is online at [if.greensoftware.foundation]([if.greensoftware.foundation](https://if.greensoftware.foundation/))**
31
+
32
+
5
33
  **IF** is a framework to **M**odel, **M**easure, si**M**ulate and **M**onitor the environmental impacts of software
6
34
 
7
35
  Modern applications are composed of many smaller pieces of software (components) running on many different environments, for example, private cloud, public cloud, bare-metal, virtualized, containerized, mobile, laptops, and desktops.
@@ -10,7 +38,7 @@ Every environment requires a different model of measurement, and there is no sin
10
38
 
11
39
  The friction to measuring software emissions isn't that we need to know how, it's that we run software on many things and each thing has several different ways to measure.
12
40
 
13
- Read the [specification and design docs](https://github.com/Green-Software-Foundation/if-docs) to begin.
41
+ Read the [specification and design docs](https://if.greensoftware.foundation) to begin.
14
42
 
15
43
 
16
44
  ## Get started
@@ -78,29 +106,19 @@ yarn impact-engine -- --impl <path-to-your-impl-file> --ompl <your-savepath>
78
106
 
79
107
  The `impact-engine` CLI tool will configure and run the models defined in your input `yaml` (`impl`) and return the results as an output `yaml` (`ompl`).
80
108
 
109
+ ## Documentation
110
+
111
+ Please read our documentation at [if.greensoftware.foundation](https://if.greensoftware.foundation/)
81
112
 
82
113
  ## Video walk-through
83
114
 
84
115
  Watch this video to learn how to create and run an `impl`.
85
116
 
86
- [![Watch the walk-through video](https://i3.ytimg.com/vi/R-6eDM8AsvY/maxresdefault.jpg)](https://youtu.be/R-6eDM8AsvY)
87
-
88
- ## Run tests
89
-
90
- To run the complete set of tests simply run
91
-
92
- ```sh
93
- yarn test
94
- ```
117
+ [![Watch the walk-through video](https://i3.ytimg.com/vi/R-6eDM8AsvY/maxresdefault.jpg)](https://youtu.be/GW37Qd4AQbU)
95
118
 
96
- To refresh the set of `ompl`s used for validating the output files, run the `scripts/impact-test.sh` bash script (for unix only) as follows:
97
119
 
98
- ```sh
99
- ./scripts/impact-test.sh
100
- ```
120
+ ## Contributing
101
121
 
102
- Then run
122
+ To contribute to IF, please fork this repository and raise a pull request from your fork. The same process is also appropriate for updates to `if-docs`, `if-models` and `if-unofficial-models`.
103
123
 
104
- ```sh
105
- yarn test
106
- ```
124
+ Please read the full contribution guidelines at [if.greensoftware.foundation](https://if.greensoftware.foundation/Contributing)
@@ -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
@@ -1,14 +1,19 @@
1
+ import { ClassContainerParams } from '../types/models-universe';
1
2
  export declare const STRINGS: {
2
3
  FILE_IS_NOT_YAML: string;
3
4
  IMPL_IS_MISSING: string;
4
5
  MISSING_CLASSNAME: string;
5
6
  MISSING_PATH: string;
6
- MODEL_DOESNT_EXIST: string;
7
- NOT_OUTPUT_MODEL_EXTENSION: string;
7
+ NOT_MODEL_PLUGIN_EXTENSION: string;
8
8
  STRUCTURE_MALFORMED: (childName: string) => string;
9
- NOT_INITIALIZED_MODEL: (modelName: string) => string;
9
+ NOT_INITIALIZED_MODEL: (className: string) => string;
10
10
  DISCLAIMER_MESSAGE: string;
11
11
  NOT_NATIVE_MODEL: string;
12
12
  SOMETHING_WRONG: string;
13
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;
14
19
  };
@@ -4,12 +4,11 @@ exports.STRINGS = void 0;
4
4
  exports.STRINGS = {
5
5
  FILE_IS_NOT_YAML: 'Provided impl file is not in yaml format.',
6
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
- MODEL_DOESNT_EXIST: 'Provided model class does not belong to any model.',
10
- NOT_OUTPUT_MODEL_EXTENSION: 'Provided model does not extend ModelInterface.',
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'.",
11
10
  STRUCTURE_MALFORMED: (childName) => `Graph is malformed: graph.children.${childName} is not valid.`,
12
- NOT_INITIALIZED_MODEL: (modelName) => `You're trying to use not initalized model: ${modelName}.`,
11
+ NOT_INITIALIZED_MODEL: (className) => `You're trying to use not initalized model: ${className}.`,
13
12
  DISCLAIMER_MESSAGE: `
14
13
  [!important] Incubation Project
15
14
 
@@ -26,5 +25,10 @@ You are using models that are not part of the Impact Framework standard library.
26
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:
27
26
  https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+
28
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.',
29
33
  };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvc3RyaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLE9BQU8sR0FBRztJQUNyQixnQkFBZ0IsRUFBRSwyQ0FBMkM7SUFDN0QsZUFBZSxFQUFFLHVCQUF1QjtJQUN4QyxpQkFBaUIsRUFBRSx5Q0FBeUM7SUFDNUQsWUFBWSxFQUFFLHdDQUF3QztJQUN0RCxrQkFBa0IsRUFBRSxvREFBb0Q7SUFDeEUsMEJBQTBCLEVBQUUsZ0RBQWdEO0lBQzVFLG1CQUFtQixFQUFFLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQ3pDLHNDQUFzQyxTQUFTLGdCQUFnQjtJQUNqRSxxQkFBcUIsRUFBRSxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUMzQyw4Q0FBOEMsU0FBUyxHQUFHO0lBQzVELGtCQUFrQixFQUFFOzs7OztDQUtyQjtJQUNDLGdCQUFnQixFQUFFOzs7O0NBSW5CO0lBQ0MsZUFBZSxFQUFFLHdEQUF3RDtJQUN6RSxjQUFjLEVBQUU7OztDQUdqQjtDQUNBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU1RSSU5HUyA9IHtcbiAgRklMRV9JU19OT1RfWUFNTDogJ1Byb3ZpZGVkIGltcGwgZmlsZSBpcyBub3QgaW4geWFtbCBmb3JtYXQuJyxcbiAgSU1QTF9JU19NSVNTSU5HOiAnSW1wbCBmaWxlIGlzIG1pc3NpbmcuJyxcbiAgTUlTU0lOR19DTEFTU05BTUU6ICdJbml0YWxpemF0aW9uIHBhcmFtIGBtb2RlbGAgaXMgbWlzc2luZy4nLFxuICBNSVNTSU5HX1BBVEg6ICdJbml0YWxpemF0aW9uIHBhcmFtIGBwYXRoYCBpcyBtaXNzaW5nLicsXG4gIE1PREVMX0RPRVNOVF9FWElTVDogJ1Byb3ZpZGVkIG1vZGVsIGNsYXNzIGRvZXMgbm90IGJlbG9uZyB0byBhbnkgbW9kZWwuJyxcbiAgTk9UX09VVFBVVF9NT0RFTF9FWFRFTlNJT046ICdQcm92aWRlZCBtb2RlbCBkb2VzIG5vdCBleHRlbmQgTW9kZWxJbnRlcmZhY2UuJyxcbiAgU1RSVUNUVVJFX01BTEZPUk1FRDogKGNoaWxkTmFtZTogc3RyaW5nKSA9PlxuICAgIGBHcmFwaCBpcyBtYWxmb3JtZWQ6IGdyYXBoLmNoaWxkcmVuLiR7Y2hpbGROYW1lfSBpcyBub3QgdmFsaWQuYCxcbiAgTk9UX0lOSVRJQUxJWkVEX01PREVMOiAobW9kZWxOYW1lOiBzdHJpbmcpID0+XG4gICAgYFlvdSdyZSB0cnlpbmcgdG8gdXNlIG5vdCBpbml0YWxpemVkIG1vZGVsOiAke21vZGVsTmFtZX0uYCxcbiAgRElTQ0xBSU1FUl9NRVNTQUdFOiBgXG5bIWltcG9ydGFudF0gSW5jdWJhdGlvbiBQcm9qZWN0XG5cblRoaXMgcHJvamVjdCBpcyBhbiBpbmN1YmF0aW9uIHByb2plY3QgYmVpbmcgcnVuIGluc2lkZSB0aGUgR3JlZW4gU29mdHdhcmUgRm91bmRhdGlvbjsgYXMgc3VjaCwgd2UgKkRPTuKAmVQgcmVjb21tZW5kIHVzaW5nIGl0IGluIGFueSBjcml0aWNhbCB1c2UgY2FzZS4gXG5JbmN1YmF0aW9uIHByb2plY3RzIGFyZSBleHBlcmltZW50YWwsIG9mZmVyIG5vIHN1cHBvcnQgZ3VhcmFudGVlLCBoYXZlIG1pbmltYWwgZ292ZXJuYW5jZSBhbmQgcHJvY2VzcywgYW5kIG1heSBiZSByZXRpcmVkIGF0IGFueSBtb21lbnQuIFRoaXMgcHJvamVjdCBtYXkgb25lIGRheSBncmFkdWF0ZSwgaW4gd2hpY2ggY2FzZSB0aGlzIGRpc2NsYWltZXIgd2lsbCBiZSByZW1vdmVkLlxuYCxcbiAgTk9UX05BVElWRV9NT0RFTDogYFxuWyFpbXBvcnRhbnRdXG5cbllvdSBhcmUgdXNpbmcgbW9kZWxzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBJbXBhY3QgRnJhbWV3b3JrIHN0YW5kYXJkIGxpYnJhcnkuIFlvdSBzaG91bGQgZG8geW91ciBvd24gcmVzZWFyY2ggdG8gZW5zdXJlIHRoZSBtb2RlbHMgYXJlIHVwIHRvIGRhdGUgYW5kIGFjY3VyYXRlLiBUaGV5IG1heSBub3QgYmUgYWN0aXZlbHkgbWFpbnRhaW5lZC4gIFxuYCxcbiAgU09NRVRISU5HX1dST05HOiAnU29tZXRoaW5nIHdyb25nIHdpdGggY2xpIGFyZ3VtZW50cy4gUGxlYXNlIGNoZWNrIGRvY3MuJyxcbiAgSVNTVUVfVEVNUExBVEU6IGBcbkltcGFjdCBGcmFtZXdvcmsgaXMgYW4gYWxwaGEgcmVsZWFzZSBmcm9tIHRoZSBHcmVlbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBpcyByZWxlYXNlZCB0byBjYXB0dXJlIGVhcmx5IGZlZWRiYWNrLiBJZiB5b3UnZCBsaWtlIHRvIG9mZmVyIHNvbWUgZmVlZGJhY2ssIHBsZWFzZSB1c2UgdGhpcyBpc3N1ZSB0ZW1wbGF0ZTogXG5odHRwczovL2dpdGh1Yi5jb20vR3JlZW4tU29mdHdhcmUtRm91bmRhdGlvbi9pZi9pc3N1ZXMvbmV3P2Fzc2lnbmVlcz0mbGFiZWxzPWZlZWRiYWNrJnByb2plY3RzPSZ0ZW1wbGF0ZT1mZWVkYmFjay5tZCZ0aXRsZT1GZWVkYmFjaystK1xuYCxcbn07XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvc3RyaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLE9BQU8sR0FBRztJQUNyQixnQkFBZ0IsRUFBRSwyQ0FBMkM7SUFDN0QsZUFBZSxFQUFFLHVCQUF1QjtJQUN4QyxpQkFBaUIsRUFBRSx5Q0FBeUM7SUFDNUQsWUFBWSxFQUFFLHdDQUF3QztJQUN0RCwwQkFBMEIsRUFDeEIsd0RBQXdEO0lBQzFELG1CQUFtQixFQUFFLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQ3pDLHNDQUFzQyxTQUFTLGdCQUFnQjtJQUNqRSxxQkFBcUIsRUFBRSxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUMzQyw4Q0FBOEMsU0FBUyxHQUFHO0lBQzVELGtCQUFrQixFQUFFOzs7OztDQUtyQjtJQUNDLGdCQUFnQixFQUFFOzs7O0NBSW5CO0lBQ0MsZUFBZSxFQUFFLHdEQUF3RDtJQUN6RSxjQUFjLEVBQUU7OztDQUdqQjtJQUNDLHVCQUF1QixFQUFFLENBQUMsTUFBNEIsRUFBRSxFQUFFLENBQ3hELG1CQUFtQixNQUFNLENBQUMsS0FBSyw4REFBOEQsTUFBTSxDQUFDLElBQUksSUFBSTtJQUM5RyxtQkFBbUIsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3BDLDBCQUEwQixJQUFJLGVBQWU7SUFDL0MsMEJBQTBCLEVBQUUsb0NBQW9DO0lBQ2hFLHFCQUFxQixFQUFFLHNCQUFzQjtJQUM3QywyQkFBMkIsRUFBRSxpQ0FBaUM7Q0FDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NDb250YWluZXJQYXJhbXN9IGZyb20gJy4uL3R5cGVzL21vZGVscy11bml2ZXJzZSc7XG5cbmV4cG9ydCBjb25zdCBTVFJJTkdTID0ge1xuICBGSUxFX0lTX05PVF9ZQU1MOiAnUHJvdmlkZWQgaW1wbCBmaWxlIGlzIG5vdCBpbiB5YW1sIGZvcm1hdC4nLFxuICBJTVBMX0lTX01JU1NJTkc6ICdJbXBsIGZpbGUgaXMgbWlzc2luZy4nLFxuICBNSVNTSU5HX0NMQVNTTkFNRTogXCJJbml0YWxpemF0aW9uIHBhcmFtICdtb2RlbCcgaXMgbWlzc2luZy5cIixcbiAgTUlTU0lOR19QQVRIOiBcIkluaXRhbGl6YXRpb24gcGFyYW0gJ3BhdGgnIGlzIG1pc3NpbmcuXCIsXG4gIE5PVF9NT0RFTF9QTFVHSU5fRVhURU5TSU9OOlxuICAgIFwiUHJvdmlkZWQgbW9kZWwgZG9lcyBub3QgZXh0ZW5kICdNb2RlbFBsdWdpbkludGVyZmFjZScuXCIsXG4gIFNUUlVDVFVSRV9NQUxGT1JNRUQ6IChjaGlsZE5hbWU6IHN0cmluZykgPT5cbiAgICBgR3JhcGggaXMgbWFsZm9ybWVkOiBncmFwaC5jaGlsZHJlbi4ke2NoaWxkTmFtZX0gaXMgbm90IHZhbGlkLmAsXG4gIE5PVF9JTklUSUFMSVpFRF9NT0RFTDogKGNsYXNzTmFtZTogc3RyaW5nKSA9PlxuICAgIGBZb3UncmUgdHJ5aW5nIHRvIHVzZSBub3QgaW5pdGFsaXplZCBtb2RlbDogJHtjbGFzc05hbWV9LmAsXG4gIERJU0NMQUlNRVJfTUVTU0FHRTogYFxuWyFpbXBvcnRhbnRdIEluY3ViYXRpb24gUHJvamVjdFxuXG5UaGlzIHByb2plY3QgaXMgYW4gaW5jdWJhdGlvbiBwcm9qZWN0IGJlaW5nIHJ1biBpbnNpZGUgdGhlIEdyZWVuIFNvZnR3YXJlIEZvdW5kYXRpb247IGFzIHN1Y2gsIHdlICpET07igJlUIHJlY29tbWVuZCB1c2luZyBpdCBpbiBhbnkgY3JpdGljYWwgdXNlIGNhc2UuIFxuSW5jdWJhdGlvbiBwcm9qZWN0cyBhcmUgZXhwZXJpbWVudGFsLCBvZmZlciBubyBzdXBwb3J0IGd1YXJhbnRlZSwgaGF2ZSBtaW5pbWFsIGdvdmVybmFuY2UgYW5kIHByb2Nlc3MsIGFuZCBtYXkgYmUgcmV0aXJlZCBhdCBhbnkgbW9tZW50LiBUaGlzIHByb2plY3QgbWF5IG9uZSBkYXkgZ3JhZHVhdGUsIGluIHdoaWNoIGNhc2UgdGhpcyBkaXNjbGFpbWVyIHdpbGwgYmUgcmVtb3ZlZC5cbmAsXG4gIE5PVF9OQVRJVkVfTU9ERUw6IGBcblshaW1wb3J0YW50XVxuXG5Zb3UgYXJlIHVzaW5nIG1vZGVscyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgSW1wYWN0IEZyYW1ld29yayBzdGFuZGFyZCBsaWJyYXJ5LiBZb3Ugc2hvdWxkIGRvIHlvdXIgb3duIHJlc2VhcmNoIHRvIGVuc3VyZSB0aGUgbW9kZWxzIGFyZSB1cCB0byBkYXRlIGFuZCBhY2N1cmF0ZS4gVGhleSBtYXkgbm90IGJlIGFjdGl2ZWx5IG1haW50YWluZWQuICBcbmAsXG4gIFNPTUVUSElOR19XUk9ORzogJ1NvbWV0aGluZyB3cm9uZyB3aXRoIGNsaSBhcmd1bWVudHMuIFBsZWFzZSBjaGVjayBkb2NzLicsXG4gIElTU1VFX1RFTVBMQVRFOiBgXG5JbXBhY3QgRnJhbWV3b3JrIGlzIGFuIGFscGhhIHJlbGVhc2UgZnJvbSB0aGUgR3JlZW4gU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgaXMgcmVsZWFzZWQgdG8gY2FwdHVyZSBlYXJseSBmZWVkYmFjay4gSWYgeW91J2QgbGlrZSB0byBvZmZlciBzb21lIGZlZWRiYWNrLCBwbGVhc2UgdXNlIHRoaXMgaXNzdWUgdGVtcGxhdGU6IFxuaHR0cHM6Ly9naXRodWIuY29tL0dyZWVuLVNvZnR3YXJlLUZvdW5kYXRpb24vaWYvaXNzdWVzL25ldz9hc3NpZ25lZXM9JmxhYmVscz1mZWVkYmFjayZwcm9qZWN0cz0mdGVtcGxhdGU9ZmVlZGJhY2subWQmdGl0bGU9RmVlZGJhY2srLStcbmAsXG4gIE5PVF9DT05TVFJVQ1RBQkxFX01PREVMOiAocGFyYW1zOiBDbGFzc0NvbnRhaW5lclBhcmFtcykgPT5cbiAgICBgUHJvdmlkZWQgbW9kZWwgJyR7cGFyYW1zLm1vZGVsfScgaXMgbm90IGNvbnN0cnVjdGFibGUgb3IgZG9lcyBub3QgYmVsb25nIHRvIGdpdmVuIHBsdWdpbiAnJHtwYXJhbXMucGF0aH0nLmAsXG4gIElOVkFMSURfTU9EVUxFX1BBVEg6IChwYXRoOiBzdHJpbmcpID0+XG4gICAgYFByb3ZpZGVkIG1vZHVsZSBwYXRoOiAnJHtwYXRofScgaXMgaW52YWxpZC5gLFxuICBJTlZBTElEX1RJTUVfTk9STUFMSVpBVElPTjogJ1N0YXJ0IHRpbWUgb3IgZW5kIHRpbWUgaXMgbWlzc2luZy4nLFxuICBJTlZBTElEX1RJTUVfSU5URVJWQUw6ICdJbnRlcnZhbCBpcyBtaXNzaW5nLicsXG4gIElOVkFMSURfT0JTRVJWQVRJT05fT1ZFUkxBUDogJ09ic2VydmF0aW9uIHRpbWVzdGFtcHMgb3ZlcmxhcC4nLFxufTtcbiJdfQ==
package/build/index.js CHANGED
@@ -14,10 +14,11 @@ const { DISCLAIMER_MESSAGE, SOMETHING_WRONG } = config_1.STRINGS;
14
14
  /**
15
15
  * 1. Parses yml input/output process arguments.
16
16
  * 2. Opens yaml file as an object.
17
- * 3. Initializes models.
18
- * 4. Initializes graph, does computing.
19
- * 5. Saves processed object as a yaml file.
20
- * @example run `npm run impact-engine -- --impl ./test.yml --ompl ./result.yml`
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`
21
22
  */
22
23
  const impactEngine = async () => {
23
24
  console.log(DISCLAIMER_MESSAGE);
@@ -29,10 +30,16 @@ const impactEngine = async () => {
29
30
  const impl = (0, validations_1.validateImpl)(rawImpl);
30
31
  // Lifecycle Initialize Models
31
32
  const modelsHandbook = new models_universe_1.ModelsUniverse();
32
- impl.initialize.models.forEach((model) => modelsHandbook.writeDown(model));
33
+ for (const model of impl.initialize.models) {
34
+ await modelsHandbook.writeDown(model);
35
+ }
33
36
  // Lifecycle Computing
34
- const ateruiComputer = new supercomputer_1.Supercomputer(impl, modelsHandbook);
35
- const ompl = await ateruiComputer.compute();
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
+ }
36
43
  if (!outputPath) {
37
44
  console.log(JSON.stringify(ompl));
38
45
  return;
@@ -43,4 +50,4 @@ const impactEngine = async () => {
43
50
  return Promise.reject(new CliInputError(SOMETHING_WRONG));
44
51
  };
45
52
  impactEngine().catch(helpers_1.andHandle);
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkRBQXFEO0FBQ3JELHVEQUFrRDtBQUVsRCxzQ0FBaUQ7QUFDakQsMENBQXFDO0FBQ3JDLDRDQUF5QztBQUN6QyxvREFBZ0Q7QUFDaEQsc0NBQWlFO0FBRWpFLHFDQUFpQztBQUVqQyxNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9CLE1BQU0sRUFBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXREOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFlBQVksR0FBRyxLQUFLLElBQUksRUFBRTtJQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFaEMsTUFBTSxhQUFhLEdBQUcsSUFBQSwyQkFBb0IsR0FBRSxDQUFDO0lBRTdDLElBQUksYUFBYSxFQUFFO1FBQ2pCLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDLEdBQUcsYUFBYSxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSwyQkFBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCx1QkFBdUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5DLDhCQUE4QjtRQUM5QixNQUFNLGNBQWMsR0FBRyxJQUFJLGdDQUFjLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUM1QyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUNoQyxDQUFDO1FBRUYsc0JBQXNCO1FBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksNkJBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBQSxxQkFBYyxFQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2QyxPQUFPO0tBQ1I7SUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUM7QUFFRixZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHtNb2RlbHNVbml2ZXJzZX0gZnJvbSAnLi9saWIvbW9kZWxzLXVuaXZlcnNlJztcbmltcG9ydCB7U3VwZXJjb21wdXRlcn0gZnJvbSAnLi9saWIvc3VwZXJjb21wdXRlcic7XG5cbmltcG9ydCB7cGFyc2VQcm9jZXNzQXJndW1lbnR9IGZyb20gJy4vdXRpbC9hcmdzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL3V0aWwvZXJyb3JzJztcbmltcG9ydCB7YW5kSGFuZGxlfSBmcm9tICcuL3V0aWwvaGVscGVycyc7XG5pbXBvcnQge3ZhbGlkYXRlSW1wbH0gZnJvbSAnLi91dGlsL3ZhbGlkYXRpb25zJztcbmltcG9ydCB7b3BlbllhbWxGaWxlQXNPYmplY3QsIHNhdmVZYW1sRmlsZUFzfSBmcm9tICcuL3V0aWwveWFtbCc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi9jb25maWcnO1xuXG5jb25zdCB7Q2xpSW5wdXRFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtESVNDTEFJTUVSX01FU1NBR0UsIFNPTUVUSElOR19XUk9OR30gPSBTVFJJTkdTO1xuXG4vKipcbiAqIDEuIFBhcnNlcyB5bWwgaW5wdXQvb3V0cHV0IHByb2Nlc3MgYXJndW1lbnRzLlxuICogMi4gT3BlbnMgeWFtbCBmaWxlIGFzIGFuIG9iamVjdC5cbiAqIDMuIEluaXRpYWxpemVzIG1vZGVscy5cbiAqIDQuIEluaXRpYWxpemVzIGdyYXBoLCBkb2VzIGNvbXB1dGluZy5cbiAqIDUuIFNhdmVzIHByb2Nlc3NlZCBvYmplY3QgYXMgYSB5YW1sIGZpbGUuXG4gKiBAZXhhbXBsZSBydW4gYG5wbSBydW4gaW1wYWN0LWVuZ2luZSAtLSAtLWltcGwgLi90ZXN0LnltbCAtLW9tcGwgLi9yZXN1bHQueW1sYFxuICovXG5jb25zdCBpbXBhY3RFbmdpbmUgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnNvbGUubG9nKERJU0NMQUlNRVJfTUVTU0FHRSk7XG5cbiAgY29uc3QgcHJvY2Vzc1BhcmFtcyA9IHBhcnNlUHJvY2Vzc0FyZ3VtZW50KCk7XG5cbiAgaWYgKHByb2Nlc3NQYXJhbXMpIHtcbiAgICBjb25zdCB7aW5wdXRQYXRoLCBvdXRwdXRQYXRofSA9IHByb2Nlc3NQYXJhbXM7XG4gICAgY29uc3QgcmF3SW1wbCA9IGF3YWl0IG9wZW5ZYW1sRmlsZUFzT2JqZWN0KGlucHV0UGF0aCk7XG5cbiAgICAvLyBMaWZlY3ljbGUgVmFsaWRhdGlvblxuICAgIGNvbnN0IGltcGwgPSB2YWxpZGF0ZUltcGwocmF3SW1wbCk7XG5cbiAgICAvLyBMaWZlY3ljbGUgSW5pdGlhbGl6ZSBNb2RlbHNcbiAgICBjb25zdCBtb2RlbHNIYW5kYm9vayA9IG5ldyBNb2RlbHNVbml2ZXJzZSgpO1xuICAgIGltcGwuaW5pdGlhbGl6ZS5tb2RlbHMuZm9yRWFjaCgobW9kZWw6IGFueSkgPT5cbiAgICAgIG1vZGVsc0hhbmRib29rLndyaXRlRG93bihtb2RlbClcbiAgICApO1xuXG4gICAgLy8gTGlmZWN5Y2xlIENvbXB1dGluZ1xuICAgIGNvbnN0IGF0ZXJ1aUNvbXB1dGVyID0gbmV3IFN1cGVyY29tcHV0ZXIoaW1wbCwgbW9kZWxzSGFuZGJvb2spO1xuICAgIGNvbnN0IG9tcGwgPSBhd2FpdCBhdGVydWlDb21wdXRlci5jb21wdXRlKCk7XG5cbiAgICBpZiAoIW91dHB1dFBhdGgpIHtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG9tcGwpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlWWFtbEZpbGVBcyhvbXBsLCBvdXRwdXRQYXRoKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQ2xpSW5wdXRFcnJvcihTT01FVEhJTkdfV1JPTkcpKTtcbn07XG5cbmltcGFjdEVuZ2luZSgpLmNhdGNoKGFuZEhhbmRsZSk7XG4iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkRBQXFEO0FBQ3JELHVEQUFrRDtBQUVsRCxzQ0FBaUQ7QUFDakQsMENBQXFDO0FBQ3JDLDRDQUF5QztBQUN6QyxvREFBZ0Q7QUFDaEQsc0NBQWlFO0FBRWpFLHFDQUFpQztBQUlqQyxNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9CLE1BQU0sRUFBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXREOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRWhDLE1BQU0sYUFBYSxHQUFHLElBQUEsMkJBQW9CLEdBQUUsQ0FBQztJQUU3QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDLEdBQUcsYUFBYSxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSwyQkFBb0IsRUFBTyxTQUFTLENBQUMsQ0FBQztRQUU1RCx1QkFBdUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5DLDhCQUE4QjtRQUM5QixNQUFNLGNBQWMsR0FBRyxJQUFJLGdDQUFjLEVBQUUsQ0FBQztRQUM1QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0MsTUFBTSxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSw2QkFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBQSxxQkFBYyxFQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2QyxPQUFPO0lBQ1QsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQztBQUVGLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQge01vZGVsc1VuaXZlcnNlfSBmcm9tICcuL2xpYi9tb2RlbHMtdW5pdmVyc2UnO1xuaW1wb3J0IHtTdXBlcmNvbXB1dGVyfSBmcm9tICcuL2xpYi9zdXBlcmNvbXB1dGVyJztcblxuaW1wb3J0IHtwYXJzZVByb2Nlc3NBcmd1bWVudH0gZnJvbSAnLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4vdXRpbC9lcnJvcnMnO1xuaW1wb3J0IHthbmRIYW5kbGV9IGZyb20gJy4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7dmFsaWRhdGVJbXBsfSBmcm9tICcuL3V0aWwvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHtvcGVuWWFtbEZpbGVBc09iamVjdCwgc2F2ZVlhbWxGaWxlQXN9IGZyb20gJy4vdXRpbC95YW1sJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuL2NvbmZpZyc7XG5cbmltcG9ydCB7SW1wbH0gZnJvbSAnLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0NsaUlucHV0RXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCB7RElTQ0xBSU1FUl9NRVNTQUdFLCBTT01FVEhJTkdfV1JPTkd9ID0gU1RSSU5HUztcblxuLyoqXG4gKiAxLiBQYXJzZXMgeW1sIGlucHV0L291dHB1dCBwcm9jZXNzIGFyZ3VtZW50cy5cbiAqIDIuIE9wZW5zIHlhbWwgZmlsZSBhcyBhbiBvYmplY3QuXG4gKiAzLiBWYWxpZGF0ZXMgZ2l2ZW4gaW1wbCB0byBtYXRjaCBiYXNpYyBzdHJ1Y3R1cmUuXG4gKiA0LiBJbml0aWFsaXplcyByZXF1ZXN0ZWQgbW9kZWxzLlxuICogNS4gSW5pdGlhbGl6ZXMgZ3JhcGgsIGRvZXMgY29tcHV0aW5nLlxuICogNi4gU2F2ZXMgcHJvY2Vzc2VkIG9iamVjdCBhcyBhIHlhbWwgZmlsZS5cbiAqIEBleGFtcGxlIHJ1biBgeWFybiBpbXBhY3QtZW5naW5lIC0taW1wbCAuL3Rlc3QueW1sIC0tb21wbCAuL3Jlc3VsdC55bWxgXG4gKi9cbmNvbnN0IGltcGFjdEVuZ2luZSA9IGFzeW5jICgpID0+IHtcbiAgY29uc29sZS5sb2coRElTQ0xBSU1FUl9NRVNTQUdFKTtcblxuICBjb25zdCBwcm9jZXNzUGFyYW1zID0gcGFyc2VQcm9jZXNzQXJndW1lbnQoKTtcblxuICBpZiAocHJvY2Vzc1BhcmFtcykge1xuICAgIGNvbnN0IHtpbnB1dFBhdGgsIG91dHB1dFBhdGh9ID0gcHJvY2Vzc1BhcmFtcztcbiAgICBjb25zdCByYXdJbXBsID0gYXdhaXQgb3BlbllhbWxGaWxlQXNPYmplY3Q8SW1wbD4oaW5wdXRQYXRoKTtcblxuICAgIC8vIExpZmVjeWNsZSBWYWxpZGF0aW9uXG4gICAgY29uc3QgaW1wbCA9IHZhbGlkYXRlSW1wbChyYXdJbXBsKTtcblxuICAgIC8vIExpZmVjeWNsZSBJbml0aWFsaXplIE1vZGVsc1xuICAgIGNvbnN0IG1vZGVsc0hhbmRib29rID0gbmV3IE1vZGVsc1VuaXZlcnNlKCk7XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiBpbXBsLmluaXRpYWxpemUubW9kZWxzKSB7XG4gICAgICBhd2FpdCBtb2RlbHNIYW5kYm9vay53cml0ZURvd24obW9kZWwpO1xuICAgIH1cblxuICAgIC8vIExpZmVjeWNsZSBDb21wdXRpbmdcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgU3VwZXJjb21wdXRlcihpbXBsLCBtb2RlbHNIYW5kYm9vayk7XG4gICAgY29uc3Qgb21wbCA9IGF3YWl0IGVuZ2luZS5jb21wdXRlKCk7XG5cbiAgICBpZiAoaW1wbC5hZ2dyZWdhdGlvbikge1xuICAgICAgY29uc3QgYWdncmVnYXRpb25zID0gZW5naW5lLmNhbGN1bGF0ZUFnZ3JlZ2F0aW9uKCk7XG4gICAgICBvbXBsWydhZ2dyZWdhdGVkLW91dHB1dHMnXSA9IGFnZ3JlZ2F0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoIW91dHB1dFBhdGgpIHtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG9tcGwpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlWWFtbEZpbGVBcyhvbXBsLCBvdXRwdXRQYXRoKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQ2xpSW5wdXRFcnJvcihTT01FVEhJTkdfV1JPTkcpKTtcbn07XG5cbmltcGFjdEVuZ2luZSgpLmNhdGNoKGFuZEhhbmRsZSk7XG4iXX0=
@@ -11,16 +11,24 @@ export declare class ModelsUniverse {
11
11
  * Checks if model is instance of `IOutputModelInterface`.
12
12
  */
13
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;
14
22
  /**
15
23
  * Returns plugin model. Checks if model is missing then rejects with error.
16
24
  * Then checks if `path` is starting with github, then grabs the repository name.
17
25
  * Imports module, then checks if it's a class which implements input model interface.
18
26
  */
19
- private handPluginModel;
27
+ private handModel;
20
28
  /**
21
29
  * Initializes and registers model.
22
30
  */
23
- writeDown(modelToInitalize: ImplInitializeModel): InitalizedModels;
31
+ writeDown(modelToInitalize: ImplInitializeModel): Promise<InitalizedModels>;
24
32
  /**
25
33
  * Returns existing model by `name`.
26
34
  */
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ModelsUniverse = void 0;
4
+ const pathLib = require("path");
4
5
  const errors_1 = require("../util/errors");
5
6
  const config_1 = require("../config");
6
7
  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;
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;
9
10
  /**
10
11
  * Models Initialization Lifecycle.
11
12
  */
@@ -19,48 +20,72 @@ class ModelsUniverse {
19
20
  /**
20
21
  * Checks if model is instance of `IOutputModelInterface`.
21
22
  */
22
- instanceOfModel(ClassContainer) {
23
+ instanceOfModel(ClassContainer, params) {
23
24
  try {
24
25
  const testModel = new ClassContainer();
25
26
  const boolable = 'configure' in testModel && 'execute' in testModel;
26
27
  return boolable;
27
28
  }
28
29
  catch (error) {
29
- throw ModelInitializationError(MODEL_DOESNT_EXIST);
30
+ throw new ModelInitializationError(NOT_CONSTRUCTABLE_MODEL(params));
30
31
  }
31
32
  }
32
33
  /**
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.
34
+ * Imports module by given `path`.
36
35
  */
37
- async handPluginModel(model, path) {
38
- if (!model) {
39
- throw new ModelCredentialError(MISSING_CLASSNAME);
36
+ async importModuleFrom(path) {
37
+ try {
38
+ const module = await Promise.resolve(`${path}`).then(s => require(s));
39
+ return module;
40
40
  }
41
- if (!path) {
42
- throw new ModelCredentialError(MISSING_PATH);
41
+ catch (error) {
42
+ console.log(error);
43
+ throw new ModelInitializationError(INVALID_MODULE_PATH(path));
43
44
  }
44
- if (path?.startsWith(GITHUB_PATH)) {
45
- const parts = path.split('/');
46
- path = parts[parts.length - 1];
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);
47
53
  }
48
- if (!path.includes('if-models')) {
49
- console.log(NOT_NATIVE_MODEL);
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/index.ts`);
50
64
  }
51
- const pluginModule = await Promise.resolve(`${path}`).then(s => require(s));
52
- if (this.instanceOfModel(pluginModule[model])) {
53
- return pluginModule[model];
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
+ }
54
73
  }
55
- throw new Error(NOT_OUTPUT_MODEL_EXTENSION);
74
+ return this.importAndVerifyModule(model, path);
56
75
  }
57
76
  /**
58
77
  * Initializes and registers model.
59
78
  */
60
- writeDown(modelToInitalize) {
61
- const { name, config, model, path } = modelToInitalize;
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);
62
88
  const callback = async (graphOptions) => {
63
- const Model = await this.handPluginModel(model, path);
64
89
  const params = {
65
90
  ...config,
66
91
  ...graphOptions,
@@ -78,18 +103,11 @@ class ModelsUniverse {
78
103
  * Returns existing model by `name`.
79
104
  */
80
105
  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
- }
106
+ if (this.initalizedModels[modelName]) {
107
+ return this.initalizedModels[modelName](config);
90
108
  }
91
109
  throw new ModelInitializationError(NOT_INITIALIZED_MODEL(modelName));
92
110
  }
93
111
  }
94
112
  exports.ModelsUniverse = ModelsUniverse;
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2RlbHMtdW5pdmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXNDO0FBRXRDLHNDQUEwQztBQVExQyxNQUFNLEVBQUMsd0JBQXdCLEVBQUUsb0JBQW9CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFaEUsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUM3QixNQUFNLEVBQ0osaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FDakIsR0FBRyxnQkFBTyxDQUFDO0FBRVo7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFBM0I7UUFDRTs7V0FFRztRQUNJLHFCQUFnQixHQUFxQixFQUFFLENBQUM7SUE0RmpELENBQUM7SUExRkM7O09BRUc7SUFDSyxlQUFlLENBQUMsY0FBbUI7UUFDekMsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFFdkMsTUFBTSxRQUFRLEdBQUcsV0FBVyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDO1lBRXBFLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBYyxFQUFFLElBQWE7UUFDekQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQjtRQUVELE1BQU0sWUFBWSxHQUFHLHlCQUFhLElBQUkseUJBQUMsQ0FBQztRQUV4QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDN0MsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLGdCQUFxQztRQUNwRCxNQUFNLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFFckQsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLFlBQTBCLEVBQUUsRUFBRTtZQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXRELE1BQU0sTUFBTSxHQUFHO2dCQUNiLEdBQUcsTUFBTTtnQkFDVCxHQUFHLFlBQVk7YUFDaEIsQ0FBQztZQUVGLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFNUQsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3RCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjtZQUN4QixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVE7U0FDakIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFpQixFQUFFLE1BQVc7UUFDN0QsSUFBSTtZQUNGLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRTtnQkFDMUIsTUFBTSxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNuRDtTQUNGO1FBRUQsTUFBTSxJQUFJLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBaEdELHdDQWdHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RVJST1JTfSBmcm9tICcuLi91dGlsL2Vycm9ycyc7XG5cbmltcG9ydCB7Q09ORklHLCBTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbXBvcnQge1xuICBHcmFwaE9wdGlvbnMsXG4gIEltcGxJbml0aWFsaXplTW9kZWwsXG4gIEluaXRhbGl6ZWRNb2RlbHMsXG59IGZyb20gJy4uL3R5cGVzL21vZGVscy11bml2ZXJzZSc7XG5cbmNvbnN0IHtNb2RlbEluaXRpYWxpemF0aW9uRXJyb3IsIE1vZGVsQ3JlZGVudGlhbEVycm9yfSA9IEVSUk9SUztcblxuY29uc3Qge0dJVEhVQl9QQVRIfSA9IENPTkZJRztcbmNvbnN0IHtcbiAgTUlTU0lOR19DTEFTU05BTUUsXG4gIE5PVF9PVVRQVVRfTU9ERUxfRVhURU5TSU9OLFxuICBOT1RfSU5JVElBTElaRURfTU9ERUwsXG4gIE1JU1NJTkdfUEFUSCxcbiAgTU9ERUxfRE9FU05UX0VYSVNULFxuICBOT1RfTkFUSVZFX01PREVMLFxufSA9IFNUUklOR1M7XG5cbi8qKlxuICogTW9kZWxzIEluaXRpYWxpemF0aW9uIExpZmVjeWNsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsc1VuaXZlcnNlIHtcbiAgLyoqXG4gICAqIE1vZGVscyBsaXN0LlxuICAgKi9cbiAgcHVibGljIGluaXRhbGl6ZWRNb2RlbHM6IEluaXRhbGl6ZWRNb2RlbHMgPSB7fTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG1vZGVsIGlzIGluc3RhbmNlIG9mIGBJT3V0cHV0TW9kZWxJbnRlcmZhY2VgLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YW5jZU9mTW9kZWwoQ2xhc3NDb250YWluZXI6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXN0TW9kZWwgPSBuZXcgQ2xhc3NDb250YWluZXIoKTtcblxuICAgICAgY29uc3QgYm9vbGFibGUgPSAnY29uZmlndXJlJyBpbiB0ZXN0TW9kZWwgJiYgJ2V4ZWN1dGUnIGluIHRlc3RNb2RlbDtcblxuICAgICAgcmV0dXJuIGJvb2xhYmxlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBNb2RlbEluaXRpYWxpemF0aW9uRXJyb3IoTU9ERUxfRE9FU05UX0VYSVNUKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBwbHVnaW4gbW9kZWwuIENoZWNrcyBpZiBtb2RlbCBpcyBtaXNzaW5nIHRoZW4gcmVqZWN0cyB3aXRoIGVycm9yLlxuICAgKiBUaGVuIGNoZWNrcyBpZiBgcGF0aGAgaXMgc3RhcnRpbmcgd2l0aCBnaXRodWIsIHRoZW4gZ3JhYnMgdGhlIHJlcG9zaXRvcnkgbmFtZS5cbiAgICogSW1wb3J0cyBtb2R1bGUsIHRoZW4gY2hlY2tzIGlmIGl0J3MgYSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIGlucHV0IG1vZGVsIGludGVyZmFjZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZFBsdWdpbk1vZGVsKG1vZGVsPzogc3RyaW5nLCBwYXRoPzogc3RyaW5nKSB7XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IE1vZGVsQ3JlZGVudGlhbEVycm9yKE1JU1NJTkdfQ0xBU1NOQU1FKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBNb2RlbENyZWRlbnRpYWxFcnJvcihNSVNTSU5HX1BBVEgpO1xuICAgIH1cblxuICAgIGlmIChwYXRoPy5zdGFydHNXaXRoKEdJVEhVQl9QQVRIKSkge1xuICAgICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICBwYXRoID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgaWYgKCFwYXRoLmluY2x1ZGVzKCdpZi1tb2RlbHMnKSkge1xuICAgICAgY29uc29sZS5sb2coTk9UX05BVElWRV9NT0RFTCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGx1Z2luTW9kdWxlID0gYXdhaXQgaW1wb3J0KHBhdGgpO1xuXG4gICAgaWYgKHRoaXMuaW5zdGFuY2VPZk1vZGVsKHBsdWdpbk1vZHVsZVttb2RlbF0pKSB7XG4gICAgICByZXR1cm4gcGx1Z2luTW9kdWxlW21vZGVsXTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoTk9UX09VVFBVVF9NT0RFTF9FWFRFTlNJT04pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGFuZCByZWdpc3RlcnMgbW9kZWwuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVEb3duKG1vZGVsVG9Jbml0YWxpemU6IEltcGxJbml0aWFsaXplTW9kZWwpIHtcbiAgICBjb25zdCB7bmFtZSwgY29uZmlnLCBtb2RlbCwgcGF0aH0gPSBtb2RlbFRvSW5pdGFsaXplO1xuXG4gICAgY29uc3QgY2FsbGJhY2sgPSBhc3luYyAoZ3JhcGhPcHRpb25zOiBHcmFwaE9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IE1vZGVsID0gYXdhaXQgdGhpcy5oYW5kUGx1Z2luTW9kZWwobW9kZWwsIHBhdGgpO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgLi4uZ3JhcGhPcHRpb25zLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaW5pdGFsaXplZE1vZGVsID0gYXdhaXQgbmV3IE1vZGVsKCkuY29uZmlndXJlKHBhcmFtcyk7XG5cbiAgICAgIHJldHVybiBpbml0YWxpemVkTW9kZWw7XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdGFsaXplZE1vZGVscyA9IHtcbiAgICAgIC4uLnRoaXMuaW5pdGFsaXplZE1vZGVscyxcbiAgICAgIFtuYW1lXTogY2FsbGJhY2ssXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmluaXRhbGl6ZWRNb2RlbHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBleGlzdGluZyBtb2RlbCBieSBgbmFtZWAuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SW5pdGlhbGl6ZWRNb2RlbChtb2RlbE5hbWU6IHN0cmluZywgY29uZmlnOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuaW5pdGFsaXplZE1vZGVsc1ttb2RlbE5hbWVdKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmluaXRhbGl6ZWRNb2RlbHNbbW9kZWxOYW1lXShjb25maWcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBNb2RlbEluaXRpYWxpemF0aW9uRXJyb3IoTk9UX0lOSVRJQUxJWkVEX01PREVMKG1vZGVsTmFtZSkpO1xuICB9XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2RlbHMtdW5pdmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0NBQWlDO0FBRWpDLDJDQUFzQztBQUV0QyxzQ0FBMEM7QUFTMUMsTUFBTSxFQUFDLHdCQUF3QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRWhFLE1BQU0sRUFBQyxXQUFXLEVBQUUsWUFBWSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNDLE1BQU0sRUFDSixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsR0FBRyxnQkFBTyxDQUFDO0FBRVo7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFBM0I7UUFDRTs7V0FFRztRQUNJLHFCQUFnQixHQUFxQixFQUFFLENBQUM7SUE4R2pELENBQUM7SUE1R0M7O09BRUc7SUFDSyxlQUFlLENBQUMsY0FBbUIsRUFBRSxNQUE0QjtRQUN2RSxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLFdBQVcsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQztZQUVwRSxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUN6QyxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyx5QkFBYSxJQUFJLHlCQUFDLENBQUM7WUFFbEMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBYSxFQUFFLElBQVk7UUFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksd0JBQXdCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQ2pELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzlELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQXFDO1FBQzFELE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUVyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWhELE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxZQUEwQixFQUFFLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsR0FBRyxNQUFNO2dCQUNULEdBQUcsWUFBWTthQUNoQixDQUFDO1lBRUYsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU1RCxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDdEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3hCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUTtTQUNqQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsTUFBVztRQUM3RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxNQUFNLElBQUksd0JBQXdCLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0Y7QUFsSEQsd0NBa0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGhMaWIgPSByZXF1aXJlKCdwYXRoJyk7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi91dGlsL2Vycm9ycyc7XG5cbmltcG9ydCB7Q09ORklHLCBTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbXBvcnQge1xuICBDbGFzc0NvbnRhaW5lclBhcmFtcyxcbiAgR3JhcGhPcHRpb25zLFxuICBJbXBsSW5pdGlhbGl6ZU1vZGVsLFxuICBJbml0YWxpemVkTW9kZWxzLFxufSBmcm9tICcuLi90eXBlcy9tb2RlbHMtdW5pdmVyc2UnO1xuXG5jb25zdCB7TW9kZWxJbml0aWFsaXphdGlvbkVycm9yLCBNb2RlbENyZWRlbnRpYWxFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtHSVRIVUJfUEFUSCwgTkFUSVZFX01PREVMfSA9IENPTkZJRztcbmNvbnN0IHtcbiAgTUlTU0lOR19DTEFTU05BTUUsXG4gIE5PVF9NT0RFTF9QTFVHSU5fRVhURU5TSU9OLFxuICBNSVNTSU5HX1BBVEgsXG4gIE5PVF9OQVRJVkVfTU9ERUwsXG4gIE5PVF9DT05TVFJVQ1RBQkxFX01PREVMLFxuICBOT1RfSU5JVElBTElaRURfTU9ERUwsXG4gIElOVkFMSURfTU9EVUxFX1BBVEgsXG59ID0gU1RSSU5HUztcblxuLyoqXG4gKiBNb2RlbHMgSW5pdGlhbGl6YXRpb24gTGlmZWN5Y2xlLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWxzVW5pdmVyc2Uge1xuICAvKipcbiAgICogTW9kZWxzIGxpc3QuXG4gICAqL1xuICBwdWJsaWMgaW5pdGFsaXplZE1vZGVsczogSW5pdGFsaXplZE1vZGVscyA9IHt9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbW9kZWwgaXMgaW5zdGFuY2Ugb2YgYElPdXRwdXRNb2RlbEludGVyZmFjZWAuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbmNlT2ZNb2RlbChDbGFzc0NvbnRhaW5lcjogYW55LCBwYXJhbXM6IENsYXNzQ29udGFpbmVyUGFyYW1zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlc3RNb2RlbCA9IG5ldyBDbGFzc0NvbnRhaW5lcigpO1xuICAgICAgY29uc3QgYm9vbGFibGUgPSAnY29uZmlndXJlJyBpbiB0ZXN0TW9kZWwgJiYgJ2V4ZWN1dGUnIGluIHRlc3RNb2RlbDtcblxuICAgICAgcmV0dXJuIGJvb2xhYmxlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE5PVF9DT05TVFJVQ1RBQkxFX01PREVMKHBhcmFtcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIG1vZHVsZSBieSBnaXZlbiBgcGF0aGAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGltcG9ydE1vZHVsZUZyb20ocGF0aDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKTtcblxuICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IE1vZGVsSW5pdGlhbGl6YXRpb25FcnJvcihJTlZBTElEX01PRFVMRV9QQVRIKHBhdGgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBgbW9kdWxlYCBmcm9tIGdpdmVuIGBwYXRoYCwgdGhlbiBjaGVja3MgaWYgaXQncyBgTW9kZWxQbHVnaW5JbnRlcmZhY2VgIGV4dGVuc2lvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0QW5kVmVyaWZ5TW9kdWxlKG1vZGVsOiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdWdpbk1vZHVsZSA9IGF3YWl0IHRoaXMuaW1wb3J0TW9kdWxlRnJvbShwYXRoKTtcblxuICAgIGlmICghdGhpcy5pbnN0YW5jZU9mTW9kZWwocGx1Z2luTW9kdWxlW21vZGVsXSwge21vZGVsLCBwYXRofSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2RlbEluaXRpYWxpemF0aW9uRXJyb3IoTk9UX01PREVMX1BMVUdJTl9FWFRFTlNJT04pO1xuICAgIH1cblxuICAgIHJldHVybiBwbHVnaW5Nb2R1bGVbbW9kZWxdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGx1Z2luIG1vZGVsLiBDaGVja3MgaWYgbW9kZWwgaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAgICogVGhlbiBjaGVja3MgaWYgYHBhdGhgIGlzIHN0YXJ0aW5nIHdpdGggZ2l0aHViLCB0aGVuIGdyYWJzIHRoZSByZXBvc2l0b3J5IG5hbWUuXG4gICAqIEltcG9ydHMgbW9kdWxlLCB0aGVuIGNoZWNrcyBpZiBpdCdzIGEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBpbnB1dCBtb2RlbCBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRNb2RlbChtb2RlbDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAocGF0aCA9PT0gJ2J1aWx0aW4nKSB7XG4gICAgICBwYXRoID0gcGF0aExpYi5ub3JtYWxpemUoYCR7X19kaXJuYW1lfS8uLi9tb2RlbHMvaW5kZXgudHNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhdGg/LnN0YXJ0c1dpdGgoR0lUSFVCX1BBVEgpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBwYXRoID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICB9XG5cbiAgICAgIGlmICghcGF0aC5pbmNsdWRlcyhOQVRJVkVfTU9ERUwpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKE5PVF9OQVRJVkVfTU9ERUwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmltcG9ydEFuZFZlcmlmeU1vZHVsZShtb2RlbCwgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYW5kIHJlZ2lzdGVycyBtb2RlbC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB3cml0ZURvd24obW9kZWxUb0luaXRhbGl6ZTogSW1wbEluaXRpYWxpemVNb2RlbCkge1xuICAgIGNvbnN0IHttb2RlbCwgcGF0aCwgY29uZmlnLCBuYW1lfSA9IG1vZGVsVG9Jbml0YWxpemU7XG5cbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgTW9kZWxDcmVkZW50aWFsRXJyb3IoTUlTU0lOR19DTEFTU05BTUUpO1xuICAgIH1cblxuICAgIGlmICghcGF0aCkge1xuICAgICAgdGhyb3cgbmV3IE1vZGVsQ3JlZGVudGlhbEVycm9yKE1JU1NJTkdfUEFUSCk7XG4gICAgfVxuXG4gICAgY29uc3QgTW9kZWwgPSBhd2FpdCB0aGlzLmhhbmRNb2RlbChtb2RlbCwgcGF0aCk7XG5cbiAgICBjb25zdCBjYWxsYmFjayA9IGFzeW5jIChncmFwaE9wdGlvbnM6IEdyYXBoT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIC4uLmdyYXBoT3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGluaXRhbGl6ZWRNb2RlbCA9IGF3YWl0IG5ldyBNb2RlbCgpLmNvbmZpZ3VyZShwYXJhbXMpO1xuXG4gICAgICByZXR1cm4gaW5pdGFsaXplZE1vZGVsO1xuICAgIH07XG5cbiAgICB0aGlzLmluaXRhbGl6ZWRNb2RlbHMgPSB7XG4gICAgICAuLi50aGlzLmluaXRhbGl6ZWRNb2RlbHMsXG4gICAgICBbbmFtZV06IGNhbGxiYWNrLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pbml0YWxpemVkTW9kZWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZXhpc3RpbmcgbW9kZWwgYnkgYG5hbWVgLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEluaXRpYWxpemVkTW9kZWwobW9kZWxOYW1lOiBzdHJpbmcsIGNvbmZpZzogYW55KSB7XG4gICAgaWYgKHRoaXMuaW5pdGFsaXplZE1vZGVsc1ttb2RlbE5hbWVdKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0YWxpemVkTW9kZWxzW21vZGVsTmFtZV0oY29uZmlnKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE5PVF9JTklUSUFMSVpFRF9NT0RFTChtb2RlbE5hbWUpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { 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: any);
12
+ /**
13
+ * Does investigations by given `output` information
14
+ */
15
+ doInvestigationsWith(modelInstance: ModelPluginInterface): 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL29ic2VydmF0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBSXRCOztPQUVHO0lBQ0gsWUFBWSxNQUFXO1FBTGYsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQU0xQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsYUFBbUM7UUFDbkUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUUxRSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTdELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUE1QkQsa0NBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb2RlbFBsdWdpbkludGVyZmFjZX0gZnJvbSAnLi4vdHlwZXMvbW9kZWwtaW50ZXJmYWNlJztcblxuLyoqXG4gKiBPYnNlcnZhdG9yeSBpcyByZXNwb25zaWJsZSBmb3Igb3V0cHV0IGNhbGN1bGF0aW9ucyBiYXNlZCBvbiB0aGUgYGlucHV0c2AgYW5kIHRoZSBgbW9kZWxgLlxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2YXRvcnkge1xuICBwcml2YXRlIGlucHV0czogYW55W107XG4gIHByaXZhdGUgb3V0cHV0czogYW55W10gPSBbXTtcblxuICAvKipcbiAgICogSW5pdCBpbnB1dHMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5wdXRzOiBhbnkpIHtcbiAgICB0aGlzLmlucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBEb2VzIGludmVzdGlnYXRpb25zIGJ5IGdpdmVuIGBvdXRwdXRgIGluZm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZG9JbnZlc3RpZ2F0aW9uc1dpdGgobW9kZWxJbnN0YW5jZTogTW9kZWxQbHVnaW5JbnRlcmZhY2UpIHtcbiAgICBjb25zdCByZXVzZUNhbGN1bGF0aW9uID0gdGhpcy5vdXRwdXRzLmxlbmd0aCA/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;