@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
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockObservations = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const zod_1 = require("zod");
6
+ const validations_1 = require("../../util/validations");
7
+ const common_generator_1 = require("./helpers/common-generator");
8
+ const rand_int_generator_1 = require("./helpers/rand-int-generator");
9
+ const MockObservations = (globalConfig) => {
10
+ const metadata = {
11
+ kind: 'execute',
12
+ };
13
+ /**
14
+ * Generate sets of mocked observations based on config.
15
+ */
16
+ const execute = (inputs) => {
17
+ const { duration, timeBuckets, components, generators } = generateParamsFromConfig();
18
+ const generatorToHistory = new Map();
19
+ generators.forEach(generator => {
20
+ generatorToHistory.set(generator, []);
21
+ });
22
+ const defaults = inputs && inputs[0];
23
+ return Object.entries(components).reduce((acc, item) => {
24
+ const component = item[1];
25
+ timeBuckets.forEach(timeBucket => {
26
+ const observation = createObservation({ duration, component, timeBucket, generators }, generatorToHistory);
27
+ acc.push(Object.assign({}, defaults, observation));
28
+ });
29
+ return acc;
30
+ }, []);
31
+ };
32
+ /**
33
+ * Validates global config parameters.
34
+ */
35
+ const validateGlobalConfig = () => {
36
+ const schema = zod_1.z.object({
37
+ 'timestamp-from': zod_1.z.string(),
38
+ 'timestamp-to': zod_1.z.string(),
39
+ duration: zod_1.z.number(),
40
+ components: zod_1.z.array(zod_1.z.record(zod_1.z.string())),
41
+ generators: zod_1.z.object({
42
+ common: zod_1.z.record(zod_1.z.string().or(zod_1.z.number())),
43
+ randint: zod_1.z.record(zod_1.z.object({ min: zod_1.z.number(), max: zod_1.z.number() })),
44
+ }),
45
+ });
46
+ return (0, validations_1.validate)(schema, globalConfig);
47
+ };
48
+ /**
49
+ * Configures the MockObservations Plugin for IF
50
+ */
51
+ const generateParamsFromConfig = () => {
52
+ const { 'timestamp-from': timestampFrom, 'timestamp-to': timestampTo, duration, generators, components, } = validateGlobalConfig();
53
+ const convertedTimestampFrom = luxon_1.DateTime.fromISO(timestampFrom, {
54
+ zone: 'UTC',
55
+ });
56
+ const convertedTimestampTo = luxon_1.DateTime.fromISO(timestampTo, { zone: 'UTC' });
57
+ return {
58
+ duration,
59
+ timeBuckets: createTimeBuckets(convertedTimestampFrom, convertedTimestampTo, duration),
60
+ generators: createGenerators(generators),
61
+ components,
62
+ };
63
+ };
64
+ /*
65
+ * create time buckets based on start time, end time and duration of each bucket.
66
+ */
67
+ const createTimeBuckets = (timestampFrom, timestampTo, duration, timeBuckets = []) => {
68
+ if (timestampFrom < timestampTo ||
69
+ timestampFrom.plus(luxon_1.Duration.fromObject({ seconds: duration })) < timestampTo) {
70
+ return createTimeBuckets(timestampFrom.plus(luxon_1.Duration.fromObject({ seconds: duration })), timestampTo, duration, [...timeBuckets, timestampFrom]);
71
+ }
72
+ return timeBuckets;
73
+ };
74
+ /*
75
+ * create generators based on a given config
76
+ */
77
+ const createGenerators = (generatorsConfig) => {
78
+ const createCommonGenerator = (config) => [
79
+ (0, common_generator_1.CommonGenerator)(config),
80
+ ];
81
+ const createRandIntGenerators = (config) => {
82
+ return Object.entries(config).map(([fieldToPopulate, value]) => (0, rand_int_generator_1.RandIntGenerator)(fieldToPopulate, value));
83
+ };
84
+ return Object.entries(generatorsConfig).flatMap(([key, value]) => key === 'randint'
85
+ ? createRandIntGenerators(value).flat()
86
+ : createCommonGenerator(value));
87
+ };
88
+ /*
89
+ * Creates time buckets based on start time, end time and duration of each bucket.
90
+ */
91
+ const createObservation = (observationParams, generatorToHistory) => {
92
+ const { duration, component, timeBucket, generators } = observationParams;
93
+ const timestamp = timeBucket.toISO();
94
+ const generateObservation = (generator) => {
95
+ const history = generatorToHistory.get(generator) || [];
96
+ const generated = generator.next(history);
97
+ generatorToHistory.set(generator, [...history, generated.value]);
98
+ return generated;
99
+ };
100
+ const generateObservations = (gen) => generateObservation(gen);
101
+ const generatedValues = generators.map(generateObservations);
102
+ const initialObservation = {
103
+ timestamp,
104
+ duration,
105
+ ...component,
106
+ };
107
+ const generatedObservation = generatedValues.reduce((observation, generated) => Object.assign(observation, generated), initialObservation);
108
+ return generatedObservation;
109
+ };
110
+ return {
111
+ metadata,
112
+ execute,
113
+ };
114
+ };
115
+ exports.MockObservations = MockObservations;
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbW9jay1vYnNlcnZhdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXlDO0FBQ3pDLDZCQUFzQjtBQUt0Qix3REFBZ0Q7QUFFaEQsaUVBQTJEO0FBQzNELHFFQUE4RDtBQUl2RCxNQUFNLGdCQUFnQixHQUFHLENBQUMsWUFBMEIsRUFBaUIsRUFBRTtJQUM1RSxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUMsR0FDbkQsd0JBQXdCLEVBQUUsQ0FBQztRQUM3QixNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBRTFELFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0Isa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUNuQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxFQUM3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Q0FBQyxDQUFDO1lBRS9ELGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVqRSxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBYyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRSxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBaUI7WUFDdkMsU0FBUztZQUNULFFBQVE7WUFDUixHQUFHLFNBQVM7U0FDYixDQUFDO1FBQ0YsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUNqRCxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUNqRSxrQkFBa0IsQ0FDbkIsQ0FBQztRQUVGLE9BQU8sb0JBQW9DLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQWxLVyxRQUFBLGdCQUFnQixvQkFrSzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRlVGltZSwgRHVyYXRpb259IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge0NvbmZpZ1BhcmFtcywgS2V5VmFsdWVQYWlyfSBmcm9tICcuLi8uLi90eXBlcy9jb21tb24nO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtDb21tb25HZW5lcmF0b3J9IGZyb20gJy4vaGVscGVycy9jb21tb24tZ2VuZXJhdG9yJztcbmltcG9ydCB7UmFuZEludEdlbmVyYXRvcn0gZnJvbSAnLi9oZWxwZXJzL3JhbmQtaW50LWdlbmVyYXRvcic7XG5pbXBvcnQge0dlbmVyYXRvcn0gZnJvbSAnLi9pbnRlcmZhY2VzL2luZGV4JztcbmltcG9ydCB7T2JzZXJ2YXRpb25QYXJhbXN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTW9ja09ic2VydmF0aW9ucyA9IChnbG9iYWxDb25maWc6IENvbmZpZ1BhcmFtcyk6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNldHMgb2YgbW9ja2VkIG9ic2VydmF0aW9ucyBiYXNlZCBvbiBjb25maWcuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pID0+IHtcbiAgICBjb25zdCB7ZHVyYXRpb24sIHRpbWVCdWNrZXRzLCBjb21wb25lbnRzLCBnZW5lcmF0b3JzfSA9XG4gICAgICBnZW5lcmF0ZVBhcmFtc0Zyb21Db25maWcoKTtcbiAgICBjb25zdCBnZW5lcmF0b3JUb0hpc3RvcnkgPSBuZXcgTWFwPEdlbmVyYXRvciwgbnVtYmVyW10+KCk7XG5cbiAgICBnZW5lcmF0b3JzLmZvckVhY2goZ2VuZXJhdG9yID0+IHtcbiAgICAgIGdlbmVyYXRvclRvSGlzdG9yeS5zZXQoZ2VuZXJhdG9yLCBbXSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0cyA9IGlucHV0cyAmJiBpbnB1dHNbMF07XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykucmVkdWNlKChhY2M6IFBsdWdpblBhcmFtc1tdLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBpdGVtWzFdO1xuICAgICAgdGltZUJ1Y2tldHMuZm9yRWFjaCh0aW1lQnVja2V0ID0+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YXRpb24gPSBjcmVhdGVPYnNlcnZhdGlvbihcbiAgICAgICAgICB7ZHVyYXRpb24sIGNvbXBvbmVudCwgdGltZUJ1Y2tldCwgZ2VuZXJhdG9yc30sXG4gICAgICAgICAgZ2VuZXJhdG9yVG9IaXN0b3J5XG4gICAgICAgICk7XG5cbiAgICAgICAgYWNjLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9ic2VydmF0aW9uKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBnbG9iYWwgY29uZmlnIHBhcmFtZXRlcnMuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUdsb2JhbENvbmZpZyA9ICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICAndGltZXN0YW1wLWZyb20nOiB6LnN0cmluZygpLFxuICAgICAgJ3RpbWVzdGFtcC10byc6IHouc3RyaW5nKCksXG4gICAgICBkdXJhdGlvbjogei5udW1iZXIoKSxcbiAgICAgIGNvbXBvbmVudHM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSkpLFxuICAgICAgZ2VuZXJhdG9yczogei5vYmplY3Qoe1xuICAgICAgICBjb21tb246IHoucmVjb3JkKHouc3RyaW5nKCkub3Ioei5udW1iZXIoKSkpLFxuICAgICAgICByYW5kaW50OiB6LnJlY29yZCh6Lm9iamVjdCh7bWluOiB6Lm51bWJlcigpLCBtYXg6IHoubnVtYmVyKCl9KSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGdsb2JhbENvbmZpZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgdGhlIE1vY2tPYnNlcnZhdGlvbnMgUGx1Z2luIGZvciBJRlxuICAgKi9cbiAgY29uc3QgZ2VuZXJhdGVQYXJhbXNGcm9tQ29uZmlnID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICd0aW1lc3RhbXAtZnJvbSc6IHRpbWVzdGFtcEZyb20sXG4gICAgICAndGltZXN0YW1wLXRvJzogdGltZXN0YW1wVG8sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGdlbmVyYXRvcnMsXG4gICAgICBjb21wb25lbnRzLFxuICAgIH0gPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZFRpbWVzdGFtcEZyb20gPSBEYXRlVGltZS5mcm9tSVNPKHRpbWVzdGFtcEZyb20sIHtcbiAgICAgIHpvbmU6ICdVVEMnLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnZlcnRlZFRpbWVzdGFtcFRvID0gRGF0ZVRpbWUuZnJvbUlTTyh0aW1lc3RhbXBUbywge3pvbmU6ICdVVEMnfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lQnVja2V0czogY3JlYXRlVGltZUJ1Y2tldHMoXG4gICAgICAgIGNvbnZlcnRlZFRpbWVzdGFtcEZyb20sXG4gICAgICAgIGNvbnZlcnRlZFRpbWVzdGFtcFRvLFxuICAgICAgICBkdXJhdGlvblxuICAgICAgKSxcbiAgICAgIGdlbmVyYXRvcnM6IGNyZWF0ZUdlbmVyYXRvcnMoZ2VuZXJhdG9ycyksXG4gICAgICBjb21wb25lbnRzLFxuICAgIH07XG4gIH07XG5cbiAgLypcbiAgICogY3JlYXRlIHRpbWUgYnVja2V0cyBiYXNlZCBvbiBzdGFydCB0aW1lLCBlbmQgdGltZSBhbmQgZHVyYXRpb24gb2YgZWFjaCBidWNrZXQuXG4gICAqL1xuICBjb25zdCBjcmVhdGVUaW1lQnVja2V0cyA9IChcbiAgICB0aW1lc3RhbXBGcm9tOiBEYXRlVGltZSxcbiAgICB0aW1lc3RhbXBUbzogRGF0ZVRpbWUsXG4gICAgZHVyYXRpb246IG51bWJlcixcbiAgICB0aW1lQnVja2V0czogRGF0ZVRpbWVbXSA9IFtdXG4gICk6IERhdGVUaW1lW10gPT4ge1xuICAgIGlmIChcbiAgICAgIHRpbWVzdGFtcEZyb20gPCB0aW1lc3RhbXBUbyB8fFxuICAgICAgdGltZXN0YW1wRnJvbS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3Qoe3NlY29uZHM6IGR1cmF0aW9ufSkpIDwgdGltZXN0YW1wVG9cbiAgICApIHtcbiAgICAgIHJldHVybiBjcmVhdGVUaW1lQnVja2V0cyhcbiAgICAgICAgdGltZXN0YW1wRnJvbS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3Qoe3NlY29uZHM6IGR1cmF0aW9ufSkpLFxuICAgICAgICB0aW1lc3RhbXBUbyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIFsuLi50aW1lQnVja2V0cywgdGltZXN0YW1wRnJvbV1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aW1lQnVja2V0cztcbiAgfTtcblxuICAvKlxuICAgKiBjcmVhdGUgZ2VuZXJhdG9ycyBiYXNlZCBvbiBhIGdpdmVuIGNvbmZpZ1xuICAgKi9cbiAgY29uc3QgY3JlYXRlR2VuZXJhdG9ycyA9IChnZW5lcmF0b3JzQ29uZmlnOiBvYmplY3QpOiBHZW5lcmF0b3JbXSA9PiB7XG4gICAgY29uc3QgY3JlYXRlQ29tbW9uR2VuZXJhdG9yID0gKGNvbmZpZzogYW55KTogR2VuZXJhdG9yW10gPT4gW1xuICAgICAgQ29tbW9uR2VuZXJhdG9yKGNvbmZpZyksXG4gICAgXTtcblxuICAgIGNvbnN0IGNyZWF0ZVJhbmRJbnRHZW5lcmF0b3JzID0gKGNvbmZpZzogYW55KTogR2VuZXJhdG9yW10gPT4ge1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKChbZmllbGRUb1BvcHVsYXRlLCB2YWx1ZV0pID0+XG4gICAgICAgIFJhbmRJbnRHZW5lcmF0b3IoZmllbGRUb1BvcHVsYXRlLCB2YWx1ZSBhcyBLZXlWYWx1ZVBhaXIpXG4gICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZ2VuZXJhdG9yc0NvbmZpZykuZmxhdE1hcCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAga2V5ID09PSAncmFuZGludCdcbiAgICAgICAgPyBjcmVhdGVSYW5kSW50R2VuZXJhdG9ycyh2YWx1ZSkuZmxhdCgpXG4gICAgICAgIDogY3JlYXRlQ29tbW9uR2VuZXJhdG9yKHZhbHVlKVxuICAgICk7XG4gIH07XG5cbiAgLypcbiAgICogQ3JlYXRlcyB0aW1lIGJ1Y2tldHMgYmFzZWQgb24gc3RhcnQgdGltZSwgZW5kIHRpbWUgYW5kIGR1cmF0aW9uIG9mIGVhY2ggYnVja2V0LlxuICAgKi9cbiAgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb24gPSAoXG4gICAgb2JzZXJ2YXRpb25QYXJhbXM6IE9ic2VydmF0aW9uUGFyYW1zLFxuICAgIGdlbmVyYXRvclRvSGlzdG9yeTogTWFwPEdlbmVyYXRvciwgbnVtYmVyW10+XG4gICk6IFBsdWdpblBhcmFtcyA9PiB7XG4gICAgY29uc3Qge2R1cmF0aW9uLCBjb21wb25lbnQsIHRpbWVCdWNrZXQsIGdlbmVyYXRvcnN9ID0gb2JzZXJ2YXRpb25QYXJhbXM7XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGltZUJ1Y2tldC50b0lTTygpO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVPYnNlcnZhdGlvbiA9IChnZW5lcmF0b3I6IEdlbmVyYXRvcikgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdlbmVyYXRvclRvSGlzdG9yeS5nZXQoZ2VuZXJhdG9yKSB8fCBbXTtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZDogUmVjb3JkPHN0cmluZywgYW55PiA9IGdlbmVyYXRvci5uZXh0KGhpc3RvcnkpO1xuXG4gICAgICBnZW5lcmF0b3JUb0hpc3Rvcnkuc2V0KGdlbmVyYXRvciwgWy4uLmhpc3RvcnksIGdlbmVyYXRlZC52YWx1ZV0pO1xuXG4gICAgICByZXR1cm4gZ2VuZXJhdGVkO1xuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZU9ic2VydmF0aW9ucyA9IChnZW46IEdlbmVyYXRvcikgPT4gZ2VuZXJhdGVPYnNlcnZhdGlvbihnZW4pO1xuICAgIGNvbnN0IGdlbmVyYXRlZFZhbHVlcyA9IGdlbmVyYXRvcnMubWFwKGdlbmVyYXRlT2JzZXJ2YXRpb25zKTtcbiAgICBjb25zdCBpbml0aWFsT2JzZXJ2YXRpb246IFBsdWdpblBhcmFtcyA9IHtcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgLi4uY29tcG9uZW50LFxuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVkT2JzZXJ2YXRpb24gPSBnZW5lcmF0ZWRWYWx1ZXMucmVkdWNlKFxuICAgICAgKG9ic2VydmF0aW9uLCBnZW5lcmF0ZWQpID0+IE9iamVjdC5hc3NpZ24ob2JzZXJ2YXRpb24sIGdlbmVyYXRlZCksXG4gICAgICBpbml0aWFsT2JzZXJ2YXRpb25cbiAgICApO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRlZE9ic2VydmF0aW9uIGFzIFBsdWdpblBhcmFtcztcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
@@ -0,0 +1,6 @@
1
+ export type Generator = {
2
+ /**
3
+ * generate the next value, optionally based on historical values
4
+ */
5
+ next: (historical: Object[] | undefined) => Object;
6
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYnVpbHRpbnMvbW9jay1vYnNlcnZhdGlvbnMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgR2VuZXJhdG9yID0ge1xuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIG5leHQgdmFsdWUsIG9wdGlvbmFsbHkgYmFzZWQgb24gaGlzdG9yaWNhbCB2YWx1ZXNcbiAgICovXG4gIG5leHQ6IChoaXN0b3JpY2FsOiBPYmplY3RbXSB8IHVuZGVmaW5lZCkgPT4gT2JqZWN0O1xufTtcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { DateTime } from 'luxon';
2
+ import { Generator } from './interfaces/index';
3
+ export type ObservationParams = {
4
+ duration: number;
5
+ timeBucket: DateTime;
6
+ component: Record<string, string>;
7
+ generators: Generator[];
8
+ };
9
+ export type RandIntGeneratorParams = {
10
+ name: string;
11
+ min: number;
12
+ max: number;
13
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbW9jay1vYnNlcnZhdGlvbnMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuaW1wb3J0IHtHZW5lcmF0b3J9IGZyb20gJy4vaW50ZXJmYWNlcy9pbmRleCc7XG5cbmV4cG9ydCB0eXBlIE9ic2VydmF0aW9uUGFyYW1zID0ge1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICB0aW1lQnVja2V0OiBEYXRlVGltZTtcbiAgY29tcG9uZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBnZW5lcmF0b3JzOiBHZW5lcmF0b3JbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJhbmRJbnRHZW5lcmF0b3JQYXJhbXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWluOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xufTtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { ExecutePlugin } from '../../types/interface';
2
+ import { MultiplyConfig } from './types';
3
+ export declare const Multiply: (globalConfig: MultiplyConfig) => ExecutePlugin;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Multiply = void 0;
4
+ const zod_1 = require("zod");
5
+ const helpers_1 = require("../../util/helpers");
6
+ const errors_1 = require("../../util/errors");
7
+ const validations_1 = require("../../util/validations");
8
+ const { InputValidationError } = errors_1.ERRORS;
9
+ const Multiply = (globalConfig) => {
10
+ const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.Multiply.name);
11
+ const metadata = {
12
+ kind: 'execute',
13
+ };
14
+ /**
15
+ * Checks global config value are valid.
16
+ */
17
+ const validateGlobalConfig = () => {
18
+ const globalConfigSchema = zod_1.z.object({
19
+ 'input-parameters': zod_1.z.array(zod_1.z.string()),
20
+ 'output-parameter': zod_1.z.string().min(1),
21
+ });
22
+ return (0, validations_1.validate)(globalConfigSchema, globalConfig);
23
+ };
24
+ /**
25
+ * Checks for required fields in input.
26
+ */
27
+ const validateSingleInput = (input, inputParameters) => {
28
+ inputParameters.forEach(metricToMultiply => {
29
+ if (input[metricToMultiply] === undefined ||
30
+ isNaN(input[metricToMultiply])) {
31
+ throw new InputValidationError(errorBuilder({
32
+ message: `${metricToMultiply} is missing from the input array`,
33
+ }));
34
+ }
35
+ });
36
+ return input;
37
+ };
38
+ /**
39
+ * Calculate the product of each input parameter.
40
+ */
41
+ const execute = (inputs) => {
42
+ const safeGlobalConfig = validateGlobalConfig();
43
+ const inputParameters = safeGlobalConfig['input-parameters'];
44
+ const outputParameter = safeGlobalConfig['output-parameter'];
45
+ return inputs.map(input => {
46
+ const safeInput = validateSingleInput(input, inputParameters);
47
+ return {
48
+ ...input,
49
+ [outputParameter]: calculateProduct(safeInput, inputParameters),
50
+ };
51
+ });
52
+ };
53
+ /**
54
+ * Calculates the product of the energy components.
55
+ */
56
+ const calculateProduct = (input, inputParameters) => inputParameters.reduce((accumulator, metricToMultiply) => accumulator * input[metricToMultiply], 1);
57
+ return {
58
+ metadata,
59
+ execute,
60
+ };
61
+ };
62
+ exports.Multiply = Multiply;
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbXVsdGlwbHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBRXRCLGdEQUFxRDtBQUNyRCw4Q0FBeUM7QUFDekMsd0RBQWdEO0FBS2hELE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUUvQixNQUFNLFFBQVEsR0FBRyxDQUFDLFlBQTRCLEVBQWlCLEVBQUU7SUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBaUIsRUFBQyxnQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2xDLGtCQUFrQixFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLGtCQUFrQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFtQixFQUNuQixlQUF5QixFQUN6QixFQUFFO1FBQ0YsZUFBZSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3pDLElBQ0UsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUztnQkFDckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQzlCO2dCQUNBLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsWUFBWSxDQUFDO29CQUNYLE9BQU8sRUFBRSxHQUFHLGdCQUFnQixrQ0FBa0M7aUJBQy9ELENBQUMsQ0FDSCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQXNCLEVBQWtCLEVBQUU7UUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU3RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRTlELE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLENBQUMsZUFBZSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQzthQUNoRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLGVBQXlCLEVBQUUsRUFBRSxDQUMxRSxlQUFlLENBQUMsTUFBTSxDQUNwQixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN4RSxDQUFDLENBQ0YsQ0FBQztJQUVKLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUEzRVcsUUFBQSxRQUFRLFlBMkVuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtidWlsZEVycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi91dGlsL2Vycm9ycyc7XG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge011bHRpcGx5Q29uZmlnfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IE11bHRpcGx5ID0gKGdsb2JhbENvbmZpZzogTXVsdGlwbHlDb25maWcpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgZXJyb3JCdWlsZGVyID0gYnVpbGRFcnJvck1lc3NhZ2UoTXVsdGlwbHkubmFtZSk7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGdsb2JhbCBjb25maWcgdmFsdWUgYXJlIHZhbGlkLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgJ2lucHV0LXBhcmFtZXRlcnMnOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgJ291dHB1dC1wYXJhbWV0ZXInOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBnbG9iYWxDb25maWdTY2hlbWE+PihcbiAgICAgIGdsb2JhbENvbmZpZ1NjaGVtYSxcbiAgICAgIGdsb2JhbENvbmZpZ1xuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgcmVxdWlyZWQgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVTaW5nbGVJbnB1dCA9IChcbiAgICBpbnB1dDogUGx1Z2luUGFyYW1zLFxuICAgIGlucHV0UGFyYW1ldGVyczogc3RyaW5nW11cbiAgKSA9PiB7XG4gICAgaW5wdXRQYXJhbWV0ZXJzLmZvckVhY2gobWV0cmljVG9NdWx0aXBseSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlucHV0W21ldHJpY1RvTXVsdGlwbHldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgaXNOYU4oaW5wdXRbbWV0cmljVG9NdWx0aXBseV0pXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGVycm9yQnVpbGRlcih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgJHttZXRyaWNUb011bHRpcGx5fSBpcyBtaXNzaW5nIGZyb20gdGhlIGlucHV0IGFycmF5YCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2YgZWFjaCBpbnB1dCBwYXJhbWV0ZXIuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pOiBQbHVnaW5QYXJhbXNbXSA9PiB7XG4gICAgY29uc3Qgc2FmZUdsb2JhbENvbmZpZyA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXJzID0gc2FmZUdsb2JhbENvbmZpZ1snaW5wdXQtcGFyYW1ldGVycyddO1xuICAgIGNvbnN0IG91dHB1dFBhcmFtZXRlciA9IHNhZmVHbG9iYWxDb25maWdbJ291dHB1dC1wYXJhbWV0ZXInXTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IHNhZmVJbnB1dCA9IHZhbGlkYXRlU2luZ2xlSW5wdXQoaW5wdXQsIGlucHV0UGFyYW1ldGVycyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBbb3V0cHV0UGFyYW1ldGVyXTogY2FsY3VsYXRlUHJvZHVjdChzYWZlSW5wdXQsIGlucHV0UGFyYW1ldGVycyksXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwcm9kdWN0IG9mIHRoZSBlbmVyZ3kgY29tcG9uZW50cy5cbiAgICovXG4gIGNvbnN0IGNhbGN1bGF0ZVByb2R1Y3QgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaW5wdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSkgPT5cbiAgICBpbnB1dFBhcmFtZXRlcnMucmVkdWNlKFxuICAgICAgKGFjY3VtdWxhdG9yLCBtZXRyaWNUb011bHRpcGx5KSA9PiBhY2N1bXVsYXRvciAqIGlucHV0W21ldHJpY1RvTXVsdGlwbHldLFxuICAgICAgMVxuICAgICk7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YSxcbiAgICBleGVjdXRlLFxuICB9O1xufTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export type MultiplyConfig = {
2
+ 'input-parameters': string[];
3
+ 'output-parameter': string;
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbXVsdGlwbHkvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE11bHRpcGx5Q29uZmlnID0ge1xuICAnaW5wdXQtcGFyYW1ldGVycyc6IHN0cmluZ1tdO1xuICAnb3V0cHV0LXBhcmFtZXRlcic6IHN0cmluZztcbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { ExecutePlugin } from '../../types/interface';
2
+ import { ConfigParams } from '../../types/common';
3
+ export declare const Regex: (globalConfig: ConfigParams) => ExecutePlugin;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Regex = void 0;
4
+ const zod_1 = require("zod");
5
+ const helpers_1 = require("../../util/helpers");
6
+ const errors_1 = require("../../util/errors");
7
+ const validations_1 = require("../../util/validations");
8
+ const { InputValidationError, ConfigValidationError } = errors_1.ERRORS;
9
+ const Regex = (globalConfig) => {
10
+ const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.Regex.name);
11
+ const metadata = {
12
+ kind: 'execute',
13
+ };
14
+ /**
15
+ * Checks global config value are valid.
16
+ */
17
+ const validateGlobalConfig = () => {
18
+ if (!globalConfig) {
19
+ throw new ConfigValidationError(errorBuilder({ message: 'Configuration data is missing' }));
20
+ }
21
+ const schema = zod_1.z.object({
22
+ parameter: zod_1.z.string().min(1),
23
+ match: zod_1.z.string().min(1),
24
+ output: zod_1.z.string(),
25
+ });
26
+ return (0, validations_1.validate)(schema, globalConfig);
27
+ };
28
+ /**
29
+ * Checks for required fields in input.
30
+ */
31
+ const validateSingleInput = (input, parameter) => {
32
+ if (!input[parameter]) {
33
+ throw new InputValidationError(errorBuilder({
34
+ message: `\`${parameter}\` is missing from the input`,
35
+ }));
36
+ }
37
+ return input;
38
+ };
39
+ /**
40
+ * Executes the regex of the given parameter.
41
+ */
42
+ const execute = (inputs) => {
43
+ const safeGlobalConfig = validateGlobalConfig();
44
+ const { parameter: parameter, match, output } = safeGlobalConfig;
45
+ return inputs.map(input => {
46
+ const safeInput = Object.assign({}, input, validateSingleInput(input, parameter));
47
+ return {
48
+ ...input,
49
+ [output]: extractMatching(safeInput, parameter, match),
50
+ };
51
+ });
52
+ };
53
+ /**
54
+ * Extracts a substring from the given input parameter that matches the provided regular expression pattern.
55
+ */
56
+ const extractMatching = (input, parameter, match) => {
57
+ if (!match.startsWith('/')) {
58
+ match = '/' + match;
59
+ }
60
+ if (!match.endsWith('/g') && !match.endsWith('/')) {
61
+ match += '/';
62
+ }
63
+ const regex = eval(match);
64
+ const matchedItem = input[parameter].match(regex);
65
+ if (!matchedItem || !matchedItem[0]) {
66
+ throw new InputValidationError(errorBuilder({
67
+ message: `\`${input[parameter]}\` does not match the ${match} regex expression`,
68
+ }));
69
+ }
70
+ return matchedItem[0];
71
+ };
72
+ return {
73
+ metadata,
74
+ execute,
75
+ };
76
+ };
77
+ exports.Regex = Regex;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvcmVnZXgvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBRXRCLGdEQUFxRDtBQUNyRCw4Q0FBeUM7QUFDekMsd0RBQWdEO0FBS2hELE1BQU0sRUFBQyxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUV0RCxNQUFNLEtBQUssR0FBRyxDQUFDLFlBQTBCLEVBQWlCLEVBQUU7SUFDakUsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBaUIsRUFBQyxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxxQkFBcUIsQ0FDN0IsWUFBWSxDQUFDLEVBQUMsT0FBTyxFQUFFLCtCQUErQixFQUFDLENBQUMsQ0FDekQsQ0FBQztTQUNIO1FBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUIsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQ25CLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBbUIsRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQixNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQUUsS0FBSyxTQUFTLDhCQUE4QjthQUN0RCxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFFL0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzdCLEVBQUUsRUFDRixLQUFLLEVBQ0wsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUN0QyxDQUFDO1lBRUYsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsQ0FBQyxNQUFNLENBQUMsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7YUFDdkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUFtQixFQUNuQixTQUFpQixFQUNqQixLQUFhLEVBQ2IsRUFBRTtRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELEtBQUssSUFBSSxHQUFHLENBQUM7U0FDZDtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkMsTUFBTSxJQUFJLG9CQUFvQixDQUM1QixZQUFZLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsS0FBSyxtQkFBbUI7YUFDaEYsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUE5RlcsUUFBQSxLQUFLLFNBOEZoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtidWlsZEVycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi91dGlsL2Vycm9ycyc7XG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge0NvbmZpZ1BhcmFtc30gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yLCBDb25maWdWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5leHBvcnQgY29uc3QgUmVnZXggPSAoZ2xvYmFsQ29uZmlnOiBDb25maWdQYXJhbXMpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgZXJyb3JCdWlsZGVyID0gYnVpbGRFcnJvck1lc3NhZ2UoUmVnZXgubmFtZSk7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGdsb2JhbCBjb25maWcgdmFsdWUgYXJlIHZhbGlkLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgaWYgKCFnbG9iYWxDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBDb25maWdWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGVycm9yQnVpbGRlcih7bWVzc2FnZTogJ0NvbmZpZ3VyYXRpb24gZGF0YSBpcyBtaXNzaW5nJ30pXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICBwYXJhbWV0ZXI6IHouc3RyaW5nKCkubWluKDEpLFxuICAgICAgbWF0Y2g6IHouc3RyaW5nKCkubWluKDEpLFxuICAgICAgb3V0cHV0OiB6LnN0cmluZygpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgZ2xvYmFsQ29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGZvciByZXF1aXJlZCBmaWVsZHMgaW4gaW5wdXQuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZVNpbmdsZUlucHV0ID0gKGlucHV0OiBQbHVnaW5QYXJhbXMsIHBhcmFtZXRlcjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpbnB1dFtwYXJhbWV0ZXJdKSB7XG4gICAgICB0aHJvdyBuZXcgSW5wdXRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGVycm9yQnVpbGRlcih7XG4gICAgICAgICAgbWVzc2FnZTogYFxcYCR7cGFyYW1ldGVyfVxcYCBpcyBtaXNzaW5nIGZyb20gdGhlIGlucHV0YCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgcmVnZXggb2YgdGhlIGdpdmVuIHBhcmFtZXRlci5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSkgPT4ge1xuICAgIGNvbnN0IHNhZmVHbG9iYWxDb25maWcgPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IHtwYXJhbWV0ZXI6IHBhcmFtZXRlciwgbWF0Y2gsIG91dHB1dH0gPSBzYWZlR2xvYmFsQ29uZmlnO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgY29uc3Qgc2FmZUlucHV0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIGlucHV0LFxuICAgICAgICB2YWxpZGF0ZVNpbmdsZUlucHV0KGlucHV0LCBwYXJhbWV0ZXIpXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgW291dHB1dF06IGV4dHJhY3RNYXRjaGluZyhzYWZlSW5wdXQsIHBhcmFtZXRlciwgbWF0Y2gpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBzdWJzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgcGFyYW1ldGVyIHRoYXQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uXG4gICAqL1xuICBjb25zdCBleHRyYWN0TWF0Y2hpbmcgPSAoXG4gICAgaW5wdXQ6IFBsdWdpblBhcmFtcyxcbiAgICBwYXJhbWV0ZXI6IHN0cmluZyxcbiAgICBtYXRjaDogc3RyaW5nXG4gICkgPT4ge1xuICAgIGlmICghbWF0Y2guc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBtYXRjaCA9ICcvJyArIG1hdGNoO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2guZW5kc1dpdGgoJy9nJykgJiYgIW1hdGNoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG1hdGNoICs9ICcvJztcbiAgICB9XG5cbiAgICBjb25zdCByZWdleCA9IGV2YWwobWF0Y2gpO1xuICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gaW5wdXRbcGFyYW1ldGVyXS5tYXRjaChyZWdleCk7XG5cbiAgICBpZiAoIW1hdGNoZWRJdGVtIHx8ICFtYXRjaGVkSXRlbVswXSkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6IGBcXGAke2lucHV0W3BhcmFtZXRlcl19XFxgIGRvZXMgbm90IG1hdGNoIHRoZSAke21hdGNofSByZWdleCBleHByZXNzaW9uYCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRJdGVtWzBdO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare const TIME_UNITS_IN_SECONDS: Record<string, number>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TIME_UNITS_IN_SECONDS = void 0;
4
+ exports.TIME_UNITS_IN_SECONDS = {
5
+ s: 1,
6
+ second: 1,
7
+ sec: 1,
8
+ secs: 1,
9
+ seconds: 1,
10
+ min: 60,
11
+ mins: 60,
12
+ minute: 60,
13
+ minutes: 60,
14
+ h: 3600,
15
+ hs: 3600,
16
+ hr: 3600,
17
+ hrs: 3600,
18
+ hour: 3600,
19
+ hours: 3600,
20
+ d: 86400,
21
+ ds: 86400,
22
+ day: 86400,
23
+ days: 86400,
24
+ w: 604800,
25
+ ws: 604800,
26
+ wk: 604800,
27
+ wks: 604800,
28
+ week: 604800,
29
+ weeks: 604800,
30
+ m: 2419200,
31
+ mnth: 2419200,
32
+ mth: 2419200,
33
+ mnths: 2419200,
34
+ mths: 2419200,
35
+ month: 2419200,
36
+ months: 2419200,
37
+ y: 31536000,
38
+ ys: 31536000,
39
+ yr: 31536000,
40
+ yrs: 31536000,
41
+ year: 31536000,
42
+ years: 31536000,
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWx0aW5zL3NjaS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxxQkFBcUIsR0FBMkI7SUFDM0QsQ0FBQyxFQUFFLENBQUM7SUFDSixNQUFNLEVBQUUsQ0FBQztJQUNULEdBQUcsRUFBRSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUM7SUFDUCxPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxFQUFFO0lBQ1AsSUFBSSxFQUFFLEVBQUU7SUFDUixNQUFNLEVBQUUsRUFBRTtJQUNWLE9BQU8sRUFBRSxFQUFFO0lBQ1gsQ0FBQyxFQUFFLElBQUk7SUFDUCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsR0FBRyxFQUFFLElBQUk7SUFDVCxJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxJQUFJO0lBQ1gsQ0FBQyxFQUFFLEtBQUs7SUFDUixFQUFFLEVBQUUsS0FBSztJQUNULEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLEtBQUs7SUFDWCxDQUFDLEVBQUUsTUFBTTtJQUNULEVBQUUsRUFBRSxNQUFNO0lBQ1YsRUFBRSxFQUFFLE1BQU07SUFDVixHQUFHLEVBQUUsTUFBTTtJQUNYLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE1BQU07SUFDYixDQUFDLEVBQUUsT0FBTztJQUNWLElBQUksRUFBRSxPQUFPO0lBQ2IsR0FBRyxFQUFFLE9BQU87SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLElBQUksRUFBRSxPQUFPO0lBQ2IsS0FBSyxFQUFFLE9BQU87SUFDZCxNQUFNLEVBQUUsT0FBTztJQUNmLENBQUMsRUFBRSxRQUFRO0lBQ1gsRUFBRSxFQUFFLFFBQVE7SUFDWixFQUFFLEVBQUUsUUFBUTtJQUNaLEdBQUcsRUFBRSxRQUFRO0lBQ2IsSUFBSSxFQUFFLFFBQVE7SUFDZCxLQUFLLEVBQUUsUUFBUTtDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfSU5fU0VDT05EUzogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgczogMSxcbiAgc2Vjb25kOiAxLFxuICBzZWM6IDEsXG4gIHNlY3M6IDEsXG4gIHNlY29uZHM6IDEsXG4gIG1pbjogNjAsXG4gIG1pbnM6IDYwLFxuICBtaW51dGU6IDYwLFxuICBtaW51dGVzOiA2MCxcbiAgaDogMzYwMCxcbiAgaHM6IDM2MDAsXG4gIGhyOiAzNjAwLFxuICBocnM6IDM2MDAsXG4gIGhvdXI6IDM2MDAsXG4gIGhvdXJzOiAzNjAwLFxuICBkOiA4NjQwMCxcbiAgZHM6IDg2NDAwLFxuICBkYXk6IDg2NDAwLFxuICBkYXlzOiA4NjQwMCxcbiAgdzogNjA0ODAwLFxuICB3czogNjA0ODAwLFxuICB3azogNjA0ODAwLFxuICB3a3M6IDYwNDgwMCxcbiAgd2VlazogNjA0ODAwLFxuICB3ZWVrczogNjA0ODAwLFxuICBtOiAyNDE5MjAwLFxuICBtbnRoOiAyNDE5MjAwLFxuICBtdGg6IDI0MTkyMDAsXG4gIG1udGhzOiAyNDE5MjAwLFxuICBtdGhzOiAyNDE5MjAwLFxuICBtb250aDogMjQxOTIwMCxcbiAgbW9udGhzOiAyNDE5MjAwLFxuICB5OiAzMTUzNjAwMCxcbiAgeXM6IDMxNTM2MDAwLFxuICB5cjogMzE1MzYwMDAsXG4gIHlyczogMzE1MzYwMDAsXG4gIHllYXI6IDMxNTM2MDAwLFxuICB5ZWFyczogMzE1MzYwMDAsXG59O1xuIl19
@@ -0,0 +1,3 @@
1
+ import { ExecutePlugin } from '../../types/interface';
2
+ import { ConfigParams } from '../../types/common';
3
+ export declare const Sci: (globalConfig: ConfigParams) => ExecutePlugin;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Sci = void 0;
4
+ const zod_1 = require("zod");
5
+ const validations_1 = require("../../util/validations");
6
+ const helpers_1 = require("../../util/helpers");
7
+ const errors_1 = require("../../util/errors");
8
+ const { InputValidationError } = errors_1.ERRORS;
9
+ const Sci = (globalConfig) => {
10
+ const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.Sci.name);
11
+ const metadata = {
12
+ kind: 'execute',
13
+ };
14
+ /**
15
+ * Validates node and gloabl configs.
16
+ */
17
+ const validateConfig = (config) => {
18
+ const errorMessage = '`functional-unit` should be provided in your global config';
19
+ const schema = zod_1.z
20
+ .object({
21
+ 'functional-unit': zod_1.z.string(),
22
+ })
23
+ .refine(data => data['functional-unit'], {
24
+ message: errorMessage,
25
+ });
26
+ return (0, validations_1.validate)(schema, config);
27
+ };
28
+ /**
29
+ * Calculate the total emissions for a list of inputs.
30
+ */
31
+ const execute = (inputs) => {
32
+ return inputs.map(input => {
33
+ const safeInput = validateInput(input);
34
+ const sci = safeInput['carbon'] > 0
35
+ ? safeInput['carbon'] / input[globalConfig['functional-unit']]
36
+ : 0;
37
+ return {
38
+ ...input,
39
+ sci,
40
+ };
41
+ });
42
+ };
43
+ /**
44
+ * Checks for fields in input.
45
+ */
46
+ const validateInput = (input) => {
47
+ const message = `'carbon' and ${globalConfig['functional-unit']} should be present in your input data.`;
48
+ const validatedConfig = validateConfig(globalConfig);
49
+ if (!(validatedConfig['functional-unit'] in input &&
50
+ input[validatedConfig['functional-unit']] > 0)) {
51
+ throw new InputValidationError(errorBuilder({
52
+ message: 'functional-unit value is missing from input data or it is not a positive integer',
53
+ }));
54
+ }
55
+ const schema = zod_1.z
56
+ .object({
57
+ carbon: zod_1.z.number().gte(0),
58
+ duration: zod_1.z.number().gte(1),
59
+ })
60
+ .refine(validations_1.allDefined, { message });
61
+ return (0, validations_1.validate)(schema, input);
62
+ };
63
+ return {
64
+ metadata,
65
+ execute,
66
+ };
67
+ };
68
+ exports.Sci = Sci;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvc2NpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQUt0Qix3REFBNEQ7QUFDNUQsZ0RBQXFEO0FBQ3JELDhDQUF5QztBQUV6QyxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxZQUEwQixFQUFpQixFQUFFO0lBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUEsMkJBQWlCLEVBQUMsV0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFxQixFQUFFLEVBQUU7UUFDL0MsTUFBTSxZQUFZLEdBQ2hCLDREQUE0RCxDQUFDO1FBRS9ELE1BQU0sTUFBTSxHQUFHLE9BQUM7YUFDYixNQUFNLENBQUM7WUFDTixpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQzlCLENBQUM7YUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUN2QyxPQUFPLEVBQUUsWUFBWTtTQUN0QixDQUFDLENBQUM7UUFFTCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFrQixFQUFFO1FBQ3pELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsTUFBTSxHQUFHLEdBQ1AsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsR0FBRzthQUNKLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyx3Q0FBd0MsQ0FBQztRQUV4RyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckQsSUFDRSxDQUFDLENBQ0MsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSztZQUMzQyxLQUFLLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQzlDLEVBQ0Q7WUFDQSxNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQ0wsa0ZBQWtGO2FBQ3JGLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFDO2FBQ2IsTUFBTSxDQUFDO1lBQ04sTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QixDQUFDO2FBQ0QsTUFBTSxDQUFDLHdCQUFVLEVBQUUsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQTdFVyxRQUFBLEdBQUcsT0E2RWQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zfSBmcm9tICcuLi8uLi90eXBlcy9pbnRlcmZhY2UnO1xuaW1wb3J0IHtDb25maWdQYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2NvbW1vbic7XG5cbmltcG9ydCB7dmFsaWRhdGUsIGFsbERlZmluZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHtidWlsZEVycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi91dGlsL2Vycm9ycyc7XG5cbmNvbnN0IHtJbnB1dFZhbGlkYXRpb25FcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBTY2kgPSAoZ2xvYmFsQ29uZmlnOiBDb25maWdQYXJhbXMpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgZXJyb3JCdWlsZGVyID0gYnVpbGRFcnJvck1lc3NhZ2UoU2NpLm5hbWUpO1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBub2RlIGFuZCBnbG9hYmwgY29uZmlncy5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKGNvbmZpZz86IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAnYGZ1bmN0aW9uYWwtdW5pdGAgc2hvdWxkIGJlIHByb3ZpZGVkIGluIHlvdXIgZ2xvYmFsIGNvbmZpZyc7XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgJ2Z1bmN0aW9uYWwtdW5pdCc6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgICAgLnJlZmluZShkYXRhID0+IGRhdGFbJ2Z1bmN0aW9uYWwtdW5pdCddLCB7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgY29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBlbWlzc2lvbnMgZm9yIGEgbGlzdCBvZiBpbnB1dHMuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pOiBQbHVnaW5QYXJhbXNbXSA9PiB7XG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgY29uc3Qgc2FmZUlucHV0ID0gdmFsaWRhdGVJbnB1dChpbnB1dCk7XG4gICAgICBjb25zdCBzY2kgPVxuICAgICAgICBzYWZlSW5wdXRbJ2NhcmJvbiddID4gMFxuICAgICAgICAgID8gc2FmZUlucHV0WydjYXJib24nXSAvIGlucHV0W2dsb2JhbENvbmZpZ1snZnVuY3Rpb25hbC11bml0J11dXG4gICAgICAgICAgOiAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIHNjaSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVJbnB1dCA9IChpbnB1dDogUGx1Z2luUGFyYW1zKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGAnY2FyYm9uJyBhbmQgJHtnbG9iYWxDb25maWdbJ2Z1bmN0aW9uYWwtdW5pdCddfSBzaG91bGQgYmUgcHJlc2VudCBpbiB5b3VyIGlucHV0IGRhdGEuYDtcblxuICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQ29uZmlnKGdsb2JhbENvbmZpZyk7XG5cbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICB2YWxpZGF0ZWRDb25maWdbJ2Z1bmN0aW9uYWwtdW5pdCddIGluIGlucHV0ICYmXG4gICAgICAgIGlucHV0W3ZhbGlkYXRlZENvbmZpZ1snZnVuY3Rpb25hbC11bml0J11dID4gMFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAnZnVuY3Rpb25hbC11bml0IHZhbHVlIGlzIG1pc3NpbmcgZnJvbSBpbnB1dCBkYXRhIG9yIGl0IGlzIG5vdCBhIHBvc2l0aXZlIGludGVnZXInLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgY2FyYm9uOiB6Lm51bWJlcigpLmd0ZSgwKSxcbiAgICAgICAgZHVyYXRpb246IHoubnVtYmVyKCkuZ3RlKDEpLFxuICAgICAgfSlcbiAgICAgIC5yZWZpbmUoYWxsRGVmaW5lZCwge21lc3NhZ2V9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
@@ -0,0 +1,2 @@
1
+ import { ExecutePlugin } from '../../types/interface';
2
+ export declare const SciEmbodied: () => ExecutePlugin;
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SciEmbodied = void 0;
4
+ const zod_1 = require("zod");
5
+ const validations_1 = require("../../util/validations");
6
+ const SciEmbodied = () => {
7
+ const metadata = {
8
+ kind: 'execute',
9
+ };
10
+ const METRICS = [
11
+ 'device/emissions-embodied',
12
+ 'device/expected-lifespan',
13
+ 'resources-reserved',
14
+ 'vcpus-allocated',
15
+ 'resources-total',
16
+ 'vcpus-total',
17
+ ];
18
+ /**
19
+ * Calculate the Embodied carbon for a list of inputs.
20
+ */
21
+ const execute = (inputs) => {
22
+ return inputs.map(input => {
23
+ const safeInput = validateInput(input);
24
+ return {
25
+ ...input,
26
+ 'carbon-embodied': calculateEmbodiedCarbon(safeInput),
27
+ };
28
+ });
29
+ };
30
+ /**
31
+ * Calculate the Embodied carbon for the input.
32
+ * M = totalEmissions * (duration/ExpectedLifespan) * (resourcesReserved/totalResources)
33
+ */
34
+ const calculateEmbodiedCarbon = (input) => {
35
+ const totalEmissions = input['device/emissions-embodied'];
36
+ const duration = input['duration'];
37
+ const expectedLifespan = input['device/expected-lifespan'];
38
+ const resourcesReserved = input['vcpus-allocated'] || input['resources-reserved'];
39
+ const totalResources = input['vcpus-total'] || input['resources-total'];
40
+ return (totalEmissions *
41
+ (duration / expectedLifespan) *
42
+ (resourcesReserved / totalResources));
43
+ };
44
+ /**
45
+ * Checks for required fields in input.
46
+ */
47
+ const validateInput = (input) => {
48
+ const errorMessage = (unit) => `not a valid number in input. Please provide it as \`${unit}\``;
49
+ const commonSchemaPart = (errorMessage) => ({
50
+ 'device/emissions-embodied': zod_1.z
51
+ .number({
52
+ invalid_type_error: errorMessage('gCO2e'),
53
+ })
54
+ .gte(0)
55
+ .min(0),
56
+ 'device/expected-lifespan': zod_1.z
57
+ .number({
58
+ invalid_type_error: errorMessage('gCO2e'),
59
+ })
60
+ .gte(0)
61
+ .min(0),
62
+ duration: zod_1.z
63
+ .number({
64
+ invalid_type_error: errorMessage('seconds'),
65
+ })
66
+ .gte(1),
67
+ });
68
+ const vcpusSchemaPart = {
69
+ 'vcpus-allocated': zod_1.z
70
+ .number({
71
+ invalid_type_error: errorMessage('count'),
72
+ })
73
+ .gte(0)
74
+ .min(0),
75
+ 'vcpus-total': zod_1.z
76
+ .number({
77
+ invalid_type_error: errorMessage('count'),
78
+ })
79
+ .gte(0)
80
+ .min(0),
81
+ };
82
+ const resourcesSchemaPart = {
83
+ 'resources-reserved': zod_1.z
84
+ .number({
85
+ invalid_type_error: errorMessage('count'),
86
+ })
87
+ .gte(0)
88
+ .min(0),
89
+ 'resources-total': zod_1.z
90
+ .number({
91
+ invalid_type_error: errorMessage('count'),
92
+ })
93
+ .gte(0)
94
+ .min(0),
95
+ };
96
+ const schemaWithVcpus = zod_1.z.object({
97
+ ...commonSchemaPart(errorMessage),
98
+ ...vcpusSchemaPart,
99
+ });
100
+ const schemaWithResources = zod_1.z.object({
101
+ ...commonSchemaPart(errorMessage),
102
+ ...resourcesSchemaPart,
103
+ });
104
+ const schema = schemaWithVcpus.or(schemaWithResources).refine(validations_1.allDefined, {
105
+ message: `All ${METRICS} should be present.`,
106
+ });
107
+ return (0, validations_1.validate)(schema, input);
108
+ };
109
+ return {
110
+ metadata,
111
+ execute,
112
+ };
113
+ };
114
+ exports.SciEmbodied = SciEmbodied;
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvc2NpLWVtYm9kaWVkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQUl0Qix3REFBNEQ7QUFFckQsTUFBTSxXQUFXLEdBQUcsR0FBa0IsRUFBRTtJQUM3QyxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRixNQUFNLE9BQU8sR0FBRztRQUNkLDJCQUEyQjtRQUMzQiwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsYUFBYTtLQUNkLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsaUJBQWlCLEVBQUUsdUJBQXVCLENBQUMsU0FBUyxDQUFDO2FBQ3RELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDdEQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDMUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0QsTUFBTSxpQkFBaUIsR0FDckIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDMUQsTUFBTSxjQUFjLEdBQUcs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LE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBNUhXLFFBQUEsV0FBVyxlQTRIdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zfSBmcm9tICcuLi8uLi90eXBlcy9pbnRlcmZhY2UnO1xuXG5pbXBvcnQge3ZhbGlkYXRlLCBhbGxEZWZpbmVkfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IFNjaUVtYm9kaWVkID0gKCk6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgY29uc3QgTUVUUklDUyA9IFtcbiAgICAnZGV2aWNlL2VtaXNzaW9ucy1lbWJvZGllZCcsXG4gICAgJ2RldmljZS9leHBlY3RlZC1saWZlc3BhbicsXG4gICAgJ3Jlc291cmNlcy1yZXNlcnZlZCcsXG4gICAgJ3ZjcHVzLWFsbG9jYXRlZCcsXG4gICAgJ3Jlc291cmNlcy10b3RhbCcsXG4gICAgJ3ZjcHVzLXRvdGFsJyxcbiAgXTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBFbWJvZGllZCBjYXJib24gZm9yIGEgbGlzdCBvZiBpbnB1dHMuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pID0+IHtcbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiB7XG4gICAgICBjb25zdCBzYWZlSW5wdXQgPSB2YWxpZGF0ZUlucHV0KGlucHV0KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICdjYXJib24tZW1ib2RpZWQnOiBjYWxjdWxhdGVFbWJvZGllZENhcmJvbihzYWZlSW5wdXQpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBFbWJvZGllZCBjYXJib24gZm9yIHRoZSBpbnB1dC5cbiAgICogTSA9IHRvdGFsRW1pc3Npb25zICogKGR1cmF0aW9uL0V4cGVjdGVkTGlmZXNwYW4pICogKHJlc291cmNlc1Jlc2VydmVkL3RvdGFsUmVzb3VyY2VzKVxuICAgKi9cbiAgY29uc3QgY2FsY3VsYXRlRW1ib2RpZWRDYXJib24gPSAoaW5wdXQ6IFBsdWdpblBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHRvdGFsRW1pc3Npb25zID0gaW5wdXRbJ2RldmljZS9lbWlzc2lvbnMtZW1ib2RpZWQnXTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlucHV0WydkdXJhdGlvbiddO1xuICAgIGNvbnN0IGV4cGVjdGVkTGlmZXNwYW4gPSBpbnB1dFsnZGV2aWNlL2V4cGVjdGVkLWxpZmVzcGFuJ107XG4gICAgY29uc3QgcmVzb3VyY2VzUmVzZXJ2ZWQgPVxuICAgICAgaW5wdXRbJ3ZjcHVzLWFsbG9jYXRlZCddIHx8IGlucHV0WydyZXNvdXJjZXMtcmVzZXJ2ZWQnXTtcbiAgICBjb25zdCB0b3RhbFJlc291cmNlcyA9IGlucHV0Wyd2Y3B1cy10b3RhbCddIHx8IGlucHV0WydyZXNvdXJjZXMtdG90YWwnXTtcblxuICAgIHJldHVybiAoXG4gICAgICB0b3RhbEVtaXNzaW9ucyAqXG4gICAgICAoZHVyYXRpb24gLyBleHBlY3RlZExpZmVzcGFuKSAqXG4gICAgICAocmVzb3VyY2VzUmVzZXJ2ZWQgLyB0b3RhbFJlc291cmNlcylcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHJlcXVpcmVkIGZpZWxkcyBpbiBpbnB1dC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlSW5wdXQgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICh1bml0OiBzdHJpbmcpID0+XG4gICAgICBgbm90IGEgdmFsaWQgbnVtYmVyIGluIGlucHV0LiBQbGVhc2UgcHJvdmlkZSBpdCBhcyBcXGAke3VuaXR9XFxgYDtcblxuICAgIGNvbnN0IGNvbW1vblNjaGVtYVBhcnQgPSAoZXJyb3JNZXNzYWdlOiAodW5pdDogc3RyaW5nKSA9PiBzdHJpbmcpID0+ICh7XG4gICAgICAnZGV2aWNlL2VtaXNzaW9ucy1lbWJvZGllZCc6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBlcnJvck1lc3NhZ2UoJ2dDTzJlJyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICAgICdkZXZpY2UvZXhwZWN0ZWQtbGlmZXNwYW4nOiB6XG4gICAgICAgIC5udW1iZXIoe1xuICAgICAgICAgIGludmFsaWRfdHlwZV9lcnJvcjogZXJyb3JNZXNzYWdlKCdnQ08yZScpLFxuICAgICAgICB9KVxuICAgICAgICAuZ3RlKDApXG4gICAgICAgIC5taW4oMCksXG4gICAgICBkdXJhdGlvbjogelxuICAgICAgICAubnVtYmVyKHtcbiAgICAgICAgICBpbnZhbGlkX3R5cGVfZXJyb3I6IGVycm9yTWVzc2FnZSgnc2Vjb25kcycpLFxuICAgICAgICB9KVxuICAgICAgICAuZ3RlKDEpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdmNwdXNTY2hlbWFQYXJ0ID0ge1xuICAgICAgJ3ZjcHVzLWFsbG9jYXRlZCc6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBlcnJvck1lc3NhZ2UoJ2NvdW50JyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICAgICd2Y3B1cy10b3RhbCc6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBlcnJvck1lc3NhZ2UoJ2NvdW50JyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzb3VyY2VzU2NoZW1hUGFydCA9IHtcbiAgICAgICdyZXNvdXJjZXMtcmVzZXJ2ZWQnOiB6XG4gICAgICAgIC5udW1iZXIoe1xuICAgICAgICAgIGludmFsaWRfdHlwZV9lcnJvcjogZXJyb3JNZXNzYWdlKCdjb3VudCcpLFxuICAgICAgICB9KVxuICAgICAgICAuZ3RlKDApXG4gICAgICAgIC5taW4oMCksXG4gICAgICAncmVzb3VyY2VzLXRvdGFsJzogelxuICAgICAgICAubnVtYmVyKHtcbiAgICAgICAgICBpbnZhbGlkX3R5cGVfZXJyb3I6IGVycm9yTWVzc2FnZSgnY291bnQnKSxcbiAgICAgICAgfSlcbiAgICAgICAgLmd0ZSgwKVxuICAgICAgICAubWluKDApLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFXaXRoVmNwdXMgPSB6Lm9iamVjdCh7XG4gICAgICAuLi5jb21tb25TY2hlbWFQYXJ0KGVycm9yTWVzc2FnZSksXG4gICAgICAuLi52Y3B1c1NjaGVtYVBhcnQsXG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZW1hV2l0aFJlc291cmNlcyA9IHoub2JqZWN0KHtcbiAgICAgIC4uLmNvbW1vblNjaGVtYVBhcnQoZXJyb3JNZXNzYWdlKSxcbiAgICAgIC4uLnJlc291cmNlc1NjaGVtYVBhcnQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFXaXRoVmNwdXMub3Ioc2NoZW1hV2l0aFJlc291cmNlcykucmVmaW5lKGFsbERlZmluZWQsIHtcbiAgICAgIG1lc3NhZ2U6IGBBbGwgJHtNRVRSSUNTfSBzaG91bGQgYmUgcHJlc2VudC5gLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { ExecutePlugin } from '../../types/interface';
2
+ import { ConfigParams } from '../../types/common';
3
+ export declare const Shell: (globalConfig: ConfigParams) => ExecutePlugin;