@grnsft/if 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/.devcontainer/devcontainer.json +38 -0
  2. package/.editorconfig +8 -0
  3. package/.env.example +9 -0
  4. package/.eslintignore +4 -0
  5. package/.eslintrc.json +8 -0
  6. package/.github/ISSUE_TEMPLATE/agenda.md +36 -0
  7. package/.github/ISSUE_TEMPLATE/blank-issue.md +10 -0
  8. package/.github/ISSUE_TEMPLATE/feedback.md +42 -0
  9. package/.github/ISSUE_TEMPLATE/model-plugin.md +63 -0
  10. package/.github/ISSUE_TEMPLATE/user-story.md +10 -0
  11. package/.github/PULL_REQUEST_TEMPLATE.md +21 -0
  12. package/.github/workflows/nodejs-ci.yml +34 -0
  13. package/.gitmodules +3 -0
  14. package/.prettierrc.js +3 -0
  15. package/CONTRIBUTING.md +194 -0
  16. package/LICENSE +21 -0
  17. package/Makefile +16 -0
  18. package/README.md +67 -0
  19. package/build/__mocks__/azure/index.d.ts +11 -0
  20. package/build/__mocks__/azure/index.js +132 -0
  21. package/build/__mocks__/boavizta/countries.json +138 -0
  22. package/build/__mocks__/boavizta/instance_types.json +625 -0
  23. package/build/__mocks__/boavizta/providers.json +1 -0
  24. package/build/__mocks__/fs/index.d.ts +3 -0
  25. package/build/__mocks__/fs/index.js +56 -0
  26. package/build/__mocks__/model-universe/index.d.ts +33 -0
  27. package/build/__mocks__/model-universe/index.js +68 -0
  28. package/build/__mocks__/watt-time/data.json +119 -0
  29. package/build/__tests__/integration/ompl/index.test.d.ts +1 -0
  30. package/build/__tests__/integration/ompl/index.test.js +61 -0
  31. package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +1 -0
  32. package/build/__tests__/unit/lib/azure-importer/index.test.js +152 -0
  33. package/build/__tests__/unit/lib/boavizta/index.test.d.ts +1 -0
  34. package/build/__tests__/unit/lib/boavizta/index.test.js +579 -0
  35. package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +1 -0
  36. package/build/__tests__/unit/lib/case-studies/aveva.test.js +36 -0
  37. package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +1 -0
  38. package/build/__tests__/unit/lib/case-studies/emem.test.js +108 -0
  39. package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +1 -0
  40. package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +53 -0
  41. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +1 -0
  42. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +23 -0
  43. package/build/__tests__/unit/lib/ccf/index.test.d.ts +1 -0
  44. package/build/__tests__/unit/lib/ccf/index.test.js +223 -0
  45. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +1 -0
  46. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +73 -0
  47. package/build/__tests__/unit/lib/sci/index.test.d.ts +1 -0
  48. package/build/__tests__/unit/lib/sci/index.test.js +106 -0
  49. package/build/__tests__/unit/lib/sci-e/index.test.d.ts +1 -0
  50. package/build/__tests__/unit/lib/sci-e/index.test.js +30 -0
  51. package/build/__tests__/unit/lib/sci-m/index.test.d.ts +1 -0
  52. package/build/__tests__/unit/lib/sci-m/index.test.js +58 -0
  53. package/build/__tests__/unit/lib/sci-o/index.test.d.ts +1 -0
  54. package/build/__tests__/unit/lib/sci-o/index.test.js +42 -0
  55. package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +1 -0
  56. package/build/__tests__/unit/lib/shell-imp/index.test.js +21 -0
  57. package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +1 -0
  58. package/build/__tests__/unit/lib/tdp-finder/index.test.js +62 -0
  59. package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +1 -0
  60. package/build/__tests__/unit/lib/teads-aws/index.test.js +170 -0
  61. package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +1 -0
  62. package/build/__tests__/unit/lib/teads-curve/index.test.js +146 -0
  63. package/build/__tests__/unit/lib/watt-time/index.test.d.ts +1 -0
  64. package/build/__tests__/unit/lib/watt-time/index.test.js +106 -0
  65. package/build/__tests__/unit/util/args.test.d.ts +1 -0
  66. package/build/__tests__/unit/util/args.test.js +92 -0
  67. package/build/__tests__/unit/util/models-universe.test.d.ts +1 -0
  68. package/build/__tests__/unit/util/models-universe.test.js +211 -0
  69. package/build/__tests__/unit/util/observatory.test.d.ts +1 -0
  70. package/build/__tests__/unit/util/observatory.test.js +91 -0
  71. package/build/__tests__/unit/util/supercomputer.test.d.ts +1 -0
  72. package/build/__tests__/unit/util/supercomputer.test.js +231 -0
  73. package/build/__tests__/unit/util/yaml.test.d.ts +1 -0
  74. package/build/__tests__/unit/util/yaml.test.js +59 -0
  75. package/build/config/config.d.ts +32 -0
  76. package/build/config/config.js +74 -0
  77. package/build/config/index.d.ts +2 -0
  78. package/build/config/index.js +8 -0
  79. package/build/config/strings.d.ts +14 -0
  80. package/build/config/strings.js +30 -0
  81. package/build/index.d.ts +1 -0
  82. package/build/index.js +46 -0
  83. package/build/lib/azure-importer/index.d.ts +55 -0
  84. package/build/lib/azure-importer/index.js +314 -0
  85. package/build/lib/boavizta/index.d.ts +53 -0
  86. package/build/lib/boavizta/index.js +254 -0
  87. package/build/lib/case-studies/aveva-model.d.ts +29 -0
  88. package/build/lib/case-studies/aveva-model.js +53 -0
  89. package/build/lib/case-studies/emem-model.d.ts +42 -0
  90. package/build/lib/case-studies/emem-model.js +93 -0
  91. package/build/lib/case-studies/eshoppen-model.d.ts +24 -0
  92. package/build/lib/case-studies/eshoppen-model.js +123 -0
  93. package/build/lib/case-studies/index.d.ts +4 -0
  94. package/build/lib/case-studies/index.js +21 -0
  95. package/build/lib/case-studies/sci-accenture-model.d.ts +10 -0
  96. package/build/lib/case-studies/sci-accenture-model.js +37 -0
  97. package/build/lib/ccf/aws-embodied.json +5591 -0
  98. package/build/lib/ccf/aws-instances.json +21116 -0
  99. package/build/lib/ccf/aws-use.json +79 -0
  100. package/build/lib/ccf/azure-embodied.json +6547 -0
  101. package/build/lib/ccf/azure-instances.json +8332 -0
  102. package/build/lib/ccf/azure-use.json +58 -0
  103. package/build/lib/ccf/gcp-embodied.json +3049 -0
  104. package/build/lib/ccf/gcp-instances.json +3880 -0
  105. package/build/lib/ccf/gcp-use.json +58 -0
  106. package/build/lib/ccf/index.d.ts +63 -0
  107. package/build/lib/ccf/index.js +338 -0
  108. package/build/lib/cloud-instance-metadata/aws-instances.json +1 -0
  109. package/build/lib/cloud-instance-metadata/azure-instances.json +1 -0
  110. package/build/lib/cloud-instance-metadata/index.d.ts +15 -0
  111. package/build/lib/cloud-instance-metadata/index.js +104 -0
  112. package/build/lib/index.d.ts +15 -0
  113. package/build/lib/index.js +32 -0
  114. package/build/lib/interfaces/ccf.d.ts +19 -0
  115. package/build/lib/interfaces/ccf.js +3 -0
  116. package/build/lib/interfaces/index.d.ts +7 -0
  117. package/build/lib/interfaces/index.js +18 -0
  118. package/build/lib/sci/index.d.ts +13 -0
  119. package/build/lib/sci/index.js +131 -0
  120. package/build/lib/sci-e/index.d.ts +38 -0
  121. package/build/lib/sci-e/index.js +85 -0
  122. package/build/lib/sci-m/index.d.ts +10 -0
  123. package/build/lib/sci-m/index.js +124 -0
  124. package/build/lib/sci-o/index.d.ts +17 -0
  125. package/build/lib/sci-o/index.js +52 -0
  126. package/build/lib/shell-imp/index.d.ts +32 -0
  127. package/build/lib/shell-imp/index.js +82 -0
  128. package/build/lib/tdp-finder/index.d.ts +19 -0
  129. package/build/lib/tdp-finder/index.js +98 -0
  130. package/build/lib/teads-aws/aws-embodied.json +1 -0
  131. package/build/lib/teads-aws/aws-instances.json +1 -0
  132. package/build/lib/teads-aws/index.d.ts +58 -0
  133. package/build/lib/teads-aws/index.js +208 -0
  134. package/build/lib/teads-curve/index.d.ts +52 -0
  135. package/build/lib/teads-curve/index.js +158 -0
  136. package/build/lib/watt-time/index.d.ts +18 -0
  137. package/build/lib/watt-time/index.js +204 -0
  138. package/build/types/azure-importer.d.ts +29 -0
  139. package/build/types/azure-importer.js +3 -0
  140. package/build/types/boavizta.d.ts +7 -0
  141. package/build/types/boavizta.js +3 -0
  142. package/build/types/common.d.ts +7 -0
  143. package/build/types/common.js +9 -0
  144. package/build/types/impl.d.ts +40 -0
  145. package/build/types/impl.js +3 -0
  146. package/build/types/models-universe.d.ts +24 -0
  147. package/build/types/models-universe.js +3 -0
  148. package/build/types/process-args.d.ts +7 -0
  149. package/build/types/process-args.js +3 -0
  150. package/build/types/supercomputer.d.ts +4 -0
  151. package/build/types/supercomputer.js +3 -0
  152. package/build/util/args.d.ts +8 -0
  153. package/build/util/args.js +48 -0
  154. package/build/util/errors.d.ts +6 -0
  155. package/build/util/errors.js +22 -0
  156. package/build/util/helpers.d.ts +4 -0
  157. package/build/util/helpers.js +18 -0
  158. package/build/util/models-universe.d.ts +28 -0
  159. package/build/util/models-universe.js +95 -0
  160. package/build/util/observatory.d.ts +20 -0
  161. package/build/util/observatory.js +31 -0
  162. package/build/util/supercomputer.d.ts +30 -0
  163. package/build/util/supercomputer.js +109 -0
  164. package/build/util/validations.d.ts +25 -0
  165. package/build/util/validations.js +52 -0
  166. package/build/util/yaml.d.ts +13 -0
  167. package/build/util/yaml.js +36 -0
  168. package/coverage/clover.xml +1172 -0
  169. package/coverage/coverage-final.json +27 -0
  170. package/coverage/lcov-report/base.css +224 -0
  171. package/coverage/lcov-report/block-navigation.js +87 -0
  172. package/coverage/lcov-report/config/config.ts.html +310 -0
  173. package/coverage/lcov-report/config/index.html +146 -0
  174. package/coverage/lcov-report/config/index.ts.html +91 -0
  175. package/coverage/lcov-report/config/strings.ts.html +118 -0
  176. package/coverage/lcov-report/favicon.png +0 -0
  177. package/coverage/lcov-report/index.html +341 -0
  178. package/coverage/lcov-report/lib/boavizta/index.html +116 -0
  179. package/coverage/lcov-report/lib/boavizta/index.ts.html +1171 -0
  180. package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +277 -0
  181. package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +439 -0
  182. package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +550 -0
  183. package/coverage/lcov-report/lib/case-studies/index.html +176 -0
  184. package/coverage/lcov-report/lib/case-studies/index.ts.html +97 -0
  185. package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +232 -0
  186. package/coverage/lcov-report/lib/ccf/index.html +116 -0
  187. package/coverage/lcov-report/lib/ccf/index.ts.html +1339 -0
  188. package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +116 -0
  189. package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +370 -0
  190. package/coverage/lcov-report/lib/index.html +116 -0
  191. package/coverage/lcov-report/lib/index.ts.html +121 -0
  192. package/coverage/lcov-report/lib/sci/index.html +116 -0
  193. package/coverage/lcov-report/lib/sci/index.ts.html +571 -0
  194. package/coverage/lcov-report/lib/sci-e/index.html +116 -0
  195. package/coverage/lcov-report/lib/sci-e/index.ts.html +403 -0
  196. package/coverage/lcov-report/lib/sci-m/index.html +116 -0
  197. package/coverage/lcov-report/lib/sci-m/index.ts.html +487 -0
  198. package/coverage/lcov-report/lib/sci-o/index.html +116 -0
  199. package/coverage/lcov-report/lib/sci-o/index.ts.html +265 -0
  200. package/coverage/lcov-report/lib/shell-imp/index.html +116 -0
  201. package/coverage/lcov-report/lib/shell-imp/index.ts.html +376 -0
  202. package/coverage/lcov-report/lib/teads-aws/index.html +116 -0
  203. package/coverage/lcov-report/lib/teads-aws/index.ts.html +823 -0
  204. package/coverage/lcov-report/lib/teads-curve/index.html +116 -0
  205. package/coverage/lcov-report/lib/teads-curve/index.ts.html +625 -0
  206. package/coverage/lcov-report/lib/watt-time/index.html +116 -0
  207. package/coverage/lcov-report/lib/watt-time/index.ts.html +829 -0
  208. package/coverage/lcov-report/prettify.css +1 -0
  209. package/coverage/lcov-report/prettify.js +2 -0
  210. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  211. package/coverage/lcov-report/sorter.js +196 -0
  212. package/coverage/lcov-report/types/common.ts.html +109 -0
  213. package/coverage/lcov-report/types/index.html +116 -0
  214. package/coverage/lcov-report/util/args.ts.html +244 -0
  215. package/coverage/lcov-report/util/index.html +176 -0
  216. package/coverage/lcov-report/util/models-universe.ts.html +679 -0
  217. package/coverage/lcov-report/util/observatory.ts.html +229 -0
  218. package/coverage/lcov-report/util/supercomputer.ts.html +466 -0
  219. package/coverage/lcov-report/util/yaml.ts.html +193 -0
  220. package/coverage/lcov.info +2094 -0
  221. package/docs/implementations/tdp-finder.md +36 -0
  222. package/examples/impls/case-studies/accenture.yml +155 -0
  223. package/examples/impls/case-studies/aveva.yaml +48 -0
  224. package/examples/impls/case-studies/azure-yassine.yaml +67 -0
  225. package/examples/impls/case-studies/boavizta.yml +26 -0
  226. package/examples/impls/case-studies/dow_msft.yml +173 -0
  227. package/examples/impls/case-studies/farm-insights.yaml +35 -0
  228. package/examples/impls/case-studies/gsf-website.yaml +93 -0
  229. package/examples/impls/case-studies/msft-eshoppen.yaml +162 -0
  230. package/examples/impls/case-studies/msft-green-ai.yaml +58 -0
  231. package/examples/impls/case-studies/ntt-data-on-premise.yaml +201 -0
  232. package/examples/impls/tdp-finder-test.yml +19 -0
  233. package/examples/impls/test/azure.yml +26 -0
  234. package/examples/impls/test/ccf.yml +19 -0
  235. package/examples/impls/test/complex-pipeline.yml +67 -0
  236. package/examples/impls/test/if-demo.yml +51 -0
  237. package/examples/impls/test/metadata.yml +20 -0
  238. package/examples/impls/test/nesting.yml +65 -0
  239. package/examples/impls/test/sci-e.yml +21 -0
  240. package/examples/impls/test/sci-m.yml +24 -0
  241. package/examples/impls/test/sci-o.yml +28 -0
  242. package/examples/impls/test/sci.yml +27 -0
  243. package/examples/impls/test/shell.yml +18 -0
  244. package/examples/impls/test/toto.yaml +22 -0
  245. package/examples/ompls/azure.yml +145 -0
  246. package/examples/ompls/ccf.yml +27 -0
  247. package/examples/ompls/complex-pipeline.yml +105 -0
  248. package/examples/ompls/full-sci.yml +64 -0
  249. package/examples/ompls/if-demo.yml +493 -0
  250. package/examples/ompls/metadata.yml +29 -0
  251. package/examples/ompls/nesting.yml +107 -0
  252. package/examples/ompls/sci-e.yml +23 -0
  253. package/examples/ompls/sci-m.yml +33 -0
  254. package/examples/ompls/sci-o.yml +29 -0
  255. package/examples/ompls/sci.yml +36 -0
  256. package/examples/ompls/shell.yml +23 -0
  257. package/jest.config.js +14 -0
  258. package/package.json +71 -0
  259. package/scripts/impact-test.sh +12 -0
  260. package/src/__mocks__/boavizta/countries.json +138 -0
  261. package/src/__mocks__/boavizta/instance_types.json +625 -0
  262. package/src/__mocks__/boavizta/providers.json +1 -0
  263. package/src/__mocks__/watt-time/data.json +119 -0
  264. package/src/config/units.yaml +125 -0
  265. package/src/lib/ccf/aws-embodied.json +5591 -0
  266. package/src/lib/ccf/aws-instances.json +21116 -0
  267. package/src/lib/ccf/aws-use.json +79 -0
  268. package/src/lib/ccf/azure-embodied.json +6547 -0
  269. package/src/lib/ccf/azure-instances.json +8332 -0
  270. package/src/lib/ccf/azure-use.json +58 -0
  271. package/src/lib/ccf/gcp-embodied.json +3049 -0
  272. package/src/lib/ccf/gcp-instances.json +3880 -0
  273. package/src/lib/ccf/gcp-use.json +58 -0
  274. package/src/lib/cloud-instance-metadata/aws-instances.json +1 -0
  275. package/src/lib/cloud-instance-metadata/azure-instances.json +1 -0
  276. package/src/lib/shell-imp/sampler +30 -0
  277. package/src/lib/tdp-finder/README.md +7 -0
  278. package/src/lib/tdp-finder/boavizta_data.csv +1768 -0
  279. package/src/lib/tdp-finder/data.csv +4460 -0
  280. package/src/lib/tdp-finder/data2.csv +2162 -0
  281. package/src/lib/teads-aws/aws-embodied.json +1 -0
  282. package/src/lib/teads-aws/aws-instances.json +1 -0
  283. package/tsconfig.test.json +39 -0
  284. package/tsconfig.tsbuildinfo +1 -0
  285. package/yarn-error.log +5854 -0
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WattTimeGridEmissions = void 0;
4
+ const axios_1 = require("axios");
5
+ const dayjs = require("dayjs");
6
+ const config_1 = require("../../config");
7
+ const { MODEL_IDS } = config_1.CONFIG;
8
+ const { WATT_TIME } = MODEL_IDS;
9
+ class WattTimeGridEmissions {
10
+ constructor() {
11
+ this.authParams = undefined;
12
+ this.token = '';
13
+ this.baseUrl = 'https://api2.watttime.org/v2';
14
+ }
15
+ async authenticate(authParams) {
16
+ this.token = 'token' in authParams ? authParams['token'] : '';
17
+ if (this.token.startsWith('ENV_')) {
18
+ this.token = process.env[this.token.slice(4)] ?? '';
19
+ }
20
+ if (this.token === '') {
21
+ // Extracting username and password from authParams
22
+ let username = 'username' in authParams ? authParams['username'] : '';
23
+ let password = 'password' in authParams ? authParams['password'] : '';
24
+ // if username or password is ENV_<env_var_name>, then extract the value from the environment variable
25
+ if (username.startsWith('ENV_')) {
26
+ username = process.env[username.slice(4)] ?? '';
27
+ }
28
+ if (password.startsWith('ENV_')) {
29
+ password = process.env[password.slice(4)] ?? '';
30
+ }
31
+ // WattTime API requires username and password / token
32
+ if (username === '' || password === '') {
33
+ throw new Error('Missing username or password & token');
34
+ }
35
+ // Login to WattTime API to get a token
36
+ const tokenResponse = await axios_1.default.get(`${this.baseUrl}/login`, {
37
+ auth: {
38
+ username,
39
+ password,
40
+ },
41
+ });
42
+ if (tokenResponse === undefined ||
43
+ tokenResponse.data === undefined ||
44
+ !('token' in tokenResponse.data)) {
45
+ throw new Error('Missing token in response. Invalid credentials provided.');
46
+ }
47
+ this.token = tokenResponse.data.token;
48
+ }
49
+ }
50
+ async execute(inputs) {
51
+ if (!Array.isArray(inputs)) {
52
+ throw new Error('inputs should be an array');
53
+ }
54
+ // validate inputs for location data + timestamp + duration
55
+ this.validateinputs(inputs);
56
+ // determine the earliest start and total duration of all input blocks
57
+ const { startTime, fetchDuration } = this.determineinputStartEnd(inputs);
58
+ // fetch data from WattTime API for the entire duration
59
+ const wattimedata = await this.fetchData({
60
+ timestamp: startTime.format(),
61
+ duration: fetchDuration,
62
+ ...inputs[0],
63
+ });
64
+ // for each input block, calculate the average emission
65
+ inputs.map((input) => {
66
+ const inputStart = dayjs(input.timestamp);
67
+ const inputEnd = inputStart.add(input.duration, 'seconds');
68
+ const { datapoints, data } = this.getWattTimeDataForDuration(wattimedata, inputStart, inputEnd);
69
+ const emissionSum = data.reduce((a, b) => a + b, 0);
70
+ if (datapoints === 0) {
71
+ throw new Error('Did not receive data from WattTime API for the input block.');
72
+ }
73
+ input['grid-carbon-intensity'] = emissionSum / datapoints;
74
+ });
75
+ return inputs;
76
+ }
77
+ getWattTimeDataForDuration(wattimedata, inputStart, inputEnd) {
78
+ let datapoints = 0;
79
+ const data = wattimedata.map((data) => {
80
+ // WattTime API returns full data for the entire duration.
81
+ // if the data point is before the input start, ignore it
82
+ if (dayjs(data.point_time).isBefore(inputStart)) {
83
+ return 0;
84
+ }
85
+ // if the data point is after the input end, ignore it.
86
+ // if the data point is exactly the same as the input end, ignore it
87
+ if (dayjs(data.point_time).isAfter(inputEnd) ||
88
+ dayjs(data.point_time).format() === dayjs(inputEnd).format()) {
89
+ return 0;
90
+ }
91
+ // lbs/MWh to Kg/MWh by dividing by 0.453592 (0.453592 Kg/lbs)
92
+ // (Kg/MWh == g/kWh)
93
+ // convert to kg/KWh by dividing by 1000. (1MWh = 1000KWh)
94
+ // convert to g/KWh by multiplying by 1000. (1Kg = 1000g)
95
+ // hence each other cancel out and g/KWh is the same as kg/MWh
96
+ const grid_emission = data.value / 0.45359237;
97
+ datapoints += 1;
98
+ return grid_emission;
99
+ });
100
+ return { datapoints, data };
101
+ }
102
+ validateinputs(inputs) {
103
+ inputs.forEach((input) => {
104
+ if (!('location' in input)) {
105
+ const { latitude, longitude } = this.getLatitudeLongitudeFrominput(input);
106
+ if (isNaN(latitude) || isNaN(longitude)) {
107
+ throw new Error('latitude or longitude is not a number');
108
+ }
109
+ }
110
+ if (!('timestamp' in input)) {
111
+ throw new Error('timestamp is missing');
112
+ }
113
+ if (!('duration' in input)) {
114
+ throw new Error('duration is missing');
115
+ }
116
+ });
117
+ }
118
+ getLatitudeLongitudeFrominput(input) {
119
+ const location = input['location'].split(','); //split location into latitude and longitude
120
+ if (location.length !== 2) {
121
+ throw new Error('location should be a comma separated string of latitude and longitude');
122
+ }
123
+ if (location[0] === '' || location[1] === '') {
124
+ throw new Error('latitude or longitude is missing');
125
+ }
126
+ if (location[0] === '0' || location[1] === '0') {
127
+ throw new Error('latitude or longitude is missing');
128
+ }
129
+ const latitude = parseFloat(location[0]); //convert latitude to float
130
+ const longitude = parseFloat(location[1]); //convert longitude to float
131
+ return { latitude, longitude };
132
+ }
133
+ determineinputStartEnd(inputs) {
134
+ // largest possible start time
135
+ let starttime = dayjs('9999-12-31');
136
+ // smallest possible end time
137
+ let endtime = dayjs('1970-01-01');
138
+ inputs.forEach((input) => {
139
+ const duration = input.duration;
140
+ // if the input timestamp is before the current starttime, set it as the new starttime
141
+ starttime = dayjs(input.timestamp).isBefore(starttime)
142
+ ? dayjs(input.timestamp)
143
+ : starttime;
144
+ // if the input timestamp + duration is after the current endtime, set it as the new endtime
145
+ endtime = dayjs(input.timestamp).add(duration, 'seconds').isAfter(endtime)
146
+ ? dayjs(input.timestamp).add(duration, 'seconds')
147
+ : endtime;
148
+ });
149
+ const fetchDuration = endtime.diff(starttime, 'seconds');
150
+ if (fetchDuration > 32 * 24 * 60 * 60) {
151
+ throw new Error('duration is too long.WattTime API only supports up to 32 days. All inputs must be within 32 days of each other. Duration of ' +
152
+ fetchDuration +
153
+ ' seconds is too long.');
154
+ }
155
+ return { startTime: starttime, fetchDuration };
156
+ }
157
+ async fetchData(input) {
158
+ const duration = input.duration;
159
+ // WattTime API only supports up to 32 days
160
+ if (duration > 32 * 24 * 60 * 60) {
161
+ throw new Error('duration is too long');
162
+ }
163
+ const { latitude, longitude } = this.getLatitudeLongitudeFrominput(input);
164
+ const params = {
165
+ latitude: latitude,
166
+ longitude: longitude,
167
+ starttime: dayjs(input.timestamp).format('YYYY-MM-DDTHH:mm:ssZ'),
168
+ endtime: dayjs(input.timestamp).add(duration, 'seconds'),
169
+ };
170
+ const result = await axios_1.default
171
+ .get(`${this.baseUrl}/data`, {
172
+ params,
173
+ headers: {
174
+ Authorization: `Bearer ${this.token}`,
175
+ },
176
+ })
177
+ .catch(e => {
178
+ throw new Error('Error fetching data from WattTime API.' + e);
179
+ });
180
+ if (result.status !== 200) {
181
+ throw new Error('Error fetching data from WattTime API.' + result.status);
182
+ }
183
+ if (!('data' in result) || !Array.isArray(result.data)) {
184
+ throw new Error('Invalid response from WattTime API.');
185
+ }
186
+ return result.data.sort((a, b) => {
187
+ return dayjs(a.point_time).unix() > dayjs(b.point_time).unix() ? 1 : -1;
188
+ });
189
+ }
190
+ async configure(name, staticParams) {
191
+ this.staticParams = staticParams;
192
+ this.name = name;
193
+ if (!staticParams) {
194
+ throw new Error('Missing staticParams');
195
+ }
196
+ await this.authenticate(staticParams);
197
+ return this;
198
+ }
199
+ modelIdentifier() {
200
+ return WATT_TIME;
201
+ }
202
+ }
203
+ exports.WattTimeGridEmissions = WattTimeGridEmissions;
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dhdHQtdGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBMEI7QUFDMUIsK0JBQStCO0FBSS9CLHlDQUFvQztBQUlwQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNCLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxTQUFTLENBQUM7QUFFOUIsTUFBYSxxQkFBcUI7SUFBbEM7UUFDRSxlQUFVLEdBQXVCLFNBQVMsQ0FBQztRQUMzQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR1gsWUFBTyxHQUFHLDhCQUE4QixDQUFDO0lBc08zQyxDQUFDO0lBcE9DLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBa0I7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBRSxVQUFVLENBQUMsT0FBTyxDQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyRDtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7WUFDckIsbURBQW1EO1lBQ25ELElBQUksUUFBUSxHQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxVQUFVLENBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JFLElBQUksUUFBUSxHQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxVQUFVLENBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxD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QUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzRTtRQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDekMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FDYixJQUFZLEVBQ1osWUFBZ0M7UUFFaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDekM7UUFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQTNPRCxzREEyT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0ICogYXMgZGF5anMgZnJvbSAnZGF5anMnO1xuXG5pbXBvcnQge0lPdXRwdXRNb2RlbEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7Q09ORklHfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5pbXBvcnQge0tleVZhbHVlUGFpcn0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuY29uc3Qge01PREVMX0lEU30gPSBDT05GSUc7XG5jb25zdCB7V0FUVF9USU1FfSA9IE1PREVMX0lEUztcblxuZXhwb3J0IGNsYXNzIFdhdHRUaW1lR3JpZEVtaXNzaW9ucyBpbXBsZW1lbnRzIElPdXRwdXRNb2RlbEludGVyZmFjZSB7XG4gIGF1dGhQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgdG9rZW4gPSAnJztcbiAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQ7XG4gIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYmFzZVVybCA9ICdodHRwczovL2FwaTIud2F0dHRpbWUub3JnL3YyJztcblxuICBhc3luYyBhdXRoZW50aWNhdGUoYXV0aFBhcmFtczogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50b2tlbiA9ICd0b2tlbicgaW4gYXV0aFBhcmFtcyA/IChhdXRoUGFyYW1zWyd0b2tlbiddIGFzIHN0cmluZykgOiAnJztcbiAgICBpZiAodGhpcy50b2tlbi5zdGFydHNXaXRoKCdFTlZfJykpIHtcbiAgICAgIHRoaXMudG9rZW4gPSBwcm9jZXNzLmVudlt0aGlzLnRva2VuLnNsaWNlKDQpXSA/PyAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW4gPT09ICcnKSB7XG4gICAgICAvLyBFeHRyYWN0aW5nIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmcm9tIGF1dGhQYXJhbXNcbiAgICAgIGxldCB1c2VybmFtZSA9XG4gICAgICAgICd1c2VybmFtZScgaW4gYXV0aFBhcmFtcyA/IChhdXRoUGFyYW1zWyd1c2VybmFtZSddIGFzIHN0cmluZykgOiAnJztcbiAgICAgIGxldCBwYXNzd29yZCA9XG4gICAgICAgICdwYXNzd29yZCcgaW4gYXV0aFBhcmFtcyA/IChhdXRoUGFyYW1zWydwYXNzd29yZCddIGFzIHN0cmluZykgOiAnJztcblxuICAgICAgLy8gaWYgdXNlcm5hbWUgb3IgcGFzc3dvcmQgaXMgRU5WXzxlbnZfdmFyX25hbWU+LCB0aGVuIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgICBpZiAodXNlcm5hbWUuc3RhcnRzV2l0aCgnRU5WXycpKSB7XG4gICAgICAgIHVzZXJuYW1lID0gcHJvY2Vzcy5lbnZbdXNlcm5hbWUuc2xpY2UoNCldID8/ICcnO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFzc3dvcmQuc3RhcnRzV2l0aCgnRU5WXycpKSB7XG4gICAgICAgIHBhc3N3b3JkID0gcHJvY2Vzcy5lbnZbcGFzc3dvcmQuc2xpY2UoNCldID8/ICcnO1xuICAgICAgfVxuXG4gICAgICAvLyAgV2F0dFRpbWUgQVBJIHJlcXVpcmVzIHVzZXJuYW1lIGFuZCBwYXNzd29yZCAvIHRva2VuXG4gICAgICBpZiAodXNlcm5hbWUgPT09ICcnIHx8IHBhc3N3b3JkID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQgJiB0b2tlbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2dpbiB0byBXYXR0VGltZSBBUEkgdG8gZ2V0IGEgdG9rZW5cbiAgICAgIGNvbnN0IHRva2VuUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7dGhpcy5iYXNlVXJsfS9sb2dpbmAsIHtcbiAgICAgICAgYXV0aDoge1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIHRva2VuUmVzcG9uc2UgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0b2tlblJlc3BvbnNlLmRhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAhKCd0b2tlbicgaW4gdG9rZW5SZXNwb25zZS5kYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWlzc2luZyB0b2tlbiBpbiByZXNwb25zZS4gSW52YWxpZCBjcmVkZW50aWFscyBwcm92aWRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2VuID0gdG9rZW5SZXNwb25zZS5kYXRhLnRva2VuO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGUoaW5wdXRzOiBvYmplY3QgfCBvYmplY3RbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dHMgc2hvdWxkIGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIC8vIHZhbGlkYXRlIGlucHV0cyBmb3IgbG9jYXRpb24gZGF0YSArIHRpbWVzdGFtcCArIGR1cmF0aW9uXG4gICAgdGhpcy52YWxpZGF0ZWlucHV0cyhpbnB1dHMpO1xuICAgIC8vIGRldGVybWluZSB0aGUgZWFybGllc3Qgc3RhcnQgYW5kIHRvdGFsIGR1cmF0aW9uIG9mIGFsbCBpbnB1dCBibG9ja3NcbiAgICBjb25zdCB7c3RhcnRUaW1lLCBmZXRjaER1cmF0aW9ufSA9IHRoaXMuZGV0ZXJtaW5laW5wdXRTdGFydEVuZChpbnB1dHMpO1xuICAgIC8vIGZldGNoIGRhdGEgZnJvbSBXYXR0VGltZSBBUEkgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb25cbiAgICBjb25zdCB3YXR0aW1lZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKHtcbiAgICAgIHRpbWVzdGFtcDogc3RhcnRUaW1lLmZvcm1hdCgpLFxuICAgICAgZHVyYXRpb246IGZldGNoRHVyYXRpb24sXG4gICAgICAuLi5pbnB1dHNbMF0sXG4gICAgfSk7XG4gICAgLy8gZm9yIGVhY2ggaW5wdXQgYmxvY2ssIGNhbGN1bGF0ZSB0aGUgYXZlcmFnZSBlbWlzc2lvblxuICAgIGlucHV0cy5tYXAoKGlucHV0OiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U3RhcnQgPSBkYXlqcyhpbnB1dC50aW1lc3RhbXApO1xuICAgICAgY29uc3QgaW5wdXRFbmQgPSBpbnB1dFN0YXJ0LmFkZChpbnB1dC5kdXJhdGlvbiwgJ3NlY29uZHMnKTtcbiAgICAgIGNvbnN0IHtkYXRhcG9pbnRzLCBkYXRhfSA9IHRoaXMuZ2V0V2F0dFRpbWVEYXRhRm9yRHVyYXRpb24oXG4gICAgICAgIHdhdHRpbWVkYXRhLFxuICAgICAgICBpbnB1dFN0YXJ0LFxuICAgICAgICBpbnB1dEVuZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVtaXNzaW9uU3VtID0gZGF0YS5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYiwgMCk7XG4gICAgICBpZiAoZGF0YXBvaW50cyA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0RpZCBub3QgcmVjZWl2ZSBkYXRhIGZyb20gV2F0dFRpbWUgQVBJIGZvciB0aGUgaW5wdXQgYmxvY2suJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaW5wdXRbJ2dyaWQtY2FyYm9uLWludGVuc2l0eSddID0gZW1pc3Npb25TdW0gLyBkYXRhcG9pbnRzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlucHV0cztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V2F0dFRpbWVEYXRhRm9yRHVyYXRpb24oXG4gICAgd2F0dGltZWRhdGE6IEtleVZhbHVlUGFpcltdLFxuICAgIGlucHV0U3RhcnQ6IGRheWpzLkRheWpzLFxuICAgIGlucHV0RW5kOiBkYXlqcy5EYXlqc1xuICApOiB7ZGF0YXBvaW50czogbnVtYmVyOyBkYXRhOiBudW1iZXJbXX0ge1xuICAgIGxldCBkYXRhcG9pbnRzID0gMDtcbiAgICBjb25zdCBkYXRhID0gd2F0dGltZWRhdGEubWFwKChkYXRhOiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIC8vIFdhdHRUaW1lIEFQSSByZXR1cm5zIGZ1bGwgZGF0YSBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbi5cbiAgICAgIC8vIGlmIHRoZSBkYXRhIHBvaW50IGlzIGJlZm9yZSB0aGUgaW5wdXQgc3RhcnQsIGlnbm9yZSBpdFxuICAgICAgaWYgKGRheWpzKGRhdGEucG9pbnRfdGltZSkuaXNCZWZvcmUoaW5wdXRTdGFydCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZGF0YSBwb2ludCBpcyBhZnRlciB0aGUgaW5wdXQgZW5kLCBpZ25vcmUgaXQuXG4gICAgICAvLyBpZiB0aGUgZGF0YSBwb2ludCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBpbnB1dCBlbmQsIGlnbm9yZSBpdFxuICAgICAgaWYgKFxuICAgICAgICBkYXlqcyhkYXRhLnBvaW50X3RpbWUpLmlzQWZ0ZXIoaW5wdXRFbmQpIHx8XG4gICAgICAgIGRheWpzKGRhdGEucG9pbnRfdGltZSkuZm9ybWF0KCkgPT09IGRheWpzKGlucHV0RW5kKS5mb3JtYXQoKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgLy8gbGJzL01XaCB0byBLZy9NV2ggYnkgZGl2aWRpbmcgYnkgMC40NTM1OTIgKDAuNDUzNTkyIEtnL2xicylcbiAgICAgIC8vIChLZy9NV2ggPT0gZy9rV2gpXG4gICAgICAvLyBjb252ZXJ0IHRvIGtnL0tXaCBieSBkaXZpZGluZyBieSAxMDAwLiAoMU1XaCA9IDEwMDBLV2gpXG4gICAgICAvLyBjb252ZXJ0IHRvIGcvS1doIGJ5IG11bHRpcGx5aW5nIGJ5IDEwMDAuICgxS2cgPSAxMDAwZylcbiAgICAgIC8vIGhlbmNlIGVhY2ggb3RoZXIgY2FuY2VsIG91dCBhbmQgZy9LV2ggaXMgdGhlIHNhbWUgYXMga2cvTVdoXG4gICAgICBjb25zdCBncmlkX2VtaXNzaW9uID0gZGF0YS52YWx1ZSAvIDAuNDUzNTkyMzc7XG4gICAgICBkYXRhcG9pbnRzICs9IDE7XG4gICAgICByZXR1cm4gZ3JpZF9lbWlzc2lvbjtcbiAgICB9KTtcbiAgICByZXR1cm4ge2RhdGFwb2ludHMsIGRhdGF9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZWlucHV0cyhpbnB1dHM6IG9iamVjdFtdKSB7XG4gICAgaW5wdXRzLmZvckVhY2goKGlucHV0OiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIGlmICghKCdsb2NhdGlvbicgaW4gaW5wdXQpKSB7XG4gICAgICAgIGNvbnN0IHtsYXRpdHVkZSwgbG9uZ2l0dWRlfSA9IHRoaXMuZ2V0TGF0aXR1ZGVMb25naXR1ZGVGcm9taW5wdXQoaW5wdXQpO1xuICAgICAgICBpZiAoaXNOYU4obGF0aXR1ZGUpIHx8IGlzTmFOKGxvbmdpdHVkZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhdGl0dWRlIG9yIGxvbmdpdHVkZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEoJ3RpbWVzdGFtcCcgaW4gaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZXN0YW1wIGlzIG1pc3NpbmcnKTtcbiAgICAgIH1cbiAgICAgIGlmICghKCdkdXJhdGlvbicgaW4gaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZHVyYXRpb24gaXMgbWlzc2luZycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXRpdHVkZUxvbmdpdHVkZUZyb21pbnB1dChpbnB1dDogS2V5VmFsdWVQYWlyKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBpbnB1dFsnbG9jYXRpb24nXS5zcGxpdCgnLCcpOyAvL3NwbGl0IGxvY2F0aW9uIGludG8gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZVxuICAgIGlmIChsb2NhdGlvbi5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2xvY2F0aW9uIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChsb2NhdGlvblswXSA9PT0gJycgfHwgbG9jYXRpb25bMV0gPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhdGl0dWRlIG9yIGxvbmdpdHVkZSBpcyBtaXNzaW5nJyk7XG4gICAgfVxuICAgIGlmIChsb2NhdGlvblswXSA9PT0gJzAnIHx8IGxvY2F0aW9uWzFdID09PSAnMCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbGF0aXR1ZGUgb3IgbG9uZ2l0dWRlIGlzIG1pc3NpbmcnKTtcbiAgICB9XG4gICAgY29uc3QgbGF0aXR1ZGUgPSBwYXJzZUZsb2F0KGxvY2F0aW9uWzBdKTsgLy9jb252ZXJ0IGxhdGl0dWRlIHRvIGZsb2F0XG4gICAgY29uc3QgbG9uZ2l0dWRlID0gcGFyc2VGbG9hdChsb2NhdGlvblsxXSk7IC8vY29udmVydCBsb25naXR1ZGUgdG8gZmxvYXRcbiAgICByZXR1cm4ge2xhdGl0dWRlLCBsb25naXR1ZGV9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVpbnB1dFN0YXJ0RW5kKGlucHV0czogb2JqZWN0W10pIHtcbiAgICAvLyBsYXJnZXN0IHBvc3NpYmxlIHN0YXJ0IHRpbWVcbiAgICBsZXQgc3RhcnR0aW1lID0gZGF5anMoJzk5OTktMTItMzEnKTtcbiAgICAvLyBzbWFsbGVzdCBwb3NzaWJsZSBlbmQgdGltZVxuICAgIGxldCBlbmR0aW1lID0gZGF5anMoJzE5NzAtMDEtMDEnKTtcbiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQ6IEtleVZhbHVlUGFpcikgPT4ge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBpbnB1dC5kdXJhdGlvbjtcblxuICAgICAgLy8gaWYgdGhlIGlucHV0IHRpbWVzdGFtcCBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgc3RhcnR0aW1lLCBzZXQgaXQgYXMgdGhlIG5ldyBzdGFydHRpbWVcbiAgICAgIHN0YXJ0dGltZSA9IGRheWpzKGlucHV0LnRpbWVzdGFtcCkuaXNCZWZvcmUoc3RhcnR0aW1lKVxuICAgICAgICA/IGRheWpzKGlucHV0LnRpbWVzdGFtcClcbiAgICAgICAgOiBzdGFydHRpbWU7XG5cbiAgICAgIC8vIGlmIHRoZSBpbnB1dCB0aW1lc3RhbXAgKyBkdXJhdGlvbiBpcyBhZnRlciB0aGUgY3VycmVudCBlbmR0aW1lLCBzZXQgaXQgYXMgdGhlIG5ldyBlbmR0aW1lXG4gICAgICBlbmR0aW1lID0gZGF5anMoaW5wdXQudGltZXN0YW1wKS5hZGQoZHVyYXRpb24sICdzZWNvbmRzJykuaXNBZnRlcihlbmR0aW1lKVxuICAgICAgICA/IGRheWpzKGlucHV0LnRpbWVzdGFtcCkuYWRkKGR1cmF0aW9uLCAnc2Vjb25kcycpXG4gICAgICAgIDogZW5kdGltZTtcbiAgICB9KTtcbiAgICBjb25zdCBmZXRjaER1cmF0aW9uID0gZW5kdGltZS5kaWZmKHN0YXJ0dGltZSwgJ3NlY29uZHMnKTtcbiAgICBpZiAoZmV0Y2hEdXJhdGlvbiA+IDMyICogMjQgKiA2MCAqIDYwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdkdXJhdGlvbiBpcyB0b28gbG9uZy5XYXR0VGltZSBBUEkgb25seSBzdXBwb3J0cyB1cCB0byAzMiBkYXlzLiBBbGwgaW5wdXRzIG11c3QgYmUgd2l0aGluIDMyIGRheXMgb2YgZWFjaCBvdGhlci4gRHVyYXRpb24gb2YgJyArXG4gICAgICAgICAgZmV0Y2hEdXJhdGlvbiArXG4gICAgICAgICAgJyBzZWNvbmRzIGlzIHRvbyBsb25nLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7c3RhcnRUaW1lOiBzdGFydHRpbWUsIGZldGNoRHVyYXRpb259O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKGlucHV0OiBLZXlWYWx1ZVBhaXIpOiBQcm9taXNlPEtleVZhbHVlUGFpcltdPiB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpbnB1dC5kdXJhdGlvbjtcbiAgICAvLyBXYXR0VGltZSBBUEkgb25seSBzdXBwb3J0cyB1cCB0byAzMiBkYXlzXG4gICAgaWYgKGR1cmF0aW9uID4gMzIgKiAyNCAqIDYwICogNjApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZHVyYXRpb24gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG4gICAgY29uc3Qge2xhdGl0dWRlLCBsb25naXR1ZGV9ID0gdGhpcy5nZXRMYXRpdHVkZUxvbmdpdHVkZUZyb21pbnB1dChpbnB1dCk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBsYXRpdHVkZTogbGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgIHN0YXJ0dGltZTogZGF5anMoaW5wdXQudGltZXN0YW1wKS5mb3JtYXQoJ1lZWVktTU0tRERUSEg6bW06c3NaJyksXG4gICAgICBlbmR0aW1lOiBkYXlqcyhpbnB1dC50aW1lc3RhbXApLmFkZChkdXJhdGlvbiwgJ3NlY29uZHMnKSxcbiAgICB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF4aW9zXG4gICAgICAuZ2V0KGAke3RoaXMuYmFzZVVybH0vZGF0YWAsIHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIFdhdHRUaW1lIEFQSS4nICsgZSk7XG4gICAgICB9KTtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGEgZnJvbSBXYXR0VGltZSBBUEkuJyArIHJlc3VsdC5zdGF0dXMpO1xuICAgIH1cbiAgICBpZiAoISgnZGF0YScgaW4gcmVzdWx0KSB8fCAhQXJyYXkuaXNBcnJheShyZXN1bHQuZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBmcm9tIFdhdHRUaW1lIEFQSS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZGF5anMoYS5wb2ludF90aW1lKS51bml4KCkgPiBkYXlqcyhiLnBvaW50X3RpbWUpLnVuaXgoKSA/IDEgOiAtMTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxJT3V0cHV0TW9kZWxJbnRlcmZhY2U+IHtcbiAgICB0aGlzLnN0YXRpY1BhcmFtcyA9IHN0YXRpY1BhcmFtcztcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIGlmICghc3RhdGljUGFyYW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgc3RhdGljUGFyYW1zJyk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKHN0YXRpY1BhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlbElkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gV0FUVF9USU1FO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ export type AzureOutputs = {
2
+ timestamps: string[];
3
+ cpu_utils: string[];
4
+ memAvailable: string[];
5
+ };
6
+ export type AzureInputs = {
7
+ resourceGroupName: string;
8
+ vmName: string;
9
+ subscriptionId: string;
10
+ timespan: string;
11
+ interval: string;
12
+ aggregation: string;
13
+ timestamp: string;
14
+ duration: string;
15
+ window: string;
16
+ };
17
+ export type GetMetricsParams = {
18
+ subscriptionId: string;
19
+ resourceGroupName: string;
20
+ timespan: string;
21
+ interval: string;
22
+ aggregation: string;
23
+ vmName: string;
24
+ };
25
+ export type AzureMetadataOutputs = {
26
+ location: string;
27
+ instanceType: string;
28
+ totalMemoryGB: string;
29
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp1cmUtaW1wb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvYXp1cmUtaW1wb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEF6dXJlT3V0cHV0cyA9IHtcbiAgdGltZXN0YW1wczogc3RyaW5nW107XG4gIGNwdV91dGlsczogc3RyaW5nW107XG4gIG1lbUF2YWlsYWJsZTogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBBenVyZUlucHV0cyA9IHtcbiAgcmVzb3VyY2VHcm91cE5hbWU6IHN0cmluZztcbiAgdm1OYW1lOiBzdHJpbmc7XG4gIHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XG4gIHRpbWVzcGFuOiBzdHJpbmc7XG4gIGludGVydmFsOiBzdHJpbmc7XG4gIGFnZ3JlZ2F0aW9uOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBkdXJhdGlvbjogc3RyaW5nO1xuICB3aW5kb3c6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdldE1ldHJpY3NQYXJhbXMgPSB7XG4gIHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XG4gIHJlc291cmNlR3JvdXBOYW1lOiBzdHJpbmc7XG4gIHRpbWVzcGFuOiBzdHJpbmc7XG4gIGludGVydmFsOiBzdHJpbmc7XG4gIGFnZ3JlZ2F0aW9uOiBzdHJpbmc7XG4gIHZtTmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQXp1cmVNZXRhZGF0YU91dHB1dHMgPSB7XG4gIGxvY2F0aW9uOiBzdHJpbmc7XG4gIGluc3RhbmNlVHlwZTogc3RyaW5nO1xuICB0b3RhbE1lbW9yeUdCOiBzdHJpbmc7XG59O1xuIl19
@@ -0,0 +1,7 @@
1
+ export interface IBoaviztaUsageSCI {
2
+ e: number;
3
+ m: number;
4
+ }
5
+ export type BoaviztaInstanceTypes = {
6
+ [key: string]: string[];
7
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hdml6dGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvYm9hdml6dGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSUJvYXZpenRhVXNhZ2VTQ0kge1xuICBlOiBudW1iZXI7XG4gIG06IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgQm9hdml6dGFJbnN0YW5jZVR5cGVzID0ge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmdbXTtcbn07XG4iXX0=
@@ -0,0 +1,7 @@
1
+ export type KeyValuePair = {
2
+ [key: string]: any;
3
+ };
4
+ export declare enum Interpolation {
5
+ SPLINE = "spline",
6
+ LINEAR = "linear"
7
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Interpolation = void 0;
4
+ var Interpolation;
5
+ (function (Interpolation) {
6
+ Interpolation["SPLINE"] = "spline";
7
+ Interpolation["LINEAR"] = "linear";
8
+ })(Interpolation || (exports.Interpolation = Interpolation = {}));
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxJQUFZLGFBR1g7QUFIRCxXQUFZLGFBQWE7SUFDdkIsa0NBQWlCLENBQUE7SUFDakIsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGFBQWEsNkJBQWIsYUFBYSxRQUd4QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEtleVZhbHVlUGFpciA9IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxuZXhwb3J0IGVudW0gSW50ZXJwb2xhdGlvbiB7XG4gIFNQTElORSA9ICdzcGxpbmUnLFxuICBMSU5FQVIgPSAnbGluZWFyJyxcbn1cbiJdfQ==
@@ -0,0 +1,40 @@
1
+ type Tag = {
2
+ kind?: string;
3
+ complexity?: string;
4
+ category?: string;
5
+ };
6
+ type Model = {
7
+ name: string;
8
+ kind?: string;
9
+ verbose?: boolean;
10
+ path?: string;
11
+ };
12
+ export type ModelParams = {
13
+ timestamp: number;
14
+ duration: number;
15
+ [key: string]: any;
16
+ };
17
+ export type Config = {
18
+ [key: string]: any;
19
+ };
20
+ export type Children = {
21
+ [key: string]: {
22
+ pipeline: string[];
23
+ config: Config;
24
+ inputs: ModelParams[];
25
+ children?: Children;
26
+ outputs?: ModelParams[];
27
+ };
28
+ };
29
+ export type Impl = {
30
+ name: string;
31
+ description: string | null | undefined;
32
+ tags: Tag | null | undefined;
33
+ initialize: {
34
+ models: Model[];
35
+ };
36
+ graph: {
37
+ children: Children;
38
+ };
39
+ };
40
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFRhZyA9IHtcbiAga2luZD86IHN0cmluZztcbiAgY29tcGxleGl0eT86IHN0cmluZztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG59O1xuXG50eXBlIE1vZGVsID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICBwYXRoPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTW9kZWxQYXJhbXMgPSB7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWcgPSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIENoaWxkcmVuID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgcGlwZWxpbmU6IHN0cmluZ1tdO1xuICAgIGNvbmZpZzogQ29uZmlnO1xuICAgIGlucHV0czogTW9kZWxQYXJhbXNbXTtcbiAgICBjaGlsZHJlbj86IENoaWxkcmVuO1xuICAgIG91dHB1dHM/OiBNb2RlbFBhcmFtc1tdO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgSW1wbCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdGFnczogVGFnIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgaW5pdGlhbGl6ZToge1xuICAgIG1vZGVsczogTW9kZWxbXTtcbiAgfTtcbiAgZ3JhcGg6IHtcbiAgICBjaGlsZHJlbjogQ2hpbGRyZW47XG4gIH07XG59O1xuIl19
@@ -0,0 +1,24 @@
1
+ import { IOutputModelInterface } from '../lib';
2
+ type InitializeOptions = {
3
+ allocation: string;
4
+ verbose: boolean;
5
+ };
6
+ export type GraphOptions = {
7
+ 'core-units': number;
8
+ 'physical-processor': string;
9
+ };
10
+ export type ImplInitializeModel = {
11
+ config: InitializeOptions;
12
+ name: string;
13
+ model?: string;
14
+ path?: string;
15
+ };
16
+ export type InitalizedModels = {
17
+ [key: string]: (graphOptions: GraphOptions) => Promise<IOutputModelInterface>;
18
+ };
19
+ export type HandModelParams = {
20
+ name: string;
21
+ model?: string;
22
+ path?: string;
23
+ };
24
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL21vZGVscy11bml2ZXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJT3V0cHV0TW9kZWxJbnRlcmZhY2V9IGZyb20gJy4uL2xpYic7XG5cbnR5cGUgSW5pdGlhbGl6ZU9wdGlvbnMgPSB7XG4gIGFsbG9jYXRpb246IHN0cmluZztcbiAgdmVyYm9zZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEdyYXBoT3B0aW9ucyA9IHtcbiAgJ2NvcmUtdW5pdHMnOiBudW1iZXI7XG4gICdwaHlzaWNhbC1wcm9jZXNzb3InOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBJbXBsSW5pdGlhbGl6ZU1vZGVsID0ge1xuICBjb25maWc6IEluaXRpYWxpemVPcHRpb25zO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgSW5pdGFsaXplZE1vZGVscyA9IHtcbiAgW2tleTogc3RyaW5nXTogKGdyYXBoT3B0aW9uczogR3JhcGhPcHRpb25zKSA9PiBQcm9taXNlPElPdXRwdXRNb2RlbEludGVyZmFjZT47XG59O1xuXG5leHBvcnQgdHlwZSBIYW5kTW9kZWxQYXJhbXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59O1xuIl19
@@ -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,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,48 @@
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 = () => (0, ts_command_line_args_1.parse)(ARGS);
18
+ /**
19
+ * Prepends process path to fiven `filePath`.
20
+ * @private
21
+ */
22
+ const prependFullFilePath = (filePath) => {
23
+ const processRunningPath = process.cwd();
24
+ return path.normalize(`${processRunningPath}/${filePath}`);
25
+ };
26
+ /**
27
+ * Parses process argument, if it's `yaml` file, then returns it.
28
+ * Otherwise throws error.
29
+ */
30
+ const parseProcessArgument = () => {
31
+ const { impl, ompl, help } = validateAndParseProcessArgs();
32
+ if (help) {
33
+ console.log(HELP);
34
+ return;
35
+ }
36
+ if (impl) {
37
+ if ((0, yaml_1.checkIfFileIsYaml)(impl)) {
38
+ return {
39
+ inputPath: prependFullFilePath(impl),
40
+ ...(ompl && { outputPath: prependFullFilePath(ompl) }),
41
+ };
42
+ }
43
+ throw new CliInputError(FILE_IS_NOT_YAML);
44
+ }
45
+ throw new CliInputError(IMPL_IS_MISSING);
46
+ };
47
+ exports.parseProcessArgument = parseProcessArgument;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FyZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLCtEQUEyQztBQUUzQyxpQ0FBeUM7QUFDekMscUNBQWdDO0FBRWhDLHNDQUEwQztBQUkxQyxNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9CLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDeEIsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxNQUFNLENBQUM7QUFFNUIsTUFBTSxFQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFcEQ7OztHQUdHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDRCQUFLLEVBQW9CLElBQUksQ0FBQyxDQUFDO0FBRXpFOzs7R0FHRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFekMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsa0JBQWtCLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtJQUN2QyxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRywyQkFBMkIsRUFBRSxDQUFDO0lBRXpELElBQUksSUFBSSxFQUFFO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPO0tBQ1I7SUFFRCxJQUFJLElBQUksRUFBRTtRQUNSLElBQUksSUFBQSx3QkFBaUIsRUFBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixPQUFPO2dCQUNMLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQzthQUNyRCxDQUFDO1NBQ0g7UUFFRCxNQUFNLElBQUksYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDM0M7SUFFRCxNQUFNLElBQUksYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQXBCVyxRQUFBLG9CQUFvQix3QkFvQi9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7cGFyc2V9IGZyb20gJ3RzLWNvbW1hbmQtbGluZS1hcmdzJztcblxuaW1wb3J0IHtjaGVja0lmRmlsZUlzWWFtbH0gZnJvbSAnLi95YW1sJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7Q09ORklHLCBTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbXBvcnQge2ltcGFjdFByb2Nlc3NBcmdzfSBmcm9tICcuLi90eXBlcy9wcm9jZXNzLWFyZ3MnO1xuXG5jb25zdCB7Q2xpSW5wdXRFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtpbXBhY3R9ID0gQ09ORklHO1xuY29uc3Qge0FSR1MsIEhFTFB9ID0gaW1wYWN0O1xuXG5jb25zdCB7RklMRV9JU19OT1RfWUFNTCwgSU1QTF9JU19NSVNTSU5HfSA9IFNUUklOR1M7XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb2Nlc3MgYXJndW1lbnRzXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB2YWxpZGF0ZUFuZFBhcnNlUHJvY2Vzc0FyZ3MgPSAoKSA9PiBwYXJzZTxpbXBhY3RQcm9jZXNzQXJncz4oQVJHUyk7XG5cbi8qKlxuICogUHJlcGVuZHMgcHJvY2VzcyBwYXRoIHRvIGZpdmVuIGBmaWxlUGF0aGAuXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBwcmVwZW5kRnVsbEZpbGVQYXRoID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcHJvY2Vzc1J1bm5pbmdQYXRoID0gcHJvY2Vzcy5jd2QoKTtcblxuICByZXR1cm4gcGF0aC5ub3JtYWxpemUoYCR7cHJvY2Vzc1J1bm5pbmdQYXRofS8ke2ZpbGVQYXRofWApO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgcHJvY2VzcyBhcmd1bWVudCwgaWYgaXQncyBgeWFtbGAgZmlsZSwgdGhlbiByZXR1cm5zIGl0LlxuICogT3RoZXJ3aXNlIHRocm93cyBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUHJvY2Vzc0FyZ3VtZW50ID0gKCkgPT4ge1xuICBjb25zdCB7aW1wbCwgb21wbCwgaGVscH0gPSB2YWxpZGF0ZUFuZFBhcnNlUHJvY2Vzc0FyZ3MoKTtcblxuICBpZiAoaGVscCkge1xuICAgIGNvbnNvbGUubG9nKEhFTFApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbXBsKSB7XG4gICAgaWYgKGNoZWNrSWZGaWxlSXNZYW1sKGltcGwpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnB1dFBhdGg6IHByZXBlbmRGdWxsRmlsZVBhdGgoaW1wbCksXG4gICAgICAgIC4uLihvbXBsICYmIHtvdXRwdXRQYXRoOiBwcmVwZW5kRnVsbEZpbGVQYXRoKG9tcGwpfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBDbGlJbnB1dEVycm9yKEZJTEVfSVNfTk9UX1lBTUwpO1xuICB9XG5cbiAgdGhyb3cgbmV3IENsaUlucHV0RXJyb3IoSU1QTF9JU19NSVNTSU5HKTtcbn07XG4iXX0=
@@ -0,0 +1,6 @@
1
+ declare const CUSTOM_ERRORS: readonly ["CliInputError", "ImplValidationError", "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,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ERRORS = void 0;
4
+ const CUSTOM_ERRORS = [
5
+ 'CliInputError',
6
+ 'ImplValidationError',
7
+ 'ModelInitializationError',
8
+ 'ModelCredentialError',
9
+ ];
10
+ exports.ERRORS = CUSTOM_ERRORS.reduce((acc, className) => {
11
+ acc = {
12
+ ...acc,
13
+ [className]: class extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = this.constructor.name;
17
+ }
18
+ },
19
+ };
20
+ return acc;
21
+ }, {});
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGVBQWU7SUFDZixxQkFBcUI7SUFDckIsMEJBQTBCO0lBQzFCLHNCQUFzQjtDQUNkLENBQUM7QUFNRSxRQUFBLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO0lBQzVELEdBQUcsR0FBRztRQUNKLEdBQUcsR0FBRztRQUNOLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBTSxTQUFRLEtBQUs7WUFDOUIsWUFBWSxPQUFlO2dCQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQyxDQUFDO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQUUsRUFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQ1VTVE9NX0VSUk9SUyA9IFtcbiAgJ0NsaUlucHV0RXJyb3InLFxuICAnSW1wbFZhbGlkYXRpb25FcnJvcicsXG4gICdNb2RlbEluaXRpYWxpemF0aW9uRXJyb3InLFxuICAnTW9kZWxDcmVkZW50aWFsRXJyb3InLFxuXSBhcyBjb25zdDtcblxudHlwZSBDdXN0b21FcnJvcnMgPSB7XG4gIFtLIGluICh0eXBlb2YgQ1VTVE9NX0VSUk9SUylbbnVtYmVyXV06IEVycm9yQ29uc3RydWN0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgRVJST1JTID0gQ1VTVE9NX0VSUk9SUy5yZWR1Y2UoKGFjYywgY2xhc3NOYW1lKSA9PiB7XG4gIGFjYyA9IHtcbiAgICAuLi5hY2MsXG4gICAgW2NsYXNzTmFtZV06IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICAgICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gYWNjO1xufSwge30gYXMgQ3VzdG9tRXJyb3JzKTtcbiJdfQ==
@@ -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,28 @@
1
+ import { ImplInitializeModel, InitalizedModels } from '../types/models-universe';
2
+ /**
3
+ * Models Initialization Lifecycle.
4
+ */
5
+ export declare class ModelsUniverse {
6
+ /**
7
+ * Models list.
8
+ */
9
+ initalizedModels: InitalizedModels;
10
+ /**
11
+ * Checks if model is instance of `IOutputModelInterface`.
12
+ */
13
+ private instanceOfModel;
14
+ /**
15
+ * Returns plugin model. Checks if model is missing then rejects with error.
16
+ * Then checks if `path` is starting with github, then grabs the repository name.
17
+ * Imports module, then checks if it's a class which implements input model interface.
18
+ */
19
+ private handPluginModel;
20
+ /**
21
+ * Initializes and registers model.
22
+ */
23
+ writeDown(modelToInitalize: ImplInitializeModel): InitalizedModels;
24
+ /**
25
+ * Returns existing model by `name`.
26
+ */
27
+ getInitializedModel(modelName: string, config: any): Promise<import("../lib").IOutputModelInterface>;
28
+ }