@grnsft/if 0.1.9 → 0.2.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 (176) hide show
  1. package/.commitlintrc.js +45 -0
  2. package/.husky/commit-msg +4 -0
  3. package/.husky/pre-commit +6 -0
  4. package/CONTRIBUTING.md +82 -109
  5. package/README.md +16 -12
  6. package/build/config/config.d.ts +4 -3
  7. package/build/config/config.js +11 -10
  8. package/build/config/params.js +17 -17
  9. package/build/config/strings.d.ts +9 -8
  10. package/build/config/strings.js +13 -12
  11. package/build/index.js +19 -69
  12. package/build/lib/aggregate.d.ts +6 -0
  13. package/build/lib/aggregate.js +72 -0
  14. package/build/lib/compute.d.ts +5 -0
  15. package/build/lib/compute.js +84 -0
  16. package/build/lib/exhaust.d.ts +6 -0
  17. package/build/lib/exhaust.js +47 -0
  18. package/build/lib/initialize.d.ts +6 -0
  19. package/build/lib/initialize.js +98 -0
  20. package/build/lib/load.d.ts +6 -0
  21. package/build/lib/load.js +24 -0
  22. package/build/lib/parameterize.d.ts +5 -0
  23. package/build/lib/parameterize.js +49 -0
  24. package/build/models/export-csv.d.ts +2 -0
  25. package/build/models/export-csv.js +129 -0
  26. package/build/models/export-log.d.ts +4 -0
  27. package/build/models/export-log.js +18 -0
  28. package/build/models/export-yaml.d.ts +4 -0
  29. package/build/models/export-yaml.js +24 -0
  30. package/build/models/group-by.d.ts +11 -0
  31. package/build/models/group-by.js +56 -0
  32. package/build/models/index.d.ts +2 -1
  33. package/build/models/index.js +5 -3
  34. package/build/models/time-sync.d.ts +2 -57
  35. package/build/models/time-sync.js +204 -158
  36. package/build/types/aggregation.js +5 -0
  37. package/build/types/compute.d.ts +25 -0
  38. package/build/types/compute.js +3 -0
  39. package/build/types/exhaust-plugin-interface.d.ts +7 -0
  40. package/build/types/exhaust-plugin-interface.js +3 -0
  41. package/build/types/group-by.d.ts +3 -0
  42. package/build/types/group-by.js +3 -0
  43. package/build/types/initialize.d.ts +4 -0
  44. package/build/types/initialize.js +3 -0
  45. package/build/types/interface.d.ts +8 -0
  46. package/build/types/interface.js +3 -0
  47. package/build/types/load.d.ts +7 -0
  48. package/build/types/load.js +3 -0
  49. package/build/types/manifest.d.ts +40 -0
  50. package/build/types/manifest.js +3 -0
  51. package/build/types/parameters.d.ts +4 -5
  52. package/build/types/parameters.js +1 -1
  53. package/build/types/process-args.d.ts +3 -5
  54. package/build/types/process-args.js +1 -1
  55. package/build/types/time-sync.d.ts +9 -2
  56. package/build/types/time-sync.js +1 -1
  57. package/build/util/aggregation-helper.d.ts +6 -0
  58. package/build/util/aggregation-helper.js +56 -0
  59. package/build/util/args.d.ts +6 -3
  60. package/build/util/args.js +21 -17
  61. package/build/util/errors.d.ts +1 -1
  62. package/build/util/errors.js +8 -4
  63. package/build/util/helpers.d.ts +4 -0
  64. package/build/util/helpers.js +23 -4
  65. package/build/util/json.d.ts +4 -0
  66. package/build/util/json.js +16 -0
  67. package/build/util/logger.d.ts +5 -0
  68. package/build/util/logger.js +40 -0
  69. package/build/util/validations.d.ts +22 -19
  70. package/build/util/validations.js +41 -34
  71. package/examples/{impls/test → manifests}/azure-importer.yml +8 -8
  72. package/examples/manifests/basic-demo.yml +75 -0
  73. package/examples/manifests/basic.yml +27 -0
  74. package/examples/manifests/boavizta-pipeline.yml +85 -0
  75. package/examples/{impls/test → manifests}/boavizta.yml +11 -12
  76. package/examples/{impls/test → manifests}/ccf.yml +9 -10
  77. package/examples/manifests/cim.yml +20 -0
  78. package/examples/manifests/cloud-metadata.yml +41 -0
  79. package/examples/manifests/co2js.yml +30 -0
  80. package/examples/manifests/coefficient.yml +23 -0
  81. package/examples/manifests/csv-export.yml +34 -0
  82. package/examples/manifests/e-mem.yml +21 -0
  83. package/examples/{impls/test → manifests}/e-net.yml +9 -8
  84. package/examples/manifests/generics.yml +71 -0
  85. package/examples/manifests/group-by.yml +48 -0
  86. package/examples/manifests/mock-observation.yml +33 -0
  87. package/examples/manifests/multiply.yml +23 -0
  88. package/examples/manifests/nesting-demo.yml +89 -0
  89. package/examples/manifests/nesting.yml +215 -0
  90. package/examples/manifests/pipeline-demo-1.yml +85 -0
  91. package/examples/manifests/pipeline-demo-2.yml +149 -0
  92. package/examples/manifests/pipeline-demo.yml +128 -0
  93. package/examples/manifests/pipeline-teads-sci.yml +82 -0
  94. package/examples/manifests/pipeline-with-generics.yml +147 -0
  95. package/examples/manifests/pipeline-with-mocks.yml +146 -0
  96. package/examples/{impls/test → manifests}/sci-e.yml +6 -8
  97. package/examples/manifests/sci-m.yml +23 -0
  98. package/examples/{impls/test → manifests}/sci-o.yml +10 -10
  99. package/examples/{impls/test → manifests}/sci.yml +10 -9
  100. package/examples/manifests/shell.yml +20 -0
  101. package/examples/manifests/sum.yml +23 -0
  102. package/examples/{impls/test → manifests}/tdp-finder.yml +6 -7
  103. package/examples/manifests/teads-aws.yml +22 -0
  104. package/examples/manifests/teads-curve.yml +20 -0
  105. package/examples/manifests/time-sync.yml +32 -0
  106. package/examples/manifests/watt-time.yml +42 -0
  107. package/jest.config.js +6 -1
  108. package/package.json +13 -8
  109. package/src/__tests__/integration/templates/integration.yaml +16 -0
  110. package/src/models/README.md +6 -6
  111. package/tsconfig.test.json +1 -1
  112. package/Makefile +0 -16
  113. package/build/lib/aggregator.d.ts +0 -7
  114. package/build/lib/aggregator.js +0 -46
  115. package/build/lib/models-universe.d.ts +0 -40
  116. package/build/lib/models-universe.js +0 -145
  117. package/build/lib/observatory.d.ts +0 -20
  118. package/build/lib/observatory.js +0 -31
  119. package/build/lib/supercomputer.d.ts +0 -39
  120. package/build/lib/supercomputer.js +0 -116
  121. package/build/types/aggregator.js +0 -5
  122. package/build/types/impl.d.ts +0 -92
  123. package/build/types/impl.js +0 -19
  124. package/build/types/model-interface.d.ts +0 -13
  125. package/build/types/model-interface.js +0 -3
  126. package/build/types/models-universe.d.ts +0 -20
  127. package/build/types/models-universe.js +0 -3
  128. package/build/types/supercomputer.d.ts +0 -4
  129. package/build/types/supercomputer.js +0 -3
  130. package/build/util/param-selectors.d.ts +0 -5
  131. package/build/util/param-selectors.js +0 -14
  132. package/examples/impls/case-studies/accenture.yml +0 -155
  133. package/examples/impls/case-studies/aggregation.yml +0 -97
  134. package/examples/impls/case-studies/aveva.yaml +0 -48
  135. package/examples/impls/case-studies/azure-yassine.yaml +0 -67
  136. package/examples/impls/case-studies/boavizta.yml +0 -26
  137. package/examples/impls/case-studies/dow_msft.yml +0 -173
  138. package/examples/impls/case-studies/farm-insights.yaml +0 -35
  139. package/examples/impls/case-studies/gsf-website.yaml +0 -93
  140. package/examples/impls/case-studies/msft-eshoppen.yaml +0 -162
  141. package/examples/impls/case-studies/msft-green-ai.yaml +0 -58
  142. package/examples/impls/case-studies/ntt-data-on-premise.yaml +0 -201
  143. package/examples/impls/test/aggregation-test.yml +0 -109
  144. package/examples/impls/test/aggregation-test2.yml +0 -52
  145. package/examples/impls/test/cim.yml +0 -19
  146. package/examples/impls/test/e-mem.yml +0 -19
  147. package/examples/impls/test/if-demo.yml +0 -59
  148. package/examples/impls/test/large-impl.yml +0 -257303
  149. package/examples/impls/test/metadata.yml +0 -21
  150. package/examples/impls/test/nesting.yml +0 -113
  151. package/examples/impls/test/new-params-test.yml +0 -35
  152. package/examples/impls/test/sci-m.yml +0 -24
  153. package/examples/impls/test/shell.yml +0 -19
  154. package/examples/impls/test/teads-cpu.yml +0 -18
  155. package/examples/impls/test/time-sync-avoid-padding.yml +0 -50
  156. package/examples/impls/test/time-sync.yml +0 -76
  157. package/examples/ompls/aggregation-test.yml +0 -340
  158. package/examples/ompls/aggregation-test2.yml +0 -83
  159. package/examples/ompls/azure-importer.yml +0 -145
  160. package/examples/ompls/boavizta.yml +0 -32
  161. package/examples/ompls/ccf.yml +0 -29
  162. package/examples/ompls/cim.yml +0 -29
  163. package/examples/ompls/complex-pipeline.yml +0 -105
  164. package/examples/ompls/e-mem.yml +0 -26
  165. package/examples/ompls/full-sci.yml +0 -64
  166. package/examples/ompls/if-demo.yml +0 -517
  167. package/examples/ompls/metadata.yml +0 -29
  168. package/examples/ompls/nesting.yml +0 -113
  169. package/examples/ompls/sci-e.yml +0 -23
  170. package/examples/ompls/sci-m.yml +0 -33
  171. package/examples/ompls/sci-o.yml +0 -29
  172. package/examples/ompls/sci.yml +0 -37
  173. package/examples/ompls/shell.yml +0 -23
  174. package/examples/ompls/teads-cpu.yml +0 -24
  175. package/examples/ompls/time-sync.yml +0 -212
  176. /package/build/types/{aggregator.d.ts → aggregation.d.ts} +0 -0
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.load = void 0;
4
+ const validations_1 = require("../util/validations");
5
+ const yaml_1 = require("../util/yaml");
6
+ const json_1 = require("../util/json");
7
+ const config_1 = require("../config");
8
+ /**
9
+ * Parses manifest file as an object. Checks if parameter file is passed via CLI, then loads it too.
10
+ * Returns context, tree and parameters (either the default one, or from CLI).
11
+ */
12
+ const load = async (inputPath, paramPath) => {
13
+ const safeManifest = await (0, yaml_1.openYamlFileAsObject)(inputPath);
14
+ const { name, description, tags, params, aggregation, initialize, tree } = (0, validations_1.validateManifest)(safeManifest);
15
+ const parametersFromCli = paramPath && (await (0, json_1.readAndParseJson)(paramPath)); // todo: validate json
16
+ const parameters = parametersFromCli || config_1.PARAMETERS;
17
+ return {
18
+ tree,
19
+ context: { name, description, tags, params, aggregation, initialize },
20
+ parameters,
21
+ };
22
+ };
23
+ exports.load = load;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBcUQ7QUFDckQsdUNBQWtEO0FBQ2xELHVDQUE4QztBQUU5QyxzQ0FBcUM7QUFNckM7OztHQUdHO0FBQ0ksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixTQUFpQixFQUNqQixTQUFrQixFQUNVLEVBQUU7SUFDOUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLDJCQUFvQixFQUFXLFNBQVMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsR0FDcEUsSUFBQSw4QkFBZ0IsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxNQUFNLGlCQUFpQixHQUNyQixTQUFTLElBQUksQ0FBQyxNQUFNLElBQUEsdUJBQWdCLEVBQWEsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtJQUN0RixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsSUFBSSxtQkFBVSxDQUFDO0lBRW5ELE9BQU87UUFDTCxJQUFJO1FBQ0osT0FBTyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUM7UUFDbkUsVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDLENBQUM7QUFoQlcsUUFBQSxJQUFJLFFBZ0JmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt2YWxpZGF0ZU1hbmlmZXN0fSBmcm9tICcuLi91dGlsL3ZhbGlkYXRpb25zJztcbmltcG9ydCB7b3BlbllhbWxGaWxlQXNPYmplY3R9IGZyb20gJy4uL3V0aWwveWFtbCc7XG5pbXBvcnQge3JlYWRBbmRQYXJzZUpzb259IGZyb20gJy4uL3V0aWwvanNvbic7XG5cbmltcG9ydCB7UEFSQU1FVEVSU30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtNYW5pZmVzdH0gZnJvbSAnLi4vdHlwZXMvbWFuaWZlc3QnO1xuaW1wb3J0IHtDb250ZXh0VHJlZVBhcmFtc30gZnJvbSAnLi4vdHlwZXMvbG9hZCc7XG5pbXBvcnQge1BhcmFtZXRlcnN9IGZyb20gJy4uL3R5cGVzL3BhcmFtZXRlcnMnO1xuXG4vKipcbiAqIFBhcnNlcyBtYW5pZmVzdCBmaWxlIGFzIGFuIG9iamVjdC4gQ2hlY2tzIGlmIHBhcmFtZXRlciBmaWxlIGlzIHBhc3NlZCB2aWEgQ0xJLCB0aGVuIGxvYWRzIGl0IHRvby5cbiAqIFJldHVybnMgY29udGV4dCwgdHJlZSBhbmQgcGFyYW1ldGVycyAoZWl0aGVyIHRoZSBkZWZhdWx0IG9uZSwgb3IgZnJvbSBDTEkpLlxuICovXG5leHBvcnQgY29uc3QgbG9hZCA9IGFzeW5jIChcbiAgaW5wdXRQYXRoOiBzdHJpbmcsXG4gIHBhcmFtUGF0aD86IHN0cmluZ1xuKTogUHJvbWlzZTxDb250ZXh0VHJlZVBhcmFtcz4gPT4ge1xuICBjb25zdCBzYWZlTWFuaWZlc3QgPSBhd2FpdCBvcGVuWWFtbEZpbGVBc09iamVjdDxNYW5pZmVzdD4oaW5wdXRQYXRoKTtcbiAgY29uc3Qge25hbWUsIGRlc2NyaXB0aW9uLCB0YWdzLCBwYXJhbXMsIGFnZ3JlZ2F0aW9uLCBpbml0aWFsaXplLCB0cmVlfSA9XG4gICAgdmFsaWRhdGVNYW5pZmVzdChzYWZlTWFuaWZlc3QpO1xuICBjb25zdCBwYXJhbWV0ZXJzRnJvbUNsaSA9XG4gICAgcGFyYW1QYXRoICYmIChhd2FpdCByZWFkQW5kUGFyc2VKc29uPFBhcmFtZXRlcnM+KHBhcmFtUGF0aCkpOyAvLyB0b2RvOiB2YWxpZGF0ZSBqc29uXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUNsaSB8fCBQQVJBTUVURVJTO1xuXG4gIHJldHVybiB7XG4gICAgdHJlZSxcbiAgICBjb250ZXh0OiB7bmFtZSwgZGVzY3JpcHRpb24sIHRhZ3MsIHBhcmFtcywgYWdncmVnYXRpb24sIGluaXRpYWxpemV9LFxuICAgIHBhcmFtZXRlcnMsXG4gIH07XG59O1xuIl19
@@ -0,0 +1,5 @@
1
+ import { ManifestParameter } from '../types/parameters';
2
+ export declare const parameterize: {
3
+ combine: (contextParameters: ManifestParameter[] | null | undefined, parameters: any) => void;
4
+ getAggregationMethod: (unitName: string) => "sum" | "none" | "avg";
5
+ };
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parameterize = void 0;
4
+ const logger_1 = require("../util/logger");
5
+ const config_1 = require("../config");
6
+ const { REJECTING_OVERRIDE } = config_1.STRINGS;
7
+ /**
8
+ * Parameters manager. Provides get aggregation method and combine functionality.
9
+ */
10
+ const Parametrize = () => {
11
+ let parametersStorage = {};
12
+ /**
13
+ * Returns aggregation method for given `unitName`. If doesn't exist then returns value `sum`.
14
+ */
15
+ const getAggregationMethod = (unitName) => {
16
+ if (`${unitName}` in parametersStorage) {
17
+ return config_1.PARAMETERS[unitName].aggregation;
18
+ }
19
+ return 'sum';
20
+ };
21
+ /**
22
+ * Checks if additional parameters are provided in context.
23
+ * If so, then checks if they are coincident with default ones and exits with warning message.
24
+ * Otherwise appends context based parameters to defaults.
25
+ */
26
+ const combine = (contextParameters, parameters) => {
27
+ if (contextParameters) {
28
+ contextParameters.forEach((param) => {
29
+ if (`${param.name}` in parameters) {
30
+ logger_1.logger.warn(REJECTING_OVERRIDE);
31
+ return;
32
+ }
33
+ const { description, unit, aggregation, name } = param;
34
+ parameters[name] = {
35
+ description,
36
+ unit,
37
+ aggregation,
38
+ };
39
+ });
40
+ }
41
+ parametersStorage = parameters;
42
+ };
43
+ return {
44
+ combine,
45
+ getAggregationMethod,
46
+ };
47
+ };
48
+ exports.parameterize = Parametrize();
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9wYXJhbWV0ZXJpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXNDO0FBRXRDLHNDQUE4QztBQUk5QyxNQUFNLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXJDOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFO0lBQ3ZCLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBRTNCOztPQUVHO0lBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtRQUNoRCxJQUFJLEdBQUcsUUFBUSxFQUFFLElBQUksaUJBQWlCLEVBQUU7WUFDdEMsT0FBTyxtQkFBVSxDQUFDLFFBQW1DLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDcEU7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxDQUNkLGlCQUF5RCxFQUN6RCxVQUFlLEVBQ2YsRUFBRTtRQUNGLElBQUksaUJBQWlCLEVBQUU7WUFDckIsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxFQUFFO29CQUNqQyxlQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBRWhDLE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztnQkFFckQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHO29CQUNqQixXQUFXO29CQUNYLElBQUk7b0JBQ0osV0FBVztpQkFDWixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELGlCQUFpQixHQUFHLFVBQVUsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsT0FBTztRQUNQLG9CQUFvQjtLQUNyQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRVcsUUFBQSxZQUFZLEdBQUcsV0FBVyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vdXRpbC9sb2dnZXInO1xuXG5pbXBvcnQge1NUUklOR1MsIFBBUkFNRVRFUlN9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7TWFuaWZlc3RQYXJhbWV0ZXJ9IGZyb20gJy4uL3R5cGVzL3BhcmFtZXRlcnMnO1xuXG5jb25zdCB7UkVKRUNUSU5HX09WRVJSSURFfSA9IFNUUklOR1M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBtYW5hZ2VyLiBQcm92aWRlcyBnZXQgYWdncmVnYXRpb24gbWV0aG9kIGFuZCBjb21iaW5lIGZ1bmN0aW9uYWxpdHkuXG4gKi9cbmNvbnN0IFBhcmFtZXRyaXplID0gKCkgPT4ge1xuICBsZXQgcGFyYW1ldGVyc1N0b3JhZ2UgPSB7fTtcblxuICAvKipcbiAgICogUmV0dXJucyBhZ2dyZWdhdGlvbiBtZXRob2QgZm9yIGdpdmVuIGB1bml0TmFtZWAuIElmIGRvZXNuJ3QgZXhpc3QgdGhlbiByZXR1cm5zIHZhbHVlIGBzdW1gLlxuICAgKi9cbiAgY29uc3QgZ2V0QWdncmVnYXRpb25NZXRob2QgPSAodW5pdE5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChgJHt1bml0TmFtZX1gIGluIHBhcmFtZXRlcnNTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gUEFSQU1FVEVSU1t1bml0TmFtZSBhcyBrZXlvZiB0eXBlb2YgUEFSQU1FVEVSU10uYWdncmVnYXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuICdzdW0nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCBpbiBjb250ZXh0LlxuICAgKiBJZiBzbywgdGhlbiBjaGVja3MgaWYgdGhleSBhcmUgY29pbmNpZGVudCB3aXRoIGRlZmF1bHQgb25lcyBhbmQgZXhpdHMgd2l0aCB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIE90aGVyd2lzZSBhcHBlbmRzIGNvbnRleHQgYmFzZWQgcGFyYW1ldGVycyB0byBkZWZhdWx0cy5cbiAgICovXG4gIGNvbnN0IGNvbWJpbmUgPSAoXG4gICAgY29udGV4dFBhcmFtZXRlcnM6IE1hbmlmZXN0UGFyYW1ldGVyW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHBhcmFtZXRlcnM6IGFueVxuICApID0+IHtcbiAgICBpZiAoY29udGV4dFBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbnRleHRQYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGAke3BhcmFtLm5hbWV9YCBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oUkVKRUNUSU5HX09WRVJSSURFKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtkZXNjcmlwdGlvbiwgdW5pdCwgYWdncmVnYXRpb24sIG5hbWV9ID0gcGFyYW07XG5cbiAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICB1bml0LFxuICAgICAgICAgIGFnZ3JlZ2F0aW9uLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcGFyYW1ldGVyc1N0b3JhZ2UgPSBwYXJhbWV0ZXJzO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY29tYmluZSxcbiAgICBnZXRBZ2dyZWdhdGlvbk1ldGhvZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJhbWV0ZXJpemUgPSBQYXJhbWV0cml6ZSgpO1xuIl19
@@ -0,0 +1,2 @@
1
+ import { ExhaustPluginInterface } from '../types/exhaust-plugin-interface';
2
+ export declare const ExportCsv: () => ExhaustPluginInterface;
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ExportCsv = void 0;
27
+ const fs = __importStar(require("fs/promises"));
28
+ const errors_1 = require("../util/errors");
29
+ const { WriteFileError, CliInputError } = errors_1.ERRORS;
30
+ const ExportCsv = () => {
31
+ /**
32
+ * handle a tree leaf, where there are no child nodes, by adding it as key->value pair to the flat map
33
+ * and capturing key as a header
34
+ */
35
+ const handleLeafValue = (value, fullPath, key, flatMap, headers) => {
36
+ if (fullPath.includes('outputs')) {
37
+ headers.add(key);
38
+ flatMap[fullPath] = value;
39
+ }
40
+ };
41
+ /**
42
+ * handle a tree node, recursively traverse the children and append their results to the flat map and captured headers
43
+ */
44
+ const handleNodeValue = (value, fullPath, flatMap, headers) => {
45
+ const [subFlatMap, subHeaders] = extractFlatMapAndHeaders(value, fullPath);
46
+ if (Object.keys(subFlatMap).length > 0) {
47
+ Object.entries(subFlatMap).forEach(([subKey, value]) => {
48
+ flatMap[subKey] = value;
49
+ });
50
+ subHeaders.forEach(subHeader => {
51
+ headers.add(subHeader);
52
+ });
53
+ }
54
+ };
55
+ /**
56
+ * Handles a key at the top level of the tree
57
+ */
58
+ const handleKey = (value, key, prefix, flatMap, headers) => {
59
+ const fullPath = prefix ? `${prefix}.${key}` : key;
60
+ if (value !== null && typeof value === 'object') {
61
+ return handleNodeValue(value, fullPath, flatMap, headers);
62
+ }
63
+ return handleLeafValue(value, fullPath, key, flatMap, headers);
64
+ };
65
+ /**
66
+ * qrecursively extract a flat map and headers from the hierarcial tree
67
+ */
68
+ const extractFlatMapAndHeaders = (tree, prefix = '') => {
69
+ const headers = new Set();
70
+ const flatMap = [];
71
+ for (const key in tree) {
72
+ if (key in tree) {
73
+ handleKey(tree[key], key, prefix, flatMap, headers);
74
+ }
75
+ }
76
+ return [flatMap, headers];
77
+ };
78
+ /**
79
+ * extract the id of the key, that is removing the last token (which is the index).
80
+ * in this manner, multiple keys that identical besides their index share the same id.
81
+ */
82
+ const extractIdHelper = (key) => {
83
+ const parts = key.split('.');
84
+ parts.pop();
85
+ return parts.join('.');
86
+ };
87
+ /**
88
+ * generate a CSV formatted string based on a flat key->value map, headers and ids
89
+ */
90
+ const getCsvString = (map, headers, ids) => {
91
+ const csvRows = [];
92
+ csvRows.push(['id', ...headers].join(','));
93
+ ids.forEach(id => {
94
+ const rowData = [id];
95
+ headers.forEach(header => {
96
+ const value = map[`${id}.${header}`] ?? '';
97
+ rowData.push(value.toString());
98
+ });
99
+ csvRows.push(rowData.join(','));
100
+ });
101
+ return csvRows.join('\n');
102
+ };
103
+ /**
104
+ * write the given string content to a file at the provided path
105
+ */
106
+ const writeOutputFile = async (content, outputPath) => {
107
+ try {
108
+ await fs.writeFile(`${outputPath}.csv`, content);
109
+ }
110
+ catch (error) {
111
+ throw new WriteFileError(`Failed to write CSV to ${outputPath}: ${error}`);
112
+ }
113
+ };
114
+ /**
115
+ * export the provided tree content to a CSV file, represented in a flat structure
116
+ */
117
+ const execute = async (tree, _context, outputPath) => {
118
+ if (!outputPath) {
119
+ throw new CliInputError('Output path is required.');
120
+ }
121
+ const [extractredFlatMap, extractedHeaders] = extractFlatMapAndHeaders(tree);
122
+ const ids = new Set(Object.keys(extractredFlatMap).map(key => extractIdHelper(key)));
123
+ const csvString = getCsvString(extractredFlatMap, extractedHeaders, ids);
124
+ writeOutputFile(csvString, outputPath);
125
+ };
126
+ return { execute };
127
+ };
128
+ exports.ExportCsv = ExportCsv;
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWNzdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvZXhwb3J0LWNzdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUFrQztBQUVsQywyQ0FBc0M7QUFLdEMsTUFBTSxFQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFeEMsTUFBTSxTQUFTLEdBQUcsR0FBMkIsRUFBRTtJQUNwRDs7O09BR0c7SUFDSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUFVLEVBQ1YsUUFBZ0IsRUFDaEIsR0FBUSxFQUNSLE9BQTZCLEVBQzdCLE9BQW9CLEVBQ3BCLEVBQUU7UUFDRixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUFVLEVBQ1YsUUFBZ0IsRUFDaEIsT0FBNEIsRUFDNUIsT0FBb0IsRUFDcEIsRUFBRTtRQUNGLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTNFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDckQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FB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QUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2xEO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLElBQUksY0FBYyxDQUN0QiwwQkFBMEIsVUFBVSxLQUFLLEtBQUssRUFBRSxDQUNqRCxDQUFDO1NBQ0g7SUFDSCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFTLEVBQUUsUUFBaUIsRUFBRSxVQUFrQixFQUFFLEVBQUU7UUFDekUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE1BQU0sSUFBSSxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxHQUN6Qyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNoRSxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXpFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFDLE9BQU8sRUFBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQWpKVyxRQUFBLFNBQVMsYUFpSnBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi4vdXRpbC9lcnJvcnMnO1xuXG5pbXBvcnQge0V4aGF1c3RQbHVnaW5JbnRlcmZhY2V9IGZyb20gJy4uL3R5cGVzL2V4aGF1c3QtcGx1Z2luLWludGVyZmFjZSc7XG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uL3R5cGVzL21hbmlmZXN0JztcblxuY29uc3Qge1dyaXRlRmlsZUVycm9yLCBDbGlJbnB1dEVycm9yfSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IEV4cG9ydENzdiA9ICgpOiBFeGhhdXN0UGx1Z2luSW50ZXJmYWNlID0+IHtcbiAgLyoqXG4gICAqIGhhbmRsZSBhIHRyZWUgbGVhZiwgd2hlcmUgdGhlcmUgYXJlIG5vIGNoaWxkIG5vZGVzLCBieSBhZGRpbmcgaXQgYXMga2V5LT52YWx1ZSBwYWlyIHRvIHRoZSBmbGF0IG1hcFxuICAgKiBhbmQgY2FwdHVyaW5nIGtleSBhcyBhIGhlYWRlclxuICAgKi9cbiAgY29uc3QgaGFuZGxlTGVhZlZhbHVlID0gKFxuICAgIHZhbHVlOiBhbnksXG4gICAgZnVsbFBhdGg6IHN0cmluZyxcbiAgICBrZXk6IGFueSxcbiAgICBmbGF0TWFwOiB7W2tleTogc3RyaW5nXTogYW55fSxcbiAgICBoZWFkZXJzOiBTZXQ8c3RyaW5nPlxuICApID0+IHtcbiAgICBpZiAoZnVsbFBhdGguaW5jbHVkZXMoJ291dHB1dHMnKSkge1xuICAgICAgaGVhZGVycy5hZGQoa2V5KTtcbiAgICAgIGZsYXRNYXBbZnVsbFBhdGhdID0gdmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBoYW5kbGUgYSB0cmVlIG5vZGUsIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHRoZSBjaGlsZHJlbiBhbmQgYXBwZW5kIHRoZWlyIHJlc3VsdHMgdG8gdGhlIGZsYXQgbWFwIGFuZCBjYXB0dXJlZCBoZWFkZXJzXG4gICAqL1xuICBjb25zdCBoYW5kbGVOb2RlVmFsdWUgPSAoXG4gICAgdmFsdWU6IGFueSxcbiAgICBmdWxsUGF0aDogc3RyaW5nLFxuICAgIGZsYXRNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgaGVhZGVyczogU2V0PHN0cmluZz5cbiAgKSA9PiB7XG4gICAgY29uc3QgW3N1YkZsYXRNYXAsIHN1YkhlYWRlcnNdID0gZXh0cmFjdEZsYXRNYXBBbmRIZWFkZXJzKHZhbHVlLCBmdWxsUGF0aCk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc3ViRmxhdE1hcCkubGVuZ3RoID4gMCkge1xuICAgICAgT2JqZWN0LmVudHJpZXMoc3ViRmxhdE1hcCkuZm9yRWFjaCgoW3N1YktleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGZsYXRNYXBbc3ViS2V5XSA9IHZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIHN1YkhlYWRlcnMuZm9yRWFjaChzdWJIZWFkZXIgPT4ge1xuICAgICAgICBoZWFkZXJzLmFkZChzdWJIZWFkZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGEga2V5IGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHRyZWVcbiAgICovXG4gIGNvbnN0IGhhbmRsZUtleSA9IChcbiAgICB2YWx1ZTogYW55LFxuICAgIGtleTogYW55LFxuICAgIHByZWZpeDogc3RyaW5nLFxuICAgIGZsYXRNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgaGVhZGVyczogU2V0PHN0cmluZz5cbiAgKSA9PiB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwcmVmaXggPyBgJHtwcmVmaXh9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGhhbmRsZU5vZGVWYWx1ZSh2YWx1ZSwgZnVsbFBhdGgsIGZsYXRNYXAsIGhlYWRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGVMZWFmVmFsdWUodmFsdWUsIGZ1bGxQYXRoLCBrZXksIGZsYXRNYXAsIGhlYWRlcnMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBxcmVjdXJzaXZlbHkgZXh0cmFjdCBhIGZsYXQgbWFwIGFuZCBoZWFkZXJzIGZyb20gdGhlIGhpZXJhcmNpYWwgdHJlZVxuICAgKi9cbiAgY29uc3QgZXh0cmFjdEZsYXRNYXBBbmRIZWFkZXJzID0gKFxuICAgIHRyZWU6IGFueSxcbiAgICBwcmVmaXggPSAnJ1xuICApOiBbUmVjb3JkPHN0cmluZywgYW55PiwgU2V0PHN0cmluZz5dID0+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBmbGF0TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0cmVlKSB7XG4gICAgICBpZiAoa2V5IGluIHRyZWUpIHtcbiAgICAgICAgaGFuZGxlS2V5KHRyZWVba2V5XSwga2V5LCBwcmVmaXgsIGZsYXRNYXAsIGhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbZmxhdE1hcCwgaGVhZGVyc107XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3QgdGhlIGlkIG9mIHRoZSBrZXksIHRoYXQgaXMgcmVtb3ZpbmcgdGhlIGxhc3QgdG9rZW4gKHdoaWNoIGlzIHRoZSBpbmRleCkuXG4gICAqIGluIHRoaXMgbWFubmVyLCBtdWx0aXBsZSBrZXlzIHRoYXQgaWRlbnRpY2FsIGJlc2lkZXMgdGhlaXIgaW5kZXggc2hhcmUgdGhlIHNhbWUgaWQuXG4gICAqL1xuICBjb25zdCBleHRyYWN0SWRIZWxwZXIgPSAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgcGFydHMucG9wKCk7XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignLicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZSBhIENTViBmb3JtYXR0ZWQgc3RyaW5nIGJhc2VkIG9uIGEgZmxhdCBrZXktPnZhbHVlIG1hcCwgaGVhZGVycyBhbmQgaWRzXG4gICAqL1xuICBjb25zdCBnZXRDc3ZTdHJpbmcgPSAoXG4gICAgbWFwOiB7W2tleTogc3RyaW5nXTogYW55fSxcbiAgICBoZWFkZXJzOiBTZXQ8c3RyaW5nPixcbiAgICBpZHM6IFNldDxzdHJpbmc+XG4gICk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgY3N2Um93czogc3RyaW5nW10gPSBbXTtcbiAgICBjc3ZSb3dzLnB1c2goWydpZCcsIC4uLmhlYWRlcnNdLmpvaW4oJywnKSk7XG5cbiAgICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCByb3dEYXRhID0gW2lkXTtcblxuICAgICAgaGVhZGVycy5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbWFwW2Ake2lkfS4ke2hlYWRlcn1gXSA/PyAnJztcbiAgICAgICAgcm93RGF0YS5wdXNoKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgICBjc3ZSb3dzLnB1c2gocm93RGF0YS5qb2luKCcsJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzdlJvd3Muam9pbignXFxuJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHdyaXRlIHRoZSBnaXZlbiBzdHJpbmcgY29udGVudCB0byBhIGZpbGUgYXQgdGhlIHByb3ZpZGVkIHBhdGhcbiAgICovXG4gIGNvbnN0IHdyaXRlT3V0cHV0RmlsZSA9IGFzeW5jIChjb250ZW50OiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoYCR7b3V0cHV0UGF0aH0uY3N2YCwgY29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBXcml0ZUZpbGVFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byB3cml0ZSBDU1YgdG8gJHtvdXRwdXRQYXRofTogJHtlcnJvcn1gXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogZXhwb3J0IHRoZSBwcm92aWRlZCB0cmVlIGNvbnRlbnQgdG8gYSBDU1YgZmlsZSwgcmVwcmVzZW50ZWQgaW4gYSBmbGF0IHN0cnVjdHVyZVxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IGFzeW5jICh0cmVlOiBhbnksIF9jb250ZXh0OiBDb250ZXh0LCBvdXRwdXRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW91dHB1dFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBDbGlJbnB1dEVycm9yKCdPdXRwdXQgcGF0aCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBbZXh0cmFjdHJlZEZsYXRNYXAsIGV4dHJhY3RlZEhlYWRlcnNdID1cbiAgICAgIGV4dHJhY3RGbGF0TWFwQW5kSGVhZGVycyh0cmVlKTtcbiAgICBjb25zdCBpZHMgPSBuZXcgU2V0KFxuICAgICAgT2JqZWN0LmtleXMoZXh0cmFjdHJlZEZsYXRNYXApLm1hcChrZXkgPT4gZXh0cmFjdElkSGVscGVyKGtleSkpXG4gICAgKTtcbiAgICBjb25zdCBjc3ZTdHJpbmcgPSBnZXRDc3ZTdHJpbmcoZXh0cmFjdHJlZEZsYXRNYXAsIGV4dHJhY3RlZEhlYWRlcnMsIGlkcyk7XG5cbiAgICB3cml0ZU91dHB1dEZpbGUoY3N2U3RyaW5nLCBvdXRwdXRQYXRoKTtcbiAgfTtcblxuICByZXR1cm4ge2V4ZWN1dGV9O1xufTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { Context } from '../types/manifest';
2
+ export declare const ExportLog: () => {
3
+ execute: (tree: any, context: Context) => Promise<void>;
4
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExportLog = void 0;
4
+ const ExportLog = () => {
5
+ /**
6
+ * Logs output manifest in console.
7
+ */
8
+ const execute = async (tree, context) => {
9
+ const outputFile = {
10
+ ...context,
11
+ tree,
12
+ };
13
+ console.log(JSON.stringify(outputFile, null, 2));
14
+ };
15
+ return { execute };
16
+ };
17
+ exports.ExportLog = ExportLog;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvZXhwb3J0LWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFTyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFDNUI7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQWdCLEVBQUUsRUFBRTtRQUNwRCxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE9BQU87WUFDVixJQUFJO1NBQ0wsQ0FBQztRQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFDLE9BQU8sRUFBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQWRXLFFBQUEsU0FBUyxhQWNwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vdHlwZXMvbWFuaWZlc3QnO1xuXG5leHBvcnQgY29uc3QgRXhwb3J0TG9nID0gKCkgPT4ge1xuICAvKipcbiAgICogTG9ncyBvdXRwdXQgbWFuaWZlc3QgaW4gY29uc29sZS5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAodHJlZTogYW55LCBjb250ZXh0OiBDb250ZXh0KSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0RmlsZSA9IHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICB0cmVlLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShvdXRwdXRGaWxlLCBudWxsLCAyKSk7XG4gIH07XG5cbiAgcmV0dXJuIHtleGVjdXRlfTtcbn07XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { Context } from '../types/manifest';
2
+ export declare const ExportYaml: () => {
3
+ execute: (tree: any, context: Context, outputPath: string) => Promise<void>;
4
+ };
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExportYaml = void 0;
4
+ const yaml_1 = require("../util/yaml");
5
+ const errors_1 = require("../util/errors");
6
+ const { CliInputError } = errors_1.ERRORS;
7
+ const ExportYaml = () => {
8
+ /**
9
+ * Saves output file in YAML format.
10
+ */
11
+ const execute = async (tree, context, outputPath) => {
12
+ if (!outputPath) {
13
+ throw new CliInputError('Output path is required.');
14
+ }
15
+ const outputFile = {
16
+ ...context,
17
+ tree,
18
+ };
19
+ await (0, yaml_1.saveYamlFileAs)(outputFile, `${outputPath}.yaml`);
20
+ };
21
+ return { execute };
22
+ };
23
+ exports.ExportYaml = ExportYaml;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXlhbWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL2V4cG9ydC15YW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUE0QztBQUU1QywyQ0FBc0M7QUFJdEMsTUFBTSxFQUFDLGFBQWEsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUV4QixNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7SUFDN0I7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQWdCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixNQUFNLElBQUksYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDckQ7UUFFRCxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE9BQU87WUFDVixJQUFJO1NBQ0wsQ0FBQztRQUVGLE1BQU0sSUFBQSxxQkFBYyxFQUFDLFVBQVUsRUFBRSxHQUFHLFVBQVUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFDLE9BQU8sRUFBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQWxCVyxRQUFBLFVBQVUsY0FrQnJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzYXZlWWFtbEZpbGVBc30gZnJvbSAnLi4vdXRpbC95YW1sJztcblxuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uL3V0aWwvZXJyb3JzJztcblxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi90eXBlcy9tYW5pZmVzdCc7XG5cbmNvbnN0IHtDbGlJbnB1dEVycm9yfSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IEV4cG9ydFlhbWwgPSAoKSA9PiB7XG4gIC8qKlxuICAgKiBTYXZlcyBvdXRwdXQgZmlsZSBpbiBZQU1MIGZvcm1hdC5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAodHJlZTogYW55LCBjb250ZXh0OiBDb250ZXh0LCBvdXRwdXRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW91dHB1dFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBDbGlJbnB1dEVycm9yKCdPdXRwdXQgcGF0aCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRGaWxlID0ge1xuICAgICAgLi4uY29udGV4dCxcbiAgICAgIHRyZWUsXG4gICAgfTtcblxuICAgIGF3YWl0IHNhdmVZYW1sRmlsZUFzKG91dHB1dEZpbGUsIGAke291dHB1dFBhdGh9LnlhbWxgKTtcbiAgfTtcblxuICByZXR1cm4ge2V4ZWN1dGV9O1xufTtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { PluginParams } from '../types/interface';
2
+ import { GroupByConfig } from '../types/group-by';
3
+ /**
4
+ * Plugin for inputs grouping.
5
+ */
6
+ export declare const GroupBy: () => {
7
+ metadata: {
8
+ kind: string;
9
+ };
10
+ execute: (inputs: PluginParams[], config: GroupByConfig) => any;
11
+ };
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GroupBy = void 0;
4
+ const errors_1 = require("../util/errors");
5
+ const config_1 = require("../config");
6
+ const { InvalidGrouping } = errors_1.ERRORS;
7
+ const { INVALID_GROUP_BY } = config_1.STRINGS;
8
+ /**
9
+ * Plugin for inputs grouping.
10
+ */
11
+ const GroupBy = () => {
12
+ const metadata = {
13
+ kind: 'groupby',
14
+ };
15
+ /**
16
+ * Creates structure to insert inputs by groups.
17
+ */
18
+ const appendGroup = (value, object, groups) => {
19
+ if (groups.length > 0) {
20
+ const group = groups.shift();
21
+ object.children = object.children ?? {};
22
+ object.children[group] = object.children[group] ?? {};
23
+ if (groups.length === 0) {
24
+ if (object.children[group].inputs &&
25
+ object.children[group].inputs.length > 0) {
26
+ object.children[group].inputs.push(value);
27
+ }
28
+ else {
29
+ object.children[group].inputs = [value];
30
+ }
31
+ }
32
+ appendGroup(value, object.children[group], groups);
33
+ }
34
+ return object;
35
+ };
36
+ /**
37
+ * Interates over inputs, grabs config-group types values for each one.
38
+ * Based on grouping types, initializes the structure grouped structure.
39
+ */
40
+ const execute = (inputs, config) => inputs.reduce((acc, input) => {
41
+ const groups = config.group.map(groupType => {
42
+ if (!input[groupType]) {
43
+ throw new InvalidGrouping(INVALID_GROUP_BY(groupType));
44
+ }
45
+ return input[groupType];
46
+ });
47
+ acc = {
48
+ ...acc,
49
+ ...appendGroup(input, acc, groups),
50
+ };
51
+ return acc;
52
+ }, {}).children;
53
+ return { metadata, execute };
54
+ };
55
+ exports.GroupBy = GroupBy;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL2dyb3VwLWJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFzQztBQUV0QyxzQ0FBa0M7QUFLbEMsTUFBTSxFQUFDLGVBQWUsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUVqQyxNQUFNLEVBQUMsZ0JBQWdCLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRW5DOztHQUVHO0FBQ0ksTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO0lBQzFCLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsS0FBbUIsRUFDbkIsTUFBVyxFQUNYLE1BQWdCLEVBQ1gsRUFBRTtRQUNQLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBWSxDQUFDO1lBRXZDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUV0RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixJQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtvQkFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDeEM7b0JBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMzQztxQkFBTTtvQkFDTCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN6QzthQUNGO1lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFFLE1BQXFCLEVBQUUsRUFBRSxDQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUN4RDtZQUVELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsR0FBRyxHQUFHO1lBQ0osR0FBRyxHQUFHO1lBQ04sR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7U0FDbkMsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUV6QixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQztBQTNEVyxRQUFBLE9BQU8sV0EyRGxCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uL3V0aWwvZXJyb3JzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbXBvcnQge1BsdWdpblBhcmFtc30gZnJvbSAnLi4vdHlwZXMvaW50ZXJmYWNlJztcbmltcG9ydCB7R3JvdXBCeUNvbmZpZ30gZnJvbSAnLi4vdHlwZXMvZ3JvdXAtYnknO1xuXG5jb25zdCB7SW52YWxpZEdyb3VwaW5nfSA9IEVSUk9SUztcblxuY29uc3Qge0lOVkFMSURfR1JPVVBfQll9ID0gU1RSSU5HUztcblxuLyoqXG4gKiBQbHVnaW4gZm9yIGlucHV0cyBncm91cGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdyb3VwQnkgPSAoKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdncm91cGJ5JyxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBzdHJ1Y3R1cmUgdG8gaW5zZXJ0IGlucHV0cyBieSBncm91cHMuXG4gICAqL1xuICBjb25zdCBhcHBlbmRHcm91cCA9IChcbiAgICB2YWx1ZTogUGx1Z2luUGFyYW1zLFxuICAgIG9iamVjdDogYW55LFxuICAgIGdyb3Vwczogc3RyaW5nW11cbiAgKTogYW55ID0+IHtcbiAgICBpZiAoZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXG4gICAgICBvYmplY3QuY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW4gPz8ge307XG4gICAgICBvYmplY3QuY2hpbGRyZW5bZ3JvdXBdID0gb2JqZWN0LmNoaWxkcmVuW2dyb3VwXSA/PyB7fTtcblxuICAgICAgaWYgKGdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9iamVjdC5jaGlsZHJlbltncm91cF0uaW5wdXRzICYmXG4gICAgICAgICAgb2JqZWN0LmNoaWxkcmVuW2dyb3VwXS5pbnB1dHMubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBvYmplY3QuY2hpbGRyZW5bZ3JvdXBdLmlucHV0cy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmplY3QuY2hpbGRyZW5bZ3JvdXBdLmlucHV0cyA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXBwZW5kR3JvdXAodmFsdWUsIG9iamVjdC5jaGlsZHJlbltncm91cF0sIGdyb3Vwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcblxuICAvKipcbiAgICogSW50ZXJhdGVzIG92ZXIgaW5wdXRzLCBncmFicyBjb25maWctZ3JvdXAgdHlwZXMgdmFsdWVzIGZvciBlYWNoIG9uZS5cbiAgICogQmFzZWQgb24gZ3JvdXBpbmcgdHlwZXMsIGluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmUgZ3JvdXBlZCBzdHJ1Y3R1cmUuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10sIGNvbmZpZzogR3JvdXBCeUNvbmZpZykgPT5cbiAgICBpbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBncm91cHMgPSBjb25maWcuZ3JvdXAubWFwKGdyb3VwVHlwZSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRbZ3JvdXBUeXBlXSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkR3JvdXBpbmcoSU5WQUxJRF9HUk9VUF9CWShncm91cFR5cGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnB1dFtncm91cFR5cGVdO1xuICAgICAgfSk7XG5cbiAgICAgIGFjYyA9IHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICAuLi5hcHBlbmRHcm91cChpbnB1dCwgYWNjLCBncm91cHMpLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBhbnkpLmNoaWxkcmVuO1xuXG4gIHJldHVybiB7bWV0YWRhdGEsIGV4ZWN1dGV9O1xufTtcbiJdfQ==
@@ -1 +1,2 @@
1
- export { TimeSyncModel } from './time-sync';
1
+ export { GroupBy } from './group-by';
2
+ export { TimeSync } from './time-sync';
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TimeSyncModel = void 0;
3
+ exports.TimeSync = exports.GroupBy = void 0;
4
+ var group_by_1 = require("./group-by");
5
+ Object.defineProperty(exports, "GroupBy", { enumerable: true, get: function () { return group_by_1.GroupBy; } });
4
6
  var time_sync_1 = require("./time-sync");
5
- Object.defineProperty(exports, "TimeSyncModel", { enumerable: true, get: function () { return time_sync_1.TimeSyncModel; } });
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUEwQztBQUFsQywwR0FBQSxhQUFhLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1RpbWVTeW5jTW9kZWx9IGZyb20gJy4vdGltZS1zeW5jJztcbiJdfQ==
7
+ Object.defineProperty(exports, "TimeSync", { enumerable: true, get: function () { return time_sync_1.TimeSync; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUFtQztBQUEzQixtR0FBQSxPQUFPLE9BQUE7QUFDZix5Q0FBcUM7QUFBN0IscUdBQUEsUUFBUSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtHcm91cEJ5fSBmcm9tICcuL2dyb3VwLWJ5JztcbmV4cG9ydCB7VGltZVN5bmN9IGZyb20gJy4vdGltZS1zeW5jJztcbiJdfQ==
@@ -1,58 +1,3 @@
1
- import { ModelParams, ModelPluginInterface } from '../types/model-interface';
2
1
  import { TimeNormalizerConfig } from '../types/time-sync';
3
- export declare class TimeSyncModel implements ModelPluginInterface {
4
- private startTime;
5
- private endTime;
6
- private interval;
7
- private allowPadding;
8
- /**
9
- * Setups basic configuration.
10
- */
11
- configure(params: TimeNormalizerConfig): Promise<ModelPluginInterface>;
12
- /**
13
- * Validates `startTime`, `endTime` and `interval` params.
14
- */
15
- private validateParams;
16
- /**
17
- * Calculates minimal factor.
18
- */
19
- private convertPerInterval;
20
- /**
21
- * Normalize time per given second.
22
- */
23
- private normalizeTimePerSecond;
24
- /**
25
- * Barkes down input per minimal time unit.
26
- */
27
- private breakDownInput;
28
- /**
29
- * Populates object to fill the gaps in observational timeline using zeroish values.
30
- */
31
- private fillWithZeroishInput;
32
- /**
33
- * Checks if `error on padding` is enabled and padding is needed. If so, then throws error.
34
- */
35
- private validatePadding;
36
- /**
37
- * Checks if padding is needed either at start of the timeline or the end and returns status.
38
- */
39
- private checkForPadding;
40
- /**
41
- * Iterates over given inputs frame, meanwhile checking if aggregation method is `sum`, then calculates it.
42
- * For methods is `avg` and `none` calculating average of the frame.
43
- */
44
- private resampleInputFrame;
45
- /**
46
- * Takes each array frame with interval length, then aggregating them together as from units.yaml file.
47
- */
48
- private resampleInputs;
49
- /**
50
- * Pads zeroish inputs from the beginning or at the end of the inputs if needed.
51
- */
52
- private padInputs;
53
- private trimInputsByGlobalTimeline;
54
- /**
55
- * Normalizes provided time window according to time configuration.
56
- */
57
- execute(inputs: ModelParams[]): Promise<ModelParams[]>;
58
- }
2
+ import { PluginInterface } from '../types/interface';
3
+ export declare const TimeSync: (globalConfig: TimeNormalizerConfig) => PluginInterface;