raain-app 1.0.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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/RELEASE.md +3 -0
  4. package/cache.service.d.ts +9 -0
  5. package/esm2020/cache.service.mjs +33 -0
  6. package/esm2020/fidj-storage.model.mjs +162 -0
  7. package/esm2020/index.mjs +18 -0
  8. package/esm2020/profile.service.mjs +881 -0
  9. package/esm2020/raain-app.mjs +5 -0
  10. package/esm2020/raain-compare/raain-compare.component.mjs +106 -0
  11. package/esm2020/raain-compare-stack/raain-compare-stack.component.mjs +27 -0
  12. package/esm2020/raain-configuration/raain-configuration.component.mjs +97 -0
  13. package/esm2020/raain-date-focus/raain-date-focus.component.mjs +94 -0
  14. package/esm2020/raain-map/raain-map.component.mjs +295 -0
  15. package/esm2020/raain-speed/raain-speed.component.mjs +83 -0
  16. package/esm2020/raain-test/raain-test.component.mjs +17 -0
  17. package/esm2020/radar.service.mjs +91 -0
  18. package/esm2020/shared.const.mjs +25 -0
  19. package/esm2020/shared.module.mjs +142 -0
  20. package/esm2020/shared.pipe.mjs +203 -0
  21. package/esm2020/storage.service.mjs +17 -0
  22. package/esm2020/tools/CompareManager.mjs +248 -0
  23. package/esm2020/tools/FrameSet.mjs +10 -0
  24. package/esm2020/tools/GaugeNodeFilter.mjs +19 -0
  25. package/esm2020/tools/RefreshManager.mjs +202 -0
  26. package/esm2020/tools/index.mjs +5 -0
  27. package/esm2020/xytype.mjs +10 -0
  28. package/fesm2015/raain-app.mjs +2871 -0
  29. package/fesm2015/raain-app.mjs.map +1 -0
  30. package/fesm2020/raain-app.mjs +2707 -0
  31. package/fesm2020/raain-app.mjs.map +1 -0
  32. package/fidj-storage.model.d.ts +23 -0
  33. package/index.d.ts +17 -0
  34. package/package.json +58 -0
  35. package/profile.service.d.ts +114 -0
  36. package/raain-compare/raain-compare.component.d.ts +33 -0
  37. package/raain-compare-stack/raain-compare-stack.component.d.ts +20 -0
  38. package/raain-configuration/raain-configuration.component.d.ts +29 -0
  39. package/raain-date-focus/raain-date-focus.component.d.ts +36 -0
  40. package/raain-map/raain-map.component.d.ts +58 -0
  41. package/raain-speed/raain-speed.component.d.ts +25 -0
  42. package/raain-test/raain-test.component.d.ts +6 -0
  43. package/radar.service.d.ts +19 -0
  44. package/shared.const.d.ts +23 -0
  45. package/shared.module.d.ts +17 -0
  46. package/shared.pipe.d.ts +69 -0
  47. package/storage.service.d.ts +7 -0
  48. package/tools/CompareManager.d.ts +49 -0
  49. package/tools/FrameSet.d.ts +14 -0
  50. package/tools/GaugeNodeFilter.d.ts +9 -0
  51. package/tools/RefreshManager.d.ts +49 -0
  52. package/tools/index.d.ts +4 -0
  53. package/xytype.d.ts +8 -0
