@grnsft/if 0.1.7 → 0.1.8

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 (31) hide show
  1. package/coverage/clover.xml +218 -235
  2. package/coverage/coverage-final.json +11 -11
  3. package/coverage/lcov-report/config/config.ts.html +3 -9
  4. package/coverage/lcov-report/config/index.html +7 -7
  5. package/coverage/lcov-report/config/index.ts.html +3 -3
  6. package/coverage/lcov-report/config/strings.ts.html +19 -7
  7. package/coverage/lcov-report/index.html +19 -19
  8. package/coverage/lcov-report/lib/index.html +16 -16
  9. package/coverage/lcov-report/lib/models-universe.ts.html +4 -4
  10. package/coverage/lcov-report/lib/observatory.ts.html +10 -10
  11. package/coverage/lcov-report/lib/planet-aggregator.ts.html +76 -46
  12. package/coverage/lcov-report/lib/supercomputer.ts.html +68 -308
  13. package/coverage/lcov-report/models/index.html +7 -7
  14. package/coverage/lcov-report/models/index.ts.html +2 -2
  15. package/coverage/lcov-report/models/planet-aggregator.ts.html +271 -0
  16. package/coverage/lcov-report/models/time-sync.ts.html +129 -117
  17. package/coverage/lcov-report/util/args.ts.html +1 -1
  18. package/coverage/lcov-report/util/errors.ts.html +1 -1
  19. package/coverage/lcov-report/util/index.html +1 -1
  20. package/coverage/lcov-report/util/units-dealer.ts.html +12 -12
  21. package/coverage/lcov-report/util/yaml.ts.html +9 -9
  22. package/coverage/lcov.info +343 -372
  23. package/examples/impls/test/aggregation-test.yml +2 -2
  24. package/examples/impls/test/nesting.yml +93 -42
  25. package/examples/impls/test/sci.yml +3 -3
  26. package/examples/impls/test/shell.yml +5 -5
  27. package/examples/ompls/nesting.yml +91 -85
  28. package/examples/ompls/sci.yml +4 -3
  29. package/examples/ompls/shell.yml +7 -7
  30. package/jest.config.js +1 -1
  31. package/package.json +1 -1
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>5/5</span>
28
+ <span class='fraction'>7/7</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>4/4</span>
42
+ <span class='fraction'>6/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>5/5</span>
49
+ <span class='fraction'>7/7</span>
50
50
  </div>
51
51
 
52
52
 
@@ -100,9 +100,13 @@
100
100
  <a name='L35'></a><a href='#L35'>35</a>
101
101
  <a name='L36'></a><a href='#L36'>36</a>
102
102
  <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
104
108
  <span class="cline-any cline-neutral">&nbsp;</span>
105
- <span class="cline-any cline-yes">6x</span>
109
+ <span class="cline-any cline-yes">7x</span>
106
110
  <span class="cline-any cline-neutral">&nbsp;</span>
107
111
  <span class="cline-any cline-neutral">&nbsp;</span>
108
112
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -112,7 +116,7 @@
112
116
  <span class="cline-any cline-neutral">&nbsp;</span>
113
117
  <span class="cline-any cline-yes">3x</span>
114
118
  <span class="cline-any cline-neutral">&nbsp;</span>
115
- <span class="cline-any cline-yes">5x</span>
119
+ <span class="cline-any cline-yes">3x</span>
116
120
  <span class="cline-any cline-neutral">&nbsp;</span>
117
121
  <span class="cline-any cline-neutral">&nbsp;</span>
118
122
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -137,6 +141,10 @@
137
141
  <span class="cline-any cline-neutral">&nbsp;</span>
138
142
  <span class="cline-any cline-neutral">&nbsp;</span>
139
143
  <span class="cline-any cline-neutral">&nbsp;</span>
144
+ <span class="cline-any cline-yes">3x</span>
145
+ <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-yes">3x</span>
147
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
148
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {ClassContainerParams} from '../types/models-universe';
141
149
  &nbsp;
