@grnsft/if 0.7.0 → 0.7.2

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 (203) hide show
  1. package/build/common/config/index.d.ts +1 -0
  2. package/build/common/config/index.js +6 -0
  3. package/build/common/config/strings.d.ts +13 -0
  4. package/build/common/config/strings.js +21 -0
  5. package/build/common/lib/load.d.ts +6 -0
  6. package/build/common/lib/load.js +18 -0
  7. package/build/common/types/manifest.d.ts +13 -0
  8. package/build/common/types/manifest.js +3 -0
  9. package/build/common/util/debug-logger.d.ts +4 -0
  10. package/build/common/util/debug-logger.js +124 -0
  11. package/build/common/util/fs.d.ts +20 -0
  12. package/build/common/util/fs.js +94 -0
  13. package/build/common/util/helpers.d.ts +15 -0
  14. package/build/common/util/helpers.js +80 -0
  15. package/build/common/util/logger.d.ts +5 -0
  16. package/build/common/util/logger.js +39 -0
  17. package/build/common/util/validations.d.ts +465 -0
  18. package/build/common/util/validations.js +148 -0
  19. package/build/common/util/yaml.d.ts +12 -0
  20. package/build/common/util/yaml.js +59 -0
  21. package/build/if-check/config/config.d.ts +6 -0
  22. package/build/if-check/config/config.js +31 -0
  23. package/build/if-check/config/index.d.ts +2 -0
  24. package/build/if-check/config/index.js +8 -0
  25. package/build/if-check/config/strings.d.ts +11 -0
  26. package/build/if-check/config/strings.js +15 -0
  27. package/build/if-check/index.d.ts +2 -0
  28. package/build/if-check/index.js +98 -0
  29. package/build/if-check/types/process-args.d.ts +4 -0
  30. package/build/if-check/types/process-args.js +3 -0
  31. package/build/if-check/util/args.d.ts +10 -0
  32. package/build/if-check/util/args.js +56 -0
  33. package/build/if-check/util/helpers.d.ts +4 -0
  34. package/build/if-check/util/helpers.js +18 -0
  35. package/build/if-check/util/npm.d.ts +4 -0
  36. package/build/if-check/util/npm.js +59 -0
  37. package/build/if-csv/config/config.d.ts +6 -0
  38. package/build/if-csv/config/config.js +36 -0
  39. package/build/if-csv/config/index.d.ts +2 -0
  40. package/build/if-csv/config/index.js +8 -0
  41. package/build/if-csv/config/strings.d.ts +3 -0
  42. package/build/if-csv/config/strings.js +7 -0
  43. package/build/if-csv/index.d.ts +2 -0
  44. package/build/if-csv/index.js +63 -0
  45. package/build/if-csv/types/csv.d.ts +7 -0
  46. package/build/if-csv/types/csv.js +3 -0
  47. package/build/if-csv/types/process-args.d.ts +5 -0
  48. package/build/if-csv/types/process-args.js +3 -0
  49. package/build/if-csv/util/args.d.ts +12 -0
  50. package/build/if-csv/util/args.js +47 -0
  51. package/build/if-csv/util/helpers.d.ts +9 -0
  52. package/build/if-csv/util/helpers.js +95 -0
  53. package/build/if-diff/config/config.d.ts +6 -0
  54. package/build/if-diff/config/config.js +31 -0
  55. package/build/if-diff/config/index.d.ts +2 -0
  56. package/build/if-diff/config/index.js +8 -0
  57. package/build/if-diff/config/strings.d.ts +6 -0
  58. package/build/if-diff/config/strings.js +10 -0
  59. package/build/if-diff/index.d.ts +2 -0
  60. package/build/if-diff/index.js +46 -0
  61. package/build/if-diff/lib/compare.d.ts +10 -0
  62. package/build/if-diff/lib/compare.js +56 -0
  63. package/build/if-diff/lib/load.d.ts +63 -0
  64. package/build/if-diff/lib/load.js +51 -0
  65. package/build/if-diff/types/args.d.ts +5 -0
  66. package/build/if-diff/types/args.js +3 -0
  67. package/build/if-diff/types/compare.d.ts +7 -0
  68. package/build/if-diff/types/compare.js +3 -0
  69. package/build/if-diff/types/process-args.d.ts +4 -0
  70. package/build/if-diff/types/process-args.js +3 -0
  71. package/build/if-diff/util/args.d.ts +5 -0
  72. package/build/if-diff/util/args.js +51 -0
  73. package/build/if-diff/util/helpers.d.ts +13 -0
  74. package/build/if-diff/util/helpers.js +75 -0
  75. package/build/if-env/config/config.d.ts +6 -0
  76. package/build/if-env/config/config.js +37 -0
  77. package/build/if-env/config/index.d.ts +2 -0
  78. package/build/if-env/config/index.js +8 -0
  79. package/build/if-env/config/strings.d.ts +7 -0
  80. package/build/if-env/config/strings.js +11 -0
  81. package/build/if-env/index.d.ts +2 -0
  82. package/build/if-env/index.js +40 -0
  83. package/build/if-env/types/if-env.d.ts +8 -0
  84. package/build/if-env/types/if-env.js +3 -0
  85. package/build/if-env/types/npm.d.ts +9 -0
  86. package/build/if-env/types/npm.js +3 -0
  87. package/build/if-env/types/process-args.d.ts +5 -0
  88. package/build/if-env/types/process-args.js +3 -0
  89. package/build/if-env/util/args.d.ts +12 -0
  90. package/build/if-env/util/args.js +47 -0
  91. package/build/if-env/util/helpers.d.ts +20 -0
  92. package/build/if-env/util/helpers.js +94 -0
  93. package/build/if-env/util/npm.d.ts +24 -0
  94. package/build/if-env/util/npm.js +126 -0
  95. package/build/if-merge/config/config.d.ts +6 -0
  96. package/build/if-merge/config/config.js +43 -0
  97. package/build/if-merge/config/index.d.ts +2 -0
  98. package/build/if-merge/config/index.js +8 -0
  99. package/build/if-merge/config/strings.d.ts +5 -0
  100. package/build/if-merge/config/strings.js +9 -0
  101. package/build/if-merge/index.d.ts +2 -0
  102. package/build/if-merge/index.js +26 -0
  103. package/build/if-merge/types/process-args.d.ts +6 -0
  104. package/build/if-merge/types/process-args.js +3 -0
  105. package/build/if-merge/util/args.d.ts +9 -0
  106. package/build/if-merge/util/args.js +59 -0
  107. package/build/if-merge/util/helpers.d.ts +5 -0
  108. package/build/if-merge/util/helpers.js +83 -0
  109. package/build/if-run/builtins/coefficient/index.d.ts +16 -0
  110. package/build/if-run/builtins/coefficient/index.js +45 -0
  111. package/build/if-run/builtins/copy-param/index.d.ts +21 -0
  112. package/build/if-run/builtins/copy-param/index.js +58 -0
  113. package/build/if-run/builtins/csv-lookup/index.d.ts +16 -0
  114. package/build/if-run/builtins/csv-lookup/index.js +175 -0
  115. package/build/if-run/builtins/divide/index.d.ts +16 -0
  116. package/build/if-run/builtins/divide/index.js +68 -0
  117. package/build/if-run/builtins/exponent/index.d.ts +16 -0
  118. package/build/if-run/builtins/exponent/index.js +52 -0
  119. package/build/if-run/builtins/export-log.d.ts +4 -0
  120. package/build/if-run/builtins/export-log.js +44 -0
  121. package/build/if-run/builtins/export-yaml.d.ts +4 -0
  122. package/build/if-run/builtins/export-yaml.js +30 -0
  123. package/build/if-run/builtins/index.d.ts +16 -0
  124. package/build/if-run/builtins/index.js +36 -0
  125. package/build/if-run/builtins/interpolation/index.d.ts +16 -0
  126. package/build/if-run/builtins/interpolation/index.js +146 -0
  127. package/build/if-run/builtins/mock-observations/helpers/common-generator.d.ts +3 -0
  128. package/build/if-run/builtins/mock-observations/helpers/common-generator.js +29 -0
  129. package/build/if-run/builtins/mock-observations/helpers/rand-int-generator.d.ts +3 -0
  130. package/build/if-run/builtins/mock-observations/helpers/rand-int-generator.js +48 -0
  131. package/build/if-run/builtins/mock-observations/index.d.ts +16 -0
  132. package/build/if-run/builtins/mock-observations/index.js +108 -0
  133. package/build/if-run/builtins/mock-observations/interfaces/index.d.ts +6 -0
  134. package/build/if-run/builtins/mock-observations/interfaces/index.js +3 -0
  135. package/build/if-run/builtins/multiply/index.d.ts +16 -0
  136. package/build/if-run/builtins/multiply/index.js +47 -0
  137. package/build/if-run/builtins/regex/index.d.ts +16 -0
  138. package/build/if-run/builtins/regex/index.js +55 -0
  139. package/build/if-run/builtins/sci/index.d.ts +16 -0
  140. package/build/if-run/builtins/sci/index.js +92 -0
  141. package/build/if-run/builtins/sci-embodied/index.d.ts +16 -0
  142. package/build/if-run/builtins/sci-embodied/index.js +142 -0
  143. package/build/if-run/builtins/shell/index.d.ts +16 -0
  144. package/build/if-run/builtins/shell/index.js +50 -0
  145. package/build/if-run/builtins/subtract/index.d.ts +16 -0
  146. package/build/if-run/builtins/subtract/index.js +51 -0
  147. package/build/if-run/builtins/sum/index.d.ts +16 -0
  148. package/build/if-run/builtins/sum/index.js +37 -0
  149. package/build/if-run/builtins/time-converter/config.d.ts +1 -0
  150. package/build/if-run/builtins/time-converter/config.js +44 -0
  151. package/build/if-run/builtins/time-converter/index.d.ts +16 -0
  152. package/build/if-run/builtins/time-converter/index.js +63 -0
  153. package/build/if-run/builtins/time-sync/index.d.ts +31 -0
  154. package/build/if-run/builtins/time-sync/index.js +371 -0
  155. package/build/if-run/config/config.d.ts +9 -0
  156. package/build/if-run/config/config.js +79 -0
  157. package/build/if-run/config/index.d.ts +2 -0
  158. package/build/if-run/config/index.js +8 -0
  159. package/build/if-run/config/strings.d.ts +62 -0
  160. package/build/if-run/config/strings.js +81 -0
  161. package/build/if-run/index.d.ts +2 -0
  162. package/build/if-run/index.js +58 -0
  163. package/build/if-run/lib/aggregate.d.ts +14 -0
  164. package/build/if-run/lib/aggregate.js +130 -0
  165. package/build/if-run/lib/compute.d.ts +5 -0
  166. package/build/if-run/lib/compute.js +162 -0
  167. package/build/if-run/lib/environment.d.ts +5 -0
  168. package/build/if-run/lib/environment.js +75 -0
  169. package/build/if-run/lib/exhaust.d.ts +7 -0
  170. package/build/if-run/lib/exhaust.js +27 -0
  171. package/build/if-run/lib/explain.d.ts +9 -0
  172. package/build/if-run/lib/explain.js +97 -0
  173. package/build/if-run/lib/initialize.d.ts +10 -0
  174. package/build/if-run/lib/initialize.js +113 -0
  175. package/build/if-run/lib/regroup.d.ts +5 -0
  176. package/build/if-run/lib/regroup.js +59 -0
  177. package/build/if-run/types/aggregation.d.ts +2 -0
  178. package/build/if-run/types/aggregation.js +11 -0
  179. package/build/if-run/types/compute.d.ts +33 -0
  180. package/build/if-run/types/compute.js +3 -0
  181. package/build/if-run/types/environment.d.ts +18 -0
  182. package/build/if-run/types/environment.js +3 -0
  183. package/build/if-run/types/explain.d.ts +12 -0
  184. package/build/if-run/types/explain.js +3 -0
  185. package/build/if-run/types/plugin-storage.d.ts +6 -0
  186. package/build/if-run/types/plugin-storage.js +3 -0
  187. package/build/if-run/types/process-args.d.ts +27 -0
  188. package/build/if-run/types/process-args.js +3 -0
  189. package/build/if-run/util/aggregation-helper.d.ts +6 -0
  190. package/build/if-run/util/aggregation-helper.js +52 -0
  191. package/build/if-run/util/args.d.ts +9 -0
  192. package/build/if-run/util/args.js +61 -0
  193. package/build/if-run/util/helpers.d.ts +8 -0
  194. package/build/if-run/util/helpers.js +37 -0
  195. package/build/if-run/util/log-memoize.d.ts +3 -0
  196. package/build/if-run/util/log-memoize.js +19 -0
  197. package/build/if-run/util/os-checker.d.ts +7 -0
  198. package/build/if-run/util/os-checker.js +97 -0
  199. package/build/if-run/util/plugin-storage.d.ts +14 -0
  200. package/build/if-run/util/plugin-storage.js +34 -0
  201. package/manifests/examples/builtins/interpolation/success-with-off.yml +24 -0
  202. package/package.json +10 -9
  203. package/src/if-run/builtins/interpolation/README.md +1 -1
