@grnsft/if 0.3.4 → 0.4.0-beta.1

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 (259) hide show
  1. package/.commitlintrc.js +0 -1
  2. package/.lintstagedrc.js +6 -0
  3. package/README.md +12 -8
  4. package/Refactor-migration-guide.md +6 -6
  5. package/build/builtins/coefficient/index.d.ts +3 -0
  6. package/build/builtins/coefficient/index.js +51 -0
  7. package/build/builtins/coefficient/types.d.ts +5 -0
  8. package/build/builtins/coefficient/types.js +3 -0
  9. package/build/builtins/csv-lookup/index.d.ts +2 -0
  10. package/build/builtins/csv-lookup/index.js +181 -0
  11. package/build/builtins/divide/index.d.ts +2 -0
  12. package/build/builtins/divide/index.js +67 -0
  13. package/build/builtins/exponent/index.d.ts +3 -0
  14. package/build/builtins/exponent/index.js +72 -0
  15. package/build/builtins/exponent/types.d.ts +5 -0
  16. package/build/builtins/exponent/types.js +3 -0
  17. package/build/builtins/export-csv-raw.js +4 -1
  18. package/build/builtins/export-csv.js +4 -1
  19. package/build/builtins/export-log.js +4 -2
  20. package/build/builtins/export-yaml.js +4 -1
  21. package/build/builtins/index.d.ts +13 -0
  22. package/build/builtins/index.js +28 -2
  23. package/build/builtins/interpolation/index.d.ts +2 -0
  24. package/build/builtins/interpolation/index.js +146 -0
  25. package/build/builtins/interpolation/types.d.ts +5 -0
  26. package/build/builtins/interpolation/types.js +10 -0
  27. package/build/builtins/mock-observations/helpers/common-generator.d.ts +3 -0
  28. package/build/builtins/mock-observations/helpers/common-generator.js +32 -0
  29. package/build/builtins/mock-observations/helpers/rand-int-generator.d.ts +3 -0
  30. package/build/builtins/mock-observations/helpers/rand-int-generator.js +58 -0
  31. package/build/builtins/mock-observations/index.d.ts +3 -0
  32. package/build/builtins/mock-observations/index.js +116 -0
  33. package/build/builtins/mock-observations/interfaces/index.d.ts +6 -0
  34. package/build/builtins/mock-observations/interfaces/index.js +3 -0
  35. package/build/builtins/mock-observations/types.d.ts +13 -0
  36. package/build/builtins/mock-observations/types.js +3 -0
  37. package/build/builtins/multiply/index.d.ts +3 -0
  38. package/build/builtins/multiply/index.js +63 -0
  39. package/build/builtins/multiply/types.d.ts +4 -0
  40. package/build/builtins/multiply/types.js +3 -0
  41. package/build/builtins/regex/index.d.ts +3 -0
  42. package/build/builtins/regex/index.js +78 -0
  43. package/build/builtins/sci/config.d.ts +1 -0
  44. package/build/builtins/sci/config.js +44 -0
  45. package/build/builtins/sci/index.d.ts +3 -0
  46. package/build/builtins/sci/index.js +69 -0
  47. package/build/builtins/sci-embodied/index.d.ts +2 -0
  48. package/build/builtins/sci-embodied/index.js +115 -0
  49. package/build/builtins/shell/index.d.ts +3 -0
  50. package/build/builtins/shell/index.js +58 -0
  51. package/build/builtins/subtract/index.d.ts +3 -0
  52. package/build/builtins/subtract/index.js +75 -0
  53. package/build/builtins/subtract/types.d.ts +4 -0
  54. package/build/builtins/subtract/types.js +3 -0
  55. package/build/builtins/sum/index.d.ts +3 -0
  56. package/build/builtins/sum/index.js +61 -0
  57. package/build/builtins/sum/types.d.ts +4 -0
  58. package/build/builtins/sum/types.js +3 -0
  59. package/build/config/config.d.ts +8 -2
  60. package/build/config/config.js +34 -1
  61. package/build/config/strings.d.ts +22 -0
  62. package/build/config/strings.js +23 -1
  63. package/build/diff.d.ts +2 -0
  64. package/build/diff.js +41 -0
  65. package/build/index.js +8 -4
  66. package/build/lib/aggregate.js +5 -1
  67. package/build/lib/compare.d.ts +10 -0
  68. package/build/lib/compare.js +56 -0
  69. package/build/lib/compute.js +9 -1
  70. package/build/lib/environment.js +9 -3
  71. package/build/lib/exhaust.js +3 -2
  72. package/build/lib/initialize.js +5 -2
  73. package/build/lib/load.d.ts +48 -0
  74. package/build/lib/load.js +51 -2
  75. package/build/lib/parameterize.js +8 -4
  76. package/build/types/common.d.ts +4 -0
  77. package/build/types/common.js +3 -0
  78. package/build/types/helpers.d.ts +4 -0
  79. package/build/types/helpers.js +3 -0
  80. package/build/types/interface.d.ts +2 -1
  81. package/build/types/interface.js +1 -1
  82. package/build/types/lib/compare.d.ts +7 -0
  83. package/build/types/lib/compare.js +3 -0
  84. package/build/types/process-args.d.ts +7 -1
  85. package/build/types/process-args.js +1 -1
  86. package/build/types/util/args.d.ts +4 -0
  87. package/build/types/util/args.js +3 -0
  88. package/build/util/args.d.ts +7 -2
  89. package/build/util/args.js +49 -11
  90. package/build/util/debug-logger.d.ts +4 -0
  91. package/build/util/debug-logger.js +117 -0
  92. package/build/util/errors.d.ts +1 -1
  93. package/build/util/errors.js +6 -1
  94. package/build/util/helpers.d.ts +23 -0
  95. package/build/util/helpers.js +116 -2
  96. package/build/util/log-memoize.d.ts +1 -1
  97. package/build/util/log-memoize.js +1 -1
  98. package/build/util/validations.d.ts +59 -51
  99. package/build/util/validations.js +49 -18
  100. package/github-processes.md +16 -42
  101. package/manifests/bugs/aggregation-error-wrong-metric.yml +6 -6
  102. package/manifests/bugs/azure-importer-ignoring-defaults.yml +3 -3
  103. package/manifests/bugs/azure-importer-incorrect-calculation.yml +2 -2
  104. package/manifests/bugs/mock-observations-failure-duration-is-zero.yml +34 -0
  105. package/manifests/bugs/pipeline-error-uninitialized-plugin.yml +1 -1
  106. package/manifests/bugs/pipeline-ordering-error.yml +6 -6
  107. package/manifests/bugs/sci-embodied-missing-resources-total.yml +23 -0
  108. package/manifests/examples/generics.yml +3 -3
  109. package/manifests/examples/instance-metadata.yml +36 -0
  110. package/manifests/examples/mock-cpu-util-to-carbon.yml +3 -3
  111. package/manifests/examples/nesting.yml +37 -10
  112. package/manifests/examples/pipeline-teads-sci.yml +17 -9
  113. package/manifests/examples/pipeline-with-aggregate.yml +24 -9
  114. package/manifests/examples/pipeline-with-mocks.yml +26 -9
  115. package/manifests/examples/sci.yml +131 -0
  116. package/manifests/examples/teads-curve.yml +78 -0
  117. package/manifests/features/aggregate-failure-inalid-metrics.yml +43 -0
  118. package/manifests/features/aggregate-failure-missing-metric-in-inputs.yml +43 -0
  119. package/manifests/integrations/cloud-metadata-divide-boavizta.yml +1 -1
  120. package/manifests/integrations/mock-obs-group-by-cloud-meta.yml +51 -0
  121. package/manifests/integrations/mock-obs-groupby.yml +2 -2
  122. package/manifests/integrations/mock-obs-time-sync.yml +1 -1
  123. package/manifests/plugins/cloud-metadata/failure-invalid-instance-type.yaml +21 -0
  124. package/manifests/plugins/cloud-metadata/failure-invalid-vendor.yaml +1 -1
  125. package/manifests/plugins/cloud-metadata/failure-missing-cloud-vendor.yml +21 -0
  126. package/manifests/plugins/cloud-metadata/success.yml +1 -1
  127. package/manifests/plugins/coefficient/failure-invalid-config-input-param.yml +1 -1
  128. package/manifests/plugins/coefficient/failure-output-param-is-null.yaml +24 -0
  129. package/manifests/plugins/coefficient/success.yml +1 -1
  130. package/manifests/plugins/csv-lookup/failure-missing-column.yml +26 -0
  131. package/manifests/plugins/csv-lookup/failure-missing-output.yml +26 -0
  132. package/manifests/plugins/csv-lookup/success-renaming.yml +26 -0
  133. package/manifests/plugins/csv-lookup/success.yml +26 -0
  134. package/manifests/plugins/divide/failure-denominator-equal-zero.yml +39 -0
  135. package/manifests/plugins/divide/failure-invalid-config-denominator.yml +1 -1
  136. package/manifests/plugins/divide/failure-missing-numerator.yml +39 -0
  137. package/manifests/plugins/divide/success.yml +2 -2
  138. package/manifests/plugins/groupby/failure-missing-cloud-instance-type.yml +49 -0
  139. package/manifests/plugins/interpolation/interpolation.yml +24 -0
  140. package/manifests/plugins/mock-observations/failure-invalid-config-cpu-range.yml +1 -1
  141. package/manifests/plugins/mock-observations/failure-invalid-memory-utilization-range.yml +34 -0
  142. package/manifests/plugins/mock-observations/failure-missing-timestamp-from-param.yml +34 -0
  143. package/manifests/plugins/mock-observations/success.yml +2 -2
  144. package/manifests/plugins/multiply/failure-input-parameter-is-missing.yml +1 -1
  145. package/manifests/plugins/multiply/success-with-multiple-inputs.yml +32 -0
  146. package/manifests/plugins/multiply/success.yml +3 -3
  147. package/manifests/plugins/regex/failure-missing-input-param.yml +1 -1
  148. package/manifests/plugins/regex/failure-not-matching-with-regex.yml +24 -0
  149. package/manifests/plugins/regex/success.yml +2 -2
  150. package/manifests/plugins/sci/failure-invalid-config-value.yml +2 -3
  151. package/manifests/plugins/sci/failure-missing-input-param.yml +27 -0
  152. package/manifests/plugins/sci/success.yml +5 -4
  153. package/manifests/plugins/{sci-m → sci-embodied}/failure-invalid-default-emission-value.yml +5 -6
  154. package/manifests/plugins/sci-embodied/failure-missing-expected-lifespan.yml +23 -0
  155. package/manifests/plugins/{sci-m → sci-embodied}/success.yml +5 -6
  156. package/manifests/plugins/shell/failure-invalid-command.yml +1 -1
  157. package/manifests/plugins/shell/success.yml +1 -2
  158. package/manifests/plugins/sum/failure-missing-input-param.yml +1 -1
  159. package/manifests/plugins/sum/failure-missing-output-param.yml +28 -0
  160. package/manifests/plugins/sum/success.yml +1 -1
  161. package/manifests/plugins/tdp-finder/failure-unsupported-physical-processor.yml +19 -0
  162. package/manifests/plugins/time-sync/failure-missing-global-config.yml +34 -0
  163. package/package.json +10 -2
  164. package/src/builtins/README.md +5 -5
  165. package/src/builtins/coefficient/README.md +92 -0
  166. package/src/builtins/csv-lookup/README.md +142 -0
  167. package/src/builtins/divide/README.md +95 -0
  168. package/src/builtins/exponent/README.md +97 -0
  169. package/src/builtins/interpolation/README.md +168 -0
  170. package/src/builtins/mock-observations/README.md +97 -0
  171. package/src/builtins/multiply/README.md +94 -0
  172. package/src/builtins/regex/README.md +91 -0
  173. package/src/builtins/sci/README.md +89 -0
  174. package/src/builtins/sci-embodied/README.md +110 -0
  175. package/src/builtins/shell/README.md +130 -0
  176. package/src/builtins/subtract/README.md +94 -0
  177. package/src/builtins/sum/README.md +91 -0
  178. package/.env +0 -5
  179. package/coverage/clover.xml +0 -1590
  180. package/coverage/coverage-final.json +0 -50
  181. package/coverage/lcov-report/base.css +0 -224
  182. package/coverage/lcov-report/block-navigation.js +0 -87
  183. package/coverage/lcov-report/builtins/coefficient/index.html +0 -116
  184. package/coverage/lcov-report/builtins/coefficient/index.ts.html +0 -295
  185. package/coverage/lcov-report/builtins/csv-lookup/index.html +0 -116
  186. package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +0 -832
  187. package/coverage/lcov-report/builtins/divide/index.html +0 -116
  188. package/coverage/lcov-report/builtins/divide/index.ts.html +0 -361
  189. package/coverage/lcov-report/builtins/exponent/index.html +0 -116
  190. package/coverage/lcov-report/builtins/exponent/index.ts.html +0 -355
  191. package/coverage/lcov-report/builtins/export-csv-raw.ts.html +0 -553
  192. package/coverage/lcov-report/builtins/export-csv.ts.html +0 -433
  193. package/coverage/lcov-report/builtins/export-log.ts.html +0 -145
  194. package/coverage/lcov-report/builtins/export-yaml.ts.html +0 -184
  195. package/coverage/lcov-report/builtins/group-by.ts.html +0 -364
  196. package/coverage/lcov-report/builtins/index.html +0 -206
  197. package/coverage/lcov-report/builtins/index.ts.html +0 -130
  198. package/coverage/lcov-report/builtins/interpolation/index.html +0 -131
  199. package/coverage/lcov-report/builtins/interpolation/index.ts.html +0 -670
  200. package/coverage/lcov-report/builtins/interpolation/types.ts.html +0 -100
  201. package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +0 -181
  202. package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +0 -131
  203. package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -295
  204. package/coverage/lcov-report/builtins/mock-observations/index.html +0 -116
  205. package/coverage/lcov-report/builtins/mock-observations/index.ts.html +0 -613
  206. package/coverage/lcov-report/builtins/multiply/index.html +0 -116
  207. package/coverage/lcov-report/builtins/multiply/index.ts.html +0 -337
  208. package/coverage/lcov-report/builtins/regex/index.html +0 -116
  209. package/coverage/lcov-report/builtins/regex/index.ts.html +0 -379
  210. package/coverage/lcov-report/builtins/sci/config.ts.html +0 -205
  211. package/coverage/lcov-report/builtins/sci/index.html +0 -116
  212. package/coverage/lcov-report/builtins/sci/index.ts.html +0 -331
  213. package/coverage/lcov-report/builtins/sci-embodied/index.html +0 -116
  214. package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +0 -481
  215. package/coverage/lcov-report/builtins/shell/index.html +0 -116
  216. package/coverage/lcov-report/builtins/shell/index.ts.html +0 -283
  217. package/coverage/lcov-report/builtins/subtract/index.html +0 -116
  218. package/coverage/lcov-report/builtins/subtract/index.ts.html +0 -373
  219. package/coverage/lcov-report/builtins/sum/index.html +0 -116
  220. package/coverage/lcov-report/builtins/sum/index.ts.html +0 -340
  221. package/coverage/lcov-report/builtins/time-sync.ts.html +0 -1459
  222. package/coverage/lcov-report/config/config.ts.html +0 -334
  223. package/coverage/lcov-report/config/index.html +0 -161
  224. package/coverage/lcov-report/config/index.ts.html +0 -94
  225. package/coverage/lcov-report/config/params.ts.html +0 -697
  226. package/coverage/lcov-report/config/strings.ts.html +0 -415
  227. package/coverage/lcov-report/favicon.png +0 -0
  228. package/coverage/lcov-report/index.html +0 -386
  229. package/coverage/lcov-report/lib/aggregate.ts.html +0 -331
  230. package/coverage/lcov-report/lib/compare.ts.html +0 -283
  231. package/coverage/lcov-report/lib/compute.ts.html +0 -391
  232. package/coverage/lcov-report/lib/environment.ts.html +0 -343
  233. package/coverage/lcov-report/lib/exhaust.ts.html +0 -283
  234. package/coverage/lcov-report/lib/index.html +0 -221
  235. package/coverage/lcov-report/lib/initialize.ts.html +0 -388
  236. package/coverage/lcov-report/lib/load.ts.html +0 -268
  237. package/coverage/lcov-report/lib/parameterize.ts.html +0 -283
  238. package/coverage/lcov-report/prettify.css +0 -1
  239. package/coverage/lcov-report/prettify.js +0 -2
  240. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  241. package/coverage/lcov-report/sorter.js +0 -196
  242. package/coverage/lcov-report/types/aggregation.ts.html +0 -94
  243. package/coverage/lcov-report/types/index.html +0 -146
  244. package/coverage/lcov-report/types/interface.ts.html +0 -181
  245. package/coverage/lcov-report/types/parameters.ts.html +0 -106
  246. package/coverage/lcov-report/util/aggregation-helper.ts.html +0 -286
  247. package/coverage/lcov-report/util/args.ts.html +0 -508
  248. package/coverage/lcov-report/util/errors.ts.html +0 -232
  249. package/coverage/lcov-report/util/helpers.ts.html +0 -613
  250. package/coverage/lcov-report/util/index.html +0 -266
  251. package/coverage/lcov-report/util/json.ts.html +0 -115
  252. package/coverage/lcov-report/util/log-memoize.ts.html +0 -145
  253. package/coverage/lcov-report/util/logger.ts.html +0 -151
  254. package/coverage/lcov-report/util/os-checker.ts.html +0 -421
  255. package/coverage/lcov-report/util/plugin-storage.ts.html +0 -199
  256. package/coverage/lcov-report/util/validations.ts.html +0 -526
  257. package/coverage/lcov-report/util/yaml.ts.html +0 -193
  258. package/coverage/lcov.info +0 -2811
  259. package/src/__tests__/integration/manifest/sci-e.yaml +0 -23
