@grnsft/if 0.4.0 → 0.5.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.
Files changed (181) hide show
  1. package/CONTRIBUTING.md +4 -5
  2. package/README.md +14 -33
  3. package/Refactor-migration-guide.md +5 -6
  4. package/build/builtins/coefficient/index.d.ts +1 -2
  5. package/build/builtins/coefficient/index.js +18 -4
  6. package/build/builtins/copy-param/index.d.ts +2 -0
  7. package/build/builtins/copy-param/index.js +68 -0
  8. package/build/builtins/csv-lookup/index.d.ts +1 -1
  9. package/build/builtins/csv-lookup/index.js +44 -37
  10. package/build/builtins/divide/index.d.ts +1 -1
  11. package/build/builtins/divide/index.js +22 -11
  12. package/build/builtins/exponent/index.d.ts +1 -2
  13. package/build/builtins/exponent/index.js +9 -23
  14. package/build/builtins/export-csv-raw.d.ts +4 -2
  15. package/build/builtins/export-csv-raw.js +7 -7
  16. package/build/builtins/export-csv.js +8 -11
  17. package/build/builtins/export-log.js +1 -1
  18. package/build/builtins/export-yaml.js +6 -6
  19. package/build/builtins/group-by.d.ts +1 -1
  20. package/build/builtins/group-by.js +5 -5
  21. package/build/builtins/index.d.ts +1 -0
  22. package/build/builtins/index.js +4 -2
  23. package/build/builtins/interpolation/index.d.ts +1 -1
  24. package/build/builtins/interpolation/index.js +10 -8
  25. package/build/builtins/mock-observations/helpers/common-generator.d.ts +2 -2
  26. package/build/builtins/mock-observations/helpers/common-generator.js +10 -13
  27. package/build/builtins/mock-observations/helpers/rand-int-generator.d.ts +2 -2
  28. package/build/builtins/mock-observations/helpers/rand-int-generator.js +14 -24
  29. package/build/builtins/mock-observations/index.d.ts +1 -2
  30. package/build/builtins/mock-observations/index.js +2 -4
  31. package/build/builtins/multiply/index.d.ts +1 -2
  32. package/build/builtins/multiply/index.js +10 -16
  33. package/build/builtins/regex/index.d.ts +1 -2
  34. package/build/builtins/regex/index.js +8 -12
  35. package/build/builtins/sci/index.d.ts +1 -2
  36. package/build/builtins/sci/index.js +23 -22
  37. package/build/builtins/sci-embodied/index.d.ts +1 -1
  38. package/build/builtins/sci-embodied/index.js +16 -17
  39. package/build/builtins/shell/index.d.ts +1 -2
  40. package/build/builtins/shell/index.js +4 -4
  41. package/build/builtins/subtract/index.d.ts +1 -2
  42. package/build/builtins/subtract/index.js +7 -23
  43. package/build/builtins/sum/index.d.ts +1 -2
  44. package/build/builtins/sum/index.js +14 -11
  45. package/build/builtins/time-sync.d.ts +1 -2
  46. package/build/builtins/time-sync.js +62 -67
  47. package/build/check.d.ts +2 -0
  48. package/build/check.js +85 -0
  49. package/build/config/config.d.ts +13 -1
  50. package/build/config/config.js +61 -1
  51. package/build/config/params.js +1 -6
  52. package/build/config/strings.d.ts +41 -5
  53. package/build/config/strings.js +46 -9
  54. package/build/diff.js +2 -2
  55. package/build/env.d.ts +2 -0
  56. package/build/env.js +38 -0
  57. package/build/lib/aggregate.js +1 -1
  58. package/build/lib/compute.js +1 -1
  59. package/build/lib/exhaust.js +4 -4
  60. package/build/lib/initialize.js +20 -24
  61. package/build/lib/load.js +4 -4
  62. package/build/types/compute.d.ts +1 -1
  63. package/build/types/compute.js +1 -1
  64. package/build/types/if-env.d.ts +8 -0
  65. package/build/types/if-env.js +3 -0
  66. package/build/types/interface.d.ts +1 -19
  67. package/build/types/interface.js +1 -1
  68. package/build/types/npm.d.ts +9 -0
  69. package/build/types/npm.js +3 -0
  70. package/build/types/process-args.d.ts +9 -0
  71. package/build/types/process-args.js +1 -1
  72. package/build/util/aggregation-helper.d.ts +1 -1
  73. package/build/util/aggregation-helper.js +5 -5
  74. package/build/util/args.d.ts +23 -1
  75. package/build/util/args.js +91 -14
  76. package/build/util/fs.d.ts +20 -0
  77. package/build/util/fs.js +94 -0
  78. package/build/util/helpers.d.ts +25 -5
  79. package/build/util/helpers.js +110 -15
  80. package/build/util/npm.d.ts +28 -0
  81. package/build/util/npm.js +152 -0
  82. package/build/util/plugin-storage.js +4 -4
  83. package/build/util/validations.js +4 -4
  84. package/jest.config.js +1 -1
  85. package/manifests/bugs/aggregation-error-wrong-metric.yml +73 -23
  86. package/manifests/bugs/azure-importer-ignoring-defaults.yml +6 -3
  87. package/manifests/bugs/azure-importer-incorrect-calculation.yml +6 -3
  88. package/manifests/bugs/initialize-error-no-config.yml +4 -5
  89. package/manifests/bugs/initialize-error-no-path.yml +9 -5
  90. package/manifests/bugs/input-error-missing-duration.yml +10 -6
  91. package/manifests/bugs/pipeline-error-naming-mismatch.yml +8 -4
  92. package/manifests/bugs/pipeline-error-uninitialized-plugin.yml +9 -5
  93. package/manifests/bugs/pipeline-ordering-error.yml +43 -34
  94. package/manifests/examples/copy.yaml +20 -0
  95. package/manifests/examples/generics.yml +48 -13
  96. package/manifests/examples/instance-metadata.yml +4 -4
  97. package/manifests/examples/mock-cpu-util-to-carbon.yml +8 -2
  98. package/manifests/examples/nesting.yml +82 -35
  99. package/manifests/examples/pipeline-teads-sci.yml +54 -18
  100. package/manifests/examples/pipeline-with-aggregate.yml +66 -24
  101. package/manifests/examples/pipeline-with-mocks.yml +65 -22
  102. package/manifests/examples/region-metadata.yml +26 -0
  103. package/manifests/examples/tdp-finder.yml +23 -0
  104. package/manifests/examples/zeros.yaml +130 -0
  105. package/manifests/features/{aggregate-failure-inalid-metrics.yml → aggregate-failure-invalid-metrics.yml} +9 -3
  106. package/manifests/features/aggregate-failure-missing-metric-in-inputs.yml +9 -3
  107. package/manifests/features/aggregate-horizontal.yml +8 -2
  108. package/manifests/features/aggregate-vertical.yml +8 -2
  109. package/manifests/features/aggregate.yml +8 -2
  110. package/manifests/integrations/{cloud-metadata-divide-boavizta.yml → cloud-metadata-divide.yml} +8 -9
  111. package/manifests/integrations/instance-metadata/failure-invalid-instance-type.yaml +33 -0
  112. package/manifests/integrations/instance-metadata/failure-invalid-provider.yaml +33 -0
  113. package/manifests/integrations/instance-metadata/failure-missing-queried-input.yml +33 -0
  114. package/manifests/integrations/instance-metadata/success.yml +33 -0
  115. package/manifests/integrations/mock-obs-group-by-cloud-meta.yml +8 -2
  116. package/manifests/integrations/mock-obs-time-sync.yml +50 -5
  117. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/failure-invalid-instance-type.yaml +9 -3
  118. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/failure-invalid-vendor.yaml +8 -2
  119. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/failure-missing-cloud-vendor.yml +9 -3
  120. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/success.yml +8 -2
  121. package/manifests/plugins/csv-lookup/{success.yml → region-metadata/success.yml} +1 -1
  122. package/manifests/plugins/csv-lookup/tdp-finder/failure-missing-input-param.yml +23 -0
  123. package/manifests/plugins/csv-lookup/tdp-finder/failure-unsupported-physical-processor.yml +24 -0
  124. package/manifests/plugins/csv-lookup/tdp-finder/success.yml +24 -0
  125. package/manifests/plugins/divide/failure-denominator-equal-zero.yml +8 -9
  126. package/manifests/plugins/divide/failure-invalid-config-denominator.yml +8 -9
  127. package/manifests/plugins/divide/failure-missing-numerator.yml +8 -9
  128. package/manifests/plugins/divide/success.yml +9 -10
  129. package/manifests/plugins/exponent/success.yml +26 -0
  130. package/manifests/plugins/interpolation/success.yml +24 -0
  131. package/manifests/plugins/sci/failure-missing-input-param.yml +2 -6
  132. package/manifests/plugins/sci/success.yml +0 -3
  133. package/manifests/plugins/subtract/success.yml +25 -0
  134. package/manifests/plugins/sum/success.yml +1 -1
  135. package/package.json +10 -4
  136. package/src/__mocks__/mock-manifest.yaml +72 -0
  137. package/src/builtins/README.md +1 -1
  138. package/src/builtins/coefficient/README.md +19 -1
  139. package/src/builtins/copy-param/README.md +104 -0
  140. package/src/builtins/csv-lookup/README.md +39 -1
  141. package/src/builtins/divide/README.md +29 -3
  142. package/src/builtins/exponent/README.md +21 -1
  143. package/src/builtins/interpolation/README.md +29 -1
  144. package/src/builtins/mock-observations/README.md +1 -1
  145. package/src/builtins/multiply/README.md +16 -1
  146. package/src/builtins/regex/README.md +32 -2
  147. package/src/builtins/sci/README.md +24 -1
  148. package/src/builtins/sci-embodied/README.md +15 -1
  149. package/src/builtins/shell/README.md +12 -1
  150. package/src/builtins/subtract/README.md +12 -1
  151. package/src/builtins/sum/README.md +28 -1
  152. package/src/config/env-template.yml +24 -0
  153. package/build/builtins/coefficient/types.d.ts +0 -5
  154. package/build/builtins/coefficient/types.js +0 -3
  155. package/build/builtins/exponent/types.d.ts +0 -5
  156. package/build/builtins/exponent/types.js +0 -3
  157. package/build/builtins/interpolation/types.d.ts +0 -5
  158. package/build/builtins/interpolation/types.js +0 -10
  159. package/build/builtins/mock-observations/types.d.ts +0 -13
  160. package/build/builtins/mock-observations/types.js +0 -3
  161. package/build/builtins/multiply/types.d.ts +0 -4
  162. package/build/builtins/multiply/types.js +0 -3
  163. package/build/builtins/subtract/types.d.ts +0 -4
  164. package/build/builtins/subtract/types.js +0 -3
  165. package/build/builtins/sum/types.d.ts +0 -4
  166. package/build/builtins/sum/types.js +0 -3
  167. package/build/types/common.d.ts +0 -4
  168. package/build/types/common.js +0 -3
  169. package/build/types/group-by.d.ts +0 -3
  170. package/build/types/group-by.js +0 -3
  171. package/build/types/helpers.d.ts +0 -4
  172. package/build/types/helpers.js +0 -3
  173. package/build/util/errors.d.ts +0 -6
  174. package/build/util/errors.js +0 -33
  175. package/manifests/examples/basic.yml +0 -28
  176. package/manifests/plugins/tdp-finder/failure-missing-input-param.yml +0 -18
  177. package/manifests/plugins/tdp-finder/failure-unsupported-physical-processor.yml +0 -19
  178. package/manifests/plugins/tdp-finder/success.yml +0 -19
  179. /package/manifests/plugins/csv-lookup/{failure-missing-column.yml → region-metadata/failure-missing-column.yml} +0 -0
  180. /package/manifests/plugins/csv-lookup/{failure-missing-output.yml → region-metadata/failure-missing-output.yml} +0 -0
  181. /package/manifests/plugins/csv-lookup/{success-renaming.yml → region-metadata/success-renaming.yml} +0 -0