@@ -0,0 +1,2 @@
1
+ export { CONFIG } from './config';
2
+ export { STRINGS } from './strings';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STRINGS = exports.CONFIG = void 0;
4
+ var config_1 = require("./config");
5
+ Object.defineProperty(exports, "CONFIG", { enumerable: true, get: function () { return config_1.CONFIG; } });
6
+ var strings_1 = require("./strings");
7
+ Object.defineProperty(exports, "STRINGS", { enumerable: true, get: function () { return strings_1.STRINGS; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWYtcnVuL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBZ0M7QUFBeEIsZ0dBQUEsTUFBTSxPQUFBO0FBQ2QscUNBQWtDO0FBQTFCLGtHQUFBLE9BQU8sT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7Q09ORklHfSBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQge1NUUklOR1N9IGZyb20gJy4vc3RyaW5ncyc7XG4iXX0=
@@ -0,0 +1,62 @@
1
+ export declare const STRINGS: {
2
+ MISSING_METHOD: string;
3
+ MISSING_PATH: string;
4
+ NOT_NATIVE_PLUGIN: (path: string) => string;
5
+ INVALID_MODULE_PATH: (path: string, error?: any) => string;
6
+ INCOMPATIBLE_RESOLUTION_WITH_INTERVAL: string;
7
+ INCOMPATIBLE_RESOLUTION_WITH_INPUTS: string;
8
+ INCOMPATIBLE_RESOLUTION_WITH_GAPS: string;
9
+ UNEXPECTED_TIME_CONFIG: string;
10
+ AVOIDING_PADDING_BY_EDGES: (start: boolean, end: boolean) => string;
11
+ METRIC_MISSING: (metric: string, index: number) => string;
12
+ INVALID_GROUP_KEY: (key: string) => string;
13
+ REGROUP_ERROR: string;
14
+ UNKNOWN_PARAM: (name: string) => string;
15
+ NOT_INITALIZED_PLUGIN: (name: string) => string;
16
+ NO_OUTPUT: string;
17
+ UNSUPPORTED_ERROR: (errorName: string) => string;
18
+ /** Debugging logs */
19
+ STARTING_IF: string;
20
+ EXITING_IF: string;
21
+ LOADING_MANIFEST: string;
22
+ VALIDATING_MANIFEST: string;
23
+ CAPTURING_RUNTIME_ENVIRONMENT_DATA: string;
24
+ CHECKING_AGGREGATION_METHOD: (unitName: string) => string;
25
+ INITIALIZING_PLUGINS: string;
26
+ INITIALIZING_PLUGIN: (pluginName: string) => string;
27
+ LOADING_PLUGIN_FROM_PATH: (pluginName: string, path: string) => string;
28
+ COMPUTING_PIPELINE_FOR_NODE: (nodeName: string) => string;
29
+ COMPUTING_COMPONENT_PIPELINE: (component: string) => string;
30
+ REGROUPING: string;
31
+ OBSERVING: (nodeName: string) => string;
32
+ MERGING_DEFAULTS_WITH_INPUT_DATA: string;
33
+ AGGREGATING_OUTPUTS: string;
34
+ AGGREGATING_NODE: (nodeName: string) => string;
35
+ PREPARING_OUTPUT_DATA: () => string;
36
+ EXPORTING_TO_YAML_FILE: (savepath: string) => string;
37
+ EMPTY_PIPELINE: string;
38
+ /** Exhaust messages */
39
+ OUTPUT_REQUIRED: string;
40
+ /** Plugins messages */
41
+ INVALID_NAME: string;
42
+ START_LOWER_END: string;
43
+ X_Y_EQUAL: string;
44
+ ARRAY_LENGTH_NON_EMPTY: string;
45
+ WITHIN_THE_RANGE: string;
46
+ MISSING_CSV_COLUMN: (columnName: string) => string;
47
+ NO_QUERY_DATA: string;
48
+ INVALID_DATE_TYPE: (date: any) => string;
49
+ INVALID_OBSERVATION_OVERLAP: string;
50
+ SCI_MISSING_FN_UNIT: (functionalUnit: string) => string;
51
+ MISSING_FUNCTIONAL_UNIT_CONFIG: string;
52
+ MISSING_FUNCTIONAL_UNIT_INPUT: string;
53
+ REGEX_MISMATCH: (input: any, match: string) => string;
54
+ MISSING_MIN_MAX: string;
55
+ INVALID_MIN_MAX: (name: string) => string;
56
+ FILE_FETCH_FAILED: (filepath: string, message: string) => string;
57
+ FILE_READ_FAILED: (filepath: string, error: string) => string;
58
+ ZERO_DIVISION: (moduleName: string, index: number) => string;
59
+ MISSING_CONFIG: string;
60
+ MISSING_INPUT_DATA: (param: string) => string;
61
+ CONFIG_WARN: (plugins: string, isMore: boolean) => string;
62
+ };
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STRINGS = void 0;
4
+ exports.STRINGS = {
5
+ MISSING_METHOD: "Initalization param 'method' is missing.",
6
+ MISSING_PATH: "Initalization param 'path' is missing.",
7
+ NOT_NATIVE_PLUGIN: (path) => `
8
+ You are using plugin ${path} which is not part of the Impact Framework standard library. You should do your own research to ensure the plugins are up to date and accurate. They may not be actively maintained.`,
9
+ INVALID_MODULE_PATH: (path, error) => `Provided module \`${path}\` is invalid or not found. ${error ?? ''}
10
+ `,
11
+ INCOMPATIBLE_RESOLUTION_WITH_INTERVAL: 'The upsampling resolution must be a divisor of the given interval, but the provided value does not satisfy this criteria.',
12
+ INCOMPATIBLE_RESOLUTION_WITH_INPUTS: 'The upsampling resolution must be a divisor of all inputs durations, but the provided values do not satisfy this criteria.',
13
+ INCOMPATIBLE_RESOLUTION_WITH_GAPS: 'The upsampling resolution must be a divisor of gaps and paddings in the time-series, but the provided values do not satisfy this criteria.',
14
+ UNEXPECTED_TIME_CONFIG: 'Unexpected node-level config provided for time-sync plugin.',
15
+ AVOIDING_PADDING_BY_EDGES: (start, end) => `Avoiding padding at ${start && end ? 'start and end' : start ? 'start' : 'end'}`,
16
+ METRIC_MISSING: (metric, index) => `Aggregation metric ${metric} is not found in inputs[${index}].`,
17
+ INVALID_GROUP_KEY: (key) => `Invalid group ${key}.`,
18
+ REGROUP_ERROR: 'not an array or should contain at least one key',
19
+ UNKNOWN_PARAM: (name) => `Unknown parameter: ${name}. Omitting from the output.`,
20
+ NOT_INITALIZED_PLUGIN: (name) => `Not initalized plugin: ${name}. Check if ${name} is in 'manifest.initalize.plugins'.`,
21
+ NO_OUTPUT: `
22
+ You have not added an output command:
23
+ --output <savepath>: will save your output data to the given filepath (do not provide file extension)
24
+ Note that for the '--output' option you also need to define the output type in your manifest file. See https://if.greensoftware.foundation/major-concepts/manifest-file#initialize`,
25
+ UNSUPPORTED_ERROR: (errorName) => `UnsupportedErrorClass: plugin threw error class: ${errorName} that is not recognized by Impact Framework`,
26
+ /** Debugging logs */
27
+ STARTING_IF: 'Starting IF',
28
+ EXITING_IF: 'Exiting IF',
29
+ LOADING_MANIFEST: 'Loading manifest',
30
+ VALIDATING_MANIFEST: 'Validating manifest',
31
+ CAPTURING_RUNTIME_ENVIRONMENT_DATA: 'Capturing runtime environment data',
32
+ CHECKING_AGGREGATION_METHOD: (unitName) => `Checking aggregation method for ${unitName}`,
33
+ INITIALIZING_PLUGINS: 'Initializing plugins',
34
+ INITIALIZING_PLUGIN: (pluginName) => `Initializing \`${pluginName}\` instance`,
35
+ LOADING_PLUGIN_FROM_PATH: (pluginName, path) => `Loading ${pluginName} from ${path}`,
36
+ COMPUTING_PIPELINE_FOR_NODE: (nodeName) => `Running compute pipeline: \`${nodeName}\` plugin`,
37
+ COMPUTING_COMPONENT_PIPELINE: (component) => `**Computing \`${component}\` pipeline**`,
38
+ REGROUPING: 'Regrouping',
39
+ OBSERVING: (nodeName) => `Running observe pipeline: \`${nodeName}\` plugin`,
40
+ MERGING_DEFAULTS_WITH_INPUT_DATA: 'Merging defaults with input data',
41
+ AGGREGATING_OUTPUTS: 'Aggregating outputs',
42
+ AGGREGATING_NODE: (nodeName) => `Aggregating node ${nodeName}`,
43
+ PREPARING_OUTPUT_DATA: () => {
44
+ console.debug('\n');
45
+ return 'Preparing output data';
46
+ },
47
+ EXPORTING_TO_YAML_FILE: (savepath) => `Exporting to yaml file: ${savepath}`,
48
+ EMPTY_PIPELINE: `You're using an old style manifest. Please update for phased execution. More information can be found here:
49
+ https://if.greensoftware.foundation/major-concepts/manifest-file`,
50
+ /** Exhaust messages */
51
+ OUTPUT_REQUIRED: 'Output path is required, please make sure output is configured properly.',
52
+ /** Plugins messages */
53
+ INVALID_NAME: '`name` config parameter is empty or contains all spaces',
54
+ START_LOWER_END: '`start-time` should be lower than `end-time`',
55
+ X_Y_EQUAL: 'The length of `x` and `y` should be equal',
56
+ ARRAY_LENGTH_NON_EMPTY: 'the length of the input arrays must be greater than 1',
57
+ WITHIN_THE_RANGE: 'The target x value must be within the range of the given x values',
58
+ MISSING_CSV_COLUMN: (columnName) => `There is no column with the name: ${columnName}.`,
59
+ NO_QUERY_DATA: 'One or more of the given query parameters are not found in the target CSV file column headers.',
60
+ INVALID_DATE_TYPE: (date) => `Unexpected date datatype: ${typeof date}: ${date}`,
61
+ INVALID_OBSERVATION_OVERLAP: 'Observation timestamps overlap, please check inputs.',
62
+ SCI_MISSING_FN_UNIT: (functionalUnit) => `'carbon' and ${functionalUnit} should be present in your input data.`,
63
+ MISSING_FUNCTIONAL_UNIT_CONFIG: '`functional-unit` should be provided in your config',
64
+ MISSING_FUNCTIONAL_UNIT_INPUT: '`functional-unit` value is missing from input data or it is not a positive integer',
65
+ REGEX_MISMATCH: (input, match) => `\`${input}\` does not match the ${match} regex expression`,
66
+ MISSING_MIN_MAX: 'Config is missing min or max value',
67
+ INVALID_MIN_MAX: (name) => `Min value should not be greater than or equal to max value of ${name}`,
68
+ FILE_FETCH_FAILED: (filepath, message) => `Failed fetching the file: ${filepath}.
69
+ ${message}`,
70
+ FILE_READ_FAILED: (filepath, error) => `Failed reading the file: ${filepath}.
71
+ ${error}`,
72
+ ZERO_DIVISION: (moduleName, index) => `-- SKIPPING -- DivisionByZero: you are attempting to divide by zero in ${moduleName} plugin : inputs[${index}]\n`,
73
+ MISSING_CONFIG: 'Config is not provided.',
74
+ MISSING_INPUT_DATA: (param) => `${param} is missing from the input array, or has nullish value.`,
75
+ CONFIG_WARN: (plugins, isMore) => {
76
+ const withoutPlugins = 'You have included node-level config in your manifest. IF no longer supports node-level config. The manifest should be refactored to accept all its node-level config from config or input data.';
77
+ const withPlugins = `You have included node-level config in your manifest to support \`${plugins}\` plugin${isMore ? 's' : ''}. IF no longer supports node-level config. \`${plugins}\` plugin${isMore ? 's' : ''} should be refactored to accept all its config from config or input data.`;
78
+ return plugins.length ? withPlugins : withoutPlugins;
79
+ },
80
+ };
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vY29uZmlnL3N0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUc7SUFDckIsY0FBYyxFQUFFLDBDQUEwQztJQUMxRCxZQUFZLEVBQUUsd0NBQXdDO0lBQ3RELGlCQUFpQixFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDbEM7eUJBQ3FCLElBQUksc0xBQXNMO0lBQ2pOLG1CQUFtQixFQUFFLENBQUMsSUFBWSxFQUFFLEtBQVcsRUFBRSxFQUFFLENBQ2pELHFCQUFxQixJQUFJLCtCQUErQixLQUFLLElBQUksRUFBRTtDQUN0RTtJQUNDLHFDQUFxQyxFQUNuQywySEFBMkg7SUFDN0gsbUNBQW1DLEVBQ2pDLDRIQUE0SDtJQUM5SCxpQ0FBaUMsRUFDL0IsNElBQTRJO0lBQzlJLHNCQUFzQixFQUNwQiw2REFBNkQ7SUFDL0QseUJBQXlCLEVBQUUsQ0FBQyxLQUFjLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FDMUQsdUJBQ0UsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FDckQsRUFBRTtJQUNKLGNBQWMsRUFBRSxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUNoRCxzQkFBc0IsTUFBTSwyQkFBMkIsS0FBSyxJQUFJO0lBQ2xFLGlCQUFpQixFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHO0lBQzNELGFBQWEsRUFBRSxpREFBaUQ7SUFDaEUsYUFBYSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDOUIsc0JBQXNCLElBQUksNkJBQTZCO0lBQ3pELHFCQUFxQixFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDdEMsMEJBQTBCLElBQUksY0FBYyxJ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RUFBRSxFQUFFLENBQ25ELDBFQUEwRSxVQUFVLG9CQUFvQixLQUFLLEtBQUs7SUFDcEgsY0FBYyxFQUFFLHlCQUF5QjtJQUN6QyxrQkFBa0IsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQ3BDLEdBQUcsS0FBSyx5REFBeUQ7SUFDbkUsV0FBVyxFQUFFLENBQUMsT0FBZSxFQUFFLE1BQWUsRUFBRSxFQUFFO1FBQ2hELE1BQU0sY0FBYyxHQUNsQixpTUFBaU0sQ0FBQztRQUNwTSxNQUFNLFdBQVcsR0FBRyxxRUFBcUUsT0FBTyxZQUM5RixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDakIsZ0RBQWdELE9BQU8sWUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2pCLDJFQUEyRSxDQUFDO1FBRTVFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDdkQsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU1RSSU5HUyA9IHtcbiAgTUlTU0lOR19NRVRIT0Q6IFwiSW5pdGFsaXphdGlvbiBwYXJhbSAnbWV0aG9kJyBpcyBtaXNzaW5nLlwiLFxuICBNSVNTSU5HX1BBVEg6IFwiSW5pdGFsaXphdGlvbiBwYXJhbSAncGF0aCcgaXMgbWlzc2luZy5cIixcbiAgTk9UX05BVElWRV9QTFVHSU46IChwYXRoOiBzdHJpbmcpID0+XG4gICAgYFxuICBZb3UgYXJlIHVzaW5nIHBsdWdpbiAke3BhdGh9IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBJbXBhY3QgRnJhbWV3b3JrIHN0YW5kYXJkIGxpYnJhcnkuIFlvdSBzaG91bGQgZG8geW91ciBvd24gcmVzZWFyY2ggdG8gZW5zdXJlIHRoZSBwbHVnaW5zIGFyZSB1cCB0byBkYXRlIGFuZCBhY2N1cmF0ZS4gVGhleSBtYXkgbm90IGJlIGFjdGl2ZWx5IG1haW50YWluZWQuYCxcbiAgSU5WQUxJRF9NT0RVTEVfUEFUSDogKHBhdGg6IHN0cmluZywgZXJyb3I/OiBhbnkpID0+XG4gICAgYFByb3ZpZGVkIG1vZHVsZSBcXGAke3BhdGh9XFxgIGlzIGludmFsaWQgb3Igbm90IGZvdW5kLiAke2Vycm9yID8/ICcnfVxuYCxcbiAgSU5DT01QQVRJQkxFX1JFU09MVVRJT05fV0lUSF9JTlRFUlZBTDpcbiAgICAnVGhlIHVwc2FtcGxpbmcgcmVzb2x1dGlvbiBtdXN0IGJlIGEgZGl2aXNvciBvZiB0aGUgZ2l2ZW4gaW50ZXJ2YWwsIGJ1dCB0aGUgcHJvdmlkZWQgdmFsdWUgZG9lcyBub3Qgc2F0aXNmeSB0aGlzIGNyaXRlcmlhLicsXG4gIElOQ09NUEFUSUJMRV9SRVNPTFVUSU9OX1dJVEhfSU5QVVRTOlxuICAgICdUaGUgdXBzYW1wbGluZyByZXNvbHV0aW9uIG11c3QgYmUgYSBkaXZpc29yIG9mIGFsbCBpbnB1dHMgZHVyYXRpb25zLCBidXQgdGhlIHByb3ZpZGVkIHZhbHVlcyBkbyBub3Qgc2F0aXNmeSB0aGlzIGNyaXRlcmlhLicsXG4gIElOQ09NUEFUSUJMRV9SRVNPTFVUSU9OX1dJVEhfR0FQUzpcbiAgICAnVGhlIHVwc2FtcGxpbmcgcmVzb2x1dGlvbiBtdXN0IGJlIGEgZGl2aXNvciBvZiBnYXBzIGFuZCBwYWRkaW5ncyBpbiB0aGUgdGltZS1zZXJpZXMsIGJ1dCB0aGUgcHJvdmlkZWQgdmFsdWVzIGRvIG5vdCBzYXRpc2Z5IHRoaXMgY3JpdGVyaWEuJyxcbiAgVU5FWFBFQ1RFRF9USU1FX0NPTkZJRzpcbiAgICAnVW5leHBlY3RlZCBub2RlLWxldmVsIGNvbmZpZyBwcm92aWRlZCBmb3IgdGltZS1zeW5jIHBsdWdpbi4nLFxuICBBVk9JRElOR19QQURESU5HX0JZX0VER0VTOiAoc3RhcnQ6IGJvb2xlYW4sIGVuZDogYm9vbGVhbikgPT5cbiAgICBgQXZvaWRpbmcgcGFkZGluZyBhdCAke1xuICAgICAgc3RhcnQgJiYgZW5kID8gJ3N0YXJ0IGFuZCBlbmQnIDogc3RhcnQgPyAnc3RhcnQnIDogJ2VuZCdcbiAgICB9YCxcbiAgTUVUUklDX01JU1NJTkc6IChtZXRyaWM6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT5cbiAgICBgQWdncmVnYXRpb24gbWV0cmljICR7bWV0cmljfSBpcyBub3QgZm91bmQgaW4gaW5wdXRzWyR7aW5kZXh9XS5gLFxuICBJTlZBTElEX0dST1VQX0tFWTogKGtleTogc3RyaW5nKSA9PiBgSW52YWxpZCBncm91cCAke2tleX0uYCxcbiAgUkVHUk9VUF9FUlJPUjogJ25vdCBhbiBhcnJheSBvciBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUga2V5JyxcbiAgVU5LTk9XTl9QQVJBTTogKG5hbWU6IHN0cmluZykgPT5cbiAgICBgVW5rbm93biBwYXJhbWV0ZXI6ICR7bmFtZX0uIE9taXR0aW5nIGZyb20gdGhlIG91dHB1dC5gLFxuICBOT1RfSU5JVEFMSVpFRF9QTFVHSU46IChuYW1lOiBzdHJpbmcpID0+XG4gICAgYE5vdCBpbml0YWxpemVkIHBsdWdpbjogJHtuYW1lfS4gQ2hlY2sgaWYgJHtuYW1lfSBpcyBpbiAnbWFuaWZlc3QuaW5pdGFsaXplLnBsdWdpbnMnLmAsXG4gIE5PX09VVFBVVDogYFxuWW91IGhhdmUgbm90IGFkZGVkIGFuIG91dHB1dCBjb21tYW5kOiBcbi0tb3V0cHV0IDxzYXZlcGF0aD46IHdpbGwgc2F2ZSB5b3VyIG91dHB1dCBkYXRhIHRvIHRoZSBnaXZlbiBmaWxlcGF0aCAoZG8gbm90IHByb3ZpZGUgZmlsZSBleHRlbnNpb24pXG5Ob3RlIHRoYXQgZm9yIHRoZSAnLS1vdXRwdXQnIG9wdGlvbiB5b3UgYWxzbyBuZWVkIHRvIGRlZmluZSB0aGUgb3V0cHV0IHR5cGUgaW4geW91ciBtYW5pZmVzdCBmaWxlLiBTZWUgaHR0cHM6Ly9pZi5ncmVlbnNvZnR3YXJlLmZvdW5kYXRpb24vbWFqb3ItY29uY2VwdHMvbWFuaWZlc3QtZmlsZSNpbml0aWFsaXplYCxcbiAgVU5TVVBQT1JURURfRVJST1I6IChlcnJvck5hbWU6IHN0cmluZykgPT5cbiAgICBgVW5zdXBwb3J0ZWRFcnJvckNsYXNzOiBwbHVnaW4gdGhyZXcgZXJyb3IgY2xhc3M6ICR7ZXJyb3JOYW1lfSB0aGF0IGlzIG5vdCByZWNvZ25pemVkIGJ5IEltcGFjdCBGcmFtZXdvcmtgLFxuICAvKiogRGVidWdnaW5nIGxvZ3MgKi9cbiAgU1RBUlRJTkdfSUY6ICdTdGFydGluZyBJRicsXG4gIEVYSVRJTkdfSUY6ICdFeGl0aW5nIElGJyxcbiAgTE9BRElOR19NQU5JRkVTVDogJ0xvYWRpbmcgbWFuaWZlc3QnLFxuICBWQUxJREFUSU5HX01BTklGRVNUOiAnVmFsaWRhdGluZyBtYW5pZmVzdCcsXG4gIENBUFRVUklOR19SVU5USU1FX0VOVklST05NRU5UX0RBVEE6ICdDYXB0dXJpbmcgcnVudGltZSBlbnZpcm9ubWVudCBkYXRhJyxcbiAgQ0hFQ0tJTkdfQUdHUkVHQVRJT05fTUVUSE9EOiAodW5pdE5hbWU6IHN0cmluZykgPT5cbiAgICBgQ2hlY2tpbmcgYWdncmVnYXRpb24gbWV0aG9kIGZvciAke3VuaXROYW1lfWAsXG4gIElOSVRJQUxJWklOR19QTFVHSU5TOiAnSW5pdGlhbGl6aW5nIHBsdWdpbnMnLFxuICBJTklUSUFMSVpJTkdfUExVR0lOOiAocGx1Z2luTmFtZTogc3RyaW5nKSA9PlxuICAgIGBJbml0aWFsaXppbmcgXFxgJHtwbHVnaW5OYW1lfVxcYCBpbnN0YW5jZWAsXG4gIExPQURJTkdfUExVR0lOX0ZST01fUEFUSDogKHBsdWdpbk5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKSA9PlxuICAgIGBMb2FkaW5nICR7cGx1Z2luTmFtZX0gZnJvbSAke3BhdGh9YCxcbiAgQ09NUFVUSU5HX1BJUEVMSU5FX0ZPUl9OT0RFOiAobm9kZU5hbWU6IHN0cmluZykgPT5cbiAgICBgUnVubmluZyBjb21wdXRlIHBpcGVsaW5lOiBcXGAke25vZGVOYW1lfVxcYCBwbHVnaW5gLFxuICBDT01QVVRJTkdfQ09NUE9ORU5UX1BJUEVMSU5FOiAoY29tcG9uZW50OiBzdHJpbmcpID0+XG4gICAgYCoqQ29tcHV0aW5nIFxcYCR7Y29tcG9uZW50fVxcYCBwaXBlbGluZSoqYCxcbiAgUkVHUk9VUElORzogJ1JlZ3JvdXBpbmcnLFxuICBPQlNFUlZJTkc6IChub2RlTmFtZTogc3RyaW5nKSA9PlxuICAgIGBSdW5uaW5nIG9ic2VydmUgcGlwZWxpbmU6IFxcYCR7bm9kZU5hbWV9XFxgIHBsdWdpbmAsXG4gIE1FUkdJTkdfREVGQVVMVFNfV0lUSF9JTlBVVF9EQVRBOiAnTWVyZ2luZyBkZWZhdWx0cyB3aXRoIGlucHV0IGRhdGEnLFxuICBBR0dSRUdBVElOR19PVVRQVVRTOiAnQWdncmVnYXRpbmcgb3V0cHV0cycsXG4gIEFHR1JFR0FUSU5HX05PREU6IChub2RlTmFtZTogc3RyaW5nKSA9PiBgQWdncmVnYXRpbmcgbm9kZSAke25vZGVOYW1lfWAsXG4gIFBSRVBBUklOR19PVVRQVVRfREFUQTogKCkgPT4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1xcbicpO1xuICAgIHJldHVybiAnUHJlcGFyaW5nIG91dHB1dCBkYXRhJztcbiAgfSxcbiAgRVhQT1JUSU5HX1RPX1lBTUxfRklMRTogKHNhdmVwYXRoOiBzdHJpbmcpID0+XG4gICAgYEV4cG9ydGluZyB0byB5YW1sIGZpbGU6ICR7c2F2ZXBhdGh9YCxcbiAgRU1QVFlfUElQRUxJTkU6IGBZb3UncmUgdXNpbmcgYW4gb2xkIHN0eWxlIG1hbmlmZXN0LiBQbGVhc2UgdXBkYXRlIGZvciBwaGFzZWQgZXhlY3V0aW9uLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBcbmh0dHBzOi8vaWYuZ3JlZW5zb2Z0d2FyZS5mb3VuZGF0aW9uL21ham9yLWNvbmNlcHRzL21hbmlmZXN0LWZpbGVgLFxuICAvKiogRXhoYXVzdCBtZXNzYWdlcyAqL1xuICBPVVRQVVRfUkVRVUlSRUQ6XG4gICAgJ091dHB1dCBwYXRoIGlzIHJlcXVpcmVkLCBwbGVhc2UgbWFrZSBzdXJlIG91dHB1dCBpcyBjb25maWd1cmVkIHByb3Blcmx5LicsXG4gIC8qKiBQbHVnaW5zIG1lc3NhZ2VzICovXG4gIElOVkFMSURfTkFNRTogJ2BuYW1lYCBjb25maWcgcGFyYW1ldGVyIGlzIGVtcHR5IG9yIGNvbnRhaW5zIGFsbCBzcGFjZXMnLFxuICBTVEFSVF9MT1dFUl9FTkQ6ICdgc3RhcnQtdGltZWAgc2hvdWxkIGJlIGxvd2VyIHRoYW4gYGVuZC10aW1lYCcsXG4gIFhfWV9FUVVBTDogJ1RoZSBsZW5ndGggb2YgYHhgIGFuZCBgeWAgc2hvdWxkIGJlIGVxdWFsJyxcbiAgQVJSQVlfTEVOR1RIX05PTl9FTVBUWTpcbiAgICAndGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYXJyYXlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEnLFxuICBXSVRISU5fVEhFX1JBTkdFOlxuICAgICdUaGUgdGFyZ2V0IHggdmFsdWUgbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBnaXZlbiB4IHZhbHVlcycsXG4gIE1JU1NJTkdfQ1NWX0NPTFVNTjogKGNvbHVtbk5hbWU6IHN0cmluZykgPT5cbiAgICBgVGhlcmUgaXMgbm8gY29sdW1uIHdpdGggdGhlIG5hbWU6ICR7Y29sdW1uTmFtZX0uYCxcbiAgTk9fUVVFUllfREFUQTpcbiAgICAnT25lIG9yIG1vcmUgb2YgdGhlIGdpdmVuIHF1ZXJ5IHBhcmFtZXRlcnMgYXJlIG5vdCBmb3VuZCBpbiB0aGUgdGFyZ2V0IENTViBmaWxlIGNvbHVtbiBoZWFkZXJzLicsXG4gIElOVkFMSURfREFURV9UWVBFOiAoZGF0ZTogYW55KSA9PlxuICAgIGBVbmV4cGVjdGVkIGRhdGUgZGF0YXR5cGU6ICR7dHlwZW9mIGRhdGV9OiAke2RhdGV9YCxcbiAgSU5WQUxJRF9PQlNFUlZBVElPTl9PVkVSTEFQOlxuICAgICdPYnNlcnZhdGlvbiB0aW1lc3RhbXBzIG92ZXJsYXAsIHBsZWFzZSBjaGVjayBpbnB1dHMuJyxcbiAgU0NJX01JU1NJTkdfRk5fVU5JVDogKGZ1bmN0aW9uYWxVbml0OiBzdHJpbmcpID0+XG4gICAgYCdjYXJib24nIGFuZCAke2Z1bmN0aW9uYWxVbml0fSBzaG91bGQgYmUgcHJlc2VudCBpbiB5b3VyIGlucHV0IGRhdGEuYCxcbiAgTUlTU0lOR19GVU5DVElPTkFMX1VOSVRfQ09ORklHOlxuICAgICdgZnVuY3Rpb25hbC11bml0YCBzaG91bGQgYmUgcHJvdmlkZWQgaW4geW91ciBjb25maWcnLFxuICBNSVNTSU5HX0ZVTkNUSU9OQUxfVU5JVF9JTlBVVDpcbiAgICAnYGZ1bmN0aW9uYWwtdW5pdGAgdmFsdWUgaXMgbWlzc2luZyBmcm9tIGlucHV0IGRhdGEgb3IgaXQgaXMgbm90IGEgcG9zaXRpdmUgaW50ZWdlcicsXG4gIFJFR0VYX01JU01BVENIOiAoaW5wdXQ6IGFueSwgbWF0Y2g6IHN0cmluZykgPT5cbiAgICBgXFxgJHtpbnB1dH1cXGAgZG9lcyBub3QgbWF0Y2ggdGhlICR7bWF0Y2h9IHJlZ2V4IGV4cHJlc3Npb25gLFxuICBNSVNTSU5HX01JTl9NQVg6ICdDb25maWcgaXMgbWlzc2luZyBtaW4gb3IgbWF4IHZhbHVlJyxcbiAgSU5WQUxJRF9NSU5fTUFYOiAobmFtZTogc3RyaW5nKSA9PlxuICAgIGBNaW4gdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWF4IHZhbHVlIG9mICR7bmFtZX1gLFxuICBGSUxFX0ZFVENIX0ZBSUxFRDogKFxuICAgIGZpbGVwYXRoOiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICkgPT4gYEZhaWxlZCBmZXRjaGluZyB0aGUgZmlsZTogJHtmaWxlcGF0aH0uXG4ke21lc3NhZ2V9YCxcbiAgRklMRV9SRUFEX0ZBSUxFRDogKFxuICAgIGZpbGVwYXRoOiBzdHJpbmcsXG4gICAgZXJyb3I6IHN0cmluZ1xuICApID0+IGBGYWlsZWQgcmVhZGluZyB0aGUgZmlsZTogJHtmaWxlcGF0aH0uIFxuJHtlcnJvcn1gLFxuICBaRVJPX0RJVklTSU9OOiAobW9kdWxlTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PlxuICAgIGAtLSBTS0lQUElORyAtLSBEaXZpc2lvbkJ5WmVybzogeW91IGFyZSBhdHRlbXB0aW5nIHRvIGRpdmlkZSBieSB6ZXJvIGluICR7bW9kdWxlTmFtZX0gcGx1Z2luIDogaW5wdXRzWyR7aW5kZXh9XVxcbmAsXG4gIE1JU1NJTkdfQ09ORklHOiAnQ29uZmlnIGlzIG5vdCBwcm92aWRlZC4nLFxuICBNSVNTSU5HX0lOUFVUX0RBVEE6IChwYXJhbTogc3RyaW5nKSA9PlxuICAgIGAke3BhcmFtfSBpcyBtaXNzaW5nIGZyb20gdGhlIGlucHV0IGFycmF5LCBvciBoYXMgbnVsbGlzaCB2YWx1ZS5gLFxuICBDT05GSUdfV0FSTjogKHBsdWdpbnM6IHN0cmluZywgaXNNb3JlOiBib29sZWFuKSA9PiB7XG4gICAgY29uc3Qgd2l0aG91dFBsdWdpbnMgPVxuICAgICAgJ1lvdSBoYXZlIGluY2x1ZGVkIG5vZGUtbGV2ZWwgY29uZmlnIGluIHlvdXIgbWFuaWZlc3QuIElGIG5vIGxvbmdlciBzdXBwb3J0cyBub2RlLWxldmVsIGNvbmZpZy4gVGhlIG1hbmlmZXN0IHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIGFjY2VwdCBhbGwgaXRzIG5vZGUtbGV2ZWwgY29uZmlnIGZyb20gY29uZmlnIG9yIGlucHV0IGRhdGEuJztcbiAgICBjb25zdCB3aXRoUGx1Z2lucyA9IGBZb3UgaGF2ZSBpbmNsdWRlZCBub2RlLWxldmVsIGNvbmZpZyBpbiB5b3VyIG1hbmlmZXN0IHRvIHN1cHBvcnQgXFxgJHtwbHVnaW5zfVxcYCBwbHVnaW4ke1xuICAgICAgaXNNb3JlID8gJ3MnIDogJydcbiAgICB9LiBJRiBubyBsb25nZXIgc3VwcG9ydHMgbm9kZS1sZXZlbCBjb25maWcuIFxcYCR7cGx1Z2luc31cXGAgcGx1Z2luJHtcbiAgICAgIGlzTW9yZSA/ICdzJyA6ICcnXG4gICAgfSBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byBhY2NlcHQgYWxsIGl0cyBjb25maWcgZnJvbSBjb25maWcgb3IgaW5wdXQgZGF0YS5gO1xuXG4gICAgcmV0dXJuIHBsdWdpbnMubGVuZ3RoID8gd2l0aFBsdWdpbnMgOiB3aXRob3V0UGx1Z2lucztcbiAgfSxcbn07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const config_1 = require("../common/config");
5
+ const validations_1 = require("../common/util/validations");
6
+ const debug_logger_1 = require("../common/util/debug-logger");
7
+ const logger_1 = require("../common/util/logger");
8
+ const load_1 = require("../common/lib/load");
9
+ const aggregate_1 = require("./lib/aggregate");
10
+ const environment_1 = require("./lib/environment");
11
+ const initialize_1 = require("./lib/initialize");
12
+ const compute_1 = require("./lib/compute");
13
+ const exhaust_1 = require("./lib/exhaust");
14
+ const explain_1 = require("./lib/explain");
15
+ const args_1 = require("./util/args");
16
+ const helpers_1 = require("./util/helpers");
17
+ const config_2 = require("./config");
18
+ const { EXITING_IF, STARTING_IF } = config_2.STRINGS;
19
+ const { DISCLAIMER_MESSAGE } = config_1.STRINGS;
20
+ const impactEngine = async () => {
21
+ const options = (0, args_1.parseIfRunProcessArgs)();
22
+ const { inputPath, outputOptions, debug, observe, regroup, compute: computeFlag, append, } = options;
23
+ debug_logger_1.debugLogger.overrideConsoleMethods(!!debug);
24
+ logger_1.logger.info(DISCLAIMER_MESSAGE);
25
+ console.info(STARTING_IF);
26
+ const { rawManifest } = await (0, load_1.load)(inputPath);
27
+ const envManifest = await (0, environment_1.injectEnvironment)(rawManifest);
28
+ try {
29
+ const { tree, ...context } = (0, validations_1.validateManifest)(envManifest);
30
+ const pluginStorage = await (0, initialize_1.initialize)(context);
31
+ const computedTree = await (0, compute_1.compute)(tree, {
32
+ context,
33
+ pluginStorage,
34
+ observe,
35
+ regroup,
36
+ compute: computeFlag,
37
+ append,
38
+ });
39
+ const aggregatedTree = (0, aggregate_1.aggregate)(computedTree, context.aggregation);
40
+ envManifest.explainer && (context.explain = (0, explain_1.explain)());
41
+ await (0, exhaust_1.exhaust)(aggregatedTree, context, outputOptions);
42
+ }
43
+ catch (error) {
44
+ if (error instanceof Error) {
45
+ /** Execution block exists because manifest is already processed. Set's status to `fail`. */
46
+ envManifest.execution.status = 'fail';
47
+ envManifest.execution.error = error.toString();
48
+ logger_1.logger.error(error);
49
+ const { tree, ...context } = envManifest;
50
+ if (error.name !== 'ExhaustError') {
51
+ (0, exhaust_1.exhaust)(tree, context, outputOptions);
52
+ }
53
+ }
54
+ }
55
+ console.info(EXITING_IF);
56
+ };
57
+ impactEngine().catch(helpers_1.andHandle);
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWYtcnVuL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDZDQUEyRDtBQUMzRCw0REFBNEQ7QUFDNUQsOERBQXdEO0FBQ3hELGtEQUE2QztBQUM3Qyw2Q0FBd0M7QUFFeEMsK0NBQTBDO0FBQzFDLG1EQUFvRDtBQUNwRCxpREFBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLDJDQUFzQztBQUN0QywyQ0FBc0M7QUFFdEMsc0NBQWtEO0FBQ2xELDRDQUF5QztBQUV6QyxxQ0FBaUM7QUFFakMsTUFBTSxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBQzFDLE1BQU0sRUFBQyxrQkFBa0IsRUFBQyxHQUFHLGdCQUFjLENBQUM7QUFFNUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBQSw0QkFBcUIsR0FBRSxDQUFDO0lBQ3hDLE1BQU0sRUFDSixTQUFTLEVBQ1QsYUFBYSxFQUNiLEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLE9BQU8sRUFBRSxXQUFXLEVBQ3BCLE1BQU0sR0FDUCxHQUFHLE9BQU8sQ0FBQztJQUVaLDBCQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFCLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxNQUFNLElBQUEsV0FBSSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSwrQkFBaUIsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUV6RCxJQUFJO1FBQ0YsTUFBTSxFQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBQyxHQUFHLElBQUEsOEJBQWdCLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFFekQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFBLHVCQUFVLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLGlCQUFPLEVBQUMsSUFBSSxFQUFFO1lBQ3ZDLE9BQU87WUFDUCxhQUFhO1lBQ2IsT0FBTztZQUNQLE9BQU87WUFDUCxPQUFPLEVBQUUsV0FBVztZQUNwQixNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsSUFBQSxxQkFBUyxFQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBQSxpQkFBTyxHQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLElBQUEsaUJBQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ3ZEO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7WUFDMUIsNEZBQTRGO1lBQzVGLFdBQVcsQ0FBQyxTQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN2QyxXQUFXLENBQUMsU0FBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEQsZUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixNQUFNLEVBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFDLEdBQUcsV0FBVyxDQUFDO1lBRXZDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7Z0JBQ2pDLElBQUEsaUJBQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7S0FDRjtJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBRUYsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLG1CQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7U1RSSU5HUyBhcyBDT01NT05fU1RSSU5HU30gZnJvbSAnLi4vY29tbW9uL2NvbmZpZyc7XG5pbXBvcnQge3ZhbGlkYXRlTWFuaWZlc3R9IGZyb20gJy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcbmltcG9ydCB7ZGVidWdMb2dnZXJ9IGZyb20gJy4uL2NvbW1vbi91dGlsL2RlYnVnLWxvZ2dlcic7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vY29tbW9uL3V0aWwvbG9nZ2VyJztcbmltcG9ydCB7bG9hZH0gZnJvbSAnLi4vY29tbW9uL2xpYi9sb2FkJztcblxuaW1wb3J0IHthZ2dyZWdhdGV9IGZyb20gJy4vbGliL2FnZ3JlZ2F0ZSc7XG5pbXBvcnQge2luamVjdEVudmlyb25tZW50fSBmcm9tICcuL2xpYi9lbnZpcm9ubWVudCc7XG5pbXBvcnQge2luaXRpYWxpemV9IGZyb20gJy4vbGliL2luaXRpYWxpemUnO1xuaW1wb3J0IHtjb21wdXRlfSBmcm9tICcuL2xpYi9jb21wdXRlJztcbmltcG9ydCB7ZXhoYXVzdH0gZnJvbSAnLi9saWIvZXhoYXVzdCc7XG5pbXBvcnQge2V4cGxhaW59IGZyb20gJy4vbGliL2V4cGxhaW4nO1xuXG5pbXBvcnQge3BhcnNlSWZSdW5Qcm9jZXNzQXJnc30gZnJvbSAnLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHthbmRIYW5kbGV9IGZyb20gJy4vdXRpbC9oZWxwZXJzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuL2NvbmZpZyc7XG5cbmNvbnN0IHtFWElUSU5HX0lGLCBTVEFSVElOR19JRn0gPSBTVFJJTkdTO1xuY29uc3Qge0RJU0NMQUlNRVJfTUVTU0FHRX0gPSBDT01NT05fU1RSSU5HUztcblxuY29uc3QgaW1wYWN0RW5naW5lID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VJZlJ1blByb2Nlc3NBcmdzKCk7XG4gIGNvbnN0IHtcbiAgICBpbnB1dFBhdGgsXG4gICAgb3V0cHV0T3B0aW9ucyxcbiAgICBkZWJ1ZyxcbiAgICBvYnNlcnZlLFxuICAgIHJlZ3JvdXAsXG4gICAgY29tcHV0ZTogY29tcHV0ZUZsYWcsXG4gICAgYXBwZW5kLFxuICB9ID0gb3B0aW9ucztcblxuICBkZWJ1Z0xvZ2dlci5vdmVycmlkZUNvbnNvbGVNZXRob2RzKCEhZGVidWcpO1xuXG4gIGxvZ2dlci5pbmZvKERJU0NMQUlNRVJfTUVTU0FHRSk7XG4gIGNvbnNvbGUuaW5mbyhTVEFSVElOR19JRik7XG5cbiAgY29uc3Qge3Jhd01hbmlmZXN0fSA9IGF3YWl0IGxvYWQoaW5wdXRQYXRoKTtcbiAgY29uc3QgZW52TWFuaWZlc3QgPSBhd2FpdCBpbmplY3RFbnZpcm9ubWVudChyYXdNYW5pZmVzdCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7dHJlZSwgLi4uY29udGV4dH0gPSB2YWxpZGF0ZU1hbmlmZXN0KGVudk1hbmlmZXN0KTtcblxuICAgIGNvbnN0IHBsdWdpblN0b3JhZ2UgPSBhd2FpdCBpbml0aWFsaXplKGNvbnRleHQpO1xuICAgIGNvbnN0IGNvbXB1dGVkVHJlZSA9IGF3YWl0IGNvbXB1dGUodHJlZSwge1xuICAgICAgY29udGV4dCxcbiAgICAgIHBsdWdpblN0b3JhZ2UsXG4gICAgICBvYnNlcnZlLFxuICAgICAgcmVncm91cCxcbiAgICAgIGNvbXB1dGU6IGNvbXB1dGVGbGFnLFxuICAgICAgYXBwZW5kLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWdncmVnYXRlZFRyZWUgPSBhZ2dyZWdhdGUoY29tcHV0ZWRUcmVlLCBjb250ZXh0LmFnZ3JlZ2F0aW9uKTtcbiAgICBlbnZNYW5pZmVzdC5leHBsYWluZXIgJiYgKGNvbnRleHQuZXhwbGFpbiA9IGV4cGxhaW4oKSk7XG5cbiAgICBhd2FpdCBleGhhdXN0KGFnZ3JlZ2F0ZWRUcmVlLCBjb250ZXh0LCBvdXRwdXRPcHRpb25zKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLyoqIEV4ZWN1dGlvbiBibG9jayBleGlzdHMgYmVjYXVzZSBtYW5pZmVzdCBpcyBhbHJlYWR5IHByb2Nlc3NlZC4gU2V0J3Mgc3RhdHVzIHRvIGBmYWlsYC4gKi9cbiAgICAgIGVudk1hbmlmZXN0LmV4ZWN1dGlvbiEuc3RhdHVzID0gJ2ZhaWwnO1xuICAgICAgZW52TWFuaWZlc3QuZXhlY3V0aW9uIS5lcnJvciA9IGVycm9yLnRvU3RyaW5nKCk7XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgY29uc3Qge3RyZWUsIC4uLmNvbnRleHR9ID0gZW52TWFuaWZlc3Q7XG5cbiAgICAgIGlmIChlcnJvci5uYW1lICE9PSAnRXhoYXVzdEVycm9yJykge1xuICAgICAgICBleGhhdXN0KHRyZWUsIGNvbnRleHQsIG91dHB1dE9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zb2xlLmluZm8oRVhJVElOR19JRik7XG59O1xuXG5pbXBhY3RFbmdpbmUoKS5jYXRjaChhbmRIYW5kbGUpO1xuIl19
@@ -0,0 +1,14 @@
1
+ import { AggregationParams, AggregationMetricsWithMethod } from '../../common/types/manifest';
2
+ /**
3
+ * If aggregation is disabled, then returns given `tree`.
4
+ * Otherwise creates copy of the tree, then applies aggregation to it.
5
+ */
6
+ export declare const aggregate: (tree: any, aggregationParams: AggregationParams) => any;
7
+ /**
8
+ * Gets or stores aggregation metrics.
9
+ */
10
+ export declare const storeAggregationMetrics: (aggregationMetrics?: AggregationMetricsWithMethod) => AggregationMetricsWithMethod;
11
+ /**
12
+ * Returns aggregation method for given `metric`.
13
+ */
14
+ export declare const getAggregationInfoFor: (metric: string) => import("@grnsft/if-core/types").AggregationOptions;
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAggregationInfoFor = exports.storeAggregationMetrics = exports.aggregate = void 0;
4
+ const consts_1 = require("@grnsft/if-core/consts");
5
+ const debug_logger_1 = require("../../common/util/debug-logger");
6
+ const logger_1 = require("../../common/util/logger");
7
+ const aggregation_helper_1 = require("../util/aggregation-helper");
8
+ const log_memoize_1 = require("../util/log-memoize");
9
+ const strings_1 = require("../config/strings");
10
+ const { AGGREGATING_NODE, AGGREGATING_OUTPUTS, UNKNOWN_PARAM, CHECKING_AGGREGATION_METHOD, } = strings_1.STRINGS;
11
+ /**
12
+ * Gets `i`th element from all children outputs and collects them in single array.
13
+ */
14
+ const getIthElementsFromChildren = (children, i) => {
15
+ const values = Object.values(children);
16
+ return values.map((value) => {
17
+ const output = value.outputs;
18
+ return output[i];
19
+ });
20
+ };
21
+ /**
22
+ * 1. Gets the i'th element from each childrens outputs (treating children as rows and we are after a column of data).
23
+ * 2. Now we just aggregate over the `ithSliceOfOutputs` the same as we did for the normal outputs.
24
+ */
25
+ const temporalAggregation = (node, metrics) => {
26
+ const outputs = [];
27
+ const values = Object.values(node.children);
28
+ for (let i = 0; i < values[0].outputs.length; i++) {
29
+ const ithSliceOfOutputs = getIthElementsFromChildren(node.children, i);
30
+ outputs.push((0, aggregation_helper_1.aggregateOutputsIntoOne)(ithSliceOfOutputs, metrics, true));
31
+ }
32
+ return outputs;
33
+ };
34
+ /**
35
+ * Navigates the tree depth first, bottom up,
36
+ * left to right aggregating the component nodes and then the grouping nodes will be aggregated
37
+ * only when all their child nodes have been aggregated.
38
+ * 1. Aggregates all the children.
39
+ * 2. At this point you can be positive all your children have been aggregated and so you can now work on aggregating yourself.
40
+ * 3. It's component node, аggregates just the outputs of THIS component node (horizontal/component aggregation).
41
+ * 4. Else it's grouping node, first does temporal aggregation. This assumes everything is on the same time-grid.
42
+ * The outputs of the grouping node are the aggregated time bucketed outputs of it's children.
43
+ * 5. Now a grouping node has it's own outputs, it can horizotnally aggregate them.
44
+ */
45
+ const aggregateNode = (node, aggregationParams) => {
46
+ const metrics = aggregationParams.metrics;
47
+ const type = aggregationParams.type;
48
+ if (node.children) {
49
+ for (const child in node.children) {
50
+ console.debug(AGGREGATING_NODE(child));
51
+ aggregateNode(node.children[child], aggregationParams);
52
+ }
53
+ }
54
+ if (!node.children) {
55
+ /** `time` aggregation is the new name of `horizontal`. */
56
+ if (type === 'horizontal' || type === 'time' || type === 'both') {
57
+ node.aggregated = (0, aggregation_helper_1.aggregateOutputsIntoOne)(node.outputs, metrics);
58
+ }
59
+ }
60
+ else {
61
+ /** `component` aggregation is the new name of `vertical`. */
62
+ if (type === 'vertical' || type === 'component' || type === 'both') {
63
+ const outputs = temporalAggregation(node, metrics);
64
+ node.outputs = outputs;
65
+ node.aggregated = (0, aggregation_helper_1.aggregateOutputsIntoOne)(outputs, metrics);
66
+ }
67
+ }
68
+ };
69
+ /**
70
+ * If aggregation is disabled, then returns given `tree`.
71
+ * Otherwise creates copy of the tree, then applies aggregation to it.
72
+ */
73
+ const aggregate = (tree, aggregationParams) => {
74
+ console.debug(AGGREGATING_OUTPUTS);
75
+ if (!aggregationParams || !aggregationParams.type) {
76
+ return tree;
77
+ }
78
+ const copyOfTree = structuredClone(tree);
79
+ aggregateNode(copyOfTree, aggregationParams);
80
+ return copyOfTree;
81
+ };
82
+ exports.aggregate = aggregate;
83
+ /**
84
+ * Gets or stores aggregation metrics.
85
+ */
86
+ const storeAggregationMetrics = (aggregationMetrics) => {
87
+ if (aggregationMetrics) {
88
+ metricManager.metrics = {
89
+ ...metricManager.metrics,
90
+ ...aggregationMetrics,
91
+ };
92
+ }
93
+ return metricManager.metrics;
94
+ };
95
+ exports.storeAggregationMetrics = storeAggregationMetrics;
96
+ /**
97
+ * Creates an encapsulated object to retrieve the metrics.
98
+ */
99
+ const metricManager = (() => {
100
+ let metric;
101
+ const manager = {
102
+ get metrics() {
103
+ return metric;
104
+ },
105
+ set metrics(value) {
106
+ metric = value;
107
+ },
108
+ };
109
+ return manager;
110
+ })();
111
+ /**
112
+ * Returns aggregation method for given `metric`.
113
+ */
114
+ const getAggregationInfoFor = (metric) => {
115
+ debug_logger_1.debugLogger.setExecutingPluginName();
116
+ (0, log_memoize_1.memoizedLog)(console.debug, '\n');
117
+ (0, log_memoize_1.memoizedLog)(console.debug, CHECKING_AGGREGATION_METHOD(metric));
118
+ const aggregationMetricsStorage = (0, exports.storeAggregationMetrics)();
119
+ if (aggregationMetricsStorage &&
120
+ Object.keys(aggregationMetricsStorage).includes(metric)) {
121
+ return aggregationMetricsStorage[metric];
122
+ }
123
+ (0, log_memoize_1.memoizedLog)(logger_1.logger.warn, UNKNOWN_PARAM(metric));
124
+ return {
125
+ time: consts_1.AGGREGATION_METHODS[3],
126
+ component: consts_1.AGGREGATION_METHODS[3],
127
+ };
128
+ };
129
+ exports.getAggregationInfoFor = getAggregationInfoFor;
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lmLXJ1bi9saWIvYWdncmVnYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUEyRDtBQUczRCxpRUFBMkQ7QUFDM0QscURBQWdEO0FBT2hELG1FQUFtRTtBQUNuRSxxREFBZ0Q7QUFFaEQsK0NBQTBDO0FBRTFDLE1BQU0sRUFDSixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYiwyQkFBMkIsR0FDNUIsR0FBRyxpQkFBTyxDQUFDO0FBRVo7O0dBRUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsUUFBYSxFQUFFLENBQVMsRUFBRSxFQUFFO0lBQzlELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdkMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUU3QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFTLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBQzNELE1BQU0sT0FBTyxHQUFtQixFQUFFLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pELE1BQU0saUJBQWlCLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENB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QUMsRUFBRSxDQUFDO0FBRUw7O0dBRUc7QUFDSSxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7SUFDdEQsMEJBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3JDLElBQUEseUJBQVcsRUFBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUEseUJBQVcsRUFBQyxPQUFPLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSx5QkFBeUIsR0FBRyxJQUFBLCtCQUF1QixHQUFFLENBQUM7SUFFNUQsSUFDRSx5QkFBeUI7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDdkQ7UUFDQSxPQUFPLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFDO0lBRUQsSUFBQSx5QkFBVyxFQUFDLGVBQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFaEQsT0FBTztRQUNMLElBQUksRUFBRSw0QkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDNUIsU0FBUyxFQUFFLDRCQUFtQixDQUFDLENBQUMsQ0FBQztLQUNsQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBbkJXLFFBQUEscUJBQXFCLHlCQW1CaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FHR1JFR0FUSU9OX01FVEhPRFN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS9jb25zdHMnO1xuaW1wb3J0IHtQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7ZGVidWdMb2dnZXJ9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL2RlYnVnLWxvZ2dlcic7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvbG9nZ2VyJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUGFyYW1zLFxuICBBZ2dyZWdhdGlvblBhcmFtc1N1cmUsXG4gIEFnZ3JlZ2F0aW9uTWV0cmljc1dpdGhNZXRob2QsXG59IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcy9tYW5pZmVzdCc7XG5cbmltcG9ydCB7YWdncmVnYXRlT3V0cHV0c0ludG9PbmV9IGZyb20gJy4uL3V0aWwvYWdncmVnYXRpb24taGVscGVyJztcbmltcG9ydCB7bWVtb2l6ZWRMb2d9IGZyb20gJy4uL3V0aWwvbG9nLW1lbW9pemUnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uL2NvbmZpZy9zdHJpbmdzJztcblxuY29uc3Qge1xuICBBR0dSRUdBVElOR19OT0RFLFxuICBBR0dSRUdBVElOR19PVVRQVVRTLFxuICBVTktOT1dOX1BBUkFNLFxuICBDSEVDS0lOR19BR0dSRUdBVElPTl9NRVRIT0QsXG59ID0gU1RSSU5HUztcblxuLyoqXG4gKiBHZXRzIGBpYHRoIGVsZW1lbnQgZnJvbSBhbGwgY2hpbGRyZW4gb3V0cHV0cyBhbmQgY29sbGVjdHMgdGhlbSBpbiBzaW5nbGUgYXJyYXkuXG4gKi9cbmNvbnN0IGdldEl0aEVsZW1lbnRzRnJvbUNoaWxkcmVuID0gKGNoaWxkcmVuOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcblxuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IHZhbHVlLm91dHB1dHM7XG5cbiAgICByZXR1cm4gb3V0cHV0W2ldO1xuICB9KTtcbn07XG5cbi8qKlxuICogMS4gR2V0cyB0aGUgaSd0aCBlbGVtZW50IGZyb20gZWFjaCBjaGlsZHJlbnMgb3V0cHV0cyAodHJlYXRpbmcgY2hpbGRyZW4gYXMgcm93cyBhbmQgd2UgYXJlIGFmdGVyIGEgY29sdW1uIG9mIGRhdGEpLlxuICogMi4gTm93IHdlIGp1c3QgYWdncmVnYXRlIG92ZXIgdGhlIGBpdGhTbGljZU9mT3V0cHV0c2AgdGhlIHNhbWUgYXMgd2UgZGlkIGZvciB0aGUgbm9ybWFsIG91dHB1dHMuXG4gKi9cbmNvbnN0IHRlbXBvcmFsQWdncmVnYXRpb24gPSAobm9kZTogYW55LCBtZXRyaWNzOiBzdHJpbmdbXSkgPT4ge1xuICBjb25zdCBvdXRwdXRzOiBQbHVnaW5QYXJhbXNbXSA9IFtdO1xuICBjb25zdCB2YWx1ZXM6IGFueSA9IE9iamVjdC52YWx1ZXMobm9kZS5jaGlsZHJlbik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXNbMF0ub3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0aFNsaWNlT2ZPdXRwdXRzID0gZ2V0SXRoRWxlbWVudHNGcm9tQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgaSk7XG4gICAgb3V0cHV0cy5wdXNoKGFnZ3JlZ2F0ZU91dHB1dHNJbnRvT25lKGl0aFNsaWNlT2ZPdXRwdXRzLCBtZXRyaWNzLCB0cnVlKSk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0cztcbn07XG5cbi8qKlxuICogTmF2aWdhdGVzIHRoZSB0cmVlIGRlcHRoIGZpcnN0LCBib3R0b20gdXAsXG4gKiAgbGVmdCB0byByaWdodCBhZ2dyZWdhdGluZyB0aGUgY29tcG9uZW50IG5vZGVzIGFuZCB0aGVuIHRoZSBncm91cGluZyBub2RlcyB3aWxsIGJlIGFnZ3JlZ2F0ZWRcbiAqICBvbmx5IHdoZW4gYWxsIHRoZWlyIGNoaWxkIG5vZGVzIGhhdmUgYmVlbiBhZ2dyZWdhdGVkLlxuICogMS4gQWdncmVnYXRlcyBhbGwgdGhlIGNoaWxkcmVuLlxuICogMi4gQXQgdGhpcyBwb2ludCB5b3UgY2FuIGJlIHBvc2l0aXZlIGFsbCB5b3VyIGNoaWxkcmVuIGhhdmUgYmVlbiBhZ2dyZWdhdGVkIGFuZCBzbyB5b3UgY2FuIG5vdyB3b3JrIG9uIGFnZ3JlZ2F0aW5nIHlvdXJzZWxmLlxuICogMy4gSXQncyBjb21wb25lbnQgbm9kZSwg0LBnZ3JlZ2F0ZXMganVzdCB0aGUgb3V0cHV0cyBvZiBUSElTIGNvbXBvbmVudCBub2RlIChob3Jpem9udGFsL2NvbXBvbmVudCBhZ2dyZWdhdGlvbikuXG4gKiA0LiBFbHNlIGl0J3MgZ3JvdXBpbmcgbm9kZSwgZmlyc3QgZG9lcyB0ZW1wb3JhbCBhZ2dyZWdhdGlvbi4gVGhpcyBhc3N1bWVzIGV2ZXJ5dGhpbmcgaXMgb24gdGhlIHNhbWUgdGltZS1ncmlkLlxuICogICAgVGhlIG91dHB1dHMgb2YgdGhlIGdyb3VwaW5nIG5vZGUgYXJlIHRoZSBhZ2dyZWdhdGVkIHRpbWUgYnVja2V0ZWQgb3V0cHV0cyBvZiBpdCdzIGNoaWxkcmVuLlxuICogNS4gTm93IGEgZ3JvdXBpbmcgbm9kZSBoYXMgaXQncyBvd24gb3V0cHV0cywgaXQgY2FuIGhvcml6b3RuYWxseSBhZ2dyZWdhdGUgdGhlbS5cbiAqL1xuY29uc3QgYWdncmVnYXRlTm9kZSA9IChub2RlOiBhbnksIGFnZ3JlZ2F0aW9uUGFyYW1zOiBBZ2dyZWdhdGlvblBhcmFtc1N1cmUpID0+IHtcbiAgY29uc3QgbWV0cmljcyA9IGFnZ3JlZ2F0aW9uUGFyYW1zIS5tZXRyaWNzO1xuICBjb25zdCB0eXBlID0gYWdncmVnYXRpb25QYXJhbXMhLnR5cGU7XG5cbiAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIGluIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoQUdHUkVHQVRJTkdfTk9ERShjaGlsZCkpO1xuXG4gICAgICBhZ2dyZWdhdGVOb2RlKG5vZGUuY2hpbGRyZW5bY2hpbGRdLCBhZ2dyZWdhdGlvblBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgLyoqIGB0aW1lYCBhZ2dyZWdhdGlvbiBpcyB0aGUgbmV3IG5hbWUgb2YgYGhvcml6b250YWxgLiAqL1xuICAgIGlmICh0eXBlID09PSAnaG9yaXpvbnRhbCcgfHwgdHlwZSA9PT0gJ3RpbWUnIHx8IHR5cGUgPT09ICdib3RoJykge1xuICAgICAgbm9kZS5hZ2dyZWdhdGVkID0gYWdncmVnYXRlT3V0cHV0c0ludG9PbmUobm9kZS5vdXRwdXRzLCBtZXRyaWNzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLyoqIGBjb21wb25lbnRgIGFnZ3JlZ2F0aW9uIGlzIHRoZSBuZXcgbmFtZSBvZiBgdmVydGljYWxgLiAqL1xuICAgIGlmICh0eXBlID09PSAndmVydGljYWwnIHx8IHR5cGUgPT09ICdjb21wb25lbnQnIHx8IHR5cGUgPT09ICdib3RoJykge1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRlbXBvcmFsQWdncmVnYXRpb24obm9kZSwgbWV0cmljcyk7XG4gICAgICBub2RlLm91dHB1dHMgPSBvdXRwdXRzO1xuICAgICAgbm9kZS5hZ2dyZWdhdGVkID0gYWdncmVnYXRlT3V0cHV0c0ludG9PbmUob3V0cHV0cywgbWV0cmljcyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElmIGFnZ3JlZ2F0aW9uIGlzIGRpc2FibGVkLCB0aGVuIHJldHVybnMgZ2l2ZW4gYHRyZWVgLlxuICogT3RoZXJ3aXNlIGNyZWF0ZXMgY29weSBvZiB0aGUgdHJlZSwgdGhlbiBhcHBsaWVzIGFnZ3JlZ2F0aW9uIHRvIGl0LlxuICovXG5leHBvcnQgY29uc3QgYWdncmVnYXRlID0gKHRyZWU6IGFueSwgYWdncmVnYXRpb25QYXJhbXM6IEFnZ3JlZ2F0aW9uUGFyYW1zKSA9PiB7XG4gIGNvbnNvbGUuZGVidWcoQUdHUkVHQVRJTkdfT1VUUFVUUyk7XG5cbiAgaWYgKCFhZ2dyZWdhdGlvblBhcmFtcyB8fCAhYWdncmVnYXRpb25QYXJhbXMudHlwZSkge1xuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgY29uc3QgY29weU9mVHJlZSA9IHN0cnVjdHVyZWRDbG9uZSh0cmVlKTtcbiAgYWdncmVnYXRlTm9kZShjb3B5T2ZUcmVlLCBhZ2dyZWdhdGlvblBhcmFtcyk7XG5cbiAgcmV0dXJuIGNvcHlPZlRyZWU7XG59O1xuXG4vKipcbiAqIEdldHMgb3Igc3RvcmVzIGFnZ3JlZ2F0aW9uIG1ldHJpY3MuXG4gKi9cbmV4cG9ydCBjb25zdCBzdG9yZUFnZ3JlZ2F0aW9uTWV0cmljcyA9IChcbiAgYWdncmVnYXRpb25NZXRyaWNzPzogQWdncmVnYXRpb25NZXRyaWNzV2l0aE1ldGhvZFxuKSA9PiB7XG4gIGlmIChhZ2dyZWdhdGlvbk1ldHJpY3MpIHtcbiAgICBtZXRyaWNNYW5hZ2VyLm1ldHJpY3MgPSB7XG4gICAgICAuLi5tZXRyaWNNYW5hZ2VyLm1ldHJpY3MsXG4gICAgICAuLi5hZ2dyZWdhdGlvbk1ldHJpY3MsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBtZXRyaWNNYW5hZ2VyLm1ldHJpY3M7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZW5jYXBzdWxhdGVkIG9iamVjdCB0byByZXRyaWV2ZSB0aGUgbWV0cmljcy5cbiAqL1xuY29uc3QgbWV0cmljTWFuYWdlciA9ICgoKSA9PiB7XG4gIGxldCBtZXRyaWM6IEFnZ3JlZ2F0aW9uTWV0cmljc1dpdGhNZXRob2Q7XG5cbiAgY29uc3QgbWFuYWdlciA9IHtcbiAgICBnZXQgbWV0cmljcygpIHtcbiAgICAgIHJldHVybiBtZXRyaWM7XG4gICAgfSxcbiAgICBzZXQgbWV0cmljcyh2YWx1ZTogQWdncmVnYXRpb25NZXRyaWNzV2l0aE1ldGhvZCkge1xuICAgICAgbWV0cmljID0gdmFsdWU7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gbWFuYWdlcjtcbn0pKCk7XG5cbi8qKlxuICogUmV0dXJucyBhZ2dyZWdhdGlvbiBtZXRob2QgZm9yIGdpdmVuIGBtZXRyaWNgLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRpb25JbmZvRm9yID0gKG1ldHJpYzogc3RyaW5nKSA9PiB7XG4gIGRlYnVnTG9nZ2VyLnNldEV4ZWN1dGluZ1BsdWdpbk5hbWUoKTtcbiAgbWVtb2l6ZWRMb2coY29uc29sZS5kZWJ1ZywgJ1xcbicpO1xuICBtZW1vaXplZExvZyhjb25zb2xlLmRlYnVnLCBDSEVDS0lOR19BR0dSRUdBVElPTl9NRVRIT0QobWV0cmljKSk7XG4gIGNvbnN0IGFnZ3JlZ2F0aW9uTWV0cmljc1N0b3JhZ2UgPSBzdG9yZUFnZ3JlZ2F0aW9uTWV0cmljcygpO1xuXG4gIGlmIChcbiAgICBhZ2dyZWdhdGlvbk1ldHJpY3NTdG9yYWdlICYmXG4gICAgT2JqZWN0LmtleXMoYWdncmVnYXRpb25NZXRyaWNzU3RvcmFnZSkuaW5jbHVkZXMobWV0cmljKVxuICApIHtcbiAgICByZXR1cm4gYWdncmVnYXRpb25NZXRyaWNzU3RvcmFnZVttZXRyaWNdO1xuICB9XG5cbiAgbWVtb2l6ZWRMb2cobG9nZ2VyLndhcm4sIFVOS05PV05fUEFSQU0obWV0cmljKSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0aW1lOiBBR0dSRUdBVElPTl9NRVRIT0RTWzNdLFxuICAgIGNvbXBvbmVudDogQUdHUkVHQVRJT05fTUVUSE9EU1szXSxcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import { ComputeParams } from '../types/compute';
2
+ /**
3
+ * Creates copy of existing tree, then applies computing strategy.
4
+ */
5
+ export declare const compute: (tree: any, params: ComputeParams) => Promise<any>;
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compute = void 0;
4
+ const regroup_1 = require("./regroup");
5
+ const explain_1 = require("./explain");
6
+ const debug_logger_1 = require("../../common/util/debug-logger");
7
+ const logger_1 = require("../../common/util/logger");
8
+ const helpers_1 = require("../util/helpers");
9
+ const strings_1 = require("../config/strings");
10
+ const { MERGING_DEFAULTS_WITH_INPUT_DATA, EMPTY_PIPELINE, CONFIG_WARN, COMPUTING_PIPELINE_FOR_NODE, COMPUTING_COMPONENT_PIPELINE, REGROUPING, OBSERVING, } = strings_1.STRINGS;
11
+ /**
12
+ * Traverses all child nodes based on children grouping.
13
+ */
14
+ const traverse = async (children, params) => {
15
+ for (const child in children) {
16
+ console.debug(COMPUTING_COMPONENT_PIPELINE(child));
17
+ await computeNode(children[child], params);
18
+ }
19
+ };
20
+ /**
21
+ * Appends `default` values to `inputs`.
22
+ */
23
+ const mergeDefaults = (inputs, defaults) => {
24
+ if (inputs) {
25
+ const response = defaults
26
+ ? inputs.map(input => (0, helpers_1.mergeObjects)(defaults, input))
27
+ : inputs;
28
+ return response;
29
+ }
30
+ console.debug(MERGING_DEFAULTS_WITH_INPUT_DATA, '\n');
31
+ return defaults ? [defaults] : [];
32
+ };
33
+ /**
34
+ * Warns if the `config` is provided in the manifest.
35
+ */
36
+ const warnIfConfigProvided = (node) => {
37
+ if ('config' in node) {
38
+ const plugins = Object.keys(node.config || {});
39
+ const joinedPlugins = plugins.join(', ');
40
+ const isMore = plugins.length > 1;
41
+ logger_1.logger.warn(CONFIG_WARN(joinedPlugins, isMore));
42
+ }
43
+ };
44
+ /**
45
+ * 1. If the node has it's own pipeline, defaults or config then use that,
46
+ * otherwise use whatever has been passed down from further up the tree.
47
+ * 2. If it's a grouping node, then first of all computes all it's children.
48
+ * This is doing a depth first traversal.
49
+ * 3. Otherwise merges the defaults into the inputs.
50
+ * 4. Iterates over pipeline phases (observe, regroup, compute).
51
+ * 5. Observe plugins are used to insert input values
52
+ * (isolated execution can be achived by passing `--observe` flag to CLI command).
53
+ * 6. Regroup plugin is used to group existing inputs by criteria
54
+ * (isolated execution can be achived by passing `--regroup` flag to CLI command).
55
+ * Since it creates new children for node, existing inputs and outputs are dropped and recursive traversal is called
56
+ * for newbord child component.
57
+ * 7. Compute plugins are used to do desired computations and appending the result to outputs
58
+ * (isolated execution can be achived by passing `--compute` flag to CLI command).
59
+ */
60
+ const computeNode = async (node, params) => {
61
+ const pipeline = node.pipeline || params.pipeline;
62
+ const config = node.config || params.config;
63
+ const defaults = node.defaults || params.defaults;
64
+ const noFlags = !params.observe && !params.regroup && !params.compute;
65
+ debug_logger_1.debugLogger.setExecutingPluginName();
66
+ warnIfConfigProvided(node);
67
+ if (node.children) {
68
+ return traverse(node.children, {
69
+ ...params,
70
+ pipeline,
71
+ defaults,
72
+ config,
73
+ });
74
+ }
75
+ let outputStorage = structuredClone(node.inputs);
76
+ outputStorage = mergeDefaults(outputStorage, defaults);
77
+ const pipelineCopy = structuredClone(pipeline) || {};
78
+ /** Checks if pipeline is not an array or empty object. */
79
+ if (Array.isArray(pipelineCopy) ||
80
+ (typeof pipelineCopy === 'object' &&
81
+ pipelineCopy !== null &&
82
+ Object.keys(pipelineCopy).length === 0)) {
83
+ logger_1.logger.warn(EMPTY_PIPELINE);
84
+ }
85
+ /**
86
+ * If iteration is on observe pipeline, then executes observe plugins and sets the inputs value.
87
+ */
88
+ if ((noFlags || params.observe) && pipelineCopy.observe) {
89
+ while (pipelineCopy.observe.length !== 0) {
90
+ const pluginName = pipelineCopy.observe.shift();
91
+ console.debug(OBSERVING(pluginName));
92
+ debug_logger_1.debugLogger.setExecutingPluginName(pluginName);
93
+ const plugin = params.pluginStorage.get(pluginName);
94
+ const nodeConfig = config && config[pluginName];
95
+ outputStorage = await plugin.execute(outputStorage, nodeConfig);
96
+ node.inputs = outputStorage;
97
+ if (params.context.explainer) {
98
+ (0, explain_1.addExplainData)({
99
+ pluginName,
100
+ metadata: plugin.metadata,
101
+ });
102
+ }
103
+ }
104
+ }
105
+ /**
106
+ * If regroup is requested, execute regroup strategy, delete child's inputs, outputs and empty regroup array.
107
+ */
108
+ if ((noFlags || params.regroup) && pipelineCopy.regroup) {
109
+ const originalOutputs = params.append ? node.outputs || [] : [];
110
+ node.children = (0, regroup_1.Regroup)(outputStorage, originalOutputs, pipelineCopy.regroup);
111
+ delete node.inputs;
112
+ delete node.outputs;
113
+ debug_logger_1.debugLogger.setExecutingPluginName();
114
+ console.debug(REGROUPING);
115
+ return traverse(node.children, {
116
+ ...params,
117
+ pipeline: {
118
+ ...pipelineCopy,
119
+ regroup: undefined,
120
+ },
121
+ defaults,
122
+ config,
123
+ });
124
+ }
125
+ console.debug('\n');
126
+ /**
127
+ * If iteration is on compute plugin, then executes compute plugins and sets the outputs value.
128
+ */
129
+ if ((noFlags || params.compute) && pipelineCopy.compute) {
130
+ const originalOutputs = params.append ? node.outputs || [] : [];
131
+ while (pipelineCopy.compute.length !== 0) {
132
+ const pluginName = pipelineCopy.compute.shift();
133
+ const plugin = params.pluginStorage.get(pluginName);
134
+ const nodeConfig = config && config[pluginName];
135
+ console.debug(COMPUTING_PIPELINE_FOR_NODE(pluginName));
136
+ debug_logger_1.debugLogger.setExecutingPluginName(pluginName);
137
+ outputStorage = await plugin.execute(outputStorage, nodeConfig);
138
+ debug_logger_1.debugLogger.setExecutingPluginName();
139
+ node.outputs = outputStorage;
140
+ if (params.context.explainer) {
141
+ (0, explain_1.addExplainData)({
142
+ pluginName,
143
+ metadata: plugin.metadata,
144
+ });
145
+ }
146
+ }
147
+ if (params.append) {
148
+ node.outputs = originalOutputs.concat(node.outputs || []);
149
+ }
150
+ }
151
+ console.debug('\n');
152
+ };
153
+ /**
154
+ * Creates copy of existing tree, then applies computing strategy.
155
+ */
156
+ const compute = async (tree, params) => {
157
+ const copyOfTree = structuredClone(tree);
158
+ await computeNode(copyOfTree, params);
159
+ return copyOfTree;
160
+ };
161
+ exports.compute = compute;
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL2NvbXB1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdUNBQWtDO0FBQ2xDLHVDQUF5QztBQUV6QyxpRUFBMkQ7QUFDM0QscURBQWdEO0FBRWhELDZDQUE2QztBQUU3QywrQ0FBMEM7QUFJMUMsTUFBTSxFQUNKLGdDQUFnQyxFQUNoQyxjQUFjLEVBQ2QsV0FBVyxFQUNYLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLFNBQVMsR0FDVixHQUFHLGlCQUFPLENBQUM7QUFFWjs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxRQUFhLEVBQUUsTUFBcUIsRUFBRSxFQUFFO0lBQzlELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFO1FBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDNUM7QUFDSCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQ3BCLE1BQXNCLEVBQ3RCLFFBQWtDLEVBQ2xDLEVBQUU7SUFDRixJQUFJLE1BQU0sRUFBRTtRQUNWLE1BQU0sUUFBUSxHQUFHLFFBQVE7WUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFBLHNCQUFZLEVBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFWCxPQUFPLFFBQVEsQ0FBQztLQUNqQjtJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFdEQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENB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S0FBSyxFQUFFLElBQVMsRUFBRSxNQUFxQixFQUFFLEVBQUU7SUFDaEUsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpDLE1BQU0sV0FBVyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV0QyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFOVyxRQUFBLE9BQU8sV0FNbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BsdWdpblBhcmFtc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHtSZWdyb3VwfSBmcm9tICcuL3JlZ3JvdXAnO1xuaW1wb3J0IHthZGRFeHBsYWluRGF0YX0gZnJvbSAnLi9leHBsYWluJztcblxuaW1wb3J0IHtkZWJ1Z0xvZ2dlcn0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvZGVidWctbG9nZ2VyJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9sb2dnZXInO1xuXG5pbXBvcnQge21lcmdlT2JqZWN0c30gZnJvbSAnLi4vdXRpbC9oZWxwZXJzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcvc3RyaW5ncyc7XG5cbmltcG9ydCB7Q29tcHV0ZVBhcmFtcywgTm9kZSwgUGhhc2VkUGlwZWxpbmV9IGZyb20gJy4uL3R5cGVzL2NvbXB1dGUnO1xuXG5jb25zdCB7XG4gIE1FUkdJTkdfREVGQVVMVFNfV0lUSF9JTlBVVF9EQVRBLFxuICBFTVBUWV9QSVBFTElORSxcbiAgQ09ORklHX1dBUk4sXG4gIENPTVBVVElOR19QSVBFTElORV9GT1JfTk9ERSxcbiAgQ09NUFVUSU5HX0NPTVBPTkVOVF9QSVBFTElORSxcbiAgUkVHUk9VUElORyxcbiAgT0JTRVJWSU5HLFxufSA9IFNUUklOR1M7XG5cbi8qKlxuICogVHJhdmVyc2VzIGFsbCBjaGlsZCBub2RlcyBiYXNlZCBvbiBjaGlsZHJlbiBncm91cGluZy5cbiAqL1xuY29uc3QgdHJhdmVyc2UgPSBhc3luYyAoY2hpbGRyZW46IGFueSwgcGFyYW1zOiBDb21wdXRlUGFyYW1zKSA9PiB7XG4gIGZvciAoY29uc3QgY2hpbGQgaW4gY2hpbGRyZW4pIHtcbiAgICBjb25zb2xlLmRlYnVnKENPTVBVVElOR19DT01QT05FTlRfUElQRUxJTkUoY2hpbGQpKTtcbiAgICBhd2FpdCBjb21wdXRlTm9kZShjaGlsZHJlbltjaGlsZF0sIHBhcmFtcyk7XG4gIH1cbn07XG5cbi8qKlxuICogQXBwZW5kcyBgZGVmYXVsdGAgdmFsdWVzIHRvIGBpbnB1dHNgLlxuICovXG5jb25zdCBtZXJnZURlZmF1bHRzID0gKFxuICBpbnB1dHM6IFBsdWdpblBhcmFtc1tdLFxuICBkZWZhdWx0czogUGx1Z2luUGFyYW1zIHwgdW5kZWZpbmVkXG4pID0+IHtcbiAgaWYgKGlucHV0cykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZGVmYXVsdHNcbiAgICAgID8gaW5wdXRzLm1hcChpbnB1dCA9PiBtZXJnZU9iamVjdHMoZGVmYXVsdHMsIGlucHV0KSlcbiAgICAgIDogaW5wdXRzO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgY29uc29sZS5kZWJ1ZyhNRVJHSU5HX0RFRkFVTFRTX1dJVEhfSU5QVVRfREFUQSwgJ1xcbicpO1xuXG4gIHJldHVybiBkZWZhdWx0cyA/IFtkZWZhdWx0c10gOiBbXTtcbn07XG5cbi8qKlxuICogV2FybnMgaWYgdGhlIGBjb25maWdgIGlzIHByb3ZpZGVkIGluIHRoZSBtYW5pZmVzdC5cbiAqL1xuY29uc3Qgd2FybklmQ29uZmlnUHJvdmlkZWQgPSAobm9kZTogYW55KSA9PiB7XG4gIGlmICgnY29uZmlnJyBpbiBub2RlKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKG5vZGUuY29uZmlnIHx8IHt9KTtcbiAgICBjb25zdCBqb2luZWRQbHVnaW5zID0gcGx1Z2lucy5qb2luKCcsICcpO1xuICAgIGNvbnN0IGlzTW9yZSA9IHBsdWdpbnMubGVuZ3RoID4gMTtcblxuICAgIGxvZ2dlci53YXJuKENPTkZJR19XQVJOKGpvaW5lZFBsdWdpbnMsIGlzTW9yZSkpO1xuICB9XG59O1xuXG4vKipcbiAqIDEuIElmIHRoZSBub2RlIGhhcyBpdCdzIG93biBwaXBlbGluZSwgZGVmYXVsdHMgb3IgY29uZmlnIHRoZW4gdXNlIHRoYXQsXG4gKiAgICBvdGhlcndpc2UgdXNlIHdoYXRldmVyIGhhcyBiZWVuIHBhc3NlZCBkb3duIGZyb20gZnVydGhlciB1cCB0aGUgdHJlZS5cbiAqIDIuIElmIGl0J3MgYSBncm91cGluZyBub2RlLCB0aGVuIGZpcnN0IG9mIGFsbCBjb21wdXRlcyBhbGwgaXQncyBjaGlsZHJlbi5cbiAqICAgIFRoaXMgaXMgZG9pbmcgYSBkZXB0aCBmaXJzdCB0cmF2ZXJzYWwuXG4gKiAzLiBPdGhlcndpc2UgbWVyZ2VzIHRoZSBkZWZhdWx0cyBpbnRvIHRoZSBpbnB1dHMuXG4gKiA0LiBJdGVyYXRlcyBvdmVyIHBpcGVsaW5lIHBoYXNlcyAob2JzZXJ2ZSwgcmVncm91cCwgY29tcHV0ZSkuXG4gKiA1LiBPYnNlcnZlIHBsdWdpbnMgYXJlIHVzZWQgdG8gaW5zZXJ0IGlucHV0IHZhbHVlc1xuICogICAgKGlzb2xhdGVkIGV4ZWN1dGlvbiBjYW4gYmUgYWNoaXZlZCBieSBwYXNzaW5nIGAtLW9ic2VydmVgIGZsYWcgdG8gQ0xJIGNvbW1hbmQpLlxuICogNi4gUmVncm91cCBwbHVnaW4gaXMgdXNlZCB0byBncm91cCBleGlzdGluZyBpbnB1dHMgYnkgY3JpdGVyaWFcbiAqICAgIChpc29sYXRlZCBleGVjdXRpb24gY2FuIGJlIGFjaGl2ZWQgYnkgcGFzc2luZyBgLS1yZWdyb3VwYCBmbGFnIHRvIENMSSBjb21tYW5kKS5cbiAqICAgIFNpbmNlIGl0IGNyZWF0ZXMgbmV3IGNoaWxkcmVuIGZvciBub2RlLCBleGlzdGluZyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlIGRyb3BwZWQgYW5kIHJlY3Vyc2l2ZSB0cmF2ZXJzYWwgaXMgY2FsbGVkXG4gKiAgICBmb3IgbmV3Ym9yZCBjaGlsZCBjb21wb25lbnQuXG4gKiA3LiBDb21wdXRlIHBsdWdpbnMgYXJlIHVzZWQgdG8gZG8gZGVzaXJlZCBjb21wdXRhdGlvbnMgYW5kIGFwcGVuZGluZyB0aGUgcmVzdWx0IHRvIG91dHB1dHNcbiAqICAgIChpc29sYXRlZCBleGVjdXRpb24gY2FuIGJlIGFjaGl2ZWQgYnkgcGFzc2luZyBgLS1jb21wdXRlYCBmbGFnIHRvIENMSSBjb21tYW5kKS5cbiAqL1xuY29uc3QgY29tcHV0ZU5vZGUgPSBhc3luYyAobm9kZTogTm9kZSwgcGFyYW1zOiBDb21wdXRlUGFyYW1zKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgY29uc3QgcGlwZWxpbmUgPSBub2RlLnBpcGVsaW5lIHx8IChwYXJhbXMucGlwZWxpbmUgYXMgUGhhc2VkUGlwZWxpbmUpO1xuICBjb25zdCBjb25maWcgPSBub2RlLmNvbmZpZyB8fCBwYXJhbXMuY29uZmlnO1xuICBjb25zdCBkZWZhdWx0cyA9IG5vZGUuZGVmYXVsdHMgfHwgcGFyYW1zLmRlZmF1bHRzO1xuICBjb25zdCBub0ZsYWdzID0gIXBhcmFtcy5vYnNlcnZlICYmICFwYXJhbXMucmVncm91cCAmJiAhcGFyYW1zLmNvbXB1dGU7XG5cbiAgZGVidWdMb2dnZXIuc2V0RXhlY3V0aW5nUGx1Z2luTmFtZSgpO1xuICB3YXJuSWZDb25maWdQcm92aWRlZChub2RlKTtcblxuICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgIHJldHVybiB0cmF2ZXJzZShub2RlLmNoaWxkcmVuLCB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBwaXBlbGluZSxcbiAgICAgIGRlZmF1bHRzLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuICB9XG5cbiAgbGV0IG91dHB1dFN0b3JhZ2UgPSBzdHJ1Y3R1cmVkQ2xvbmUobm9kZS5pbnB1dHMpIGFzIFBsdWdpblBhcmFtc1tdO1xuICBvdXRwdXRTdG9yYWdlID0gbWVyZ2VEZWZhdWx0cyhvdXRwdXRTdG9yYWdlLCBkZWZhdWx0cyk7XG4gIGNvbnN0IHBpcGVsaW5lQ29weSA9IHN0cnVjdHVyZWRDbG9uZShwaXBlbGluZSkgfHwge307XG5cbiAgLyoqIENoZWNrcyBpZiBwaXBlbGluZSBpcyBub3QgYW4gYXJyYXkgb3IgZW1wdHkgb2JqZWN0LiAqL1xuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShwaXBlbGluZUNvcHkpIHx8XG4gICAgKHR5cGVvZiBwaXBlbGluZUNvcHkgPT09ICdvYmplY3QnICYmXG4gICAgICBwaXBlbGluZUNvcHkgIT09IG51bGwgJiZcbiAgICAgIE9iamVjdC5rZXlzKHBpcGVsaW5lQ29weSkubGVuZ3RoID09PSAwKVxuICApIHtcbiAgICBsb2dnZXIud2FybihFTVBUWV9QSVBFTElORSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgaXRlcmF0aW9uIGlzIG9uIG9ic2VydmUgcGlwZWxpbmUsIHRoZW4gZXhlY3V0ZXMgb2JzZXJ2ZSBwbHVnaW5zIGFuZCBzZXRzIHRoZSBpbnB1dHMgdmFsdWUuXG4gICAqL1xuICBpZiAoKG5vRmxhZ3MgfHwgcGFyYW1zLm9ic2VydmUpICYmIHBpcGVsaW5lQ29weS5vYnNlcnZlKSB7XG4gICAgd2hpbGUgKHBpcGVsaW5lQ29weS5vYnNlcnZlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgY29uc3QgcGx1Z2luTmFtZSA9IHBpcGVsaW5lQ29weS5vYnNlcnZlLnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgICAgY29uc29sZS5kZWJ1ZyhPQlNFUlZJTkcocGx1Z2luTmFtZSkpO1xuICAgICAgZGVidWdMb2dnZXIuc2V0RXhlY3V0aW5nUGx1Z2luTmFtZShwbHVnaW5OYW1lKTtcblxuICAgICAgY29uc3QgcGx1Z2luID0gcGFyYW1zLnBsdWdpblN0b3JhZ2UuZ2V0KHBsdWdpbk5hbWUpO1xuICAgICAgY29uc3Qgbm9kZUNvbmZpZyA9IGNvbmZpZyAmJiBjb25maWdbcGx1Z2luTmFtZV07XG5cbiAgICAgIG91dHB1dFN0b3JhZ2UgPSBhd2FpdCBwbHVnaW4uZXhlY3V0ZShvdXRwdXRTdG9yYWdlLCBub2RlQ29uZmlnKTtcbiAgICAgIG5vZGUuaW5wdXRzID0gb3V0cHV0U3RvcmFnZTtcblxuICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LmV4cGxhaW5lcikge1xuICAgICAgICBhZGRFeHBsYWluRGF0YSh7XG4gICAgICAgICAgcGx1Z2luTmFtZSxcbiAgICAgICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgcmVncm91cCBpcyByZXF1ZXN0ZWQsIGV4ZWN1dGUgcmVncm91cCBzdHJhdGVneSwgZGVsZXRlIGNoaWxkJ3MgaW5wdXRzLCBvdXRwdXRzIGFuZCBlbXB0eSByZWdyb3VwIGFycmF5LlxuICAgKi9cbiAgaWYgKChub0ZsYWdzIHx8IHBhcmFtcy5yZWdyb3VwKSAmJiBwaXBlbGluZUNvcHkucmVncm91cCkge1xuICAgIGNvbnN0IG9yaWdpbmFsT3V0cHV0cyA9IHBhcmFtcy5hcHBlbmQgPyBub2RlLm91dHB1dHMgfHwgW10gOiBbXTtcblxuICAgIG5vZGUuY2hpbGRyZW4gPSBSZWdyb3VwKFxuICAgICAgb3V0cHV0U3RvcmFnZSxcbiAgICAgIG9yaWdpbmFsT3V0cHV0cyxcbiAgICAgIHBpcGVsaW5lQ29weS5yZWdyb3VwXG4gICAgKTtcblxuICAgIGRlbGV0ZSBub2RlLmlucHV0cztcbiAgICBkZWxldGUgbm9kZS5vdXRwdXRzO1xuXG4gICAgZGVidWdMb2dnZXIuc2V0RXhlY3V0aW5nUGx1Z2luTmFtZSgpO1xuICAgIGNvbnNvbGUuZGVidWcoUkVHUk9VUElORyk7XG5cbiAgICByZXR1cm4gdHJhdmVyc2Uobm9kZS5jaGlsZHJlbiwge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgcGlwZWxpbmU6IHtcbiAgICAgICAgLi4ucGlwZWxpbmVDb3B5LFxuICAgICAgICByZWdyb3VwOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHMsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG4gIH1cblxuICBjb25zb2xlLmRlYnVnKCdcXG4nKTtcblxuICAvKipcbiAgICogSWYgaXRlcmF0aW9uIGlzIG9uIGNvbXB1dGUgcGx1Z2luLCB0aGVuIGV4ZWN1dGVzIGNvbXB1dGUgcGx1Z2lucyBhbmQgc2V0cyB0aGUgb3V0cHV0cyB2YWx1ZS5cbiAgICovXG4gIGlmICgobm9GbGFncyB8fCBwYXJhbXMuY29tcHV0ZSkgJiYgcGlwZWxpbmVDb3B5LmNvbXB1dGUpIHtcbiAgICBjb25zdCBvcmlnaW5hbE91dHB1dHMgPSBwYXJhbXMuYXBwZW5kID8gbm9kZS5vdXRwdXRzIHx8IFtdIDogW107XG5cbiAgICB3aGlsZSAocGlwZWxpbmVDb3B5LmNvbXB1dGUubGVuZ3RoICE9PSAwKSB7XG4gICAgICBjb25zdCBwbHVnaW5OYW1lID0gcGlwZWxpbmVDb3B5LmNvbXB1dGUuc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwYXJhbXMucGx1Z2luU3RvcmFnZS5nZXQocGx1Z2luTmFtZSk7XG4gICAgICBjb25zdCBub2RlQ29uZmlnID0gY29uZmlnICYmIGNvbmZpZ1twbHVnaW5OYW1lXTtcblxuICAgICAgY29uc29sZS5kZWJ1ZyhDT01QVVRJTkdfUElQRUxJTkVfRk9SX05PREUocGx1Z2luTmFtZSkpO1xuICAgICAgZGVidWdMb2dnZXIuc2V0RXhlY3V0aW5nUGx1Z2luTmFtZShwbHVnaW5OYW1lKTtcblxuICAgICAgb3V0cHV0U3RvcmFnZSA9IGF3YWl0IHBsdWdpbi5leGVjdXRlKG91dHB1dFN0b3JhZ2UsIG5vZGVDb25maWcpO1xuXG4gICAgICBkZWJ1Z0xvZ2dlci5zZXRFeGVjdXRpbmdQbHVnaW5OYW1lKCk7XG5cbiAgICAgIG5vZGUub3V0cHV0cyA9IG91dHB1dFN0b3JhZ2U7XG5cbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5leHBsYWluZXIpIHtcbiAgICAgICAgYWRkRXhwbGFpbkRhdGEoe1xuICAgICAgICAgIHBsdWdpbk5hbWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHBsdWdpbi5tZXRhZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5hcHBlbmQpIHtcbiAgICAgIG5vZGUub3V0cHV0cyA9IG9yaWdpbmFsT3V0cHV0cy5jb25jYXQobm9kZS5vdXRwdXRzIHx8IFtdKTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmRlYnVnKCdcXG4nKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBjb3B5IG9mIGV4aXN0aW5nIHRyZWUsIHRoZW4gYXBwbGllcyBjb21wdXRpbmcgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wdXRlID0gYXN5bmMgKHRyZWU6IGFueSwgcGFyYW1zOiBDb21wdXRlUGFyYW1zKSA9PiB7XG4gIGNvbnN0IGNvcHlPZlRyZWUgPSBzdHJ1Y3R1cmVkQ2xvbmUodHJlZSk7XG5cbiAgYXdhaXQgY29tcHV0ZU5vZGUoY29weU9mVHJlZSwgcGFyYW1zKTtcblxuICByZXR1cm4gY29weU9mVHJlZTtcbn07XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import { Manifest } from '../../common/types/manifest';
2
+ /**
3
+ * Injects execution information (command, environment) to existing manifest.
4
+ */
5
+ export declare const injectEnvironment: (manifest: Manifest) => Promise<Manifest>;