@@ -1,4 +1,12 @@
1
1
  import { ZodSchema, z } from 'zod';
2
+ /**
3
+ * At least one property defined handler.
4
+ */
5
+ export declare const atLeastOneDefined: (obj: Record<string | number | symbol, unknown>) => boolean;
6
+ /**
7
+ * All properties are defined handler.
8
+ */
9
+ export declare const allDefined: (obj: Record<string | number | symbol, unknown>) => boolean;
2
10
  /**
3
11
  * Validation schema for manifests.
4
12
  */
@@ -74,9 +82,9 @@ export declare const manifestSchema: z.ZodObject<{
74
82
  }>;
75
83
  outputs?: string[] | undefined;
76
84
  }>;
77
- execution: z.ZodObject<{
78
- command: z.ZodString;
79
- environment: z.ZodObject<{
85
+ execution: z.ZodOptional<z.ZodObject<{
86
+ command: z.ZodOptional<z.ZodString>;
87
+ environment: z.ZodOptional<z.ZodObject<{
80
88
  'if-version': z.ZodString;
81
89
  os: z.ZodString;
82
90
  'os-version': z.ZodString;
@@ -97,34 +105,34 @@ export declare const manifestSchema: z.ZodObject<{
97
105
  'node-version': string;
98
106
  'date-time': string;
99
107
  dependencies: string[];
100
- }>;
108
+ }>>;
101
109
  status: z.ZodString;
102
110
  error: z.ZodOptional<z.ZodString>;
103
111
  }, "strip", z.ZodTypeAny, {
104
112
  status: string;
105
- command: string;
106
- environment: {
113
+ command?: string | undefined;
114
+ environment?: {
107
115
  'if-version': string;
108
116
  os: string;
109
117
  'os-version': string;
110
118
  'node-version': string;
111
119
  'date-time': string;
112
120
  dependencies: string[];
113
- };
121
+ } | undefined;
114
122
  error?: string | undefined;
115
123
  }, {
116
124
  status: string;
117
- command: string;
118
- environment: {
125
+ command?: string | undefined;
126
+ environment?: {
119
127
  'if-version': string;
120
128
  os: string;
121
129
  'os-version': string;
122
130
  'node-version': string;
123
131
  'date-time': string;
124
132
  dependencies: string[];
125
- };
133
+ } | undefined;
126
134
  error?: string | undefined;
127
- }>;
135
+ }>>;
128
136
  tree: z.ZodRecord<z.ZodString, z.ZodAny>;
129
137
  }, "strip", z.ZodTypeAny, {
130
138
  name: string;
@@ -136,19 +144,6 @@ export declare const manifestSchema: z.ZodObject<{
136
144
  }>;
137
145
  outputs?: string[] | undefined;
138
146
  };