142
150
  export const STRINGS = {
@@ -173,6 +181,10 @@ https://github.com/Green-Software-Foundation/if/issues/new?assignees=&amp;labels
173
181
  INVALID_TIME_NORMALIZATION: 'Start time or end time is missing.',
174
182
  INVALID_TIME_INTERVAL: 'Interval is missing.',
175
183
  INVALID_OBSERVATION_OVERLAP: 'Observation timestamps overlap.',
184
+ INVALID_AGGREGATION_METHOD: (metric: string) =&gt;
185
+ `Aggregation is not possible for given ${metric} since method is 'none'.`,
186
+ METRIC_MISSING: (metric: string, index: number) =&gt;
187
+ `Aggregation metric ${metric} is not found in inputs[${index}].`,
176
188
  };
177
189
  &nbsp;</pre></td></tr></table></pre>
178
190
 
@@ -181,7 +193,7 @@ https://github.com/Green-Software-Foundation/if/issues/new?assignees=&amp;labels
181
193
  <div class='footer quiet pad2 space-top1 center small'>
182
194
  Code coverage generated by
183
195
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
184
- at 2024-01-09T13:19:15.857Z
196
+ at 2024-01-15T13:07:43.773Z
185
197
  </div>
186
198
  <script src="../prettify.js"></script>
187
199
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">99.14% </span>
26
+ <span class="strong">99.1% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>348/351</span>
28
+ <span class='fraction'>332/335</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">98.78% </span>
33
+ <span class="strong">97.05% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>81/82</span>
35
+ <span class='fraction'>66/68</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>64/64</span>
42
+ <span class='fraction'>65/65</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">99.11% </span>
47
+ <span class="strong">99.06% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>336/339</span>
49
+ <span class='fraction'>319/322</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
86
  <td data-value="100" class="pct high">100%</td>
87
- <td data-value="10" class="abs high">10/10</td>
87
+ <td data-value="12" class="abs high">12/12</td>
88
88
  <td data-value="100" class="pct high">100%</td>
89
89
  <td data-value="0" class="abs high">0/0</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
- <td data-value="6" class="abs high">6/6</td>
92
- <td data-value="100" class="pct high">100%</td>
93
91
  <td data-value="8" class="abs high">8/8</td>
92
+ <td data-value="100" class="pct high">100%</td>
93
+ <td data-value="10" class="abs high">10/10</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -99,13 +99,13 @@
99
99
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
100
100
  </td>
101
101
  <td data-value="100" class="pct high">100%</td>
102
- <td data-value="143" class="abs high">143/143</td>
103
- <td data-value="100" class="pct high">100%</td>
104
- <td data-value="44" class="abs high">44/44</td>
102
+ <td data-value="122" class="abs high">122/122</td>
103
+ <td data-value="96.55" class="pct high">96.55%</td>
104
+ <td data-value="29" class="abs high">28/29</td>
105
105
  <td data-value="100" class="pct high">100%</td>
106
- <td data-value="24" class="abs high">24/24</td>
106
+ <td data-value="23" class="abs high">23/23</td>
107
107
  <td data-value="100" class="pct high">100%</td>
108
- <td data-value="140" class="abs high">140/140</td>
108
+ <td data-value="118" class="abs high">118/118</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -114,13 +114,13 @@
114
114
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115
115
  </td>
116
116
  <td data-value="100" class="pct high">100%</td>
117
- <td data-value="129" class="abs high">129/129</td>
117
+ <td data-value="132" class="abs high">132/132</td>
118
118
  <td data-value="100" class="pct high">100%</td>
119
- <td data-value="31" class="abs high">31/31</td>
119
+ <td data-value="32" class="abs high">32/32</td>
120
120
  <td data-value="100" class="pct high">100%</td>
121
121
  <td data-value="22" class="abs high">22/22</td>
122
122
  <td data-value="100" class="pct high">100%</td>
123
- <td data-value="127" class="abs high">127/127</td>
123
+ <td data-value="130" class="abs high">130/130</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2024-01-09T13:19:15.857Z
149
+ at 2024-01-15T13:07:43.773Z
150
150
  </div>
151
151
  <script src="prettify.js"></script>
152
152
  <script>
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>143/143</span>
28
+ <span class='fraction'>122/122</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">96.55% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>44/44</span>
35
+ <span class='fraction'>28/29</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>24/24</span>
42
+ <span class='fraction'>23/23</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>140/140</span>
49
+ <span class='fraction'>118/118</span>
50
50
  </div>
