@grnsft/if 0.7.2 → 1.0.0-beta.0
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 +19 -6
- package/ENABLEMENT.md +115 -0
- package/README.md +0 -6
- package/SECURITY.md +100 -0
- package/adopters.md +9 -0
- package/build/common/util/logger.js +3 -3
- package/build/common/util/yaml.js +19 -7
- package/build/if-check/util/npm.js +55 -9
- package/build/if-run/builtins/divide/index.js +2 -4
- package/build/if-run/builtins/exponent/index.js +3 -5
- package/build/if-run/builtins/shell/index.js +2 -2
- package/manifests/outputs/bugs/package.json +24 -0
- package/manifests/outputs/builtins/coefficient/package.json +24 -0
- package/manifests/outputs/builtins/csv-lookup/cloud-metadata/package.json +24 -0
- package/manifests/outputs/builtins/csv-lookup/region-metadata/package.json +24 -0
- package/manifests/outputs/builtins/csv-lookup/tdp-finder/package.json +24 -0
- package/manifests/outputs/builtins/divide/package.json +24 -0
- package/manifests/outputs/builtins/exponent/package.json +24 -0
- package/manifests/outputs/builtins/interpolation/package.json +24 -0
- package/manifests/outputs/builtins/mock-observations/package.json +24 -0
- package/manifests/outputs/builtins/multiply/package.json +24 -0
- package/manifests/outputs/builtins/regex/package.json +24 -0
- package/manifests/outputs/builtins/sci/package.json +24 -0
- package/manifests/outputs/builtins/sci-embodied/package.json +24 -0
- package/manifests/outputs/builtins/shell/package.json +24 -0
- package/manifests/outputs/builtins/subtract/package.json +24 -0
- package/manifests/outputs/builtins/sum/package.json +24 -0
- package/manifests/outputs/builtins/time-converter/package.json +24 -0
- package/manifests/outputs/builtins/time-sync/package.json +24 -0
- package/manifests/outputs/features/package.json +24 -0
- package/manifests/outputs/features/regroup/package.json +24 -0
- package/manifests/outputs/pipelines/package.json +24 -0
- package/okrs.md +14 -0
- package/package.json +1 -1
package/CONTRIBUTING.md
CHANGED
|
@@ -8,6 +8,7 @@ The following document is a rule set of guidelines for contributing.
|
|
|
8
8
|
|
|
9
9
|
- [What and when to contribute](#what-and-when-to-contribute)
|
|
10
10
|
- [Reporting bugs](#reporting-bugs)
|
|
11
|
+
- [Disclosing vulnerabilities](#disclosing-vulnerabilities)
|
|
11
12
|
- [Code Contributions](#code-contributions)
|
|
12
13
|
- [Step 1: Fork](#step-1-fork)
|
|
13
14
|
- [Step 2: Branch](#step-2-branch)
|
|
@@ -37,16 +38,16 @@ We appreciate bug reports! If you experience an issue with IF, you can report it
|
|
|
37
38
|
3. Click on `Create New Issue` and select the `Bug Report` template.
|
|
38
39
|
4. Fill out the requested information.
|
|
39
40
|
|
|
40
|
-
The more detailed information you provide in the bug report, the easier it will be for us to diagnose, triage and resolve your issue. We ask for some simple information about your issue, including a description of the error, the expected behaviour, the actual behaviour and the
|
|
41
|
+
The more detailed information you provide in the bug report, the easier it will be for us to diagnose, triage, and resolve your issue. We ask for some simple information about your issue, including a description of the error, the expected behaviour, the actual behaviour and the steps we can take to reproduce the error in our local environments. We also then prompt you to provide a link to [Stackblitz](https://stackblitz.com/) or a similar online environment where we can run your manifest and observe the error. If you prefer *not* to send a link, we would appreciate a copy of the manifest file that you ran to produce the error, information about your runtime environment, and any additional code that's required to reproduce the error. This is all designed to enable us to reproduce the same error and debug it for you as quickly as possible.
|
|
41
42
|
|
|
42
|
-
Once a suitably detailed bug report exists, we will triage it.
|
|
43
|
+
Once a suitably detailed bug report exists, we will triage it. Triage means that the core team will examine the issue and assign an urgency label - either Low, Medium or High.
|
|
43
44
|
|
|
44
45
|
The assessment rubric is as follows:
|
|
45
46
|
|
|
46
47
|
| | Consequence | Severity |
|
|
47
48
|
| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -------- |
|
|
48
49
|
| Bugs in IF core leading to incorrect calculations | unusable framework | 5 |
|
|
49
|
-
| Bugs in builtins leading to incorrect calculations
|
|
50
|
+
| Bugs in builtins leading to incorrect calculations | core pathways fail, IF very limited in functionality | 5 |
|
|
50
51
|
| Bugs in template | Harder to build plugins, ecosystem growth is impacted | 2 |
|
|
51
52
|
| Bugs in docs | product does not match expectation, hard to debug, frustration, loss of adoption | 2 |
|
|
52
53
|
| Security flaw: privacy related | leak user data, unlikely to achieve adoption in serious orgs | 5 |
|
|
@@ -69,7 +70,7 @@ The mapping of severity to label is as follows:
|
|
|
69
70
|
| 4 | H |
|
|
70
71
|
| 5 | H |
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
The fix will be implemented for high-urgency bugs as soon as possible. Low priority bugs will be backlogged and addressed when there is developer time available. Low priority bugs will also be tagged `help-wanted` so that they can be addressed by community members.
|
|
73
74
|
|
|
74
75
|
Not every bug will be fixed. We may decide *not* to fix a bug in cases such as:
|
|
75
76
|
|
|
@@ -80,6 +81,18 @@ Not every bug will be fixed. We may decide *not* to fix a bug in cases such as:
|
|
|
80
81
|
|
|
81
82
|
The bug will be labelled `fix-now`, `fix-later` or `wont-fix` to reflect our remediation plan and details will be provided in issue comments.
|
|
82
83
|
|
|
84
|
+
## Disclosing vulnerabilities
|
|
85
|
+
|
|
86
|
+
If you discover a security vulnerability in IF, please report it to if-disclosures@greensoftware.foundation.
|
|
87
|
+
|
|
88
|
+
Include the following information:
|
|
89
|
+
|
|
90
|
+
- description of the issue
|
|
91
|
+
- steps to reproduce
|
|
92
|
+
- steps to fix, if known
|
|
93
|
+
|
|
94
|
+
The IF team will respond as quickly as possible. Post-graduation there will be no full-time development team, but GSF staff will aim to get the vulnerability patched as quickly as possible, aiming for <=14 day response time.
|
|
95
|
+
|
|
83
96
|
|
|
84
97
|
## Code Contributions
|
|
85
98
|
|
|
@@ -155,7 +168,7 @@ $ git push origin <topic-branch-name>
|
|
|
155
168
|
|
|
156
169
|
### Step 6: Pull Request
|
|
157
170
|
|
|
158
|
-
Open a Pull Request from your fork of the repository to the `
|
|
171
|
+
Open a Pull Request from your fork of the repository to the `main` branch of the IF repository with a clear title and description according to [template](.github/PULL_REQUEST_TEMPLATE.md).
|
|
159
172
|
|
|
160
173
|
Pull requests will not be reviewed unless they pass all CI. This includes a lint check and running our unit tests.
|
|
161
174
|
|
|
@@ -178,7 +191,7 @@ We prefer not to use abbreviations of contractions in parameter names.
|
|
|
178
191
|
|
|
179
192
|
Using fully descriptive names makes the code more readable, which in turn helps reviewers and anyone else aiming to understand how the plugin works.
|
|
180
193
|
|
|
181
|
-
It also helps to avoid ambiguity and naming collisions within and across plugins.
|
|
194
|
+
It also helps to avoid ambiguity and naming collisions within and across plugins. Ensure that names clearly and precisely describe the purpose of an element to make its functionality immediately apparent.
|
|
182
195
|
|
|
183
196
|
For example, we prefer `functionalUnit` to `funcUnit`, `fUnit`, or any other abbreviation.
|
|
184
197
|
|
package/ENABLEMENT.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Enablement Guide for Impact Framework (IF)
|
|
2
|
+
|
|
3
|
+
## What is the Impact Framework?
|
|
4
|
+
|
|
5
|
+
The **Impact Framework (IF)** empowers you to calculate and understand the environmental impact of your software. It comes with a standard library of built-in plugins, referred to as builtins, and an Explorer for discovering and installing third-party plugins.
|
|
6
|
+
|
|
7
|
+
## How to Use the Impact Framework?
|
|
8
|
+
|
|
9
|
+
### Prerequisites
|
|
10
|
+
|
|
11
|
+
Before getting started, ensure you have the following:
|
|
12
|
+
|
|
13
|
+
1. **Node.js**: Installed and configured.
|
|
14
|
+
2. **NPM**: Comes with Node.js; ensure it’s updated.
|
|
15
|
+
3. **Access to Documentation**: Familiarize yourself with the [IF documentation](https://if.greensoftware.foundation/).
|
|
16
|
+
4. **Basic YAML Knowledge**: For creating and managing manifest files.
|
|
17
|
+
|
|
18
|
+
## Steps to Enable the Impact Framework
|
|
19
|
+
|
|
20
|
+
### Step 1: Installation
|
|
21
|
+
|
|
22
|
+
Install the latest version of IF globally using NPM:
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
npm install -g "@grnsft/if"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`IF` provides multiple command-line tools, with the primary tool being `if-run`.
|
|
29
|
+
|
|
30
|
+
### Step 2: Working with Command-Line Tools
|
|
31
|
+
|
|
32
|
+
1. `if-run`: Execute Manifest Files
|
|
33
|
+
|
|
34
|
+
- Description: Executes manifest files to calculate impact.
|
|
35
|
+
- Manifest File: A YAML file central to IF functionality. It contains configurations, application architecture, input data, and serves as a portable, shareable, human-readable document for audits.
|
|
36
|
+
- Usage:
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
if-run --manifest <path-to-your-manifest-file>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
More about if-run [here](https://if.greensoftware.foundation/reference/cli#if-run).
|
|
43
|
+
|
|
44
|
+
2. `if-env`: Create Local Development Environments
|
|
45
|
+
|
|
46
|
+
- Description: Sets up a local environment for running manifests.
|
|
47
|
+
- Usage:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
mkdir my-manifest && cd my-manifest
|
|
51
|
+
if-env
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Find details in the [documentation](https://if.greensoftware.foundation/reference/cli#if-env).
|
|
55
|
+
|
|
56
|
+
3. `if-check`: Verify Manifests
|
|
57
|
+
|
|
58
|
+
- Description: Combines the functionalities of if-env and if-diff to verify manifest files with outputs and execution sections.
|
|
59
|
+
- Usage:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
# Check a specific manifest file
|
|
63
|
+
if-check -m <path-to-your-manifest-file>
|
|
64
|
+
|
|
65
|
+
# Check all manifests in a directory
|
|
66
|
+
if-check -d /path-to-your-manifests
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Explore more in the [documentation](https://if.greensoftware.foundation/reference/cli#if-check).
|
|
70
|
+
|
|
71
|
+
4. `if-csv`: Save Data to CSV
|
|
72
|
+
|
|
73
|
+
- Description: Saves calculated impact data to a CSV file.
|
|
74
|
+
- Usage:
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
if-csv -m ./my-manifest.yml -p carbon
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Read more in the [documentation](https://if.greensoftware.foundation/reference/cli#if-csv).
|
|
81
|
+
|
|
82
|
+
5. `if-diff`: Compare Manifests or Outputs
|
|
83
|
+
|
|
84
|
+
- Description: Compares two manifest or output files to identify differences.
|
|
85
|
+
- Usage:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
if-diff <file1> <file2>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Details are available in the [documentation](https://if.greensoftware.foundation/reference/cli#if-diff).
|
|
92
|
+
|
|
93
|
+
### Step 3: Explore Plugins
|
|
94
|
+
|
|
95
|
+
- Built-In Plugins: Utilize IF’s built-ins for common environmental impact assessments.
|
|
96
|
+
- Third-Party Plugins: Visit the Explorer to discover and install third-party plugins tailored to your needs.
|
|
97
|
+
|
|
98
|
+
### Step 4: Help and Guidance
|
|
99
|
+
|
|
100
|
+
For assistance with any command, use the --help flag:
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
if-run --help
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Additional Resources
|
|
107
|
+
|
|
108
|
+
- Documentation: [IF Documentation](https://if.greensoftware.foundation)
|
|
109
|
+
- Third-Party Plugins: [Plugin Explorer](https://explorer.if.greensoftware.foundation)
|
|
110
|
+
|
|
111
|
+
## Support
|
|
112
|
+
|
|
113
|
+
Join the IF Community for updates and discussions:
|
|
114
|
+
|
|
115
|
+
- Mailing List: [if-community@greensoftware.foundation](https://groups.google.com/u/1/a/greensoftware.foundation/g/if-community)
|
package/README.md
CHANGED
|
@@ -64,12 +64,6 @@ if-run -h
|
|
|
64
64
|
|
|
65
65
|
Please read our documentation at [if.greensoftware.foundation](https://if.greensoftware.foundation/)
|
|
66
66
|
|
|
67
|
-
## Video walk-through
|
|
68
|
-
|
|
69
|
-
Watch this video to learn how to create and run a `manifest`.
|
|
70
|
-
|
|
71
|
-
[](https://youtu.be/GW37Qd4AQbU)
|
|
72
|
-
|
|
73
67
|
## Join our mailing list
|
|
74
68
|
|
|
75
69
|
We have a public mailing list at [if-community@greensoftware.foundation](https://groups.google.com/u/1/a/greensoftware.foundation/g/if-community). We send out weekly updates that explain what we've shipped, what we're working on and how you can get involved each week!
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Reporting a Vulnerability
|
|
4
|
+
|
|
5
|
+
To report a security issue, please email if-disclosures@greensoftware.foundation with a description of the issue, steps required to reproduce the issue, affected versions and, if known, mitigations for the issue.
|
|
6
|
+
|
|
7
|
+
Our contributors are comprised of volunteers so we cannot guarantee a specific response time, but someone from our team will reply and address the issue as soon as possible.
|
|
8
|
+
|
|
9
|
+
# Security Review
|
|
10
|
+
|
|
11
|
+
We perform regular reviews inline with the information provided below. All releases go through these reviews but multiple people in the project team prior to release as part of our quality and security review.
|
|
12
|
+
|
|
13
|
+
## Basics
|
|
14
|
+
### Basic Project Website Content
|
|
15
|
+
- Describe what the project does - ✅ in README and homepage at https://if.greensoftware.foundation
|
|
16
|
+
- Provide info how to obtain/provide feedback and contribute - ✅ https://if.greensoftware.foundation/community
|
|
17
|
+
- Explain contribution process - ✅ https://github.com/Green-Software-Foundation/if/blob/main/CONTRIBUTING.md
|
|
18
|
+
|
|
19
|
+
### FLOSS license
|
|
20
|
+
- Must be released as FLOSS - ✅ MIT License https://github.com/Green-Software-Foundation/if/blob/main/LICENSE
|
|
21
|
+
- Must post the license - ✅ https://github.com/Green-Software-Foundation/if/blob/main/LICENSE
|
|
22
|
+
- Also approved by OSI - ✅ https://opensource.org/license/MIT/
|
|
23
|
+
|
|
24
|
+
### Documentation
|
|
25
|
+
- Provides basic documentation - ✅ https://if.greensoftware.foundation
|
|
26
|
+
|
|
27
|
+
### Other
|
|
28
|
+
- Project site, downloads etc must support HTTPS with TLS - ✅ using GitHub to host which supports this https://github.com/Green-Software-Foundation/if
|
|
29
|
+
- Have mechanism for discussion - ✅ github issues https://github.com/Green-Software-Foundation/if/issues, discussion board https://github.com/Green-Software-Foundation/if/discussions and mailing list at if-community@greensoftware.foundaton
|
|
30
|
+
- Project must be maintained - ✅ actively maintaned by GSF and its members
|
|
31
|
+
|
|
32
|
+
## Change control
|
|
33
|
+
### Public VCS repo
|
|
34
|
+
- Readable public VCS repo - ✅ yes, Github https://github.com/Green-Software-Foundation/if
|
|
35
|
+
- Track changes - ✅ yes, Git https://github.com/Green-Software-Foundation/if/commits/main
|
|
36
|
+
- Interim versions between releases available for review - ✅ yes, interim versions actively developed and availble on the `main` branch https://github.com/Green-Software-Foundation/if
|
|
37
|
+
|
|
38
|
+
### Unique versioning numbering
|
|
39
|
+
- Unique indentifier for each release - ✅ https://github.com/Green-Software-Foundation/if/releases
|
|
40
|
+
|
|
41
|
+
### Release notes
|
|
42
|
+
- Human readable release notes for each release (not git log) - ✅ https://github.com/Green-Software-Foundation/if/releases
|
|
43
|
+
- Address each publicly known vulnerability - ✅ N/A, no vulnerability reported yet
|
|
44
|
+
|
|
45
|
+
## Reporting
|
|
46
|
+
### Bug reporting process
|
|
47
|
+
- Process to submit bugs - ✅ https://github.com/Green-Software-Foundation/if/blob/main/CONTRIBUTING.md#reporting-bugs
|
|
48
|
+
- Must acknowledge bugs (reply) submitted between 2-12 months - ✅ each bug has at least an acknowledgement or was opened by a maintainer (so acknowledged by a maintainer): https://github.com/Green-Software-Foundation/if/issues?q=is%3Aopen+is%3Aissue+label%3Abug
|
|
49
|
+
- Publicly available archive for reports and responses - ✅ github issues: https://github.com/Green-Software-Foundation/if/issues?q=is%3Aopen+is%3Aissue+label%3Abug
|
|
50
|
+
|
|
51
|
+
## Vulnerability report process
|
|
52
|
+
- Have a vulnerability report process - ✅ Included in CONTRIBUTING.md
|
|
53
|
+
- Private vulnerability if supported must include info how to send - ✅ N/A (allowed) - no private vulnerability reporting set up but proposed
|
|
54
|
+
- Initial response time for vulnerability submitted in last 6 months must be <= 14 days - ✅ N/A (allowed) - no vulnerabilities have yet been reported. Response times for bugs and other issues have been <14 days, post-graduation development will be by volunteers and open source developer community, so we can't guarantee a time to resolution.
|
|
55
|
+
|
|
56
|
+
## Quality
|
|
57
|
+
### Working build system
|
|
58
|
+
- Must provide a working build system - ✅ IF is a locally running NodeJS app. We do provide a devcontainer for eays environment setup. Installation is simply achieved using `npm i @grnsft/if`.
|
|
59
|
+
|
|
60
|
+
### Automated test suite
|
|
61
|
+
- Have at least one automated test suite and documentation how to run it - ✅ We have a comprehensive set of unit tests and a library of becnhmark manifest files that act as integration tests. These can be run locally, and they are executed as part of our CI/CD on any PRs into `main`.
|
|
62
|
+
|
|
63
|
+
## New functionaility testing
|
|
64
|
+
- Formal/informal policy for adding tests for new features - ✅ Test suite in CI/CD checks for breaking changes in PRs. Any new feature must include unit tests and an example manifest that demonstrates usage.
|
|
65
|
+
- Evidence of policy being adhered to - ✅
|
|
66
|
+
|
|
67
|
+
### Warning flags
|
|
68
|
+
- Compiler warning flags or linter tools for code quality/errors - ✅ CodeQL analysis in automated CI : https://github.com/Green-Software-Foundation/carbon-aware-sdk/blob/dev/.github/workflows/1-pr.yaml#L82
|
|
69
|
+
- Address warnings from these tools - ✅ blocking PRs on fail
|
|
70
|
+
|
|
71
|
+
## Security
|
|
72
|
+
### Secure development knowledge
|
|
73
|
+
- At least one primary developer who knows how to design secure software - ✅ Manushak and Narek are both primary developers and have broad experience.
|
|
74
|
+
- At least one of the project's primary developers MUST know of common kinds of errors that lead to vulnerabilities in this kind of software, as well as at least one method to counter or mitigate each of them - ✅
|
|
75
|
+
|
|
76
|
+
### Use basic good cryptographic practices
|
|
77
|
+
- https://www.bestpractices.dev/en/criteria/0#0.crypto_published - ✅ n/a
|
|
78
|
+
- https://www.bestpractices.dev/en/criteria/0#0.crypto_floss - ✅ n/a
|
|
79
|
+
- https://www.bestpractices.dev/en/criteria/0#0.crypto_keylength - ✅ n/a
|
|
80
|
+
- https://www.bestpractices.dev/en/criteria/0#0.crypto_working - ✅ n/a
|
|
81
|
+
- https://www.bestpractices.dev/en/criteria/0#0.crypto_password_storage - ✅ n/a
|
|
82
|
+
- https://www.bestpractices.dev/en/criteria/0#0.crypto_random - ✅ n/a
|
|
83
|
+
|
|
84
|
+
### Secured delivery against man-in-the-middle (MITM) attacks
|
|
85
|
+
- Delivery mechanisms that counters MITM - ✅ n/a
|
|
86
|
+
- Cyrptographic hash NOT retrived over HTTP - ✅ n/a
|
|
87
|
+
|
|
88
|
+
### Publicly known vulnerabilities fixed
|
|
89
|
+
- No unpatched vulnerabilities of medium or higher severity that have been publicly known for more than 60 day - ✅ no such vulnerabilities
|
|
90
|
+
|
|
91
|
+
### Other security issues
|
|
92
|
+
- Public repo doesnt leak private credential - ✅ does not do that.
|
|
93
|
+
|
|
94
|
+
## Analysis
|
|
95
|
+
### Static code analysis
|
|
96
|
+
- At least one FLOSS static code analysis tool - ✅ CodeQL is integrated into our CI/CD.
|
|
97
|
+
- All medium and higher severity exploitable vulnerabilities discovered with static code analysis MUST be fixed in a timely way after they are confirmed - ✅ We have not yet had any exploitable vulnerabilities reported, but the GSF team will respond promptly to any disclosed issues.
|
|
98
|
+
|
|
99
|
+
### Dynamic code analysis
|
|
100
|
+
- All medium and higher severity exploitable vulnerabilities discovered with dynamic code analysis MUST be fixed in a timely way after they are confirmed. - ✅ We have not yet had any exploitable vulnerabilities reported, but the GSF team will respond promptly to any disclosed issues.
|
package/adopters.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Adopters
|
|
2
|
+
|
|
3
|
+
Impact Framework is being used by several major organizations to introspect their software systems, as well as having a thriving open source community.
|
|
4
|
+
|
|
5
|
+
One adopter we will highlight in this file is Amadeus. They have used IF at a large scale, processing multi-million line manifests covering thousands of production servers. they have built their own tooling stack on top of IF. They kindly provided the following quote:
|
|
6
|
+
|
|
7
|
+
"At Amadeus, the Impact Framework (IF) has become an essential brick in our software carbon measurement engine. Its scalability provides us with a transparent and robust way to model the energy consumption and carbon emissions of our whole cloud infrastructure. Its open-source nature fosters collaboration and innovation, making it a critical part of our efforts to drive environmental responsibility."
|
|
8
|
+
|
|
9
|
+
*Robin Castellon, Amadeus*
|
|
@@ -32,8 +32,8 @@ const { combine, timestamp, printf, colorize, align } = winston.format;
|
|
|
32
32
|
exports.logger = winston.createLogger({
|
|
33
33
|
format: combine(colorize({ all: true }), timestamp({
|
|
34
34
|
format: 'YYYY-MM-DD hh:mm:ss.SSS A',
|
|
35
|
-
}), align(), printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}
|
|
36
|
-
|
|
35
|
+
}), align(), printf((info) => `[${info.timestamp}] ${info.stack || `${info.level}: ${info.message}`}
|
|
36
|
+
`)),
|
|
37
37
|
transports: [new winston.transports.Console()],
|
|
38
38
|
});
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi91dGlsL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtQztBQUVuQyxNQUFNLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFFckU7O0dBRUc7QUFDVSxRQUFBLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxPQUFPLENBQ2IsUUFBUSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLEVBQ3JCLFNBQVMsQ0FBQztRQUNSLE1BQU0sRUFBRSwyQkFBMkI7S0FDcEMsQ0FBQyxFQUNGLEtBQUssRUFBRSxFQUNQLE1BQU0sQ0FDSixDQUFDLElBQVMsRUFBRSxFQUFFLENBQ1osSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7Q0FDNUUsQ0FDSSxDQUNGO0lBQ0QsVUFBVSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQy9DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHdpbnN0b24gZnJvbSAnd2luc3Rvbic7XG5cbmNvbnN0IHtjb21iaW5lLCB0aW1lc3RhbXAsIHByaW50ZiwgY29sb3JpemUsIGFsaWdufSA9IHdpbnN0b24uZm9ybWF0O1xuXG4vKipcbiAqIFdpbnN0b24gbG9nZ2VyIGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIoe1xuICBmb3JtYXQ6IGNvbWJpbmUoXG4gICAgY29sb3JpemUoe2FsbDogdHJ1ZX0pLFxuICAgIHRpbWVzdGFtcCh7XG4gICAgICBmb3JtYXQ6ICdZWVlZLU1NLUREIGhoOm1tOnNzLlNTUyBBJyxcbiAgICB9KSxcbiAgICBhbGlnbigpLFxuICAgIHByaW50ZihcbiAgICAgIChpbmZvOiBhbnkpID0+XG4gICAgICAgIGBbJHtpbmZvLnRpbWVzdGFtcH1dICR7aW5mby5zdGFjayB8fCBgJHtpbmZvLmxldmVsfTogJHtpbmZvLm1lc3NhZ2V9YH1cbmBcbiAgICApXG4gICksXG4gIHRyYW5zcG9ydHM6IFtuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoKV0sXG59KTtcbiJdfQ==
|
|
@@ -27,22 +27,34 @@ exports.checkIfFileIsYaml = exports.saveYamlFileAs = exports.openYamlFileAsObjec
|
|
|
27
27
|
const fs = __importStar(require("fs/promises"));
|
|
28
28
|
const path = __importStar(require("path"));
|
|
29
29
|
const YAML = __importStar(require("js-yaml"));
|
|
30
|
+
const utils_1 = require("@grnsft/if-core/utils");
|
|
31
|
+
const { ReadFileError, WriteFileError } = utils_1.ERRORS;
|
|
30
32
|
/**
|
|
31
33
|
* Reads and parses `yaml` file to object.
|
|
32
34
|
*/
|
|
33
35
|
const openYamlFileAsObject = async (filePath) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
try {
|
|
37
|
+
const yamlFileBuffer = await fs.readFile(filePath, 'utf8');
|
|
38
|
+
return YAML.load(yamlFileBuffer);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw new ReadFileError(error.message);
|
|
42
|
+
}
|
|
36
43
|
};
|
|
37
44
|
exports.openYamlFileAsObject = openYamlFileAsObject;
|
|
38
45
|
/**
|
|
39
46
|
* Saves given `yaml` dump as a file.
|
|
40
47
|
*/
|
|
41
48
|
const saveYamlFileAs = async (object, pathToFile) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
49
|
+
try {
|
|
50
|
+
const dirPath = path.dirname(pathToFile);
|
|
51
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
52
|
+
const yamlString = YAML.dump(object, { noRefs: true });
|
|
53
|
+
return await fs.writeFile(pathToFile, yamlString);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new WriteFileError(error.message);
|
|
57
|
+
}
|
|
46
58
|
};
|
|
47
59
|
exports.saveYamlFileAs = saveYamlFileAs;
|
|
48
60
|
/**
|
|
@@ -56,4 +68,4 @@ const checkIfFileIsYaml = (fileName) => {
|
|
|
56
68
|
return yamlFileTypes.includes(extension);
|
|
57
69
|
};
|
|
58
70
|
exports.checkIfFileIsYaml = checkIfFileIsYaml;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vdXRpbC95YW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLDJDQUE2QjtBQUU3Qiw4Q0FBZ0M7QUFDaEMsaURBQTZDO0FBRTdDLE1BQU0sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFDLEdBQUcsY0FBTSxDQUFDO0FBRS9DOztHQUVHO0FBQ0ksTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQUssUUFBZ0IsRUFBYyxFQUFFO0lBQzVFLElBQUk7UUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQU0sQ0FBQztLQUN2QztJQUFDLE9BQU8sS0FBVSxFQUFFO1FBQ25CLE1BQU0sSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3hDO0FBQ0gsQ0FBQyxDQUFDO0FBUlcsUUFBQSxvQkFBb0Isd0JBUS9CO0FBRUY7O0dBRUc7QUFDSSxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsTUFBVyxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUN0RSxJQUFJO1FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUVyRCxPQUFPLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDbkQ7SUFBQyxPQUFPLEtBQVUsRUFBRTtRQUNuQixNQUFNLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN6QztBQUNILENBQUMsQ0FBQztBQVZXLFFBQUEsY0FBYyxrQkFVekI7QUFFRjs7R0FFRztBQUNJLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFM0MsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQVBXLFFBQUEsaUJBQWlCLHFCQU81QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCAqIGFzIFlBTUwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcblxuY29uc3Qge1JlYWRGaWxlRXJyb3IsIFdyaXRlRmlsZUVycm9yfSA9IEVSUk9SUztcblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGB5YW1sYCBmaWxlIHRvIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5ZYW1sRmlsZUFzT2JqZWN0ID0gYXN5bmMgPFQ+KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB5YW1sRmlsZUJ1ZmZlciA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmOCcpO1xuXG4gICAgcmV0dXJuIFlBTUwubG9hZCh5YW1sRmlsZUJ1ZmZlcikgYXMgVDtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHRocm93IG5ldyBSZWFkRmlsZUVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICB9XG59O1xuXG4vKipcbiAqIFNhdmVzIGdpdmVuIGB5YW1sYCBkdW1wIGFzIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNhdmVZYW1sRmlsZUFzID0gYXN5bmMgKG9iamVjdDogYW55LCBwYXRoVG9GaWxlOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJQYXRoID0gcGF0aC5kaXJuYW1lKHBhdGhUb0ZpbGUpO1xuICAgIGF3YWl0IGZzLm1rZGlyKGRpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICBjb25zdCB5YW1sU3RyaW5nID0gWUFNTC5kdW1wKG9iamVjdCwge25vUmVmczogdHJ1ZX0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoVG9GaWxlLCB5YW1sU3RyaW5nKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHRocm93IG5ldyBXcml0ZUZpbGVFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgZ2l2ZW4gYGZpbGVOYW1lYCBpcyB5YW1sLlxuICovXG5leHBvcnQgY29uc3QgY2hlY2tJZkZpbGVJc1lhbWwgPSAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCB5YW1sRmlsZVR5cGVzID0gWyd5YW1sJywgJ3ltbCddO1xuICBjb25zdCBzcGxpdHRlZFBhcnRzID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3BsaXR0ZWRQYXJ0cy5sZW5ndGggLSAxO1xuICBjb25zdCBleHRlbnNpb24gPSBzcGxpdHRlZFBhcnRzW2xhc3RJbmRleF07XG5cbiAgcmV0dXJuIHlhbWxGaWxlVHlwZXMuaW5jbHVkZXMoZXh0ZW5zaW9uKTtcbn07XG4iXX0=
|
|
@@ -25,15 +25,18 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.executeCommands = void 0;
|
|
27
27
|
const path = __importStar(require("node:path"));
|
|
28
|
-
const
|
|
28
|
+
const child_process_1 = require("child_process");
|
|
29
29
|
const fs_1 = require("../../common/util/fs");
|
|
30
30
|
const config_1 = require("../config");
|
|
31
31
|
const { IF_CHECK_VERIFIED } = config_1.STRINGS;
|
|
32
|
+
/**
|
|
33
|
+
* Escapes shell characters that could be dangerous in a command.
|
|
34
|
+
*/
|
|
35
|
+
const escapeShellArg = (str) => str.replace(/([`$\\&;|*?<>])/g, '\\$1');
|
|
32
36
|
/**
|
|
33
37
|
* Executes a series of npm commands based on the provided manifest file.
|
|
34
38
|
*/
|
|
35
39
|
const executeCommands = async (manifest, cwd) => {
|
|
36
|
-
// TODO: After release remove isGlobal and appropriate checks
|
|
37
40
|
const isGlobal = !!process.env.npm_config_global;
|
|
38
41
|
const manifestDirPath = path.dirname(manifest);
|
|
39
42
|
const manifestFileName = (0, fs_1.getFileName)(manifest);
|
|
@@ -41,13 +44,56 @@ const executeCommands = async (manifest, cwd) => {
|
|
|
41
44
|
const prefixFlag = process.env.CURRENT_DIR && process.env.CURRENT_DIR !== process.cwd()
|
|
42
45
|
? `--prefix=${path.relative(process.env.CURRENT_DIR, process.cwd())}`
|
|
43
46
|
: '';
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
const sanitizedManifest = escapeShellArg(manifest);
|
|
48
|
+
const sanitizedExecutedManifest = escapeShellArg(executedManifest);
|
|
49
|
+
const ifEnvCommand = [
|
|
50
|
+
isGlobal ? 'if-env' : 'npm',
|
|
51
|
+
...(isGlobal ? [] : ['run', 'if-env']),
|
|
52
|
+
'--',
|
|
53
|
+
...(prefixFlag === '' ? [] : [prefixFlag]),
|
|
54
|
+
'-m',
|
|
55
|
+
sanitizedManifest,
|
|
56
|
+
];
|
|
57
|
+
const ifRunCommand = [
|
|
58
|
+
isGlobal ? 'if-run' : 'npm',
|
|
59
|
+
...(isGlobal ? [] : ['run', 'if-run']),
|
|
60
|
+
'--',
|
|
61
|
+
...(prefixFlag === '' ? [] : [prefixFlag]),
|
|
62
|
+
'-m',
|
|
63
|
+
sanitizedManifest,
|
|
64
|
+
'-o',
|
|
65
|
+
sanitizedExecutedManifest,
|
|
66
|
+
];
|
|
67
|
+
const ttyCommand = ['node', '-p', 'Boolean(process.stdout.isTTY)'];
|
|
68
|
+
const ifDiffCommand = [
|
|
69
|
+
isGlobal ? 'if-diff' : 'npm',
|
|
70
|
+
...(isGlobal ? [] : ['run', 'if-diff']),
|
|
71
|
+
'--',
|
|
72
|
+
...(prefixFlag === '' ? [] : [prefixFlag]),
|
|
73
|
+
'-s',
|
|
74
|
+
`${sanitizedExecutedManifest}.yaml`,
|
|
75
|
+
'-t',
|
|
76
|
+
sanitizedManifest,
|
|
77
|
+
];
|
|
78
|
+
(0, child_process_1.execFileSync)(ifEnvCommand[0], ifEnvCommand.slice(1), {
|
|
79
|
+
cwd: process.env.CURRENT_DIR || process.cwd(),
|
|
80
|
+
shell: true,
|
|
81
|
+
});
|
|
82
|
+
(0, child_process_1.execFileSync)(ifRunCommand[0], ifRunCommand.slice(1), {
|
|
83
|
+
cwd: process.env.CURRENT_DIR || process.cwd(),
|
|
84
|
+
});
|
|
85
|
+
(0, child_process_1.execFileSync)(ttyCommand[0], ttyCommand.slice(1), {
|
|
86
|
+
cwd: process.env.CURRENT_DIR || process.cwd(),
|
|
87
|
+
});
|
|
88
|
+
const ttyResult = (0, child_process_1.execFileSync)(ttyCommand[0], ttyCommand.slice(1), {
|
|
89
|
+
cwd: process.env.CURRENT_DIR || process.cwd(),
|
|
90
|
+
});
|
|
91
|
+
const tty = ttyResult && ttyResult.toString().trim();
|
|
92
|
+
const fullCommand = `${tty === 'true' ? 'tty |' : ''} ${ifDiffCommand.join(' ')}`;
|
|
93
|
+
(0, child_process_1.execFileSync)(fullCommand, {
|
|
50
94
|
cwd: process.env.CURRENT_DIR || process.cwd(),
|
|
95
|
+
stdio: 'inherit',
|
|
96
|
+
shell: true,
|
|
51
97
|
});
|
|
52
98
|
if (!cwd) {
|
|
53
99
|
await (0, fs_1.removeFileIfExists)(`${manifestDirPath}/package.json`);
|
|
@@ -56,4 +102,4 @@ const executeCommands = async (manifest, cwd) => {
|
|
|
56
102
|
console.log(IF_CHECK_VERIFIED(path.basename(manifest)));
|
|
57
103
|
};
|
|
58
104
|
exports.executeCommands = executeCommands;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lmLWNoZWNrL3V0aWwvbnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLGlEQUEyQztBQUMzQyw2Q0FBcUU7QUFDckUsc0NBQWtDO0FBRWxDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFcEM7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVoRjs7R0FFRztBQUNJLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxRQUFnQixFQUFFLEdBQVksRUFBRSxFQUFFO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0lBQ2pELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLGdCQUFXLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUU5RSxNQUFNLFVBQVUsR0FDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ2xFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDdEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVULE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELE1BQU0seUJBQXlCLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFbkUsTUFBTSxZQUFZLEdBQUc7UUFDbkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDM0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJO1FBQ0osR0FBRyxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJO1FBQ0osaUJBQWlCO0tBQ2xCLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRztRQUNuQixRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSztRQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUk7UUFDSixHQUFHLENBQUMsVUFBVSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUk7UUFDSixpQkFBaUI7UUFDakIsSUFBSTtRQUNKLHlCQUF5QjtLQUMxQixDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLCtCQUErQixDQUFDLENBQUM7SUFDbkUsTUFBTSxhQUFhLEdBQUc7UUFDcEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDNUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJO1FBQ0osR0FBRyxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJO1FBQ0osR0FBRyx5QkFBeUIsT0FBTztRQUNuQyxJQUFJO1FBQ0osaUJBQWlCO0tBQ2xCLENBQUM7SUFFRixJQUFBLDRCQUFZLEVBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbkQsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDN0MsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQUM7SUFFSCxJQUFBLDRCQUFZLEVBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbkQsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7S0FDOUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSw0QkFBWSxFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQy9DLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0tBQzlDLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFHLElBQUEsNEJBQVksRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNqRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtLQUM5QyxDQUFDLENBQUM7SUFFSCxNQUFNLEdBQUcsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JELE1BQU0sV0FBVyxHQUFHLEdBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksYUFBYSxDQUFDLElBQUksQ0FDeEUsR0FBRyxDQUNKLEVBQUUsQ0FBQztJQUVKLElBQUEsNEJBQVksRUFBQyxXQUFXLEVBQUU7UUFDeEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDN0MsS0FBSyxFQUFFLFNBQVM7UUFDaEIsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsTUFBTSxJQUFBLHVCQUFrQixFQUFDLEdBQUcsZUFBZSxlQUFlLENBQUMsQ0FBQztLQUM3RDtJQUVELE1BQU0sSUFBQSx1QkFBa0IsRUFBQyxHQUFHLGdCQUFnQixPQUFPLENBQUMsQ0FBQztJQUVyRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQztBQWpGVyxRQUFBLGVBQWUsbUJBaUYxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7ZXhlY0ZpbGVTeW5jfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7Z2V0RmlsZU5hbWUsIHJlbW92ZUZpbGVJZkV4aXN0c30gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvZnMnO1xuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5jb25zdCB7SUZfQ0hFQ0tfVkVSSUZJRUR9ID0gU1RSSU5HUztcblxuLyoqXG4gKiBFc2NhcGVzIHNoZWxsIGNoYXJhY3RlcnMgdGhhdCBjb3VsZCBiZSBkYW5nZXJvdXMgaW4gYSBjb21tYW5kLlxuICovXG5jb25zdCBlc2NhcGVTaGVsbEFyZyA9IChzdHI6IHN0cmluZykgPT4gc3RyLnJlcGxhY2UoLyhbYCRcXFxcJjt8Kj88Pl0pL2csICdcXFxcJDEnKTtcblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNlcmllcyBvZiBucG0gY29tbWFuZHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG1hbmlmZXN0IGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjdXRlQ29tbWFuZHMgPSBhc3luYyAobWFuaWZlc3Q6IHN0cmluZywgY3dkOiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IGlzR2xvYmFsID0gISFwcm9jZXNzLmVudi5ucG1fY29uZmlnX2dsb2JhbDtcbiAgY29uc3QgbWFuaWZlc3REaXJQYXRoID0gcGF0aC5kaXJuYW1lKG1hbmlmZXN0KTtcbiAgY29uc3QgbWFuaWZlc3RGaWxlTmFtZSA9IGdldEZpbGVOYW1lKG1hbmlmZXN0KTtcbiAgY29uc3QgZXhlY3V0ZWRNYW5pZmVzdCA9IHBhdGguam9pbihtYW5pZmVzdERpclBhdGgsIGByZS0ke21hbmlmZXN0RmlsZU5hbWV9YCk7XG5cbiAgY29uc3QgcHJlZml4RmxhZyA9XG4gICAgcHJvY2Vzcy5lbnYuQ1VSUkVOVF9ESVIgJiYgcHJvY2Vzcy5lbnYuQ1VSUkVOVF9ESVIgIT09IHByb2Nlc3MuY3dkKClcbiAgICAgID8gYC0tcHJlZml4PSR7cGF0aC5yZWxhdGl2ZShwcm9jZXNzLmVudi5DVVJSRU5UX0RJUiEsIHByb2Nlc3MuY3dkKCkpfWBcbiAgICAgIDogJyc7XG5cbiAgY29uc3Qgc2FuaXRpemVkTWFuaWZlc3QgPSBlc2NhcGVTaGVsbEFyZyhtYW5pZmVzdCk7XG4gIGNvbnN0IHNhbml0aXplZEV4ZWN1dGVkTWFuaWZlc3QgPSBlc2NhcGVTaGVsbEFyZyhleGVjdXRlZE1hbmlmZXN0KTtcblxuICBjb25zdCBpZkVudkNvbW1hbmQgPSBbXG4gICAgaXNHbG9iYWwgPyAnaWYtZW52JyA6ICducG0nLFxuICAgIC4uLihpc0dsb2JhbCA/IFtdIDogWydydW4nLCAnaWYtZW52J10pLFxuICAgICctLScsXG4gICAgLi4uKHByZWZpeEZsYWcgPT09ICcnID8gW10gOiBbcHJlZml4RmxhZ10pLFxuICAgICctbScsXG4gICAgc2FuaXRpemVkTWFuaWZlc3QsXG4gIF07XG5cbiAgY29uc3QgaWZSdW5Db21tYW5kID0gW1xuICAgIGlzR2xvYmFsID8gJ2lmLXJ1bicgOiAnbnBtJyxcbiAgICAuLi4oaXNHbG9iYWwgPyBbXSA6IFsncnVuJywgJ2lmLXJ1biddKSxcbiAgICAnLS0nLFxuICAgIC4uLihwcmVmaXhGbGFnID09PSAnJyA/IFtdIDogW3ByZWZpeEZsYWddKSxcbiAgICAnLW0nLFxuICAgIHNhbml0aXplZE1hbmlmZXN0LFxuICAgICctbycsXG4gICAgc2FuaXRpemVkRXhlY3V0ZWRNYW5pZmVzdCxcbiAgXTtcblxuICBjb25zdCB0dHlDb21tYW5kID0gWydub2RlJywgJy1wJywgJ0Jvb2xlYW4ocHJvY2Vzcy5zdGRvdXQuaXNUVFkpJ107XG4gIGNvbnN0IGlmRGlmZkNvbW1hbmQgPSBbXG4gICAgaXNHbG9iYWwgPyAnaWYtZGlmZicgOiAnbnBtJyxcbiAgICAuLi4oaXNHbG9iYWwgPyBbXSA6IFsncnVuJywgJ2lmLWRpZmYnXSksXG4gICAgJy0tJyxcbiAgICAuLi4ocHJlZml4RmxhZyA9PT0gJycgPyBbXSA6IFtwcmVmaXhGbGFnXSksXG4gICAgJy1zJyxcbiAgICBgJHtzYW5pdGl6ZWRFeGVjdXRlZE1hbmlmZXN0fS55YW1sYCxcbiAgICAnLXQnLFxuICAgIHNhbml0aXplZE1hbmlmZXN0LFxuICBdO1xuXG4gIGV4ZWNGaWxlU3luYyhpZkVudkNvbW1hbmRbMF0sIGlmRW52Q29tbWFuZC5zbGljZSgxKSwge1xuICAgIGN3ZDogcHJvY2Vzcy5lbnYuQ1VSUkVOVF9ESVIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICBzaGVsbDogdHJ1ZSxcbiAgfSk7XG5cbiAgZXhlY0ZpbGVTeW5jKGlmUnVuQ29tbWFuZFswXSwgaWZSdW5Db21tYW5kLnNsaWNlKDEpLCB7XG4gICAgY3dkOiBwcm9jZXNzLmVudi5DVVJSRU5UX0RJUiB8fCBwcm9jZXNzLmN3ZCgpLFxuICB9KTtcblxuICBleGVjRmlsZVN5bmModHR5Q29tbWFuZFswXSwgdHR5Q29tbWFuZC5zbGljZSgxKSwge1xuICAgIGN3ZDogcHJvY2Vzcy5lbnYuQ1VSUkVOVF9ESVIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgfSk7XG5cbiAgY29uc3QgdHR5UmVzdWx0ID0gZXhlY0ZpbGVTeW5jKHR0eUNvbW1hbmRbMF0sIHR0eUNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBjd2Q6IHByb2Nlc3MuZW52LkNVUlJFTlRfRElSIHx8IHByb2Nlc3MuY3dkKCksXG4gIH0pO1xuXG4gIGNvbnN0IHR0eSA9IHR0eVJlc3VsdCAmJiB0dHlSZXN1bHQudG9TdHJpbmcoKS50cmltKCk7XG4gIGNvbnN0IGZ1bGxDb21tYW5kID0gYCR7dHR5ID09PSAndHJ1ZScgPyAndHR5IHwnIDogJyd9ICR7aWZEaWZmQ29tbWFuZC5qb2luKFxuICAgICcgJ1xuICApfWA7XG5cbiAgZXhlY0ZpbGVTeW5jKGZ1bGxDb21tYW5kLCB7XG4gICAgY3dkOiBwcm9jZXNzLmVudi5DVVJSRU5UX0RJUiB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgc2hlbGw6IHRydWUsXG4gIH0pO1xuXG4gIGlmICghY3dkKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZUlmRXhpc3RzKGAke21hbmlmZXN0RGlyUGF0aH0vcGFja2FnZS5qc29uYCk7XG4gIH1cblxuICBhd2FpdCByZW1vdmVGaWxlSWZFeGlzdHMoYCR7ZXhlY3V0ZWRNYW5pZmVzdH0ueWFtbGApO1xuXG4gIGNvbnNvbGUubG9nKElGX0NIRUNLX1ZFUklGSUVEKHBhdGguYmFzZW5hbWUobWFuaWZlc3QpKSk7XG59O1xuIl19
|
|
@@ -55,9 +55,7 @@ exports.Divide = (0, interfaces_1.PluginFactory)({
|
|
|
55
55
|
*/
|
|
56
56
|
const calculateDivide = (input, index, params) => {
|
|
57
57
|
const { denominator, numerator } = params;
|
|
58
|
-
const finalDenominator = typeof denominator === 'number'
|
|
59
|
-
? denominator
|
|
60
|
-
: input[denominator] || denominator;
|
|
58
|
+
const finalDenominator = typeof denominator === 'number' ? denominator : input[denominator];
|
|
61
59
|
const finalNumerator = typeof numerator === 'number' ? numerator : input[numerator];
|
|
62
60
|
if (finalDenominator === 0) {
|
|
63
61
|
console.warn(ZERO_DIVISION(exports.Divide.name, index));
|
|
@@ -65,4 +63,4 @@ const calculateDivide = (input, index, params) => {
|
|
|
65
63
|
}
|
|
66
64
|
return finalNumerator / finalDenominator;
|
|
67
65
|
};
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL2RpdmlkZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0I7QUFHdEIsMkRBQXlEO0FBQ3pELGlEQUE2QztBQUU3QyxrRUFBMEQ7QUFFMUQseUNBQXFDO0FBRXJDLE1BQU0sRUFBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFDcEQsTUFBTSxFQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXZELFFBQUEsTUFBTSxHQUFHLElBQUEsMEJBQWEsRUFBQztJQUNsQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQW9CLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDM0MsTUFBTSxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2QztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEIsU0FBUyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtTQUNuQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxlQUFlLEVBQUUsQ0FBQyxLQUFtQixFQUFFLE1BQW9CLEVBQUUsRUFBRTtRQUM3RCxNQUFNLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxPQUFDO2FBQ2IsTUFBTSxDQUFDO1lBQ04sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUNyQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUMxRCxNQUFNLElBQUkscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUNsRTtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQXNCLEVBQUUsTUFBb0IsRUFBRSxFQUFFO1FBQ3JFLE1BQU0sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUVoRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDckQsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksU0FBUztnQkFDdkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVzthQUM5QyxDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixDQUFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQjthQUMzQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsMEJBQTBCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO0NBQ3pELENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsS0FBbUIsRUFDbkIsS0FBYSxFQUNiLE1BR0MsRUFDRCxFQUFFO0lBQ0YsTUFBTSxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDeEMsTUFBTSxnQkFBZ0IsR0FDcEIsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRSxNQUFNLGNBQWMsR0FDbEIsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvRCxJQUFJLGdCQUFnQixLQUFLLENBQUMsRUFBRTtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxjQUFjLENBQUM7S0FDdkI7SUFFRCxPQUFPLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQztBQUMzQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7Q29uZmlnUGFyYW1zLCBQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5pbXBvcnQge1BsdWdpbkZhY3Rvcnl9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vLi4vY29uZmlnJztcblxuY29uc3Qge01pc3NpbmdJbnB1dERhdGFFcnJvciwgQ29uZmlnRXJyb3J9ID0gRVJST1JTO1xuY29uc3Qge01JU1NJTkdfSU5QVVRfREFUQSwgWkVST19ESVZJU0lPTiwgTUlTU0lOR19DT05GSUd9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IERpdmlkZSA9IFBsdWdpbkZhY3Rvcnkoe1xuICBjb25maWdWYWxpZGF0aW9uOiAoY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBpZiAoIWNvbmZpZyB8fCAhT2JqZWN0LmtleXMoY29uZmlnKT8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoTUlTU0lOR19DT05GSUcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIG51bWVyYXRvcjogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICBkZW5vbWluYXRvcjogei5zdHJpbmcoKS5vcih6Lm51bWJlcigpKSxcbiAgICAgIG91dHB1dDogei5zdHJpbmcoKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGNvbmZpZyk7XG4gIH0sXG4gIGlucHV0VmFsaWRhdGlvbjogKGlucHV0OiBQbHVnaW5QYXJhbXMsIGNvbmZpZzogQ29uZmlnUGFyYW1zKSA9PiB7XG4gICAgY29uc3Qge251bWVyYXRvciwgZGVub21pbmF0b3J9ID0gY29uZmlnO1xuXG4gICAgY29uc3Qgc2NoZW1hID0gelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIFtudW1lcmF0b3JdOiB6Lm51bWJlcigpLFxuICAgICAgICBbZGVub21pbmF0b3JdOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLnJlZmluZSgoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVub21pbmF0b3IgPT09ICdzdHJpbmcnICYmICFpbnB1dFtkZW5vbWluYXRvcl0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ0lucHV0RGF0YUVycm9yKE1JU1NJTkdfSU5QVVRfREFUQShkZW5vbWluYXRvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGlucHV0KTtcbiAgfSxcbiAgaW1wbGVtZW50YXRpb246IGFzeW5jIChpbnB1dHM6IFBsdWdpblBhcmFtc1tdLCBjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGNvbnN0IHtudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBvdXRwdXR9ID0gY29uZmlnO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFJlc3VsdCA9IGNhbGN1bGF0ZURpdmlkZShpbnB1dCwgaW5kZXgsIHtcbiAgICAgICAgbnVtZXJhdG9yOiBpbnB1dC5udW1lcmF0b3IgfHwgbnVtZXJhdG9yLFxuICAgICAgICBkZW5vbWluYXRvcjogaW5wdXQuZGVub21pbmF0b3IgfHwgZGVub21pbmF0b3IsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIFtvdXRwdXRdOiBjYWxjdWxhdGVkUmVzdWx0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcbiAgYWxsb3dBcml0aG1ldGljRXhwcmVzc2lvbnM6IFsnbnVtZXJhdG9yJywgJ2Rlbm9taW5hdG9yJ10sXG59KTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkaXZpc2lvbiBvZiB0aGUgZ2l2ZW4gcGFyYW1ldGVyLlxuICovXG5jb25zdCBjYWxjdWxhdGVEaXZpZGUgPSAoXG4gIGlucHV0OiBQbHVnaW5QYXJhbXMsXG4gIGluZGV4OiBudW1iZXIsXG4gIHBhcmFtczoge1xuICAgIG51bWVyYXRvcjogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRlbm9taW5hdG9yOiBudW1iZXIgfCBzdHJpbmc7XG4gIH1cbikgPT4ge1xuICBjb25zdCB7ZGVub21pbmF0b3IsIG51bWVyYXRvcn0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpbmFsRGVub21pbmF0b3IgPVxuICAgIHR5cGVvZiBkZW5vbWluYXRvciA9PT0gJ251bWJlcicgPyBkZW5vbWluYXRvciA6IGlucHV0W2Rlbm9taW5hdG9yXTtcbiAgY29uc3QgZmluYWxOdW1lcmF0b3IgPVxuICAgIHR5cGVvZiBudW1lcmF0b3IgPT09ICdudW1iZXInID8gbnVtZXJhdG9yIDogaW5wdXRbbnVtZXJhdG9yXTtcblxuICBpZiAoZmluYWxEZW5vbWluYXRvciA9PT0gMCkge1xuICAgIGNvbnNvbGUud2FybihaRVJPX0RJVklTSU9OKERpdmlkZS5uYW1lLCBpbmRleCkpO1xuICAgIHJldHVybiBmaW5hbE51bWVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBmaW5hbE51bWVyYXRvciAvIGZpbmFsRGVub21pbmF0b3I7XG59O1xuIl19
|
|
@@ -23,14 +23,12 @@ exports.Exponent = (0, interfaces_1.PluginFactory)({
|
|
|
23
23
|
inputValidation: (input, config) => {
|
|
24
24
|
const inputParameter = config['input-parameter'];
|
|
25
25
|
const inputData = {
|
|
26
|
-
[inputParameter]:
|
|
27
|
-
? inputParameter
|
|
28
|
-
: input[inputParameter],
|
|
26
|
+
[inputParameter]: input[inputParameter],
|
|
29
27
|
};
|
|
30
28
|
const validationSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.number());
|
|
31
29
|
return (0, validations_1.validate)(validationSchema, inputData);
|
|
32
30
|
},
|
|
33
|
-
implementation: async (inputs, config
|
|
31
|
+
implementation: async (inputs, config) => {
|
|
34
32
|
const { 'input-parameter': inputParameter, exponent, 'output-parameter': outputParameter, } = config;
|
|
35
33
|
return inputs.map(input => {
|
|
36
34
|
const calculatedResult = calculateExponent(input, inputParameter, exponent);
|
|
@@ -49,4 +47,4 @@ const calculateExponent = (input, inputParameter, exponent) => {
|
|
|
49
47
|
const base = typeof inputParameter === 'number' ? inputParameter : input[inputParameter];
|
|
50
48
|
return Math.pow(base, exponent);
|
|
51
49
|
};
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL2V4cG9uZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUErQjtBQUcvQiwyREFBeUQ7QUFDekQsaURBQTZDO0FBRTdDLGtFQUEwRDtBQUUxRCx5Q0FBcUM7QUFFckMsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUM3QixNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVwQixRQUFBLFFBQVEsR0FBRyxJQUFBLDBCQUFhLEVBQUM7SUFDcEMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFvQixFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdkM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQzVCLGlCQUFpQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3BCLGtCQUFrQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUNiLFlBQTRCLEVBQzVCLE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsRUFBRSxDQUFDLEtBQW1CLEVBQUUsTUFBb0IsRUFBRSxFQUFFO1FBQzdELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHO1lBQ2hCLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQztTQUN4QyxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUUxRCxPQUFPLElBQUEsc0JBQVEsRUFDYixnQkFBZ0IsRUFDaEIsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBQ0QsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFzQixFQUFFLE1BQW9CLEVBQUUsRUFBRTtRQUNyRSxNQUFNLEVBQ0osaUJBQWlCLEVBQUUsY0FBYyxFQUNqQyxRQUFRLEVBQ1Isa0JBQWtCLEVBQUUsZUFBZSxHQUNwQyxHQUFHLE1BQU0sQ0FBQztRQUVYLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUN4QyxLQUFLLEVBQ0wsY0FBYyxFQUNkLFFBQVEsQ0FDVCxDQUFDO1lBRUYsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsQ0FBQyxlQUFlLENBQUMsRUFBRSxnQkFBZ0I7YUFDcEMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELDBCQUEwQixFQUFFLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDO0NBQzVELENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixLQUFtQixFQUNuQixjQUErQixFQUMvQixRQUFnQixFQUNoQixFQUFFO0lBQ0YsTUFBTSxJQUFJLEdBQ1IsT0FBTyxjQUFjLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU5RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7eiwgWm9kVHlwZX0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtQbHVnaW5QYXJhbXMsIENvbmZpZ1BhcmFtc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcbmltcG9ydCB7UGx1Z2luRmFjdG9yeX0gZnJvbSAnQGdybnNmdC9pZi1jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5jb25zdCB7Q29uZmlnRXJyb3J9ID0gRVJST1JTO1xuY29uc3Qge01JU1NJTkdfQ09ORklHfSA9IFNUUklOR1M7XG5cbmV4cG9ydCBjb25zdCBFeHBvbmVudCA9IFBsdWdpbkZhY3Rvcnkoe1xuICBjb25maWdWYWxpZGF0aW9uOiAoY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBpZiAoIWNvbmZpZyB8fCAhT2JqZWN0LmtleXMoY29uZmlnKT8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoTUlTU0lOR19DT05GSUcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgICdpbnB1dC1wYXJhbWV0ZXInOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICAgIGV4cG9uZW50OiB6Lm51bWJlcigpLFxuICAgICAgJ291dHB1dC1wYXJhbWV0ZXInOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBjb25maWdTY2hlbWE+PihcbiAgICAgIGNvbmZpZ1NjaGVtYSBhcyBab2RUeXBlPGFueT4sXG4gICAgICBjb25maWdcbiAgICApO1xuICB9LFxuICBpbnB1dFZhbGlkYXRpb246IChpbnB1dDogUGx1Z2luUGFyYW1zLCBjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGNvbnN0IGlucHV0UGFyYW1ldGVyID0gY29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXTtcbiAgICBjb25zdCBpbnB1dERhdGEgPSB7XG4gICAgICBbaW5wdXRQYXJhbWV0ZXJdOiBpbnB1dFtpbnB1dFBhcmFtZXRlcl0sXG4gICAgfTtcbiAgICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5udW1iZXIoKSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2YgdmFsaWRhdGlvblNjaGVtYT4+KFxuICAgICAgdmFsaWRhdGlvblNjaGVtYSxcbiAgICAgIGlucHV0RGF0YVxuICAgICk7XG4gIH0sXG4gIGltcGxlbWVudGF0aW9uOiBhc3luYyAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSwgY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAnaW5wdXQtcGFyYW1ldGVyJzogaW5wdXRQYXJhbWV0ZXIsXG4gICAgICBleHBvbmVudCxcbiAgICAgICdvdXRwdXQtcGFyYW1ldGVyJzogb3V0cHV0UGFyYW1ldGVyLFxuICAgIH0gPSBjb25maWc7XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiB7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkUmVzdWx0ID0gY2FsY3VsYXRlRXhwb25lbnQoXG4gICAgICAgIGlucHV0LFxuICAgICAgICBpbnB1dFBhcmFtZXRlcixcbiAgICAgICAgZXhwb25lbnRcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBbb3V0cHV0UGFyYW1ldGVyXTogY2FsY3VsYXRlZFJlc3VsdCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG4gIGFsbG93QXJpdGhtZXRpY0V4cHJlc3Npb25zOiBbJ2lucHV0LXBhcmFtZXRlcicsICdleHBvbmVudCddLFxufSk7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW5wdXQgcGFyYW0gcmFpc2VkIGJ5IHRoZSBwb3dlciBvZiBhIGdpdmVuIGV4cG9uZW50LlxuICovXG5jb25zdCBjYWxjdWxhdGVFeHBvbmVudCA9IChcbiAgaW5wdXQ6IFBsdWdpblBhcmFtcyxcbiAgaW5wdXRQYXJhbWV0ZXI6IHN0cmluZyB8IG51bWJlcixcbiAgZXhwb25lbnQ6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IGJhc2UgPVxuICAgIHR5cGVvZiBpbnB1dFBhcmFtZXRlciA9PT0gJ251bWJlcicgPyBpbnB1dFBhcmFtZXRlciA6IGlucHV0W2lucHV0UGFyYW1ldGVyXTtcblxuICByZXR1cm4gTWF0aC5wb3coYmFzZSwgZXhwb25lbnQpO1xufTtcbiJdfQ==
|
|
@@ -12,7 +12,7 @@ const { ProcessExecutionError, ConfigError } = utils_1.ERRORS;
|
|
|
12
12
|
const { MISSING_CONFIG } = config_1.STRINGS;
|
|
13
13
|
exports.Shell = (0, interfaces_1.PluginFactory)({
|
|
14
14
|
configValidation: (config) => {
|
|
15
|
-
if (!config) {
|
|
15
|
+
if (!config || !Object.keys(config)?.length) {
|
|
16
16
|
throw new ConfigError(MISSING_CONFIG);
|
|
17
17
|
}
|
|
18
18
|
const schema = zod_1.z.object({
|
|
@@ -47,4 +47,4 @@ const runModelInShell = (input, command) => {
|
|
|
47
47
|
throw new ProcessExecutionError(error.message);
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3NoZWxsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUEwRDtBQUUxRCxxQ0FBc0M7QUFDdEMsNkJBQXNCO0FBQ3RCLDJEQUF5RDtBQUN6RCxpREFBNkM7QUFHN0Msa0VBQTBEO0FBRTFELHlDQUFxQztBQUVyQyxNQUFNLEVBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFDLEdBQUcsY0FBTSxDQUFDO0FBQ3BELE1BQU0sRUFBQyxjQUFjLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXBCLFFBQUEsS0FBSyxHQUFHLElBQUEsMEJBQWEsRUFBQztJQUNqQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQW9CLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDM0MsTUFBTSxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2QztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEIsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLHNCQUFRLEVBQXlCLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDeEMsTUFBTSxhQUFhLEdBQVcsSUFBQSxjQUFJLEVBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV4RCxPQUFPLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFvQixDQUFDO0lBQ3BELENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFhLEVBQUUsT0FBZSxFQUFFLEVBQUU7SUFDekQsSUFBSTtRQUNGLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELE1BQU0sTUFBTSxHQUE2QixJQUFBLHlCQUFTLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRTtZQUNuRSxLQUFLO1lBQ0wsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBQSxpQkFBTyxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2QyxPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUM7S0FDbEI7SUFBQyxPQUFPLEtBQVUsRUFBRTtRQUNuQixNQUFNLElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2hEO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzcGF3blN5bmMsIFNwYXduU3luY1JldHVybnN9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5pbXBvcnQge2xvYWRBbGwsIGR1bXB9IGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuaW1wb3J0IHtQbHVnaW5GYWN0b3J5fSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7Q29uZmlnUGFyYW1zLCBQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5jb25zdCB7UHJvY2Vzc0V4ZWN1dGlvbkVycm9yLCBDb25maWdFcnJvcn0gPSBFUlJPUlM7XG5jb25zdCB7TUlTU0lOR19DT05GSUd9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IFNoZWxsID0gUGx1Z2luRmFjdG9yeSh7XG4gIGNvbmZpZ1ZhbGlkYXRpb246IChjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGlmICghY29uZmlnIHx8ICFPYmplY3Qua2V5cyhjb25maWcpPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcihNSVNTSU5HX0NPTkZJRyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgY29tbWFuZDogei5zdHJpbmcoKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGNvbmZpZyk7XG4gIH0sXG4gIGltcGxlbWVudGF0aW9uOiBhc3luYyAoaW5wdXRzLCBjb25maWcpID0+IHtcbiAgICBjb25zdCBpbnB1dFdpdGhDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dHNbMF0sIGNvbmZpZyk7XG4gICAgY29uc3QgY29tbWFuZCA9IGlucHV0V2l0aENvbmZpZy5jb21tYW5kO1xuICAgIGNvbnN0IGlucHV0QXNTdHJpbmc6IHN0cmluZyA9IGR1bXAoaW5wdXRzLCB7aW5kZW50OiAyfSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IHJ1bk1vZGVsSW5TaGVsbChpbnB1dEFzU3RyaW5nLCBjb21tYW5kKTtcblxuICAgIHJldHVybiByZXN1bHRzPy5vdXRwdXRzPy5mbGF0KCkgYXMgUGx1Z2luUGFyYW1zW107XG4gIH0sXG59KTtcblxuLyoqXG4gKiBSdW5zIHRoZSBtb2RlbCBpbiBhIHNoZWxsLiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHRvIHJ1biBhbiBleHRlcm5hbCBJTVAsXG4gKiBhbiBleGVjdXRhYmxlIHdpdGggYSBDTEkgZXhwb3NpbmcgdHdvIG1ldGhvZHM6IGAtLWV4ZWN1dGVgIGFuZCBgLS1tYW5pZmVzdGAuXG4gKiBUaGUgc2hlbGwgY29tbWFuZCB0aGVuIGNhbGxzIHRoZSBgLS1jb21tYW5kYCBtZXRob2QgcGFzc2luZyB2YXIgbWFuaWZlc3QgYXMgdGhlIHBhdGggdG8gdGhlIGRlc2lyZWQgbWFuaWZlc3QgZmlsZS5cbiAqL1xuY29uc3QgcnVuTW9kZWxJblNoZWxsID0gKGlucHV0OiBzdHJpbmcsIGNvbW1hbmQ6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IFtleGVjdXRhYmxlLCAuLi5hcmdzXSA9IGNvbW1hbmQuc3BsaXQoJyAnKTtcblxuICAgIGNvbnN0IHJlc3VsdDogU3Bhd25TeW5jUmV0dXJuczxzdHJpbmc+ID0gc3Bhd25TeW5jKGV4ZWN1dGFibGUsIGFyZ3MsIHtcbiAgICAgIGlucHV0LFxuICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICB9KTtcbiAgICBjb25zdCBvdXRwdXRzID0gbG9hZEFsbChyZXN1bHQuc3Rkb3V0KTtcblxuICAgIHJldHVybiB7b3V0cHV0c307XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgUHJvY2Vzc0V4ZWN1dGlvbkVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICB9XG59O1xuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grnsft/if",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Green Software Foundation",
|
|
11
|
+
"email": "info@gsf.com"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"description": "Impact Framework",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/Green-Software-Foundation/if/issues/new?assignees=&labels=feedback&projects=&template=feedback.md&title=Feedback+-+"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18",
|
|
20
|
+
"npm": ">=8"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://greensoftware.foundation",
|
|
23
|
+
"dependencies": {}
|
|
24
|
+
}
|
package/okrs.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
# Impact Framework OKRs
|
|
3
|
+
|
|
4
|
+
The OKRs guiding Impact Framework to the end of 2025 are:
|
|
5
|
+
|
|
6
|
+
- Objective: grow an open source community of developers and users
|
|
7
|
+
- Key result: 30 individual contributors to our repositories by end 2025
|
|
8
|
+
|
|
9
|
+
- Objective 2: get IF integrated into more production systems in real businesses and organizations
|
|
10
|
+
- Key result: 20 case studies added to our `if-db` repository
|
|
11
|
+
|
|
12
|
+
Individual contributors include people pushing code to IF, sharing plugins on [the Explorer](https://explorer.if.greensoftware.foundation), adding case studies or working on our documentation.
|
|
13
|
+
|
|
14
|
+
Case studies take the form of manifest files with explanatory notes that show IF being used to measure some real software application.
|