@@ -0,0 +1,248 @@
1
+ import { MapLatLng } from 'raain-ui';
2
+ import { XYType } from '../xytype';
3
+ export class CompareManager {
4
+ constructor(rainNode, profileService, onChanges = () => {
5
+ }) {
6
+ this.rainNode = rainNode;
7
+ this.profileService = profileService;
8
+ this.onChanges = onChanges;
9
+ this.cleanAll();
10
+ }
11
+ static CompareDate(date1, date2, minutes) {
12
+ const date1AsDate = new Date(parseInt(date1, 10));
13
+ const date2Diff = new Date(parseInt(date2, 10));
14
+ date2Diff.setMinutes(date2Diff.getMinutes() + minutes);
15
+ const diff = Math.round((date1AsDate.getTime() - date2Diff.getTime()) / (60 * 1000));
16
+ return diff === 0;
17
+ }
18
+ cleanAll() {
19
+ this.gaugesInCompare = [];
20
+ this.selectedGauges = [];
21
+ this.selectedPixels = [];
22
+ this.pixelsSolutions = [];
23
+ this.selectedGauge = null;
24
+ this.selectedGaugeInPoints = null;
25
+ this.cleanCompareQuality('no compare');
26
+ }
27
+ async refreshCompareQuality(frameSet, targets, withCompareDuplicate) {
28
+ const targetsOrdered = targets
29
+ .sort((a, b) => a.date.getTime() - b.date.getTime())
30
+ .map(t => {
31
+ return { date: '' + t.date.getTime(), rainComputationId: t.rainComputationId, rainComputationQualityId: t.rainComputationQualityId };
32
+ });
33
+ const currentTarget = targetsOrdered.filter(t => t.date === '' + frameSet.date.getTime())[0];
34
+ const currentPos = targetsOrdered.indexOf(currentTarget);
35
+ const previousTarget = currentPos >= 0 ? targetsOrdered[currentPos - 1] : null;
36
+ const nextTarget = currentPos >= 0 && currentPos < targetsOrdered.length - 1 ? targetsOrdered[currentPos + 1] : null;
37
+ await this.fetchRainComputationQualities(targetsOrdered);
38
+ const currentQuality = this.rainComputationQualities[currentTarget?.date];
39
+ if (!currentQuality) {
40
+ this.cleanCompareQuality('no current quality ' + Object.keys(this.rainComputationQualities));
41
+ return;
42
+ }
43
+ this.currentQualityDoneDate = currentQuality.isDoneDate;
44
+ this.currentQualityTimeSpentInMs = currentQuality.timeSpentInMs;
45
+ this.currentQualityLaunchedBy = currentQuality.launchedBy;
46
+ this.currentQualityVersion = currentQuality.version;
47
+ const previousQuality = previousTarget &&
48
+ CompareManager.CompareDate(previousTarget.date, currentTarget.date, -5) ?
49
+ this.rainComputationQualities[previousTarget.date] : null;
50
+ const nextQuality = nextTarget
51
+ && CompareManager.CompareDate(nextTarget.date, currentTarget.date, +5) ?
52
+ this.rainComputationQualities[nextTarget.date] : null;
53
+ const qualitySpeedMatrixContainer = currentQuality.qualitySpeedMatrixContainer;
54
+ this.compareNames = qualitySpeedMatrixContainer.getMatrices()
55
+ .map(m => m.name)
56
+ .sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
57
+ this.compareVersion = currentQuality.getVersion();
58
+ this.compareSpeedMatrix = qualitySpeedMatrixContainer.renderMergedMatrix({ normalize: true });
59
+ this.compareTrustedIndicator = qualitySpeedMatrixContainer.getTrustedIndicators()[0];
60
+ this.compares = this.buildCompares(currentQuality, previousQuality, nextQuality, withCompareDuplicate);
61
+ this.onChanges();
62
+ }
63
+ async setGauges() {
64
+ // console.log('setGauges');
65
+ const qualityPoints = [];
66
+ for (const compare of this.compares) {
67
+ for (const qualityPoint of compare.comparePointsHistory) {
68
+ const alreadyAdded = qualityPoints.filter(p => p?.gaugeId === qualityPoint.gaugeId);
69
+ if (alreadyAdded.length === 0) {
70
+ qualityPoints.push(qualityPoint);
71
+ }
72
+ }
73
+ }
74
+ this.gaugesInCompare = qualityPoints.map(p => {
75
+ return new MapLatLng(p.gaugeCartesianValue.lat, p.gaugeCartesianValue.lng, 0, p.gaugeId, p.gaugeLabel + '>' + p.getGaugeValue(), p.getGaugeValue());
76
+ });
77
+ this.resetSelectedGauges();
78
+ }
79
+ async selectGauge(gaugeId, compareIndex) {
80
+ // console.log('selectGauge', gaugeId, compareIndex);
81
+ if (gaugeId) {
82
+ const xys = this.getCurrentQualityPoints(compareIndex).filter(p => p.gaugeId === gaugeId);
83
+ this.selectedGauge = xys.length === 1 ? xys[0] : null;
84
+ }
85
+ else {
86
+ this.selectedGauge = null;
87
+ }
88
+ if (!this.selectedGauge) {
89
+ return this.resetSelectedGauges();
90
+ }
91
+ const selectedGaugeInPoints = this.getCurrentQualityPoints(compareIndex).filter(p => p.gaugeId === this.selectedGauge.gaugeId);
92
+ let pixelsSolutions = [];
93
+ if (selectedGaugeInPoints.length === 1) {
94
+ const remarks = JSON.parse(selectedGaugeInPoints[0].remark)
95
+ .sort((a, b) => a.criteriaAttemptedToBeMinimum - b.criteriaAttemptedToBeMinimum);
96
+ console.log(remarks);
97
+ pixelsSolutions = remarks
98
+ .map(remark => remark.solutionForGauge.pixels
99
+ .map(p => new MapLatLng(p.y + 0.005, p.x + 0.01, 0, '' + !remark.notPossible, '' + !remark.notPossible, 1)));
100
+ const timeDeltaInMinutes = selectedGaugeInPoints[0].getTimeDeltaInMinutes();
101
+ this.selectedGaugeInPointsDetail = '' + selectedGaugeInPoints[0].gaugeLabel + ' > '
102
+ + Math.round(selectedGaugeInPoints[0].getGaugeValue() * 100) / 100 + ' / '
103
+ + Math.round(selectedGaugeInPoints[0].getRainValue() * 100) / 100
104
+ + ' dT=' + timeDeltaInMinutes;
105
+ this.selectedGaugeInPoints = selectedGaugeInPoints[0];
106
+ }
107
+ else {
108
+ this.selectedGaugeInPoints = null;
109
+ this.selectedGauges = [];
110
+ this.selectedPixels = [];
111
+ this.pixelsSolutions = [];
112
+ return;
113
+ }
114
+ this.selectedGauges = [
115
+ new MapLatLng(this.selectedGaugeInPoints.gaugeCartesianValue.lat, this.selectedGaugeInPoints.gaugeCartesianValue.lng, undefined, this.selectedGaugeInPoints.gaugeId, this.selectedGaugeInPoints.gaugeLabel + '>' + this.selectedGaugeInPoints.gaugeCartesianValue.value, this.selectedGaugeInPoints.gaugeCartesianValue.value),
116
+ ];
117
+ this.selectGaugeInCompare();
118
+ const pixels = [];
119
+ for (const rainCartesianValue of this.selectedGaugeInPoints.rainCartesianValues) {
120
+ pixels.push(new MapLatLng(rainCartesianValue.lat + 0.005, rainCartesianValue.lng + 0.01));
121
+ }
122
+ this.selectedPixels = pixels;
123
+ this.pixelsSolutions = pixelsSolutions;
124
+ }
125
+ getCurrentQualityPoints(compareIndex) {
126
+ if (compareIndex < 0 || this.compareNames.length < compareIndex) {
127
+ return [];
128
+ }
129
+ return this.compares[compareIndex].comparePointsHistory;
130
+ }
131
+ cleanCompareQuality(details) {
132
+ this.compareVersion = details;
133
+ this.compareNames = [];
134
+ this.compares = [];
135
+ this.rainComputationQualities = {};
136
+ }
137
+ async fetchRainComputationQualities(targetsOrdered) {
138
+ for (const key of Object.keys(this.rainComputationQualities)) {
139
+ const found = targetsOrdered.filter(t => t.date === key);
140
+ if (found.length < 0) {
141
+ delete this.rainComputationQualities[key];
142
+ }
143
+ }
144
+ for (const target of targetsOrdered) {
145
+ if (!this.rainComputationQualities[target.date] && target.rainComputationQualityId) {
146
+ try {
147
+ this.rainComputationQualities[target.date] = await this.profileService
148
+ .getRainCompareById(this.rainNode.getId(), target.rainComputationId, target.rainComputationQualityId);
149
+ }
150
+ catch (e) {
151
+ console.log(e);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ buildCompares(currentQuality, previousQuality, nextQuality, withCompareDuplicate) {
157
+ const compares = [];
158
+ const qualitySpeedMatrixContainer = currentQuality.qualitySpeedMatrixContainer;
159
+ for (const [index, name] of this.compareNames.entries()) {
160
+ const comparePointsHistory = qualitySpeedMatrixContainer.getQualityPoints(name);
161
+ const maxValue = Math.max(qualitySpeedMatrixContainer.getMaxGauge(), qualitySpeedMatrixContainer.getMaxRain());
162
+ const remarks = qualitySpeedMatrixContainer.getMatrix(index)?.remarks;
163
+ const delta = parseInt(name, 10);
164
+ let renamed = new Date(currentQuality.date.getTime() - delta * 60 * 1000).toLocaleString();
165
+ renamed += delta > 0 ? ' since ' : ' in ';
166
+ renamed += Math.abs(delta) + ' minutes';
167
+ console.log('index:', index, 'delta:', delta, 'renamed:', renamed);
168
+ // remove previous or next better values from comparePoints
169
+ let qualityPoints = comparePointsHistory.filter((p) => p); // no real filter
170
+ const removeDuplicates = !withCompareDuplicate;
171
+ if (removeDuplicates) {
172
+ if (index === this.compareNames.length - 1) {
173
+ if (!previousQuality?.qualitySpeedMatrixContainer) {
174
+ qualityPoints = [];
175
+ }
176
+ else {
177
+ qualityPoints = qualityPoints.filter((p) => {
178
+ const previousQPs = previousQuality.qualitySpeedMatrixContainer
179
+ .getQualityPointsByHistoricalPosition(0)
180
+ .filter(previousQP => p.gaugeId === previousQP.gaugeId);
181
+ // better before ?
182
+ const betterBefore = (previousQPs.length === 1 && p.getDelta() > previousQPs[0].getDelta());
183
+ if (betterBefore) {
184
+ console.log('removed from', renamed, p.gaugeLabel, previousQuality.date.toISOString(), p.getDelta(), previousQPs.length === 1 ? previousQPs[0].getDelta() + ' dated ' + previousQPs[0].gaugeDate.toISOString() : 0);
185
+ return false; // => remove it
186
+ }
187
+ return true;
188
+ });
189
+ }
190
+ }
191
+ else if (index === 0) {
192
+ if (!nextQuality?.qualitySpeedMatrixContainer) {
193
+ qualityPoints = [];
194
+ }
195
+ else {
196
+ qualityPoints = qualityPoints.filter((p) => {
197
+ const nextQPs = nextQuality.qualitySpeedMatrixContainer
198
+ .getQualityPointsByHistoricalPosition(1)
199
+ .filter(nextQP => p.gaugeId === nextQP.gaugeId);
200
+ // better after ?
201
+ const betterAfter = (nextQPs.length === 1 && p.getDelta() > nextQPs[0].getDelta());
202
+ if (betterAfter) {
203
+ console.log('removed from', renamed, p.gaugeLabel, nextQuality.date.toISOString(), p.getDelta(), nextQPs.length === 1 ? nextQPs[0].getDelta() + ' dated ' + nextQPs[0].gaugeDate.toISOString() : 0);
204
+ return false; // => remove it
205
+ }
206
+ return true;
207
+ });
208
+ }
209
+ }
210
+ }
211
+ const comparePoints = qualityPoints.map((qualityPoint) => new XYType(qualityPoint.getGaugeValue(), qualityPoint.getRainValue(), 2, qualityPoint.gaugeLabel, qualityPoint.gaugeId));
212
+ const compare = {
213
+ name: renamed,
214
+ comparePointsHistory,
215
+ comparePoints,
216
+ maxValue,
217
+ comparePointsMax: new XYType(maxValue + 20, maxValue + 20),
218
+ remarks,
219
+ };
220
+ compares.push(compare);
221
+ }
222
+ return compares;
223
+ }
224
+ selectGaugeInCompare() {
225
+ for (const compare of this.compares) {
226
+ const comparePoints = JSON.parse(JSON.stringify(compare.comparePoints));
227
+ comparePoints.forEach(p => {
228
+ if (p.id === this.selectedGaugeInPoints?.gaugeId) {
229
+ p.r = 10;
230
+ }
231
+ else {
232
+ p.r = 3;
233
+ }
234
+ });
235
+ compare.comparePoints = comparePoints;
236
+ }
237
+ }
238
+ resetSelectedGauges() {
239
+ // console.log('resetSelectedGauges reset');
240
+ this.selectedGauge = null;
241
+ this.selectedGaugeInPoints = null;
242
+ this.selectedGauges = [];
243
+ this.selectedPixels = [];
244
+ this.pixelsSolutions = [];
245
+ this.selectGaugeInCompare();
246
+ }
247
+ }
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFJakMsTUFBTSxPQUFPLGNBQWM7SUErQnpCLFlBQ1UsUUFBa0IsRUFDbEIsY0FBOEIsRUFDL0IsWUFBd0IsR0FBRyxFQUFFO0lBQ3BDLENBQUM7UUFITyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixjQUFTLEdBQVQsU0FBUyxDQUNmO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsT0FBZTtRQUV0RSxNQUFNLFdBQVcsR0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRixPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsZUFB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USxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN4RSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRTtvQkFDaEQsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ1Y7cUJBQU07b0JBQ0wsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ1Q7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6Qiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcExhdExuZ30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtQb3NpdGlvblZhbHVlLCBRdWFsaXR5UG9pbnQsIFJhaW5Db21wdXRhdGlvblF1YWxpdHksIFJhaW5Ob2RlfSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge0ZyYW1lU2V0fSBmcm9tICcuL0ZyYW1lU2V0JztcblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcblxuICAvLyBwdWJsaWMgY29tcHV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuXG4gIHB1YmxpYyBjb21wYXJlTmFtZXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgY29tcGFyZXM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBRdWFsaXR5UG9pbnRbXTtcbiAgICByZW1hcmtzOiBzdHJpbmc7XG4gIH1bXTtcbiAgcHVibGljIGNvbXBhcmVTcGVlZE1hdHJpeDogUG9zaXRpb25WYWx1ZVtdO1xuICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG5cbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5RG9uZURhdGU6IERhdGU7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eUxhdW5jaGVkQnk6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5VmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gIHByaXZhdGUgc2VsZWN0ZWRHYXVnZUluUG9pbnRzOiBRdWFsaXR5UG9pbnQ7XG4gIHByaXZhdGUgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByYWluTm9kZTogUmFpbk5vZGUsXG4gICAgcHJpdmF0ZSBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgcHVibGljIG9uQ2hhbmdlczogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICB9XG4gICkge1xuICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIENvbXBhcmVEYXRlKGRhdGUxOiBzdHJpbmcsIGRhdGUyOiBzdHJpbmcsIG1pbnV0ZXM6IG51bWJlcik6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgZGF0ZTFBc0RhdGU6IERhdGUgPSBuZXcgRGF0ZShwYXJzZUludChkYXRlMSwgMTApKTtcbiAgICBjb25zdCBkYXRlMkRpZmYgPSBuZXcgRGF0ZShwYXJzZUludChkYXRlMiwgMTApKTtcbiAgICBkYXRlMkRpZmYuc2V0TWludXRlcyhkYXRlMkRpZmYuZ2V0TWludXRlcygpICsgbWludXRlcyk7XG4gICAgY29uc3QgZGlmZiA9IE1hdGgucm91bmQoKGRhdGUxQXNEYXRlLmdldFRpbWUoKSAtIGRhdGUyRGlmZi5nZXRUaW1lKCkpIC8gKDYwICogMTAwMCkpO1xuICAgIHJldHVybiBkaWZmID09PSAwO1xuICB9XG5cbiAgcHVibGljIGNsZWFuQWxsKCkge1xuICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlJyk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoQ29tcGFyZVF1YWxpdHkoZnJhbWVTZXQ6IEZyYW1lU2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0czogeyBkYXRlOiBEYXRlOyByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nOyByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyB9W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgY29uc3QgdGFyZ2V0c09yZGVyZWQgPSB0YXJnZXRzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpXG4gICAgICAubWFwKHQgPT4ge1xuICAgICAgICByZXR1cm4ge2RhdGU6ICcnICsgdC5kYXRlLmdldFRpbWUoKSwgcmFpbkNvbXB1dGF0aW9uSWQ6IHQucmFpbkNvbXB1dGF0aW9uSWQsIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogdC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWR9O1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0c09yZGVyZWQuZmlsdGVyKHQgPT4gdC5kYXRlID09PSAnJyArIGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpKVswXTtcbiAgICBjb25zdCBjdXJyZW50UG9zID0gdGFyZ2V0c09yZGVyZWQuaW5kZXhPZihjdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCBwcmV2aW91c1RhcmdldCA9IGN1cnJlbnRQb3MgPj0gMCA/IHRhcmdldHNPcmRlcmVkW2N1cnJlbnRQb3MgLSAxXSA6IG51bGw7XG4gICAgY29uc3QgbmV4dFRhcmdldCA9IGN1cnJlbnRQb3MgPj0gMCAmJiBjdXJyZW50UG9zIDwgdGFyZ2V0c09yZGVyZWQubGVuZ3RoIC0gMSA/IHRhcmdldHNPcmRlcmVkW2N1cnJlbnRQb3MgKyAxXSA6IG51bGw7XG5cbiAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKHRhcmdldHNPcmRlcmVkKTtcblxuICAgIGNvbnN0IGN1cnJlbnRRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbY3VycmVudFRhcmdldD8uZGF0ZV07XG4gICAgaWYgKCFjdXJyZW50UXVhbGl0eSkge1xuICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjdXJyZW50IHF1YWxpdHkgJyArIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY3VycmVudFF1YWxpdHkuaXNEb25lRGF0ZTtcbiAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IGN1cnJlbnRRdWFsaXR5LnRpbWVTcGVudEluTXM7XG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjdXJyZW50UXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlWZXJzaW9uID0gY3VycmVudFF1YWxpdHkudmVyc2lvbjtcblxuICAgIGNvbnN0IHByZXZpb3VzUXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IHByZXZpb3VzVGFyZ2V0ICYmXG4gICAgQ29tcGFyZU1hbmFnZXIuQ29tcGFyZURhdGUocHJldmlvdXNUYXJnZXQuZGF0ZSwgY3VycmVudFRhcmdldC5kYXRlLCAtNSkgP1xuICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbcHJldmlvdXNUYXJnZXQuZGF0ZV0gOiBudWxsO1xuICAgIGNvbnN0IG5leHRRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV4dFRhcmdldFxuICAgICYmIENvbXBhcmVNYW5hZ2VyLkNvbXBhcmVEYXRlKG5leHRUYXJnZXQuZGF0ZSwgY3VycmVudFRhcmdldC5kYXRlLCArNSkgP1xuICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbbmV4dFRhcmdldC5kYXRlXSA6IG51bGw7XG5cbiAgICBjb25zdCBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPSBjdXJyZW50UXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXI7XG5cbiAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpXG4gICAgICAubWFwKG0gPT4gbS5uYW1lKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEsIDEwKSAtIHBhcnNlSW50KGIsIDEwKSk7XG4gICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGN1cnJlbnRRdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5yZW5kZXJNZXJnZWRNYXRyaXgoe25vcm1hbGl6ZTogdHJ1ZX0pO1xuICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIuZ2V0VHJ1c3RlZEluZGljYXRvcnMoKVswXTtcbiAgICB0aGlzLmNvbXBhcmVzID0gdGhpcy5idWlsZENvbXBhcmVzKGN1cnJlbnRRdWFsaXR5LCBwcmV2aW91c1F1YWxpdHksIG5leHRRdWFsaXR5LCB3aXRoQ29tcGFyZUR1cGxpY2F0ZSk7XG4gICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIHNldEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0R2F1Z2VzJyk7XG5cbiAgICBjb25zdCBxdWFsaXR5UG9pbnRzOiBRdWFsaXR5UG9pbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLmNvbXBhcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHF1YWxpdHlQb2ludCBvZiBjb21wYXJlLmNvbXBhcmVQb2ludHNIaXN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKHAgPT4gcD8uZ2F1Z2VJZCA9PT0gcXVhbGl0eVBvaW50LmdhdWdlSWQpO1xuICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHF1YWxpdHlQb2ludHMucHVzaChxdWFsaXR5UG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBxdWFsaXR5UG9pbnRzLm1hcChwID0+IHtcbiAgICAgIHJldHVybiBuZXcgTWFwTGF0TG5nKHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIDAsXG4gICAgICAgIHAuZ2F1Z2VJZCwgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgIHAuZ2V0R2F1Z2VWYWx1ZSgpKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3RHYXVnZScsIGdhdWdlSWQsIGNvbXBhcmVJbmRleCk7XG5cbiAgICBpZiAoZ2F1Z2VJZCkge1xuICAgICAgY29uc3QgeHlzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIocCA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkKTtcbiAgICBsZXQgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdID0gW107XG5cbiAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaylcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSAtIGIuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSk7XG4gICAgICBjb25zb2xlLmxvZyhyZW1hcmtzKTtcbiAgICAgIHBpeGVsc1NvbHV0aW9ucyA9IHJlbWFya3NcbiAgICAgICAgLm1hcChyZW1hcmsgPT4gcmVtYXJrLnNvbHV0aW9uRm9yR2F1Z2UucGl4ZWxzXG4gICAgICAgICAgLm1hcChwID0+IG5ldyBNYXBMYXRMbmcocC55ICsgMC4wMDUsIHAueCArIDAuMDEsIDAsICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAxKSkpO1xuXG4gICAgICBjb25zdCB0aW1lRGVsdGFJbk1pbnV0ZXMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0VGltZURlbHRhSW5NaW51dGVzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbCA9ICcnICsgc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdhdWdlTGFiZWwgKyAnID4gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgKyAnIC8gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFJhaW5WYWx1ZSgpICogMTAwKSAvIDEwMFxuICAgICAgICArICcgZFQ9JyArIHRpbWVEZWx0YUluTWludXRlcztcblxuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgbmV3IE1hcExhdExuZyh0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VMYWJlbCArICc+JyArIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUpLFxuICAgIF07XG5cbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG5cbiAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgZm9yIChjb25zdCByYWluQ2FydGVzaWFuVmFsdWUgb2YgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMucmFpbkNhcnRlc2lhblZhbHVlcykge1xuICAgICAgcGl4ZWxzLnB1c2gobmV3IE1hcExhdExuZyhyYWluQ2FydGVzaWFuVmFsdWUubGF0ICsgMC4wMDUsIHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sbmcgKyAwLjAxKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBwaXhlbHM7XG5cbiAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoY29tcGFyZUluZGV4IDwgMCB8fCB0aGlzLmNvbXBhcmVOYW1lcy5sZW5ndGggPCBjb21wYXJlSW5kZXgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21wYXJlc1tjb21wYXJlSW5kZXhdLmNvbXBhcmVQb2ludHNIaXN0b3J5O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgIHRoaXMuY29tcGFyZXMgPSBbXTtcbiAgICB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcyA9IHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZDoge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nO1xuICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nXG4gIH1bXSkge1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMpKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRhcmdldHNPcmRlcmVkLmZpbHRlcih0ID0+IHQuZGF0ZSA9PT0ga2V5KTtcbiAgICAgIGlmIChmb3VuZC5sZW5ndGggPCAwKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHNPcmRlcmVkKSB7XG4gICAgICBpZiAoIXRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW3RhcmdldC5kYXRlXSAmJiB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbdGFyZ2V0LmRhdGVdID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZVxuICAgICAgICAgICAgLmdldFJhaW5Db21wYXJlQnlJZCh0aGlzLnJhaW5Ob2RlLmdldElkKCksIHRhcmdldC5yYWluQ29tcHV0YXRpb25JZCwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb21wYXJlcyhjdXJyZW50UXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb21wYXJlcyA9IFtdO1xuICAgIGNvbnN0IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9IGN1cnJlbnRRdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lcjtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgbmFtZV0gb2YgdGhpcy5jb21wYXJlTmFtZXMuZW50cmllcygpKSB7XG5cbiAgICAgIGNvbnN0IGNvbXBhcmVQb2ludHNIaXN0b3J5ID0gcXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFF1YWxpdHlQb2ludHMobmFtZSk7XG4gICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXhHYXVnZSgpLCBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIuZ2V0TWF4UmFpbigpKTtcbiAgICAgIGNvbnN0IHJlbWFya3MgPSBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIuZ2V0TWF0cml4KGluZGV4KT8ucmVtYXJrcztcblxuICAgICAgY29uc3QgZGVsdGEgPSBwYXJzZUludChuYW1lLCAxMCk7XG4gICAgICBsZXQgcmVuYW1lZCA9IG5ldyBEYXRlKGN1cnJlbnRRdWFsaXR5LmRhdGUuZ2V0VGltZSgpIC0gZGVsdGEgKiA2MCAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICByZW5hbWVkICs9IGRlbHRhID4gMCA/ICcgc2luY2UgJyA6ICcgaW4gJztcbiAgICAgIHJlbmFtZWQgKz0gTWF0aC5hYnMoZGVsdGEpICsgJyBtaW51dGVzJztcblxuICAgICAgY29uc29sZS5sb2coJ2luZGV4OicsIGluZGV4LCAnZGVsdGE6JywgZGVsdGEsICdyZW5hbWVkOicsIHJlbmFtZWQpO1xuXG4gICAgICAvLyByZW1vdmUgcHJldmlvdXMgb3IgbmV4dCBiZXR0ZXIgdmFsdWVzIGZyb20gY29tcGFyZVBvaW50c1xuICAgICAgbGV0IHF1YWxpdHlQb2ludHMgPSBjb21wYXJlUG9pbnRzSGlzdG9yeS5maWx0ZXIoKHA6IGFueSkgPT4gcCk7IC8vIG5vIHJlYWwgZmlsdGVyXG5cbiAgICAgIGNvbnN0IHJlbW92ZUR1cGxpY2F0ZXMgPSAhd2l0aENvbXBhcmVEdXBsaWNhdGU7XG4gICAgICBpZiAocmVtb3ZlRHVwbGljYXRlcykge1xuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBpZiAoIXByZXZpb3VzUXVhbGl0eT8ucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyKSB7XG4gICAgICAgICAgICBxdWFsaXR5UG9pbnRzID0gW107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1YWxpdHlQb2ludHMgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcigocDogUXVhbGl0eVBvaW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUVBzID0gcHJldmlvdXNRdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgIC5nZXRRdWFsaXR5UG9pbnRzQnlIaXN0b3JpY2FsUG9zaXRpb24oMClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHByZXZpb3VzUVAgPT4gcC5nYXVnZUlkID09PSBwcmV2aW91c1FQLmdhdWdlSWQpO1xuXG4gICAgICAgICAgICAgIC8vIGJldHRlciBiZWZvcmUgP1xuICAgICAgICAgICAgICBjb25zdCBiZXR0ZXJCZWZvcmUgPSAocHJldmlvdXNRUHMubGVuZ3RoID09PSAxICYmIHAuZ2V0RGVsdGEoKSA+IHByZXZpb3VzUVBzWzBdLmdldERlbHRhKCkpO1xuICAgICAgICAgICAgICBpZiAoYmV0dGVyQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlbW92ZWQgZnJvbScsIHJlbmFtZWQsIHAuZ2F1Z2VMYWJlbCwgcHJldmlvdXNRdWFsaXR5LmRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHAuZ2V0RGVsdGEoKSxcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzUVBzLmxlbmd0aCA9PT0gMSA/IHByZXZpb3VzUVBzWzBdLmdldERlbHRhKCkgKyAnIGRhdGVkICcgKyBwcmV2aW91c1FQc1swXS5nYXVnZURhdGUudG9JU09TdHJpbmcoKSA6IDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gPT4gcmVtb3ZlIGl0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBpZiAoIW5leHRRdWFsaXR5Py5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIpIHtcbiAgICAgICAgICAgIHF1YWxpdHlQb2ludHMgPSBbXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVhbGl0eVBvaW50cyA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKChwOiBRdWFsaXR5UG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dFFQcyA9IG5leHRRdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgIC5nZXRRdWFsaXR5UG9pbnRzQnlIaXN0b3JpY2FsUG9zaXRpb24oMSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG5leHRRUCA9PiBwLmdhdWdlSWQgPT09IG5leHRRUC5nYXVnZUlkKTtcblxuICAgICAgICAgICAgICAvLyBiZXR0ZXIgYWZ0ZXIgP1xuICAgICAgICAgICAgICBjb25zdCBiZXR0ZXJBZnRlciA9IChuZXh0UVBzLmxlbmd0aCA9PT0gMSAmJiBwLmdldERlbHRhKCkgPiBuZXh0UVBzWzBdLmdldERlbHRhKCkpO1xuICAgICAgICAgICAgICBpZiAoYmV0dGVyQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVtb3ZlZCBmcm9tJywgcmVuYW1lZCwgcC5nYXVnZUxhYmVsLCBuZXh0UXVhbGl0eS5kYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwLmdldERlbHRhKCksXG4gICAgICAgICAgICAgICAgICBuZXh0UVBzLmxlbmd0aCA9PT0gMSA/IG5leHRRUHNbMF0uZ2V0RGVsdGEoKSArICcgZGF0ZWQgJyArIG5leHRRUHNbMF0uZ2F1Z2VEYXRlLnRvSVNPU3RyaW5nKCkgOiAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vID0+IHJlbW92ZSBpdFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBhcmVQb2ludHMgPSBxdWFsaXR5UG9pbnRzLm1hcCgocXVhbGl0eVBvaW50OiBRdWFsaXR5UG9pbnQpID0+XG4gICAgICAgIG5ldyBYWVR5cGUocXVhbGl0eVBvaW50LmdldEdhdWdlVmFsdWUoKSwgcXVhbGl0eVBvaW50LmdldFJhaW5WYWx1ZSgpLCAyLCBxdWFsaXR5UG9pbnQuZ2F1Z2VMYWJlbCwgcXVhbGl0eVBvaW50LmdhdWdlSWQpKTtcblxuICAgICAgY29uc3QgY29tcGFyZSA9IHtcbiAgICAgICAgbmFtZTogcmVuYW1lZCxcbiAgICAgICAgY29tcGFyZVBvaW50c0hpc3RvcnksXG4gICAgICAgIGNvbXBhcmVQb2ludHMsXG4gICAgICAgIG1heFZhbHVlLFxuICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKG1heFZhbHVlICsgMjAsIG1heFZhbHVlICsgMjApLFxuICAgICAgICByZW1hcmtzLFxuICAgICAgfTtcblxuICAgICAgY29tcGFyZXMucHVzaChjb21wYXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXM7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLmNvbXBhcmVzKSB7XG4gICAgICBjb25zdCBjb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wYXJlLmNvbXBhcmVQb2ludHMpKTtcbiAgICAgIGNvbXBhcmVQb2ludHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgaWYgKHAuaWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzPy5nYXVnZUlkKSB7XG4gICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcC5yID0gMztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb21wYXJlLmNvbXBhcmVQb2ludHMgPSBjb21wYXJlUG9pbnRzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export class FrameSet {
2
+ constructor(date, radarMeasureIds = [], rainComputationId = null, rainComputationVersion = null, rainComputationQualities = []) {
3
+ this.date = date;
4
+ this.radarMeasureIds = radarMeasureIds;
5
+ this.rainComputationId = rainComputationId;
6
+ this.rainComputationVersion = rainComputationVersion;
7
+ this.rainComputationQualities = rainComputationQualities;
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbWVTZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9GcmFtZVNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sUUFBUTtJQUNuQixZQUFtQixJQUFVLEVBQ1Ysa0JBQTRCLEVBQUUsRUFDOUIsb0JBQTRCLElBQUksRUFDaEMseUJBQWlDLElBQUksRUFDckMsMkJBR0QsRUFBRTtRQVBELFNBQUksR0FBSixJQUFJLENBQU07UUFDVixvQkFBZSxHQUFmLGVBQWUsQ0FBZTtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWU7UUFDaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFlO1FBQ3JDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FHdkI7SUFDcEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEZyYW1lU2V0IHtcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGU6IERhdGUsXG4gICAgICAgICAgICAgIHB1YmxpYyByYWRhck1lYXN1cmVJZHM6IHN0cmluZ1tdID0gW10sXG4gICAgICAgICAgICAgIHB1YmxpYyByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nID0gbnVsbCxcbiAgICAgICAgICAgICAgcHVibGljIHJhaW5Db21wdXRhdGlvblZlcnNpb246IHN0cmluZyA9IG51bGwsXG4gICAgICAgICAgICAgIHB1YmxpYyByYWluQ29tcHV0YXRpb25RdWFsaXRpZXM6IHtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgaWQ6IHN0cmluZ1xuICAgICAgICAgICAgICB9W10gPSBbXSkge1xuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { GaugeNode } from 'raain-model';
2
+ export class GaugeNodeFilter extends GaugeNode {
3
+ constructor(json) {
4
+ super(json);
5
+ this.isIn = true;
6
+ this.distance = 0;
7
+ }
8
+ approxDistanceFrom(center) {
9
+ this.distance = Math.round((Math.pow(this.latitude - center.lat, 2) + Math.pow(this.longitude - center.lng, 2)) * 100 * 100) / 100;
10
+ return this.distance;
11
+ }
12
+ add() {
13
+ this.isIn = true;
14
+ }
15
+ remove() {
16
+ this.isIn = false;
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F1Z2VOb2RlRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdG9vbHMvR2F1Z2VOb2RlRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFOUMsTUFBTSxPQUFPLGVBQWdCLFNBQVEsU0FBUztJQUs1QyxZQUFZLElBQVM7UUFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBSlAsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLGFBQVEsR0FBRyxDQUFDLENBQUM7SUFJcEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ25JLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHYXVnZU5vZGUsIExhdExuZ30gZnJvbSAncmFhaW4tbW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgR2F1Z2VOb2RlRmlsdGVyIGV4dGVuZHMgR2F1Z2VOb2RlIHtcblxuICBwdWJsaWMgaXNJbiA9IHRydWU7XG4gIHB1YmxpYyBkaXN0YW5jZSA9IDA7XG5cbiAgY29uc3RydWN0b3IoanNvbjogYW55KSB7XG4gICAgc3VwZXIoanNvbik7XG4gIH1cblxuICBhcHByb3hEaXN0YW5jZUZyb20oY2VudGVyOiBMYXRMbmcpOiBudW1iZXIge1xuICAgIHRoaXMuZGlzdGFuY2UgPSBNYXRoLnJvdW5kKChNYXRoLnBvdyh0aGlzLmxhdGl0dWRlIC0gY2VudGVyLmxhdCwgMikgKyBNYXRoLnBvdyh0aGlzLmxvbmdpdHVkZSAtIGNlbnRlci5sbmcsIDIpKSAqIDEwMCAqIDEwMCkgLyAxMDA7XG4gICAgcmV0dXJuIHRoaXMuZGlzdGFuY2U7XG4gIH1cblxuICBhZGQoKSB7XG4gICAgdGhpcy5pc0luID0gdHJ1ZTtcbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmlzSW4gPSBmYWxzZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,202 @@
1
+ import { Subject, takeUntil, timer } from 'rxjs';
2
+ import { switchMap } from 'rxjs/operators';
3
+ import { TimeframeContainers } from 'raain-ui';
4
+ export class RefreshManager {
5
+ constructor(rainNode, radarService, profileService, compareManager, onRefreshInProgress, onRefreshDone, onFetchDone) {
6
+ this.rainNode = rainNode;
7
+ this.radarService = radarService;
8
+ this.profileService = profileService;
9
+ this.compareManager = compareManager;
10
+ this.onRefreshInProgress = onRefreshInProgress;
11
+ this.onRefreshDone = onRefreshDone;
12
+ this.onFetchDone = onFetchDone;
13
+ this.closeRefreshTimer = new Subject();
14
+ this.cleanAll();
15
+ }
16
+ static Delay(ms) {
17
+ return new Promise(resolve => setTimeout(resolve, ms));
18
+ }
19
+ cleanAll() {
20
+ this.countsPeriod = {};
21
+ this.timeframesFromRadars = [];
22
+ this.timeframesFromRadarsExtended = [];
23
+ this.timeframeDates = [];
24
+ this.closeRefreshTimer?.next(null);
25
+ }
26
+ async fetch(dateShown, withGaugesMeasures, withCompareDuplicate) {
27
+ // set the target
28
+ const currents = this.timeframesFromRadarsExtended.filter(t => t.date.getTime() === dateShown.getTime());
29
+ if (currents.length !== 1) {
30
+ console.log('no correct dateShown', dateShown, this.timeframesFromRadarsExtended);
31
+ return;
32
+ }
33
+ // build [current, previous, next] targets
34
+ const current = currents[0];
35
+ const position = this.timeframesFromRadarsExtended.indexOf(current);
36
+ let previous = null, next = null;
37
+ const positionNames = ['' + current.date.getTime()];
38
+ const frameSets = {};
39
+ frameSets['' + current.date.getTime()] = current;
40
+ if (position > 0) {
41
+ previous = this.timeframesFromRadarsExtended[position - 1];
42
+ positionNames.push('' + previous.date.getTime());
43
+ frameSets['' + previous.date.getTime()] = previous;
44
+ }
45
+ if (position < this.timeframesFromRadarsExtended.length) {
46
+ next = this.timeframesFromRadarsExtended[position + 1];
47
+ if (next?.date) {
48
+ positionNames.push('' + next.date.getTime());
49
+ frameSets['' + next.date.getTime()] = next;
50
+ }
51
+ }
52
+ // align Map with targets
53
+ const targets = [];
54
+ for (const positionName of positionNames) {
55
+ if (frameSets[positionName]) {
56
+ const target = frameSets[positionName];
57
+ target.rainComputationQualityId = this.getRainComputationQualityTarget(target);
58
+ target.withGauge = withGaugesMeasures;
59
+ targets.push(target);
60
+ const timeframeContainers = await this.refreshMapTimeframeContainers(target);
61
+ if (positionName === ('' + current.date.getTime())) {
62
+ this.onFetchDone(timeframeContainers).then(ignored => {
63
+ });
64
+ }
65
+ }
66
+ }
67
+ // align Compare with targets
68
+ this.refreshCompareQuality(current, targets, withCompareDuplicate).then((ignored) => {
69
+ });
70
+ return current;
71
+ }
72
+ async stopAll() {
73
+ this.closeRefreshTimer.next(null); // <-- stop polling
74
+ await this.profileService.stopAll(this.rainNode.id);
75
+ await this.onRefreshDone(this.timeframeDates);
76
+ }
77
+ async setPeriod(begin, end) {
78
+ this.begin = begin;
79
+ this.end = end;
80
+ return this.refreshCounts();
81
+ }
82
+ async refresh(launchQualityAfter) {
83
+ if (!this.begin || !this.end) {
84
+ throw new Error('need a period');
85
+ }
86
+ this.compareManager.cleanAll();
87
+ let refreshInProgress = false;
88
+ let refreshDone = false;
89
+ timer(1000, 15000)
90
+ .pipe(switchMap(async () => {
91
+ if (refreshInProgress) {
92
+ return refreshDone;
93
+ }
94
+ refreshInProgress = true;
95
+ this.onRefreshInProgress(await this.refreshCounts(), this.timeframeDates).then(ignored => {
96
+ });
97
+ refreshDone = await this.refreshPeriodInsidePolling();
98
+ if (!refreshDone) {
99
+ refreshInProgress = false;
100
+ }
101
+ return refreshDone;
102
+ }), takeUntil(this.closeRefreshTimer))
103
+ .subscribe({
104
+ next: async (refreshFinished) => {
105
+ console.log('refreshFinished', refreshFinished, launchQualityAfter);
106
+ if (refreshFinished) {
107
+ this.closeRefreshTimer.next(null);
108
+ await this.onRefreshDone(this.timeframeDates);
109
+ }
110
+ },
111
+ error: (error) => {
112
+ console.error('error in refresh', error);
113
+ }
114
+ });
115
+ }
116
+ async selectGauge(gaugeId, compareIndex) {
117
+ return this.compareManager.selectGauge(gaugeId, compareIndex);
118
+ }
119
+ async refreshCounts() {
120
+ const counts = await this.profileService.getCounts(this.rainNode.id, this.begin, this.end, true);
121
+ this.countsPeriod = {
122
+ radarMeasures: counts.radarMeasures.reduce((partialSum, a) => partialSum + a.x, 0),
123
+ gaugeMeasures: counts.gaugeMeasures.reduce((partialSum, a) => partialSum + a.x, 0),
124
+ computationsByTeam: counts.computationsByTeam.reduce((partialSum, a) => partialSum + a.x, 0),
125
+ computationsByR2R: counts.computationsByR2R.reduce((partialSum, a) => partialSum + a.x, 0),
126
+ computationsUnderProcessing: counts.computationsUnderProcessing.reduce((partialSum, a) => partialSum + a.x, 0),
127
+ gaugeIntensity: counts.gaugeIntensity.reduce((partialSum, a) => partialSum + a.x, 0),
128
+ queueStoreSize: counts.queueStoreSize,
129
+ queueWaiting: counts.queueWaiting,
130
+ queueRunning: counts.queueRunning,
131
+ qualitiesInternal: counts.qualitiesInternal.reduce((partialSum, a) => partialSum + a.x, 0),
132
+ qualitiesInternalInProgress: counts.qualitiesInternalInProgress.reduce((partialSum, a) => partialSum + a.x, 0),
133
+ };
134
+ return this.countsPeriod;
135
+ }
136
+ getRainComputationQualityTarget(frameset) {
137
+ if (frameset.rainComputationQualities.length <= 0) {
138
+ return undefined;
139
+ }
140
+ return frameset.rainComputationQualities[0].id;
141
+ }
142
+ async refreshPeriodInsidePolling() {
143
+ // await RefreshManager.Delay(1000);
144
+ await this.refreshTimeframesFromRadars();
145
+ // if (this.countsPeriod.queueRunning === 0) {
146
+ // return true;
147
+ // }
148
+ if (this.countsPeriod.computationsUnderProcessing > 0) {
149
+ return false; // => continue
150
+ }
151
+ if (this.countsPeriod.qualitiesInternalInProgress > 0) {
152
+ return false; // => continue
153
+ }
154
+ console.log('refreshPeriodInsidePolling', this.countsPeriod.computationsByR2R, this.countsPeriod.radarMeasures);
155
+ // return this.countsPeriod.qualitiesInternal >= this.countsPeriod.radarMeasures;
156
+ const done = this.countsPeriod.computationsByR2R === this.countsPeriod.radarMeasures;
157
+ return done;
158
+ }
159
+ async refreshTimeframesFromRadars() {
160
+ const beginExtended = new Date(this.begin);
161
+ const endExtended = new Date(this.end);
162
+ beginExtended.setMinutes(beginExtended.getMinutes() - 7);
163
+ endExtended.setMinutes(endExtended.getMinutes() + 7);
164
+ this.rainNode = await this.profileService.getRainTimeframe(this.rainNode.getId(), beginExtended, endExtended);
165
+ this.timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);
166
+ this.timeframesFromRadars = this.timeframesFromRadarsExtended
167
+ .filter((frameSet) => this.begin.getTime() <= frameSet.date.getTime() && frameSet.date.getTime() <= this.end.getTime())
168
+ .sort((a, b) => a.date.getTime() - b.date.getTime());
169
+ // console.log('timeframesFromRadarsExtended:', this.timeframesFromRadarsExtended);
170
+ this.timeframeDates = this.timeframesFromRadars.map(frameSet => frameSet.date);
171
+ return this.timeframesFromRadars;
172
+ }
173
+ async refreshMapTimeframeContainers(target) {
174
+ if (!target || !target.rainComputationId) {
175
+ console.warn('Pb with refreshMapTimeframeContainers insights');
176
+ return;
177
+ }
178
+ const rainNode = this.rainNode;
179
+ const containers = [];
180
+ const newCreatedTimeframeContainers = new TimeframeContainers(containers);
181
+ try {
182
+ const rainNodeCartesianMap = await this.profileService
183
+ .getRainComputationCartesianMapById(rainNode.getId(), target.rainComputationId);
184
+ if (rainNodeCartesianMap) {
185
+ newCreatedTimeframeContainers.addFromRainComputationMap(rainNodeCartesianMap, false);
186
+ this.rainComputationMapDate = rainNodeCartesianMap.date;
187
+ this.rainComputationMapDoneDate = rainNodeCartesianMap.isDoneDate;
188
+ this.rainComputationMapLaunchedBy = rainNodeCartesianMap.launchedBy;
189
+ this.rainComputationMapTimeSpentInMs = rainNodeCartesianMap.timeSpentInMs;
190
+ }
191
+ }
192
+ catch (e) {
193
+ console.warn('Pb with computations for id:', target.rainComputationId, e);
194
+ }
195
+ return newCreatedTimeframeContainers;
196
+ }
197
+ async refreshCompareQuality(frameSet, targets, withCompareDuplicate) {
198
+ await this.compareManager.refreshCompareQuality(frameSet, targets, withCompareDuplicate);
199
+ await this.compareManager.setGauges();
200
+ }
201
+ }
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVmcmVzaE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9SZWZyZXNoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sRUFBbUQsbUJBQW1CLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFLL0YsTUFBTSxPQUFPLGNBQWM7SUFlekIsWUFDWSxRQUFrQixFQUNsQixZQUEwQixFQUMxQixjQUE4QixFQUM5QixjQUE4QixFQUM5QixtQkFBaUYsRUFDakYsYUFBd0QsRUFDeEQsV0FBd0U7UUFOeEUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBOEQ7UUFDakYsa0JBQWEsR0FBYixhQUFhLENBQTJDO1FBQ3hELGdCQUFXLEdBQVgsV0FBVyxDQUE2RDtRQUVsRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVTtRQUM1QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMv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QUFDLENBQUM7Z0JBRXJGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hELElBQUksQ0FBQywwQkFBMEIsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ3BFLElBQUksQ0FBQywrQkFBK0IsR0FBRyxvQkFBb0IsQ0FBQyxhQUFhLENBQUM7YUFDM0U7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0U7UUFFRCxPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7SUFFUyxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBa0IsRUFBRSxPQUluQixFQUNILG9CQUE2QjtRQUMvRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZyYW1lU2V0fSBmcm9tICcuL0ZyYW1lU2V0JztcbmltcG9ydCB7U3ViamVjdCwgdGFrZVVudGlsLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtHYXVnZU5vZGUsIFJhaW5Ob2RlfSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge0ZyYW1lQ29udGFpbmVyLCBJY29uTWFwVmFsdWUsIFRpbWVmcmFtZUNvbnRhaW5lciwgVGltZWZyYW1lQ29udGFpbmVyc30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtSYWRhclNlcnZpY2V9IGZyb20gJy4uL3JhZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7Q29tcGFyZU1hbmFnZXJ9IGZyb20gJy4vQ29tcGFyZU1hbmFnZXInO1xuXG5leHBvcnQgY2xhc3MgUmVmcmVzaE1hbmFnZXIge1xuXG4gIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBEYXRlOiBEYXRlO1xuICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwRG9uZURhdGU6IERhdGU7XG4gIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBUaW1lU3BlbnRJbk1zOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGNsb3NlUmVmcmVzaFRpbWVyOiBTdWJqZWN0PGFueT47XG4gIHByb3RlY3RlZCBjb3VudHNQZXJpb2Q6IGFueTtcbiAgcHJvdGVjdGVkIHRpbWVmcmFtZXNGcm9tUmFkYXJzOiBGcmFtZVNldFtdO1xuICBwcm90ZWN0ZWQgdGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZDogRnJhbWVTZXRbXTtcbiAgcHJvdGVjdGVkIHRpbWVmcmFtZURhdGVzOiBEYXRlW107XG4gIHByb3RlY3RlZCBiZWdpbjogRGF0ZTtcbiAgcHJvdGVjdGVkIGVuZDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmFpbk5vZGU6IFJhaW5Ob2RlLFxuICAgIHByb3RlY3RlZCByYWRhclNlcnZpY2U6IFJhZGFyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb21wYXJlTWFuYWdlcjogQ29tcGFyZU1hbmFnZXIsXG4gICAgcHJvdGVjdGVkIG9uUmVmcmVzaEluUHJvZ3Jlc3M6IChjb3VudFBlcmlvZHM6IGFueSwgdGltZWZyYW1lRGF0ZXM6IERhdGVbXSkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBwcm90ZWN0ZWQgb25SZWZyZXNoRG9uZTogKHRpbWVmcmFtZURhdGVzOiBEYXRlW10pID0+IFByb21pc2U8dm9pZD4sXG4gICAgcHJvdGVjdGVkIG9uRmV0Y2hEb25lOiAodGltZWZyYW1lQ29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVycykgPT4gUHJvbWlzZTx2b2lkPixcbiAgKSB7XG4gICAgdGhpcy5jbG9zZVJlZnJlc2hUaW1lciA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICB0aGlzLmNsZWFuQWxsKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIERlbGF5KG1zOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cblxuICBjbGVhbkFsbCgpIHtcblxuICAgIHRoaXMuY291bnRzUGVyaW9kID0ge307XG4gICAgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFycyA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZCA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lRGF0ZXMgPSBbXTtcbiAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyPy5uZXh0KG51bGwpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goZGF0ZVNob3duOiBEYXRlLCB3aXRoR2F1Z2VzTWVhc3VyZXM6IGJvb2xlYW4sIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKTogUHJvbWlzZTxGcmFtZVNldD4ge1xuICAgIC8vIHNldCB0aGUgdGFyZ2V0XG4gICAgY29uc3QgY3VycmVudHMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQuZmlsdGVyKHQgPT4gdC5kYXRlLmdldFRpbWUoKSA9PT0gZGF0ZVNob3duLmdldFRpbWUoKSk7XG4gICAgaWYgKGN1cnJlbnRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc29sZS5sb2coJ25vIGNvcnJlY3QgZGF0ZVNob3duJywgZGF0ZVNob3duLCB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJ1aWxkIFtjdXJyZW50LCBwcmV2aW91cywgbmV4dF0gdGFyZ2V0c1xuICAgIGNvbnN0IGN1cnJlbnQ6IEZyYW1lU2V0ID0gY3VycmVudHNbMF07XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQuaW5kZXhPZihjdXJyZW50KTtcbiAgICBsZXQgcHJldmlvdXM6IEZyYW1lU2V0ID0gbnVsbCwgbmV4dDogRnJhbWVTZXQgPSBudWxsO1xuICAgIGNvbnN0IHBvc2l0aW9uTmFtZXM6IHN0cmluZ1tdID0gWycnICsgY3VycmVudC5kYXRlLmdldFRpbWUoKV07XG4gICAgY29uc3QgZnJhbWVTZXRzID0ge307XG4gICAgZnJhbWVTZXRzWycnICsgY3VycmVudC5kYXRlLmdldFRpbWUoKV0gPSBjdXJyZW50O1xuICAgIGlmIChwb3NpdGlvbiA+IDApIHtcbiAgICAgIHByZXZpb3VzID0gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkW3Bvc2l0aW9uIC0gMV07XG4gICAgICBwb3NpdGlvbk5hbWVzLnB1c2goJycgKyBwcmV2aW91cy5kYXRlLmdldFRpbWUoKSk7XG4gICAgICBmcmFtZVNldHNbJycgKyBwcmV2aW91cy5kYXRlLmdldFRpbWUoKV0gPSBwcmV2aW91cztcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uIDwgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkLmxlbmd0aCkge1xuICAgICAgbmV4dCA9IHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZFtwb3NpdGlvbiArIDFdO1xuICAgICAgaWYgKG5leHQ/LmRhdGUpIHtcbiAgICAgICAgcG9zaXRpb25OYW1lcy5wdXNoKCcnICsgbmV4dC5kYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGZyYW1lU2V0c1snJyArIG5leHQuZGF0ZS5nZXRUaW1lKCldID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbGlnbiBNYXAgd2l0aCB0YXJnZXRzXG4gICAgY29uc3QgdGFyZ2V0czoge1xuICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyxcbiAgICB9W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBvc2l0aW9uTmFtZSBvZiBwb3NpdGlvbk5hbWVzKSB7XG4gICAgICBpZiAoZnJhbWVTZXRzW3Bvc2l0aW9uTmFtZV0pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZnJhbWVTZXRzW3Bvc2l0aW9uTmFtZV07XG4gICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWQgPSB0aGlzLmdldFJhaW5Db21wdXRhdGlvblF1YWxpdHlUYXJnZXQodGFyZ2V0KTtcbiAgICAgICAgdGFyZ2V0LndpdGhHYXVnZSA9IHdpdGhHYXVnZXNNZWFzdXJlcztcbiAgICAgICAgdGFyZ2V0cy5wdXNoKHRhcmdldCk7XG5cbiAgICAgICAgY29uc3QgdGltZWZyYW1lQ29udGFpbmVycyA9IGF3YWl0IHRoaXMucmVmcmVzaE1hcFRpbWVmcmFtZUNvbnRhaW5lcnModGFyZ2V0KTtcblxuICAgICAgICBpZiAocG9zaXRpb25OYW1lID09PSAoJycgKyBjdXJyZW50LmRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgIHRoaXMub25GZXRjaERvbmUodGltZWZyYW1lQ29udGFpbmVycykudGhlbihpZ25vcmVkID0+IHtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsaWduIENvbXBhcmUgd2l0aCB0YXJnZXRzXG4gICAgdGhpcy5yZWZyZXNoQ29tcGFyZVF1YWxpdHkoY3VycmVudCwgdGFyZ2V0cywgd2l0aENvbXBhcmVEdXBsaWNhdGUpLnRoZW4oKGlnbm9yZWQpID0+IHtcbiAgICB9KTtcblxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgYXN5bmMgc3RvcEFsbCgpIHtcbiAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyLm5leHQobnVsbCk7IC8vIDwtLSBzdG9wIHBvbGxpbmdcbiAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLnN0b3BBbGwodGhpcy5yYWluTm9kZS5pZCk7XG4gICAgYXdhaXQgdGhpcy5vblJlZnJlc2hEb25lKHRoaXMudGltZWZyYW1lRGF0ZXMpO1xuICB9XG5cbiAgYXN5bmMgc2V0UGVyaW9kKGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUpIHtcbiAgICB0aGlzLmJlZ2luID0gYmVnaW47XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG5cbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoQ291bnRzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKGxhdW5jaFF1YWxpdHlBZnRlcjogYm9vbGVhbikge1xuXG4gICAgaWYgKCF0aGlzLmJlZ2luIHx8ICF0aGlzLmVuZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCduZWVkIGEgcGVyaW9kJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wYXJlTWFuYWdlci5jbGVhbkFsbCgpO1xuICAgIGxldCByZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIGxldCByZWZyZXNoRG9uZSA9IGZhbHNlO1xuXG4gICAgdGltZXIoMTAwMCwgMTUwMDApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAocmVmcmVzaEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoRG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWZyZXNoSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5vblJlZnJlc2hJblByb2dyZXNzKGF3YWl0IHRoaXMucmVmcmVzaENvdW50cygpLCB0aGlzLnRpbWVmcmFtZURhdGVzKS50aGVuKGlnbm9yZWQgPT4ge1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlZnJlc2hEb25lID0gYXdhaXQgdGhpcy5yZWZyZXNoUGVyaW9kSW5zaWRlUG9sbGluZygpO1xuICAgICAgICAgIGlmICghcmVmcmVzaERvbmUpIHtcbiAgICAgICAgICAgIHJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZyZXNoRG9uZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmNsb3NlUmVmcmVzaFRpbWVyKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBhc3luYyAocmVmcmVzaEZpbmlzaGVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3JlZnJlc2hGaW5pc2hlZCcsIHJlZnJlc2hGaW5pc2hlZCwgbGF1bmNoUXVhbGl0eUFmdGVyKTtcbiAgICAgICAgICBpZiAocmVmcmVzaEZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uUmVmcmVzaERvbmUodGhpcy50aW1lZnJhbWVEYXRlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBpbiByZWZyZXNoJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICB9XG5cbiAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmVNYW5hZ2VyLnNlbGVjdEdhdWdlKGdhdWdlSWQsIGNvbXBhcmVJbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaENvdW50cygpIHtcbiAgICBjb25zdCBjb3VudHMgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldENvdW50cyh0aGlzLnJhaW5Ob2RlLmlkLCB0aGlzLmJlZ2luLCB0aGlzLmVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5jb3VudHNQZXJpb2QgPSB7XG4gICAgICByYWRhck1lYXN1cmVzOiBjb3VudHMucmFkYXJNZWFzdXJlcy5yZWR1Y2UoKHBhcnRpYWxTdW0sIGEpID0+IHBhcnRpYWxTdW0gKyBhLngsIDApLFxuICAgICAgZ2F1Z2VNZWFzdXJlczogY291bnRzLmdhdWdlTWVhc3VyZXMucmVkdWNlKChwYXJ0aWFsU3VtLCBhKSA9PiBwYXJ0aWFsU3VtICsgYS54LCAwKSxcbiAgICAgIGNvbXB1dGF0aW9uc0J5VGVhbTogY291bnRzLmNvbXB1dGF0aW9uc0J5VGVhbS5yZWR1Y2UoKHBhcnRpYWxTdW0sIGEpID0+IHBhcnRpYWxTdW0gKyBhLngsIDApLFxuICAgICAgY29tcHV0YXRpb25zQnlSMlI6IGNvdW50cy5jb21wdXRhdGlvbnNCeVIyUi5yZWR1Y2UoKHBhcnRpYWxTdW0sIGEpID0+IHBhcnRpYWxTdW0gKyBhLngsIDApLFxuICAgICAgY29tcHV0YXRpb25zVW5kZXJQcm9jZXNzaW5nOiBjb3VudHMuY29tcHV0YXRpb25zVW5kZXJQcm9jZXNzaW5nLnJlZHVjZSgocGFydGlhbFN1bSwgYSkgPT4gcGFydGlhbFN1bSArIGEueCwgMCksXG4gICAgICBnYXVnZUludGVuc2l0eTogY291bnRzLmdhdWdlSW50ZW5zaXR5LnJlZHVjZSgocGFydGlhbFN1bSwgYSkgPT4gcGFydGlhbFN1bSArIGEueCwgMCksXG4gICAgICBxdWV1ZVN0b3JlU2l6ZTogY291bnRzLnF1ZXVlU3RvcmVTaXplLFxuICAgICAgcXVldWVXYWl0aW5nOiBjb3VudHMucXVldWVXYWl0aW5nLFxuICAgICAgcXVldWVSdW5uaW5nOiBjb3VudHMucXVldWVSdW5uaW5nLFxuICAgICAgcXVhbGl0aWVzSW50ZXJuYWw6IGNvdW50cy5xdWFsaXRpZXNJbnRlcm5hbC5yZWR1Y2UoKHBhcnRpYWxTdW0sIGEpID0+IHBhcnRpYWxTdW0gKyBhLngsIDApLFxuICAgICAgcXVhbGl0aWVzSW50ZXJuYWxJblByb2dyZXNzOiBjb3VudHMucXVhbGl0aWVzSW50ZXJuYWxJblByb2dyZXNzLnJlZHVjZSgocGFydGlhbFN1bSwgYSkgPT4gcGFydGlhbFN1bSArIGEueCwgMCksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb3VudHNQZXJpb2Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eVRhcmdldChmcmFtZXNldDogRnJhbWVTZXQpOiBzdHJpbmcge1xuICAgIGlmIChmcmFtZXNldC5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBmcmFtZXNldC5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbMF0uaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaFBlcmlvZEluc2lkZVBvbGxpbmcoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICAvLyBhd2FpdCBSZWZyZXNoTWFuYWdlci5EZWxheSgxMDAwKTtcblxuICAgIGF3YWl0IHRoaXMucmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzKCk7XG5cbiAgICAvLyBpZiAodGhpcy5jb3VudHNQZXJpb2QucXVldWVSdW5uaW5nID09PSAwKSB7XG4gICAgLy8gIHJldHVybiB0cnVlO1xuICAgIC8vIH1cblxuICAgIGlmICh0aGlzLmNvdW50c1BlcmlvZC5jb21wdXRhdGlvbnNVbmRlclByb2Nlc3NpbmcgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vID0+IGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY291bnRzUGVyaW9kLnF1YWxpdGllc0ludGVybmFsSW5Qcm9ncmVzcyA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gPT4gY29udGludWVcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygncmVmcmVzaFBlcmlvZEluc2lkZVBvbGxpbmcnLCB0aGlzLmNvdW50c1BlcmlvZC5jb21wdXRhdGlvbnNCeVIyUiwgdGhpcy5jb3VudHNQZXJpb2QucmFkYXJNZWFzdXJlcylcbiAgICAvLyByZXR1cm4gdGhpcy5jb3VudHNQZXJpb2QucXVhbGl0aWVzSW50ZXJuYWwgPj0gdGhpcy5jb3VudHNQZXJpb2QucmFkYXJNZWFzdXJlcztcbiAgICBjb25zdCBkb25lID0gdGhpcy5jb3VudHNQZXJpb2QuY29tcHV0YXRpb25zQnlSMlIgPT09IHRoaXMuY291bnRzUGVyaW9kLnJhZGFyTWVhc3VyZXM7XG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzKCkge1xuXG4gICAgY29uc3QgYmVnaW5FeHRlbmRlZCA9IG5ldyBEYXRlKHRoaXMuYmVnaW4pO1xuICAgIGNvbnN0IGVuZEV4dGVuZGVkID0gbmV3IERhdGUodGhpcy5lbmQpO1xuICAgIGJlZ2luRXh0ZW5kZWQuc2V0TWludXRlcyhiZWdpbkV4dGVuZGVkLmdldE1pbnV0ZXMoKSAtIDcpO1xuICAgIGVuZEV4dGVuZGVkLnNldE1pbnV0ZXMoZW5kRXh0ZW5kZWQuZ2V0TWludXRlcygpICsgNyk7XG4gICAgdGhpcy5yYWluTm9kZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpblRpbWVmcmFtZSh0aGlzLnJhaW5Ob2RlLmdldElkKCksIGJlZ2luRXh0ZW5kZWQsIGVuZEV4dGVuZGVkKTtcblxuICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZCA9IGF3YWl0IHRoaXMucmFkYXJTZXJ2aWNlLmdldFRpbWVsaW5lKHRoaXMucmFpbk5vZGUpO1xuICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWRcbiAgICAgIC5maWx0ZXIoKGZyYW1lU2V0KSA9PiB0aGlzLmJlZ2luLmdldFRpbWUoKSA8PSBmcmFtZVNldC5kYXRlLmdldFRpbWUoKSAmJiBmcmFtZVNldC5kYXRlLmdldFRpbWUoKSA8PSB0aGlzLmVuZC5nZXRUaW1lKCkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ3RpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQ6JywgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkKTtcblxuICAgIHRoaXMudGltZWZyYW1lRGF0ZXMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzLm1hcChmcmFtZVNldCA9PiBmcmFtZVNldC5kYXRlKTtcbiAgICByZXR1cm4gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFycztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoTWFwVGltZWZyYW1lQ29udGFpbmVycyh0YXJnZXQ6IHtcbiAgICBkYXRlOiBEYXRlLFxuICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgd2l0aEdhdWdlOiBib29sZWFuXG4gIH0pIHtcbiAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1BiIHdpdGggcmVmcmVzaE1hcFRpbWVmcmFtZUNvbnRhaW5lcnMgaW5zaWdodHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYWluTm9kZSA9IHRoaXMucmFpbk5vZGU7XG4gICAgY29uc3QgY29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVyW10gPSBbXTtcbiAgICBjb25zdCBuZXdDcmVhdGVkVGltZWZyYW1lQ29udGFpbmVycyA9IG5ldyBUaW1lZnJhbWVDb250YWluZXJzKGNvbnRhaW5lcnMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYWluTm9kZUNhcnRlc2lhbk1hcCA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2VcbiAgICAgICAgLmdldFJhaW5Db21wdXRhdGlvbkNhcnRlc2lhbk1hcEJ5SWQocmFpbk5vZGUuZ2V0SWQoKSwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkKTtcbiAgICAgIGlmIChyYWluTm9kZUNhcnRlc2lhbk1hcCkge1xuICAgICAgICBuZXdDcmVhdGVkVGltZWZyYW1lQ29udGFpbmVycy5hZGRGcm9tUmFpbkNvbXB1dGF0aW9uTWFwKHJhaW5Ob2RlQ2FydGVzaWFuTWFwLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBEYXRlID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAuZGF0ZTtcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBEb25lRGF0ZSA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLmlzRG9uZURhdGU7XG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwTGF1bmNoZWRCeSA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLmxhdW5jaGVkQnk7XG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwVGltZVNwZW50SW5NcyA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLnRpbWVTcGVudEluTXM7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQYiB3aXRoIGNvbXB1dGF0aW9ucyBmb3IgaWQ6JywgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkLCBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Q3JlYXRlZFRpbWVmcmFtZUNvbnRhaW5lcnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCwgdGFyZ2V0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuICAgIGF3YWl0IHRoaXMuY29tcGFyZU1hbmFnZXIucmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0LCB0YXJnZXRzLCB3aXRoQ29tcGFyZUR1cGxpY2F0ZSk7XG4gICAgYXdhaXQgdGhpcy5jb21wYXJlTWFuYWdlci5zZXRHYXVnZXMoKTtcbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export * from './CompareManager';
2
+ export * from './FrameSet';
3
+ export * from './GaugeNodeFilter';
4
+ export * from './RefreshManager';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vQ29tcGFyZU1hbmFnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9GcmFtZVNldCc7XG5leHBvcnQgKiBmcm9tICcuL0dhdWdlTm9kZUZpbHRlcic7XG5leHBvcnQgKiBmcm9tICcuL1JlZnJlc2hNYW5hZ2VyJztcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export class XYType {
2
+ constructor(x, y, r, name, id) {
3
+ this.x = x;
4
+ this.y = y;
5
+ this.r = r;
6
+ this.name = name;
7
+ this.id = id;
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHl0eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9zaGFyZWQveHl0eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxNQUFNO0lBQ2pCLFlBQW1CLENBQVMsRUFDVCxDQUFTLEVBQ1QsQ0FBVSxFQUNWLElBQWEsRUFDYixFQUFXO1FBSlgsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUNULE1BQUMsR0FBRCxDQUFDLENBQVE7UUFDVCxNQUFDLEdBQUQsQ0FBQyxDQUFTO1FBQ1YsU0FBSSxHQUFKLElBQUksQ0FBUztRQUNiLE9BQUUsR0FBRixFQUFFLENBQVM7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFhZVHlwZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIsXG4gICAgICAgICAgICAgIHB1YmxpYyB5OiBudW1iZXIsXG4gICAgICAgICAgICAgIHB1YmxpYyByPzogbnVtYmVyLFxuICAgICAgICAgICAgICBwdWJsaWMgbmFtZT86IHN0cmluZyxcbiAgICAgICAgICAgICAgcHVibGljIGlkPzogc3RyaW5nKSB7XG4gIH1cbn1cblxuIl19