@grnsft/if 0.7.1 → 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.
Files changed (245) hide show
  1. package/CONTRIBUTING.md +19 -6
  2. package/ENABLEMENT.md +115 -0
  3. package/README.md +0 -6
  4. package/SECURITY.md +100 -0
  5. package/adopters.md +9 -0
  6. package/build/common/config/strings.d.ts +2 -0
  7. package/build/common/config/strings.js +5 -3
  8. package/build/common/util/logger.js +3 -3
  9. package/build/common/util/yaml.js +19 -7
  10. package/build/if-check/util/npm.js +55 -9
  11. package/build/if-run/builtins/divide/index.js +2 -4
  12. package/build/if-run/builtins/exponent/index.js +3 -5
  13. package/build/if-run/builtins/interpolation/index.js +18 -10
  14. package/build/if-run/builtins/shell/index.js +2 -2
  15. package/build/if-run/lib/compute.js +8 -10
  16. package/build/if-run/lib/explain.js +69 -44
  17. package/build/if-run/lib/initialize.js +2 -2
  18. package/build/if-run/lib/regroup.d.ts +1 -1
  19. package/build/if-run/lib/regroup.js +41 -49
  20. package/build/if-run/types/explain.d.ts +3 -7
  21. package/build/if-run/types/explain.js +1 -1
  22. package/build/if-run/util/aggregation-helper.js +3 -3
  23. package/manifests/examples/builtins/interpolation/success-with-off.yml +24 -0
  24. package/manifests/outputs/bugs/package.json +24 -0
  25. package/manifests/outputs/builtins/coefficient/package.json +24 -0
  26. package/manifests/outputs/builtins/csv-lookup/cloud-metadata/package.json +24 -0
  27. package/manifests/outputs/builtins/csv-lookup/region-metadata/package.json +24 -0
  28. package/manifests/outputs/builtins/csv-lookup/tdp-finder/package.json +24 -0
  29. package/manifests/outputs/builtins/divide/package.json +24 -0
  30. package/manifests/outputs/builtins/exponent/package.json +24 -0
  31. package/manifests/outputs/builtins/interpolation/package.json +24 -0
  32. package/manifests/outputs/builtins/mock-observations/package.json +24 -0
  33. package/manifests/outputs/builtins/multiply/package.json +24 -0
  34. package/manifests/outputs/builtins/regex/package.json +24 -0
  35. package/manifests/outputs/builtins/sci/package.json +24 -0
  36. package/manifests/outputs/builtins/sci-embodied/package.json +24 -0
  37. package/manifests/outputs/builtins/shell/package.json +24 -0
  38. package/manifests/outputs/builtins/subtract/package.json +24 -0
  39. package/manifests/outputs/builtins/sum/package.json +24 -0
  40. package/manifests/outputs/builtins/time-converter/package.json +24 -0
  41. package/manifests/outputs/builtins/time-sync/package.json +24 -0
  42. package/manifests/outputs/features/package.json +24 -0
  43. package/manifests/outputs/features/regroup/package.json +24 -0
  44. package/manifests/outputs/pipelines/package.json +24 -0
  45. package/okrs.md +14 -0
  46. package/package.json +2 -2
  47. package/src/if-run/builtins/interpolation/README.md +1 -1
  48. package/.env +0 -5
  49. package/coverage/clover.xml +0 -2045
  50. package/coverage/coverage-final.json +0 -55
  51. package/coverage/lcov-report/base.css +0 -224
  52. package/coverage/lcov-report/block-navigation.js +0 -87
  53. package/coverage/lcov-report/builtins/coefficient/index.html +0 -116
  54. package/coverage/lcov-report/builtins/coefficient/index.ts.html +0 -298
  55. package/coverage/lcov-report/builtins/csv-lookup/index.html +0 -116
  56. package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +0 -826
  57. package/coverage/lcov-report/builtins/divide/index.html +0 -116
  58. package/coverage/lcov-report/builtins/divide/index.ts.html +0 -358
  59. package/coverage/lcov-report/builtins/exponent/index.html +0 -116
  60. package/coverage/lcov-report/builtins/exponent/index.ts.html +0 -361
  61. package/coverage/lcov-report/builtins/export-csv-raw.ts.html +0 -553
  62. package/coverage/lcov-report/builtins/export-csv.ts.html +0 -436
  63. package/coverage/lcov-report/builtins/export-log.ts.html +0 -148
  64. package/coverage/lcov-report/builtins/export-yaml.ts.html +0 -193
  65. package/coverage/lcov-report/builtins/group-by.ts.html +0 -370
  66. package/coverage/lcov-report/builtins/index.html +0 -206
  67. package/coverage/lcov-report/builtins/index.ts.html +0 -130
  68. package/coverage/lcov-report/builtins/interpolation/index.html +0 -116
  69. package/coverage/lcov-report/builtins/interpolation/index.ts.html +0 -676
  70. package/coverage/lcov-report/builtins/interpolation/types.ts.html +0 -100
  71. package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +0 -184
  72. package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +0 -131
  73. package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -289
  74. package/coverage/lcov-report/builtins/mock-observations/index.html +0 -116
  75. package/coverage/lcov-report/builtins/mock-observations/index.ts.html +0 -619
  76. package/coverage/lcov-report/builtins/multiply/index.html +0 -116
  77. package/coverage/lcov-report/builtins/multiply/index.ts.html +0 -343
  78. package/coverage/lcov-report/builtins/regex/index.html +0 -116
  79. package/coverage/lcov-report/builtins/regex/index.ts.html +0 -373
  80. package/coverage/lcov-report/builtins/sci/config.ts.html +0 -205
  81. package/coverage/lcov-report/builtins/sci/index.html +0 -116
  82. package/coverage/lcov-report/builtins/sci/index.ts.html +0 -325
  83. package/coverage/lcov-report/builtins/sci-embodied/index.html +0 -116
  84. package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +0 -478
  85. package/coverage/lcov-report/builtins/shell/index.html +0 -116
  86. package/coverage/lcov-report/builtins/shell/index.ts.html +0 -280
  87. package/coverage/lcov-report/builtins/subtract/index.html +0 -116
  88. package/coverage/lcov-report/builtins/subtract/index.ts.html +0 -379
  89. package/coverage/lcov-report/builtins/sum/index.html +0 -116
  90. package/coverage/lcov-report/builtins/sum/index.ts.html +0 -334
  91. package/coverage/lcov-report/builtins/time-sync.ts.html +0 -1462
  92. package/coverage/lcov-report/common/config/index.html +0 -131
  93. package/coverage/lcov-report/common/config/index.ts.html +0 -88
  94. package/coverage/lcov-report/common/config/strings.ts.html +0 -121
  95. package/coverage/lcov-report/common/lib/index.html +0 -116
  96. package/coverage/lcov-report/common/lib/load.ts.html +0 -139
  97. package/coverage/lcov-report/common/util/debug-logger.ts.html +0 -511
  98. package/coverage/lcov-report/common/util/fs.ts.html +0 -289
  99. package/coverage/lcov-report/common/util/helpers.ts.html +0 -280
  100. package/coverage/lcov-report/common/util/index.html +0 -191
  101. package/coverage/lcov-report/common/util/logger.ts.html +0 -151
  102. package/coverage/lcov-report/common/util/validations.ts.html +0 -613
  103. package/coverage/lcov-report/common/util/yaml.ts.html +0 -193
  104. package/coverage/lcov-report/config/config.ts.html +0 -463
  105. package/coverage/lcov-report/config/index.html +0 -161
  106. package/coverage/lcov-report/config/index.ts.html +0 -94
  107. package/coverage/lcov-report/config/params.ts.html +0 -697
  108. package/coverage/lcov-report/config/strings.ts.html +0 -490
  109. package/coverage/lcov-report/favicon.png +0 -0
  110. package/coverage/lcov-report/if-check/config/config.ts.html +0 -184
  111. package/coverage/lcov-report/if-check/config/index.html +0 -146
  112. package/coverage/lcov-report/if-check/config/index.ts.html +0 -91
  113. package/coverage/lcov-report/if-check/config/strings.ts.html +0 -142
  114. package/coverage/lcov-report/if-check/util/args.ts.html +0 -304
  115. package/coverage/lcov-report/if-check/util/helpers.ts.html +0 -136
  116. package/coverage/lcov-report/if-check/util/index.html +0 -146
  117. package/coverage/lcov-report/if-check/util/npm.ts.html +0 -232
  118. package/coverage/lcov-report/if-csv/util/helpers.ts.html +0 -346
  119. package/coverage/lcov-report/if-csv/util/index.html +0 -116
  120. package/coverage/lcov-report/if-diff/config/config.ts.html +0 -184
  121. package/coverage/lcov-report/if-diff/config/index.html +0 -146
  122. package/coverage/lcov-report/if-diff/config/index.ts.html +0 -91
  123. package/coverage/lcov-report/if-diff/config/strings.ts.html +0 -100
  124. package/coverage/lcov-report/if-diff/lib/compare.ts.html +0 -286
  125. package/coverage/lcov-report/if-diff/lib/index.html +0 -131
  126. package/coverage/lcov-report/if-diff/lib/load.ts.html +0 -199
  127. package/coverage/lcov-report/if-diff/util/args.ts.html +0 -268
  128. package/coverage/lcov-report/if-diff/util/helpers.ts.html +0 -337
  129. package/coverage/lcov-report/if-diff/util/index.html +0 -131
  130. package/coverage/lcov-report/if-env/config/config.ts.html +0 -211
  131. package/coverage/lcov-report/if-env/config/index.html +0 -146
  132. package/coverage/lcov-report/if-env/config/index.ts.html +0 -91
  133. package/coverage/lcov-report/if-env/config/strings.ts.html +0 -109
  134. package/coverage/lcov-report/if-env/util/args.ts.html +0 -250
  135. package/coverage/lcov-report/if-env/util/index.html +0 -131
  136. package/coverage/lcov-report/if-env/util/npm.ts.html +0 -526
  137. package/coverage/lcov-report/if-merge/util/args.ts.html +0 -295
  138. package/coverage/lcov-report/if-merge/util/helpers.ts.html +0 -301
  139. package/coverage/lcov-report/if-merge/util/index.html +0 -131
  140. package/coverage/lcov-report/if-run/builtins/coefficient/index.html +0 -116
  141. package/coverage/lcov-report/if-run/builtins/coefficient/index.ts.html +0 -382
  142. package/coverage/lcov-report/if-run/builtins/copy-param/index.html +0 -116
  143. package/coverage/lcov-report/if-run/builtins/copy-param/index.ts.html +0 -415
  144. package/coverage/lcov-report/if-run/builtins/csv-lookup/index.html +0 -116
  145. package/coverage/lcov-report/if-run/builtins/csv-lookup/index.ts.html +0 -868
  146. package/coverage/lcov-report/if-run/builtins/divide/index.html +0 -116
  147. package/coverage/lcov-report/if-run/builtins/divide/index.ts.html +0 -469
  148. package/coverage/lcov-report/if-run/builtins/exponent/index.html +0 -116
  149. package/coverage/lcov-report/if-run/builtins/exponent/index.ts.html +0 -394
  150. package/coverage/lcov-report/if-run/builtins/export-csv-raw.ts.html +0 -553
  151. package/coverage/lcov-report/if-run/builtins/export-csv.ts.html +0 -436
  152. package/coverage/lcov-report/if-run/builtins/export-log.ts.html +0 -148
  153. package/coverage/lcov-report/if-run/builtins/export-yaml.ts.html +0 -193
  154. package/coverage/lcov-report/if-run/builtins/group-by.ts.html +0 -370
  155. package/coverage/lcov-report/if-run/builtins/index.html +0 -146
  156. package/coverage/lcov-report/if-run/builtins/index.ts.html +0 -133
  157. package/coverage/lcov-report/if-run/builtins/interpolation/index.html +0 -116
  158. package/coverage/lcov-report/if-run/builtins/interpolation/index.ts.html +0 -709
  159. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/common-generator.ts.html +0 -184
  160. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/index.html +0 -131
  161. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -289
  162. package/coverage/lcov-report/if-run/builtins/mock-observations/index.html +0 -116
  163. package/coverage/lcov-report/if-run/builtins/mock-observations/index.ts.html +0 -709
  164. package/coverage/lcov-report/if-run/builtins/multiply/index.html +0 -116
  165. package/coverage/lcov-report/if-run/builtins/multiply/index.ts.html +0 -406
  166. package/coverage/lcov-report/if-run/builtins/regex/index.html +0 -116
  167. package/coverage/lcov-report/if-run/builtins/regex/index.ts.html +0 -433
  168. package/coverage/lcov-report/if-run/builtins/sci/index.html +0 -116
  169. package/coverage/lcov-report/if-run/builtins/sci/index.ts.html +0 -502
  170. package/coverage/lcov-report/if-run/builtins/sci-embodied/index.html +0 -116
  171. package/coverage/lcov-report/if-run/builtins/sci-embodied/index.ts.html +0 -577
  172. package/coverage/lcov-report/if-run/builtins/shell/index.html +0 -116
  173. package/coverage/lcov-report/if-run/builtins/shell/index.ts.html +0 -343
  174. package/coverage/lcov-report/if-run/builtins/subtract/index.html +0 -116
  175. package/coverage/lcov-report/if-run/builtins/subtract/index.ts.html +0 -418
  176. package/coverage/lcov-report/if-run/builtins/sum/index.html +0 -116
  177. package/coverage/lcov-report/if-run/builtins/sum/index.ts.html +0 -400
  178. package/coverage/lcov-report/if-run/builtins/time-converter/config.ts.html +0 -205
  179. package/coverage/lcov-report/if-run/builtins/time-converter/index.html +0 -131
  180. package/coverage/lcov-report/if-run/builtins/time-converter/index.ts.html +0 -412
  181. package/coverage/lcov-report/if-run/builtins/time-sync/index.html +0 -116
  182. package/coverage/lcov-report/if-run/builtins/time-sync/index.ts.html +0 -1651
  183. package/coverage/lcov-report/if-run/builtins/time-sync.ts.html +0 -1462
  184. package/coverage/lcov-report/if-run/config/config.ts.html +0 -271
  185. package/coverage/lcov-report/if-run/config/index.html +0 -161
  186. package/coverage/lcov-report/if-run/config/index.ts.html +0 -94
  187. package/coverage/lcov-report/if-run/config/params.ts.html +0 -679
  188. package/coverage/lcov-report/if-run/config/strings.ts.html +0 -460
  189. package/coverage/lcov-report/if-run/lib/aggregate.ts.html +0 -580
  190. package/coverage/lcov-report/if-run/lib/compute.ts.html +0 -709
  191. package/coverage/lcov-report/if-run/lib/environment.ts.html +0 -373
  192. package/coverage/lcov-report/if-run/lib/exhaust.ts.html +0 -193
  193. package/coverage/lcov-report/if-run/lib/explain.ts.html +0 -217
  194. package/coverage/lcov-report/if-run/lib/index.html +0 -206
  195. package/coverage/lcov-report/if-run/lib/initialize.ts.html +0 -475
  196. package/coverage/lcov-report/if-run/lib/parameterize.ts.html +0 -322
  197. package/coverage/lcov-report/if-run/lib/regroup.ts.html +0 -325
  198. package/coverage/lcov-report/if-run/lib/time-sync.ts.html +0 -1510
  199. package/coverage/lcov-report/if-run/types/aggregation.ts.html +0 -94
  200. package/coverage/lcov-report/if-run/types/index.html +0 -146
  201. package/coverage/lcov-report/if-run/types/interface.ts.html +0 -112
  202. package/coverage/lcov-report/if-run/types/parameters.ts.html +0 -106
  203. package/coverage/lcov-report/if-run/util/aggregation-helper.ts.html +0 -280
  204. package/coverage/lcov-report/if-run/util/args.ts.html +0 -313
  205. package/coverage/lcov-report/if-run/util/helpers.ts.html +0 -304
  206. package/coverage/lcov-report/if-run/util/index.html +0 -191
  207. package/coverage/lcov-report/if-run/util/json.ts.html +0 -115
  208. package/coverage/lcov-report/if-run/util/log-memoize.ts.html +0 -145
  209. package/coverage/lcov-report/if-run/util/os-checker.ts.html +0 -421
  210. package/coverage/lcov-report/if-run/util/plugin-storage.ts.html +0 -202
  211. package/coverage/lcov-report/index.html +0 -521
  212. package/coverage/lcov-report/lib/aggregate.ts.html +0 -358
  213. package/coverage/lcov-report/lib/compare.ts.html +0 -286
  214. package/coverage/lcov-report/lib/compute.ts.html +0 -436
  215. package/coverage/lcov-report/lib/environment.ts.html +0 -376
  216. package/coverage/lcov-report/lib/exhaust.ts.html +0 -289
  217. package/coverage/lcov-report/lib/index.html +0 -221
  218. package/coverage/lcov-report/lib/initialize.ts.html +0 -430
  219. package/coverage/lcov-report/lib/load.ts.html +0 -268
  220. package/coverage/lcov-report/lib/parameterize.ts.html +0 -316
  221. package/coverage/lcov-report/prettify.css +0 -1
  222. package/coverage/lcov-report/prettify.js +0 -2
  223. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  224. package/coverage/lcov-report/sorter.js +0 -196
  225. package/coverage/lcov-report/types/aggregation.ts.html +0 -94
  226. package/coverage/lcov-report/types/index.html +0 -146
  227. package/coverage/lcov-report/types/interface.ts.html +0 -112
  228. package/coverage/lcov-report/types/parameters.ts.html +0 -106
  229. package/coverage/lcov-report/util/aggregation-helper.ts.html +0 -289
  230. package/coverage/lcov-report/util/args.ts.html +0 -649
  231. package/coverage/lcov-report/util/debug-logger.ts.html +0 -481
  232. package/coverage/lcov-report/util/errors.ts.html +0 -232
  233. package/coverage/lcov-report/util/fs.ts.html +0 -124
  234. package/coverage/lcov-report/util/helpers.ts.html +0 -895
  235. package/coverage/lcov-report/util/index.html +0 -296
  236. package/coverage/lcov-report/util/json.ts.html +0 -115
  237. package/coverage/lcov-report/util/log-memoize.ts.html +0 -145
  238. package/coverage/lcov-report/util/logger.ts.html +0 -151
  239. package/coverage/lcov-report/util/npm.ts.html +0 -499
  240. package/coverage/lcov-report/util/os-checker.ts.html +0 -421
  241. package/coverage/lcov-report/util/plugin-storage.ts.html +0 -202
  242. package/coverage/lcov-report/util/validations.ts.html +0 -544
  243. package/coverage/lcov-report/util/yaml.ts.html +0 -193
  244. package/coverage/lcov.info +0 -3392
  245. package/manifests/outputs/features/regroup/test.yml +0 -92
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 stepos 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
+ 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. We hold weekly triage calls on Tuesdays. In most cases, the triage call will be the core team's first interaction with the bug, although in some cases we may engage asynchronously in advance of the call. Triage means that the core team will examine the issue and assign an urgency label - either Low, Medium or High.
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 | core pathways fail, IF very limited in functionality | 5 |
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
- During the bug triage we will also discuss a remediation plan for the bug. This will be communicated in the comments on the bug report. For high urgency bugs, the fix will be implemented as soon as possible, maybe reorganizing our current work to accommodate it. For medium priority bugs, we will schedule the fix in the next available sprint. 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
+ 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 `dev` branch of the IF repository with a clear title and description according to [template](.github/PULL_REQUEST_TEMPLATE.md).
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. Your name should describe what an element does as precisely as practically possible.
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
- [![Watch the walk-through video](https://i3.ytimg.com/vi/R-6eDM8AsvY/maxresdefault.jpg)](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*
@@ -8,4 +8,6 @@ export declare const STRINGS: {
8
8
  DIRECTORY_NOT_FOUND: string;
9
9
  AGGREGATION_UNITS_NOT_MATCH: (param: string) => string;
10
10
  AGGREGATION_METHODS_NOT_MATCH: (param: string) => string;
11
+ MISSING_INPUTS_PARAMETER: (pluginName: string) => string;
12
+ MISSING_OUTPUTS_PARAMETER: (pluginName: string) => string;
11
13
  };
@@ -13,7 +13,9 @@ Incubation projects are experimental, offer no support guarantee, have minimal g
13
13
  SUCCESS_MESSAGE: 'The environment is successfully setup!',
14
14
  MANIFEST_IS_MISSING: 'Manifest is missing.',
15
15
  DIRECTORY_NOT_FOUND: 'Directory not found.',
16
- AGGREGATION_UNITS_NOT_MATCH: (param) => `Your manifest uses two instances of ${param} with different units. Please check that you are using consistent units for ${param} throughout your manifest.`,
17
- AGGREGATION_METHODS_NOT_MATCH: (param) => `Your manifest uses two instances of ${param} with different 'aggregation-method'. Please check that you are using right 'aggregation-method' for ${param} throughout your manifest.`,
16
+ AGGREGATION_UNITS_NOT_MATCH: (param) => `Your manifest uses two instances of \`${param}\` with different units. Please check that you are using consistent units for \`${param}\` throughout your manifest.`,
17
+ AGGREGATION_METHODS_NOT_MATCH: (param) => `Your manifest uses two instances of \`${param}\` with different 'aggregation-method'. Please check that you are using right 'aggregation-method' for \`${param}\` throughout your manifest.`,
18
+ MISSING_INPUTS_PARAMETER: (pluginName) => `The inputs parameter metadata of the \`${pluginName}\` plugin is missing.`,
19
+ MISSING_OUTPUTS_PARAMETER: (pluginName) => `The outputs parameter metadata of the \`${pluginName}\` plugin is missing.`,
18
20
  };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vY29uZmlnL3N0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUc7SUFDckIsa0JBQWtCLEVBQUU7Ozs7Mk5BSXFNO0lBQ3pOLGtCQUFrQixFQUFFLDBDQUEwQztJQUM5RCxrQkFBa0IsRUFBRSwwQ0FBMEM7SUFDOUQsa0JBQWtCLEVBQUUsMEJBQTBCO0lBQzlDLGVBQWUsRUFBRSx3Q0FBd0M7SUFDekQsbUJBQW1CLEVBQUUsc0JBQXNCO0lBQzNDLG1CQUFtQixFQUFFLHNCQUFzQjtJQUMzQywyQkFBMkIsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQzdDLHVDQUF1QyxLQUFLLCtFQUErRSxLQUFLLDRCQUE0QjtJQUM5Siw2QkFBNkIsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQy9DLHVDQUF1QyxLQUFLLHdHQUF3RyxLQUFLLDRCQUE0QjtDQUN4TCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNUUklOR1MgPSB7XG4gIERJU0NMQUlNRVJfTUVTU0FHRTogYFxuSW5jdWJhdGlvbiBQcm9qZWN0XG5cblRoaXMgcHJvamVjdCBpcyBhbiBpbmN1YmF0aW9uIHByb2plY3QgYmVpbmcgcnVuIGluc2lkZSB0aGUgR3JlZW4gU29mdHdhcmUgRm91bmRhdGlvbjsgYXMgc3VjaCwgd2UgRE9O4oCZVCByZWNvbW1lbmQgdXNpbmcgaXQgaW4gYW55IGNyaXRpY2FsIHVzZSBjYXNlLiBcbkluY3ViYXRpb24gcHJvamVjdHMgYXJlIGV4cGVyaW1lbnRhbCwgb2ZmZXIgbm8gc3VwcG9ydCBndWFyYW50ZWUsIGhhdmUgbWluaW1hbCBnb3Zlcm5hbmNlIGFuZCBwcm9jZXNzLCBhbmQgbWF5IGJlIHJldGlyZWQgYXQgYW55IG1vbWVudC4gVGhpcyBwcm9qZWN0IG1heSBvbmUgZGF5IGdyYWR1YXRlLCBpbiB3aGljaCBjYXNlIHRoaXMgZGlzY2xhaW1lciB3aWxsIGJlIHJlbW92ZWQuYCxcbiAgU09VUkNFX0lTX05PVF9ZQU1MOiAnR2l2ZW4gc291cmNlIGZpbGUgaXMgbm90IGluIHlhbWwgZm9ybWF0LicsXG4gIFRBUkdFVF9JU19OT1RfWUFNTDogJ0dpdmVuIHRhcmdldCBmaWxlIGlzIG5vdCBpbiB5YW1sIGZvcm1hdC4nLFxuICBNQU5JRkVTVF9OT1RfRk9VTkQ6ICdNYW5pZmVzdCBmaWxlIG5vdCBmb3VuZC4nLFxuICBTVUNDRVNTX01FU1NBR0U6ICdUaGUgZW52aXJvbm1lbnQgaXMgc3VjY2Vzc2Z1bGx5IHNldHVwIScsXG4gIE1BTklGRVNUX0lTX01JU1NJTkc6ICdNYW5pZmVzdCBpcyBtaXNzaW5nLicsXG4gIERJUkVDVE9SWV9OT1RfRk9VTkQ6ICdEaXJlY3Rvcnkgbm90IGZvdW5kLicsXG4gIEFHR1JFR0FUSU9OX1VOSVRTX05PVF9NQVRDSDogKHBhcmFtOiBzdHJpbmcpID0+XG4gICAgYFlvdXIgbWFuaWZlc3QgdXNlcyB0d28gaW5zdGFuY2VzIG9mICR7cGFyYW19IHdpdGggZGlmZmVyZW50IHVuaXRzLiBQbGVhc2UgY2hlY2sgdGhhdCB5b3UgYXJlIHVzaW5nIGNvbnNpc3RlbnQgdW5pdHMgZm9yICR7cGFyYW19IHRocm91Z2hvdXQgeW91ciBtYW5pZmVzdC5gLFxuICBBR0dSRUdBVElPTl9NRVRIT0RTX05PVF9NQVRDSDogKHBhcmFtOiBzdHJpbmcpID0+XG4gICAgYFlvdXIgbWFuaWZlc3QgdXNlcyB0d28gaW5zdGFuY2VzIG9mICR7cGFyYW19IHdpdGggZGlmZmVyZW50ICdhZ2dyZWdhdGlvbi1tZXRob2QnLiBQbGVhc2UgY2hlY2sgdGhhdCB5b3UgYXJlIHVzaW5nIHJpZ2h0ICdhZ2dyZWdhdGlvbi1tZXRob2QnIGZvciAke3BhcmFtfSB0aHJvdWdob3V0IHlvdXIgbWFuaWZlc3QuYCxcbn07XG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vY29uZmlnL3N0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUc7SUFDckIsa0JBQWtCLEVBQUU7Ozs7Mk5BSXFNO0lBQ3pOLGtCQUFrQixFQUFFLDBDQUEwQztJQUM5RCxrQkFBa0IsRUFBRSwwQ0FBMEM7SUFDOUQsa0JBQWtCLEVBQUUsMEJBQTBCO0lBQzlDLGVBQWUsRUFBRSx3Q0FBd0M7SUFDekQsbUJBQW1CLEVBQUUsc0JBQXNCO0lBQzNDLG1CQUFtQixFQUFFLHNCQUFzQjtJQUMzQywyQkFBMkIsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQzdDLHlDQUF5QyxLQUFLLG1GQUFtRixLQUFLLDhCQUE4QjtJQUN0Syw2QkFBNkIsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQy9DLHlDQUF5QyxLQUFLLDRHQUE0RyxLQUFLLDhCQUE4QjtJQUMvTCx3QkFBd0IsRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUMvQywwQ0FBMEMsVUFBVSx1QkFBdUI7SUFDN0UseUJBQXlCLEVBQUUsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FDaEQsMkNBQTJDLFVBQVUsdUJBQXVCO0NBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU1RSSU5HUyA9IHtcbiAgRElTQ0xBSU1FUl9NRVNTQUdFOiBgXG5JbmN1YmF0aW9uIFByb2plY3RcblxuVGhpcyBwcm9qZWN0IGlzIGFuIGluY3ViYXRpb24gcHJvamVjdCBiZWluZyBydW4gaW5zaWRlIHRoZSBHcmVlbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBhcyBzdWNoLCB3ZSBET07igJlUIHJlY29tbWVuZCB1c2luZyBpdCBpbiBhbnkgY3JpdGljYWwgdXNlIGNhc2UuIFxuSW5jdWJhdGlvbiBwcm9qZWN0cyBhcmUgZXhwZXJpbWVudGFsLCBvZmZlciBubyBzdXBwb3J0IGd1YXJhbnRlZSwgaGF2ZSBtaW5pbWFsIGdvdmVybmFuY2UgYW5kIHByb2Nlc3MsIGFuZCBtYXkgYmUgcmV0aXJlZCBhdCBhbnkgbW9tZW50LiBUaGlzIHByb2plY3QgbWF5IG9uZSBkYXkgZ3JhZHVhdGUsIGluIHdoaWNoIGNhc2UgdGhpcyBkaXNjbGFpbWVyIHdpbGwgYmUgcmVtb3ZlZC5gLFxuICBTT1VSQ0VfSVNfTk9UX1lBTUw6ICdHaXZlbiBzb3VyY2UgZmlsZSBpcyBub3QgaW4geWFtbCBmb3JtYXQuJyxcbiAgVEFSR0VUX0lTX05PVF9ZQU1MOiAnR2l2ZW4gdGFyZ2V0IGZpbGUgaXMgbm90IGluIHlhbWwgZm9ybWF0LicsXG4gIE1BTklGRVNUX05PVF9GT1VORDogJ01hbmlmZXN0IGZpbGUgbm90IGZvdW5kLicsXG4gIFNVQ0NFU1NfTUVTU0FHRTogJ1RoZSBlbnZpcm9ubWVudCBpcyBzdWNjZXNzZnVsbHkgc2V0dXAhJyxcbiAgTUFOSUZFU1RfSVNfTUlTU0lORzogJ01hbmlmZXN0IGlzIG1pc3NpbmcuJyxcbiAgRElSRUNUT1JZX05PVF9GT1VORDogJ0RpcmVjdG9yeSBub3QgZm91bmQuJyxcbiAgQUdHUkVHQVRJT05fVU5JVFNfTk9UX01BVENIOiAocGFyYW06IHN0cmluZykgPT5cbiAgICBgWW91ciBtYW5pZmVzdCB1c2VzIHR3byBpbnN0YW5jZXMgb2YgXFxgJHtwYXJhbX1cXGAgd2l0aCBkaWZmZXJlbnQgdW5pdHMuIFBsZWFzZSBjaGVjayB0aGF0IHlvdSBhcmUgdXNpbmcgY29uc2lzdGVudCB1bml0cyBmb3IgXFxgJHtwYXJhbX1cXGAgdGhyb3VnaG91dCB5b3VyIG1hbmlmZXN0LmAsXG4gIEFHR1JFR0FUSU9OX01FVEhPRFNfTk9UX01BVENIOiAocGFyYW06IHN0cmluZykgPT5cbiAgICBgWW91ciBtYW5pZmVzdCB1c2VzIHR3byBpbnN0YW5jZXMgb2YgXFxgJHtwYXJhbX1cXGAgd2l0aCBkaWZmZXJlbnQgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCcuIFBsZWFzZSBjaGVjayB0aGF0IHlvdSBhcmUgdXNpbmcgcmlnaHQgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCcgZm9yIFxcYCR7cGFyYW19XFxgIHRocm91Z2hvdXQgeW91ciBtYW5pZmVzdC5gLFxuICBNSVNTSU5HX0lOUFVUU19QQVJBTUVURVI6IChwbHVnaW5OYW1lOiBzdHJpbmcpID0+XG4gICAgYFRoZSBpbnB1dHMgcGFyYW1ldGVyIG1ldGFkYXRhIG9mIHRoZSBcXGAke3BsdWdpbk5hbWV9XFxgIHBsdWdpbiBpcyBtaXNzaW5nLmAsXG4gIE1JU1NJTkdfT1VUUFVUU19QQVJBTUVURVI6IChwbHVnaW5OYW1lOiBzdHJpbmcpID0+XG4gICAgYFRoZSBvdXRwdXRzIHBhcmFtZXRlciBtZXRhZGF0YSBvZiB0aGUgXFxgJHtwbHVnaW5OYW1lfVxcYCBwbHVnaW4gaXMgbWlzc2luZy5gLFxufTtcbiJdfQ==
@@ -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
- ${info.stack || ''}`)),
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi91dGlsL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtQztBQUVuQyxNQUFNLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFFckU7O0dBRUc7QUFDVSxRQUFBLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxPQUFPLENBQ2IsUUFBUSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLEVBQ3JCLFNBQVMsQ0FBQztRQUNSLE1BQU0sRUFBRSwyQkFBMkI7S0FDcEMsQ0FBQyxFQUNGLEtBQUssRUFBRSxFQUNQLE1BQU0sQ0FDSixDQUFDLElBQVMsRUFBRSxFQUFFLENBQ1osSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU87RUFDeEQsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FDZixDQUNGO0lBQ0QsVUFBVSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQy9DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHdpbnN0b24gZnJvbSAnd2luc3Rvbic7XG5cbmNvbnN0IHtjb21iaW5lLCB0aW1lc3RhbXAsIHByaW50ZiwgY29sb3JpemUsIGFsaWdufSA9IHdpbnN0b24uZm9ybWF0O1xuXG4vKipcbiAqIFdpbnN0b24gbG9nZ2VyIGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIoe1xuICBmb3JtYXQ6IGNvbWJpbmUoXG4gICAgY29sb3JpemUoe2FsbDogdHJ1ZX0pLFxuICAgIHRpbWVzdGFtcCh7XG4gICAgICBmb3JtYXQ6ICdZWVlZLU1NLUREIGhoOm1tOnNzLlNTUyBBJyxcbiAgICB9KSxcbiAgICBhbGlnbigpLFxuICAgIHByaW50ZihcbiAgICAgIChpbmZvOiBhbnkpID0+XG4gICAgICAgIGBbJHtpbmZvLnRpbWVzdGFtcH1dICR7aW5mby5sZXZlbH06ICR7aW5mby5tZXNzYWdlfVxuJHtpbmZvLnN0YWNrIHx8ICcnfWBcbiAgICApXG4gICksXG4gIHRyYW5zcG9ydHM6IFtuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoKV0sXG59KTtcbiJdfQ==
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
- const yamlFileBuffer = await fs.readFile(filePath, 'utf8');
35
- return YAML.load(yamlFileBuffer);
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
- const dirPath = path.dirname(pathToFile);
43
- await fs.mkdir(dirPath, { recursive: true });
44
- const yamlString = YAML.dump(object, { noRefs: true });
45
- return fs.writeFile(pathToFile, yamlString);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vdXRpbC95YW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLDJDQUE2QjtBQUU3Qiw4Q0FBZ0M7QUFFaEM7O0dBRUc7QUFDSSxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBSyxRQUFnQixFQUFjLEVBQUU7SUFDNUUsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFNLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBSlcsUUFBQSxvQkFBb0Isd0JBSS9CO0FBRUY7O0dBRUc7QUFDSSxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsTUFBVyxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRXJELE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBTlcsUUFBQSxjQUFjLGtCQU16QjtBQUVGOztHQUVHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUNwRCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUzQyxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBUFcsUUFBQSxpQkFBaUIscUJBTzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0ICogYXMgWUFNTCBmcm9tICdqcy15YW1sJztcblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGB5YW1sYCBmaWxlIHRvIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5ZYW1sRmlsZUFzT2JqZWN0ID0gYXN5bmMgPFQ+KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgeWFtbEZpbGVCdWZmZXIgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICByZXR1cm4gWUFNTC5sb2FkKHlhbWxGaWxlQnVmZmVyKSBhcyBUO1xufTtcblxuLyoqXG4gKiBTYXZlcyBnaXZlbiBgeWFtbGAgZHVtcCBhcyBhIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzYXZlWWFtbEZpbGVBcyA9IGFzeW5jIChvYmplY3Q6IGFueSwgcGF0aFRvRmlsZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRpclBhdGggPSBwYXRoLmRpcm5hbWUocGF0aFRvRmlsZSk7XG4gIGF3YWl0IGZzLm1rZGlyKGRpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgY29uc3QgeWFtbFN0cmluZyA9IFlBTUwuZHVtcChvYmplY3QsIHtub1JlZnM6IHRydWV9KTtcblxuICByZXR1cm4gZnMud3JpdGVGaWxlKHBhdGhUb0ZpbGUsIHlhbWxTdHJpbmcpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgZ2l2ZW4gYGZpbGVOYW1lYCBpcyB5YW1sLlxuICovXG5leHBvcnQgY29uc3QgY2hlY2tJZkZpbGVJc1lhbWwgPSAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCB5YW1sRmlsZVR5cGVzID0gWyd5YW1sJywgJ3ltbCddO1xuICBjb25zdCBzcGxpdHRlZFBhcnRzID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3BsaXR0ZWRQYXJ0cy5sZW5ndGggLSAxO1xuICBjb25zdCBleHRlbnNpb24gPSBzcGxpdHRlZFBhcnRzW2xhc3RJbmRleF07XG5cbiAgcmV0dXJuIHlhbWxGaWxlVHlwZXMuaW5jbHVkZXMoZXh0ZW5zaW9uKTtcbn07XG4iXX0=
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 helpers_1 = require("../../common/util/helpers");
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 ifEnv = `${isGlobal ? `if-env ${prefixFlag}` : `npm run if-env ${prefixFlag} --`} -m ${manifest}`;
45
- const ifEnvCommand = cwd ? `${ifEnv} -c` : ifEnv;
46
- const ifRunCommand = `${isGlobal ? `if-run ${prefixFlag}` : `npm run if-run ${prefixFlag} --`} -m ${manifest} -o ${executedManifest}`;
47
- const ifDiffCommand = `${isGlobal ? `if-diff ${prefixFlag}` : `npm run if-diff ${prefixFlag} --`} -s ${executedManifest}.yaml -t ${manifest}`;
48
- const ttyCommand = " node -p 'Boolean(process.stdout.isTTY)'";
49
- await (0, helpers_1.execPromise)(`${ifEnvCommand} && ${ifRunCommand} && ${ttyCommand} | ${ifDiffCommand}`, {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lmLWNoZWNrL3V0aWwvbnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBRWxDLHVEQUFzRDtBQUN0RCw2Q0FBcUU7QUFFckUsc0NBQWtDO0FBRWxDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFcEM7O0dBRUc7QUFDSSxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxHQUFZLEVBQUUsRUFBRTtJQUN0RSw2REFBNkQ7SUFDN0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxNQUFNLGdCQUFnQixHQUFHLElBQUEsZ0JBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sVUFBVSxHQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDbEUsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUN0RSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsTUFBTSxLQUFLLEdBQUcsR0FDWixRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixVQUFVLEtBQ2xFLE9BQU8sUUFBUSxFQUFFLENBQUM7SUFDbEIsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakQsTUFBTSxZQUFZLEdBQUcsR0FDbkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsVUFBVSxLQUNsRSxPQUFPLFFBQVEsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLEdBQ3BCLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLFVBQVUsS0FDcEUsT0FBTyxnQkFBZ0IsWUFBWSxRQUFRLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFVBQVUsR0FBRywwQ0FBMEMsQ0FBQztJQUU5RCxNQUFNLElBQUEscUJBQVcsRUFDZixHQUFHLFlBQVksT0FBTyxZQUFZLE9BQU8sVUFBVSxNQUFNLGFBQWEsRUFBRSxFQUN4RTtRQUNFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0tBQzlDLENBQ0YsQ0FBQztJQUVGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDUixNQUFNLElBQUEsdUJBQWtCLEVBQUMsR0FBRyxlQUFlLGVBQWUsQ0FBQyxDQUFDO0tBQzdEO0lBRUQsTUFBTSxJQUFBLHVCQUFrQixFQUFDLEdBQUcsZ0JBQWdCLE9BQU8sQ0FBQyxDQUFDO0lBRXJELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDO0FBcENXLFFBQUEsZUFBZSxtQkFvQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQge2V4ZWNQcm9taXNlfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7Z2V0RmlsZU5hbWUsIHJlbW92ZUZpbGVJZkV4aXN0c30gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvZnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtJRl9DSEVDS19WRVJJRklFRH0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIEV4ZWN1dGVzIGEgc2VyaWVzIG9mIG5wbSBjb21tYW5kcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgbWFuaWZlc3QgZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVDb21tYW5kcyA9IGFzeW5jIChtYW5pZmVzdDogc3RyaW5nLCBjd2Q6IGJvb2xlYW4pID0+IHtcbiAgLy8gVE9ETzogQWZ0ZXIgcmVsZWFzZSByZW1vdmUgaXNHbG9iYWwgYW5kIGFwcHJvcHJpYXRlIGNoZWNrc1xuICBjb25zdCBpc0dsb2JhbCA9ICEhcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19nbG9iYWw7XG4gIGNvbnN0IG1hbmlmZXN0RGlyUGF0aCA9IHBhdGguZGlybmFtZShtYW5pZmVzdCk7XG4gIGNvbnN0IG1hbmlmZXN0RmlsZU5hbWUgPSBnZXRGaWxlTmFtZShtYW5pZmVzdCk7XG4gIGNvbnN0IGV4ZWN1dGVkTWFuaWZlc3QgPSBwYXRoLmpvaW4obWFuaWZlc3REaXJQYXRoLCBgcmUtJHttYW5pZmVzdEZpbGVOYW1lfWApO1xuICBjb25zdCBwcmVmaXhGbGFnID1cbiAgICBwcm9jZXNzLmVudi5DVVJSRU5UX0RJUiAmJiBwcm9jZXNzLmVudi5DVVJSRU5UX0RJUiAhPT0gcHJvY2Vzcy5jd2QoKVxuICAgICAgPyBgLS1wcmVmaXg9JHtwYXRoLnJlbGF0aXZlKHByb2Nlc3MuZW52LkNVUlJFTlRfRElSISwgcHJvY2Vzcy5jd2QoKSl9YFxuICAgICAgOiAnJztcbiAgY29uc3QgaWZFbnYgPSBgJHtcbiAgICBpc0dsb2JhbCA/IGBpZi1lbnYgJHtwcmVmaXhGbGFnfWAgOiBgbnBtIHJ1biBpZi1lbnYgJHtwcmVmaXhGbGFnfSAtLWBcbiAgfSAtbSAke21hbmlmZXN0fWA7XG4gIGNvbnN0IGlmRW52Q29tbWFuZCA9IGN3ZCA/IGAke2lmRW52fSAtY2AgOiBpZkVudjtcbiAgY29uc3QgaWZSdW5Db21tYW5kID0gYCR7XG4gICAgaXNHbG9iYWwgPyBgaWYtcnVuICR7cHJlZml4RmxhZ31gIDogYG5wbSBydW4gaWYtcnVuICR7cHJlZml4RmxhZ30gLS1gXG4gIH0gLW0gJHttYW5pZmVzdH0gLW8gJHtleGVjdXRlZE1hbmlmZXN0fWA7XG4gIGNvbnN0IGlmRGlmZkNvbW1hbmQgPSBgJHtcbiAgICBpc0dsb2JhbCA/IGBpZi1kaWZmICR7cHJlZml4RmxhZ31gIDogYG5wbSBydW4gaWYtZGlmZiAke3ByZWZpeEZsYWd9IC0tYFxuICB9IC1zICR7ZXhlY3V0ZWRNYW5pZmVzdH0ueWFtbCAtdCAke21hbmlmZXN0fWA7XG4gIGNvbnN0IHR0eUNvbW1hbmQgPSBcIiBub2RlIC1wICdCb29sZWFuKHByb2Nlc3Muc3Rkb3V0LmlzVFRZKSdcIjtcblxuICBhd2FpdCBleGVjUHJvbWlzZShcbiAgICBgJHtpZkVudkNvbW1hbmR9ICYmICR7aWZSdW5Db21tYW5kfSAmJiAke3R0eUNvbW1hbmR9IHwgJHtpZkRpZmZDb21tYW5kfWAsXG4gICAge1xuICAgICAgY3dkOiBwcm9jZXNzLmVudi5DVVJSRU5UX0RJUiB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgIH1cbiAgKTtcblxuICBpZiAoIWN3ZCkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVJZkV4aXN0cyhgJHttYW5pZmVzdERpclBhdGh9L3BhY2thZ2UuanNvbmApO1xuICB9XG5cbiAgYXdhaXQgcmVtb3ZlRmlsZUlmRXhpc3RzKGAke2V4ZWN1dGVkTWFuaWZlc3R9LnlhbWxgKTtcblxuICBjb25zb2xlLmxvZyhJRl9DSEVDS19WRVJJRklFRChwYXRoLmJhc2VuYW1lKG1hbmlmZXN0KSkpO1xufTtcbiJdfQ==
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL2RpdmlkZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0I7QUFHdEIsMkRBQXlEO0FBQ3pELGlEQUE2QztBQUU3QyxrRUFBMEQ7QUFFMUQseUNBQXFDO0FBRXJDLE1BQU0sRUFBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFDcEQsTUFBTSxFQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXZELFFBQUEsTUFBTSxHQUFHLElBQUEsMEJBQWEsRUFBQztJQUNsQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQW9CLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDM0MsTUFBTSxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2QztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEIsU0FBUyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtTQUNuQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxlQUFlLEVBQUUsQ0FBQyxLQUFtQixFQUFFLE1BQW9CLEVBQUUsRUFBRTtRQUM3RCxNQUFNLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxPQUFDO2FBQ2IsTUFBTSxDQUFDO1lBQ04sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUNyQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUMxRCxNQUFNLElBQUkscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUNsRTtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQXNCLEVBQUUsTUFBb0IsRUFBRSxFQUFFO1FBQ3JFLE1BQU0sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUVoRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDckQsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksU0FBUztnQkFDdkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVzthQUM5QyxDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixDQUFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQjthQUMzQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsMEJBQTBCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO0NBQ3pELENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsS0FBbUIsRUFDbkIsS0FBYSxFQUNiLE1BR0MsRUFDRCxFQUFFO0lBQ0YsTUFBTSxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDeEMsTUFBTSxnQkFBZ0IsR0FDcEIsT0FBTyxXQUFXLEtBQUssUUFBUTtRQUM3QixDQUFDLENBQUMsV0FBVztRQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDO0lBQ3hDLE1BQU0sY0FBYyxHQUNsQixPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRS9ELElBQUksZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRCxPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQzNDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtDb25maWdQYXJhbXMsIFBsdWdpblBhcmFtc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcbmltcG9ydCB7UGx1Z2luRmFjdG9yeX0gZnJvbSAnQGdybnNmdC9pZi1jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5jb25zdCB7TWlzc2luZ0lucHV0RGF0YUVycm9yLCBDb25maWdFcnJvcn0gPSBFUlJPUlM7XG5jb25zdCB7TUlTU0lOR19JTlBVVF9EQVRBLCBaRVJPX0RJVklTSU9OLCBNSVNTSU5HX0NPTkZJR30gPSBTVFJJTkdTO1xuXG5leHBvcnQgY29uc3QgRGl2aWRlID0gUGx1Z2luRmFjdG9yeSh7XG4gIGNvbmZpZ1ZhbGlkYXRpb246IChjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGlmICghY29uZmlnIHx8ICFPYmplY3Qua2V5cyhjb25maWcpPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcihNSVNTSU5HX0NPTkZJRyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgbnVtZXJhdG9yOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICAgIGRlbm9taW5hdG9yOiB6LnN0cmluZygpLm9yKHoubnVtYmVyKCkpLFxuICAgICAgb3V0cHV0OiB6LnN0cmluZygpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgY29uZmlnKTtcbiAgfSxcbiAgaW5wdXRWYWxpZGF0aW9uOiAoaW5wdXQ6IFBsdWdpblBhcmFtcywgY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBjb25zdCB7bnVtZXJhdG9yLCBkZW5vbWluYXRvcn0gPSBjb25maWc7XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgW251bWVyYXRvcl06IHoubnVtYmVyKCksXG4gICAgICAgIFtkZW5vbWluYXRvcl06IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIH0pXG4gICAgICAucmVmaW5lKCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZW5vbWluYXRvciA9PT0gJ3N0cmluZycgJiYgIWlucHV0W2Rlbm9taW5hdG9yXSkge1xuICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nSW5wdXREYXRhRXJyb3IoTUlTU0lOR19JTlBVVF9EQVRBKGRlbm9taW5hdG9yKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgaW5wdXQpO1xuICB9LFxuICBpbXBsZW1lbnRhdGlvbjogYXN5bmMgKGlucHV0czogUGx1Z2luUGFyYW1zW10sIGNvbmZpZzogQ29uZmlnUGFyYW1zKSA9PiB7XG4gICAgY29uc3Qge251bWVyYXRvciwgZGVub21pbmF0b3IsIG91dHB1dH0gPSBjb25maWc7XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkUmVzdWx0ID0gY2FsY3VsYXRlRGl2aWRlKGlucHV0LCBpbmRleCwge1xuICAgICAgICBudW1lcmF0b3I6IGlucHV0Lm51bWVyYXRvciB8fCBudW1lcmF0b3IsXG4gICAgICAgIGRlbm9taW5hdG9yOiBpbnB1dC5kZW5vbWluYXRvciB8fCBkZW5vbWluYXRvcixcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgW291dHB1dF06IGNhbGN1bGF0ZWRSZXN1bHQsXG4gICAgICB9O1xuICAgIH0pO1xuICB9LFxuICBhbGxvd0FyaXRobWV0aWNFeHByZXNzaW9uczogWydudW1lcmF0b3InLCAnZGVub21pbmF0b3InXSxcbn0pO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRpdmlzaW9uIG9mIHRoZSBnaXZlbiBwYXJhbWV0ZXIuXG4gKi9cbmNvbnN0IGNhbGN1bGF0ZURpdmlkZSA9IChcbiAgaW5wdXQ6IFBsdWdpblBhcmFtcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGFyYW1zOiB7XG4gICAgbnVtZXJhdG9yOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgZGVub21pbmF0b3I6IG51bWJlciB8IHN0cmluZztcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IHtkZW5vbWluYXRvciwgbnVtZXJhdG9yfSA9IHBhcmFtcztcbiAgY29uc3QgZmluYWxEZW5vbWluYXRvciA9XG4gICAgdHlwZW9mIGRlbm9taW5hdG9yID09PSAnbnVtYmVyJ1xuICAgICAgPyBkZW5vbWluYXRvclxuICAgICAgOiBpbnB1dFtkZW5vbWluYXRvcl0gfHwgZGVub21pbmF0b3I7XG4gIGNvbnN0IGZpbmFsTnVtZXJhdG9yID1cbiAgICB0eXBlb2YgbnVtZXJhdG9yID09PSAnbnVtYmVyJyA/IG51bWVyYXRvciA6IGlucHV0W251bWVyYXRvcl07XG5cbiAgaWYgKGZpbmFsRGVub21pbmF0b3IgPT09IDApIHtcbiAgICBjb25zb2xlLndhcm4oWkVST19ESVZJU0lPTihEaXZpZGUubmFtZSwgaW5kZXgpKTtcbiAgICByZXR1cm4gZmluYWxOdW1lcmF0b3I7XG4gIH1cblxuICByZXR1cm4gZmluYWxOdW1lcmF0b3IgLyBmaW5hbERlbm9taW5hdG9yO1xufTtcbiJdfQ==
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL2RpdmlkZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0I7QUFHdEIsMkRBQXlEO0FBQ3pELGlEQUE2QztBQUU3QyxrRUFBMEQ7QUFFMUQseUNBQXFDO0FBRXJDLE1BQU0sRUFBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFDcEQsTUFBTSxFQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXZELFFBQUEsTUFBTSxHQUFHLElBQUEsMEJBQWEsRUFBQztJQUNsQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQW9CLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDM0MsTUFBTSxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2QztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEIsU0FBUyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtTQUNuQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxlQUFlLEVBQUUsQ0FBQyxLQUFtQixFQUFFLE1BQW9CLEVBQUUsRUFBRTtRQUM3RCxNQUFNLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxPQUFDO2FBQ2IsTUFBTSxDQUFDO1lBQ04sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUNyQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUMxRCxNQUFNLElBQUkscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUNsRTtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQXNCLEVBQUUsTUFBb0IsRUFBRSxFQUFFO1FBQ3JFLE1BQU0sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUVoRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDckQsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksU0FBUztnQkFDdkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVzthQUM5QyxDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixDQUFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQjthQUMzQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsMEJBQTBCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO0NBQ3pELENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsS0FBbUIsRUFDbkIsS0FBYSxFQUNiLE1BR0MsRUFDRCxFQUFFO0lBQ0YsTUFBTSxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDeEMsTUFBTSxnQkFBZ0IsR0FDcEIsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRSxNQUFNLGNBQWMsR0FDbEIsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvRCxJQUFJLGdCQUFnQixLQUFLLENBQUMsRUFBRTtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxjQUFjLENBQUM7S0FDdkI7SUFFRCxPQUFPLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQztBQUMzQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7Q29uZmlnUGFyYW1zLCBQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5pbXBvcnQge1BsdWdpbkZhY3Rvcnl9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vLi4vY29uZmlnJztcblxuY29uc3Qge01pc3NpbmdJbnB1dERhdGFFcnJvciwgQ29uZmlnRXJyb3J9ID0gRVJST1JTO1xuY29uc3Qge01JU1NJTkdfSU5QVVRfREFUQSwgWkVST19ESVZJU0lPTiwgTUlTU0lOR19DT05GSUd9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IERpdmlkZSA9IFBsdWdpbkZhY3Rvcnkoe1xuICBjb25maWdWYWxpZGF0aW9uOiAoY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBpZiAoIWNvbmZpZyB8fCAhT2JqZWN0LmtleXMoY29uZmlnKT8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoTUlTU0lOR19DT05GSUcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIG51bWVyYXRvcjogei5zdHJpbmcoKS5taW4oMSksXG4gICAgICBkZW5vbWluYXRvcjogei5zdHJpbmcoKS5vcih6Lm51bWJlcigpKSxcbiAgICAgIG91dHB1dDogei5zdHJpbmcoKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGNvbmZpZyk7XG4gIH0sXG4gIGlucHV0VmFsaWRhdGlvbjogKGlucHV0OiBQbHVnaW5QYXJhbXMsIGNvbmZpZzogQ29uZmlnUGFyYW1zKSA9PiB7XG4gICAgY29uc3Qge251bWVyYXRvciwgZGVub21pbmF0b3J9ID0gY29uZmlnO1xuXG4gICAgY29uc3Qgc2NoZW1hID0gelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIFtudW1lcmF0b3JdOiB6Lm51bWJlcigpLFxuICAgICAgICBbZGVub21pbmF0b3JdOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLnJlZmluZSgoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVub21pbmF0b3IgPT09ICdzdHJpbmcnICYmICFpbnB1dFtkZW5vbWluYXRvcl0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ0lucHV0RGF0YUVycm9yKE1JU1NJTkdfSU5QVVRfREFUQShkZW5vbWluYXRvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGlucHV0KTtcbiAgfSxcbiAgaW1wbGVtZW50YXRpb246IGFzeW5jIChpbnB1dHM6IFBsdWdpblBhcmFtc1tdLCBjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGNvbnN0IHtudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBvdXRwdXR9ID0gY29uZmlnO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFJlc3VsdCA9IGNhbGN1bGF0ZURpdmlkZShpbnB1dCwgaW5kZXgsIHtcbiAgICAgICAgbnVtZXJhdG9yOiBpbnB1dC5udW1lcmF0b3IgfHwgbnVtZXJhdG9yLFxuICAgICAgICBkZW5vbWluYXRvcjogaW5wdXQuZGVub21pbmF0b3IgfHwgZGVub21pbmF0b3IsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIFtvdXRwdXRdOiBjYWxjdWxhdGVkUmVzdWx0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcbiAgYWxsb3dBcml0aG1ldGljRXhwcmVzc2lvbnM6IFsnbnVtZXJhdG9yJywgJ2Rlbm9taW5hdG9yJ10sXG59KTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkaXZpc2lvbiBvZiB0aGUgZ2l2ZW4gcGFyYW1ldGVyLlxuICovXG5jb25zdCBjYWxjdWxhdGVEaXZpZGUgPSAoXG4gIGlucHV0OiBQbHVnaW5QYXJhbXMsXG4gIGluZGV4OiBudW1iZXIsXG4gIHBhcmFtczoge1xuICAgIG51bWVyYXRvcjogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRlbm9taW5hdG9yOiBudW1iZXIgfCBzdHJpbmc7XG4gIH1cbikgPT4ge1xuICBjb25zdCB7ZGVub21pbmF0b3IsIG51bWVyYXRvcn0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpbmFsRGVub21pbmF0b3IgPVxuICAgIHR5cGVvZiBkZW5vbWluYXRvciA9PT0gJ251bWJlcicgPyBkZW5vbWluYXRvciA6IGlucHV0W2Rlbm9taW5hdG9yXTtcbiAgY29uc3QgZmluYWxOdW1lcmF0b3IgPVxuICAgIHR5cGVvZiBudW1lcmF0b3IgPT09ICdudW1iZXInID8gbnVtZXJhdG9yIDogaW5wdXRbbnVtZXJhdG9yXTtcblxuICBpZiAoZmluYWxEZW5vbWluYXRvciA9PT0gMCkge1xuICAgIGNvbnNvbGUud2FybihaRVJPX0RJVklTSU9OKERpdmlkZS5uYW1lLCBpbmRleCkpO1xuICAgIHJldHVybiBmaW5hbE51bWVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBmaW5hbE51bWVyYXRvciAvIGZpbmFsRGVub21pbmF0b3I7XG59O1xuIl19