@grnsft/if 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) 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 +81 -98
  5. package/README.md +16 -12
  6. package/build/config/config.d.ts +4 -5
  7. package/build/config/config.js +16 -12
  8. package/build/config/index.d.ts +1 -0
  9. package/build/config/index.js +4 -2
  10. package/build/config/params.d.ts +2 -0
  11. package/build/config/params.js +146 -0
  12. package/build/config/strings.d.ts +14 -8
  13. package/build/config/strings.js +18 -12
  14. package/build/index.js +18 -38
  15. package/build/lib/aggregate.d.ts +6 -0
  16. package/build/lib/aggregate.js +72 -0
  17. package/build/lib/compute.d.ts +5 -0
  18. package/build/lib/compute.js +84 -0
  19. package/build/lib/exhaust.d.ts +6 -0
  20. package/build/lib/exhaust.js +47 -0
  21. package/build/lib/initialize.d.ts +6 -0
  22. package/build/lib/initialize.js +98 -0
  23. package/build/lib/load.d.ts +6 -0
  24. package/build/lib/load.js +24 -0
  25. package/build/lib/parameterize.d.ts +5 -0
  26. package/build/lib/parameterize.js +49 -0
  27. package/build/models/export-csv.d.ts +2 -0
  28. package/build/models/export-csv.js +129 -0
  29. package/build/models/export-log.d.ts +4 -0
  30. package/build/models/export-log.js +18 -0
  31. package/build/models/export-yaml.d.ts +4 -0
  32. package/build/models/export-yaml.js +24 -0
  33. package/build/models/group-by.d.ts +11 -0
  34. package/build/models/group-by.js +56 -0
  35. package/build/models/index.d.ts +2 -1
  36. package/build/models/index.js +5 -3
  37. package/build/models/time-sync.d.ts +2 -54
  38. package/build/models/time-sync.js +216 -147
  39. package/build/types/aggregation.d.ts +3 -0
  40. package/build/types/aggregation.js +5 -0
  41. package/build/types/compute.d.ts +25 -0
  42. package/build/types/compute.js +3 -0
  43. package/build/types/exhaust-plugin-interface.d.ts +7 -0
  44. package/build/types/exhaust-plugin-interface.js +3 -0
  45. package/build/types/group-by.d.ts +3 -0
  46. package/build/types/group-by.js +3 -0
  47. package/build/types/initialize.d.ts +4 -0
  48. package/build/types/initialize.js +3 -0
  49. package/build/types/interface.d.ts +8 -0
  50. package/build/types/interface.js +3 -0
  51. package/build/types/load.d.ts +7 -0
  52. package/build/types/load.js +3 -0
  53. package/build/types/manifest.d.ts +40 -0
  54. package/build/types/manifest.js +3 -0
  55. package/build/types/parameters.d.ts +15 -0
  56. package/build/types/parameters.js +5 -0
  57. package/build/types/process-args.d.ts +4 -5
  58. package/build/types/process-args.js +1 -1
  59. package/build/types/time-sync.d.ts +10 -2
  60. package/build/types/time-sync.js +1 -1
  61. package/build/util/aggregation-helper.d.ts +6 -0
  62. package/build/util/aggregation-helper.js +56 -0
  63. package/build/util/args.d.ts +7 -3
  64. package/build/util/args.js +46 -18
  65. package/build/util/errors.d.ts +1 -1
  66. package/build/util/errors.js +8 -4
  67. package/build/util/helpers.d.ts +4 -0
  68. package/build/util/helpers.js +23 -4
  69. package/build/util/json.d.ts +4 -0
  70. package/build/util/json.js +16 -0
  71. package/build/util/logger.d.ts +5 -0
  72. package/build/util/logger.js +40 -0
  73. package/build/util/validations.d.ts +30 -21
  74. package/build/util/validations.js +54 -55
  75. package/build/util/yaml.js +27 -4
  76. package/examples/manifests/azure-importer.yml +24 -0
  77. package/examples/manifests/basic-demo.yml +75 -0
  78. package/examples/manifests/basic.yml +27 -0
  79. package/examples/manifests/boavizta-pipeline.yml +85 -0
  80. package/examples/{impls/case-studies → manifests}/boavizta.yml +14 -14
  81. package/examples/{impls/test → manifests}/ccf.yml +9 -10
  82. package/examples/manifests/cim.yml +20 -0
  83. package/examples/manifests/cloud-metadata.yml +41 -0
  84. package/examples/manifests/co2js.yml +30 -0
  85. package/examples/manifests/coefficient.yml +23 -0
  86. package/examples/manifests/csv-export.yml +34 -0
  87. package/examples/manifests/e-mem.yml +21 -0
  88. package/examples/{impls/test → manifests}/e-net.yml +9 -8
  89. package/examples/manifests/generics.yml +71 -0
  90. package/examples/manifests/group-by.yml +48 -0
  91. package/examples/manifests/mock-observation.yml +33 -0
  92. package/examples/manifests/multiply.yml +23 -0
  93. package/examples/manifests/nesting-demo.yml +89 -0
  94. package/examples/manifests/nesting.yml +215 -0
  95. package/examples/manifests/pipeline-demo-1.yml +85 -0
  96. package/examples/manifests/pipeline-demo-2.yml +149 -0
  97. package/examples/manifests/pipeline-demo.yml +128 -0
  98. package/examples/manifests/pipeline-teads-sci.yml +82 -0
  99. package/examples/manifests/pipeline-with-generics.yml +147 -0
  100. package/examples/manifests/pipeline-with-mocks.yml +146 -0
  101. package/examples/{impls/test → manifests}/sci-e.yml +6 -8
  102. package/examples/manifests/sci-m.yml +23 -0
  103. package/examples/{impls/test → manifests}/sci-o.yml +10 -10
  104. package/examples/{impls/test → manifests}/sci.yml +10 -9
  105. package/examples/manifests/shell.yml +20 -0
  106. package/examples/manifests/sum.yml +23 -0
  107. package/examples/{impls/test → manifests}/tdp-finder.yml +6 -7
  108. package/examples/manifests/teads-aws.yml +22 -0
  109. package/examples/manifests/teads-curve.yml +20 -0
  110. package/examples/manifests/time-sync.yml +32 -0
  111. package/examples/manifests/watt-time.yml +42 -0
  112. package/jest.config.js +6 -1
  113. package/package.json +13 -8
  114. package/src/__tests__/integration/templates/integration.yaml +16 -0
  115. package/src/models/README.md +9 -7
  116. package/tsconfig.test.json +1 -1
  117. package/Makefile +0 -16
  118. package/build/config/units.yaml +0 -112
  119. package/build/lib/models-universe.d.ts +0 -36
  120. package/build/lib/models-universe.js +0 -113
  121. package/build/lib/observatory.d.ts +0 -20
  122. package/build/lib/observatory.js +0 -31
  123. package/build/lib/planet-aggregator.d.ts +0 -6
  124. package/build/lib/planet-aggregator.js +0 -35
  125. package/build/lib/supercomputer.d.ts +0 -37
  126. package/build/lib/supercomputer.js +0 -148
  127. package/build/types/helpers.d.ts +0 -1
  128. package/build/types/helpers.js +0 -3
  129. package/build/types/impl.d.ts +0 -45
  130. package/build/types/impl.js +0 -5
  131. package/build/types/model-interface.d.ts +0 -14
  132. package/build/types/model-interface.js +0 -3
  133. package/build/types/models-universe.d.ts +0 -23
  134. package/build/types/models-universe.js +0 -3
  135. package/build/types/planet-aggregator.d.ts +0 -6
  136. package/build/types/planet-aggregator.js +0 -3
  137. package/build/types/supercomputer.d.ts +0 -4
  138. package/build/types/supercomputer.js +0 -3
  139. package/build/types/units-dealer.d.ts +0 -3
  140. package/build/types/units-dealer.js +0 -3
  141. package/build/types/units.d.ts +0 -11
  142. package/build/types/units.js +0 -37
  143. package/build/util/units-dealer.d.ts +0 -10
  144. package/build/util/units-dealer.js +0 -32
  145. package/coverage/clover.xml +0 -379
  146. package/coverage/coverage-final.json +0 -14
  147. package/coverage/lcov-report/base.css +0 -224
  148. package/coverage/lcov-report/block-navigation.js +0 -87
  149. package/coverage/lcov-report/config/config.ts.html +0 -250
  150. package/coverage/lcov-report/config/index.html +0 -146
  151. package/coverage/lcov-report/config/index.ts.html +0 -91
  152. package/coverage/lcov-report/config/strings.ts.html +0 -208
  153. package/coverage/lcov-report/favicon.png +0 -0
  154. package/coverage/lcov-report/index.html +0 -161
  155. package/coverage/lcov-report/lib/index.html +0 -161
  156. package/coverage/lcov-report/lib/models-universe.ts.html +0 -517
  157. package/coverage/lcov-report/lib/observatory.ts.html +0 -187
  158. package/coverage/lcov-report/lib/planet-aggregator.ts.html +0 -274
  159. package/coverage/lcov-report/lib/supercomputer.ts.html +0 -472
  160. package/coverage/lcov-report/models/index.html +0 -131
  161. package/coverage/lcov-report/models/index.ts.html +0 -88
  162. package/coverage/lcov-report/models/planet-aggregator.ts.html +0 -271
  163. package/coverage/lcov-report/models/time-sync.ts.html +0 -1165
  164. package/coverage/lcov-report/prettify.css +0 -1
  165. package/coverage/lcov-report/prettify.js +0 -2
  166. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  167. package/coverage/lcov-report/sorter.js +0 -196
  168. package/coverage/lcov-report/util/args.ts.html +0 -289
  169. package/coverage/lcov-report/util/errors.ts.html +0 -166
  170. package/coverage/lcov-report/util/index.html +0 -161
  171. package/coverage/lcov-report/util/units-dealer.ts.html +0 -199
  172. package/coverage/lcov-report/util/yaml.ts.html +0 -193
  173. package/coverage/lcov.info +0 -637
  174. package/examples/impls/case-studies/accenture.yml +0 -155
  175. package/examples/impls/case-studies/aggregation.yml +0 -97
  176. package/examples/impls/case-studies/aveva.yaml +0 -48
  177. package/examples/impls/case-studies/azure-yassine.yaml +0 -67
  178. package/examples/impls/case-studies/dow_msft.yml +0 -173
  179. package/examples/impls/case-studies/farm-insights.yaml +0 -35
  180. package/examples/impls/case-studies/gsf-website.yaml +0 -93
  181. package/examples/impls/case-studies/msft-eshoppen.yaml +0 -162
  182. package/examples/impls/case-studies/msft-green-ai.yaml +0 -58
  183. package/examples/impls/case-studies/ntt-data-on-premise.yaml +0 -201
  184. package/examples/impls/test/aggregation-test.yml +0 -109
  185. package/examples/impls/test/azure.yml +0 -26
  186. package/examples/impls/test/if-demo.yml +0 -61
  187. package/examples/impls/test/large-impl.yml +0 -257303
  188. package/examples/impls/test/metadata.yml +0 -21
  189. package/examples/impls/test/nesting.yml +0 -113
  190. package/examples/impls/test/sci-m.yml +0 -24
  191. package/examples/impls/test/shell.yml +0 -19
  192. package/examples/impls/test/time-sync.yml +0 -75
  193. package/examples/ompls/aggregation-test.yml +0 -340
  194. package/examples/ompls/azure.yml +0 -145
  195. package/examples/ompls/ccf.yml +0 -29
  196. package/examples/ompls/complex-pipeline.yml +0 -105
  197. package/examples/ompls/full-sci.yml +0 -64
  198. package/examples/ompls/if-demo.yml +0 -517
  199. package/examples/ompls/metadata.yml +0 -29
  200. package/examples/ompls/nesting.yml +0 -113
  201. package/examples/ompls/sci-e.yml +0 -23
  202. package/examples/ompls/sci-m.yml +0 -33
  203. package/examples/ompls/sci-o.yml +0 -29
  204. package/examples/ompls/sci.yml +0 -37
  205. package/examples/ompls/shell.yml +0 -23
  206. package/examples/ompls/time-sync.yml +0 -212
  207. package/src/config/units.yaml +0 -112
  208. package/tsconfig.build.tsbuildinfo +0 -1
