@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,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const index_1 = require("../../../../lib/teads-curve/index");
5
+ globals_1.jest.setTimeout(30000);
6
+ (0, globals_1.describe)('teads:configure test', () => {
7
+ (0, globals_1.test)('initialize with params', async () => {
8
+ const outputModel = new index_1.TeadsCurveModel();
9
+ await outputModel.configure('test', {
10
+ 'thermal-design-power': 200,
11
+ });
12
+ await (0, globals_1.expect)(outputModel.execute([
13
+ {
14
+ duration: 3600,
15
+ 'cpu-util': 50.0,
16
+ timestamp: '2021-01-01T00:00:00Z',
17
+ },
18
+ ])).resolves.toStrictEqual([
19
+ {
20
+ 'energy-cpu': 0.15,
21
+ duration: 3600,
22
+ 'cpu-util': 50.0,
23
+ timestamp: '2021-01-01T00:00:00Z',
24
+ },
25
+ ]);
26
+ });
27
+ (0, globals_1.test)('teads:initialize with params:spline', async () => {
28
+ const outputModel = new index_1.TeadsCurveModel();
29
+ await outputModel.configure('test', {
30
+ 'thermal-design-power': 300,
31
+ });
32
+ await (0, globals_1.expect)(outputModel.execute([
33
+ {
34
+ duration: 3600,
35
+ 'cpu-util': 10.0,
36
+ timestamp: '2021-01-01T00:00:00Z',
37
+ },
38
+ {
39
+ duration: 3600,
40
+ 'cpu-util': 50.0,
41
+ timestamp: '2021-01-01T00:00:00Z',
42
+ },
43
+ {
44
+ duration: 3600,
45
+ 'cpu-util': 100.0,
46
+ timestamp: '2021-01-01T00:00:00Z',
47
+ },
48
+ ])).resolves.toStrictEqual([
49
+ {
50
+ duration: 3600,
51
+ 'cpu-util': 10.0,
52
+ timestamp: '2021-01-01T00:00:00Z',
53
+ 'energy-cpu': 0.096,
54
+ },
55
+ {
56
+ duration: 3600,
57
+ 'cpu-util': 50.0,
58
+ timestamp: '2021-01-01T00:00:00Z',
59
+ 'energy-cpu': 0.225,
60
+ },
61
+ {
62
+ duration: 3600,
63
+ 'cpu-util': 100.0,
64
+ timestamp: '2021-01-01T00:00:00Z',
65
+ 'energy-cpu': 0.306,
66
+ },
67
+ ]);
68
+ });
69
+ (0, globals_1.test)('teads:initialize with params:linear', async () => {
70
+ const outputModel = new index_1.TeadsCurveModel();
71
+ await outputModel.configure('test', {
72
+ 'thermal-design-power': 300,
73
+ interpolation: 'linear',
74
+ });
75
+ await (0, globals_1.expect)(outputModel.execute([
76
+ {
77
+ duration: 3600,
78
+ 'cpu-util': 10.0,
79
+ timestamp: '2021-01-01T00:00:00Z',
80
+ },
81
+ {
82
+ duration: 3600,
83
+ 'cpu-util': 50.0,
84
+ timestamp: '2021-01-01T00:00:00Z',
85
+ },
86
+ {
87
+ duration: 3600,
88
+ 'cpu-util': 100.0,
89
+ timestamp: '2021-01-01T00:00:00Z',
90
+ },
91
+ {
92
+ duration: 3600,
93
+ 'cpu-util': 15.0,
94
+ timestamp: '2021-01-01T00:00:00Z',
95
+ },
96
+ {
97
+ duration: 3600,
98
+ 'cpu-util': 55.0,
99
+ timestamp: '2021-01-01T00:00:00Z',
100
+ },
101
+ {
102
+ duration: 3600,
103
+ 'cpu-util': 75.0,
104
+ timestamp: '2021-01-01T00:00:00Z',
105
+ },
106
+ ])).resolves.toStrictEqual([
107
+ {
108
+ duration: 3600,
109
+ 'cpu-util': 10.0,
110
+ timestamp: '2021-01-01T00:00:00Z',
111
+ 'energy-cpu': 0.096,
112
+ },
113
+ {
114
+ duration: 3600,
115
+ 'cpu-util': 50.0,
116
+ timestamp: '2021-01-01T00:00:00Z',
117
+ 'energy-cpu': 0.225,
118
+ },
119
+ {
120
+ duration: 3600,
121
+ 'cpu-util': 100.0,
122
+ timestamp: '2021-01-01T00:00:00Z',
123
+ 'energy-cpu': 0.306,
124
+ },
125
+ {
126
+ duration: 3600,
127
+ 'cpu-util': 15.0,
128
+ timestamp: '2021-01-01T00:00:00Z',
129
+ 'energy-cpu': 0.11212500000000002,
130
+ },
131
+ {
132
+ duration: 3600,
133
+ 'cpu-util': 55.0,
134
+ timestamp: '2021-01-01T00:00:00Z',
135
+ 'energy-cpu': 0.2331,
136
+ },
137
+ {
138
+ duration: 3600,
139
+ 'cpu-util': 75.0,
140
+ timestamp: '2021-01-01T00:00:00Z',
141
+ 'energy-cpu': 0.2655,
142
+ },
143
+ ]);
144
+ });
145
+ });
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9fX3Rlc3RzX18vdW5pdC9saWIvdGVhZHMtY3VydmUvaW5kZXgudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUEyRDtBQUMzRCw2REFBa0U7QUFFbEUsY0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV2QixJQUFBLGtCQUFRLEVBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLElBQUEsY0FBSSxFQUFDLHdCQUF3QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksdUJBQWUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDbEMsc0JBQXNCLEVBQUUsR0FBRztTQUM1QixDQUFDLENBQUM7UUFDSCxNQUFNLElBQUEsZ0JBQU0sRUFDVixXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ2xCO2dCQUNFLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixTQUFTLEVBQUUsc0JBQXNCO2FBQ2xDO1NBQ0YsQ0FBQyxDQUNILENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUN2QjtnQkFDRSxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFNBQVMsRUFBRSxzQkFBc0I7YUFDbEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILElBQUEsY0FBSSxFQUFDLHFDQUFxQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksdUJBQWUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDbEMsc0JBQXNCLEVBQUUsR0FBRztTQUM1QixDQUFDLENB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Q0UsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFNBQVMsRUFBRSxzQkFBc0I7Z0JBQ2pDLFlBQVksRUFBRSxNQUFNO2FBQ3JCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFNBQVMsRUFBRSxzQkFBc0I7Z0JBQ2pDLFlBQVksRUFBRSxNQUFNO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVzY3JpYmUsIGV4cGVjdCwgamVzdCwgdGVzdH0gZnJvbSAnQGplc3QvZ2xvYmFscyc7XG5pbXBvcnQge1RlYWRzQ3VydmVNb2RlbH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL3RlYWRzLWN1cnZlL2luZGV4JztcblxuamVzdC5zZXRUaW1lb3V0KDMwMDAwKTtcblxuZGVzY3JpYmUoJ3RlYWRzOmNvbmZpZ3VyZSB0ZXN0JywgKCkgPT4ge1xuICB0ZXN0KCdpbml0aWFsaXplIHdpdGggcGFyYW1zJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dE1vZGVsID0gbmV3IFRlYWRzQ3VydmVNb2RlbCgpO1xuICAgIGF3YWl0IG91dHB1dE1vZGVsLmNvbmZpZ3VyZSgndGVzdCcsIHtcbiAgICAgICd0aGVybWFsLWRlc2lnbi1wb3dlcic6IDIwMCxcbiAgICB9KTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5leGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAgICdjcHUtdXRpbCc6IDUwLjAsXG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICB9LFxuICAgICAgXSlcbiAgICApLnJlc29sdmVzLnRvU3RyaWN0RXF1YWwoW1xuICAgICAge1xuICAgICAgICAnZW5lcmd5LWNwdSc6IDAuMTUsXG4gICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAnY3B1LXV0aWwnOiA1MC4wLFxuICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcbiAgdGVzdCgndGVhZHM6aW5pdGlhbGl6ZSB3aXRoIHBhcmFtczpzcGxpbmUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0TW9kZWwgPSBuZXcgVGVhZHNDdXJ2ZU1vZGVsKCk7XG4gICAgYXdhaXQgb3V0cHV0TW9kZWwuY29uZmlndXJlKCd0ZXN0Jywge1xuICAgICAgJ3RoZXJtYWwtZGVzaWduLXBvd2VyJzogMzAwLFxuICAgIH0pO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmV4ZWN1dGUoW1xuICAgICAgICB7XG4gICAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICAgICAgJ2NwdS11dGlsJzogMTAuMCxcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgICAgICAnY3B1LXV0aWwnOiA1MC4wLFxuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAgICdjcHUtdXRpbCc6IDEwMC4wLFxuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZXNvbHZlcy50b1N0cmljdEVxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICAgICdjcHUtdXRpbCc6IDEwLjAsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgJ2VuZXJneS1jcHUnOiAwLjA5NixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAnY3B1LXV0aWwnOiA1MC4wLFxuICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICdlbmVyZ3ktY3B1JzogMC4yMjUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgICAgJ2NwdS11dGlsJzogMTAwLjAsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgJ2VuZXJneS1jcHUnOiAwLjMwNixcbiAgICAgIH0sXG4gICAgXSk7XG4gIH0pO1xuICB0ZXN0KCd0ZWFkczppbml0aWFsaXplIHdpdGggcGFyYW1zOmxpbmVhcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXRNb2RlbCA9IG5ldyBUZWFkc0N1cnZlTW9kZWwoKTtcbiAgICBhd2FpdCBvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnLCB7XG4gICAgICAndGhlcm1hbC1kZXNpZ24tcG93ZXInOiAzMDAsXG4gICAgICBpbnRlcnBvbGF0aW9uOiAnbGluZWFyJyxcbiAgICB9KTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5leGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAgICdjcHUtdXRpbCc6IDEwLjAsXG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICAgICAgJ2NwdS11dGlsJzogNTAuMCxcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgICAgICAnY3B1LXV0aWwnOiAxMDAuMCxcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgICAgICAnY3B1LXV0aWwnOiAxNS4wLFxuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAgICdjcHUtdXRpbCc6IDU1LjAsXG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICAgICAgJ2NwdS11dGlsJzogNzUuMCxcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgIH0sXG4gICAgICBdKVxuICAgICkucmVzb2x2ZXMudG9TdHJpY3RFcXVhbChbXG4gICAgICB7XG4gICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAnY3B1LXV0aWwnOiAxMC4wLFxuICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICdlbmVyZ3ktY3B1JzogMC4wOTYsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgICAgJ2NwdS11dGlsJzogNTAuMCxcbiAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICAnZW5lcmd5LWNwdSc6IDAuMjI1LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICAgICdjcHUtdXRpbCc6IDEwMC4wLFxuICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICdlbmVyZ3ktY3B1JzogMC4zMDYsXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAnY3B1LXV0aWwnOiAxNS4wLFxuICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICdlbmVyZ3ktY3B1JzogMC4xMTIxMjUwMDAwMDAwMDAwMixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAnY3B1LXV0aWwnOiA1NS4wLFxuICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICdlbmVyZ3ktY3B1JzogMC4yMzMxLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICAgICdjcHUtdXRpbCc6IDc1LjAsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgJ2VuZXJneS1jcHUnOiAwLjI2NTUsXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const index_1 = require("../../../../lib/watt-time/index");
5
+ const DATA = require("../../../../__mocks__/watt-time/data.json");
6
+ const axios_1 = require("axios");
7
+ globals_1.jest.setTimeout(30000);
8
+ globals_1.jest.mock('axios');
9
+ const mockAxios = axios_1.default;
10
+ // Mock out all top level functions, such as get, put, delete and post:
11
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
12
+ // @ts-ignore
13
+ mockAxios.get.mockImplementation(url => {
14
+ switch (url) {
15
+ case 'https://api2.watttime.org/v2/login':
16
+ return Promise.resolve({
17
+ status: 200,
18
+ data: {
19
+ token: 'test_token',
20
+ },
21
+ });
22
+ case 'https://api2.watttime.org/v2/data':
23
+ return Promise.resolve({
24
+ data: DATA,
25
+ status: 200,
26
+ });
27
+ }
28
+ });
29
+ (0, globals_1.describe)('watt-time:configure test', () => {
30
+ (0, globals_1.test)('initialize and test', async () => {
31
+ const model = await new index_1.WattTimeGridEmissions().configure('watt-time', {
32
+ username: 'test1',
33
+ password: 'test2',
34
+ });
35
+ (0, globals_1.expect)(model).toBeInstanceOf(index_1.WattTimeGridEmissions);
36
+ await (0, globals_1.expect)(model.execute([
37
+ {
38
+ location: '37.7749,-122.4194',
39
+ timestamp: '2021-01-01T00:00:00Z',
40
+ duration: 1200,
41
+ },
42
+ ])).resolves.toStrictEqual([
43
+ {
44
+ location: '37.7749,-122.4194',
45
+ timestamp: '2021-01-01T00:00:00Z',
46
+ duration: 1200,
47
+ 'grid-carbon-intensity': 2185.332173907599,
48
+ },
49
+ ]);
50
+ await (0, globals_1.expect)(model.execute([
51
+ {
52
+ location: '37.7749,-122.4194',
53
+ timestamp: '2021-01-01T00:00:00Z',
54
+ duration: 120,
55
+ },
56
+ ])).resolves.toStrictEqual([
57
+ {
58
+ location: '37.7749,-122.4194',
59
+ timestamp: '2021-01-01T00:00:00Z',
60
+ duration: 120,
61
+ 'grid-carbon-intensity': 2198.0087539832293,
62
+ },
63
+ ]);
64
+ await (0, globals_1.expect)(model.execute([
65
+ {
66
+ location: '37.7749,-122.4194',
67
+ timestamp: '2021-01-01T00:00:00Z',
68
+ duration: 300,
69
+ },
70
+ ])).resolves.toStrictEqual([
71
+ {
72
+ location: '37.7749,-122.4194',
73
+ timestamp: '2021-01-01T00:00:00Z',
74
+ duration: 300,
75
+ 'grid-carbon-intensity': 2198.0087539832293,
76
+ },
77
+ ]);
78
+ await (0, globals_1.expect)(model.execute([
79
+ {
80
+ location: '37.7749,-122.4194',
81
+ timestamp: '2021-01-01T00:00:00Z',
82
+ duration: 360,
83
+ },
84
+ ])).resolves.toStrictEqual([
85
+ {
86
+ location: '37.7749,-122.4194',
87
+ timestamp: '2021-01-01T00:00:00Z',
88
+ duration: 360,
89
+ 'grid-carbon-intensity': 2193.5995087395318,
90
+ },
91
+ ]);
92
+ await (0, globals_1.expect)(model.execute([
93
+ {
94
+ location: '37.7749,-122.4194',
95
+ timestamp: '2021-01-01T00:00:00Z',
96
+ duration: 3600,
97
+ },
98
+ {
99
+ location: '37.7749,-122.4194',
100
+ timestamp: '2021-01-02T01:00:00Z',
101
+ duration: 3600,
102
+ },
103
+ ])).rejects.toThrowError();
104
+ });
105
+ });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9fX3Rlc3RzX18vdW5pdC9saWIvd2F0dC10aW1lL2luZGV4LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBMkQ7QUFDM0QsMkRBQXNFO0FBQ3RFLGtFQUFrRTtBQUNsRSxpQ0FBMEI7QUFFMUIsY0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV2QixjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25CLE1BQU0sU0FBUyxHQUFHLGVBQWtDLENBQUM7QUFDckQsdUVBQXVFO0FBQ3ZFLDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUNyQyxRQUFRLEdBQUcsRUFBRTtRQUNYLEtBQUssb0NBQW9DO1lBQ3ZDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFO29CQUNKLEtBQUssRUFBRSxZQUFZO2lCQUNwQjthQUNGLENBQUMsQ0FBQztRQUNMLEtBQUssbUNBQW1DO1lBQ3RDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7YUFDWixDQUFDLENBQUM7S0FDTjtBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0gsSUFBQSxrQkFBUSxFQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtJQUN4QyxJQUFBLGNBQUksRUFBQyxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksNkJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQ3JFLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsNkJBQXFCLENBQUMsQ0FBQztRQUNwRCxNQUFNLElBQUEsZ0JBQU0sRUFDVixLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ1o7Z0JBQ0UsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsU0FBUyxFQUFFLHNCQUFzQjtnQkFDakMsUUFBUSxFQUFFLElBQUk7YUFDZjtTQUNGLENBQUMsQ0FDSCxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDdkI7Z0JBQ0UsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsU0FBUyxFQUFFLHNCQUFzQjtnQkFDakMsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsdUJBQXVCLEVBQUUsaUJBQWlCO2FBQzNDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFBLGdCQUFNLEVBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNaO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFNBQVMsRUFBRSxzQkFBc0I7Z0JBQ2pDLFFBQVEsRUFBRSxHQUFHO2FBQ2Q7U0FDRixDQUFDLENBQ0gsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ3ZCO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFNBQVMsRUFBRSxzQkFBc0I7Z0JBQ2pDLFFBQVEsRUFBRSxHQUFHO2dCQUNiLHVCQUF1QixFQUFFLGtCQUFrQjthQUM1QztTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBQSxnQkFBTSxFQUNWLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDWjtnQkFDRSxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixTQUFTLEVBQUUsc0JBQXNCO2dCQUNqQyxRQUFRLEVBQUUsR0FBRzthQUNkO1NBQ0YsQ0FBQyxDQUNILENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUN2QjtnQkFDRSxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixTQUFTLEVBQUUsc0JBQXNCO2dCQUNqQyxRQUFRLEVBQUUsR0FBRztnQkFDYix1QkFBdUIsRUFBRSxrQkFBa0I7YUFDNUM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLElBQUEsZ0JBQU0sRUFDVixLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ1o7Z0JBQ0UsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsU0FBUyxFQUFFLHNCQUFzQjtnQkFDakMsUUFBUSxFQUFFLEdBQUc7YUFDZDtTQUNGLENBQUMsQ0FDSCxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDdkI7Z0JBQ0UsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsU0FBUyxFQUFFLHNCQUFzQjtnQkFDakMsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsdUJBQXVCLEVBQUUsa0JBQWtCO2FBQzVDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFBLGdCQUFNLEVBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNaO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFNBQVMsRUFBRSxzQkFBc0I7Z0JBQ2pDLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixTQUFTLEVBQUUsc0JBQXNCO2dCQUNqQyxRQUFRLEVBQUUsSUFBSTthQUNmO1NBQ0YsQ0FBQyxDQUNILENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Rlc2NyaWJlLCBleHBlY3QsIGplc3QsIHRlc3R9IGZyb20gJ0BqZXN0L2dsb2JhbHMnO1xuaW1wb3J0IHtXYXR0VGltZUdyaWRFbWlzc2lvbnN9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi93YXR0LXRpbWUvaW5kZXgnO1xuaW1wb3J0ICogYXMgREFUQSBmcm9tICcuLi8uLi8uLi8uLi9fX21vY2tzX18vd2F0dC10aW1lL2RhdGEuanNvbic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5qZXN0LnNldFRpbWVvdXQoMzAwMDApO1xuXG5qZXN0Lm1vY2soJ2F4aW9zJyk7XG5jb25zdCBtb2NrQXhpb3MgPSBheGlvcyBhcyBqZXN0Lk1vY2tlZDx0eXBlb2YgYXhpb3M+O1xuLy8gTW9jayBvdXQgYWxsIHRvcCBsZXZlbCBmdW5jdGlvbnMsIHN1Y2ggYXMgZ2V0LCBwdXQsIGRlbGV0ZSBhbmQgcG9zdDpcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1pZ25vcmVcbm1vY2tBeGlvcy5nZXQubW9ja0ltcGxlbWVudGF0aW9uKHVybCA9PiB7XG4gIHN3aXRjaCAodXJsKSB7XG4gICAgY2FzZSAnaHR0cHM6Ly9hcGkyLndhdHR0aW1lLm9yZy92Mi9sb2dpbic6XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0b2tlbjogJ3Rlc3RfdG9rZW4nLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgY2FzZSAnaHR0cHM6Ly9hcGkyLndhdHR0aW1lLm9yZy92Mi9kYXRhJzpcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBkYXRhOiBEQVRBLFxuICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgIH0pO1xuICB9XG59KTtcbmRlc2NyaWJlKCd3YXR0LXRpbWU6Y29uZmlndXJlIHRlc3QnLCAoKSA9PiB7XG4gIHRlc3QoJ2luaXRpYWxpemUgYW5kIHRlc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kZWwgPSBhd2FpdCBuZXcgV2F0dFRpbWVHcmlkRW1pc3Npb25zKCkuY29uZmlndXJlKCd3YXR0LXRpbWUnLCB7XG4gICAgICB1c2VybmFtZTogJ3Rlc3QxJyxcbiAgICAgIHBhc3N3b3JkOiAndGVzdDInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2RlbCkudG9CZUluc3RhbmNlT2YoV2F0dFRpbWVHcmlkRW1pc3Npb25zKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBtb2RlbC5leGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGxvY2F0aW9uOiAnMzcuNzc0OSwtMTIyLjQxOTQnLFxuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgICBkdXJhdGlvbjogMTIwMCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZXNvbHZlcy50b1N0cmljdEVxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgbG9jYXRpb246ICczNy43NzQ5LC0xMjIuNDE5NCcsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgZHVyYXRpb246IDEyMDAsXG4gICAgICAgICdncmlkLWNhcmJvbi1pbnRlbnNpdHknOiAyMTg1LjMzMjE3MzkwNzU5OSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbW9kZWwuZXhlY3V0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBsb2NhdGlvbjogJzM3Ljc3NDksLTEyMi40MTk0JyxcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZXNvbHZlcy50b1N0cmljdEVxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgbG9jYXRpb246ICczNy43NzQ5LC0xMjIuNDE5NCcsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgJ2dyaWQtY2FyYm9uLWludGVuc2l0eSc6IDIxOTguMDA4NzUzOTgzMjI5MyxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbW9kZWwuZXhlY3V0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBsb2NhdGlvbjogJzM3Ljc3NDksLTEyMi40MTk0JyxcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZXNvbHZlcy50b1N0cmljdEVxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgbG9jYXRpb246ICczNy43NzQ5LC0xMjIuNDE5NCcsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgICAgJ2dyaWQtY2FyYm9uLWludGVuc2l0eSc6IDIxOTguMDA4NzUzOTgzMjI5MyxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbW9kZWwuZXhlY3V0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBsb2NhdGlvbjogJzM3Ljc3NDksLTEyMi40MTk0JyxcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICAgZHVyYXRpb246IDM2MCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZXNvbHZlcy50b1N0cmljdEVxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgbG9jYXRpb246ICczNy43NzQ5LC0xMjIuNDE5NCcsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgZHVyYXRpb246IDM2MCxcbiAgICAgICAgJ2dyaWQtY2FyYm9uLWludGVuc2l0eSc6IDIxOTMuNTk5NTA4NzM5NTMxOCxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBtb2RlbC5leGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGxvY2F0aW9uOiAnMzcuNzc0OSwtMTIyLjQxOTQnLFxuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxvY2F0aW9uOiAnMzcuNzc0OSwtMTIyLjQxOTQnLFxuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDJUMDE6MDA6MDBaJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZWplY3RzLnRvVGhyb3dFcnJvcigpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ jest.mock('ts-command-line-args', () => ({
4
+ __esModule: true,
5
+ parse: () => {
6
+ switch (process.env.result) {
7
+ case 'error':
8
+ return {};
9
+ case 'impl':
10
+ return {
11
+ impl: 'impl-mock.yml',
12
+ };
13
+ case 'impl-ompl':
14
+ return {
15
+ impl: 'impl-mock.yml',
16
+ ompl: 'ompl-mock.yml',
17
+ };
18
+ case 'help':
19
+ return {
20
+ help: true,
21
+ };
22
+ default:
23
+ return {
24
+ impl: 'mock-impl.yaml',
25
+ ompl: 'mock-ompl',
26
+ };
27
+ }
28
+ },
29
+ }));
30
+ const path = require("path");
31
+ const args_1 = require("../../../util/args");
32
+ const errors_1 = require("../../../util/errors");
33
+ const config_1 = require("../../../config");
34
+ const { CliInputError } = errors_1.ERRORS;
35
+ const { impact } = config_1.CONFIG;
36
+ const { HELP } = impact;
37
+ const { IMPL_IS_MISSING } = config_1.STRINGS;
38
+ describe('util/args: ', () => {
39
+ const originalEnv = process.env;
40
+ describe('parseProcessArgument(): ', () => {
41
+ it('throws error if there is no argument passed.', () => {
42
+ expect.assertions(2);
43
+ process.env.result = 'error'; // used for mocking
44
+ try {
45
+ (0, args_1.parseProcessArgument)();
46
+ }
47
+ catch (error) {
48
+ if (error instanceof Error) {
49
+ expect(error).toBeInstanceOf(CliInputError);
50
+ expect(error.message).toEqual(IMPL_IS_MISSING);
51
+ }
52
+ }
53
+ });
54
+ it('returns impl path.', () => {
55
+ expect.assertions(1);
56
+ process.env.result = 'impl';
57
+ const result = (0, args_1.parseProcessArgument)();
58
+ const processRunningPath = process.cwd();
59
+ const implPath = 'impl-mock.yml';
60
+ const expectedResult = {
61
+ inputPath: path.normalize(`${processRunningPath}/${implPath}`),
62
+ };
63
+ expect(result).toEqual(expectedResult);
64
+ });
65
+ it('returns impl and ompl path.', () => {
66
+ expect.assertions(1);
67
+ process.env.result = 'impl-ompl';
68
+ const result = (0, args_1.parseProcessArgument)();
69
+ const processRunningPath = process.cwd();
70
+ const implPath = 'impl-mock.yml';
71
+ const omplPath = 'ompl-mock.yml';
72
+ const expectedResult = {
73
+ inputPath: path.normalize(`${processRunningPath}/${implPath}`),
74
+ outputPath: path.normalize(`${processRunningPath}/${omplPath}`),
75
+ };
76
+ expect(result).toEqual(expectedResult);
77
+ });
78
+ it('logs help.', () => {
79
+ expect.assertions(3);
80
+ const originalLog = console.log;
81
+ console.log = jest.fn();
82
+ process.env.result = 'help';
83
+ const result = (0, args_1.parseProcessArgument)();
84
+ expect(result).toBeUndefined();
85
+ expect(console.log).toBeCalledTimes(1);
86
+ expect(console.log).toBeCalledWith(HELP);
87
+ console.log = originalLog;
88
+ });
89
+ });
90
+ process.env = originalEnv;
91
+ });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL19fdGVzdHNfXy91bml0L3V0aWwvYXJncy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDVixRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQzFCLEtBQUssT0FBTztnQkFDVixPQUFPLEVBQUUsQ0FBQztZQUNaLEtBQUssTUFBTTtnQkFDVCxPQUFPO29CQUNMLElBQUksRUFBRSxlQUFlO2lCQUN0QixDQUFDO1lBQ0osS0FBSyxXQUFXO2dCQUNkLE9BQU87b0JBQ0wsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLElBQUksRUFBRSxlQUFlO2lCQUN0QixDQUFDO1lBQ0osS0FBSyxNQUFNO2dCQUNULE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUk7aUJBQ1gsQ0FBQztZQUNKO2dCQUNFLE9BQU87b0JBQ0wsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUM7U0FDTDtJQUNILENBQUM7Q0FDRixDQUFDLENBQUMsQ0FBQztBQUVKLDZCQUE4QjtBQUU5Qiw2Q0FBd0Q7QUFDeEQsaURBQTRDO0FBRTVDLDRDQUFnRDtBQUVoRCxNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9CLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDeEIsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QixNQUFNLEVBQUMsZUFBZSxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVsQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFdBQVcsR0FBRyxP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QyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFekMsT0FBTyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiamVzdC5tb2NrKCd0cy1jb21tYW5kLWxpbmUtYXJncycsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIHBhcnNlOiAoKSA9PiB7XG4gICAgc3dpdGNoIChwcm9jZXNzLmVudi5yZXN1bHQpIHtcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgY2FzZSAnaW1wbCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW1wbDogJ2ltcGwtbW9jay55bWwnLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnaW1wbC1vbXBsJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbXBsOiAnaW1wbC1tb2NrLnltbCcsXG4gICAgICAgICAgb21wbDogJ29tcGwtbW9jay55bWwnLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnaGVscCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVscDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW1wbDogJ21vY2staW1wbC55YW1sJyxcbiAgICAgICAgICBvbXBsOiAnbW9jay1vbXBsJyxcbiAgICAgICAgfTtcbiAgICB9XG4gIH0sXG59KSk7XG5cbmltcG9ydCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5pbXBvcnQge3BhcnNlUHJvY2Vzc0FyZ3VtZW50fSBmcm9tICcuLi8uLi8uLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uLy4uLy4uL3V0aWwvZXJyb3JzJztcblxuaW1wb3J0IHtTVFJJTkdTLCBDT05GSUd9IGZyb20gJy4uLy4uLy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtDbGlJbnB1dEVycm9yfSA9IEVSUk9SUztcblxuY29uc3Qge2ltcGFjdH0gPSBDT05GSUc7XG5jb25zdCB7SEVMUH0gPSBpbXBhY3Q7XG5jb25zdCB7SU1QTF9JU19NSVNTSU5HfSA9IFNUUklOR1M7XG5cbmRlc2NyaWJlKCd1dGlsL2FyZ3M6ICcsICgpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxFbnYgPSBwcm9jZXNzLmVudjtcblxuICBkZXNjcmliZSgncGFyc2VQcm9jZXNzQXJndW1lbnQoKTogJywgKCkgPT4ge1xuICAgIGl0KCd0aHJvd3MgZXJyb3IgaWYgdGhlcmUgaXMgbm8gYXJndW1lbnQgcGFzc2VkLicsICgpID0+IHtcbiAgICAgIGV4cGVjdC5hc3NlcnRpb25zKDIpO1xuXG4gICAgICBwcm9jZXNzLmVudi5yZXN1bHQgPSAnZXJyb3InOyAvLyB1c2VkIGZvciBtb2NraW5nXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlUHJvY2Vzc0FyZ3VtZW50KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGV4cGVjdChlcnJvcikudG9CZUluc3RhbmNlT2YoQ2xpSW5wdXRFcnJvcik7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLm1lc3NhZ2UpLnRvRXF1YWwoSU1QTF9JU19NSVNTSU5HKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgaW1wbCBwYXRoLicsICgpID0+IHtcbiAgICAgIGV4cGVjdC5hc3NlcnRpb25zKDEpO1xuXG4gICAgICBwcm9jZXNzLmVudi5yZXN1bHQgPSAnaW1wbCc7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUHJvY2Vzc0FyZ3VtZW50KCk7XG4gICAgICBjb25zdCBwcm9jZXNzUnVubmluZ1BhdGggPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICBjb25zdCBpbXBsUGF0aCA9ICdpbXBsLW1vY2sueW1sJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBpbnB1dFBhdGg6IHBhdGgubm9ybWFsaXplKGAke3Byb2Nlc3NSdW5uaW5nUGF0aH0vJHtpbXBsUGF0aH1gKSxcbiAgICAgIH07XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgaW1wbCBhbmQgb21wbCBwYXRoLicsICgpID0+IHtcbiAgICAgIGV4cGVjdC5hc3NlcnRpb25zKDEpO1xuXG4gICAgICBwcm9jZXNzLmVudi5yZXN1bHQgPSAnaW1wbC1vbXBsJztcblxuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQcm9jZXNzQXJndW1lbnQoKTtcbiAgICAgIGNvbnN0IHByb2Nlc3NSdW5uaW5nUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAgIGNvbnN0IGltcGxQYXRoID0gJ2ltcGwtbW9jay55bWwnO1xuICAgICAgY29uc3Qgb21wbFBhdGggPSAnb21wbC1tb2NrLnltbCc7XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgaW5wdXRQYXRoOiBwYXRoLm5vcm1hbGl6ZShgJHtwcm9jZXNzUnVubmluZ1BhdGh9LyR7aW1wbFBhdGh9YCksXG4gICAgICAgIG91dHB1dFBhdGg6IHBhdGgubm9ybWFsaXplKGAke3Byb2Nlc3NSdW5uaW5nUGF0aH0vJHtvbXBsUGF0aH1gKSxcbiAgICAgIH07XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2xvZ3MgaGVscC4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QuYXNzZXJ0aW9ucygzKTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIGNvbnNvbGUubG9nID0gamVzdC5mbigpO1xuXG4gICAgICBwcm9jZXNzLmVudi5yZXN1bHQgPSAnaGVscCc7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUHJvY2Vzc0FyZ3VtZW50KCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChjb25zb2xlLmxvZykudG9CZUNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGNvbnNvbGUubG9nKS50b0JlQ2FsbGVkV2l0aChIRUxQKTtcblxuICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbExvZztcbiAgICB9KTtcbiAgfSk7XG5cbiAgcHJvY2Vzcy5lbnYgPSBvcmlnaW5hbEVudjtcbn0pO1xuIl19
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const model_universe_1 = require("../../../__mocks__/model-universe");
4
+ const lib_1 = require("../../../lib");
5
+ const models_universe_1 = require("../../../util/models-universe");
6
+ const config_1 = require("../../../config");
7
+ const { MISSING_CLASSNAME, MISSING_PATH, NOT_OUTPUT_MODEL_EXTENSION, NOT_INITIALIZED_MODEL, } = config_1.STRINGS;
8
+ describe('util/models-universe: ', () => {
9
+ describe('init ModelsUniverse', () => {
10
+ it('initializes object with required properties.', () => {
11
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
12
+ expect(typeof modelsHandbook.getInitializedModel).toBe('function');
13
+ expect(typeof modelsHandbook.initalizedModels).toBe('object');
14
+ expect(typeof modelsHandbook.writeDown).toBe('function');
15
+ expect(modelsHandbook.initalizedModels).toEqual({});
16
+ });
17
+ });
18
+ describe('writeDown(): ', () => {
19
+ beforeEach(() => {
20
+ jest.resetModules();
21
+ jest.restoreAllMocks();
22
+ });
23
+ it('throws error in case model is not supported.', () => {
24
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
25
+ const modelInfo = {
26
+ config: {
27
+ allocation: 'mock-allocation',
28
+ verbose: true,
29
+ },
30
+ name: 'test',
31
+ };
32
+ const expectedMessage = `Missing or wrong model: ${modelInfo.name}.`;
33
+ try {
34
+ modelsHandbook.writeDown(modelInfo);
35
+ }
36
+ catch (error) {
37
+ if (error instanceof Error) {
38
+ expect(error.message).toEqual(expectedMessage);
39
+ }
40
+ }
41
+ });
42
+ it('registers `shell` model in initalized models list.', () => {
43
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
44
+ const modelInfo = {
45
+ config: {
46
+ allocation: 'mock-allocation',
47
+ verbose: true,
48
+ },
49
+ name: 'mock-name',
50
+ };
51
+ const modelsList = modelsHandbook.writeDown(modelInfo);
52
+ expect(modelsList).toHaveProperty(modelInfo.name);
53
+ expect(typeof modelsList[modelInfo.name]).toBe('function');
54
+ });
55
+ it('registers `plugin` model in initalized models list.', () => {
56
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
57
+ const modelInfo = {
58
+ config: {
59
+ allocation: 'mock-allocation',
60
+ verbose: true,
61
+ },
62
+ name: 'mock-name',
63
+ };
64
+ const modelsList = modelsHandbook.writeDown(modelInfo);
65
+ expect(modelsList).toHaveProperty(modelInfo.name);
66
+ expect(typeof modelsList[modelInfo.name]).toBe('function');
67
+ });
68
+ it('throws `missing classname` error while registration of `plugin` model.', async () => {
69
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
70
+ const modelInfo = {
71
+ config: {
72
+ allocation: 'mock-allocation',
73
+ verbose: true,
74
+ },
75
+ name: 'mock-name',
76
+ };
77
+ const modelsList = modelsHandbook.writeDown(modelInfo);
78
+ const model = modelsList[modelInfo.name];
79
+ expect.assertions(2);
80
+ try {
81
+ await model({
82
+ 'core-units': 1,
83
+ 'physical-processor': 'intel',
84
+ });
85
+ }
86
+ catch (error) {
87
+ if (error instanceof Error) {
88
+ expect(error).toBeInstanceOf(Error);
89
+ expect(error.message).toEqual(MISSING_CLASSNAME);
90
+ }
91
+ }
92
+ });
93
+ it('throws `missing path parameter` error while registration of `plugin` model.', async () => {
94
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
95
+ const modelInfo = {
96
+ config: {
97
+ allocation: 'mock-allocation',
98
+ verbose: true,
99
+ },
100
+ name: 'mock-name',
101
+ model: 'MockaviztaModel',
102
+ };
103
+ const modelsList = modelsHandbook.writeDown(modelInfo);
104
+ const model = modelsList[modelInfo.name];
105
+ expect.assertions(2);
106
+ try {
107
+ await model({
108
+ 'core-units': 1,
109
+ 'physical-processor': 'intel',
110
+ });
111
+ }
112
+ catch (error) {
113
+ if (error instanceof Error) {
114
+ expect(error).toBeInstanceOf(Error);
115
+ expect(error.message).toEqual(MISSING_PATH);
116
+ }
117
+ }
118
+ });
119
+ it('should successfully initalize plugin model.', async () => {
120
+ jest.mock('mockavizta-model', () => ({
121
+ __esModule: true,
122
+ MockaviztaModel: model_universe_1.MockModel,
123
+ }), { virtual: true });
124
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
125
+ const modelInfo = {
126
+ config: {
127
+ allocation: 'mock-allocation',
128
+ verbose: true,
129
+ },
130
+ name: 'mock-name',
131
+ model: 'MockaviztaModel',
132
+ path: 'https://github.com/mock/mockavizta-model',
133
+ };
134
+ const modelsList = modelsHandbook.writeDown(modelInfo);
135
+ const model = modelsList[modelInfo.name];
136
+ expect.assertions(1);
137
+ const response = await model({
138
+ 'core-units': 1,
139
+ 'physical-processor': 'intel',
140
+ });
141
+ expect(response).toBeInstanceOf(model_universe_1.MockModel);
142
+ });
143
+ it('should throw `input model does not extend base interface` error.', async () => {
144
+ jest.mock('mockavizta-model', () => ({
145
+ __esModule: true,
146
+ MockaviztaModel: class FakeModel {
147
+ },
148
+ }), { virtual: true });
149
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
150
+ const modelInfo = {
151
+ config: {
152
+ allocation: 'mock-allocation',
153
+ verbose: true,
154
+ },
155
+ name: 'mock-name',
156
+ model: 'MockaviztaModel',
157
+ path: 'https://github.com/mock/mockavizta-model',
158
+ };
159
+ const modelsList = modelsHandbook.writeDown(modelInfo);
160
+ const model = modelsList[modelInfo.name];
161
+ expect.assertions(2);
162
+ try {
163
+ await model({
164
+ 'core-units': 1,
165
+ 'physical-processor': 'intel',
166
+ });
167
+ }
168
+ catch (error) {
169
+ if (error instanceof Error) {
170
+ expect(error).toBeInstanceOf(Error);
171
+ expect(error.message).toEqual(NOT_OUTPUT_MODEL_EXTENSION);
172
+ }
173
+ }
174
+ });
175
+ });
176
+ describe('getInitializedModel(): ', () => {
177
+ it('throws error in case if model is not initalized.', async () => {
178
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
179
+ const modelName = 'mock-modelName';
180
+ const config = {};
181
+ const expectedMessage = NOT_INITIALIZED_MODEL(modelName);
182
+ try {
183
+ await modelsHandbook.getInitializedModel(modelName, config);
184
+ }
185
+ catch (error) {
186
+ if (error instanceof Error) {
187
+ expect(error).toBeInstanceOf(Error);
188
+ expect(error.message).toEqual(expectedMessage);
189
+ }
190
+ }
191
+ });
192
+ it.skip('returns initalized model.', async () => {
193
+ const modelsHandbook = new models_universe_1.ModelsUniverse();
194
+ const modelInfo = {
195
+ config: {
196
+ allocation: 'mock-allocation',
197
+ verbose: true,
198
+ },
199
+ name: 'boavizta-cpu',
200
+ };
201
+ modelsHandbook.writeDown(modelInfo);
202
+ const config = {
203
+ 'physical-processor': 'intel',
204
+ 'core-units': 1,
205
+ };
206
+ const model = await modelsHandbook.getInitializedModel(modelInfo.name, config);
207
+ expect(model).toBeInstanceOf(lib_1.BoaviztaCpuOutputModel);
208
+ });
209
+ });
210
+ });
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvX190ZXN0c19fL3VuaXQvdXRpbC9tb2RlbHMtdW5pdmVyc2UudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNFQUE0RDtBQUU1RCxzQ0FBb0Q7QUFFcEQsbUVBQTZEO0FBRTdELDRDQUF3QztBQUl4QyxNQUFNLEVBQ0osaUJBQWlCLEVBQ2pCLFlBQVksRUFDWiwwQkFBMEIsRUFDMUIscUJBQXFCLEdBQ3RCLEdBQUcsZ0JBQU8sQ0FBQztBQUVaLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sY0FBYyxHQUFHLElBQUksZ0NBQWMsRUFBRSxDQUFDO1lBRTVDLE1BQU0sQ0FBQyxPQUFPLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRSxNQUFNLENBQUMsT0FBTyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtRQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6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TW9kZWx9IGZyb20gJy4uLy4uLy4uL19fbW9ja3NfXy9tb2RlbC11bml2ZXJzZSc7XG5cbmltcG9ydCB7Qm9hdml6dGFDcHVPdXRwdXRNb2RlbH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW1wb3J0IHtNb2RlbHNVbml2ZXJzZX0gZnJvbSAnLi4vLi4vLi4vdXRpbC9tb2RlbHMtdW5pdmVyc2UnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uLy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7SW1wbEluaXRpYWxpemVNb2RlbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvbW9kZWxzLXVuaXZlcnNlJztcblxuY29uc3Qge1xuICBNSVNTSU5HX0NMQVNTTkFNRSxcbiAgTUlTU0lOR19QQVRILFxuICBOT1RfT1VUUFVUX01PREVMX0VYVEVOU0lPTixcbiAgTk9UX0lOSVRJQUxJWkVEX01PREVMLFxufSA9IFNUUklOR1M7XG5cbmRlc2NyaWJlKCd1dGlsL21vZGVscy11bml2ZXJzZTogJywgKCkgPT4ge1xuICBkZXNjcmliZSgnaW5pdCBNb2RlbHNVbml2ZXJzZScsICgpID0+IHtcbiAgICBpdCgnaW5pdGlhbGl6ZXMgb2JqZWN0IHdpdGggcmVxdWlyZWQgcHJvcGVydGllcy4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbHNIYW5kYm9vayA9IG5ldyBNb2RlbHNVbml2ZXJzZSgpO1xuXG4gICAgICBleHBlY3QodHlwZW9mIG1vZGVsc0hhbmRib29rLmdldEluaXRpYWxpemVkTW9kZWwpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgICBleHBlY3QodHlwZW9mIG1vZGVsc0hhbmRib29rLmluaXRhbGl6ZWRNb2RlbHMpLnRvQmUoJ29iamVjdCcpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBtb2RlbHNIYW5kYm9vay53cml0ZURvd24pLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgICBleHBlY3QobW9kZWxzSGFuZGJvb2suaW5pdGFsaXplZE1vZGVscykudG9FcXVhbCh7fSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3cml0ZURvd24oKTogJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgICAgIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIGVycm9yIGluIGNhc2UgbW9kZWwgaXMgbm90IHN1cHBvcnRlZC4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbHNIYW5kYm9vayA9IG5ldyBNb2RlbHNVbml2ZXJzZSgpO1xuICAgICAgY29uc3QgbW9kZWxJbmZvOiBJbXBsSW5pdGlhbGl6ZU1vZGVsID0ge1xuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBhbGxvY2F0aW9uOiAnbW9jay1hbGxvY2F0aW9uJyxcbiAgICAgICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiAndGVzdCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBleHBlY3RlZE1lc3NhZ2UgPSBgTWlzc2luZyBvciB3cm9uZyBtb2RlbDogJHttb2RlbEluZm8ubmFtZX0uYDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbW9kZWxzSGFuZGJvb2sud3JpdGVEb3duKG1vZGVsSW5mbyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS50b0VxdWFsKGV4cGVjdGVkTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdyZWdpc3RlcnMgYHNoZWxsYCBtb2RlbCBpbiBpbml0YWxpemVkIG1vZGVscyBsaXN0LicsICgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsc0hhbmRib29rID0gbmV3IE1vZGVsc1VuaXZlcnNlKCk7XG4gICAgICBjb25zdCBtb2RlbEluZm86IEltcGxJbml0aWFsaXplTW9kZWwgPSB7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGFsbG9jYXRpb246ICdtb2NrLWFsbG9jYXRpb24nLFxuICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6ICdtb2NrLW5hbWUnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9kZWxzTGlzdCA9IG1vZGVsc0hhbmRib29rLndyaXRlRG93bihtb2RlbEluZm8pO1xuICAgICAgZXhwZWN0KG1vZGVsc0xpc3QpLnRvSGF2ZVByb3BlcnR5KG1vZGVsSW5mby5uYW1lKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgbW9kZWxzTGlzdFttb2RlbEluZm8ubmFtZV0pLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVnaXN0ZXJzIGBwbHVnaW5gIG1vZGVsIGluIGluaXRhbGl6ZWQgbW9kZWxzIGxpc3QuJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxzSGFuZGJvb2sgPSBuZXcgTW9kZWxzVW5pdmVyc2UoKTtcbiAgICAgIGNvbnN0IG1vZGVsSW5mbzogSW1wbEluaXRpYWxpemVNb2RlbCA9IHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgYWxsb2NhdGlvbjogJ21vY2stYWxsb2NhdGlvbicsXG4gICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJ21vY2stbmFtZScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2RlbHNMaXN0ID0gbW9kZWxzSGFuZGJvb2sud3JpdGVEb3duKG1vZGVsSW5mbyk7XG4gICAgICBleHBlY3QobW9kZWxzTGlzdCkudG9IYXZlUHJvcGVydHkobW9kZWxJbmZvLm5hbWUpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBtb2RlbHNMaXN0W21vZGVsSW5mby5uYW1lXSkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgYG1pc3NpbmcgY2xhc3NuYW1lYCBlcnJvciB3aGlsZSByZWdpc3RyYXRpb24gb2YgYHBsdWdpbmAgbW9kZWwuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxzSGFuZGJvb2sgPSBuZXcgTW9kZWxzVW5pdmVyc2UoKTtcbiAgICAgIGNvbnN0IG1vZGVsSW5mbzogSW1wbEluaXRpYWxpemVNb2RlbCA9IHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgYWxsb2NhdGlvbjogJ21vY2stYWxsb2NhdGlvbicsXG4gICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJ21vY2stbmFtZScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2RlbHNMaXN0ID0gbW9kZWxzSGFuZGJvb2sud3JpdGVEb3duKG1vZGVsSW5mbyk7XG4gICAgICBjb25zdCBtb2RlbCA9IG1vZGVsc0xpc3RbbW9kZWxJbmZvLm5hbWVdO1xuXG4gICAgICBleHBlY3QuYXNzZXJ0aW9ucygyKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbW9kZWwoe1xuICAgICAgICAgICdjb3JlLXVuaXRzJzogMSxcbiAgICAgICAgICAncGh5c2ljYWwtcHJvY2Vzc29yJzogJ2ludGVsJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGV4cGVjdChlcnJvcikudG9CZUluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS50b0VxdWFsKE1JU1NJTkdfQ0xBU1NOQU1FKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBgbWlzc2luZyBwYXRoIHBhcmFtZXRlcmAgZXJyb3Igd2hpbGUgcmVnaXN0cmF0aW9uIG9mIGBwbHVnaW5gIG1vZGVsLicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsc0hhbmRib29rID0gbmV3IE1vZGVsc1VuaXZlcnNlKCk7XG4gICAgICBjb25zdCBtb2RlbEluZm86IEltcGxJbml0aWFsaXplTW9kZWwgPSB7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGFsbG9jYXRpb246ICdtb2NrLWFsbG9jYXRpb24nLFxuICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6ICdtb2NrLW5hbWUnLFxuICAgICAgICBtb2RlbDogJ01vY2thdml6dGFNb2RlbCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2RlbHNMaXN0ID0gbW9kZWxzSGFuZGJvb2sud3JpdGVEb3duKG1vZGVsSW5mbyk7XG4gICAgICBjb25zdCBtb2RlbCA9IG1vZGVsc0xpc3RbbW9kZWxJbmZvLm5hbWVdO1xuXG4gICAgICBleHBlY3QuYXNzZXJ0aW9ucygyKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbW9kZWwoe1xuICAgICAgICAgICdjb3JlLXVuaXRzJzogMSxcbiAgICAgICAgICAncGh5c2ljYWwtcHJvY2Vzc29yJzogJ2ludGVsJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGV4cGVjdChlcnJvcikudG9CZUluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS50b0VxdWFsKE1JU1NJTkdfUEFUSCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IGluaXRhbGl6ZSBwbHVnaW4gbW9kZWwuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgamVzdC5tb2NrKFxuICAgICAgICAnbW9ja2F2aXp0YS1tb2RlbCcsXG4gICAgICAgICgpID0+ICh7XG4gICAgICAgICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICAgICAgICBNb2NrYXZpenRhTW9kZWw6IE1vY2tNb2RlbCxcbiAgICAgICAgfSksXG4gICAgICAgIHt2aXJ0dWFsOiB0cnVlfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgbW9kZWxzSGFuZGJvb2sgPSBuZXcgTW9kZWxzVW5pdmVyc2UoKTtcbiAgICAgIGNvbnN0IG1vZGVsSW5mbzogSW1wbEluaXRpYWxpemVNb2RlbCA9IHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgYWxsb2NhdGlvbjogJ21vY2stYWxsb2NhdGlvbicsXG4gICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJ21vY2stbmFtZScsXG4gICAgICAgIG1vZGVsOiAnTW9ja2F2aXp0YU1vZGVsJyxcbiAgICAgICAgcGF0aDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9tb2NrL21vY2thdml6dGEtbW9kZWwnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9kZWxzTGlzdCA9IG1vZGVsc0hhbmRib29rLndyaXRlRG93bihtb2RlbEluZm8pO1xuICAgICAgY29uc3QgbW9kZWwgPSBtb2RlbHNMaXN0W21vZGVsSW5mby5uYW1lXTtcblxuICAgICAgZXhwZWN0LmFzc2VydGlvbnMoMSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbW9kZWwoe1xuICAgICAgICAnY29yZS11bml0cyc6IDEsXG4gICAgICAgICdwaHlzaWNhbC1wcm9jZXNzb3InOiAnaW50ZWwnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXNwb25zZSkudG9CZUluc3RhbmNlT2YoTW9ja01vZGVsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYGlucHV0IG1vZGVsIGRvZXMgbm90IGV4dGVuZCBiYXNlIGludGVyZmFjZWAgZXJyb3IuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgamVzdC5tb2NrKFxuICAgICAgICAnbW9ja2F2aXp0YS1tb2RlbCcsXG4gICAgICAgICgpID0+ICh7XG4gICAgICAgICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICAgICAgICBNb2NrYXZpenRhTW9kZWw6IGNsYXNzIEZha2VNb2RlbCB7fSxcbiAgICAgICAgfSksXG4gICAgICAgIHt2aXJ0dWFsOiB0cnVlfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgbW9kZWxzSGFuZGJvb2sgPSBuZXcgTW9kZWxzVW5pdmVyc2UoKTtcbiAgICAgIGNvbnN0IG1vZGVsSW5mbzogSW1wbEluaXRpYWxpemVNb2RlbCA9IHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgYWxsb2NhdGlvbjogJ21vY2stYWxsb2NhdGlvbicsXG4gICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJ21vY2stbmFtZScsXG4gICAgICAgIG1vZGVsOiAnTW9ja2F2aXp0YU1vZGVsJyxcbiAgICAgICAgcGF0aDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9tb2NrL21vY2thdml6dGEtbW9kZWwnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9kZWxzTGlzdCA9IG1vZGVsc0hhbmRib29rLndyaXRlRG93bihtb2RlbEluZm8pO1xuICAgICAgY29uc3QgbW9kZWwgPSBtb2RlbHNMaXN0W21vZGVsSW5mby5uYW1lXTtcblxuICAgICAgZXhwZWN0LmFzc2VydGlvbnMoMik7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG1vZGVsKHtcbiAgICAgICAgICAnY29yZS11bml0cyc6IDEsXG4gICAgICAgICAgJ3BoeXNpY2FsLXByb2Nlc3Nvcic6ICdpbnRlbCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBleHBlY3QoZXJyb3IpLnRvQmVJbnN0YW5jZU9mKEVycm9yKTtcbiAgICAgICAgICBleHBlY3QoZXJyb3IubWVzc2FnZSkudG9FcXVhbChOT1RfT1VUUFVUX01PREVMX0VYVEVOU0lPTik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEluaXRpYWxpemVkTW9kZWwoKTogJywgKCkgPT4ge1xuICAgIGl0KCd0aHJvd3MgZXJyb3IgaW4gY2FzZSBpZiBtb2RlbCBpcyBub3QgaW5pdGFsaXplZC4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbHNIYW5kYm9vayA9IG5ldyBNb2RlbHNVbml2ZXJzZSgpO1xuXG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSAnbW9jay1tb2RlbE5hbWUnO1xuICAgICAgY29uc3QgY29uZmlnID0ge307XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkTWVzc2FnZSA9IE5PVF9JTklUSUFMSVpFRF9NT0RFTChtb2RlbE5hbWUpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBtb2RlbHNIYW5kYm9vay5nZXRJbml0aWFsaXplZE1vZGVsKG1vZGVsTmFtZSwgY29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgZXhwZWN0KGVycm9yKS50b0JlSW5zdGFuY2VPZihFcnJvcik7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLm1lc3NhZ2UpLnRvRXF1YWwoZXhwZWN0ZWRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQuc2tpcCgncmV0dXJucyBpbml0YWxpemVkIG1vZGVsLicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsc0hhbmRib29rID0gbmV3IE1vZGVsc1VuaXZlcnNlKCk7XG4gICAgICBjb25zdCBtb2RlbEluZm86IEltcGxJbml0aWFsaXplTW9kZWwgPSB7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGFsbG9jYXRpb246ICdtb2NrLWFsbG9jYXRpb24nLFxuICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6ICdib2F2aXp0YS1jcHUnLFxuICAgICAgfTtcbiAgICAgIG1vZGVsc0hhbmRib29rLndyaXRlRG93bihtb2RlbEluZm8pO1xuXG4gICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICdwaHlzaWNhbC1wcm9jZXNzb3InOiAnaW50ZWwnLFxuICAgICAgICAnY29yZS11bml0cyc6IDEsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IG1vZGVsc0hhbmRib29rLmdldEluaXRpYWxpemVkTW9kZWwoXG4gICAgICAgIG1vZGVsSW5mby5uYW1lLFxuICAgICAgICBjb25maWdcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChtb2RlbCkudG9CZUluc3RhbmNlT2YoQm9hdml6dGFDcHVPdXRwdXRNb2RlbCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};