139
- execution: {
140
- status: string;
141
- command: string;
142
- environment: {
143
- 'if-version': string;
144
- os: string;
145
- 'os-version': string;
146
- 'node-version': string;
147
- 'date-time': string;
148
- dependencies: string[];
149
- };
150
- error?: string | undefined;
151
- };
152
147
  tree: Record<string, any>;
153
148
  description?: string | null | undefined;
154
149
  tags?: {
@@ -166,6 +161,19 @@ export declare const manifestSchema: z.ZodObject<{
166
161
  aggregation: "sum" | "none" | "avg";
167
162
  unit: string;
168
163
  }[] | null | undefined;
164
+ execution?: {
165
+ status: string;
166
+ command?: string | undefined;
167
+ environment?: {
168
+ 'if-version': string;
169
+ os: string;
170
+ 'os-version': string;
171
+ 'node-version': string;
172
+ 'date-time': string;
173
+ dependencies: string[];
174
+ } | undefined;
175
+ error?: string | undefined;
176
+ } | undefined;
169
177
  }, {
170
178
  name: string;
171
179
  initialize: {
@@ -176,19 +184,6 @@ export declare const manifestSchema: z.ZodObject<{
176
184
  }>;
177
185
  outputs?: string[] | undefined;
178
186
  };
179
- execution: {
180
- status: string;
181
- command: string;
182
- environment: {
183
- 'if-version': string;
184
- os: string;
185
- 'os-version': string;
186
- 'node-version': string;
187
- 'date-time': string;
188
- dependencies: string[];
189
- };
190
- error?: string | undefined;
191
- };
192
187
  tree: Record<string, any>;
193
188
  description?: string | null | undefined;
194
189
  tags?: {
@@ -206,6 +201,19 @@ export declare const manifestSchema: z.ZodObject<{
206
201
  aggregation: "sum" | "none" | "avg";
207
202
  unit: string;
208
203
  }[] | null | undefined;
204
+ execution?: {
205
+ status: string;
206
+ command?: string | undefined;
207
+ environment?: {
208
+ 'if-version': string;
209
+ os: string;
210
+ 'os-version': string;
211
+ 'node-version': string;
212
+ 'date-time': string;
213
+ dependencies: string[];
214
+ } | undefined;
215
+ error?: string | undefined;
216
+ } | undefined;
209
217
  }>;
210
218
  /**
211
219
  * Validates given `manifest` object to match pattern.
@@ -220,19 +228,6 @@ export declare const validateManifest: (manifest: any) => {
220
228
  }>;
221
229
  outputs?: string[] | undefined;
222
230
  };
223
- execution: {
224
- status: string;
225
- command: string;
226
- environment: {
227
- 'if-version': string;
228
- os: string;
229
- 'os-version': string;
230
- 'node-version': string;
231
- 'date-time': string;
232
- dependencies: string[];
233
- };
234
- error?: string | undefined;
235
- };
236
231
  tree: Record<string, any>;
237
232
  description?: string | null | undefined;
238
233
  tags?: {
@@ -250,8 +245,21 @@ export declare const validateManifest: (manifest: any) => {
250
245
  aggregation: "sum" | "none" | "avg";
251
246
  unit: string;
252
247
  }[] | null | undefined;
248
+ execution?: {
249
+ status: string;
250
+ command?: string | undefined;
251
+ environment?: {
252
+ 'if-version': string;
253
+ os: string;
254
+ 'os-version': string;
255
+ 'node-version': string;
256
+ 'date-time': string;
257
+ dependencies: string[];
258
+ } | undefined;
259
+ error?: string | undefined;
260
+ } | undefined;
253
261
  };
254
262
  /**
255
263
  * Validates given `object` with given `schema`.
256
264
  */
257
- export declare const validate: <T>(schema: ZodSchema<T, z.ZodTypeDef, T>, object: any, errorConstructor?: ErrorConstructor) => T;
265
+ export declare const validate: <T>(schema: ZodSchema<T, z.ZodTypeDef, T>, object: any, index?: number, errorConstructor?: ErrorConstructor) => T;
@@ -1,11 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validate = exports.validateManifest = exports.manifestSchema = void 0;
3
+ exports.validate = exports.validateManifest = exports.manifestSchema = exports.allDefined = exports.atLeastOneDefined = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const errors_1 = require("./errors");
6
6
  const aggregation_1 = require("../types/aggregation");
7
7
  const parameters_1 = require("../types/parameters");
8
+ const strings_1 = require("../config/strings");
8
9
  const { ManifestValidationError, InputValidationError } = errors_1.ERRORS;
10
+ const { VALIDATING_MANIFEST } = strings_1.STRINGS;
11
+ /**
12
+ * At least one property defined handler.
13
+ */
14
+ const atLeastOneDefined = (obj) => Object.values(obj).some(v => v !== undefined);
15
+ exports.atLeastOneDefined = atLeastOneDefined;
16
+ /**
17
+ * All properties are defined handler.
18
+ */
19
+ const allDefined = (obj) => Object.values(obj).every(v => v !== undefined);
20
+ exports.allDefined = allDefined;
9
21
  /**
10
22
  * Validation schema for manifests.
11
23
  */
@@ -44,50 +56,69 @@ exports.manifestSchema = zod_1.z.object({
44
56
  })),
