@grnsft/if 0.1.3 → 0.1.5

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 (134) hide show
  1. package/README.md +21 -2
  2. package/build/config/config.d.ts +12 -0
  3. package/build/config/config.js +54 -0
  4. package/build/config/index.d.ts +2 -0
  5. package/build/config/index.js +8 -0
  6. package/build/config/strings.d.ts +19 -0
  7. package/build/config/strings.js +34 -0
  8. package/build/index.d.ts +2 -0
  9. package/build/index.js +53 -0
  10. package/build/lib/models-universe.d.ts +36 -0
  11. package/build/lib/models-universe.js +113 -0
  12. package/build/lib/observatory.d.ts +20 -0
  13. package/build/lib/observatory.js +31 -0
  14. package/build/lib/planet-aggregator.d.ts +6 -0
  15. package/build/lib/planet-aggregator.js +35 -0
  16. package/build/lib/supercomputer.d.ts +37 -0
  17. package/build/lib/supercomputer.js +148 -0
  18. package/build/models/index.d.ts +1 -0
  19. package/build/models/index.js +6 -0
  20. package/build/models/time-sync.d.ts +55 -0
  21. package/build/models/time-sync.js +235 -0
  22. package/build/types/helpers.d.ts +1 -0
  23. package/build/types/helpers.js +3 -0
  24. package/build/types/impl.d.ts +45 -0
  25. package/build/types/impl.js +5 -0
  26. package/build/types/model-interface.d.ts +14 -0
  27. package/build/types/model-interface.js +3 -0
  28. package/build/types/models-universe.d.ts +23 -0
  29. package/build/types/models-universe.js +3 -0
  30. package/build/types/planet-aggregator.d.ts +6 -0
  31. package/build/types/planet-aggregator.js +3 -0
  32. package/build/types/process-args.d.ts +7 -0
  33. package/build/types/process-args.js +3 -0
  34. package/build/types/supercomputer.d.ts +4 -0
  35. package/build/types/supercomputer.js +3 -0
  36. package/build/types/time-sync.d.ts +9 -0
  37. package/build/types/time-sync.js +3 -0
  38. package/build/types/units-dealer.d.ts +3 -0
  39. package/build/types/units-dealer.js +3 -0
  40. package/build/types/units.d.ts +11 -0
  41. package/build/types/units.js +37 -0
  42. package/build/util/args.d.ts +8 -0
  43. package/build/util/args.js +58 -0
  44. package/build/util/errors.d.ts +6 -0
  45. package/build/util/errors.js +25 -0
  46. package/build/util/helpers.d.ts +4 -0
  47. package/build/util/helpers.js +18 -0
  48. package/build/util/units-dealer.d.ts +10 -0
  49. package/build/util/units-dealer.js +32 -0
  50. package/build/util/validations.d.ts +29 -0
  51. package/build/util/validations.js +80 -0
  52. package/build/util/yaml.d.ts +12 -0
  53. package/build/util/yaml.js +36 -0
  54. package/examples/impls/test/time-sync.yml +75 -0
  55. package/examples/ompls/test/time-sync.yml +255 -0
  56. package/examples/ompls/time-sync.yml +212 -0
  57. package/hack-banner.png +0 -0
  58. package/package.json +3 -1
  59. package/src/config/units.yaml +11 -24
  60. package/src/models/README.md +266 -0
  61. package/tsconfig.build.tsbuildinfo +1 -1
  62. package/.devcontainer/devcontainer.json +0 -38
  63. package/.examples/ompls/azure.yml +0 -205
  64. package/.github/ISSUE_TEMPLATE/agenda.md +0 -37
  65. package/.github/ISSUE_TEMPLATE/blank-issue.md +0 -10
  66. package/.github/ISSUE_TEMPLATE/bug-report.md +0 -32
  67. package/.github/ISSUE_TEMPLATE/dev-ticket.md +0 -44
  68. package/.github/ISSUE_TEMPLATE/feedback.md +0 -42
  69. package/.github/ISSUE_TEMPLATE/model-plugin.md +0 -63
  70. package/.github/ISSUE_TEMPLATE/sprint-planning.md +0 -39
  71. package/.github/ISSUE_TEMPLATE/sprint-retro.md +0 -41
  72. package/.github/ISSUE_TEMPLATE/user-story.md +0 -10
  73. package/.github/PULL_REQUEST_TEMPLATE.md +0 -21
  74. package/.github/workflows/nodejs-ci.yml +0 -26
  75. package/coverage/clover.xml +0 -237
  76. package/coverage/coverage-final.json +0 -11
  77. package/coverage/lcov-report/base.css +0 -224
  78. package/coverage/lcov-report/block-navigation.js +0 -87
  79. package/coverage/lcov-report/config/config.ts.html +0 -256
  80. package/coverage/lcov-report/config/index.html +0 -146
  81. package/coverage/lcov-report/config/index.ts.html +0 -91
  82. package/coverage/lcov-report/config/strings.ts.html +0 -187
  83. package/coverage/lcov-report/favicon.png +0 -0
  84. package/coverage/lcov-report/index.html +0 -146
  85. package/coverage/lcov-report/lib/boavizta/index.html +0 -116
  86. package/coverage/lcov-report/lib/boavizta/index.ts.html +0 -1171
  87. package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +0 -277
  88. package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +0 -439
  89. package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +0 -550
  90. package/coverage/lcov-report/lib/case-studies/index.html +0 -176
  91. package/coverage/lcov-report/lib/case-studies/index.ts.html +0 -97
  92. package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +0 -232
  93. package/coverage/lcov-report/lib/ccf/index.html +0 -116
  94. package/coverage/lcov-report/lib/ccf/index.ts.html +0 -1339
  95. package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +0 -116
  96. package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +0 -370
  97. package/coverage/lcov-report/lib/index.html +0 -161
  98. package/coverage/lcov-report/lib/index.ts.html +0 -121
  99. package/coverage/lcov-report/lib/models-universe.ts.html +0 -475
  100. package/coverage/lcov-report/lib/observatory.ts.html +0 -187
  101. package/coverage/lcov-report/lib/planet-aggregator.ts.html +0 -253
  102. package/coverage/lcov-report/lib/sci/index.html +0 -116
  103. package/coverage/lcov-report/lib/sci/index.ts.html +0 -571
  104. package/coverage/lcov-report/lib/sci-e/index.html +0 -116
  105. package/coverage/lcov-report/lib/sci-e/index.ts.html +0 -403
  106. package/coverage/lcov-report/lib/sci-m/index.html +0 -116
  107. package/coverage/lcov-report/lib/sci-m/index.ts.html +0 -487
  108. package/coverage/lcov-report/lib/sci-o/index.html +0 -116
  109. package/coverage/lcov-report/lib/sci-o/index.ts.html +0 -265
  110. package/coverage/lcov-report/lib/shell-imp/index.html +0 -116
  111. package/coverage/lcov-report/lib/shell-imp/index.ts.html +0 -376
  112. package/coverage/lcov-report/lib/supercomputer.ts.html +0 -712
  113. package/coverage/lcov-report/lib/teads-aws/index.html +0 -116
  114. package/coverage/lcov-report/lib/teads-aws/index.ts.html +0 -823
  115. package/coverage/lcov-report/lib/teads-curve/index.html +0 -116
  116. package/coverage/lcov-report/lib/teads-curve/index.ts.html +0 -625
  117. package/coverage/lcov-report/lib/watt-time/index.html +0 -116
  118. package/coverage/lcov-report/lib/watt-time/index.ts.html +0 -829
  119. package/coverage/lcov-report/prettify.css +0 -1
  120. package/coverage/lcov-report/prettify.js +0 -2
  121. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  122. package/coverage/lcov-report/sorter.js +0 -196
  123. package/coverage/lcov-report/types/common.ts.html +0 -109
  124. package/coverage/lcov-report/types/index.html +0 -116
  125. package/coverage/lcov-report/util/args.ts.html +0 -259
  126. package/coverage/lcov-report/util/errors.ts.html +0 -160
  127. package/coverage/lcov-report/util/index.html +0 -146
  128. package/coverage/lcov-report/util/models-universe.ts.html +0 -679
  129. package/coverage/lcov-report/util/observatory.ts.html +0 -229
  130. package/coverage/lcov-report/util/supercomputer.ts.html +0 -466
  131. package/coverage/lcov-report/util/yaml.ts.html +0 -199
  132. package/coverage/lcov.info +0 -403
  133. package/scripts/impact-test.sh +0 -12
  134. package/yarn-error.log +0 -5431
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFnZ3JlZ2F0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGxhbmV0LWFnZ3JlZ2F0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWdncmVnYXRpb25NZXRob2QsIEFnZ3JlZ2F0aW9uTWV0cmljc30gZnJvbSAnLi9pbXBsJztcblxuZXhwb3J0IHR5cGUgUGxhbmV0QWdncmVnYXRvclBhcmFtcyA9IHtcbiAgJ2FnZ3JlZ2F0aW9uLW1ldHJpY3MnOiBBZ2dyZWdhdGlvbk1ldHJpY3NbXTtcbiAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6IEFnZ3JlZ2F0aW9uTWV0aG9kO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25SZXN1bHQgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuIl19
@@ -0,0 +1,7 @@
1
+ export interface impactProcessArgs {
2
+ impl?: string;
3
+ ompl?: string;
4
+ format?: string;
5
+ verbose?: boolean;
6
+ help?: boolean;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1hcmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3Byb2Nlc3MtYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBpbXBhY3RQcm9jZXNzQXJncyB7XG4gIGltcGw/OiBzdHJpbmc7XG4gIG9tcGw/OiBzdHJpbmc7XG4gIGZvcm1hdD86IHN0cmluZztcbiAgdmVyYm9zZT86IGJvb2xlYW47XG4gIGhlbHA/OiBib29sZWFuO1xufVxuIl19
@@ -0,0 +1,4 @@
1
+ export type ChildInformation = {
2
+ name: string;
3
+ info: any;
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwZXJjb21wdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9zdXBlcmNvbXB1dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDaGlsZEluZm9ybWF0aW9uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGluZm86IGFueTtcbn07XG4iXX0=
@@ -0,0 +1,9 @@
1
+ export type TimeNormalizerConfig = {
2
+ 'start-time': string;
3
+ 'end-time': string;
4
+ interval: number;
5
+ };
6
+ export type PaddingReceipt = {
7
+ start: boolean;
8
+ end: boolean;
9
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3RpbWUtc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgVGltZU5vcm1hbGl6ZXJDb25maWcgPSB7XG4gICdzdGFydC10aW1lJzogc3RyaW5nO1xuICAnZW5kLXRpbWUnOiBzdHJpbmc7XG4gIGludGVydmFsOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBQYWRkaW5nUmVjZWlwdCA9IHtcbiAgc3RhcnQ6IGJvb2xlYW47XG4gIGVuZDogYm9vbGVhbjtcbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { AsyncReturnType } from './helpers';
2
+ import { UnitsDealer } from '../util/units-dealer';
3
+ export type UnitsDealerUsage = AsyncReturnType<typeof UnitsDealer>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMtZGVhbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3VuaXRzLWRlYWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1JldHVyblR5cGV9IGZyb20gJy4vaGVscGVycyc7XG5cbmltcG9ydCB7VW5pdHNEZWFsZXJ9IGZyb20gJy4uL3V0aWwvdW5pdHMtZGVhbGVyJztcblxuZXhwb3J0IHR5cGUgVW5pdHNEZWFsZXJVc2FnZSA9IEFzeW5jUmV0dXJuVHlwZTx0eXBlb2YgVW5pdHNEZWFsZXI+O1xuIl19
@@ -0,0 +1,11 @@
1
+ export declare const UnitKeys: readonly ["carbon", "core-units", "cpu-util", "disk-io", "duration", "energy-cpu", "expected-lifespan", "energy-memory", "embodied-carbon", "energy", "energy-network", "expected-lifespan", "functional-unit", "functional-unit-duration", "functional-unit-time", "gpu-util", "grid-carbon-intensity", "instance-type", "location", "embodied-carbon", "operational-carbon", "physical-processor", "vendor", "ram-alloc", "ram-util", "resources-reserved", "thermal-design-power", "total-embodied-emissions", "timestamp", "time-reserved", "total-resources"];
2
+ type UnitFields = {
3
+ description: string;
4
+ unit: string;
5
+ aggregation: 'sum' | 'none' | 'avg';
6
+ };
7
+ export type UnitKeyName = (typeof UnitKeys)[number];
8
+ export type Units = {
9
+ [K in UnitKeyName]: UnitFields;
10
+ };
11
+ export {};
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnitKeys = void 0;
4
+ exports.UnitKeys = [
5
+ 'carbon',
6
+ 'core-units',
7
+ 'cpu-util',
8
+ 'disk-io',
9
+ 'duration',
10
+ 'energy-cpu',
11
+ 'expected-lifespan',
12
+ 'energy-memory',
13
+ 'embodied-carbon',
14
+ 'energy',
15
+ 'energy-network',
16
+ 'expected-lifespan',
17
+ 'functional-unit',
18
+ 'functional-unit-duration',
19
+ 'functional-unit-time',
20
+ 'gpu-util',
21
+ 'grid-carbon-intensity',
22
+ 'instance-type',
23
+ 'location',
24
+ 'embodied-carbon',
25
+ 'operational-carbon',
26
+ 'physical-processor',
27
+ 'vendor',
28
+ 'ram-alloc',
29
+ 'ram-util',
30
+ 'resources-reserved',
31
+ 'thermal-design-power',
32
+ 'total-embodied-emissions',
33
+ 'timestamp',
34
+ 'time-reserved',
35
+ 'total-resources',
36
+ ];
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvdW5pdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxRQUFRLEdBQUc7SUFDdEIsUUFBUTtJQUNSLFlBQVk7SUFDWixVQUFVO0lBQ1YsU0FBUztJQUNULFVBQVU7SUFDVixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLDBCQUEwQjtJQUMxQixzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLHVCQUF1QjtJQUN2QixlQUFlO0lBQ2YsVUFBVTtJQUNWLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLFFBQVE7SUFDUixXQUFXO0lBQ1gsVUFBVTtJQUNWLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsMEJBQTBCO0lBQzFCLFdBQVc7SUFDWCxlQUFlO0lBQ2YsaUJBQWlCO0NBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBVbml0S2V5cyA9IFtcbiAgJ2NhcmJvbicsXG4gICdjb3JlLXVuaXRzJyxcbiAgJ2NwdS11dGlsJyxcbiAgJ2Rpc2staW8nLFxuICAnZHVyYXRpb24nLFxuICAnZW5lcmd5LWNwdScsXG4gICdleHBlY3RlZC1saWZlc3BhbicsXG4gICdlbmVyZ3ktbWVtb3J5JyxcbiAgJ2VtYm9kaWVkLWNhcmJvbicsXG4gICdlbmVyZ3knLFxuICAnZW5lcmd5LW5ldHdvcmsnLFxuICAnZXhwZWN0ZWQtbGlmZXNwYW4nLFxuICAnZnVuY3Rpb25hbC11bml0JyxcbiAgJ2Z1bmN0aW9uYWwtdW5pdC1kdXJhdGlvbicsXG4gICdmdW5jdGlvbmFsLXVuaXQtdGltZScsXG4gICdncHUtdXRpbCcsXG4gICdncmlkLWNhcmJvbi1pbnRlbnNpdHknLFxuICAnaW5zdGFuY2UtdHlwZScsXG4gICdsb2NhdGlvbicsXG4gICdlbWJvZGllZC1jYXJib24nLFxuICAnb3BlcmF0aW9uYWwtY2FyYm9uJyxcbiAgJ3BoeXNpY2FsLXByb2Nlc3NvcicsXG4gICd2ZW5kb3InLFxuICAncmFtLWFsbG9jJyxcbiAgJ3JhbS11dGlsJyxcbiAgJ3Jlc291cmNlcy1yZXNlcnZlZCcsXG4gICd0aGVybWFsLWRlc2lnbi1wb3dlcicsXG4gICd0b3RhbC1lbWJvZGllZC1lbWlzc2lvbnMnLFxuICAndGltZXN0YW1wJyxcbiAgJ3RpbWUtcmVzZXJ2ZWQnLFxuICAndG90YWwtcmVzb3VyY2VzJyxcbl0gYXMgY29uc3Q7XG5cbnR5cGUgVW5pdEZpZWxkcyA9IHtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdW5pdDogc3RyaW5nO1xuICBhZ2dyZWdhdGlvbjogJ3N1bScgfCAnbm9uZScgfCAnYXZnJztcbn07XG5cbmV4cG9ydCB0eXBlIFVuaXRLZXlOYW1lID0gKHR5cGVvZiBVbml0S2V5cylbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgVW5pdHMgPSB7XG4gIFtLIGluIFVuaXRLZXlOYW1lXTogVW5pdEZpZWxkcztcbn07XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parses process argument, if it's `yaml` file, then returns it.
3
+ * Otherwise throws error.
4
+ */
5
+ export declare const parseProcessArgument: () => {
6
+ outputPath?: string | undefined;
7
+ inputPath: string;
8
+ } | undefined;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseProcessArgument = void 0;
4
+ const path = require("path");
5
+ const ts_command_line_args_1 = require("ts-command-line-args");
6
+ const yaml_1 = require("./yaml");
7
+ const errors_1 = require("./errors");
8
+ const config_1 = require("../config");
9
+ const { CliInputError } = errors_1.ERRORS;
10
+ const { impact } = config_1.CONFIG;
11
+ const { ARGS, HELP } = impact;
12
+ const { FILE_IS_NOT_YAML, IMPL_IS_MISSING } = config_1.STRINGS;
13
+ /**
14
+ * Validates process arguments
15
+ * @private
16
+ */
17
+ const validateAndParseProcessArgs = () => {
18
+ try {
19
+ return (0, ts_command_line_args_1.parse)(ARGS);
20
+ }
21
+ catch (error) {
22
+ if (error instanceof Error) {
23
+ throw new CliInputError(error.message);
24
+ }
25
+ throw error;
26
+ }
27
+ };
28
+ /**
29
+ * Prepends process path to fiven `filePath`.
30
+ * @private
31
+ */
32
+ const prependFullFilePath = (filePath) => {
33
+ const processRunningPath = process.cwd();
34
+ return path.normalize(`${processRunningPath}/${filePath}`);
35
+ };
36
+ /**
37
+ * Parses process argument, if it's `yaml` file, then returns it.
38
+ * Otherwise throws error.
39
+ */
40
+ const parseProcessArgument = () => {
41
+ const { impl, ompl, help } = validateAndParseProcessArgs();
42
+ if (help) {
43
+ console.log(HELP);
44
+ return;
45
+ }
46
+ if (impl) {
47
+ if ((0, yaml_1.checkIfFileIsYaml)(impl)) {
48
+ return {
49
+ inputPath: prependFullFilePath(impl),
50
+ ...(ompl && { outputPath: prependFullFilePath(ompl) }),
51
+ };
52
+ }
53
+ throw new CliInputError(FILE_IS_NOT_YAML);
54
+ }
55
+ throw new CliInputError(IMPL_IS_MISSING);
56
+ };
57
+ exports.parseProcessArgument = parseProcessArgument;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FyZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLCtEQUEyQztBQUUzQyxpQ0FBeUM7QUFDekMscUNBQWdDO0FBRWhDLHNDQUEwQztBQUkxQyxNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9CLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDeEIsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxNQUFNLENBQUM7QUFFNUIsTUFBTSxFQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFcEQ7OztHQUdHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLEVBQUU7SUFDdkMsSUFBSTtRQUNGLE9BQU8sSUFBQSw0QkFBSyxFQUFvQixJQUFJLENBQUMsQ0FBQztLQUN2QztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsTUFBTSxLQUFLLENBQUM7S0FDYjtBQUNILENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFekMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsa0JBQWtCLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtJQUN2QyxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRywyQkFBMkIsRUFBRSxDQUFDO0lBRXpELElBQUksSUFBSSxFQUFFO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPO0tBQ1I7SUFFRCxJQUFJLElBQUksRUFBRTtRQUNSLElBQUksSUFBQSx3QkFBaUIsRUFBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixPQUFPO2dCQUNMLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQzthQUNyRCxDQUFDO1NBQ0g7UUFFRCxNQUFNLElBQUksYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDM0M7SUFFRCxNQUFNLElBQUksYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQXBCVyxRQUFBLG9CQUFvQix3QkFvQi9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7cGFyc2V9IGZyb20gJ3RzLWNvbW1hbmQtbGluZS1hcmdzJztcblxuaW1wb3J0IHtjaGVja0lmRmlsZUlzWWFtbH0gZnJvbSAnLi95YW1sJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7Q09ORklHLCBTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbXBvcnQge2ltcGFjdFByb2Nlc3NBcmdzfSBmcm9tICcuLi90eXBlcy9wcm9jZXNzLWFyZ3MnO1xuXG5jb25zdCB7Q2xpSW5wdXRFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtpbXBhY3R9ID0gQ09ORklHO1xuY29uc3Qge0FSR1MsIEhFTFB9ID0gaW1wYWN0O1xuXG5jb25zdCB7RklMRV9JU19OT1RfWUFNTCwgSU1QTF9JU19NSVNTSU5HfSA9IFNUUklOR1M7XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb2Nlc3MgYXJndW1lbnRzXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB2YWxpZGF0ZUFuZFBhcnNlUHJvY2Vzc0FyZ3MgPSAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlPGltcGFjdFByb2Nlc3NBcmdzPihBUkdTKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgbmV3IENsaUlucHV0RXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbi8qKlxuICogUHJlcGVuZHMgcHJvY2VzcyBwYXRoIHRvIGZpdmVuIGBmaWxlUGF0aGAuXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBwcmVwZW5kRnVsbEZpbGVQYXRoID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcHJvY2Vzc1J1bm5pbmdQYXRoID0gcHJvY2Vzcy5jd2QoKTtcblxuICByZXR1cm4gcGF0aC5ub3JtYWxpemUoYCR7cHJvY2Vzc1J1bm5pbmdQYXRofS8ke2ZpbGVQYXRofWApO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgcHJvY2VzcyBhcmd1bWVudCwgaWYgaXQncyBgeWFtbGAgZmlsZSwgdGhlbiByZXR1cm5zIGl0LlxuICogT3RoZXJ3aXNlIHRocm93cyBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUHJvY2Vzc0FyZ3VtZW50ID0gKCkgPT4ge1xuICBjb25zdCB7aW1wbCwgb21wbCwgaGVscH0gPSB2YWxpZGF0ZUFuZFBhcnNlUHJvY2Vzc0FyZ3MoKTtcblxuICBpZiAoaGVscCkge1xuICAgIGNvbnNvbGUubG9nKEhFTFApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbXBsKSB7XG4gICAgaWYgKGNoZWNrSWZGaWxlSXNZYW1sKGltcGwpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnB1dFBhdGg6IHByZXBlbmRGdWxsRmlsZVBhdGgoaW1wbCksXG4gICAgICAgIC4uLihvbXBsICYmIHtvdXRwdXRQYXRoOiBwcmVwZW5kRnVsbEZpbGVQYXRoKG9tcGwpfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBDbGlJbnB1dEVycm9yKEZJTEVfSVNfTk9UX1lBTUwpO1xuICB9XG5cbiAgdGhyb3cgbmV3IENsaUlucHV0RXJyb3IoSU1QTF9JU19NSVNTSU5HKTtcbn07XG4iXX0=
@@ -0,0 +1,6 @@
1
+ declare const CUSTOM_ERRORS: readonly ["CliInputError", "FileNotFoundError", "ImplValidationError", "InputValidationError", "InvalidAggregationParams", "ModelInitializationError", "ModelCredentialError"];
2
+ type CustomErrors = {
3
+ [K in (typeof CUSTOM_ERRORS)[number]]: ErrorConstructor;
4
+ };
5
+ export declare const ERRORS: CustomErrors;
6
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ERRORS = void 0;
4
+ const CUSTOM_ERRORS = [
5
+ 'CliInputError',
6
+ 'FileNotFoundError',
7
+ 'ImplValidationError',
8
+ 'InputValidationError',
9
+ 'InvalidAggregationParams',
10
+ 'ModelInitializationError',
11
+ 'ModelCredentialError',
12
+ ];
13
+ exports.ERRORS = CUSTOM_ERRORS.reduce((acc, className) => {
14
+ acc = {
15
+ ...acc,
16
+ [className]: class extends Error {
17
+ constructor(message) {
18
+ super(message);
19
+ this.name = this.constructor.name;
20
+ }
21
+ },
22
+ };
23
+ return acc;
24
+ }, {});
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0QiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLHNCQUFzQjtDQUNkLENBQUM7QUFNRSxRQUFBLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO0lBQzVELEdBQUcsR0FBRztRQUNKLEdBQUcsR0FBRztRQUNOLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBTSxTQUFRLEtBQUs7WUFDOUIsWUFBWSxPQUFlO2dCQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQyxDQUFDO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQUUsRUFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQ1VTVE9NX0VSUk9SUyA9IFtcbiAgJ0NsaUlucHV0RXJyb3InLFxuICAnRmlsZU5vdEZvdW5kRXJyb3InLFxuICAnSW1wbFZhbGlkYXRpb25FcnJvcicsXG4gICdJbnB1dFZhbGlkYXRpb25FcnJvcicsXG4gICdJbnZhbGlkQWdncmVnYXRpb25QYXJhbXMnLFxuICAnTW9kZWxJbml0aWFsaXphdGlvbkVycm9yJyxcbiAgJ01vZGVsQ3JlZGVudGlhbEVycm9yJyxcbl0gYXMgY29uc3Q7XG5cbnR5cGUgQ3VzdG9tRXJyb3JzID0ge1xuICBbSyBpbiAodHlwZW9mIENVU1RPTV9FUlJPUlMpW251bWJlcl1dOiBFcnJvckNvbnN0cnVjdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IEVSUk9SUyA9IENVU1RPTV9FUlJPUlMucmVkdWNlKChhY2MsIGNsYXNzTmFtZSkgPT4ge1xuICBhY2MgPSB7XG4gICAgLi4uYWNjLFxuICAgIFtjbGFzc05hbWVdOiBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIGFjYztcbn0sIHt9IGFzIEN1c3RvbUVycm9ycyk7XG4iXX0=
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Impact engine error handler. Logs errors and appends issue template if error is unknown.
3
+ */
4
+ export declare const andHandle: (error: Error) => void;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.andHandle = void 0;
4
+ const errors_1 = require("./errors");
5
+ const config_1 = require("../config");
6
+ const { ISSUE_TEMPLATE } = config_1.STRINGS;
7
+ /**
8
+ * Impact engine error handler. Logs errors and appends issue template if error is unknown.
9
+ */
10
+ const andHandle = (error) => {
11
+ const knownErrors = Object.keys(errors_1.ERRORS);
12
+ console.error(error);
13
+ if (!knownErrors.includes(error.name)) {
14
+ console.log(ISSUE_TEMPLATE);
15
+ }
16
+ };
17
+ exports.andHandle = andHandle;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQWdDO0FBRWhDLHNDQUFrQztBQUVsQyxNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVqQzs7R0FFRztBQUNJLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7SUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFNLENBQUMsQ0FBQztJQUV4QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzdCO0FBQ0gsQ0FBQyxDQUFDO0FBUlcsUUFBQSxTQUFTLGFBUXBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5jb25zdCB7SVNTVUVfVEVNUExBVEV9ID0gU1RSSU5HUztcblxuLyoqXG4gKiBJbXBhY3QgZW5naW5lIGVycm9yIGhhbmRsZXIuIExvZ3MgZXJyb3JzIGFuZCBhcHBlbmRzIGlzc3VlIHRlbXBsYXRlIGlmIGVycm9yIGlzIHVua25vd24uXG4gKi9cbmV4cG9ydCBjb25zdCBhbmRIYW5kbGUgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gIGNvbnN0IGtub3duRXJyb3JzID0gT2JqZWN0LmtleXMoRVJST1JTKTtcblxuICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICBpZiAoIWtub3duRXJyb3JzLmluY2x1ZGVzKGVycm9yLm5hbWUpKSB7XG4gICAgY29uc29sZS5sb2coSVNTVUVfVEVNUExBVEUpO1xuICB9XG59O1xuIl19
@@ -0,0 +1,10 @@
1
+ import { UnitKeyName } from '../types/units';
2
+ /**
3
+ * Units dealer 😎 .
4
+ */
5
+ export declare const UnitsDealer: () => Promise<{
6
+ /**
7
+ * Returns aggregation method for given `unitName`. If doesn't exist then returns value `sum`.
8
+ */
9
+ askToGiveMethodFor: (unitName: UnitKeyName) => "sum" | "avg" | "none";
10
+ }>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnitsDealer = void 0;
4
+ const path = require("path");
5
+ const yaml_1 = require("./yaml");
6
+ const errors_1 = require("./errors");
7
+ const { FileNotFoundError } = errors_1.ERRORS;
8
+ /**
9
+ * Gets units file as an object.
10
+ */
11
+ const getUnitsFile = () => (0, yaml_1.openYamlFileAsObject)(path.normalize(`${__dirname}/../config/units.yaml`)).catch((error) => {
12
+ throw FileNotFoundError(error.message);
13
+ });
14
+ /**
15
+ * Units dealer 😎 .
16
+ */
17
+ const UnitsDealer = async () => {
18
+ const unitsStack = await getUnitsFile();
19
+ return {
20
+ /**
21
+ * Returns aggregation method for given `unitName`. If doesn't exist then returns value `sum`.
22
+ */
23
+ askToGiveMethodFor: (unitName) => {
24
+ if (unitsStack[unitName]) {
25
+ return unitsStack[unitName].aggregation;
26
+ }
27
+ return 'sum';
28
+ },
29
+ };
30
+ };
31
+ exports.UnitsDealer = UnitsDealer;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMtZGVhbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdW5pdHMtZGVhbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE4QjtBQUU5QixpQ0FBNEM7QUFDNUMscUNBQWdDO0FBSWhDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUVuQzs7R0FFRztBQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUN4QixJQUFBLDJCQUFvQixFQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyx1QkFBdUIsQ0FBQyxDQUNwRCxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO0lBQ3ZCLE1BQU0saUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBRUw7O0dBRUc7QUFDSSxNQUFNLFdBQVcsR0FBRyxLQUFLLElBQUksRUFBRTtJQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksRUFBRSxDQUFDO0lBRXhDLE9BQU87UUFDTDs7V0FFRztRQUNILGtCQUFrQixFQUFFLENBQUMsUUFBcUIsRUFBRSxFQUFFO1lBQzVDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN4QixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUM7YUFDekM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBZlcsUUFBQSxXQUFXLGVBZXRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmltcG9ydCB7b3BlbllhbWxGaWxlQXNPYmplY3R9IGZyb20gJy4veWFtbCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge1VuaXRzLCBVbml0S2V5TmFtZX0gZnJvbSAnLi4vdHlwZXMvdW5pdHMnO1xuXG5jb25zdCB7RmlsZU5vdEZvdW5kRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIEdldHMgdW5pdHMgZmlsZSBhcyBhbiBvYmplY3QuXG4gKi9cbmNvbnN0IGdldFVuaXRzRmlsZSA9ICgpID0+XG4gIG9wZW5ZYW1sRmlsZUFzT2JqZWN0PFVuaXRzPihcbiAgICBwYXRoLm5vcm1hbGl6ZShgJHtfX2Rpcm5hbWV9Ly4uL2NvbmZpZy91bml0cy55YW1sYClcbiAgKS5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgdGhyb3cgRmlsZU5vdEZvdW5kRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gIH0pO1xuXG4vKipcbiAqIFVuaXRzIGRlYWxlciDwn5iOIC5cbiAqL1xuZXhwb3J0IGNvbnN0IFVuaXRzRGVhbGVyID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB1bml0c1N0YWNrID0gYXdhaXQgZ2V0VW5pdHNGaWxlKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFnZ3JlZ2F0aW9uIG1ldGhvZCBmb3IgZ2l2ZW4gYHVuaXROYW1lYC4gSWYgZG9lc24ndCBleGlzdCB0aGVuIHJldHVybnMgdmFsdWUgYHN1bWAuXG4gICAgICovXG4gICAgYXNrVG9HaXZlTWV0aG9kRm9yOiAodW5pdE5hbWU6IFVuaXRLZXlOYW1lKSA9PiB7XG4gICAgICBpZiAodW5pdHNTdGFja1t1bml0TmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHVuaXRzU3RhY2tbdW5pdE5hbWVdLmFnZ3JlZ2F0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJ3N1bSc7XG4gICAgfSxcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { Impl } from '../types/impl';
2
+ /**
3
+ * Validates given `impl` object to match pattern.
4
+ */
5
+ export declare const validateImpl: (impl: Impl) => {
6
+ name: string;
7
+ description: string | null;
8
+ tags: {
9
+ kind?: string | undefined;
10
+ complexity?: string | undefined;
11
+ category?: string | undefined;
12
+ } | null;
13
+ initialize: {
14
+ models: {
15
+ name: string;
16
+ kind?: string | undefined;
17
+ path?: string | undefined;
18
+ model?: string | undefined;
19
+ config?: Record<string, any> | undefined;
20
+ }[];
21
+ };
22
+ graph: {
23
+ children: Record<string, any>;
24
+ };
25
+ aggregation?: {
26
+ 'aggregation-metrics': string[];
27
+ 'aggregation-method': string;
28
+ } | undefined;
29
+ };
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateImpl = void 0;
4
+ const zod_1 = require("zod");
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));
11
+ /**
12
+ * Zod literal union validator which checks if members are more than 2.
13
+ */
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({
30
+ name: zod_1.z.string(),
31
+ description: zod_1.z.string().nullable(),
32
+ aggregation: zod_1.z
33
+ .object({
34
+ 'aggregation-metrics': zod_1.z.array(constructZodLiteralUnionType(aggregationMetric)),
35
+ 'aggregation-method': constructZodLiteralUnionType(aggregationMethods).default('sum'),
36
+ })
37
+ .optional(),
38
+ tags: zod_1.z
39
+ .object({
40
+ kind: zod_1.z.string().optional(),
41
+ complexity: zod_1.z.string().optional(),
42
+ category: zod_1.z.string().optional(),
43
+ })
44
+ .nullable(),
45
+ 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(),
52
+ })),
53
+ }),
54
+ graph: zod_1.z
55
+ .object({
56
+ children: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
57
+ })
58
+ .required(),
59
+ });
60
+ /**
61
+ * Validates given `impl` object to match pattern.
62
+ */
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));
76
+ }
77
+ return validatedImpl.data;
78
+ };
79
+ exports.validateImpl = validateImpl;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBZ0M7QUFFaEMscUNBQWdDO0FBRWhDLHNDQUFpQztBQUlqQyxNQUFNLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFckMsTUFBTSxFQUFDLG1CQUFtQixFQUFFLG1CQUFtQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRTFELE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRS9FOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FDN0IsUUFBYTtJQUViLE9BQU8sUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FDbkMsUUFBYTtJQUViLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLG9HQUFvRyxDQUNyRyxDQUFDO0tBQ0g7SUFFRCxPQUFPLE9BQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxXQUFXLEVBQUUs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bXBvcnQge1pvZElzc3VlLCB6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge0NPTkZJR30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtJbXBsfSBmcm9tICcuLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0ltcGxWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCB7QUdHUkVHQVRJT05fTUVUUklDUywgQUdHUkVHQVRJT05fTUVUSE9EU30gPSBDT05GSUc7XG5cbmNvbnN0IGFnZ3JlZ2F0aW9uTWV0aG9kcyA9IEFHR1JFR0FUSU9OX01FVEhPRFMubWFwKG1ldGhvZCA9PiB6LmxpdGVyYWwobWV0aG9kKSk7XG5jb25zdCBhZ2dyZWdhdGlvbk1ldHJpYyA9IEFHR1JFR0FUSU9OX01FVFJJQ1MubWFwKG1ldHJpYyA9PiB6LmxpdGVyYWwobWV0cmljKSk7XG5cbi8qKlxuICogWm9kIGxpdGVyYWwgdW5pb24gdmFsaWRhdG9yIHdoaWNoIGNoZWNrcyBpZiBtZW1iZXJzIGFyZSBtb3JlIHRoYW4gMi5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFpvZExpdGVyYWxVbmlvbjxUIGV4dGVuZHMgei5ab2RMaXRlcmFsPHVua25vd24+PihcbiAgbGl0ZXJhbHM6IFRbXVxuKTogbGl0ZXJhbHMgaXMgW1QsIFQsIC4uLlRbXV0ge1xuICByZXR1cm4gbGl0ZXJhbHMubGVuZ3RoID49IDI7XG59XG5cbi8qKlxuICogTGl0ZXJhbCB1bmlvbiB0eXBlIGhlbHBlci5cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0Wm9kTGl0ZXJhbFVuaW9uVHlwZTxUIGV4dGVuZHMgei5ab2RMaXRlcmFsPHVua25vd24+PihcbiAgbGl0ZXJhbHM6IFRbXVxuKSB7XG4gIGlmICghaXNWYWxpZFpvZExpdGVyYWxVbmlvbihsaXRlcmFscykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnTGl0ZXJhbHMgcGFzc2VkIGRvIG5vdCBtZWV0IHRoZSBjcml0ZXJpYSBmb3IgY29uc3RydWN0aW5nIGEgdW5pb24gc2NoZW1hLCB0aGUgbWluaW11bSBsZW5ndGggaXMgMi4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB6LnVuaW9uKGxpdGVyYWxzKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIHNjaGVtYSBmb3IgaW1wbCBmaWxlcy5cbiAqL1xuY29uc3QgaW1wbFZhbGlkYXRpb24gPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGFnZ3JlZ2F0aW9uOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICAnYWdncmVnYXRpb24tbWV0cmljcyc6IHouYXJyYXkoXG4gICAgICAgIGNvbnN0cnVjdFpvZExpdGVyYWxVbmlvblR5cGUoYWdncmVnYXRpb25NZXRyaWMpXG4gICAgICApLFxuICAgICAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6XG4gICAgICAgIGNvbnN0cnVjdFpvZExpdGVyYWxVbmlvblR5cGUoYWdncmVnYXRpb25NZXRob2RzKS5kZWZhdWx0KCdzdW0nKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBtb2RlbHM6IHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGtpbmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgcGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBjb25maWc6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICksXG4gIH0pLFxuICBncmFwaDogelxuICAgIC5vYmplY3Qoe1xuICAgICAgY2hpbGRyZW46IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIH0pXG4gICAgLnJlcXVpcmVkKCksXG59KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYGltcGxgIG9iamVjdCB0byBtYXRjaCBwYXR0ZXJuLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVJbXBsID0gKGltcGw6IEltcGwpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkSW1wbCA9IGltcGxWYWxpZGF0aW9uLnNhZmVQYXJzZShpbXBsKTtcblxuICBpZiAoIXZhbGlkYXRlZEltcGwuc3VjY2Vzcykge1xuICAgIGNvbnN0IHByZXR0aWZ5RXJyb3JNZXNzYWdlID0gKGlzc3Vlczogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICAgICAgcmV0dXJuIGlzc3Vlc0FycmF5Lm1hcCgoaXNzdWU6IFpvZElzc3VlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtjb2RlLCBwYXRoLCBtZXNzYWdlfSA9IGlzc3VlO1xuICAgICAgICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICAgICAgICB0eXBlb2YgcGFydCA9PT0gJ251bWJlcicgPyBgWyR7cGFydH1dYCA6IHBhcnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG5cbiAgICAgICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRocm93IG5ldyBJbXBsVmFsaWRhdGlvbkVycm9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGVkSW1wbC5lcnJvci5tZXNzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkSW1wbC5kYXRhO1xufTtcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Reads and parses `yaml` file to object.
3
+ */
4
+ export declare const openYamlFileAsObject: <T>(filePath: string) => Promise<T>;
5
+ /**
6
+ * Saves given `yaml` dump as a file.
7
+ */
8
+ export declare const saveYamlFileAs: (object: any, pathToFile: string) => Promise<void>;
9
+ /**
10
+ * Checks if given `fileName` is yaml.
11
+ */
12
+ export declare const checkIfFileIsYaml: (fileName: string) => boolean;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ 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");
7
+ /**
8
+ * Reads and parses `yaml` file to object.
9
+ */
10
+ const openYamlFileAsObject = async (filePath) => {
11
+ const yamlFileBuffer = await fs.readFile(filePath, 'utf8');
12
+ return YAML.load(yamlFileBuffer);
13
+ };
14
+ exports.openYamlFileAsObject = openYamlFileAsObject;
15
+ /**
16
+ * Saves given `yaml` dump as a file.
17
+ */
18
+ const saveYamlFileAs = async (object, pathToFile) => {
19
+ const dirPath = path.dirname(pathToFile);
20
+ await fs.mkdir(dirPath, { recursive: true });
21
+ const yamlString = YAML.dump(object, { noRefs: true });
22
+ return fs.writeFile(pathToFile, yamlString);
23
+ };
24
+ exports.saveYamlFileAs = saveYamlFileAs;
25
+ /**
26
+ * Checks if given `fileName` is yaml.
27
+ */
28
+ const checkIfFileIsYaml = (fileName) => {
29
+ const yamlFileTypes = ['yaml', 'yml'];
30
+ const splittedParts = fileName.split('.');
31
+ const lastIndex = splittedParts.length - 1;
32
+ const extension = splittedParts[lastIndex];
33
+ return yamlFileTypes.includes(extension);
34
+ };
35
+ exports.checkIfFileIsYaml = checkIfFileIsYaml;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3lhbWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUU3QixnQ0FBZ0M7QUFFaEM7O0dBRUc7QUFDSSxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBSyxRQUFnQixFQUFjLEVBQUU7SUFDNUUsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFNLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBSlcsUUFBQSxvQkFBb0Isd0JBSS9CO0FBRUY7O0dBRUc7QUFDSSxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsTUFBVyxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRXJELE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBTlcsUUFBQSxjQUFjLGtCQU16QjtBQUVGOztHQUVHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUNwRCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUzQyxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBUFcsUUFBQSxpQkFBaUIscUJBTzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0ICogYXMgWUFNTCBmcm9tICdqcy15YW1sJztcblxuLyoqXG4gKiBSZWFkcyBhbmQgcGFyc2VzIGB5YW1sYCBmaWxlIHRvIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5ZYW1sRmlsZUFzT2JqZWN0ID0gYXN5bmMgPFQ+KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgeWFtbEZpbGVCdWZmZXIgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICByZXR1cm4gWUFNTC5sb2FkKHlhbWxGaWxlQnVmZmVyKSBhcyBUO1xufTtcblxuLyoqXG4gKiBTYXZlcyBnaXZlbiBgeWFtbGAgZHVtcCBhcyBhIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzYXZlWWFtbEZpbGVBcyA9IGFzeW5jIChvYmplY3Q6IGFueSwgcGF0aFRvRmlsZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRpclBhdGggPSBwYXRoLmRpcm5hbWUocGF0aFRvRmlsZSk7XG4gIGF3YWl0IGZzLm1rZGlyKGRpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgY29uc3QgeWFtbFN0cmluZyA9IFlBTUwuZHVtcChvYmplY3QsIHtub1JlZnM6IHRydWV9KTtcblxuICByZXR1cm4gZnMud3JpdGVGaWxlKHBhdGhUb0ZpbGUsIHlhbWxTdHJpbmcpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgZ2l2ZW4gYGZpbGVOYW1lYCBpcyB5YW1sLlxuICovXG5leHBvcnQgY29uc3QgY2hlY2tJZkZpbGVJc1lhbWwgPSAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCB5YW1sRmlsZVR5cGVzID0gWyd5YW1sJywgJ3ltbCddO1xuICBjb25zdCBzcGxpdHRlZFBhcnRzID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3BsaXR0ZWRQYXJ0cy5sZW5ndGggLSAxO1xuICBjb25zdCBleHRlbnNpb24gPSBzcGxpdHRlZFBhcnRzW2xhc3RJbmRleF07XG5cbiAgcmV0dXJuIHlhbWxGaWxlVHlwZXMuaW5jbHVkZXMoZXh0ZW5zaW9uKTtcbn07XG4iXX0=
@@ -0,0 +1,75 @@
1
+ name: nesting-demo
2
+ description: impl with 2 levels of nesting with non-uniform timing of observations
3
+ tags:
4
+ initialize:
5
+ models:
6
+ - name: teads-curve
7
+ model: TeadsCurveModel
8
+ path: "@grnsft/if-unofficial-models"
9
+ - name: sci-e
10
+ model: SciEModel
11
+ path: "@grnsft/if-models"
12
+ - name: sci-m
13
+ path: "@grnsft/if-models"
14
+ model: SciMModel
15
+ - name: sci-o
16
+ model: SciOModel
17
+ path: "@grnsft/if-models"
18
+ - name: time-synchronization
19
+ model: TimeSyncModel
20
+ path: builtin
21
+ config:
22
+ start-time: 2023-12-12T00:00:00.000Z # ISO timestamp
23
+ end-time: 2023-12-12T00:01:00.000Z # ISO timestamp
24
+ interval: 5 # seconds
25
+ graph:
26
+ children:
27
+ child: # an advanced grouping node
28
+ pipeline:
29
+ - teads-curve
30
+ - sci-e
31
+ - sci-m
32
+ - sci-o
33
+ - time-synchronization
34
+ config:
35
+ teads-curve:
36
+ thermal-design-power: 65
37
+ sci-m:
38
+ total-embodied-emissions: 251000 # gCO2eq
39
+ time-reserved: 3600 # 1 hour in s
40
+ expected-lifespan: 126144000 # 4 years in seconds
41
+ resources-reserved: 1
42
+ total-resources: 1
43
+ sci-o:
44
+ grid-carbon-intensity: 457 # gCO2/kwh
45
+ children:
46
+ child-1:
47
+ inputs:
48
+ - timestamp: 2023-12-12T00:00:00.000Z
49
+ duration: 10
50
+ cpu-util: 10
51
+ carbon: 100
52
+ energy: 100
53
+ requests: 300
54
+ - timestamp: 2023-12-12T00:00:15.000Z
55
+ duration: 10
56
+ cpu-util: 20
57
+ requests: 300
58
+ - timestamp: 2023-12-12T00:00:35.000Z
59
+ duration: 15
60
+ cpu-util: 20
61
+ requests: 400
62
+ child-2:
63
+ inputs:
64
+ - timestamp: 2023-12-12T00:00:00.000Z
65
+ duration: 10
66
+ cpu-util: 10
67
+ requests: 300
68
+ - timestamp: 2023-12-12T00:00:10.000Z
69
+ duration: 30
70
+ cpu-util: 20
71
+ requests: 380
72
+ - timestamp: 2023-12-12T00:00:50.000Z
73
+ duration: 20
74
+ cpu-util: 20
75
+ requests: 380