@grnsft/if 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.examples/ompls/azure.yml +205 -0
  2. package/.github/workflows/nodejs-ci.yml +0 -8
  3. package/README.md +48 -9
  4. package/build/index.js +1 -2
  5. package/examples/impls/test/azure.yml +8 -8
  6. package/examples/impls/test/ccf.yml +5 -3
  7. package/examples/impls/test/if-demo.yml +19 -9
  8. package/examples/impls/test/metadata.yml +3 -2
  9. package/examples/impls/test/nesting.yml +10 -13
  10. package/examples/impls/test/sci-e.yml +1 -1
  11. package/examples/impls/test/sci-m.yml +2 -2
  12. package/examples/impls/test/sci-o.yml +2 -4
  13. package/examples/impls/test/sci.yml +1 -2
  14. package/examples/impls/test/shell.yml +2 -1
  15. package/examples/impls/{tdp-finder-test.yml → test/tdp-finder.yml} +8 -8
  16. package/examples/ompls/ccf.yml +3 -1
  17. package/examples/ompls/if-demo.yml +46 -22
  18. package/package.json +12 -5
  19. package/tsconfig.build.json +7 -0
  20. package/tsconfig.build.tsbuildinfo +1 -0
  21. package/build/__mocks__/azure/index.d.ts +0 -11
  22. package/build/__mocks__/azure/index.js +0 -132
  23. package/build/__mocks__/boavizta/countries.json +0 -138
  24. package/build/__mocks__/boavizta/instance_types.json +0 -625
  25. package/build/__mocks__/boavizta/providers.json +0 -1
  26. package/build/__mocks__/fs/index.d.ts +0 -3
  27. package/build/__mocks__/fs/index.js +0 -56
  28. package/build/__mocks__/model-universe/index.d.ts +0 -31
  29. package/build/__mocks__/model-universe/index.js +0 -64
  30. package/build/__mocks__/watt-time/data.json +0 -119
  31. package/build/__tests__/integration/ompl/index.test.d.ts +0 -1
  32. package/build/__tests__/integration/ompl/index.test.js +0 -61
  33. package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +0 -1
  34. package/build/__tests__/unit/lib/azure-importer/index.test.js +0 -152
  35. package/build/__tests__/unit/lib/boavizta/index.test.d.ts +0 -1
  36. package/build/__tests__/unit/lib/boavizta/index.test.js +0 -579
  37. package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +0 -1
  38. package/build/__tests__/unit/lib/case-studies/aveva.test.js +0 -36
  39. package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +0 -1
  40. package/build/__tests__/unit/lib/case-studies/emem.test.js +0 -108
  41. package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +0 -1
  42. package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +0 -53
  43. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +0 -1
  44. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +0 -23
  45. package/build/__tests__/unit/lib/ccf/index.test.d.ts +0 -1
  46. package/build/__tests__/unit/lib/ccf/index.test.js +0 -223
  47. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +0 -1
  48. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +0 -73
  49. package/build/__tests__/unit/lib/models-universe.test.d.ts +0 -1
  50. package/build/__tests__/unit/lib/models-universe.test.js +0 -193
  51. package/build/__tests__/unit/lib/observatory.test.d.ts +0 -1
  52. package/build/__tests__/unit/lib/observatory.test.js +0 -99
  53. package/build/__tests__/unit/lib/sci/index.test.d.ts +0 -1
  54. package/build/__tests__/unit/lib/sci/index.test.js +0 -106
  55. package/build/__tests__/unit/lib/sci-e/index.test.d.ts +0 -1
  56. package/build/__tests__/unit/lib/sci-e/index.test.js +0 -30
  57. package/build/__tests__/unit/lib/sci-m/index.test.d.ts +0 -1
  58. package/build/__tests__/unit/lib/sci-m/index.test.js +0 -58
  59. package/build/__tests__/unit/lib/sci-o/index.test.d.ts +0 -1
  60. package/build/__tests__/unit/lib/sci-o/index.test.js +0 -42
  61. package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +0 -1
  62. package/build/__tests__/unit/lib/shell-imp/index.test.js +0 -21
  63. package/build/__tests__/unit/lib/supercomputer.test.d.ts +0 -1
  64. package/build/__tests__/unit/lib/supercomputer.test.js +0 -231
  65. package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +0 -1
  66. package/build/__tests__/unit/lib/tdp-finder/index.test.js +0 -62
  67. package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +0 -1
  68. package/build/__tests__/unit/lib/teads-aws/index.test.js +0 -170
  69. package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +0 -1
  70. package/build/__tests__/unit/lib/teads-curve/index.test.js +0 -146
  71. package/build/__tests__/unit/lib/watt-time/index.test.d.ts +0 -1
  72. package/build/__tests__/unit/lib/watt-time/index.test.js +0 -106
  73. package/build/__tests__/unit/util/args.test.d.ts +0 -1
  74. package/build/__tests__/unit/util/args.test.js +0 -92
  75. package/build/__tests__/unit/util/models-universe.test.d.ts +0 -1
  76. package/build/__tests__/unit/util/models-universe.test.js +0 -193
  77. package/build/__tests__/unit/util/observatory.test.d.ts +0 -1
  78. package/build/__tests__/unit/util/observatory.test.js +0 -99
  79. package/build/__tests__/unit/util/supercomputer.test.d.ts +0 -1
  80. package/build/__tests__/unit/util/supercomputer.test.js +0 -231
  81. package/build/__tests__/unit/util/yaml.test.d.ts +0 -1
  82. package/build/__tests__/unit/util/yaml.test.js +0 -59
  83. package/build/lib/azure-importer/index.d.ts +0 -55
  84. package/build/lib/azure-importer/index.js +0 -314
  85. package/build/lib/boavizta/index.d.ts +0 -53
  86. package/build/lib/boavizta/index.js +0 -254
  87. package/build/lib/case-studies/aveva-model.d.ts +0 -29
  88. package/build/lib/case-studies/aveva-model.js +0 -53
  89. package/build/lib/case-studies/emem-model.d.ts +0 -42
  90. package/build/lib/case-studies/emem-model.js +0 -93
  91. package/build/lib/case-studies/eshoppen-model.d.ts +0 -24
  92. package/build/lib/case-studies/eshoppen-model.js +0 -123
  93. package/build/lib/case-studies/index.d.ts +0 -4
  94. package/build/lib/case-studies/index.js +0 -21
  95. package/build/lib/case-studies/sci-accenture-model.d.ts +0 -10
  96. package/build/lib/case-studies/sci-accenture-model.js +0 -37
  97. package/build/lib/ccf/aws-embodied.json +0 -5591
  98. package/build/lib/ccf/aws-instances.json +0 -21116
  99. package/build/lib/ccf/aws-use.json +0 -79
  100. package/build/lib/ccf/azure-embodied.json +0 -6547
  101. package/build/lib/ccf/azure-instances.json +0 -8332
  102. package/build/lib/ccf/azure-use.json +0 -58
  103. package/build/lib/ccf/gcp-embodied.json +0 -3049
  104. package/build/lib/ccf/gcp-instances.json +0 -3880
  105. package/build/lib/ccf/gcp-use.json +0 -58
  106. package/build/lib/ccf/index.d.ts +0 -63
  107. package/build/lib/ccf/index.js +0 -338
  108. package/build/lib/cloud-instance-metadata/aws-instances.json +0 -1
  109. package/build/lib/cloud-instance-metadata/azure-instances.json +0 -1
  110. package/build/lib/cloud-instance-metadata/index.d.ts +0 -15
  111. package/build/lib/cloud-instance-metadata/index.js +0 -104
  112. package/build/lib/index.d.ts +0 -14
  113. package/build/lib/index.js +0 -32
  114. package/build/lib/interfaces/ccf.d.ts +0 -19
  115. package/build/lib/interfaces/ccf.js +0 -3
  116. package/build/lib/interfaces/index.d.ts +0 -7
  117. package/build/lib/interfaces/index.js +0 -18
  118. package/build/lib/sci/index.d.ts +0 -13
  119. package/build/lib/sci/index.js +0 -131
  120. package/build/lib/sci-e/index.d.ts +0 -38
  121. package/build/lib/sci-e/index.js +0 -85
  122. package/build/lib/sci-m/index.d.ts +0 -10
  123. package/build/lib/sci-m/index.js +0 -124
  124. package/build/lib/sci-o/index.d.ts +0 -17
  125. package/build/lib/sci-o/index.js +0 -52
  126. package/build/lib/shell-imp/index.d.ts +0 -32
  127. package/build/lib/shell-imp/index.js +0 -82
  128. package/build/lib/tdp-finder/index.d.ts +0 -19
  129. package/build/lib/tdp-finder/index.js +0 -98
  130. package/build/lib/teads-aws/aws-embodied.json +0 -1
  131. package/build/lib/teads-aws/aws-instances.json +0 -1
  132. package/build/lib/teads-aws/index.d.ts +0 -58
  133. package/build/lib/teads-aws/index.js +0 -208
  134. package/build/lib/teads-curve/index.d.ts +0 -52
  135. package/build/lib/teads-curve/index.js +0 -158
  136. package/build/lib/watt-time/index.d.ts +0 -18
  137. package/build/lib/watt-time/index.js +0 -204
  138. package/build/util/models-universe.d.ts +0 -28
  139. package/build/util/models-universe.js +0 -95
  140. package/build/util/observatory.d.ts +0 -20
  141. package/build/util/observatory.js +0 -31
  142. package/build/util/supercomputer.d.ts +0 -30
  143. package/build/util/supercomputer.js +0 -109
  144. package/docs/implementations/tdp-finder.md +0 -36
  145. package/examples/impls/test/complex-pipeline.yml +0 -67
  146. package/examples/impls/test/toto.yaml +0 -22
  147. package/tsconfig.tsbuildinfo +0 -1