45
57
  outputs: zod_1.z.array(zod_1.z.string()).optional(),
46
58
  }),
47
- execution: zod_1.z.object({
48
- command: zod_1.z.string(),
49
- environment: zod_1.z.object({
59
+ execution: zod_1.z
60
+ .object({
61
+ command: zod_1.z.string().optional(),
62
+ environment: zod_1.z
63
+ .object({
50
64
  'if-version': zod_1.z.string(),
51
65
  os: zod_1.z.string(),
52
66
  'os-version': zod_1.z.string(),
53
67
  'node-version': zod_1.z.string(),
54
68
  'date-time': zod_1.z.string(),
55
69
  dependencies: zod_1.z.array(zod_1.z.string()),
56
- }),
70
+ })
71
+ .optional(),
57
72
  status: zod_1.z.string(),
58
73
  error: zod_1.z.string().optional(),
59
- }),
74
+ })
75
+ .optional(),
60
76
  tree: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
61
77
  });
62
78
  /**
63
79
  * Validates given `manifest` object to match pattern.
64
80
  */
65
- const validateManifest = (manifest) => (0, exports.validate)(exports.manifestSchema, manifest, ManifestValidationError);
81
+ const validateManifest = (manifest) => {
82
+ console.debug(VALIDATING_MANIFEST);
83
+ return (0, exports.validate)(exports.manifestSchema, manifest, undefined, ManifestValidationError);
84
+ };
66
85
  exports.validateManifest = validateManifest;