51
51
 
52
52
 
@@ -100,8 +100,8 @@
100
100
  </td>
101
101
  <td data-value="100" class="pct high">100%</td>
102
102
  <td data-value="7" class="abs high">7/7</td>
103
- <td data-value="100" class="pct high">100%</td>
104
- <td data-value="2" class="abs high">2/2</td>
103
+ <td data-value="50" class="pct medium">50%</td>
104
+ <td data-value="2" class="abs medium">1/2</td>
105
105
  <td data-value="100" class="pct high">100%</td>
106
106
  <td data-value="3" class="abs high">3/3</td>
107
107
  <td data-value="100" class="pct high">100%</td>
@@ -114,13 +114,13 @@
114
114
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115
115
  </td>
116
116
  <td data-value="100" class="pct high">100%</td>
117
- <td data-value="20" class="abs high">20/20</td>
117
+ <td data-value="25" class="abs high">25/25</td>
118
118
  <td data-value="100" class="pct high">100%</td>
119
- <td data-value="8" class="abs high">8/8</td>
119
+ <td data-value="6" class="abs high">6/6</td>
120
120
  <td data-value="100" class="pct high">100%</td>
121
- <td data-value="2" class="abs high">2/2</td>
121
+ <td data-value="4" class="abs high">4/4</td>
122
122
  <td data-value="100" class="pct high">100%</td>
123
- <td data-value="19" class="abs high">19/19</td>
123
+ <td data-value="24" class="abs high">24/24</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -129,13 +129,13 @@
129
129
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
130
130
  </td>
131
131
  <td data-value="100" class="pct high">100%</td>
132
- <td data-value="70" class="abs high">70/70</td>
132
+ <td data-value="44" class="abs high">44/44</td>
133
133
  <td data-value="100" class="pct high">100%</td>
134
- <td data-value="24" class="abs high">24/24</td>
134
+ <td data-value="11" class="abs high">11/11</td>
135
135
  <td data-value="100" class="pct high">100%</td>
136
- <td data-value="10" class="abs high">10/10</td>
136
+ <td data-value="7" class="abs high">7/7</td>
137
137
  <td data-value="100" class="pct high">100%</td>
138
- <td data-value="69" class="abs high">69/69</td>
138
+ <td data-value="42" class="abs high">42/42</td>
139
139
  </tr>
140
140
 
141
141
  </tbody>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2024-01-09T13:19:15.857Z
149
+ at 2024-01-15T13:07:43.773Z
150
150
  </div>
151
151
  <script src="../prettify.js"></script>
152
152
  <script>
@@ -359,9 +359,9 @@ import {CONFIG, STRINGS} from '../config';
359
359
  &nbsp;
360
360
  import {
361
361
  ClassContainerParams,
362
- GraphOptions,
363
362
  ImplInitializeModel,
364
363
  InitalizedModels,
364
+ ModelOptions,
365
365
  } from '../types/models-universe';
366
366
  &nbsp;
367
367
  const {ModelInitializationError, ModelCredentialError} = ERRORS;
