@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.
- package/CONTRIBUTING.md +13 -17
- package/README.md +36 -18
- package/build/config/config.d.ts +12 -0
- package/build/config/config.js +54 -0
- package/build/config/strings.d.ts +8 -3
- package/build/config/strings.js +10 -6
- package/build/index.js +15 -8
- package/build/lib/models-universe.d.ts +10 -2
- package/build/lib/models-universe.js +52 -34
- package/build/lib/observatory.d.ts +20 -0
- package/build/lib/observatory.js +31 -0
- package/build/lib/planet-aggregator.d.ts +6 -0
- package/build/lib/planet-aggregator.js +35 -0
- package/build/lib/supercomputer.d.ts +7 -0
- package/build/lib/supercomputer.js +45 -6
- package/build/models/index.d.ts +1 -0
- package/build/models/index.js +6 -0
- package/build/models/time-sync.d.ts +55 -0
- package/build/models/time-sync.js +235 -0
- package/build/types/helpers.d.ts +1 -0
- package/build/types/helpers.js +3 -0
- package/build/types/impl.d.ts +14 -9
- package/build/types/impl.js +3 -1
- package/build/types/model-interface.d.ts +14 -0
- package/build/types/model-interface.js +3 -0
- package/build/types/models-universe.d.ts +5 -6
- package/build/types/models-universe.js +1 -1
- package/build/types/planet-aggregator.d.ts +6 -0
- package/build/types/planet-aggregator.js +3 -0
- package/build/types/process-args.d.ts +7 -0
- package/build/types/process-args.js +3 -0
- package/build/types/supercomputer.d.ts +4 -0
- package/build/types/supercomputer.js +3 -0
- package/build/types/time-sync.d.ts +9 -0
- package/build/types/time-sync.js +3 -0
- package/build/types/units-dealer.d.ts +3 -0
- package/build/types/units-dealer.js +3 -0
- package/build/types/units.d.ts +11 -0
- package/build/types/units.js +37 -0
- package/build/util/args.js +58 -0
- package/build/util/errors.d.ts +6 -0
- package/build/util/errors.js +25 -0
- package/build/util/helpers.js +18 -0
- package/build/util/units-dealer.d.ts +10 -0
- package/build/util/units-dealer.js +32 -0
- package/build/util/validations.d.ts +4 -0
- package/build/util/validations.js +29 -1
- package/build/util/yaml.d.ts +1 -2
- package/build/util/yaml.js +1 -1
- package/coverage/clover.xml +111 -65
- package/coverage/coverage-final.json +7 -6
- package/coverage/lcov-report/config/config.ts.html +12 -3
- package/coverage/lcov-report/config/index.html +1 -1
- package/coverage/lcov-report/config/index.ts.html +3 -3
- package/coverage/lcov-report/config/strings.ts.html +2 -2
- package/coverage/lcov-report/index.html +9 -9
- package/coverage/lcov-report/lib/index.html +24 -9
- package/coverage/lcov-report/lib/models-universe.ts.html +1 -1
- package/coverage/lcov-report/lib/observatory.ts.html +7 -7
- package/coverage/lcov-report/lib/planet-aggregator.ts.html +253 -0
- package/coverage/lcov-report/lib/supercomputer.ts.html +211 -52
- package/coverage/lcov-report/util/args.ts.html +1 -1
- package/coverage/lcov-report/util/errors.ts.html +10 -7
- package/coverage/lcov-report/util/index.html +1 -1
- package/coverage/lcov-report/util/yaml.ts.html +1 -1
- package/coverage/lcov.info +184 -105
- package/examples/impls/case-studies/aggregation.yml +97 -0
- package/examples/impls/case-studies/ntt-data-on-premise.yaml +0 -42
- package/examples/impls/test/aggregation-test.yml +109 -0
- package/examples/impls/test/large-impl.yml +257303 -0
- package/examples/impls/test/time-sync.yml +75 -0
- package/examples/ompls/aggregation-test.yml +340 -0
- package/examples/ompls/test/time-sync.yml +255 -0
- package/examples/ompls/time-sync.yml +212 -0
- package/hack-banner.png +0 -0
- package/package.json +3 -1
- package/src/config/units.yaml +11 -24
- package/src/models/README.md +266 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/build/types/azure-importer.d.ts +0 -29
- package/build/types/azure-importer.js +0 -3
- package/build/types/boavizta.d.ts +0 -7
- package/build/types/boavizta.js +0 -3
- package/build/types/common.d.ts +0 -7
- package/build/types/common.js +0 -9
package/CONTRIBUTING.md
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
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:
|
|
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:
|
|
28
|
+
#### Step 1: Fork
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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
|
|
70
|
+
Use git pull/merge to synchronize your work with the IF repository.
|
|
75
71
|
|
|
76
72
|
```bash
|
|
77
|
-
$ git pull
|
|
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://
|
|
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
|
-
[](https://youtu.be/
|
|
87
|
-
|
|
88
|
-
## Run tests
|
|
89
|
-
|
|
90
|
-
To run the complete set of tests simply run
|
|
91
|
-
|
|
92
|
-
```sh
|
|
93
|
-
yarn test
|
|
94
|
-
```
|
|
117
|
+
[](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
|
-
|
|
99
|
-
./scripts/impact-test.sh
|
|
100
|
-
```
|
|
120
|
+
## Contributing
|
|
101
121
|
|
|
102
|
-
|
|
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
|
-
|
|
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
|
-
|
|
7
|
-
NOT_OUTPUT_MODEL_EXTENSION: string;
|
|
7
|
+
NOT_MODEL_PLUGIN_EXTENSION: string;
|
|
8
8
|
STRUCTURE_MALFORMED: (childName: string) => string;
|
|
9
|
-
NOT_INITIALIZED_MODEL: (
|
|
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
|
};
|
package/build/config/strings.js
CHANGED
|
@@ -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:
|
|
8
|
-
MISSING_PATH:
|
|
9
|
-
|
|
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: (
|
|
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,
|
|
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.
|
|
18
|
-
* 4. Initializes
|
|
19
|
-
* 5.
|
|
20
|
-
*
|
|
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
|
|
33
|
+
for (const model of impl.initialize.models) {
|
|
34
|
+
await modelsHandbook.writeDown(model);
|
|
35
|
+
}
|
|
33
36
|
// Lifecycle Computing
|
|
34
|
-
const
|
|
35
|
-
const ompl = await
|
|
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,
|
|
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
|
|
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,
|
|
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(
|
|
30
|
+
throw new ModelInitializationError(NOT_CONSTRUCTABLE_MODEL(params));
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
|
-
*
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
async importModuleFrom(path) {
|
|
37
|
+
try {
|
|
38
|
+
const module = await Promise.resolve(`${path}`).then(s => require(s));
|
|
39
|
+
return module;
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.log(error);
|
|
43
|
+
throw new ModelInitializationError(INVALID_MODULE_PATH(path));
|
|
43
44
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
74
|
+
return this.importAndVerifyModule(model, path);
|
|
56
75
|
}
|
|
57
76
|
/**
|
|
58
77
|
* Initializes and registers model.
|
|
59
78
|
*/
|
|
60
|
-
writeDown(modelToInitalize) {
|
|
61
|
-
const {
|
|
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
|
-
|
|
82
|
-
|
|
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,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2RlbHMtdW5pdmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0NBQWlDO0FBRWpDLDJDQUFzQztBQUV0QyxzQ0FBMEM7QUFTMUMsTUFBTSxFQUFDLHdCQUF3QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRWhFLE1BQU0sRUFBQyxXQUFXLEVBQUUsWUFBWSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNDLE1BQU0sRUFDSixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsR0FBRyxnQkFBTyxDQUFDO0FBRVo7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFBM0I7UUFDRTs7V0FFRztRQUNJLHFCQUFnQixHQUFxQixFQUFFLENBQUM7SUE4R2pELENBQUM7SUE1R0M7O09BRUc7SUFDSyxlQUFlLENBQUMsY0FBbUIsRUFBRSxNQUE0QjtRQUN2RSxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLFdBQVcsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQztZQUVwRSxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUN6QyxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyx5QkFBYSxJQUFJLHlCQUFDLENBQUM7WUFFbEMsT0FBTyxNQUFNLENBQUM7UUFD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QyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxNQUFNLElBQUksd0JBQXdCLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0Y7QUFsSEQsd0NBa0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGhMaWIgPSByZXF1aXJlKCdwYXRoJyk7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi91dGlsL2Vycm9ycyc7XG5cbmltcG9ydCB7Q09ORklHLCBTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbXBvcnQge1xuICBDbGFzc0NvbnRhaW5lclBhcmFtcyxcbiAgR3JhcGhPcHRpb25zLFxuICBJbXBsSW5pdGlhbGl6ZU1vZGVsLFxuICBJbml0YWxpemVkTW9kZWxzLFxufSBmcm9tICcuLi90eXBlcy9tb2RlbHMtdW5pdmVyc2UnO1xuXG5jb25zdCB7TW9kZWxJbml0aWFsaXphdGlvbkVycm9yLCBNb2RlbENyZWRlbnRpYWxFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtHSVRIVUJfUEFUSCwgTkFUSVZFX01PREVMfSA9IENPTkZJRztcbmNvbnN0IHtcbiAgTUlTU0lOR19DTEFTU05BTUUsXG4gIE5PVF9NT0RFTF9QTFVHSU5fRVhURU5TSU9OLFxuICBNSVNTSU5HX1BBVEgsXG4gIE5PVF9OQVRJVkVfTU9ERUwsXG4gIE5PVF9DT05TVFJVQ1RBQkxFX01PREVMLFxuICBOT1RfSU5JVElBTElaRURfTU9ERUwsXG4gIElOVkFMSURfTU9EVUxFX1BBVEgsXG59ID0gU1RSSU5HUztcblxuLyoqXG4gKiBNb2RlbHMgSW5pdGlhbGl6YXRpb24gTGlmZWN5Y2xlLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWxzVW5pdmVyc2Uge1xuICAvKipcbiAgICogTW9kZWxzIGxpc3QuXG4gICAqL1xuICBwdWJsaWMgaW5pdGFsaXplZE1vZGVsczogSW5pdGFsaXplZE1vZGVscyA9IHt9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbW9kZWwgaXMgaW5zdGFuY2Ugb2YgYElPdXRwdXRNb2RlbEludGVyZmFjZWAuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbmNlT2ZNb2RlbChDbGFzc0NvbnRhaW5lcjogYW55LCBwYXJhbXM6IENsYXNzQ29udGFpbmVyUGFyYW1zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlc3RNb2RlbCA9IG5ldyBDbGFzc0NvbnRhaW5lcigpO1xuICAgICAgY29uc3QgYm9vbGFibGUgPSAnY29uZmlndXJlJyBpbiB0ZXN0TW9kZWwgJiYgJ2V4ZWN1dGUnIGluIHRlc3RNb2RlbDtcblxuICAgICAgcmV0dXJuIGJvb2xhYmxlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE5PVF9DT05TVFJVQ1RBQkxFX01PREVMKHBhcmFtcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIG1vZHVsZSBieSBnaXZlbiBgcGF0aGAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGltcG9ydE1vZHVsZUZyb20ocGF0aDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKTtcblxuICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IE1vZGVsSW5pdGlhbGl6YXRpb25FcnJvcihJTlZBTElEX01PRFVMRV9QQVRIKHBhdGgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBgbW9kdWxlYCBmcm9tIGdpdmVuIGBwYXRoYCwgdGhlbiBjaGVja3MgaWYgaXQncyBgTW9kZWxQbHVnaW5JbnRlcmZhY2VgIGV4dGVuc2lvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0QW5kVmVyaWZ5TW9kdWxlKG1vZGVsOiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdWdpbk1vZHVsZSA9IGF3YWl0IHRoaXMuaW1wb3J0TW9kdWxlRnJvbShwYXRoKTtcblxuICAgIGlmICghdGhpcy5pbnN0YW5jZU9mTW9kZWwocGx1Z2luTW9kdWxlW21vZGVsXSwge21vZGVsLCBwYXRofSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2RlbEluaXRpYWxpemF0aW9uRXJyb3IoTk9UX01PREVMX1BMVUdJTl9FWFRFTlNJT04pO1xuICAgIH1cblxuICAgIHJldHVybiBwbHVnaW5Nb2R1bGVbbW9kZWxdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGx1Z2luIG1vZGVsLiBDaGVja3MgaWYgbW9kZWwgaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAgICogVGhlbiBjaGVja3MgaWYgYHBhdGhgIGlzIHN0YXJ0aW5nIHdpdGggZ2l0aHViLCB0aGVuIGdyYWJzIHRoZSByZXBvc2l0b3J5IG5hbWUuXG4gICAqIEltcG9ydHMgbW9kdWxlLCB0aGVuIGNoZWNrcyBpZiBpdCdzIGEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBpbnB1dCBtb2RlbCBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRNb2RlbChtb2RlbDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAocGF0aCA9PT0gJ2J1aWx0aW4nKSB7XG4gICAgICBwYXRoID0gcGF0aExpYi5ub3JtYWxpemUoYCR7X19kaXJuYW1lfS8uLi9tb2RlbHMvaW5kZXgudHNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhdGg/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;
|