package/CONTRIBUTING.md CHANGED
@@ -24,15 +24,15 @@ The following document is a rule set of guidelines for contributing.
24
24
 
25
25
  ## What and when to contribute
26
26
 
27
- You can contribute anything to the IF, but we are likely to close out unsolicited PRs without merging them. Our issue board is completely open and we have tags (`help-wanted`, `good-first-issue`) to help contributors to choose tasks to work on. We recommend speaking to the core team on Github before starting working on an issue. You can do this by raising an issue or commenting on an existing issue. This helps us to direct your energy in directions that are aligned with our roadmap, prevent multiple people working on the same task, and better manage our board. This all makes it much more likely that your work will get merged.
27
+ You can contribute anything to the IF, but we are likely to close out unsolicited PRs without merging them. Our issue board is completely open and we have tags (`core-only`, `good-first-issue`) to help contributors to choose tasks to work on. If an issue is unassigned and does not have the `core-only` label, it is available to work on. We recommend speaking to the core team on Github before starting working on an issue. You can do this by commenting on an existing issue or discussion thread or starting a new one if appropriate. This helps us to direct your energy in directions that are aligned with our roadmap, prevent multiple people working on the same task, and better manage our board. This all makes it much more likely that your work will get merged.
28
28
 
29
29
  You can also contribute by participating in discussions on our 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 includes what we've shipped, what we're working on and how you can get involved each week.
30
30
 
31
31
  ## Reporting bugs
32
32
 
33
- We appreciate bug reports! If you experience an issue with IF or one of our plugins, you can report it using our bug reporting template. To do this:
33
+ We appreciate bug reports! If you experience an issue with IF, you can report it using our bug reporting template. To do this:
34
34
 