@@ -465,10 +465,10 @@ export class ModelsUniverse {
465
465
  &nbsp;
466
466
  const Model = await this.handModel(model, path);
467
467
  &nbsp;
468
- const callback = async (graphOptions: GraphOptions) =&gt; {
468
+ const callback = async (options: ModelOptions) =&gt; {
469
469
  const params = {
470
470
  ...config,
471
- ...graphOptions,
471
+ ...options,
472
472
  };
473
473
  &nbsp;
474
474
  const initalizedModel = await new Model().configure(params);
@@ -502,7 +502,7 @@ export class ModelsUniverse {
502
502
  <div class='footer quiet pad2 space-top1 center small'>
503
503
  Code coverage generated by
504
504
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
505
- at 2024-01-09T13:19:15.857Z
505
+ at 2024-01-15T13:07:43.773Z
506
506
  </div>
507
507
  <script src="../prettify.js"></script>
508
508
  <script>
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">50% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>1/2</span>
36
36
  </div>
37
37
 
38
38
 
@@ -104,31 +104,31 @@
104
104
  <span class="cline-any cline-neutral">&nbsp;</span>
105
105
  <span class="cline-any cline-yes">2x</span>
106
106
  <span class="cline-any cline-neutral">&nbsp;</span>
107
- <span class="cline-any cline-yes">20x</span>
107
+ <span class="cline-any cline-yes">11x</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span>
109
109
  <span class="cline-any cline-neutral">&nbsp;</span>
110
110
  <span class="cline-any cline-neutral">&nbsp;</span>
111
111
  <span class="cline-any cline-neutral">&nbsp;</span>
112
112
  <span class="cline-any cline-neutral">&nbsp;</span>
113
- <span class="cline-any cline-yes">20x</span>
113
+ <span class="cline-any cline-yes">11x</span>
114
114
  <span class="cline-any cline-neutral">&nbsp;</span>
115
115
  <span class="cline-any cline-neutral">&nbsp;</span>
116
116
  <span class="cline-any cline-neutral">&nbsp;</span>
117
117
  <span class="cline-any cline-neutral">&nbsp;</span>
118
118
  <span class="cline-any cline-neutral">&nbsp;</span>
119
119
  <span class="cline-any cline-neutral">&nbsp;</span>
120
- <span class="cline-any cline-yes">37x</span>
120
+ <span class="cline-any cline-yes">9x</span>
121
121
  <span class="cline-any cline-neutral">&nbsp;</span>
122
- <span class="cline-any cline-yes">37x</span>
122
+ <span class="cline-any cline-yes">9x</span>
123
123
  <span class="cline-any cline-neutral">&nbsp;</span>
124
- <span class="cline-any cline-yes">37x</span>
124
+ <span class="cline-any cline-yes">9x</span>
125
125
  <span class="cline-any cline-neutral">&nbsp;</span>
126
126
  <span class="cline-any cline-neutral">&nbsp;</span>
127
127
  <span class="cline-any cline-neutral">&nbsp;</span>
128
128
  <span class="cline-any cline-neutral">&nbsp;</span>
129
129
  <span class="cline-any cline-neutral">&nbsp;</span>
130
130
  <span class="cline-any cline-neutral">&nbsp;</span>
131
- <span class="cline-any cline-yes">17x</span>
131
+ <span class="cline-any cline-yes">9x</span>
132
132
  <span class="cline-any cline-neutral">&nbsp;</span>
133
133
  <span class="cline-any cline-neutral">&nbsp;</span>
134
134
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {ModelParams, ModelPluginInterface} from '../types/model-interface';
@@ -151,7 +151,7 @@ export class Observatory {
151
151
  * Does investigations by given `output` information
152
152
  */
153
153
  public async doInvestigationsWith(modelInstance: ModelPluginInterface) {
154
- const reuseCalculation = this.outputs.length ? this.outputs : this.inputs;
154
+ const reuseCalculation = this.outputs.length ? <span class="branch-0 cbranch-no" title="branch not covered" >this.outputs </span>: this.inputs;
155
155
  &nbsp;
156
156
  this.outputs = await modelInstance.execute(reuseCalculation);
157
157
  &nbsp;
@@ -172,7 +172,7 @@ export class Observatory {
172
172
  <div class='footer quiet pad2 space-top1 center small'>
173
173
  Code coverage generated by
174
174
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
175
- at 2024-01-09T13:19:15.857Z
175
+ at 2024-01-15T13:07:43.773Z
176
176
  </div>
177
177
  <script src="../prettify.js"></script>
178
178
  <script>
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>20/20</span>
28
+ <span class='fraction'>25/25</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>8/8</span>
35
+ <span class='fraction'>6/6</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/2</span>
42
+ <span class='fraction'>4/4</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>19/19</span>
49
+ <span class='fraction'>24/24</span>
50
50
  </div>
51
51
 
52
52
 
@@ -116,9 +116,20 @@
116
116
  <a name='L51'></a><a href='#L51'>51</a>
117
117
  <a name='L52'></a><a href='#L52'>52</a>
118
118
  <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
120
- <span class="cline-any cline-neutral">&nbsp;</span>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
130
+ <span class="cline-any cline-yes">2x</span>
121
131
  <span class="cline-any cline-neutral">&nbsp;</span>
132
+ <span class="cline-any cline-yes">2x</span>
122
133
  <span class="cline-any cline-neutral">&nbsp;</span>
123
134
  <span class="cline-any cline-neutral">&nbsp;</span>
124
135
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -126,6 +137,8 @@
126
137
  <span class="cline-any cline-neutral">&nbsp;</span>
127
138
  <span class="cline-any cline-neutral">&nbsp;</span>
128
139
  <span class="cline-any cline-yes">2x</span>
140
+ <span class="cline-any cline-yes">2x</span>
141
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
142
  <span class="cline-any cline-neutral">&nbsp;</span>
130
143
  <span class="cline-any cline-neutral">&nbsp;</span>
131
144
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -134,86 +147,103 @@
134
147
  <span class="cline-any cline-neutral">&nbsp;</span>
135
148
  <span class="cline-any cline-neutral">&nbsp;</span>
136
149
  <span class="cline-any cline-neutral">&nbsp;</span>
137
- <span class="cline-any cline-yes">18x</span>
150
+ <span class="cline-any cline-yes">6x</span>
151
+ <span class="cline-any cline-yes">6x</span>
152
+ <span class="cline-any cline-neutral">&nbsp;</span>
153
+ <span class="cline-any cline-yes">6x</span>
154
+ <span class="cline-any cline-yes">1x</span>
138
155
  <span class="cline-any cline-neutral">&nbsp;</span>
139
156
  <span class="cline-any cline-neutral">&nbsp;</span>
140
157
  <span class="cline-any cline-neutral">&nbsp;</span>
141
- <span class="cline-any cline-yes">2x</span>
142
158
  <span class="cline-any cline-neutral">&nbsp;</span>
143
159
  <span class="cline-any cline-neutral">&nbsp;</span>
144
160
  <span class="cline-any cline-neutral">&nbsp;</span>
145
161
  <span class="cline-any cline-neutral">&nbsp;</span>
146
- <span class="cline-any cline-yes">16x</span>
147
- <span class="cline-any cline-yes">16x</span>
148
162
  <span class="cline-any cline-neutral">&nbsp;</span>
149
- <span class="cline-any cline-yes">16x</span>
150
- <span class="cline-any cline-yes">22x</span>
151
- <span class="cline-any cline-yes">28x</span>
152
163
  <span class="cline-any cline-yes">2x</span>
153
164
  <span class="cline-any cline-neutral">&nbsp;</span>
154
165
  <span class="cline-any cline-neutral">&nbsp;</span>
155
166
  <span class="cline-any cline-neutral">&nbsp;</span>
167
+ <span class="cline-any cline-yes">6x</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
169
+ <span class="cline-any cline-yes">6x</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
171
+ <span class="cline-any cline-yes">5x</span>
172
+ <span class="cline-any cline-yes">9x</span>
173
+ <span class="cline-any cline-yes">9x</span>
174
+ <span class="cline-any cline-yes">1x</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
176
  <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-yes">26x</span>
158
- <span class="cline-any cline-yes">26x</span>
159
- <span class="cline-any cline-yes">26x</span>
160
- <span class="cline-any cline-yes">26x</span>
177
+ <span class="cline-any cline-yes">8x</span>
178
+ <span class="cline-any cline-yes">8x</span>
179
+ <span class="cline-any cline-yes">8x</span>
161
180
  <span class="cline-any cline-neutral">&nbsp;</span>
162
- <span class="cline-any cline-yes">26x</span>
163
- <span class="cline-any cline-yes">16x</span>
164
- <span class="cline-any cline-yes">13x</span>
165
181
  <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-yes">8x</span>
183
+ <span class="cline-any cline-yes">4x</span>
184
+ <span class="cline-any cline-yes">1x</span>
166
185
  <span class="cline-any cline-neutral">&nbsp;</span>
167
186
  <span class="cline-any cline-neutral">&nbsp;</span>
168
187
  <span class="cline-any cline-neutral">&nbsp;</span>
169
- <span class="cline-any cline-yes">20x</span>
188
+ <span class="cline-any cline-neutral">&nbsp;</span>
189
+ <span class="cline-any cline-yes">8x</span>
170
190
  <span class="cline-any cline-neutral">&nbsp;</span>
171
191
  <span class="cline-any cline-neutral">&nbsp;</span>
172
192
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {ERRORS} from '../util/errors';
193
+ import {UnitsDealer} from '../util/units-dealer';
194
+ &nbsp;
195
+ import {STRINGS} from '../config';
173
196
  &nbsp;
174
- import {
175
- AggregationResult,
176
- PlanetAggregatorParams,
177
- } from '../types/planet-aggregator';
178
197
  import {ModelParams} from '../types/model-interface';
198
+ import {AggregationResult} from '../types/planet-aggregator';
179
199
  import {UnitKeyName} from '../types/units';
200
+ import {UnitsDealerUsage} from '../types/units-dealer';
180
201
  &nbsp;
181
202
  const {InvalidAggregationParams} = ERRORS;
203
+ const {INVALID_AGGREGATION_METHOD, METRIC_MISSING} = STRINGS;
204
+ &nbsp;
205
+ /**
206
+ * Validates metrics array before applying aggregator.
207
+ * If aggregation method is `none`, then throws error.
208
+ */
209
+ const checkIfMetricsAreValid = (
210
+ metrics: UnitKeyName[],
211
+ dealer: UnitsDealerUsage
212
+ ) =&gt; {
213
+ metrics.forEach(metric =&gt; {
214
+ const method = dealer.askToGiveMethodFor(metric);
215
+ &nbsp;
216
+ if (method === 'none') {
217
+ throw new InvalidAggregationParams(INVALID_AGGREGATION_METHOD(method));
218
+ }
219
+ });
220
+ };
182
221
  &nbsp;
183
222
  /**
184
- * Aggregates child node level metrics. Uses provided aggregation `params`.
223
+ * Aggregates child node level metrics. Validates if metric aggregation type is `none`, then rejects with error.
224
+ * Otherwise iterates over inputs by aggregating per given `metrics`.
185
225
  */
186
- export const planetAggregator = (
226
+ export const planetAggregator = async (
187
227
  inputs: ModelParams[],
188
- params: PlanetAggregatorParams
228
+ metrics: UnitKeyName[]
189
229
  ) =&gt; {
190
- if (
191
- !params['aggregation-metrics'] ||
192
- params['aggregation-metrics'].length === 0
193
- ) {
194
- throw new InvalidAggregationParams(
195
- 'Provided aggregation metrics are invalid. Please provide an array of strings.'
196
- );
197
- }
230
+ const dealer = await UnitsDealer();
198
231
  &nbsp;
199
- const aggregationMetrics = params['aggregation-metrics'] as UnitKeyName[];
200
- const aggregationMethod = params['aggregation-method'];
232
+ checkIfMetricsAreValid(metrics, dealer);
201
233
  &nbsp;
202
234
  return inputs.reduce((acc, input, index) =&gt; {
203
- for (const metric of aggregationMetrics) {
235
+ for (const metric of metrics) {
204
236
  if (!(metric in input)) {
205
- throw new InvalidAggregationParams(
206
- `Aggregation metric ${metric} is not found in inputs[${index}].`
207
- );
237
+ throw new InvalidAggregationParams(METRIC_MISSING(metric, index));
208
238
  }
209
239
  &nbsp;
210
240
  const accessKey = `aggregated-${metric}`;
211
- const value = parseFloat(input[metric]);
212
241
  acc[accessKey] = acc[accessKey] ?? 0;
213
- acc[accessKey] += value;
242
+ acc[accessKey] += parseFloat(input[metric]);
214
243
  &nbsp;
244
+ /** Checks for the last iteration. */
215
245
  if (index === inputs.length - 1) {
216
- if (aggregationMethod === 'avg') {
246
+ if (dealer.askToGiveMethodFor(metric) === 'avg') {
217
247
  acc[accessKey] /= inputs.length;
218
248
  }
219
249
  }
@@ -229,7 +259,7 @@ export const planetAggregator = (
229
259
  <div class='footer quiet pad2 space-top1 center small'>
230
260
  Code coverage generated by
231
261
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
232
- at 2024-01-09T13:19:15.857Z
262
+ at 2024-01-15T13:07:43.773Z
233
263
  </div>
234
264
  <script src="../prettify.js"></script>
235
265
  <script>