@@ -1,80 +1,79 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateImpl = void 0;
3
+ exports.validate = exports.validateManifest = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const errors_1 = require("./errors");
6
- const config_1 = require("../config");
7
- const { ImplValidationError } = errors_1.ERRORS;
8
- const { AGGREGATION_METRICS, AGGREGATION_METHODS } = config_1.CONFIG;
9
- const aggregationMethods = AGGREGATION_METHODS.map(method => zod_1.z.literal(method));
10
- const aggregationMetric = AGGREGATION_METRICS.map(metric => zod_1.z.literal(metric));
6
+ const aggregation_1 = require("../types/aggregation");
7
+ const parameters_1 = require("../types/parameters");
8
+ const { ManifestValidationError, InputValidationError } = errors_1.ERRORS;
11
9
  /**
12
- * Zod literal union validator which checks if members are more than 2.
10
+ * Validation schema for manifests.
13
11
  */
14
- function isValidZodLiteralUnion(literals) {
15
- return literals.length >= 2;
16
- }
17
- /**
18
- * Literal union type helper.
19
- */
20
- function constructZodLiteralUnionType(literals) {
21
- if (!isValidZodLiteralUnion(literals)) {
22
- throw new Error('Literals passed do not meet the criteria for constructing a union schema, the minimum length is 2.');
23
- }
24
- return zod_1.z.union(literals);
25
- }
26
- /**
27
- * Validation schema for impl files.
28
- */
29
- const implValidation = zod_1.z.object({
12
+ const manifestValidation = zod_1.z.object({
30
13
  name: zod_1.z.string(),
31
- description: zod_1.z.string().nullable(),
14
+ 'if-version': zod_1.z.string().optional().nullable(),
15
+ description: zod_1.z.string().nullable().default(''),
32
16
  aggregation: zod_1.z
33
17
  .object({
34
- 'aggregation-metrics': zod_1.z.array(constructZodLiteralUnionType(aggregationMetric)),
35
- 'aggregation-method': constructZodLiteralUnionType(aggregationMethods).default('sum'),
18
+ metrics: zod_1.z.array(zod_1.z.string()),
19
+ type: zod_1.z.enum(aggregation_1.AGGREGATION_METHODS),
36
20
  })
37
21
  .optional(),
22
+ params: zod_1.z
23
+ .array(zod_1.z.object({
24
+ name: zod_1.z.string(),
25
+ description: zod_1.z.string(),
26
+ aggregation: zod_1.z.enum(parameters_1.AGGREGATION_TYPES),
27
+ unit: zod_1.z.string(),
28
+ }))
29
+ .optional()
30
+ .nullable(),
38
31
  tags: zod_1.z
39
32
  .object({
40
33
  kind: zod_1.z.string().optional(),
41
34
  complexity: zod_1.z.string().optional(),
42
35
  category: zod_1.z.string().optional(),
43
36
  })
44
- .nullable(),
37
+ .nullable()
38
+ .default({}),
45
39
  initialize: zod_1.z.object({
46
- models: zod_1.z.array(zod_1.z.object({
47
- name: zod_1.z.string(),
48
- kind: zod_1.z.string().optional(),
49
- path: zod_1.z.string().optional(),
50
- model: zod_1.z.string().optional(),
51
- config: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(),
40
+ plugins: zod_1.z.record(zod_1.z.string(), zod_1.z.object({
41
+ path: zod_1.z.string(),
42
+ method: zod_1.z.string(),
43
+ 'global-config': zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(),
52
44
  })),
45
+ outputs: zod_1.z.array(zod_1.z.string()).optional(),
53
46
  }),
54
- graph: zod_1.z
55
- .object({
56
- children: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
57
- })
58
- .required(),
47
+ tree: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
59
48
  });
60
49
  /**
61
- * Validates given `impl` object to match pattern.
50
+ * Validates given `manifest` object to match pattern.
51
+ */
52
+ const validateManifest = (manifest) => {
53
+ return (0, exports.validate)(manifestValidation, manifest, ManifestValidationError);
54
+ };
55
+ exports.validateManifest = validateManifest;
56
+ /**
57
+ * Validates given `object` with given `schema`.
62
58
  */
63
- const validateImpl = (impl) => {
64
- const validatedImpl = implValidation.safeParse(impl);
65
- if (!validatedImpl.success) {
66
- const prettifyErrorMessage = (issues) => {
67
- const issuesArray = JSON.parse(issues);
68
- return issuesArray.map((issue) => {
69
- const { code, path, message } = issue;
70
- const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
71
- const fullPath = flattenPath.join('.');
72
- return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
73
- });
74
- };
75
- throw new ImplValidationError(prettifyErrorMessage(validatedImpl.error.message));
59
+ const validate = (schema, object, errorConstructor = InputValidationError) => {
60
+ const validationResult = schema.safeParse(object);
61
+ if (!validationResult.success) {
62
+ throw new errorConstructor(prettifyErrorMessage(validationResult.error.message));
76
63
  }
77
- return validatedImpl.data;
64
+ return validationResult.data;
65
+ };
66
+ exports.validate = validate;
67
+ const prettifyErrorMessage = (issues) => {
68
+ const issuesArray = JSON.parse(issues);
69
+ return issuesArray.map((issue) => {
70
+ const { code, path, message } = issue;
71
+ const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
72
+ const fullPath = flattenPath.join('.');
73
+ if (code === 'custom') {
74
+ return `${message.toLowerCase()}. Error code: ${code}.`;
75
+ }
76
+ return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
77
+ });
78
78
  };
79
- exports.validateImpl = validateImpl;
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBZ0M7QUFFaEMscUNBQWdDO0FBRWhDLHNDQUFpQztBQUlqQyxNQUFNLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFckMsTUFBTSxFQUFDLG1CQUFtQixFQUFFLG1CQUFtQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRTFELE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRS9FOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FDN0IsUUFBYTtJQUViLE9BQU8sUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FDbkMsUUFBYTtJQUViLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLG9HQUFvRyxDQUNyRyxDQUFDO0tBQ0g7SUFFRCxPQUFPLE9BQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxXQUFXLEVBQUUs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bXBvcnQge1pvZElzc3VlLCB6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge0NPTkZJR30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtJbXBsfSBmcm9tICcuLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0ltcGxWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCB7QUdHUkVHQVRJT05fTUVUUklDUywgQUdHUkVHQVRJT05fTUVUSE9EU30gPSBDT05GSUc7XG5cbmNvbnN0IGFnZ3JlZ2F0aW9uTWV0aG9kcyA9IEFHR1JFR0FUSU9OX01FVEhPRFMubWFwKG1ldGhvZCA9PiB6LmxpdGVyYWwobWV0aG9kKSk7XG5jb25zdCBhZ2dyZWdhdGlvbk1ldHJpYyA9IEFHR1JFR0FUSU9OX01FVFJJQ1MubWFwKG1ldHJpYyA9PiB6LmxpdGVyYWwobWV0cmljKSk7XG5cbi8qKlxuICogWm9kIGxpdGVyYWwgdW5pb24gdmFsaWRhdG9yIHdoaWNoIGNoZWNrcyBpZiBtZW1iZXJzIGFyZSBtb3JlIHRoYW4gMi5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFpvZExpdGVyYWxVbmlvbjxUIGV4dGVuZHMgei5ab2RMaXRlcmFsPHVua25vd24+PihcbiAgbGl0ZXJhbHM6IFRbXVxuKTogbGl0ZXJhbHMgaXMgW1QsIFQsIC4uLlRbXV0ge1xuICByZXR1cm4gbGl0ZXJhbHMubGVuZ3RoID49IDI7XG59XG5cbi8qKlxuICogTGl0ZXJhbCB1bmlvbiB0eXBlIGhlbHBlci5cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0Wm9kTGl0ZXJhbFVuaW9uVHlwZTxUIGV4dGVuZHMgei5ab2RMaXRlcmFsPHVua25vd24+PihcbiAgbGl0ZXJhbHM6IFRbXVxuKSB7XG4gIGlmICghaXNWYWxpZFpvZExpdGVyYWxVbmlvbihsaXRlcmFscykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnTGl0ZXJhbHMgcGFzc2VkIGRvIG5vdCBtZWV0IHRoZSBjcml0ZXJpYSBmb3IgY29uc3RydWN0aW5nIGEgdW5pb24gc2NoZW1hLCB0aGUgbWluaW11bSBsZW5ndGggaXMgMi4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB6LnVuaW9uKGxpdGVyYWxzKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIHNjaGVtYSBmb3IgaW1wbCBmaWxlcy5cbiAqL1xuY29uc3QgaW1wbFZhbGlkYXRpb24gPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGFnZ3JlZ2F0aW9uOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICAnYWdncmVnYXRpb24tbWV0cmljcyc6IHouYXJyYXkoXG4gICAgICAgIGNvbnN0cnVjdFpvZExpdGVyYWxVbmlvblR5cGUoYWdncmVnYXRpb25NZXRyaWMpXG4gICAgICApLFxuICAgICAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6XG4gICAgICAgIGNvbnN0cnVjdFpvZExpdGVyYWxVbmlvblR5cGUoYWdncmVnYXRpb25NZXRob2RzKS5kZWZhdWx0KCdzdW0nKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBtb2RlbHM6IHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGtpbmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgcGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBjb25maWc6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICksXG4gIH0pLFxuICBncmFwaDogelxuICAgIC5vYmplY3Qoe1xuICAgICAgY2hpbGRyZW46IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIH0pXG4gICAgLnJlcXVpcmVkKCksXG59KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYGltcGxgIG9iamVjdCB0byBtYXRjaCBwYXR0ZXJuLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVJbXBsID0gKGltcGw6IEltcGwpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkSW1wbCA9IGltcGxWYWxpZGF0aW9uLnNhZmVQYXJzZShpbXBsKTtcblxuICBpZiAoIXZhbGlkYXRlZEltcGwuc3VjY2Vzcykge1xuICAgIGNvbnN0IHByZXR0aWZ5RXJyb3JNZXNzYWdlID0gKGlzc3Vlczogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICAgICAgcmV0dXJuIGlzc3Vlc0FycmF5Lm1hcCgoaXNzdWU6IFpvZElzc3VlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtjb2RlLCBwYXRoLCBtZXNzYWdlfSA9IGlzc3VlO1xuICAgICAgICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICAgICAgICB0eXBlb2YgcGFydCA9PT0gJ251bWJlcicgPyBgWyR7cGFydH1dYCA6IHBhcnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG5cbiAgICAgICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRocm93IG5ldyBJbXBsVmFsaWRhdGlvbkVycm9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGVkSW1wbC5lcnJvci5tZXNzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkSW1wbC5kYXRhO1xufTtcbiJdfQ==
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFHdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlDLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLFdBQVcsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLDhCQUFpQixDQUFDO1FBQ3RDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0tBQ2pCLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtTQUNWLFFBQVEsRUFBRTtJQUNiLElBQUksRUFB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LENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5pbXBvcnQge01hbmlmZXN0fSBmcm9tICcuLi90eXBlcy9tYW5pZmVzdCc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmNvbnN0IG1hbmlmZXN0VmFsaWRhdGlvbiA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgJ2lmLXZlcnNpb24nOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KCcnKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKClcbiAgICAuZGVmYXVsdCh7fSksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBNYW5pZmVzdCkgPT4ge1xuICByZXR1cm4gdmFsaWRhdGUobWFuaWZlc3RWYWxpZGF0aW9uLCBtYW5pZmVzdCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGVycm9yQ29uc3RydWN0b3I6IEVycm9yQ29uc3RydWN0b3IgPSBJbnB1dFZhbGlkYXRpb25FcnJvclxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKG9iamVjdCk7XG5cbiAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JDb25zdHJ1Y3RvcihcbiAgICAgIHByZXR0aWZ5RXJyb3JNZXNzYWdlKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHByZXR0aWZ5RXJyb3JNZXNzYWdlID0gKGlzc3Vlczogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc0FycmF5ID0gSlNPTi5wYXJzZShpc3N1ZXMpO1xuXG4gIHJldHVybiBpc3N1ZXNBcnJheS5tYXAoKGlzc3VlOiBab2RJc3N1ZSkgPT4ge1xuICAgIGNvbnN0IHtjb2RlLCBwYXRoLCBtZXNzYWdlfSA9IGlzc3VlO1xuICAgIGNvbnN0IGZsYXR0ZW5QYXRoID0gcGF0aC5tYXAocGFydCA9PlxuICAgICAgdHlwZW9mIHBhcnQgPT09ICdudW1iZXInID8gYFske3BhcnR9XWAgOiBwYXJ0XG4gICAgKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGZsYXR0ZW5QYXRoLmpvaW4oJy4nKTtcblxuICAgIGlmIChjb2RlID09PSAnY3VzdG9tJykge1xuICAgICAgcmV0dXJuIGAke21lc3NhZ2UudG9Mb3dlckNhc2UoKX0uIEVycm9yIGNvZGU6ICR7Y29kZX0uYDtcbiAgICB9XG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG4iXX0=
@@ -1,9 +1,32 @@
1
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
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.checkIfFileIsYaml = exports.saveYamlFileAs = exports.openYamlFileAsObject = void 0;
4
- const fs = require("fs/promises");
5
- const path = require("path");
6
- const YAML = require("js-yaml");
27
+ const fs = __importStar(require("fs/promises"));
28
+ const path = __importStar(require("path"));
29
+ const YAML = __importStar(require("js-yaml"));
7
30
  /**
8
31
  * Reads and parses `yaml` file to object.
9
32
  */
@@ -33,4 +56,4 @@ const checkIfFileIsYaml = (fileName) => {
33
56
  return yamlFileTypes.includes(extension);
34
57
  };
35
58
  exports.checkIfFileIsYaml = checkIfFileIsYaml;
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3lhbWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUU3QixnQ0FBZ0M7QUFFaEM7O0dBRUc7QUFDSSxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBSyxRQUFnQixFQUFjLEVBQUU7SUFDNUUsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFNLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBSlcsUUFBQSxvQkFBb0Isd0JBSS9CO0FBRUY7O0dBRUc7QUFDSSxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsTUFBVyxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRXJELE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBTlcsUUFBQSxjQUFjLGtCQU16QjtBQUVGOztHQUVHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUNwRCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUzQyxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBUFcsUUFBQSxpQkFBaUIscUJBTzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0ICogYXMgWUFNTCBmcm9tICdqcy15YW1sJztcblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGB5YW1sYCBmaWxlIHRvIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5ZYW1sRmlsZUFzT2JqZWN0ID0gYXN5bmMgPFQ+KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgeWFtbEZpbGVCdWZmZXIgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICByZXR1cm4gWUFNTC5sb2FkKHlhbWxGaWxlQnVmZmVyKSBhcyBUO1xufTtcblxuLyoqXG4gKiBTYXZlcyBnaXZlbiBgeWFtbGAgZHVtcCBhcyBhIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzYXZlWWFtbEZpbGVBcyA9IGFzeW5jIChvYmplY3Q6IGFueSwgcGF0aFRvRmlsZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRpclBhdGggPSBwYXRoLmRpcm5hbWUocGF0aFRvRmlsZSk7XG4gIGF3YWl0IGZzLm1rZGlyKGRpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgY29uc3QgeWFtbFN0cmluZyA9IFlBTUwuZHVtcChvYmplY3QsIHtub1JlZnM6IHRydWV9KTtcblxuICByZXR1cm4gZnMud3JpdGVGaWxlKHBhdGhUb0ZpbGUsIHlhbWxTdHJpbmcpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgZ2l2ZW4gYGZpbGVOYW1lYCBpcyB5YW1sLlxuICovXG5leHBvcnQgY29uc3QgY2hlY2tJZkZpbGVJc1lhbWwgPSAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCB5YW1sRmlsZVR5cGVzID0gWyd5YW1sJywgJ3ltbCddO1xuICBjb25zdCBzcGxpdHRlZFBhcnRzID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3BsaXR0ZWRQYXJ0cy5sZW5ndGggLSAxO1xuICBjb25zdCBleHRlbnNpb24gPSBzcGxpdHRlZFBhcnRzW2xhc3RJbmRleF07XG5cbiAgcmV0dXJuIHlhbWxGaWxlVHlwZXMuaW5jbHVkZXMoZXh0ZW5zaW9uKTtcbn07XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3lhbWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsMkNBQTZCO0FBRTdCLDhDQUFnQztBQUVoQzs7R0FFRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUFLLFFBQWdCLEVBQWMsRUFBRTtJQUM1RSxNQUFNLGNBQWMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQU0sQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFKVyxRQUFBLG9CQUFvQix3QkFJL0I7QUFFRjs7R0FFRztBQUNJLE1BQU0sY0FBYyxHQUFHLEtBQUssRUFBRSxNQUFXLEVBQUUsVUFBa0IsRUFBRSxFQUFFO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFckQsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUM7QUFOVyxRQUFBLGNBQWMsa0JBTXpCO0FBRUY7O0dBRUc7QUFDSSxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQ3BELE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDM0MsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFQVyxRQUFBLGlCQUFpQixxQkFPNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgKiBhcyBZQU1MIGZyb20gJ2pzLXlhbWwnO1xuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgYHlhbWxgIGZpbGUgdG8gb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3Qgb3BlbllhbWxGaWxlQXNPYmplY3QgPSBhc3luYyA8VD4oZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCB5YW1sRmlsZUJ1ZmZlciA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmOCcpO1xuXG4gIHJldHVybiBZQU1MLmxvYWQoeWFtbEZpbGVCdWZmZXIpIGFzIFQ7XG59O1xuXG4vKipcbiAqIFNhdmVzIGdpdmVuIGB5YW1sYCBkdW1wIGFzIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNhdmVZYW1sRmlsZUFzID0gYXN5bmMgKG9iamVjdDogYW55LCBwYXRoVG9GaWxlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZGlyUGF0aCA9IHBhdGguZGlybmFtZShwYXRoVG9GaWxlKTtcbiAgYXdhaXQgZnMubWtkaXIoZGlyUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICBjb25zdCB5YW1sU3RyaW5nID0gWUFNTC5kdW1wKG9iamVjdCwge25vUmVmczogdHJ1ZX0pO1xuXG4gIHJldHVybiBmcy53cml0ZUZpbGUocGF0aFRvRmlsZSwgeWFtbFN0cmluZyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBnaXZlbiBgZmlsZU5hbWVgIGlzIHlhbWwuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja0lmRmlsZUlzWWFtbCA9IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHlhbWxGaWxlVHlwZXMgPSBbJ3lhbWwnLCAneW1sJ107XG4gIGNvbnN0IHNwbGl0dGVkUGFydHMgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xuICBjb25zdCBsYXN0SW5kZXggPSBzcGxpdHRlZFBhcnRzLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IHNwbGl0dGVkUGFydHNbbGFzdEluZGV4XTtcblxuICByZXR1cm4geWFtbEZpbGVUeXBlcy5pbmNsdWRlcyhleHRlbnNpb24pO1xufTtcbiJdfQ==
@@ -0,0 +1,24 @@
1
+ name: azure-importer
2
+ description: example impl invoking Azure Importer model
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ azure-importer:
7
+ path: "@grnsft/if-unofficial-plugins"
8
+ method: AzureImporter
9
+ kind: plugin
10
+ tree:
11
+ children:
12
+ child:
13
+ pipeline:
14
+ - azure-importer
15
+ config:
16
+ azure-importer:
17
+ azure-observation-window: 5 min # value and unit must be space separated
18
+ azure-observation-aggregation: "average"
19
+ azure-subscription-id: 42a3c589-87ce-4478-8ed6-9adc11b81965
20
+ azure-resource-group: Group1
21
+ azure-vm-name: VM1
22
+ inputs:
23
+ - timestamp: "2023-11-02T10:35:31.820Z"
24
+ duration: 3600
@@ -0,0 +1,75 @@
1
+ name: basic-demo
2
+ description: null
3
+ tags: null
4
+ initialize:
5
+ plugins:
6
+ mock-observations:
7
+ path: "@grnsft/if-plugins"
8
+ method: MockObservations
9
+ global-config:
10
+ timestamp-from: 2024-02-26T00:00
11
+ timestamp-to: 2024-02-26T00:10
12
+ duration: 60
13
+ components:
14
+ - cloud/instance-type: Standard_A1_v2
15
+ - cloud/instance-type: Standard_A2_v2
16
+ generators:
17
+ common:
18
+ cloud/vendor: azure
19
+ cloud/region: uk-west
20
+ geolocation: 37.7749,-122.4194
21
+ randint:
22
+ cpu/utilization:
23
+ min: 1
24
+ max: 99
25
+ teads-curve:
26
+ path: "@grnsft/if-unofficial-plugins"
27
+ method: TeadsCurve
28
+ global-config:
29
+ interpolation: spline
30
+ group-by:
31
+ path: "builtin"
32
+ method: GroupBy
33
+ cloud-metadata:
34
+ method: CloudInstanceMetadata
35
+ path: "@grnsft/if-plugins"
36
+ operational-carbon:
37
+ path: "@grnsft/if-plugins"
38
+ method: Multiply
39
+ global-config:
40
+ input-parameters: ["cpu/energy", "grid/carbon-intensity"]
41
+ output-parameter: "cpu/carbon"
42
+ watttime:
43
+ path: "@grnsft/if-unofficial-plugins"
44
+ method: WattTimeGridEmissions
45
+ global-config:
46
+ # username: ENV_WATT_TIME_USERNAME
47
+ # password: ENV_WATT_TIME_PASSWORD
48
+ username: manushak
49
+ password: "@watt-time17"
50
+ tree:
51
+ children:
52
+ application:
53
+ pipeline:
54
+ - mock-observations
55
+ # - group-by
56
+ - cloud-metadata
57
+ - teads-curve
58
+ - watttime
59
+ - operational-carbon
60
+ defaults:
61
+ grid/carbon-intensity: 250
62
+ geolocation: 37.7749,-122.4194
63
+ # config:
64
+ # group-by:
65
+ # group:
66
+ # - cloud/region
67
+ # - cloud/instance-type
68
+ inputs:
69
+ - timestamp: "2024-02-26 00:00:00"
70
+ duration: 60
71
+ cloud/instance-type: Standard_A1_v2
72
+ cloud/vendor: azure
73
+ cloud/region: uk-west
74
+ geolocation: 37.7749,-122.4194
75
+ cpu/utilization: 15
@@ -0,0 +1,27 @@
1
+ name: basic-demo
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ teads-curve:
7
+ path: '@grnsft/if-unofficial-plugins'
8
+ method: TeadsCurve
9
+ global-config:
10
+ interpolation: spline
11
+ tree:
12
+ children:
13
+ child-0:
14
+ defaults:
15
+ cpu/thermal-design-power: 100
16
+ pipeline:
17
+ - teads-curve
18
+ inputs:
19
+ - timestamp: 2023-07-06T00:00
20
+ duration: 1
21
+ cpu/utilization: 20
22
+ - timestamp: 2023-07-06T00:01
23
+ duration: 1
24
+ cpu/utilization: 80
25
+ - timestamp: 2023-07-06T00:02
26
+ duration: 1
27
+ cpu/utilization: 20
@@ -0,0 +1,85 @@
1
+ name: boavizta-demo
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ boavizta-cpu:
7
+ method: BoaviztaCpuOutput
8
+ path: '@grnsft/if-unofficial-plugins'
9
+ global-config:
10
+ allocation: LINEAR
11
+ verbose: true
12
+ "sum":
13
+ path: "@grnsft/if-plugins"
14
+ method: Sum
15
+ global-config:
16
+ input-parameters:
17
+ - cpu/energy
18
+ - network/energy
19
+ output-parameter: energy
20
+ "sci-m":
21
+ path: "@grnsft/if-plugins"
22
+ method: SciM
23
+ "sci-o":
24
+ path: "@grnsft/if-plugins"
25
+ method: SciO
26
+ "sci":
27
+ path: "@grnsft/if-plugins"
28
+ method: Sci
29
+ global-config:
30
+ functional-unit: ''
31
+ functional-unit-time: '1-day'
32
+ "time-sync":
33
+ method: TimeSync
34
+ path: "builtin"
35
+ global-config:
36
+ start-time: "2023-12-12T00:00:00.000Z"
37
+ end-time: "2023-12-12T00:01:00.000Z"
38
+ interval: 5
39
+ allow-padding: true
40
+ tree:
41
+ children:
42
+ child-1:
43
+ pipeline:
44
+ - boavizta-cpu
45
+ - sum
46
+ - sci-m
47
+ - sci-o
48
+ - time-sync
49
+ - sci
50
+ config:
51
+ defaults:
52
+ cpu/thermal-design-power: 100
53
+ grid/carbon-intensity: 800
54
+ device/emissions-embodied: 1533.120 # gCO2eq
55
+ time-reserved: 3600 # 1hr in seconds
56
+ device/expected-lifespan: 94608000 # 3 years in seconds
57
+ resources-reserved: 1
58
+ resources-total: 8
59
+ cpu/number-cores: 24
60
+ cpu/name: Intel® Core™ i7-1185G7
61
+ inputs:
62
+ - timestamp: "2023-12-12T00:00:00.000Z"
63
+ cloud/instance-type: A1
64
+ region: uk-west
65
+ duration: 1
66
+ cpu/utilization: 50
67
+ network/energy: 0.000001
68
+ - timestamp: "2023-12-12T00:00:01.000Z"
69
+ duration: 5
70
+ cpu/utilization: 20
71
+ cloud/instance-type: A1
72
+ region: uk-west
73
+ network/energy: 0.000001
74
+ - timestamp: "2023-12-12T00:00:06.000Z"
75
+ duration: 7
76
+ cpu/utilization: 15
77
+ cloud/instance-type: A1
78
+ region: uk-west
79
+ network/energy: 0.000001
80
+ - timestamp: "2023-12-12T00:00:13.000Z"
81
+ duration: 30
82
+ cloud/instance-type: A1
83
+ region: uk-west
84
+ cpu/utilization: 15
85
+ network/energy: 0.000001
@@ -1,26 +1,26 @@
1
- name: boavizta-demo
1
+ name: boavizta
2
2
  description: calls boavizta api
3
3
  tags:
4
4
  initialize:
5
- models:
6
- - name: boavizta-cpu
7
- kind: builtin
8
- config:
5
+ plugins:
6
+ "boavizta-cpu":
7
+ method: BoaviztaCpuOutput
8
+ path: "@grnsft/if-unofficial-plugins"
9
+ global-config:
9
10
  allocation: LINEAR
10
11
  verbose: true
11
- graph:
12
+ tree:
12
13
  children:
13
- front-end:
14
- pipeline:
14
+ child:
15
+ pipeline:
15
16
  - boavizta-cpu
16
- config:
17
- boavizta-cpu:
18
- core-units: 24
19
- physical-processor: Intel® Core™ i7-1185G7
17
+ defaults:
18
+ cpu/number-cores: 24
19
+ cpu/name: Intel® Core™ i7-1185G7
20
20
  inputs:
21
21
  - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
22
22
  duration: 3600 # Secs
23
- cpu-util: 18.392
23
+ cpu/utilization: 18.392
24
24
  - timestamp: 2023-08-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
25
25
  duration: 3600 # Secs
26
- cpu-util: 16
26
+ cpu/utilization: 16
@@ -2,20 +2,19 @@ name: ccf-demo
2
2
  description: example impl invoking CCF model
3
3
  tags:
4
4
  initialize:
5
- models:
6
- - name: ccf
7
- model: CloudCarbonFootprint
8
- path: "@grnsft/if-unofficial-models"
9
- graph:
5
+ plugins:
6
+ ccf:
7
+ method: CloudCarbonFootprint
8
+ path: "@grnsft/if-unofficial-plugins"
9
+ tree:
10
10
  children:
11
11
  child:
12
12
  pipeline:
13
13
  - ccf
14
- config:
15
- ccf:
16
- vendor: 'aws'
17
- instance-type: 'm5n.large'
14
+ defaults:
15
+ cloud/vendor: "aws"
16
+ cloud/instance-type: "m5n.large"
18
17
  inputs:
19
18
  - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
20
19
  duration: 1
21
- cpu-util: 10
20
+ cpu/utilization: 10
@@ -0,0 +1,20 @@
1
+ name: cloud-instance-metadata
2
+ description: example impl invoking Cloud Instance Metadata plugin
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ cloud-instance-metadata:
7
+ method: CloudInstanceMetadata
8
+ path: "@grnsft/if-plugins"
9
+ tree:
10
+ children:
11
+ child:
12
+ pipeline:
13
+ - cloud-instance-metadata
14
+ config:
15
+ inputs:
16
+ - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
17
+ cloud/vendor: aws
18
+ cloud/instance-type: m5n.large
19
+ duration: 100
20
+ cpu/utilization: 10
@@ -0,0 +1,41 @@
1
+ name: coud-instanmce-metadata-demo
2
+ description: null
3
+ tags: null
4
+ initialize:
5
+ plugins:
6
+ teads-curve:
7
+ path: '@grnsft/if-unofficial-plugins'
8
+ method: TeadsCurve
9
+ global-config:
10
+ interpolation: spline
11
+ cloud-instance-metadata:
12
+ method: CloudInstanceMetadata
13
+ path: "@grnsft/if-plugins"
14
+ tree:
15
+ children:
16
+ child-0:
17
+ defaults:
18
+ cpu/thermal-design-power: 100
19
+ cloud/vendor: aws
20
+ cloud/instance-type: m5n.large
21
+ pipeline:
22
+ - teads-curve
23
+ - cloud-instance-metadata
24
+ inputs:
25
+ - timestamp: 2023-07-06T00:00
26
+ duration: 10
27
+ cpu/utilization: 80
28
+ - timestamp: 2023-07-06T00:01
29
+ duration: 10
30
+ cpu/utilization: 80
31
+ outputs:
32
+ - timestamp: 2023-07-06T00:00
33
+ duration: 10
34
+ cpu/utilization: 80
35
+ cpu/thermal-design-power: 100
36
+ cpu/energy: 0.00025568089430894314
37
+ - timestamp: 2023-07-06T00:01
38
+ duration: 10
39
+ cpu/utilization: 80
40
+ cpu/thermal-design-power: 100
41
+ cpu/energy: 0.00025568089430894314
@@ -0,0 +1,30 @@
1
+ name: co2js-demo
2
+ description: example impl invoking CO2.JS model
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ co2js:
7
+ method: Co2js
8
+ path: "@grnsft/if-unofficial-plugins"
9
+ global-config:
10
+ options:
11
+ dataReloadRatio: 0.6
12
+ firstVisitPercentage: 0.9
13
+ returnVisitPercentage: 0.1
14
+ gridIntensity:
15
+ device: 560.98
16
+ dataCenter:
17
+ country: "TWN"
18
+ tree:
19
+ children:
20
+ child:
21
+ pipeline:
22
+ - co2js
23
+ config:
24
+ co2js:
25
+ type: swd
26
+ green-web-host: true
27
+ inputs:
28
+ - timestamp: 2023-07-06T00:00
29
+ duration: 1
30
+ network/data/bytes: 1000000
@@ -0,0 +1,23 @@
1
+ name: coefficient-demo
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ coefficient:
7
+ method: Coefficient
8
+ path: "@grnsft/if-plugins"
9
+ global-config:
10
+ input-parameter: "carbon"
11
+ coefficient: 3
12
+ output-parameter: "carbon-product"
13
+ tree:
14
+ children:
15
+ child:
16
+ pipeline:
17
+ - coefficient
18
+ config:
19
+ sum:
20
+ inputs:
21
+ - timestamp: 2023-08-06T00:00
22
+ duration: 3600
23
+ carbon: 30
@@ -0,0 +1,34 @@
1
+ name: csv-export-demo
2
+ description: example exporting output to a csv file
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ csv-exporter:
7
+ method: CsvExport
8
+ path: "@grnsft/if-plugins"
9
+ tree:
10
+ children:
11
+ child:
12
+ pipeline:
13
+ - csv-exporter
14
+ config:
15
+ csv-exporter:
16
+ output-path: ./examples/outputs/csv-test.csv
17
+ headers:
18
+ - timestamp
19
+ - duration
20
+ - carbon
21
+ - energy
22
+ inputs:
23
+ - timestamp: 2023-07-06T00:00
24
+ duration: 1
25
+ operational-carbon: 0.02
26
+ embodied-carbon: 5
27
+ energy: 3.5
28
+ carbon: 5.02
29
+ - timestamp: 2023-07-06T00:10
30
+ duration: 1
31
+ operational-carbon: 0.03
32
+ embodied-carbon: 4
33
+ energy: 2.9
34
+ carbon: 4.03