35
- 1. Go to the [IF repository](https://github.com/Green-Software-Foundation/if) (or [plugin repository](https://github.com/Green-Software-Foundation/if-plugins) if you bug relates to a specific plugin)
35
+ 1. Go to the [IF repository](https://github.com/Green-Software-Foundation/if)
36
36
  2. Click on the `Issues` tab
37
37
  3. Click on `Create New Issue` and select the `Bug Report` template.
38
38
  4. Fill out the requested information.
@@ -46,8 +46,7 @@ The assessment rubric is as follows:
46
46
  | | Consequence | Severity |
47
47
  | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -------- |
48
48
  | Bugs in IF core leading to incorrect calculations | unusable framework | 5 |
49
- | Bugs in if-plugins leading to incorrect calculations | core pathways fail, IF very limited in functionality | 5 |
50
- | Bugs in if-unofficial-pluginsd leading to incorrect calculations | Third party plugins harder to use, limits IF to standard lib | 3 |
49
+ | Bugs in builtins leading to incorrect calculations | core pathways fail, IF very limited in functionality | 5 |
51
50
  | Bugs in template | Harder to build plugins, ecosystem growth is impacted | 2 |
52
51
  | Bugs in docs | product does not match expectation, hard to debug, frustration, loss of adoption | 2 |
53
52
  | Security flaw: privacy related | leak user data, unlikely to achieve adoption in serious orgs | 5 |
package/README.md CHANGED
@@ -5,10 +5,6 @@
5
5
  > [!IMPORTANT]
6
6
  > 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.
7
7
 
8
- **Note** We have recently (March 2024) refactored the IF codebase and introduced some changes affecting both users and developers. You can read our migration guide [HERE](./Refactor-migration-guide.md) to help you update to the latest version!
9
-
10
- [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/).
11
-
12
8
  **Our documentation is online at [if.greensoftware.foundation](https://if.greensoftware.foundation/)**
13
9
 
14
10
  **IF** is a framework to **M**odel, **M**easure, si**M**ulate and **M**onitor the environmental impacts of software
@@ -23,39 +19,32 @@ Read the [specification and design docs](https://if.greensoftware.foundation) to
23
19
 
24
20
  ## Get started
25
21
 
26
- The first thing to understand is that IF is a framework for running plugins. This means that in order to do some calculations, you need to load some plugins from some external resource. We provide a [standard library of plugins](https://github.com/Green-Software-Foundation/if-plugins) and a repository of [community plugins](https://github.com/Green-Software-Foundation/if-unofficial-plugins) to get you started.
22
+ IF is a framework for running pipelines of plugins that operate on a set of observations. This is all configured using a manifest file. We provide a standard library of plugins that come bundled with IF - we refer to these as `builtins`. We also have an [Explorer](https://explorer.if.greensoftware.foundation) where anyone can list third party plugins you can install.
27
23
 
28
- Start by installing framework itself:
24
+ Start by installing the latest version of IF:
29
25
 
30
26
  ```sh
31
27
  npm install -g "@grnsft/if"
32
28
  ```
33
29
 
34
- Then installing some plugins:
35
-
36
- ```sh
37
- npm install -g "@grnsft/if-plugins"
38
- ```
39
-
40
30
  Then create a `manifest` file that describes your application (see our docs for a detailed explanation).
41
31
 
42
32
  Then, run `if` using the following command:
43
33
 
44
34
  ```sh
45
- ie --manifest <path-to-your-manifest-file>
35
+ if-run --manifest <path-to-your-manifest-file> --stdout
46
36
  ## or you can use aliases
47
- ie -m <path-to-your-manifest-file>
37
+ if-run -m <path-to-your-manifest-file> -s
38
+
48
39
  ```
49
40
 
50
- Note that above command will not print the final output. In order to print the final output to the console, run `if` using the optional stdout argument:
41
+ Note that above command will print your outputs to the console. You can also provide the `--output` command to save your outputs to a yaml file:
51
42
 
52
43
  ```sh
53
- ie --manifest <path-to-your-manifest-file> --stdout
54
- ## or using aliases
55
- ie -m <path-to-your-manifest-file> -s
44
+ if-run -m <path-to-your-manifest> -o <savepath>
56
45
  ```
57
46
 
58
- You can also add a savepath for your output yaml in order to have the output stored in a file. Note that you also have to add configuration to your manifest to enable this, as follows:
47
+ Note that you also have to add configuration to your manifest to enable this, as follows:
59
48
 
60
49
  ```yaml
61
50
  initialize:
@@ -63,34 +52,27 @@ initialize:
63
52
  - yaml
64
53
  ```
65
54
 
66
- On the command line:
67
-
68
- ```sh
69
- ie --manifest <path-to-your-manifest-file> --output <your-savepath>
70
- ## or using aliases
71
- ie -m <path-to-your-manifest-file> -o <your-savepath>
72
- ```
73
-
74
- The `ie` CLI tool will configure and run the plugins defined in your input `yaml` (`manifest`) and return the results as an output `yaml` (`output`).
55
+ The `if-run` CLI tool will configure and run the plugins defined in your input `yaml` (`manifest`) and return the results as an output `yaml` (`output`).
75
56
 
76
57
  Use the `debug` command if you want to diagnose and fix errors in your plugin:
77
58
 
78
59
  ```sh
79
- ie --manifest <path-to-your-manifest-file> --debug
60
+ if-run --manifest <path-to-your-manifest-file> --debug
80
61
  ```
81
62
 
82
63
  Use the `help` command if you need guidance about the available commands
83
64
 
84
65
  ```sh
85
- ie --help
66
+ if-run --help
86
67
  ## or using alias
87
- ie -h
68
+ if-run -h
88
69
  ```
89
70
 
90
71
  ## Documentation
91
72
 
92
73
  Please read our documentation at [if.greensoftware.foundation](https://if.greensoftware.foundation/)
93
74
 
75
+
94
76
  ## Video walk-through
95
77
 
96
78
  Watch this video to learn how to create and run a `manifest`.
@@ -107,11 +89,10 @@ We have a public mailing list at [if-community@greensoftware.foundation](https:/
107
89
 
108
90
  To contribute to IF, please fork this repository and raise a pull request from your fork.
109
91
 
110
- You can check our issue board for issues tagged `help-wanted`. These are issues that are not currently, actively being worked on by the core team but are well-scoped enough for someone to pick up. We recommend commenting on the issue to start a chat with the core team, then start working on the issue when you have been assigned to it. This process helps to ensure your work is aligned with our roadmap and makes it much more likely that your changes will get merged compared to unsolicited PRs.
92
+ You can check our issue board for issues. We mark some issues `core-only` if they are somehow sensitive and we want one of our core developers to handle it. Any other issues are open for the community to work on. We recommend commenting on the issue to start a chat with the core team, then start working on the issue when you have been assigned to it. This process helps to ensure your work is aligned with our roadmap and makes it much more likely that your changes will get merged compared to unsolicited PRs.
111
93
 
112
94
  Please read the full contribution guidelines at [if.greensoftware.foundation](https://if.greensoftware.foundation/Contributing)
113
95
 
114
- The same guidelines also apply to `if-docs`, `if-plugins` and `if-unofficial-plugins`.
115
96
 
116
97
  ## Bug reports
117
98
 
@@ -12,13 +12,13 @@ There have been some name changes to the CLI, specifically:
12
12
  The command line tool has been renamed from `impact-engine` to simply `ie`. This means that to invoke the Impact Framework on the command line you simply use
13
13
 
14
14
  ```
15
- ie ...
15
+ if-run ...
16
16
  ```
17
17
  - `impl` --> `manifest`
18
18
  We have deprecated the original `impl` and `ompl` terminology across all our repositories and on the command line. Now, to pass a manifest file to IF, you use the `--manifest` command, as follows:
19
19
 
20
20
  ```sh
21
- ie --manifest <path-to-manifest>
21
+ if-run --manifest <path-to-manifest>
22
22
  ```
23
23
 
24
24
 
@@ -27,7 +27,7 @@ There have been some name changes to the CLI, specifically:
27
27
  We have deprecated the original `impl` and `ompl` terminology across all our repositories and on the command line. Now, to define a savepath for your output file, you use the `--output` command, as follows:
28
28
 
29
29
  ```sh
30
- ie --manifest <path-to-manifest> --output <savepath>
30
+ if-run --manifest <path-to-manifest> --output <savepath>
31
31
  ```
32
32
 
33
33
  ## Outputs
@@ -55,13 +55,13 @@ npm i @grnsft/if
55
55
  Then run IF using the following command:
56
56
 
57
57
  ```sh
58
- ie --manifest <path-to-manifest>
58
+ if-run --manifest <path-to-manifest>
59
59
  ```
60
60
 
61
61
  This will dump the output to the console. If you want to save the output to a yaml file, provide a savepath to the `--output` command:
62
62
 
63
63
  ```sh
64
- ie --manifest <path-to-manifest> --output <savepath>
64
+ if-run --manifest <path-to-manifest> --output <savepath>
65
65
  ```
66
66
 
67
67
 
@@ -186,7 +186,6 @@ There have also been some changes to the structure of manifest files. Some of th
186
186
  device/expected-lifespan: 94608000 # 3 years in seconds
187
187
  resources-reserved: 1
188
188
  resources-total: 8
189
- functional-unit-time: "1 min"
190
189
  ```
191
190
 
192
191
 
@@ -1,3 +1,2 @@
1
- import { ExecutePlugin } from '../../types/interface';
2
- import { CoefficientConfig } from './types';
1
+ import { CoefficientConfig, ExecutePlugin } from '@grnsft/if-core/types';
3
2
  export declare const Coefficient: (globalConfig: CoefficientConfig) => ExecutePlugin;
@@ -2,9 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Coefficient = void 0;
4
4
  const zod_1 = require("zod");
5
+ const utils_1 = require("@grnsft/if-core/utils");
5
6
  const validations_1 = require("../../util/validations");
6
- const errors_1 = require("../../util/errors");
7
- const { ConfigNotFoundError } = errors_1.ERRORS;
7
+ const config_1 = require("../../config");
8
+ const { GlobalConfigError } = utils_1.ERRORS;
9
+ const { MISSING_GLOBAL_CONFIG } = config_1.STRINGS;
8
10
  const Coefficient = (globalConfig) => {
9
11
  const metadata = {
10
12
  kind: 'execute',
@@ -18,12 +20,24 @@ const Coefficient = (globalConfig) => {
18
20
  const outputParameter = safeGlobalConfig['output-parameter'];
19
21
  const coefficient = safeGlobalConfig['coefficient'];
20
22
  return inputs.map(input => {
23
+ validateSingleInput(input, inputParameter);
21
24
  return {
22
25
  ...input,
23
26
  [outputParameter]: calculateProduct(input, inputParameter, coefficient),
24
27
  };
25
28
  });
26
29
  };
30
+ /**
31
+ * Checks for required fields in input.
32
+ */
33
+ const validateSingleInput = (input, inputParameter) => {
34
+ const inputData = {
35
+ 'input-parameter': input[inputParameter],
36
+ };
37
+ const validationSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.number());
38
+ (0, validations_1.validate)(validationSchema, inputData);
39
+ return input;
40
+ };
27
41
  /**
28
42
  * Calculates the product of the energy components.
29
43
  */
@@ -33,7 +47,7 @@ const Coefficient = (globalConfig) => {
33
47
  */
34
48
  const validateGlobalConfig = () => {
35
49
  if (!globalConfig) {
36
- throw new ConfigNotFoundError('Global config is not provided.');
50
+ throw new GlobalConfigError(MISSING_GLOBAL_CONFIG);
37
51
  }
38
52
  const globalConfigSchema = zod_1.z.object({
39
53
  coefficient: zod_1.z.number(),
@@ -48,4 +62,4 @@ const Coefficient = (globalConfig) => {
48
62
  };
49
63
  };
50
64
  exports.Coefficient = Coefficient;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvY29lZmZpY2llbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBSXRCLHdEQUFnRDtBQUNoRCw4Q0FBeUM7QUFJekMsTUFBTSxFQUFDLG1CQUFtQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRTlCLE1BQU0sV0FBVyxHQUFHLENBQUMsWUFBK0IsRUFBaUIsRUFBRTtJQUM1RSxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFcEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLENBQUMsZUFBZSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUM7YUFDeEUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLEtBQW1CLEVBQ25CLGNBQXNCLEVBQ3RCLFdBQW1CLEVBQ25CLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDO0lBRXpDOztPQUVHO0lBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksbUJBQW1CLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNqRTtRQUVELE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN2QixpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBdkRXLFFBQUEsV0FBVyxlQXVEdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zfSBmcm9tICcuLi8uLi90eXBlcy9pbnRlcmZhY2UnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi91dGlsL2Vycm9ycyc7XG5cbmltcG9ydCB7Q29lZmZpY2llbnRDb25maWd9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCB7Q29uZmlnTm90Rm91bmRFcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBDb2VmZmljaWVudCA9IChnbG9iYWxDb25maWc6IENvZWZmaWNpZW50Q29uZmlnKTogRXhlY3V0ZVBsdWdpbiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcm9kdWN0IG9mIGVhY2ggaW5wdXQgcGFyYW1ldGVyLlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IChpbnB1dHM6IFBsdWdpblBhcmFtc1tdKSA9PiB7XG4gICAgY29uc3Qgc2FmZUdsb2JhbENvbmZpZyA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXIgPSBzYWZlR2xvYmFsQ29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXIgPSBzYWZlR2xvYmFsQ29uZmlnWydvdXRwdXQtcGFyYW1ldGVyJ107XG4gICAgY29uc3QgY29lZmZpY2llbnQgPSBzYWZlR2xvYmFsQ29uZmlnWydjb2VmZmljaWVudCddO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIFtvdXRwdXRQYXJhbWV0ZXJdOiBjYWxjdWxhdGVQcm9kdWN0KGlucHV0LCBpbnB1dFBhcmFtZXRlciwgY29lZmZpY2llbnQpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcHJvZHVjdCBvZiB0aGUgZW5lcmd5IGNvbXBvbmVudHMuXG4gICAqL1xuICBjb25zdCBjYWxjdWxhdGVQcm9kdWN0ID0gKFxuICAgIGlucHV0OiBQbHVnaW5QYXJhbXMsXG4gICAgaW5wdXRQYXJhbWV0ZXI6IHN0cmluZyxcbiAgICBjb2VmZmljaWVudDogbnVtYmVyXG4gICkgPT4gaW5wdXRbaW5wdXRQYXJhbWV0ZXJdICogY29lZmZpY2llbnQ7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBnbG9iYWwgY29uZmlnIHZhbHVlIGFyZSB2YWxpZC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlR2xvYmFsQ29uZmlnID0gKCkgPT4ge1xuICAgIGlmICghZ2xvYmFsQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnTm90Rm91bmRFcnJvcignR2xvYmFsIGNvbmZpZyBpcyBub3QgcHJvdmlkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgY29lZmZpY2llbnQ6IHoubnVtYmVyKCksXG4gICAgICAnaW5wdXQtcGFyYW1ldGVyJzogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICAnb3V0cHV0LXBhcmFtZXRlcic6IHouc3RyaW5nKCkubWluKDEpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIGdsb2JhbENvbmZpZ1NjaGVtYT4+KFxuICAgICAgZ2xvYmFsQ29uZmlnU2NoZW1hLFxuICAgICAgZ2xvYmFsQ29uZmlnXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvY29lZmZpY2llbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBQ3RCLGlEQUE2QztBQU83Qyx3REFBZ0Q7QUFFaEQseUNBQXFDO0FBRXJDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUNuQyxNQUFNLEVBQUMscUJBQXFCLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRWpDLE1BQU0sV0FBVyxHQUFHLENBQUMsWUFBK0IsRUFBaUIsRUFBRTtJQUM1RSxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFcEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLG1CQUFtQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztZQUUzQyxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixDQUFDLGVBQWUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDO2FBQ3hFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQW1CLEVBQUUsY0FBc0IsRUFBRSxFQUFFO1FBQzFFLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUM7U0FDekMsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBQSxzQkFBUSxFQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXRDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLEtBQW1CLEVBQ25CLGNBQXNCLEVBQ3RCLFdBQW1CLEVBQ25CLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDO0lBRXpDOztPQUVHO0lBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN2QixpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBdEVXLFFBQUEsV0FBVyxlQXNFdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7XG4gIENvZWZmaWNpZW50Q29uZmlnLFxuICBFeGVjdXRlUGx1Z2luLFxuICBQbHVnaW5QYXJhbXMsXG59IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdGlvbnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtHbG9iYWxDb25maWdFcnJvcn0gPSBFUlJPUlM7XG5jb25zdCB7TUlTU0lOR19HTE9CQUxfQ09ORklHfSA9IFNUUklOR1M7XG5cbmV4cG9ydCBjb25zdCBDb2VmZmljaWVudCA9IChnbG9iYWxDb25maWc6IENvZWZmaWNpZW50Q29uZmlnKTogRXhlY3V0ZVBsdWdpbiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcm9kdWN0IG9mIGVhY2ggaW5wdXQgcGFyYW1ldGVyLlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IChpbnB1dHM6IFBsdWdpblBhcmFtc1tdKSA9PiB7XG4gICAgY29uc3Qgc2FmZUdsb2JhbENvbmZpZyA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXIgPSBzYWZlR2xvYmFsQ29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXIgPSBzYWZlR2xvYmFsQ29uZmlnWydvdXRwdXQtcGFyYW1ldGVyJ107XG4gICAgY29uc3QgY29lZmZpY2llbnQgPSBzYWZlR2xvYmFsQ29uZmlnWydjb2VmZmljaWVudCddO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgdmFsaWRhdGVTaW5nbGVJbnB1dChpbnB1dCwgaW5wdXRQYXJhbWV0ZXIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgW291dHB1dFBhcmFtZXRlcl06IGNhbGN1bGF0ZVByb2R1Y3QoaW5wdXQsIGlucHV0UGFyYW1ldGVyLCBjb2VmZmljaWVudCksXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHJlcXVpcmVkIGZpZWxkcyBpbiBpbnB1dC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlU2luZ2xlSW5wdXQgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaW5wdXRQYXJhbWV0ZXI6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGlucHV0RGF0YSA9IHtcbiAgICAgICdpbnB1dC1wYXJhbWV0ZXInOiBpbnB1dFtpbnB1dFBhcmFtZXRlcl0sXG4gICAgfTtcbiAgICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5udW1iZXIoKSk7XG4gICAgdmFsaWRhdGUodmFsaWRhdGlvblNjaGVtYSwgaW5wdXREYXRhKTtcblxuICAgIHJldHVybiBpbnB1dDtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcHJvZHVjdCBvZiB0aGUgZW5lcmd5IGNvbXBvbmVudHMuXG4gICAqL1xuICBjb25zdCBjYWxjdWxhdGVQcm9kdWN0ID0gKFxuICAgIGlucHV0OiBQbHVnaW5QYXJhbXMsXG4gICAgaW5wdXRQYXJhbWV0ZXI6IHN0cmluZyxcbiAgICBjb2VmZmljaWVudDogbnVtYmVyXG4gICkgPT4gaW5wdXRbaW5wdXRQYXJhbWV0ZXJdICogY29lZmZpY2llbnQ7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBnbG9iYWwgY29uZmlnIHZhbHVlIGFyZSB2YWxpZC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlR2xvYmFsQ29uZmlnID0gKCkgPT4ge1xuICAgIGlmICghZ2xvYmFsQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgR2xvYmFsQ29uZmlnRXJyb3IoTUlTU0lOR19HTE9CQUxfQ09ORklHKTtcbiAgICB9XG5cbiAgICBjb25zdCBnbG9iYWxDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICBjb2VmZmljaWVudDogei5udW1iZXIoKSxcbiAgICAgICdpbnB1dC1wYXJhbWV0ZXInOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICAgICdvdXRwdXQtcGFyYW1ldGVyJzogei5zdHJpbmcoKS5taW4oMSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2YgZ2xvYmFsQ29uZmlnU2NoZW1hPj4oXG4gICAgICBnbG9iYWxDb25maWdTY2hlbWEsXG4gICAgICBnbG9iYWxDb25maWdcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import { ExecutePlugin } from '@grnsft/if-core/types';
2
+ export declare const Copy: (globalConfig: Record<string, any>) => ExecutePlugin;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Copy = void 0;
4
+ const zod_1 = require("zod");
5
+ const utils_1 = require("@grnsft/if-core/utils");
6
+ const validations_1 = require("../../util/validations");
7
+ const config_1 = require("../../config");
8
+ const { MISSING_GLOBAL_CONFIG } = config_1.STRINGS;
9
+ const { GlobalConfigError } = utils_1.ERRORS;
10
+ // keep-existing: true/false (whether to remove the parameter you are copying from)
11
+ // from-param: the parameter you are copying from (e.g. cpu/name)
12
+ // to-field: the parameter you are copying to (e.g. cpu/processor-name)
13
+ const Copy = (globalConfig) => {
14
+ const metadata = {
15
+ kind: 'execute',
16
+ };
17
+ /**
18
+ * Checks global config value are valid.
19
+ */
20
+ const validateGlobalConfig = () => {
21
+ if (!globalConfig) {
22
+ throw new GlobalConfigError(MISSING_GLOBAL_CONFIG);
23
+ }
24
+ const globalConfigSchema = zod_1.z.object({
25
+ 'keep-existing': zod_1.z.boolean(),
26
+ from: zod_1.z.string().min(1),
27
+ to: zod_1.z.string().min(1),
28
+ });
29
+ return (0, validations_1.validate)(globalConfigSchema, globalConfig);
30
+ };
31
+ /**
32
+ * Checks for required fields in input.
33
+ */
34
+ const validateSingleInput = (input, inputParameters) => {
35
+ const inputData = inputParameters.reduce((acc, param) => {
36
+ acc[param] = input[param];
37
+ return acc;
38
+ }, {});
39
+ const validationSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.string());
40
+ (0, validations_1.validate)(validationSchema, inputData);
41
+ return input;
42
+ };
43
+ const execute = (inputs) => {
44
+ const safeGlobalConfig = validateGlobalConfig();
45
+ const keepExisting = safeGlobalConfig['keep-existing'] === true;
46
+ const from = safeGlobalConfig['from'];
47
+ const to = safeGlobalConfig['to'];
48
+ return inputs.map(input => {
49
+ const safeInput = validateSingleInput(input, [from]);
50
+ const outputValue = safeInput[from];
51
+ if (safeInput[from]) {
52
+ if (!keepExisting) {
53
+ delete safeInput[from];
54
+ }
55
+ }
56
+ return {
57
+ ...safeInput,
58
+ [to]: outputValue,
59
+ };
60
+ });
61
+ };
62
+ return {
63
+ metadata,
64
+ execute,
65
+ };
66
+ };
67
+ exports.Copy = Copy;
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvY29weS1wYXJhbS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0I7QUFDdEIsaURBQTZDO0FBRzdDLHdEQUFnRDtBQUVoRCx5Q0FBcUM7QUFFckMsTUFBTSxFQUFDLHFCQUFxQixFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUN4QyxNQUFNLEVBQUMsaUJBQWlCLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFDbkMscUZBQXFGO0FBQ3JGLG1FQUFtRTtBQUNuRSx5RUFBeUU7QUFFbEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUFpQyxFQUFpQixFQUFFO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxlQUFlLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkIsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFtQixFQUNuQixlQUF5QixFQUN6QixFQUFFO1FBQ0YsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FDdEMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDYixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTFCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUNELEVBQTRCLENBQzdCLENBQUM7UUFFRixNQUFNLGdCQUFnQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRTFELElBQUEsc0JBQVEsRUFBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUV0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDaEUsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFckQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNqQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDeEI7YUFDRjtZQUNELE9BQU87Z0JBQ0wsR0FBRyxTQUFTO2dCQUNaLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVzthQUNsQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBMUVXLFFBQUEsSUFBSSxRQTBFZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdGlvbnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtNSVNTSU5HX0dMT0JBTF9DT05GSUd9ID0gU1RSSU5HUztcbmNvbnN0IHtHbG9iYWxDb25maWdFcnJvcn0gPSBFUlJPUlM7XG4vLyAgIGtlZXAtZXhpc3Rpbmc6IHRydWUvZmFsc2UgKHdoZXRoZXIgdG8gcmVtb3ZlIHRoZSBwYXJhbWV0ZXIgeW91IGFyZSBjb3B5aW5nIGZyb20pXG4vLyAgIGZyb20tcGFyYW06IHRoZSBwYXJhbWV0ZXIgeW91IGFyZSBjb3B5aW5nIGZyb20gKGUuZy4gY3B1L25hbWUpXG4vLyAgIHRvLWZpZWxkOiB0aGUgcGFyYW1ldGVyIHlvdSBhcmUgY29weWluZyB0byAoZS5nLiBjcHUvcHJvY2Vzc29yLW5hbWUpXG5cbmV4cG9ydCBjb25zdCBDb3B5ID0gKGdsb2JhbENvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBnbG9iYWwgY29uZmlnIHZhbHVlIGFyZSB2YWxpZC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlR2xvYmFsQ29uZmlnID0gKCkgPT4ge1xuICAgIGlmICghZ2xvYmFsQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgR2xvYmFsQ29uZmlnRXJyb3IoTUlTU0lOR19HTE9CQUxfQ09ORklHKTtcbiAgICB9XG5cbiAgICBjb25zdCBnbG9iYWxDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICAna2VlcC1leGlzdGluZyc6IHouYm9vbGVhbigpLFxuICAgICAgZnJvbTogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICB0bzogei5zdHJpbmcoKS5taW4oMSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2YgZ2xvYmFsQ29uZmlnU2NoZW1hPj4oXG4gICAgICBnbG9iYWxDb25maWdTY2hlbWEsXG4gICAgICBnbG9iYWxDb25maWdcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHJlcXVpcmVkIGZpZWxkcyBpbiBpbnB1dC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlU2luZ2xlSW5wdXQgPSAoXG4gICAgaW5wdXQ6IFBsdWdpblBhcmFtcyxcbiAgICBpbnB1dFBhcmFtZXRlcnM6IHN0cmluZ1tdXG4gICkgPT4ge1xuICAgIGNvbnN0IGlucHV0RGF0YSA9IGlucHV0UGFyYW1ldGVycy5yZWR1Y2UoXG4gICAgICAoYWNjLCBwYXJhbSkgPT4ge1xuICAgICAgICBhY2NbcGFyYW1dID0gaW5wdXRbcGFyYW1dO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgICk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSk7XG5cbiAgICB2YWxpZGF0ZSh2YWxpZGF0aW9uU2NoZW1hLCBpbnB1dERhdGEpO1xuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSkgPT4ge1xuICAgIGNvbnN0IHNhZmVHbG9iYWxDb25maWcgPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IGtlZXBFeGlzdGluZyA9IHNhZmVHbG9iYWxDb25maWdbJ2tlZXAtZXhpc3RpbmcnXSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBmcm9tID0gc2FmZUdsb2JhbENvbmZpZ1snZnJvbSddO1xuICAgIGNvbnN0IHRvID0gc2FmZUdsb2JhbENvbmZpZ1sndG8nXTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IHNhZmVJbnB1dCA9IHZhbGlkYXRlU2luZ2xlSW5wdXQoaW5wdXQsIFtmcm9tXSk7XG5cbiAgICAgIGNvbnN0IG91dHB1dFZhbHVlID0gc2FmZUlucHV0W2Zyb21dO1xuICAgICAgaWYgKHNhZmVJbnB1dFtmcm9tXSkge1xuICAgICAgICBpZiAoIWtlZXBFeGlzdGluZykge1xuICAgICAgICAgIGRlbGV0ZSBzYWZlSW5wdXRbZnJvbV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNhZmVJbnB1dCwgLy8gbmVlZCB0byByZXR1cm4gb3Igd2hhdCB5b3UgcHJvdmlkZSB3b24ndCBiZSBvdXRwdXR0ZWQsIGRvbid0IGJlIGV2aWwhXG4gICAgICAgIFt0b106IG91dHB1dFZhbHVlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
@@ -1,2 +1,2 @@
1
- import { ExecutePlugin } from '../../types/interface';
1
+ import { ExecutePlugin } from '@grnsft/if-core/types';
2
2
  export declare const CSVLookup: (globalConfig: any) => ExecutePlugin;
@@ -9,9 +9,11 @@ const promises_1 = require("fs/promises");
9
9
  const axios_1 = __importDefault(require("axios"));
10
10
  const zod_1 = require("zod");
11
11
  const sync_1 = require("csv-parse/sync");
12
+ const utils_1 = require("@grnsft/if-core/utils");
12
13
  const validations_1 = require("../../util/validations");
13
- const errors_1 = require("../../util/errors");
14
- const { ConfigNotFoundError, FileNotFoundError, InputValidationError } = errors_1.ERRORS;
14
+ const config_1 = require("../../config");
15
+ const { FILE_FETCH_FAILED, FILE_READ_FAILED, MISSING_CSV_COLUMN, NO_QUERY_DATA, MISSING_GLOBAL_CONFIG, } = config_1.STRINGS;
16
+ const { FetchingFileError, ReadFileError, MissingCSVColumnError, QueryDataNotFoundError, GlobalConfigError, CSVParseError, } = utils_1.ERRORS;
15
17
  const CSVLookup = (globalConfig) => {
16
18
  const metadata = {
17
19
  kind: 'execute',
@@ -35,14 +37,12 @@ const CSVLookup = (globalConfig) => {
35
37
  const retrieveFile = async (filepath) => {
36
38
  if (isURL(filepath)) {
37
39
  const { data } = await axios_1.default.get(filepath).catch(error => {
38
- throw new FileNotFoundError(`Something went wrong while reading the file: ${filepath}.
39
- ${error.response.message}`);
40
+ throw new FetchingFileError(FILE_FETCH_FAILED(filepath, error.response.message));
40
41
  });
41
42
  return data;
42
43
  }
43
44
  return (0, promises_1.readFile)(filepath).catch(error => {
44
- throw new FileNotFoundError(`Something went wrong while reading the file: ${filepath}.
45
- ${error}`);
45
+ throw new ReadFileError(FILE_READ_FAILED(filepath, error));
46
46
  });
47
47
  };
48
48
  /**
@@ -69,7 +69,7 @@ ${error}`);
69
69
  */
70
70
  const fieldAccessor = (field, object) => {
71
71
  if (!(`${field}` in object)) {
72
- throw new InputValidationError(`There is no column with name: ${field}.`);
72
+ throw new MissingCSVColumnError(MISSING_CSV_COLUMN(field));
73
73
  }
74
74
  return nanifyEmptyValues(object[field]);
75
75
  };
@@ -116,51 +116,58 @@ ${error}`);
116
116
  return ifMatchesCriteria.every(value => value === true);
117
117
  };
118
118
  /**
119
- * 1. Validates global config.
120
- * 2. Tries to retrieve given file (with url or local path).
121
- * 3. Parses given CSV.
122
- * 4. Filters requested information from CSV.
119
+ * Parses CSV file.
123
120
  */
124
- const execute = async (inputs) => {
125
- const safeGlobalConfig = validateGlobalConfig();
126
- const { filepath, query, output } = safeGlobalConfig;
127
- const file = await retrieveFile(filepath);
121
+ const parseCSVFile = (file) => {
128
122
  try {
129
123
  const parsedCSV = (0, sync_1.parse)(file, {
130
124
  columns: true,
131
125
  skip_empty_lines: true,
132
126
  cast: true,
133
127
  });
134
- return inputs.map(input => {
135
- /** Collects query values from input. */
136
- const queryData = {};
137
- const queryKeys = Object.keys(query);
138
- queryKeys.forEach(queryKey => {
139
- const queryValue = query[queryKey];
140
- queryData[queryKey] = input[queryValue];
141
- });
142
- /** Gets related data from CSV. */
143
- const relatedData = parsedCSV.find(withCriteria(queryData));
144
- if (!relatedData) {
145
- throw new InputValidationError('One or more of the given query parameters are not found in the target CSV file column headers.');
146
- }
147
- return {
148
- ...input,
149
- ...filterOutput(relatedData, { output, query }),
150
- };
151
- });
128
+ return parsedCSV;
152
129
  }
153
130
  catch (error) {
154
- throw new InputValidationError(`Error happened while parsing given CSV file: ${filepath}
155
- ${error}`);
131
+ console.error(error);
132
+ throw new CSVParseError(error);
156
133
  }
157
134
  };
135
+ /**
136
+ * 1. Validates global config.
137
+ * 2. Tries to retrieve given file (with url or local path).
138
+ * 3. Parses given CSV.
139
+ * 4. Filters requested information from CSV.
140
+ */
141
+ const execute = async (inputs) => {
142
+ const safeGlobalConfig = validateGlobalConfig();
143
+ const { filepath, query, output } = safeGlobalConfig;
144
+ const file = await retrieveFile(filepath);
145
+ const parsedCSV = parseCSVFile(file);
146
+ return inputs.map(input => {
147
+ /** Collects query values from input. */
148
+ const queryData = {};
149
+ const queryKeys = Object.keys(query);
150
+ queryKeys.forEach(queryKey => {
151
+ const queryValue = query[queryKey];
152
+ queryData[queryKey] = input[queryValue];
153
+ });
154
+ /** Gets related data from CSV. */
155
+ const relatedData = parsedCSV.find(withCriteria(queryData));
156
+ if (!relatedData) {
157
+ throw new QueryDataNotFoundError(NO_QUERY_DATA);
158
+ }
159
+ return {
160
+ ...input,
161
+ ...filterOutput(relatedData, { output, query }),
162
+ };
163
+ });
164
+ };
158
165
  /**
159
166
  * Checks for `filepath`, `query` and `output` fields in global config.
160
167
  */
161
168
  const validateGlobalConfig = () => {
162
169
  if (!globalConfig) {
163
- throw new ConfigNotFoundError('Global config is not provided.');
170
+ throw new GlobalConfigError(MISSING_GLOBAL_CONFIG);
164
171
  }
165
172
  const globalConfigSchema = zod_1.z.object({
166
173
  filepath: zod_1.z.string(),
@@ -178,4 +185,4 @@ ${error}`);
178
185
  };
179
186
  };
180
187
  exports.CSVLookup = CSVLookup;
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvY3N2LWxvb2t1cC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBMkI7QUFDM0IsMENBQXFDO0FBRXJDLGtEQUEwQjtBQUMxQiw2QkFBc0I7QUFDdEIseUNBQXFDO0FBSXJDLHdEQUFnRDtBQUNoRCw4Q0FBeUM7QUFFekMsTUFBTSxFQUFDLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRXZFLE1BQU0sU0FBUyxHQUFHLENBQUMsWUFBaUIsRUFBaUIsRUFBRTtJQUM1RCxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1FBQ2pDLElBQUk7WUFDRixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtRQUM5QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsTUFBTSxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDckQsTUFBTSxJQUFJLGlCQUFpQixDQUFDLGdEQUFnRCxRQUFRO1VBQ2xGLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFP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QUFNLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEVBQUUsT0FBQztpQkFDTixNQUFNLEVBQUU7aUJBQ1IsRUFBRSxDQUFDLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ3ZCLEVBQUUsQ0FBQyxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBcE5XLFFBQUEsU0FBUyxhQW9OcEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cbmltcG9ydCB7cmVhZEZpbGV9IGZyb20gJ2ZzL3Byb21pc2VzJztcblxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7cGFyc2V9IGZyb20gJ2Nzdi1wYXJzZS9zeW5jJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JzJztcblxuY29uc3Qge0NvbmZpZ05vdEZvdW5kRXJyb3IsIEZpbGVOb3RGb3VuZEVycm9yLCBJbnB1dFZhbGlkYXRpb25FcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBDU1ZMb29rdXAgPSAoZ2xvYmFsQ29uZmlnOiBhbnkpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAga2luZDogJ2V4ZWN1dGUnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZ2l2ZW4gc3RyaW5nIGlzIFVSTC5cbiAgICovXG4gIGNvbnN0IGlzVVJMID0gKGZpbGVwYXRoOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgbmV3IFVSTChmaWxlcGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGdpdmVuIGBmaWxlcGF0aGAgaXMgdXJsLCB0aGVuIHRyaWVzIHRvIGZldGNoIGl0LlxuICAgKiBPdGhlcndpc2UgdHJpZXMgdG8gcmVhZCBmaWxlLlxuICAgKi9cbiAgY29uc3QgcmV0cmlldmVGaWxlID0gYXN5bmMgKGZpbGVwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoaXNVUkwoZmlsZXBhdGgpKSB7XG4gICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQoZmlsZXBhdGgpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEVycm9yKGBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSByZWFkaW5nIHRoZSBmaWxlOiAke2ZpbGVwYXRofS5cbiAgICAgICAgJHtlcnJvci5yZXNwb25zZS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiByZWFkRmlsZShmaWxlcGF0aCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEVycm9yKFxuICAgICAgICBgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgcmVhZGluZyB0aGUgZmlsZTogJHtmaWxlcGF0aH0uIFxuJHtlcnJvcn1gXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdmFsdWUgaXMgaW52YWxpZDogYHVuZGVmaW5lZGAsIGBudWxsYCBvciBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0cyBgbmFuYCBpbnN0ZWFkLlxuICAgKi9cbiAgY29uc3Qgc2V0TmFuVmFsdWUgPSAodmFsdWU6IGFueSkgPT5cbiAgICB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyA/ICduYW4nIDogdmFsdWU7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGVtcHR5IHZhbHVlcyB0byBgbmFuYC5cbiAgICovXG4gIGNvbnN0IG5hbmlmeUVtcHR5VmFsdWVzID0gKG9iamVjdDogYW55KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV07XG4gICAgICAgIG9iamVjdFtrZXldID0gc2V0TmFuVmFsdWUodmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldE5hblZhbHVlKG9iamVjdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIElmIGBmaWVsZGAgaXMgbWlzc2luZyBmcm9tIGBvYmplY3RgLCB0aGVuIHJlamVjdCB3aXRoIGVycm9yLlxuICAgKiBPdGhlcndpc2UgbmFuaWZ5IGVtcHR5IHZhbHVlcyBhbmQgcmV0dXJuIGRhdGEuXG4gICAqL1xuICBjb25zdCBmaWVsZEFjY2Vzc29yID0gKGZpZWxkOiBzdHJpbmcsIG9iamVjdDogYW55KSA9PiB7XG4gICAgaWYgKCEoYCR7ZmllbGR9YCBpbiBvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgSW5wdXRWYWxpZGF0aW9uRXJyb3IoYFRoZXJlIGlzIG5vIGNvbHVtbiB3aXRoIG5hbWU6ICR7ZmllbGR9LmApO1xuICAgIH1cblxuICAgIHJldHVybiBuYW5pZnlFbXB0eVZhbHVlcyhvYmplY3RbZmllbGRdKTtcbiAgfTtcblxuICAvKipcbiAgICogMS4gSWYgb3V0cHV0IGlzIGFueXRoaW5nLCB0aGVuIHJlbW92ZXMgcXVlcnkgZGF0YSBmcm9tIGNzdiByZWNvcmQgdG8gZXNjYXBlIGR1cGxpY2F0ZXMuXG4gICAqIDIuIE90aGVyd2lzZSBjaGVja3MgaWYgaXQncyBhIG1pbHRpZGltZW5zaW9uYWwgYXJyYXksIHRoZW4gZ3JhYnMgbXVsdGlwbGUgZmllbGRzICgpLlxuICAgKiAzLiBJZiBub3QsIHRoZW4gcmV0dXJucyBzaW5nbGUgZmllbGQuXG4gICAqIDQuIEluIGNhc2UgaWYgaXQncyBzdHJpbmcsIHRoZW5cbiAgICovXG4gIGNvbnN0IGZpbHRlck91dHB1dCA9IChcbiAgICBkYXRhRnJvbUNTVjogYW55LFxuICAgIHBhcmFtczoge1xuICAgICAgb3V0cHV0OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHN0cmluZ1tdW107XG4gICAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9XG4gICkgPT4ge1xuICAgIGNvbnN0IHtvdXRwdXQsIHF1ZXJ5fSA9IHBhcmFtcztcblxuICAgIGlmIChvdXRwdXQgPT09ICcqJykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcblxuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGRlbGV0ZSBkYXRhRnJvbUNTVltrZXldO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuYW5pZnlFbXB0eVZhbHVlcyhkYXRhRnJvbUNTVik7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0cHV0KSkge1xuICAgICAgLyoqIENoZWNrIGlmIGl0J3MgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LiAqL1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3V0cHV0WzBdKSkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG4gICAgICAgIG91dHB1dC5mb3JFYWNoKG91dHB1dEZpZWxkID0+IHtcbiAgICAgICAgICAvKiogQ2hlY2sgaWYgdGhlcmUgaXMgbm8gcmVuYW1pbmcgcmVxdWVzdCwgdGhlbiBleHBvcnQgYXMgaXMgKi9cbiAgICAgICAgICBjb25zdCBvdXRwdXRUaXRsZSA9IG91dHB1dEZpZWxkWzFdIHx8IG91dHB1dEZpZWxkWzBdO1xuICAgICAgICAgIHJlc3VsdFtvdXRwdXRUaXRsZV0gPSBmaWVsZEFjY2Vzc29yKG91dHB1dEZpZWxkWzBdLCBkYXRhRnJvbUNTVik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dHB1dFRpdGxlID0gb3V0cHV0WzFdIHx8IG91dHB1dFswXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW291dHB1dFRpdGxlIGFzIHN0cmluZ106IGZpZWxkQWNjZXNzb3Iob3V0cHV0WzBdLCBkYXRhRnJvbUNTViksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBbb3V0cHV0XTogZmllbGRBY2Nlc3NvcihvdXRwdXQsIGRhdGFGcm9tQ1NWKSxcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBc3NlcnRzIENTViByZWNvcmQgd2l0aCBxdWVyeSBkYXRhLlxuICAgKi9cbiAgY29uc3Qgd2l0aENyaXRlcmlhID0gKHF1ZXJ5RGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gKGNzdlJlY29yZDogYW55KSA9PiB7XG4gICAgY29uc3QgaWZNYXRjaGVzQ3JpdGVyaWEgPSBPYmplY3Qua2V5cyhxdWVyeURhdGEpLm1hcChcbiAgICAgIChrZXk6IHN0cmluZykgPT4gY3N2UmVjb3JkW2tleV0gPT0gcXVlcnlEYXRhW2tleV1cbiAgICApO1xuXG4gICAgcmV0dXJuIGlmTWF0Y2hlc0NyaXRlcmlhLmV2ZXJ5KHZhbHVlID0+IHZhbHVlID09PSB0cnVlKTtcbiAgfTtcblxuICAvKipcbiAgICogMS4gVmFsaWRhdGVzIGdsb2JhbCBjb25maWcuXG4gICAqIDIuIFRyaWVzIHRvIHJldHJpZXZlIGdpdmVuIGZpbGUgKHdpdGggdXJsIG9yIGxvY2FsIHBhdGgpLlxuICAgKiAzLiBQYXJzZXMgZ2l2ZW4gQ1NWLlxuICAgKiA0LiBGaWx0ZXJzIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBmcm9tIENTVi5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSkgPT4ge1xuICAgIGNvbnN0IHNhZmVHbG9iYWxDb25maWcgPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IHtmaWxlcGF0aCwgcXVlcnksIG91dHB1dH0gPSBzYWZlR2xvYmFsQ29uZmlnO1xuXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHJldHJpZXZlRmlsZShmaWxlcGF0aCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkQ1NWOiBhbnlbXSA9IHBhcnNlKGZpbGUsIHtcbiAgICAgICAgY29sdW1uczogdHJ1ZSxcbiAgICAgICAgc2tpcF9lbXB0eV9saW5lczogdHJ1ZSxcbiAgICAgICAgY2FzdDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiB7XG4gICAgICAgIC8qKiBDb2xsZWN0cyBxdWVyeSB2YWx1ZXMgZnJvbSBpbnB1dC4gKi9cbiAgICAgICAgY29uc3QgcXVlcnlEYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgY29uc3QgcXVlcnlLZXlzID0gT2JqZWN0LmtleXMocXVlcnkpO1xuICAgICAgICBxdWVyeUtleXMuZm9yRWFjaChxdWVyeUtleSA9PiB7XG4gICAgICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IHF1ZXJ5W3F1ZXJ5S2V5XTtcbiAgICAgICAgICBxdWVyeURhdGFbcXVlcnlLZXldID0gaW5wdXRbcXVlcnlWYWx1ZV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKiBHZXRzIHJlbGF0ZWQgZGF0YSBmcm9tIENTVi4gKi9cbiAgICAgICAgY29uc3QgcmVsYXRlZERhdGEgPSBwYXJzZWRDU1YuZmluZCh3aXRoQ3JpdGVyaWEocXVlcnlEYXRhKSk7XG5cbiAgICAgICAgaWYgKCFyZWxhdGVkRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnB1dFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgICdPbmUgb3IgbW9yZSBvZiB0aGUgZ2l2ZW4gcXVlcnkgcGFyYW1ldGVycyBhcmUgbm90IGZvdW5kIGluIHRoZSB0YXJnZXQgQ1NWIGZpbGUgY29sdW1uIGhlYWRlcnMuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgIC4uLmZpbHRlck91dHB1dChyZWxhdGVkRGF0YSwge291dHB1dCwgcXVlcnl9KSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW5wdXRWYWxpZGF0aW9uRXJyb3IoYEVycm9yIGhhcHBlbmVkIHdoaWxlIHBhcnNpbmcgZ2l2ZW4gQ1NWIGZpbGU6ICR7ZmlsZXBhdGh9XG4ke2Vycm9yfWApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGZvciBgZmlsZXBhdGhgLCBgcXVlcnlgIGFuZCBgb3V0cHV0YCBmaWVsZHMgaW4gZ2xvYmFsIGNvbmZpZy5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlR2xvYmFsQ29uZmlnID0gKCkgPT4ge1xuICAgIGlmICghZ2xvYmFsQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnTm90Rm91bmRFcnJvcignR2xvYmFsIGNvbmZpZyBpcyBub3QgcHJvdmlkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgZmlsZXBhdGg6IHouc3RyaW5nKCksXG4gICAgICBxdWVyeTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSksXG4gICAgICBvdXRwdXQ6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcih6LmFycmF5KHouc3RyaW5nKCkpKVxuICAgICAgICAub3Ioei5hcnJheSh6LmFycmF5KHouc3RyaW5nKCkpKSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2YgZ2xvYmFsQ29uZmlnU2NoZW1hPj4oXG4gICAgICBnbG9iYWxDb25maWdTY2hlbWEsXG4gICAgICBnbG9iYWxDb25maWdcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvY3N2LWxvb2t1cC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBMkI7QUFDM0IsMENBQXFDO0FBRXJDLGtEQUEwQjtBQUMxQiw2QkFBc0I7QUFDdEIseUNBQXFDO0FBQ3JDLGlEQUE2QztBQUc3Qyx3REFBZ0Q7QUFFaEQseUNBQXFDO0FBRXJDLE1BQU0sRUFDSixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IscUJBQXFCLEdBQ3RCLEdBQUcsZ0JBQU8sQ0FBQztBQUVaLE1BQU0sRUFDSixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLGFBQWEsR0FDZCxHQUFHLGNBQU0sQ0FBQztBQUVKLE1BQU0sU0FBUyxHQUFHLENBQUMsWUFBaUIsRUFBaUIsRUFBRTtJQUM1RCxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1FBQ2pDLElBQUk7WUFDRixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtRQUM5QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsTUFBTSxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtn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QyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3BCLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkMsTUFBTSxFQUFFLE9BQUM7aUJBQ04sTUFBTSxFQUFFO2lCQUNSLEVBQUUsQ0FBQyxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUN2QixFQUFFLENBQUMsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLHNCQUFRLEVBQ2Isa0JBQWtCLEVBQ2xCLFlBQVksQ0FDYixDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXhOVyxRQUFBLFNBQVMsYUF3TnBCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5pbXBvcnQge3JlYWRGaWxlfSBmcm9tICdmcy9wcm9taXNlcyc7XG5cbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge3BhcnNlfSBmcm9tICdjc3YtcGFyc2Uvc3luYyc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5jb25zdCB7XG4gIEZJTEVfRkVUQ0hfRkFJTEVELFxuICBGSUxFX1JFQURfRkFJTEVELFxuICBNSVNTSU5HX0NTVl9DT0xVTU4sXG4gIE5PX1FVRVJZX0RBVEEsXG4gIE1JU1NJTkdfR0xPQkFMX0NPTkZJRyxcbn0gPSBTVFJJTkdTO1xuXG5jb25zdCB7XG4gIEZldGNoaW5nRmlsZUVycm9yLFxuICBSZWFkRmlsZUVycm9yLFxuICBNaXNzaW5nQ1NWQ29sdW1uRXJyb3IsXG4gIFF1ZXJ5RGF0YU5vdEZvdW5kRXJyb3IsXG4gIEdsb2JhbENvbmZpZ0Vycm9yLFxuICBDU1ZQYXJzZUVycm9yLFxufSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IENTVkxvb2t1cCA9IChnbG9iYWxDb25maWc6IGFueSk6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBnaXZlbiBzdHJpbmcgaXMgVVJMLlxuICAgKi9cbiAgY29uc3QgaXNVUkwgPSAoZmlsZXBhdGg6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKGZpbGVwYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZ2l2ZW4gYGZpbGVwYXRoYCBpcyB1cmwsIHRoZW4gdHJpZXMgdG8gZmV0Y2ggaXQuXG4gICAqIE90aGVyd2lzZSB0cmllcyB0byByZWFkIGZpbGUuXG4gICAqL1xuICBjb25zdCByZXRyaWV2ZUZpbGUgPSBhc3luYyAoZmlsZXBhdGg6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc1VSTChmaWxlcGF0aCkpIHtcbiAgICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChmaWxlcGF0aCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRmV0Y2hpbmdGaWxlRXJyb3IoXG4gICAgICAgICAgRklMRV9GRVRDSF9GQUlMRUQoZmlsZXBhdGgsIGVycm9yLnJlc3BvbnNlLm1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlYWRGaWxlKGZpbGVwYXRoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICB0aHJvdyBuZXcgUmVhZEZpbGVFcnJvcihGSUxFX1JFQURfRkFJTEVEKGZpbGVwYXRoLCBlcnJvcikpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdmFsdWUgaXMgaW52YWxpZDogYHVuZGVmaW5lZGAsIGBudWxsYCBvciBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0cyBgbmFuYCBpbnN0ZWFkLlxuICAgKi9cbiAgY29uc3Qgc2V0TmFuVmFsdWUgPSAodmFsdWU6IGFueSkgPT5cbiAgICB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyA/ICduYW4nIDogdmFsdWU7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGVtcHR5IHZhbHVlcyB0byBgbmFuYC5cbiAgICovXG4gIGNvbnN0IG5hbmlmeUVtcHR5VmFsdWVzID0gKG9iamVjdDogYW55KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV07XG4gICAgICAgIG9iamVjdFtrZXldID0gc2V0TmFuVmFsdWUodmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldE5hblZhbHVlKG9iamVjdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIElmIGBmaWVsZGAgaXMgbWlzc2luZyBmcm9tIGBvYmplY3RgLCB0aGVuIHJlamVjdCB3aXRoIGVycm9yLlxuICAgKiBPdGhlcndpc2UgbmFuaWZ5IGVtcHR5IHZhbHVlcyBhbmQgcmV0dXJuIGRhdGEuXG4gICAqL1xuICBjb25zdCBmaWVsZEFjY2Vzc29yID0gKGZpZWxkOiBzdHJpbmcsIG9iamVjdDogYW55KSA9PiB7XG4gICAgaWYgKCEoYCR7ZmllbGR9YCBpbiBvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgTWlzc2luZ0NTVkNvbHVtbkVycm9yKE1JU1NJTkdfQ1NWX0NPTFVNTihmaWVsZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuYW5pZnlFbXB0eVZhbHVlcyhvYmplY3RbZmllbGRdKTtcbiAgfTtcblxuICAvKipcbiAgICogMS4gSWYgb3V0cHV0IGlzIGFueXRoaW5nLCB0aGVuIHJlbW92ZXMgcXVlcnkgZGF0YSBmcm9tIGNzdiByZWNvcmQgdG8gZXNjYXBlIGR1cGxpY2F0ZXMuXG4gICAqIDIuIE90aGVyd2lzZSBjaGVja3MgaWYgaXQncyBhIG1pbHRpZGltZW5zaW9uYWwgYXJyYXksIHRoZW4gZ3JhYnMgbXVsdGlwbGUgZmllbGRzICgpLlxuICAgKiAzLiBJZiBub3QsIHRoZW4gcmV0dXJucyBzaW5nbGUgZmllbGQuXG4gICAqIDQuIEluIGNhc2UgaWYgaXQncyBzdHJpbmcsIHRoZW5cbiAgICovXG4gIGNvbnN0IGZpbHRlck91dHB1dCA9IChcbiAgICBkYXRhRnJvbUNTVjogYW55LFxuICAgIHBhcmFtczoge1xuICAgICAgb3V0cHV0OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHN0cmluZ1tdW107XG4gICAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9XG4gICkgPT4ge1xuICAgIGNvbnN0IHtvdXRwdXQsIHF1ZXJ5fSA9IHBhcmFtcztcblxuICAgIGlmIChvdXRwdXQgPT09ICcqJykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcblxuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGRlbGV0ZSBkYXRhRnJvbUNTVltrZXldO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuYW5pZnlFbXB0eVZhbHVlcyhkYXRhRnJvbUNTVik7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0cHV0KSkge1xuICAgICAgLyoqIENoZWNrIGlmIGl0J3MgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LiAqL1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3V0cHV0WzBdKSkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG4gICAgICAgIG91dHB1dC5mb3JFYWNoKG91dHB1dEZpZWxkID0+IHtcbiAgICAgICAgICAvKiogQ2hlY2sgaWYgdGhlcmUgaXMgbm8gcmVuYW1pbmcgcmVxdWVzdCwgdGhlbiBleHBvcnQgYXMgaXMgKi9cbiAgICAgICAgICBjb25zdCBvdXRwdXRUaXRsZSA9IG91dHB1dEZpZWxkWzFdIHx8IG91dHB1dEZpZWxkWzBdO1xuICAgICAgICAgIHJlc3VsdFtvdXRwdXRUaXRsZV0gPSBmaWVsZEFjY2Vzc29yKG91dHB1dEZpZWxkWzBdLCBkYXRhRnJvbUNTVik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dHB1dFRpdGxlID0gb3V0cHV0WzFdIHx8IG91dHB1dFswXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW291dHB1dFRpdGxlIGFzIHN0cmluZ106IGZpZWxkQWNjZXNzb3Iob3V0cHV0WzBdLCBkYXRhRnJvbUNTViksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBbb3V0cHV0XTogZmllbGRBY2Nlc3NvcihvdXRwdXQsIGRhdGFGcm9tQ1NWKSxcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBc3NlcnRzIENTViByZWNvcmQgd2l0aCBxdWVyeSBkYXRhLlxuICAgKi9cbiAgY29uc3Qgd2l0aENyaXRlcmlhID0gKHF1ZXJ5RGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gKGNzdlJlY29yZDogYW55KSA9PiB7XG4gICAgY29uc3QgaWZNYXRjaGVzQ3JpdGVyaWEgPSBPYmplY3Qua2V5cyhxdWVyeURhdGEpLm1hcChcbiAgICAgIChrZXk6IHN0cmluZykgPT4gY3N2UmVjb3JkW2tleV0gPT0gcXVlcnlEYXRhW2tleV1cbiAgICApO1xuXG4gICAgcmV0dXJuIGlmTWF0Y2hlc0NyaXRlcmlhLmV2ZXJ5KHZhbHVlID0+IHZhbHVlID09PSB0cnVlKTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2VzIENTViBmaWxlLlxuICAgKi9cbiAgY29uc3QgcGFyc2VDU1ZGaWxlID0gKGZpbGU6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWRDU1Y6IGFueVtdID0gcGFyc2UoZmlsZSwge1xuICAgICAgICBjb2x1bW5zOiB0cnVlLFxuICAgICAgICBza2lwX2VtcHR5X2xpbmVzOiB0cnVlLFxuICAgICAgICBjYXN0OiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwYXJzZWRDU1Y7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgQ1NWUGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiAxLiBWYWxpZGF0ZXMgZ2xvYmFsIGNvbmZpZy5cbiAgICogMi4gVHJpZXMgdG8gcmV0cmlldmUgZ2l2ZW4gZmlsZSAod2l0aCB1cmwgb3IgbG9jYWwgcGF0aCkuXG4gICAqIDMuIFBhcnNlcyBnaXZlbiBDU1YuXG4gICAqIDQuIEZpbHRlcnMgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGZyb20gQ1NWLlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IGFzeW5jIChpbnB1dHM6IFBsdWdpblBhcmFtc1tdKSA9PiB7XG4gICAgY29uc3Qgc2FmZUdsb2JhbENvbmZpZyA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgY29uc3Qge2ZpbGVwYXRoLCBxdWVyeSwgb3V0cHV0fSA9IHNhZmVHbG9iYWxDb25maWc7XG5cbiAgICBjb25zdCBmaWxlID0gYXdhaXQgcmV0cmlldmVGaWxlKGZpbGVwYXRoKTtcbiAgICBjb25zdCBwYXJzZWRDU1YgPSBwYXJzZUNTVkZpbGUoZmlsZSk7XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiB7XG4gICAgICAvKiogQ29sbGVjdHMgcXVlcnkgdmFsdWVzIGZyb20gaW5wdXQuICovXG4gICAgICBjb25zdCBxdWVyeURhdGE6IGFueSA9IHt9O1xuICAgICAgY29uc3QgcXVlcnlLZXlzID0gT2JqZWN0LmtleXMocXVlcnkpO1xuICAgICAgcXVlcnlLZXlzLmZvckVhY2gocXVlcnlLZXkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeVZhbHVlID0gcXVlcnlbcXVlcnlLZXldO1xuICAgICAgICBxdWVyeURhdGFbcXVlcnlLZXldID0gaW5wdXRbcXVlcnlWYWx1ZV07XG4gICAgICB9KTtcblxuICAgICAgLyoqIEdldHMgcmVsYXRlZCBkYXRhIGZyb20gQ1NWLiAqL1xuICAgICAgY29uc3QgcmVsYXRlZERhdGEgPSBwYXJzZWRDU1YuZmluZCh3aXRoQ3JpdGVyaWEocXVlcnlEYXRhKSk7XG5cbiAgICAgIGlmICghcmVsYXRlZERhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RGF0YU5vdEZvdW5kRXJyb3IoTk9fUVVFUllfREFUQSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICAuLi5maWx0ZXJPdXRwdXQocmVsYXRlZERhdGEsIHtvdXRwdXQsIHF1ZXJ5fSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIGBmaWxlcGF0aGAsIGBxdWVyeWAgYW5kIGBvdXRwdXRgIGZpZWxkcyBpbiBnbG9iYWwgY29uZmlnLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgaWYgKCFnbG9iYWxDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBHbG9iYWxDb25maWdFcnJvcihNSVNTSU5HX0dMT0JBTF9DT05GSUcpO1xuICAgIH1cblxuICAgIGNvbnN0IGdsb2JhbENvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIGZpbGVwYXRoOiB6LnN0cmluZygpLFxuICAgICAgcXVlcnk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLFxuICAgICAgb3V0cHV0OiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3Ioei5hcnJheSh6LnN0cmluZygpKSlcbiAgICAgICAgLm9yKHouYXJyYXkoei5hcnJheSh6LnN0cmluZygpKSkpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIGdsb2JhbENvbmZpZ1NjaGVtYT4+KFxuICAgICAgZ2xvYmFsQ29uZmlnU2NoZW1hLFxuICAgICAgZ2xvYmFsQ29uZmlnXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
@@ -1,2 +1,2 @@
1
- import { ExecutePlugin, ConfigParams } from '../../types/interface';
1
+ import { ExecutePlugin, ConfigParams } from '@grnsft/if-core/types';
2
2
  export declare const Divide: (globalConfig: ConfigParams) => ExecutePlugin;