@@ -1,204 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dhdHQtdGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBMEI7QUFDMUIsK0JBQStCO0FBSS9CLHlDQUFvQztBQUlwQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNCLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxTQUFTLENBQUM7QUFFOUIsTUFBYSxxQkFBcUI7SUFBbEM7UUFDRSxlQUFVLEdBQXVCLFNBQVMsQ0FBQztRQUMzQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR1gsWUFBTyxHQUFHLDhCQUE4QixDQUFDO0lBc08zQyxDQUFDO0lBcE9DLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBa0I7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBRSxVQUFVLENBQUMsT0FBTyxDQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyRDtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7WUFDckIsbURBQW1EO1lBQ25ELElBQUksUUFBUSxHQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxVQUFVLENBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JFLElBQUksUUFBUSxHQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxVQUFVLENBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRXJFLHNHQUFzRztZQUN0RyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQy9CLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDakQ7WUFFRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQy9CLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDakQ7WUFFRCx1REFBdUQ7WUFDdkQsSUFBSSxRQUFRLEtBQUssRUFBRSxJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUN6RDtZQUVELHVDQUF1QztZQUN2QyxNQUFNLGFBQWEsR0FBRyxNQUFNLGVBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxRQUFRLEVBQUU7Z0JBQzdELElBQUksRUFBRTtvQkFDSixRQUFRO29CQUNSLFFBQVE7aUJBQ1Q7YUFDRixDQUFDLENBQUM7WUFDSCxJQUNFLGFBQWEsS0FBSyxTQUFTO2dCQUMzQixhQUFhLENBQUMsSUFBSSxLQUFLLFNBQVM7Z0JBQ2hDLENBQUMsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUNoQztnQkFDQSxNQUFNLElBQUksS0FBSyxDQUNiLDBEQUEwRCxDQUMzRCxDQUFDO2FBQ0g7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBcUM7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsc0VBQXNFO1FBQ3RFLE1BQU0sRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLHVEQUF1RDtRQUN2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDdkMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsUUFBUSxFQUFFLGFBQWE7WUFDdkIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsdURBQXVEO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDakMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDM0QsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQ3hELFdBQVcsRUFDWCxVQUFVLEVBQ1YsUUFBUSxDQUNULENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELENBQzlELENBQUM7YUFDSDtZQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sMEJBQTBCLENBQ2hDLFdBQTJCLEVBQzNCLFVBQXVCLEVBQ3ZCLFFBQXFCO1FBRXJCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBa0IsRUFBRSxFQUFFO1lBQ2xELDBEQUEwRDtZQUMxRCx5REFBeUQ7WUFDekQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDL0MsT0FBTyxDQUFDLENBQUM7YUFDVjtZQUNELHVEQUF1RDtZQUN2RCxvRUFBb0U7WUFDcEUsSUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUM1RDtnQkFDQSxPQUFPLENBQUMsQ0FBQzthQUNWO1lBQ0QsOERBQThEO1lBQzlELG9CQUFvQjtZQUNwQiwwREFBMEQ7WUFDMUQseURBQXlEO1lBQ3pELDhEQUE4RDtZQUM5RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztZQUM5QyxVQUFVLElBQUksQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQWdCO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixNQUFNLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7aUJBQzFEO2FBQ0Y7WUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUN6QztZQUNELElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsS0FBbUI7UUFDdkQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDRDQUE0QztRQUMzRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLENBQ3hFLENBQUM7U0FDSDtRQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDtRQUNELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtRQUNyRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7UUFDdkUsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBZ0I7UUFDN0MsOEJBQThCO1FBQzlCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyw2QkFBNkI7UUFDN0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUVoQyxzRkFBc0Y7WUFDdEYsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUN4QixDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWQsNEZBQTRGO1lBQzVGLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDeEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksYUFBYSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLDhIQUE4SDtnQkFDNUgsYUFBYTtnQkFDYix1QkFBdUIsQ0FDMUIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBbUI7UUFDakMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNoQywyQ0FBMkM7UUFDM0MsSUFBSSxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUN6QztRQUNELE1BQU0sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhFLE1BQU0sTUFBTSxHQUFHO1lBQ2IsUUFBUSxFQUFFLFFBQVE7WUFDbEIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1lBQ2hFLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1NBQ3pELENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQUs7YUFDdkIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sT0FBTyxFQUFFO1lBQzNCLE1BQU07WUFDTixPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLEtBQUssRUFBRTthQUN0QztTQUNGLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzRTtRQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDekMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FDYixJQUFZLEVBQ1osWUFBZ0M7UUFFaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDekM7UUFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQTNPRCxzREEyT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0ICogYXMgZGF5anMgZnJvbSAnZGF5anMnO1xuXG5pbXBvcnQge0lPdXRwdXRNb2RlbEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7Q09ORklHfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5pbXBvcnQge0tleVZhbHVlUGFpcn0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuY29uc3Qge01PREVMX0lEU30gPSBDT05GSUc7XG5jb25zdCB7V0FUVF9USU1FfSA9IE1PREVMX0lEUztcblxuZXhwb3J0IGNsYXNzIFdhdHRUaW1lR3JpZEVtaXNzaW9ucyBpbXBsZW1lbnRzIElPdXRwdXRNb2RlbEludGVyZmFjZSB7XG4gIGF1dGhQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgdG9rZW4gPSAnJztcbiAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQ7XG4gIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYmFzZVVybCA9ICdodHRwczovL2FwaTIud2F0dHRpbWUub3JnL3YyJztcblxuICBhc3luYyBhdXRoZW50aWNhdGUoYXV0aFBhcmFtczogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50b2tlbiA9ICd0b2tlbicgaW4gYXV0aFBhcmFtcyA/IChhdXRoUGFyYW1zWyd0b2tlbiddIGFzIHN0cmluZykgOiAnJztcbiAgICBpZiAodGhpcy50b2tlbi5zdGFydHNXaXRoKCdFTlZfJykpIHtcbiAgICAgIHRoaXMudG9rZW4gPSBwcm9jZXNzLmVudlt0aGlzLnRva2VuLnNsaWNlKDQpXSA/PyAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW4gPT09ICcnKSB7XG4gICAgICAvLyBFeHRyYWN0aW5nIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmcm9tIGF1dGhQYXJhbXNcbiAgICAgIGxldCB1c2VybmFtZSA9XG4gICAgICAgICd1c2VybmFtZScgaW4gYXV0aFBhcmFtcyA/IChhdXRoUGFyYW1zWyd1c2VybmFtZSddIGFzIHN0cmluZykgOiAnJztcbiAgICAgIGxldCBwYXNzd29yZCA9XG4gICAgICAgICdwYXNzd29yZCcgaW4gYXV0aFBhcmFtcyA/IChhdXRoUGFyYW1zWydwYXNzd29yZCddIGFzIHN0cmluZykgOiAnJztcblxuICAgICAgLy8gaWYgdXNlcm5hbWUgb3IgcGFzc3dvcmQgaXMgRU5WXzxlbnZfdmFyX25hbWU+LCB0aGVuIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgICBpZiAodXNlcm5hbWUuc3RhcnRzV2l0aCgnRU5WXycpKSB7XG4gICAgICAgIHVzZXJuYW1lID0gcHJvY2Vzcy5lbnZbdXNlcm5hbWUuc2xpY2UoNCldID8/ICcnO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFzc3dvcmQuc3RhcnRzV2l0aCgnRU5WXycpKSB7XG4gICAgICAgIHBhc3N3b3JkID0gcHJvY2Vzcy5lbnZbcGFzc3dvcmQuc2xpY2UoNCldID8/ICcnO1xuICAgICAgfVxuXG4gICAgICAvLyAgV2F0dFRpbWUgQVBJIHJlcXVpcmVzIHVzZXJuYW1lIGFuZCBwYXNzd29yZCAvIHRva2VuXG4gICAgICBpZiAodXNlcm5hbWUgPT09ICcnIHx8IHBhc3N3b3JkID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQgJiB0b2tlbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2dpbiB0byBXYXR0VGltZSBBUEkgdG8gZ2V0IGEgdG9rZW5cbiAgICAgIGNvbnN0IHRva2VuUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7dGhpcy5iYXNlVXJsfS9sb2dpbmAsIHtcbiAgICAgICAgYXV0aDoge1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIHRva2VuUmVzcG9uc2UgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0b2tlblJlc3BvbnNlLmRhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAhKCd0b2tlbicgaW4gdG9rZW5SZXNwb25zZS5kYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnTWlzc2luZyB0b2tlbiBpbiByZXNwb25zZS4gSW52YWxpZCBjcmVkZW50aWFscyBwcm92aWRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2VuID0gdG9rZW5SZXNwb25zZS5kYXRhLnRva2VuO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGUoaW5wdXRzOiBvYmplY3QgfCBvYmplY3RbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dHMgc2hvdWxkIGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIC8vIHZhbGlkYXRlIGlucHV0cyBmb3IgbG9jYXRpb24gZGF0YSArIHRpbWVzdGFtcCArIGR1cmF0aW9uXG4gICAgdGhpcy52YWxpZGF0ZWlucHV0cyhpbnB1dHMpO1xuICAgIC8vIGRldGVybWluZSB0aGUgZWFybGllc3Qgc3RhcnQgYW5kIHRvdGFsIGR1cmF0aW9uIG9mIGFsbCBpbnB1dCBibG9ja3NcbiAgICBjb25zdCB7c3RhcnRUaW1lLCBmZXRjaER1cmF0aW9ufSA9IHRoaXMuZGV0ZXJtaW5laW5wdXRTdGFydEVuZChpbnB1dHMpO1xuICAgIC8vIGZldGNoIGRhdGEgZnJvbSBXYXR0VGltZSBBUEkgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb25cbiAgICBjb25zdCB3YXR0aW1lZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKHtcbiAgICAgIHRpbWVzdGFtcDogc3RhcnRUaW1lLmZvcm1hdCgpLFxuICAgICAgZHVyYXRpb246IGZldGNoRHVyYXRpb24sXG4gICAgICAuLi5pbnB1dHNbMF0sXG4gICAgfSk7XG4gICAgLy8gZm9yIGVhY2ggaW5wdXQgYmxvY2ssIGNhbGN1bGF0ZSB0aGUgYXZlcmFnZSBlbWlzc2lvblxuICAgIGlucHV0cy5tYXAoKGlucHV0OiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U3RhcnQgPSBkYXlqcyhpbnB1dC50aW1lc3RhbXApO1xuICAgICAgY29uc3QgaW5wdXRFbmQgPSBpbnB1dFN0YXJ0LmFkZChpbnB1dC5kdXJhdGlvbiwgJ3NlY29uZHMnKTtcbiAgICAgIGNvbnN0IHtkYXRhcG9pbnRzLCBkYXRhfSA9IHRoaXMuZ2V0V2F0dFRpbWVEYXRhRm9yRHVyYXRpb24oXG4gICAgICAgIHdhdHRpbWVkYXRhLFxuICAgICAgICBpbnB1dFN0YXJ0LFxuICAgICAgICBpbnB1dEVuZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVtaXNzaW9uU3VtID0gZGF0YS5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYiwgMCk7XG4gICAgICBpZiAoZGF0YXBvaW50cyA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0RpZCBub3QgcmVjZWl2ZSBkYXRhIGZyb20gV2F0dFRpbWUgQVBJIGZvciB0aGUgaW5wdXQgYmxvY2suJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaW5wdXRbJ2dyaWQtY2FyYm9uLWludGVuc2l0eSddID0gZW1pc3Npb25TdW0gLyBkYXRhcG9pbnRzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlucHV0cztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V2F0dFRpbWVEYXRhRm9yRHVyYXRpb24oXG4gICAgd2F0dGltZWRhdGE6IEtleVZhbHVlUGFpcltdLFxuICAgIGlucHV0U3RhcnQ6IGRheWpzLkRheWpzLFxuICAgIGlucHV0RW5kOiBkYXlqcy5EYXlqc1xuICApOiB7ZGF0YXBvaW50czogbnVtYmVyOyBkYXRhOiBudW1iZXJbXX0ge1xuICAgIGxldCBkYXRhcG9pbnRzID0gMDtcbiAgICBjb25zdCBkYXRhID0gd2F0dGltZWRhdGEubWFwKChkYXRhOiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIC8vIFdhdHRUaW1lIEFQSSByZXR1cm5zIGZ1bGwgZGF0YSBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbi5cbiAgICAgIC8vIGlmIHRoZSBkYXRhIHBvaW50IGlzIGJlZm9yZSB0aGUgaW5wdXQgc3RhcnQsIGlnbm9yZSBpdFxuICAgICAgaWYgKGRheWpzKGRhdGEucG9pbnRfdGltZSkuaXNCZWZvcmUoaW5wdXRTdGFydCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZGF0YSBwb2ludCBpcyBhZnRlciB0aGUgaW5wdXQgZW5kLCBpZ25vcmUgaXQuXG4gICAgICAvLyBpZiB0aGUgZGF0YSBwb2ludCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBpbnB1dCBlbmQsIGlnbm9yZSBpdFxuICAgICAgaWYgKFxuICAgICAgICBkYXlqcyhkYXRhLnBvaW50X3RpbWUpLmlzQWZ0ZXIoaW5wdXRFbmQpIHx8XG4gICAgICAgIGRheWpzKGRhdGEucG9pbnRfdGltZSkuZm9ybWF0KCkgPT09IGRheWpzKGlucHV0RW5kKS5mb3JtYXQoKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgLy8gbGJzL01XaCB0byBLZy9NV2ggYnkgZGl2aWRpbmcgYnkgMC40NTM1OTIgKDAuNDUzNTkyIEtnL2xicylcbiAgICAgIC8vIChLZy9NV2ggPT0gZy9rV2gpXG4gICAgICAvLyBjb252ZXJ0IHRvIGtnL0tXaCBieSBkaXZpZGluZyBieSAxMDAwLiAoMU1XaCA9IDEwMDBLV2gpXG4gICAgICAvLyBjb252ZXJ0IHRvIGcvS1doIGJ5IG11bHRpcGx5aW5nIGJ5IDEwMDAuICgxS2cgPSAxMDAwZylcbiAgICAgIC8vIGhlbmNlIGVhY2ggb3RoZXIgY2FuY2VsIG91dCBhbmQgZy9LV2ggaXMgdGhlIHNhbWUgYXMga2cvTVdoXG4gICAgICBjb25zdCBncmlkX2VtaXNzaW9uID0gZGF0YS52YWx1ZSAvIDAuNDUzNTkyMzc7XG4gICAgICBkYXRhcG9pbnRzICs9IDE7XG4gICAgICByZXR1cm4gZ3JpZF9lbWlzc2lvbjtcbiAgICB9KTtcbiAgICByZXR1cm4ge2RhdGFwb2ludHMsIGRhdGF9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZWlucHV0cyhpbnB1dHM6IG9iamVjdFtdKSB7XG4gICAgaW5wdXRzLmZvckVhY2goKGlucHV0OiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIGlmICghKCdsb2NhdGlvbicgaW4gaW5wdXQpKSB7XG4gICAgICAgIGNvbnN0IHtsYXRpdHVkZSwgbG9uZ2l0dWRlfSA9IHRoaXMuZ2V0TGF0aXR1ZGVMb25naXR1ZGVGcm9taW5wdXQoaW5wdXQpO1xuICAgICAgICBpZiAoaXNOYU4obGF0aXR1ZGUpIHx8IGlzTmFOKGxvbmdpdHVkZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhdGl0dWRlIG9yIGxvbmdpdHVkZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEoJ3RpbWVzdGFtcCcgaW4gaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZXN0YW1wIGlzIG1pc3NpbmcnKTtcbiAgICAgIH1cbiAgICAgIGlmICghKCdkdXJhdGlvbicgaW4gaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZHVyYXRpb24gaXMgbWlzc2luZycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXRpdHVkZUxvbmdpdHVkZUZyb21pbnB1dChpbnB1dDogS2V5VmFsdWVQYWlyKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBpbnB1dFsnbG9jYXRpb24nXS5zcGxpdCgnLCcpOyAvL3NwbGl0IGxvY2F0aW9uIGludG8gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZVxuICAgIGlmIChsb2NhdGlvbi5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2xvY2F0aW9uIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChsb2NhdGlvblswXSA9PT0gJycgfHwgbG9jYXRpb25bMV0gPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhdGl0dWRlIG9yIGxvbmdpdHVkZSBpcyBtaXNzaW5nJyk7XG4gICAgfVxuICAgIGlmIChsb2NhdGlvblswXSA9PT0gJzAnIHx8IGxvY2F0aW9uWzFdID09PSAnMCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbGF0aXR1ZGUgb3IgbG9uZ2l0dWRlIGlzIG1pc3NpbmcnKTtcbiAgICB9XG4gICAgY29uc3QgbGF0aXR1ZGUgPSBwYXJzZUZsb2F0KGxvY2F0aW9uWzBdKTsgLy9jb252ZXJ0IGxhdGl0dWRlIHRvIGZsb2F0XG4gICAgY29uc3QgbG9uZ2l0dWRlID0gcGFyc2VGbG9hdChsb2NhdGlvblsxXSk7IC8vY29udmVydCBsb25naXR1ZGUgdG8gZmxvYXRcbiAgICByZXR1cm4ge2xhdGl0dWRlLCBsb25naXR1ZGV9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVpbnB1dFN0YXJ0RW5kKGlucHV0czogb2JqZWN0W10pIHtcbiAgICAvLyBsYXJnZXN0IHBvc3NpYmxlIHN0YXJ0IHRpbWVcbiAgICBsZXQgc3RhcnR0aW1lID0gZGF5anMoJzk5OTktMTItMzEnKTtcbiAgICAvLyBzbWFsbGVzdCBwb3NzaWJsZSBlbmQgdGltZVxuICAgIGxldCBlbmR0aW1lID0gZGF5anMoJzE5NzAtMDEtMDEnKTtcbiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQ6IEtleVZhbHVlUGFpcikgPT4ge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBpbnB1dC5kdXJhdGlvbjtcblxuICAgICAgLy8gaWYgdGhlIGlucHV0IHRpbWVzdGFtcCBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgc3RhcnR0aW1lLCBzZXQgaXQgYXMgdGhlIG5ldyBzdGFydHRpbWVcbiAgICAgIHN0YXJ0dGltZSA9IGRheWpzKGlucHV0LnRpbWVzdGFtcCkuaXNCZWZvcmUoc3RhcnR0aW1lKVxuICAgICAgICA/IGRheWpzKGlucHV0LnRpbWVzdGFtcClcbiAgICAgICAgOiBzdGFydHRpbWU7XG5cbiAgICAgIC8vIGlmIHRoZSBpbnB1dCB0aW1lc3RhbXAgKyBkdXJhdGlvbiBpcyBhZnRlciB0aGUgY3VycmVudCBlbmR0aW1lLCBzZXQgaXQgYXMgdGhlIG5ldyBlbmR0aW1lXG4gICAgICBlbmR0aW1lID0gZGF5anMoaW5wdXQudGltZXN0YW1wKS5hZGQoZHVyYXRpb24sICdzZWNvbmRzJykuaXNBZnRlcihlbmR0aW1lKVxuICAgICAgICA/IGRheWpzKGlucHV0LnRpbWVzdGFtcCkuYWRkKGR1cmF0aW9uLCAnc2Vjb25kcycpXG4gICAgICAgIDogZW5kdGltZTtcbiAgICB9KTtcbiAgICBjb25zdCBmZXRjaER1cmF0aW9uID0gZW5kdGltZS5kaWZmKHN0YXJ0dGltZSwgJ3NlY29uZHMnKTtcbiAgICBpZiAoZmV0Y2hEdXJhdGlvbiA+IDMyICogMjQgKiA2MCAqIDYwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdkdXJhdGlvbiBpcyB0b28gbG9uZy5XYXR0VGltZSBBUEkgb25seSBzdXBwb3J0cyB1cCB0byAzMiBkYXlzLiBBbGwgaW5wdXRzIG11c3QgYmUgd2l0aGluIDMyIGRheXMgb2YgZWFjaCBvdGhlci4gRHVyYXRpb24gb2YgJyArXG4gICAgICAgICAgZmV0Y2hEdXJhdGlvbiArXG4gICAgICAgICAgJyBzZWNvbmRzIGlzIHRvbyBsb25nLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7c3RhcnRUaW1lOiBzdGFydHRpbWUsIGZldGNoRHVyYXRpb259O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKGlucHV0OiBLZXlWYWx1ZVBhaXIpOiBQcm9taXNlPEtleVZhbHVlUGFpcltdPiB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpbnB1dC5kdXJhdGlvbjtcbiAgICAvLyBXYXR0VGltZSBBUEkgb25seSBzdXBwb3J0cyB1cCB0byAzMiBkYXlzXG4gICAgaWYgKGR1cmF0aW9uID4gMzIgKiAyNCAqIDYwICogNjApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZHVyYXRpb24gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG4gICAgY29uc3Qge2xhdGl0dWRlLCBsb25naXR1ZGV9ID0gdGhpcy5nZXRMYXRpdHVkZUxvbmdpdHVkZUZyb21pbnB1dChpbnB1dCk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBsYXRpdHVkZTogbGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgIHN0YXJ0dGltZTogZGF5anMoaW5wdXQudGltZXN0YW1wKS5mb3JtYXQoJ1lZWVktTU0tRERUSEg6bW06c3NaJyksXG4gICAgICBlbmR0aW1lOiBkYXlqcyhpbnB1dC50aW1lc3RhbXApLmFkZChkdXJhdGlvbiwgJ3NlY29uZHMnKSxcbiAgICB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF4aW9zXG4gICAgICAuZ2V0KGAke3RoaXMuYmFzZVVybH0vZGF0YWAsIHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIFdhdHRUaW1lIEFQSS4nICsgZSk7XG4gICAgICB9KTtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGEgZnJvbSBXYXR0VGltZSBBUEkuJyArIHJlc3VsdC5zdGF0dXMpO1xuICAgIH1cbiAgICBpZiAoISgnZGF0YScgaW4gcmVzdWx0KSB8fCAhQXJyYXkuaXNBcnJheShyZXN1bHQuZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBmcm9tIFdhdHRUaW1lIEFQSS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZGF5anMoYS5wb2ludF90aW1lKS51bml4KCkgPiBkYXlqcyhiLnBvaW50X3RpbWUpLnVuaXgoKSA/IDEgOiAtMTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxJT3V0cHV0TW9kZWxJbnRlcmZhY2U+IHtcbiAgICB0aGlzLnN0YXRpY1BhcmFtcyA9IHN0YXRpY1BhcmFtcztcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIGlmICghc3RhdGljUGFyYW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgc3RhdGljUGFyYW1zJyk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKHN0YXRpY1BhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlbElkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gV0FUVF9USU1FO1xuICB9XG59XG4iXX0=
@@ -1,28 +0,0 @@
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("../types/model-interface").ModelPluginInterface>;
28
- }
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModelsUniverse = void 0;
4
- const errors_1 = require("./errors");
5
- const config_1 = require("../config");
6
- const { ModelInitializationError, ModelCredentialError } = errors_1.ERRORS;
7
- const { GITHUB_PATH } = config_1.CONFIG;
8
- const { MISSING_CLASSNAME, NOT_OUTPUT_MODEL_EXTENSION, NOT_INITIALIZED_MODEL, MISSING_PATH, MODEL_DOESNT_EXIST, NOT_NATIVE_MODEL, } = config_1.STRINGS;
9
- /**
10
- * Models Initialization Lifecycle.
11
- */
12
- class ModelsUniverse {
13
- constructor() {
14
- /**
15
- * Models list.
16
- */
17
- this.initalizedModels = {};
18
- }
19
- /**
20
- * Checks if model is instance of `IOutputModelInterface`.
21
- */
22
- instanceOfModel(ClassContainer) {
23
- try {
24
- const testModel = new ClassContainer();
25
- const boolable = 'configure' in testModel && 'execute' in testModel;
26
- return boolable;
27
- }
28
- catch (error) {
29
- throw ModelInitializationError(MODEL_DOESNT_EXIST);
30
- }
31
- }
32
- /**
33
- * Returns plugin model. Checks if model is missing then rejects with error.
34
- * Then checks if `path` is starting with github, then grabs the repository name.
35
- * Imports module, then checks if it's a class which implements input model interface.
36
- */
37
- async handPluginModel(model, path) {
38
- if (!model) {
39
- throw new ModelCredentialError(MISSING_CLASSNAME);
40
- }
41
- if (!path) {
42
- throw new ModelCredentialError(MISSING_PATH);
43
- }
44
- if (path?.startsWith(GITHUB_PATH)) {
45
- const parts = path.split('/');
46
- path = parts[parts.length - 1];
47
- }
48
- if (!path.includes('if-models')) {
49
- console.log(NOT_NATIVE_MODEL);
50
- }
51
- const pluginModule = await Promise.resolve(`${path}`).then(s => require(s));
52
- if (this.instanceOfModel(pluginModule[model])) {
53
- return pluginModule[model];
54
- }
55
- throw new Error(NOT_OUTPUT_MODEL_EXTENSION);
56
- }
57
- /**
58
- * Initializes and registers model.
59
- */
60
- writeDown(modelToInitalize) {
61
- const { name, config, model, path } = modelToInitalize;
62
- const callback = async (graphOptions) => {
63
- const Model = await this.handPluginModel(model, path);
64
- const params = {
65
- ...config,
66
- ...graphOptions,
67
- };
68
- const initalizedModel = await new Model().configure(params);
69
- return initalizedModel;
70
- };
71
- this.initalizedModels = {
72
- ...this.initalizedModels,
73
- [name]: callback,
74
- };
75
- return this.initalizedModels;
76
- }
77
- /**
78
- * Returns existing model by `name`.
79
- */
80
- async getInitializedModel(modelName, config) {
81
- try {
82
- if (this.initalizedModels[modelName]) {
83
- return await this.initalizedModels[modelName](config);
84
- }
85
- }
86
- catch (error) {
87
- if (error instanceof Error) {
88
- throw new ModelInitializationError(error.message);
89
- }
90
- }
91
- throw new ModelInitializationError(NOT_INITIALIZED_MODEL(modelName));
92
- }
93
- }
94
- exports.ModelsUniverse = ModelsUniverse;
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLXVuaXZlcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvbW9kZWxzLXVuaXZlcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFnQztBQUVoQyxzQ0FBMEM7QUFRMUMsTUFBTSxFQUFDLHdCQUF3QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRWhFLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDN0IsTUFBTSxFQUNKLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEdBQ2pCLEdBQUcsZ0JBQU8sQ0FBQztBQUVaOztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQTNCO1FBQ0U7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBcUIsRUFBRSxDQUFDO0lBNEZqRCxDQUFDO0lBMUZDOztPQUVHO0lBQ0ssZUFBZSxDQUFDLGNBQW1CO1FBQ3pDLElBQUk7WUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBRXZDLE1BQU0sUUFBUSxHQUFHLFdBQVcsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQztZQUVwRSxPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQWMsRUFBRSxJQUFhO1FBQ3pELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLElBQUksb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNuRDtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0I7UUFFRCxNQUFNLFlBQVksR0FBRyx5QkFBYSxJQUFJLHlCQUFDLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxnQkFBcUM7UUFDcEQsTUFBTSxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxHQUFHLGdCQUFnQixDQUFDO1FBRXJELE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxZQUEwQixFQUFFLEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV0RCxNQUFNLE1BQU0sR0FBRztnQkFDYixHQUFHLE1BQU07Z0JBQ1QsR0FBRyxZQUFZO2FBQ2hCLENBQUM7WUFFRixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTVELE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN0QixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7WUFDeEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO1NBQ2pCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxNQUFXO1FBQzdELElBQUk7WUFDRixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2RDtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbkQ7U0FDRjtRQUVELE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQWhHRCx3Q0FnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge0NPTkZJRywgU1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtcbiAgR3JhcGhPcHRpb25zLFxuICBJbXBsSW5pdGlhbGl6ZU1vZGVsLFxuICBJbml0YWxpemVkTW9kZWxzLFxufSBmcm9tICcuLi90eXBlcy9tb2RlbHMtdW5pdmVyc2UnO1xuXG5jb25zdCB7TW9kZWxJbml0aWFsaXphdGlvbkVycm9yLCBNb2RlbENyZWRlbnRpYWxFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtHSVRIVUJfUEFUSH0gPSBDT05GSUc7XG5jb25zdCB7XG4gIE1JU1NJTkdfQ0xBU1NOQU1FLFxuICBOT1RfT1VUUFVUX01PREVMX0VYVEVOU0lPTixcbiAgTk9UX0lOSVRJQUxJWkVEX01PREVMLFxuICBNSVNTSU5HX1BBVEgsXG4gIE1PREVMX0RPRVNOVF9FWElTVCxcbiAgTk9UX05BVElWRV9NT0RFTCxcbn0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIE1vZGVscyBJbml0aWFsaXphdGlvbiBMaWZlY3ljbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RlbHNVbml2ZXJzZSB7XG4gIC8qKlxuICAgKiBNb2RlbHMgbGlzdC5cbiAgICovXG4gIHB1YmxpYyBpbml0YWxpemVkTW9kZWxzOiBJbml0YWxpemVkTW9kZWxzID0ge307XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBtb2RlbCBpcyBpbnN0YW5jZSBvZiBgSU91dHB1dE1vZGVsSW50ZXJmYWNlYC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFuY2VPZk1vZGVsKENsYXNzQ29udGFpbmVyOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVzdE1vZGVsID0gbmV3IENsYXNzQ29udGFpbmVyKCk7XG5cbiAgICAgIGNvbnN0IGJvb2xhYmxlID0gJ2NvbmZpZ3VyZScgaW4gdGVzdE1vZGVsICYmICdleGVjdXRlJyBpbiB0ZXN0TW9kZWw7XG5cbiAgICAgIHJldHVybiBib29sYWJsZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE1PREVMX0RPRVNOVF9FWElTVCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGx1Z2luIG1vZGVsLiBDaGVja3MgaWYgbW9kZWwgaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAgICogVGhlbiBjaGVja3MgaWYgYHBhdGhgIGlzIHN0YXJ0aW5nIHdpdGggZ2l0aHViLCB0aGVuIGdyYWJzIHRoZSByZXBvc2l0b3J5IG5hbWUuXG4gICAqIEltcG9ydHMgbW9kdWxlLCB0aGVuIGNoZWNrcyBpZiBpdCdzIGEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBpbnB1dCBtb2RlbCBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRQbHVnaW5Nb2RlbChtb2RlbD86IHN0cmluZywgcGF0aD86IHN0cmluZykge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBNb2RlbENyZWRlbnRpYWxFcnJvcihNSVNTSU5HX0NMQVNTTkFNRSk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgTW9kZWxDcmVkZW50aWFsRXJyb3IoTUlTU0lOR19QQVRIKTtcbiAgICB9XG5cbiAgICBpZiAocGF0aD8uc3RhcnRzV2l0aChHSVRIVUJfUEFUSCkpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgcGF0aCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIGlmICghcGF0aC5pbmNsdWRlcygnaWYtbW9kZWxzJykpIHtcbiAgICAgIGNvbnNvbGUubG9nKE5PVF9OQVRJVkVfTU9ERUwpO1xuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpbk1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKTtcblxuICAgIGlmICh0aGlzLmluc3RhbmNlT2ZNb2RlbChwbHVnaW5Nb2R1bGVbbW9kZWxdKSkge1xuICAgICAgcmV0dXJuIHBsdWdpbk1vZHVsZVttb2RlbF07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKE5PVF9PVVRQVVRfTU9ERUxfRVhURU5TSU9OKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhbmQgcmVnaXN0ZXJzIG1vZGVsLlxuICAgKi9cbiAgcHVibGljIHdyaXRlRG93bihtb2RlbFRvSW5pdGFsaXplOiBJbXBsSW5pdGlhbGl6ZU1vZGVsKSB7XG4gICAgY29uc3Qge25hbWUsIGNvbmZpZywgbW9kZWwsIHBhdGh9ID0gbW9kZWxUb0luaXRhbGl6ZTtcblxuICAgIGNvbnN0IGNhbGxiYWNrID0gYXN5bmMgKGdyYXBoT3B0aW9uczogR3JhcGhPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBNb2RlbCA9IGF3YWl0IHRoaXMuaGFuZFBsdWdpbk1vZGVsKG1vZGVsLCBwYXRoKTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIC4uLmdyYXBoT3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGluaXRhbGl6ZWRNb2RlbCA9IGF3YWl0IG5ldyBNb2RlbCgpLmNvbmZpZ3VyZShwYXJhbXMpO1xuXG4gICAgICByZXR1cm4gaW5pdGFsaXplZE1vZGVsO1xuICAgIH07XG5cbiAgICB0aGlzLmluaXRhbGl6ZWRNb2RlbHMgPSB7XG4gICAgICAuLi50aGlzLmluaXRhbGl6ZWRNb2RlbHMsXG4gICAgICBbbmFtZV06IGNhbGxiYWNrLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pbml0YWxpemVkTW9kZWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZXhpc3RpbmcgbW9kZWwgYnkgYG5hbWVgLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEluaXRpYWxpemVkTW9kZWwobW9kZWxOYW1lOiBzdHJpbmcsIGNvbmZpZzogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmluaXRhbGl6ZWRNb2RlbHNbbW9kZWxOYW1lXSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0YWxpemVkTW9kZWxzW21vZGVsTmFtZV0oY29uZmlnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IE1vZGVsSW5pdGlhbGl6YXRpb25FcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTW9kZWxJbml0aWFsaXphdGlvbkVycm9yKE5PVF9JTklUSUFMSVpFRF9NT0RFTChtb2RlbE5hbWUpKTtcbiAgfVxufVxuIl19
@@ -1,20 +0,0 @@
1
- import { ModelPluginInterface } from '../types/model-interface';
2
- /**
3
- * Observatory is responsible for output calculations based on the `inputs` and the `model`.
4
- */
5
- export declare class Observatory {
6
- private inputs;
7
- private outputs;
8
- /**
9
- * Init inputs object.
10
- */
11
- constructor(inputs: any);
12
- /**
13
- * Does investigations by given `output` information
14
- */
15
- doInvestigationsWith(modelInstance: ModelPluginInterface): Promise<this>;
16
- /**
17
- * Getter for output data.
18
- */
19
- getOutputs(): any[];
20
- }
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Observatory = void 0;
4
- /**
5
- * Observatory is responsible for output calculations based on the `inputs` and the `model`.
6
- */
7
- class Observatory {
8
- /**
9
- * Init inputs object.
10
- */
11
- constructor(inputs) {
12
- this.outputs = [];
13
- this.inputs = inputs;
14
- }
15
- /**
16
- * Does investigations by given `output` information
17
- */
18
- async doInvestigationsWith(modelInstance) {
19
- const reuseCalculation = this.outputs.length ? this.outputs : this.inputs;
20
- this.outputs = await modelInstance.execute(reuseCalculation);
21
- return this;
22
- }
23
- /**
24
- * Getter for output data.
25
- */
26
- getOutputs() {
27
- return this.outputs;
28
- }
29
- }
30
- exports.Observatory = Observatory;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9vYnNlcnZhdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7R0FFRztBQUNILE1BQWEsV0FBVztJQUl0Qjs7T0FFRztJQUNILFlBQVksTUFBVztRQUxmLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFNMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLG9CQUFvQixDQUFDLGFBQW1DO1FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBNUJELGtDQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9kZWxQbHVnaW5JbnRlcmZhY2V9IGZyb20gJy4uL3R5cGVzL21vZGVsLWludGVyZmFjZSc7XG5cbi8qKlxuICogT2JzZXJ2YXRvcnkgaXMgcmVzcG9uc2libGUgZm9yIG91dHB1dCBjYWxjdWxhdGlvbnMgYmFzZWQgb24gdGhlIGBpbnB1dHNgIGFuZCB0aGUgYG1vZGVsYC5cbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmF0b3J5IHtcbiAgcHJpdmF0ZSBpbnB1dHM6IGFueVtdO1xuICBwcml2YXRlIG91dHB1dHM6IGFueVtdID0gW107XG5cbiAgLyoqXG4gICAqIEluaXQgaW5wdXRzIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGlucHV0czogYW55KSB7XG4gICAgdGhpcy5pbnB1dHMgPSBpbnB1dHM7XG4gIH1cblxuICAvKipcbiAgICogRG9lcyBpbnZlc3RpZ2F0aW9ucyBieSBnaXZlbiBgb3V0cHV0YCBpbmZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRvSW52ZXN0aWdhdGlvbnNXaXRoKG1vZGVsSW5zdGFuY2U6IE1vZGVsUGx1Z2luSW50ZXJmYWNlKSB7XG4gICAgY29uc3QgcmV1c2VDYWxjdWxhdGlvbiA9IHRoaXMub3V0cHV0cy5sZW5ndGggPyB0aGlzLm91dHB1dHMgOiB0aGlzLmlucHV0cztcblxuICAgIHRoaXMub3V0cHV0cyA9IGF3YWl0IG1vZGVsSW5zdGFuY2UuZXhlY3V0ZShyZXVzZUNhbGN1bGF0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBmb3Igb3V0cHV0IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgZ2V0T3V0cHV0cygpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRzO1xuICB9XG59XG4iXX0=
@@ -1,30 +0,0 @@
1
- import { ModelsUniverse } from './models-universe';
2
- import { Impl } from '../types/impl';
3
- /**
4
- * Computer for `impl` documents.
5
- */
6
- export declare class Supercomputer {
7
- private olderChild;
8
- private impl;
9
- private modelsHandbook;
10
- constructor(impl: Impl, modelsHandbook: ModelsUniverse);
11
- /**
12
- * Flattens config entries.
13
- */
14
- private flattenConfigValues;
15
- /**
16
- * Adds config entries to each obsercation object passed.
17
- */
18
- private enrichInputs;
19
- /**
20
- * If child is top level, then initializes `this.olderChild`.
21
- * If `children` object contains `children` property, it means inputs are nested (calls compute again).
22
- * Otherwise enriches inputs, passes them to Observatory.
23
- * For each model from pipeline Observatory gathers inputs. Then results are stored.
24
- */
25
- private calculateOutputsForChild;
26
- /**
27
- * Checks if object is top level children or nested, then runs through all children and calculates outputs.
28
- */
29
- compute(childrenObject?: any): Promise<Impl>;
30
- }
@@ -1,109 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Supercomputer = void 0;
4
- const observatory_1 = require("./observatory");
5
- const errors_1 = require("./errors");
6
- const config_1 = require("../config");
7
- const { ImplValidationError } = errors_1.ERRORS;
8
- const { STRUCTURE_MALFORMED } = config_1.STRINGS;
9
- /**
10
- * Computer for `impl` documents.
11
- */
12
- class Supercomputer {
13
- constructor(impl, modelsHandbook) {
14
- this.olderChild = { name: '', info: {} };
15
- this.impl = impl;
16
- this.modelsHandbook = modelsHandbook;
17
- }
18
- /**
19
- * Flattens config entries.
20
- */
21
- flattenConfigValues(config) {
22
- if (!config) {
23
- return {};
24
- }
25
- const configModelNames = Object.keys(config);
26
- const values = configModelNames.reduce((acc, name) => {
27
- acc = {
28
- ...acc,
29
- ...config[name],
30
- };
31
- return acc;
32
- }, {});
33
- return values;
34
- }
35
- /**
36
- * Adds config entries to each obsercation object passed.
37
- */
38
- enrichInputs(inputs, config, nestedConfig) {
39
- const configValues = this.flattenConfigValues(config);
40
- const nestedConfigValues = this.flattenConfigValues(nestedConfig);
41
- return inputs.map((input) => ({
42
- ...input,
43
- ...configValues,
44
- ...nestedConfigValues,
45
- }));
46
- }
47
- /**
48
- * If child is top level, then initializes `this.olderChild`.
49
- * If `children` object contains `children` property, it means inputs are nested (calls compute again).
50
- * Otherwise enriches inputs, passes them to Observatory.
51
- * For each model from pipeline Observatory gathers inputs. Then results are stored.
52
- */
53
- async calculateOutputsForChild(childrenObject, params) {
54
- const { childName, areChildrenNested } = params;
55
- if (!areChildrenNested) {
56
- this.olderChild = {
57
- name: childName,
58
- info: this.impl.graph.children[childName],
59
- };
60
- }
61
- const { pipeline, inputs, config } = this.olderChild.info;
62
- if ('children' in childrenObject[childName]) {
63
- return this.compute(childrenObject[childName].children);
64
- }
65
- if (!('inputs' in childrenObject[childName])) {
66
- throw new ImplValidationError(STRUCTURE_MALFORMED(childName));
67
- }
68
- const specificInputs = areChildrenNested
69
- ? childrenObject[childName].inputs
70
- : inputs;
71
- const childrenConfig = childrenObject[childName].config || {};
72
- const enrichedInputs = this.enrichInputs(specificInputs, config, childrenConfig);
73
- const observatory = new observatory_1.Observatory(enrichedInputs);
74
- for (const modelName of pipeline) {
75
- const params = config && config[modelName];
76
- const modelInstance = await this.modelsHandbook.getInitializedModel(modelName, params);
77
- await observatory.doInvestigationsWith(modelInstance);
78
- }
79
- const outputs = observatory.getOutputs();
80
- if (areChildrenNested) {
81
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
82
- // @ts-ignore
83
- this.impl.graph.children[this.olderChild.name].children[childName].outputs = observatory.getOutputs();
84
- return;
85
- }
86
- this.impl.graph.children[this.olderChild.name].outputs = outputs;
87
- return;
88
- }
89
- /**
90
- * Checks if object is top level children or nested, then runs through all children and calculates outputs.
91
- */
92
- async compute(childrenObject) {
93
- const implOrChildren = childrenObject || this.impl;
94
- const areChildrenNested = !!childrenObject;
95
- const children = areChildrenNested
96
- ? implOrChildren
97
- : implOrChildren.graph.children;
98
- const childrenNames = Object.keys(children);
99
- for (const childName of childrenNames) {
100
- await this.calculateOutputsForChild(children, {
101
- childName,
102
- areChildrenNested,
103
- });
104
- }
105
- return this.impl;
106
- }
107
- }
108
- exports.Supercomputer = Supercomputer;
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwZXJjb21wdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3N1cGVyY29tcHV0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0NBQTBDO0FBRTFDLHFDQUFnQztBQUVoQyxzQ0FBa0M7QUFLbEMsTUFBTSxFQUFDLG1CQUFtQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRXJDLE1BQU0sRUFBQyxtQkFBbUIsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFLeEIsWUFBWSxJQUFVLEVBQUUsY0FBOEI7UUFKOUMsZUFBVSxHQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBSzFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUFDLE1BQWM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxFQUFFO1lBQ2hFLEdBQUcsR0FBRztnQkFDSixHQUFHLEdBQUc7Z0JBQ04sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2hCLENBQUM7WUFFRixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FDbEIsTUFBcUIsRUFDckIsTUFBYyxFQUNkLFlBQW9CO1FBRXBCLE1BQU0sWUFBWSxHQUFH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SUFBSSxDQUFDLElBQUksQ0FBQztRQUNuRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQWEsaUJBQWlCO1lBQzFDLENBQUMsQ0FBQyxjQUFjO1lBQ2hCLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVDLEtBQUssTUFBTSxTQUFTLElBQUksYUFBYSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtnQkFDNUMsU0FBUztnQkFDVCxpQkFBaUI7YUFDbEIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBMUlELHNDQTBJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9kZWxzVW5pdmVyc2V9IGZyb20gJy4vbW9kZWxzLXVuaXZlcnNlJztcbmltcG9ydCB7T2JzZXJ2YXRvcnl9IGZyb20gJy4vb2JzZXJ2YXRvcnknO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7Q2hpbGRJbmZvcm1hdGlvbn0gZnJvbSAnLi4vdHlwZXMvc3VwZXJjb21wdXRlcic7XG5pbXBvcnQge0NoaWxkcmVuLCBDb25maWcsIEltcGwsIE1vZGVsUGFyYW1zfSBmcm9tICcuLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0ltcGxWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCB7U1RSVUNUVVJFX01BTEZPUk1FRH0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIENvbXB1dGVyIGZvciBgaW1wbGAgZG9jdW1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU3VwZXJjb21wdXRlciB7XG4gIHByaXZhdGUgb2xkZXJDaGlsZDogQ2hpbGRJbmZvcm1hdGlvbiA9IHtuYW1lOiAnJywgaW5mbzoge319O1xuICBwcml2YXRlIGltcGw6IEltcGw7XG4gIHByaXZhdGUgbW9kZWxzSGFuZGJvb2s6IE1vZGVsc1VuaXZlcnNlO1xuXG4gIGNvbnN0cnVjdG9yKGltcGw6IEltcGwsIG1vZGVsc0hhbmRib29rOiBNb2RlbHNVbml2ZXJzZSkge1xuICAgIHRoaXMuaW1wbCA9IGltcGw7XG4gICAgdGhpcy5tb2RlbHNIYW5kYm9vayA9IG1vZGVsc0hhbmRib29rO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW5zIGNvbmZpZyBlbnRyaWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBmbGF0dGVuQ29uZmlnVmFsdWVzKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdNb2RlbE5hbWVzID0gT2JqZWN0LmtleXMoY29uZmlnKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBjb25maWdNb2RlbE5hbWVzLnJlZHVjZSgoYWNjOiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgYWNjID0ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIC4uLmNvbmZpZ1tuYW1lXSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNvbmZpZyBlbnRyaWVzIHRvIGVhY2ggb2JzZXJjYXRpb24gb2JqZWN0IHBhc3NlZC5cbiAgICovXG4gIHByaXZhdGUgZW5yaWNoSW5wdXRzKFxuICAgIGlucHV0czogTW9kZWxQYXJhbXNbXSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBuZXN0ZWRDb25maWc6IENvbmZpZ1xuICApIHtcbiAgICBjb25zdCBjb25maWdWYWx1ZXMgPSB0aGlzLmZsYXR0ZW5Db25maWdWYWx1ZXMoY29uZmlnKTtcbiAgICBjb25zdCBuZXN0ZWRDb25maWdWYWx1ZXMgPSB0aGlzLmZsYXR0ZW5Db25maWdWYWx1ZXMobmVzdGVkQ29uZmlnKTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKChpbnB1dDogYW55KSA9PiAoe1xuICAgICAgLi4uaW5wdXQsXG4gICAgICAuLi5jb25maWdWYWx1ZXMsXG4gICAgICAuLi5uZXN0ZWRDb25maWdWYWx1ZXMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGNoaWxkIGlzIHRvcCBsZXZlbCwgdGhlbiBpbml0aWFsaXplcyBgdGhpcy5vbGRlckNoaWxkYC5cbiAgICogSWYgYGNoaWxkcmVuYCBvYmplY3QgY29udGFpbnMgYGNoaWxkcmVuYCBwcm9wZXJ0eSwgaXQgbWVhbnMgaW5wdXRzIGFyZSBuZXN0ZWQgKGNhbGxzIGNvbXB1dGUgYWdhaW4pLlxuICAgKiBPdGhlcndpc2UgZW5yaWNoZXMgaW5wdXRzLCBwYXNzZXMgdGhlbSB0byBPYnNlcnZhdG9yeS5cbiAgICogRm9yIGVhY2ggbW9kZWwgZnJvbSBwaXBlbGluZSBPYnNlcnZhdG9yeSBnYXRoZXJzIGlucHV0cy4gVGhlbiByZXN1bHRzIGFyZSBzdG9yZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZU91dHB1dHNGb3JDaGlsZChcbiAgICBjaGlsZHJlbk9iamVjdDogQ2hpbGRyZW4sXG4gICAgcGFyYW1zOiBhbnlcbiAgKSB7XG4gICAgY29uc3Qge2NoaWxkTmFtZSwgYXJlQ2hpbGRyZW5OZXN0ZWR9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCFhcmVDaGlsZHJlbk5lc3RlZCkge1xuICAgICAgdGhpcy5vbGRlckNoaWxkID0ge1xuICAgICAgICBuYW1lOiBjaGlsZE5hbWUsXG4gICAgICAgIGluZm86IHRoaXMuaW1wbC5ncmFwaC5jaGlsZHJlbltjaGlsZE5hbWVdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cGlwZWxpbmUsIGlucHV0cywgY29uZmlnfSA9IHRoaXMub2xkZXJDaGlsZC5pbmZvO1xuXG4gICAgaWYgKCdjaGlsZHJlbicgaW4gY2hpbGRyZW5PYmplY3RbY2hpbGROYW1lXSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZShjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdLmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBpZiAoISgnaW5wdXRzJyBpbiBjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdKSkge1xuICAgICAgdGhyb3cgbmV3IEltcGxWYWxpZGF0aW9uRXJyb3IoU1RSVUNUVVJFX01BTEZPUk1FRChjaGlsZE5hbWUpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWZpY0lucHV0cyA9IGFyZUNoaWxkcmVuTmVzdGVkXG4gICAgICA/IGNoaWxkcmVuT2JqZWN0W2NoaWxkTmFtZV0uaW5wdXRzXG4gICAgICA6IGlucHV0cztcblxuICAgIGNvbnN0IGNoaWxkcmVuQ29uZmlnID0gY2hpbGRyZW5PYmplY3RbY2hpbGROYW1lXS5jb25maWcgfHwge307XG5cbiAgICBjb25zdCBlbnJpY2hlZElucHV0cyA9IHRoaXMuZW5yaWNoSW5wdXRzKFxuICAgICAgc3BlY2lmaWNJbnB1dHMsXG4gICAgICBjb25maWcsXG4gICAgICBjaGlsZHJlbkNvbmZpZ1xuICAgICk7XG5cbiAgICBjb25zdCBvYnNlcnZhdG9yeSA9IG5ldyBPYnNlcnZhdG9yeShlbnJpY2hlZElucHV0cyk7XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBvZiBwaXBlbGluZSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gY29uZmlnICYmIGNvbmZpZ1ttb2RlbE5hbWVdO1xuICAgICAgY29uc3QgbW9kZWxJbnN0YW5jZSA9IGF3YWl0IHRoaXMubW9kZWxzSGFuZGJvb2suZ2V0SW5pdGlhbGl6ZWRNb2RlbChcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBwYXJhbXNcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IG9ic2VydmF0b3J5LmRvSW52ZXN0aWdhdGlvbnNXaXRoKG1vZGVsSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHMgPSBvYnNlcnZhdG9yeS5nZXRPdXRwdXRzKCk7XG5cbiAgICBpZiAoYXJlQ2hpbGRyZW5OZXN0ZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuaW1wbC5ncmFwaC5jaGlsZHJlblt0aGlzLm9sZGVyQ2hpbGQubmFtZV0uY2hpbGRyZW5bXG4gICAgICAgIGNoaWxkTmFtZVxuICAgICAgXS5vdXRwdXRzID0gb2JzZXJ2YXRvcnkuZ2V0T3V0cHV0cygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsLmdyYXBoLmNoaWxkcmVuW3RoaXMub2xkZXJDaGlsZC5uYW1lXS5vdXRwdXRzID0gb3V0cHV0cztcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG9iamVjdCBpcyB0b3AgbGV2ZWwgY2hpbGRyZW4gb3IgbmVzdGVkLCB0aGVuIHJ1bnMgdGhyb3VnaCBhbGwgY2hpbGRyZW4gYW5kIGNhbGN1bGF0ZXMgb3V0cHV0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wdXRlKGNoaWxkcmVuT2JqZWN0PzogYW55KSB7XG4gICAgY29uc3QgaW1wbE9yQ2hpbGRyZW4gPSBjaGlsZHJlbk9iamVjdCB8fCB0aGlzLmltcGw7XG4gICAgY29uc3QgYXJlQ2hpbGRyZW5OZXN0ZWQgPSAhIWNoaWxkcmVuT2JqZWN0O1xuICAgIGNvbnN0IGNoaWxkcmVuOiBDaGlsZHJlbiA9IGFyZUNoaWxkcmVuTmVzdGVkXG4gICAgICA/IGltcGxPckNoaWxkcmVuXG4gICAgICA6IGltcGxPckNoaWxkcmVuLmdyYXBoLmNoaWxkcmVuO1xuICAgIGNvbnN0IGNoaWxkcmVuTmFtZXMgPSBPYmplY3Qua2V5cyhjaGlsZHJlbik7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTmFtZSBvZiBjaGlsZHJlbk5hbWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbGN1bGF0ZU91dHB1dHNGb3JDaGlsZChjaGlsZHJlbiwge1xuICAgICAgICBjaGlsZE5hbWUsXG4gICAgICAgIGFyZUNoaWxkcmVuTmVzdGVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW1wbDtcbiAgfVxufVxuIl19
@@ -1,36 +0,0 @@
1
- # TDP Finder Model
2
-
3
- ## Scope
4
-
5
- The TDP Finder model finds the thermal design power (TDP) of a given processor by looking it up in the model datasets. There are scenarios where the lookup can return multiple possible TDP values. In these cases, we return the maximum of the possible values. There are also cases where no TDP can be found for a specific processor. In these cases, we throw an error. The TDP is then used by other models to calculate the `energy-cpu` value.
6
-
7
- ## Used DataSets
8
-
9
-
10
- [./data.csv](./data.csv) Dataset from https://www.kaggle.com/datasets/lincolnzh/cpu-specifications-dataset Licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)
11
-
12
- [./data2.csv](./data2.csv) Dataset from [Codecarbon](https://github.com/mlco2/codecarbon/blob/master/codecarbon/data/hardware/cpu_power.csv) Licensed under MIT
13
-
14
- [./boavizta_data.csv](./boavizta_data.csv) Dataset from Boavizta API [Data Source](https://github.com/Boavizta/boaviztapi/blob/main/boaviztapi/data/crowdsourcing/cpu_specs.csv) Licensed under MIT
15
-
16
-
17
- ## Implementation
18
-
19
- IEF implements the plugin based on the logic described above.
20
-
21
- ## Usage with IMPL
22
- * Model Name: `tdp-finder`
23
- ```yaml
24
- input:
25
- - physical-processor: Intel Xeon Platinum 8175M, AMD A8-9600
26
- ```
27
-
28
- ## Output in OMPL
29
- ```yaml
30
- input:
31
- - physical-processor: Intel Xeon Platinum 8175M
32
- output:
33
- - physical-processor: Intel Xeon Platinum 8175M
34
- tdp: 165
35
- ```
36
-