67
86
  /**
68
87
  * Validates given `object` with given `schema`.
69
88
  */
70
- const validate = (schema, object, errorConstructor = InputValidationError) => {
89
+ const validate = (schema, object, index, errorConstructor = InputValidationError) => {
71
90
  const validationResult = schema.safeParse(object);
72
91
  if (!validationResult.success) {
73
- throw new errorConstructor(prettifyErrorMessage(validationResult.error.message));
92
+ throw new errorConstructor(prettifyErrorMessage(validationResult.error.message, index));
74
93
  }
75
94
  return validationResult.data;
76
95
  };
77
96
  exports.validate = validate;
78
97
  /**
79
- * Beautify error message from zod issue.
98
+ * Error message formatter for zod issues.
80
99
  */
81
- const prettifyErrorMessage = (issues) => {
100
+ const prettifyErrorMessage = (issues, index) => {
82
101
  const issuesArray = JSON.parse(issues);
83
102
  return issuesArray.map((issue) => {
84
- const { code, path, message } = issue;
85
- const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
86
- const fullPath = flattenPath.join('.');
87
- if (code === 'custom') {
88
- return `${message.toLowerCase()}. Error code: ${code}.`;
103
+ const code = issue.code;
104
+ let { path, message } = issue;
105
+ const indexErrorMessage = index !== undefined ? ` at index ${index}` : '';
106
+ if (issue.code === zod_1.ZodIssueCode.invalid_union) {
107
+ message = issue.unionErrors[0].issues[0].message;
108
+ path = issue.unionErrors[0].issues[0].path;
109
+ }
110
+ const fullPath = flattenPath(path);
111
+ if (!fullPath) {
112
+ return message;
89
113
  }
90
- return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
114
+ return `"${fullPath}" parameter is ${message.toLowerCase()}${indexErrorMessage}. Error code: ${code}.`;
91
115
  });
92
116
  };
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUM7U0FDRCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7SUFDYixXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO1NBQ1YsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQ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RUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7U0FDekQ7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNvbXBsZXhpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgICAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBwYXJhbXM6IHpcbiAgICAuYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICAgICAgICBhZ2dyZWdhdGlvbjogei5lbnVtKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICAgICAgdW5pdDogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGV4ZWN1dGlvbjogei5vYmplY3Qoe1xuICAgIGNvbW1hbmQ6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHoub2JqZWN0KHtcbiAgICAgICdpZi12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgIG9zOiB6LnN0cmluZygpLFxuICAgICAgJ29zLXZlcnNpb24nOiB6LnN0cmluZygpLFxuICAgICAgJ25vZGUtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAnZGF0ZS10aW1lJzogei5zdHJpbmcoKSxcbiAgICAgIGRlcGVuZGVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICB9KSxcbiAgICBzdGF0dXM6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBhbnkpID0+XG4gIHZhbGlkYXRlKG1hbmlmZXN0U2NoZW1hLCBtYW5pZmVzdCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgb2JqZWN0YCB3aXRoIGdpdmVuIGBzY2hlbWFgLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSA8VD4oXG4gIHNjaGVtYTogWm9kU2NoZW1hPFQ+LFxuICBvYmplY3Q6IGFueSxcbiAgZXJyb3JDb25zdHJ1Y3RvcjogRXJyb3JDb25zdHJ1Y3RvciA9IElucHV0VmFsaWRhdGlvbkVycm9yXG4pID0+IHtcbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2Uob2JqZWN0KTtcblxuICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBlcnJvckNvbnN0cnVjdG9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5kYXRhO1xufTtcblxuLyoqXG4gKiBCZWF1dGlmeSBlcnJvciBtZXNzYWdlIGZyb20gem9kIGlzc3VlLlxuICovXG5jb25zdCBwcmV0dGlmeUVycm9yTWVzc2FnZSA9IChpc3N1ZXM6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICByZXR1cm4gaXNzdWVzQXJyYXkubWFwKChpc3N1ZTogWm9kSXNzdWUpID0+IHtcbiAgICBjb25zdCB7Y29kZSwgcGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcbiAgICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICAgIHR5cGVvZiBwYXJ0ID09PSAnbnVtYmVyJyA/IGBbJHtwYXJ0fV1gIDogcGFydFxuICAgICk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG5cbiAgICBpZiAoY29kZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIHJldHVybiBgJHttZXNzYWdlLnRvTG93ZXJDYXNlKCl9LiBFcnJvciBjb2RlOiAke2NvZGV9LmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG4iXX0=
117
+ /**
118
+ * Flattens an array representing a nested path into a string.
119
+ */
120
+ const flattenPath = (path) => {
121
+ const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
122
+ return flattenPath.join('.');
123
+ };
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBeUQ7QUFFekQscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsK0NBQTBDO0FBRTFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUMvRCxNQUFNLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxpQkFBTyxDQUFDO0FBQ3RDOztHQUVHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixHQUE4QyxFQUM5QyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFGdEMsUUFBQSxpQkFBaUIscUJBRXFCO0FBRW5EOztHQUVHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUE4QyxFQUFFLEVBQUUsQ0FDM0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEcEMsUUFBQSxVQUFVLGNBQzBCO0FBRWpEOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUs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QUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM1QztRQUVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLGlCQUFpQixpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDekcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBeUIsRUFBVSxFQUFFO0lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7SUFDRixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgWm9kSXNzdWVDb2RlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnL3N0cmluZ3MnO1xuXG5jb25zdCB7TWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IsIElucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtWQUxJREFUSU5HX01BTklGRVNUfSA9IFNUUklOR1M7XG4vKipcbiAqIEF0IGxlYXN0IG9uZSBwcm9wZXJ0eSBkZWZpbmVkIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBhdExlYXN0T25lRGVmaW5lZCA9IChcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCB1bmtub3duPlxuKSA9PiBPYmplY3QudmFsdWVzKG9iaikuc29tZSh2ID0+IHYgIT09IHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQWxsIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGFsbERlZmluZWQgPSAob2JqOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCB1bmtub3duPikgPT5cbiAgT2JqZWN0LnZhbHVlcyhvYmopLmV2ZXJ5KHYgPT4gdiAhPT0gdW5kZWZpbmVkKTtcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHNjaGVtYSBmb3IgbWFuaWZlc3RzLlxuICovXG5leHBvcnQgY29uc3QgbWFuaWZlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgdGFnczogelxuICAgIC5vYmplY3Qoe1xuICAgICAga2luZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGFnZ3JlZ2F0aW9uOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBtZXRyaWNzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgdHlwZTogei5lbnVtKEFHR1JFR0FUSU9OX01FVEhPRFMpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBpbml0aWFsaXplOiB6Lm9iamVjdCh7XG4gICAgcGx1Z2luczogei5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBwYXRoOiB6LnN0cmluZygpLFxuICAgICAgICBtZXRob2Q6IHouc3RyaW5nKCksXG4gICAgICAgICdnbG9iYWwtY29uZmlnJzogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIH0pXG4gICAgKSxcbiAgICBvdXRwdXRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBleGVjdXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGNvbW1hbmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGVudmlyb25tZW50OiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICdpZi12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgICAgICBvczogei5zdHJpbmcoKSxcbiAgICAgICAgICAnb3MtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAgICAgJ25vZGUtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAgICAgJ2RhdGUtdGltZSc6IHouc3RyaW5nKCksXG4gICAgICAgICAgZGVwZW5kZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAgIHN0YXR1czogei5zdHJpbmcoKSxcbiAgICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbiAgdHJlZTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG59KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG1hbmlmZXN0YCBvYmplY3QgdG8gbWF0Y2ggcGF0dGVybi5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTWFuaWZlc3QgPSAobWFuaWZlc3Q6IGFueSkgPT4ge1xuICBjb25zb2xlLmRlYnVnKFZBTElEQVRJTkdfTUFOSUZFU1QpO1xuXG4gIHJldHVybiB2YWxpZGF0ZShtYW5pZmVzdFNjaGVtYSwgbWFuaWZlc3QsIHVuZGVmaW5lZCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGluZGV4PzogbnVtYmVyLFxuICBlcnJvckNvbnN0cnVjdG9yOiBFcnJvckNvbnN0cnVjdG9yID0gSW5wdXRWYWxpZGF0aW9uRXJyb3JcbikgPT4ge1xuICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gc2NoZW1hLnNhZmVQYXJzZShvYmplY3QpO1xuXG4gIGlmICghdmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IGVycm9yQ29uc3RydWN0b3IoXG4gICAgICBwcmV0dGlmeUVycm9yTWVzc2FnZSh2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2UsIGluZGV4KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5kYXRhO1xufTtcblxuLyoqXG4gKiBFcnJvciBtZXNzYWdlIGZvcm1hdHRlciBmb3Igem9kIGlzc3Vlcy5cbiAqL1xuY29uc3QgcHJldHRpZnlFcnJvck1lc3NhZ2UgPSAoaXNzdWVzOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc0FycmF5ID0gSlNPTi5wYXJzZShpc3N1ZXMpO1xuXG4gIHJldHVybiBpc3N1ZXNBcnJheS5tYXAoKGlzc3VlOiBab2RJc3N1ZSkgPT4ge1xuICAgIGNvbnN0IGNvZGUgPSBpc3N1ZS5jb2RlO1xuICAgIGxldCB7cGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcblxuICAgIGNvbnN0IGluZGV4RXJyb3JNZXNzYWdlID0gaW5kZXggIT09IHVuZGVmaW5lZCA/IGAgYXQgaW5kZXggJHtpbmRleH1gIDogJyc7XG5cbiAgICBpZiAoaXNzdWUuY29kZSA9PT0gWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24pIHtcbiAgICAgIG1lc3NhZ2UgPSBpc3N1ZS51bmlvbkVycm9yc1swXS5pc3N1ZXNbMF0ubWVzc2FnZTtcbiAgICAgIHBhdGggPSBpc3N1ZS51bmlvbkVycm9yc1swXS5pc3N1ZXNbMF0ucGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGZsYXR0ZW5QYXRoKHBhdGgpO1xuXG4gICAgaWYgKCFmdWxsUGF0aCkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfSR7aW5kZXhFcnJvck1lc3NhZ2V9LiBFcnJvciBjb2RlOiAke2NvZGV9LmA7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBGbGF0dGVucyBhbiBhcnJheSByZXByZXNlbnRpbmcgYSBuZXN0ZWQgcGF0aCBpbnRvIGEgc3RyaW5nLlxuICovXG5jb25zdCBmbGF0dGVuUGF0aCA9IChwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZmxhdHRlblBhdGggPSBwYXRoLm1hcChwYXJ0ID0+XG4gICAgdHlwZW9mIHBhcnQgPT09ICdudW1iZXInID8gYFske3BhcnR9XWAgOiBwYXJ0XG4gICk7XG4gIHJldHVybiBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG59O1xuIl19
@@ -3,7 +3,7 @@
3
3
 
4
4
  - [`if`](https://github.com/Green-Software-Foundation/if)
5
5
  - source code for the IF
6
- - [`if-plugins`](https://github.com/Green-Software-Foundation/if-plugins)
6
+ - [`if-plugins`](https://github.com/Green-Software-Foundation/if-plugins) **DEPRECATED**
7
7
  - source code for standard library of plugins
8
8
  - IF core team commit to maintaining these plugins
9
9
  - [`if-unofficial-plugins`](https://github.com/Green-Software-Foundation/if-unofficial-plugins)
@@ -110,47 +110,21 @@ We intend to respond to new PRs and issues within 3 days of the ticket being ope
110
110
 
111
111
  ## Labels
112
112
 
113
- ```
114
- //review status labels
115
- awaiting-triage
116
- triage-pass
117
- awaiting-review
118
- review-pass
119
- awaiting-qa
120
- qa-pass
121
- changes-needed
122
-
123
- //change type labels
124
- fix
125
- feature
126
- docs
127
- package
128
- other
129
-
130
- // size labels
131
- small
132
- medium
133
- large
134
-
135
- // priority labels
136
- high-priority
137
- med-priority
138
- low-priority
139
-
140
- //delay explanation labels
141
- abandoned
142
- blocked
143
- backlogged
144
-
145
- // other labels
146
- project-management
147
- agenda
148
- discussion
149
- help-wanted
150
- good-first-issue
151
- ```
152
-
153
- Each PR is expected to have one label from each category (except `other`) assigned to it at all times.
113
+ | Label | Used by | Description |
114
+ | ---------------- | --------- | ------------------------------------------------------------------------------------------ |
115
+ | blocked | all | The issue is blocked and cannot proceed. |
116
+ | bug | all | Error, flaw or fault |
117
+ | core-only | all | This issue is reserved for the IF core team only |
118
+ | draft | all | The issue is still being written, no need to respond or action on anything. |
119
+ | good-first-issue | all | This issue is a good one for someone looking to get involved with this project/initiative. |
120
+ | help-wanted | all | This issue can be picked up by anyone in the community |
121
+ | needs-response | all | The issue has stalled because someone isn’t responding. |
122
+ | agenda | core team | Use for any meeting agenda or minutes issue. |
123
+ | EPIC | core team | Used to denote an issue that represents a whole epic |
124
+ | initiative | core team | A helper label, needed for GSF internal processes |
125
+ | i-summary | core team | A helper label, needed for GSF internal processes |
126
+ | i-milestone | core team | A helper label, needed for GSF internal processes |
127
+ | project-update | core team | Used to flag project progress updates |
154
128
 
155
129
 
156
130
  ## Releases
@@ -15,14 +15,14 @@ initialize:
15
15
  "sci-e":
16
16
  path: "@grnsft/if-plugins"
17
17
  method: SciE
18
- "sci-m":
19
- path: "@grnsft/if-plugins"
20
- method: SciM
18
+ "sci-embodied":
19
+ path: "builtin"
20
+ method: SciEmbodied
21
21
  "sci-o":
22
22
  path: "@grnsft/if-plugins"
23
23
  method: SciO
24
24
  "sci":
25
- path: "@grnsft/if-plugins"
25
+ path: "builtin"
26
26
  method: Sci
27
27
  global-config:
28
28
  functional-unit: "requests"
@@ -44,7 +44,7 @@ tree:
44
44
  pipeline:
45
45
  - teads-curve
46
46
  - sci-e
47
- - sci-m
47
+ - sci-embodied
48
48
  - sci-o
49
49
  - time-sync
50
50
  - sci
@@ -87,7 +87,7 @@ tree:
87
87
  pipeline:
88
88
  - teads-curve
89
89
  - sci-e
90
- - sci-m
90
+ - sci-embodied
91
91
  - sci-o
92
92
  - time-sync
93
93
  - sci
@@ -15,14 +15,14 @@ initialize:
15
15
  method: AzureImporter
16
16
  path: "@grnsft/if-unofficial-plugins"
17
17
  "try-defaults-1":
18
- path: "@grnsft/if-plugins"
18
+ path: "builtin"
19
19
  method: Coefficient
20
20
  global-config:
21
21
  input-parameter: grid/carbon-intensity
22
22
  coefficient: 0.1
23
23
  output-parameter: grid/carbon-intensity
24
24
  "try-defaults-2":
25
- path: "@grnsft/if-plugins"
25
+ path: "builtin"
26
26
  method: Coefficient
27
27
  global-config:
28
28
  input-parameter: network/energy
@@ -58,4 +58,4 @@ tree:
58
58
  inputs:
59
59
  - timestamp: "2024-04-04T08:00:00.001Z"
60
60
  duration: 3600
61
- energy: 100
61
+ energy: 100
@@ -7,14 +7,14 @@ initialize:
7
7
  path: '@grnsft/if-unofficial-plugins'
8
8
  method: AzureImporter
9
9
  try-defaults-1:
10
- path: '@grnsft/if-plugins'
10
+ path: 'builtin'
11
11
  method: Coefficient
12
12
  global-config:
13
13
  input-parameter: grid/carbon-intensity
14
14
  coefficient: 0.1
15
15
  output-parameter: grid/carbon-intensity
16
16
  try-defaults-2:
17
- path: '@grnsft/if-plugins'
17
+ path: 'builtin'
18
18
  method: Coefficient
19
19
  global-config:
20
20
  input-parameter: network/energy
@@ -0,0 +1,34 @@
1
+ name: mock-observation-demo
2
+ description: a manifest demonstrating how to use the mock observations feature
3
+ tags:
4
+ initialize:
5
+ outputs: ['yaml']
6
+ plugins:
7
+ mock-observations:
8
+ kind: plugin
9
+ method: MockObservations
10
+ path: "builtin"
11
+ global-config:
12
+ timestamp-from: 2023-07-06T00:00
13
+ timestamp-to: 2023-07-06T00:10
14
+ duration: 0
15
+ components:
16
+ - cloud/instance-type: A1
17
+ - cloud/instance-type: B1
18
+ generators:
19
+ common:
20
+ region: uk-west
21
+ common-key: common-val
22
+ randint:
23
+ cpu/utilization:
24
+ min: 1
25
+ max: 99
26
+ memory/utilization:
27
+ min: 1
28
+ max: 99
29
+ tree:
30
+ children:
31
+ child:
32
+ pipeline:
33
+ - mock-observations
34
+ inputs:
@@ -2,13 +2,13 @@ name: pipeline-uninitialized-plugin-error
2
2
  description: a negative test case that fails due to an uninitialized plugin being invoked in a pipeline
3
3
  tags:
4
4
  initialize:
5
+ # outputs: ['yaml']
5
6
  plugins:
6
7
  teads-curve:
7
8
  path: '@grnsft/if-unofficial-plugins'
8
9
  method: TeadsCurve
9
10
  global-config:
10
11
  interpolation: spline
11
- outputs: ['yaml']
12
12
  tree:
13
13
  children:
14
14
  child-0:
@@ -9,21 +9,21 @@ initialize:
9
9
  global-config:
10
10
  interpolation: spline
11
11
  "sum":
12
- path: "@grnsft/if-plugins"
12
+ path: "builtin"
13
13
  method: Sum
14
14
  global-config:
15
15
  input-parameters:
16
16
  - cpu/energy
17
17
  - network/energy
18
18
  output-parameter: energy
19
- "sci-m":
20
- path: "@grnsft/if-plugins"
21
- method: SciM
19
+ "sci-embodied":
20
+ path: "builtin"
21
+ method: SciEmbodied
22
22
  "sci-o":
23
23
  path: "@grnsft/if-plugins"
24
24
  method: SciO
25
25
  "sci":
26
- path: "@grnsft/if-plugins"
26
+ path: "builtin"
27
27
  method: Sci
28
28
  global-config:
29
29
  functional-unit: ""
@@ -43,7 +43,7 @@ tree:
43
43
  - teads-curve
44
44
  - sci-o
45
45
  - sum
46
- - sci-m
46
+ - sci-embodied
47
47
  - time-sync
48
48
  - sci
49
49
  config:
@@ -0,0 +1,23 @@
1
+ name: sci-embodied
2
+ description: receiving incorrect error message when running sci-embodied without `resources-total` issue #716
3
+ tags:
4
+ initialize:
5
+ #outputs: ['yaml']
6
+ plugins:
7
+ "sci-embodied": # a model that calculates m from te, tir, el, rr and rtor
8
+ method: SciEmbodied
9
+ path: "builtin"
10
+ tree:
11
+ children:
12
+ child:
13
+ pipeline:
14
+ - sci-embodied # duration & config -> embodied
15
+ defaults:
16
+ device/emissions-embodied: 1533.120 # gCO2eq
17
+ time-reserved: 3600 # 1hr in seconds
18
+ device/expected-lifespan: 94608000 # 3 years in seconds
19
+ resources-reserved: 1
20
+ # resources-total: 8
21
+ inputs:
22
+ - timestamp: 2023-07-06T00:00
23
+ duration: 3600
@@ -9,7 +9,7 @@ initialize:
9
9
  global-config:
10
10
  interpolation: spline
11
11
  "sum":
12
- path: "@grnsft/if-plugins"
12
+ path: "builtin"
13
13
  method: Sum
14
14
  global-config:
15
15
  input-parameters:
@@ -17,14 +17,14 @@ initialize:
17
17
  - network/energy
18
18
  output-parameter: energy-sum
19
19
  "coefficient":
20
- path: "@grnsft/if-plugins"
20
+ path: "builtin"
21
21
  method: Coefficient
22
22
  global-config:
23
23
  input-parameter: energy
24
24
  coefficient: 2
25
25
  output-parameter: energy-doubled
26
26
  "multiply":
27
- path: "@grnsft/if-plugins"
27
+ path: "builtin"
28
28
  method: Multiply
29
29
  global-config:
30
30
  input-parameters: ["cpu/utilization", "duration"]
@@ -0,0 +1,36 @@
1
+ name: csv-demo
2
+ description: null
3
+ tags: null
4
+ initialize:
5
+ plugins:
6
+ cloud-instance-metadata:
7
+ path: builtin
8
+ method: CSVLookup
9
+ global-config:
10
+ filepath: >-
11
+ https://raw.githubusercontent.com/Green-Software-Foundation/if-data/main/cloud-metdata-azure-instances.csv
12
+ query:
13
+ instance-class: cloud/instance-type
14
+ output: '*'
15
+ extract-processor-name:
16
+ path: builtin
17
+ method: Regex
18
+ global-config:
19
+ parameter: cpu-model-name
20
+ match: /^([^,])+/g
21
+ output: cpu/name
22
+ outputs:
23
+ - yaml
24
+ tree:
25
+ children:
26
+ child:
27
+ pipeline:
28
+ - cloud-instance-metadata
29
+ - extract-processor-name
30
+ inputs:
31
+ - timestamp: 2023-08-06T00:00
32
+ duration: 3600
33
+ cpu/energy: 0.001
34
+ cloud/provider: gcp
35
+ cloud/region: asia-east
36
+ cloud/instance-type: Standard_A1_v2