@firestitch/system 18.0.42 → 18.0.43
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.
- package/app/modules/system/components/dashboard/dashboard.component.d.ts +28 -0
- package/app/modules/system/interfaces/index.d.ts +1 -0
- package/app/modules/system/interfaces/upgrade-event.d.ts +25 -0
- package/esm2022/app/modules/system/components/dashboard/dashboard.component.mjs +72 -5
- package/esm2022/app/modules/system/interfaces/index.mjs +2 -1
- package/esm2022/app/modules/system/interfaces/upgrade-event.mjs +2 -0
- package/esm2022/public_api.mjs +1 -1
- package/fesm2022/firestitch-system.mjs +69 -4
- package/fesm2022/firestitch-system.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -1
|
@@ -6,6 +6,7 @@ export declare class DashboardComponent implements OnInit, OnDestroy {
|
|
|
6
6
|
private _message;
|
|
7
7
|
private _cdRef;
|
|
8
8
|
private _buildService;
|
|
9
|
+
private _process;
|
|
9
10
|
init: () => any;
|
|
10
11
|
upgrade: () => any;
|
|
11
12
|
load: () => any;
|
|
@@ -19,7 +20,34 @@ export declare class DashboardComponent implements OnInit, OnDestroy {
|
|
|
19
20
|
ngOnDestroy(): void;
|
|
20
21
|
actionClick(action: any): void;
|
|
21
22
|
initClick(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Run the pending upgrades as a process rather than behind a spinner.
|
|
25
|
+
*
|
|
26
|
+
* A spinner says the same thing for ten seconds and for ten minutes, which is
|
|
27
|
+
* the whole problem: an upgrade that rebuilds the largest table in a schema
|
|
28
|
+
* looks exactly like one that has hung, and the only way anybody found out
|
|
29
|
+
* which was to wait for a proxy to give up.
|
|
30
|
+
*
|
|
31
|
+
* Works whether or not the application's endpoint streams. Where it does, each
|
|
32
|
+
* NDJSON event becomes a line in the process log — which function is running,
|
|
33
|
+
* how far through it is, what each one cost. Where it does not, the single
|
|
34
|
+
* reply produces no lines and the process is simply a labelled spinner, which
|
|
35
|
+
* is what every application had before this.
|
|
36
|
+
*/
|
|
22
37
|
upgradeClick(): void;
|
|
38
|
+
/**
|
|
39
|
+
* One emission off the upgrade endpoint, as a line for the process log — or
|
|
40
|
+
* null for anything with nothing to say, which is dropped rather than logged.
|
|
41
|
+
*
|
|
42
|
+
* `FsApi.stream()` wraps every NDJSON line in a `StreamEventData`, and
|
|
43
|
+
* `FsProcess` logs a string emission verbatim. So the mapping happens here: an
|
|
44
|
+
* object handed to the log renders as `[object Object]`.
|
|
45
|
+
*
|
|
46
|
+
* `ping` is deliberately silent. It is the heartbeat that stops a proxy
|
|
47
|
+
* closing a run that is still working, it fires after every statement, and it
|
|
48
|
+
* would bury the events worth reading.
|
|
49
|
+
*/
|
|
50
|
+
private _upgradeLine;
|
|
23
51
|
private _load;
|
|
24
52
|
static ɵfac: i0.ɵɵFactoryDeclaration<DashboardComponent, never>;
|
|
25
53
|
static ɵcmp: i0.ɵɵComponentDeclaration<DashboardComponent, "fs-system-dashboard", never, { "init": { "alias": "init"; "required": false; }; "upgrade": { "alias": "upgrade"; "required": false; }; "load": { "alias": "load"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, {}, never, never, true, never>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One NDJSON line off a streaming upgrade endpoint.
|
|
3
|
+
*
|
|
4
|
+
* The framework's system view streams these only when the caller asks for a
|
|
5
|
+
* stream, so an application that has not opted in emits an ordinary reply and
|
|
6
|
+
* none of this applies — see `DashboardComponent._upgradeLine()`, which treats
|
|
7
|
+
* anything unrecognised as having nothing to log.
|
|
8
|
+
*
|
|
9
|
+
* `start` arrives once with the full list of pending functions, because "working
|
|
10
|
+
* on 2 of 9" is only meaningful to somebody who was told there were 9. `upgrade`
|
|
11
|
+
* arrives twice per function, on either side of it, carrying what it cost.
|
|
12
|
+
* `ping` is the heartbeat and says nothing.
|
|
13
|
+
*/
|
|
14
|
+
export interface UpgradeEvent {
|
|
15
|
+
type: 'start' | 'upgrade' | 'log' | 'ping' | 'done';
|
|
16
|
+
state?: 'started' | 'completed' | 'failed';
|
|
17
|
+
name?: string;
|
|
18
|
+
index?: number;
|
|
19
|
+
total?: number;
|
|
20
|
+
completed?: number;
|
|
21
|
+
duration?: string;
|
|
22
|
+
seconds?: number;
|
|
23
|
+
message?: string;
|
|
24
|
+
functions?: string[];
|
|
25
|
+
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject } from '@angular/core';
|
|
2
|
+
import { StreamEventData } from '@firestitch/api';
|
|
2
3
|
import { FsBuildService } from '@firestitch/build';
|
|
3
4
|
import { FsMessage } from '@firestitch/message';
|
|
5
|
+
import { FsProcess, ProcessState } from '@firestitch/process';
|
|
4
6
|
import { Subject } from 'rxjs';
|
|
5
|
-
import { takeUntil } from 'rxjs/operators';
|
|
7
|
+
import { filter, map, take, takeUntil } from 'rxjs/operators';
|
|
6
8
|
import { differenceInMinutes } from 'date-fns';
|
|
7
9
|
import { FsSkeletonModule } from '@firestitch/skeleton';
|
|
8
10
|
import { FsLabelModule } from '@firestitch/label';
|
|
@@ -21,6 +23,7 @@ export class DashboardComponent {
|
|
|
21
23
|
_message = inject(FsMessage);
|
|
22
24
|
_cdRef = inject(ChangeDetectorRef);
|
|
23
25
|
_buildService = inject(FsBuildService);
|
|
26
|
+
_process = inject(FsProcess);
|
|
24
27
|
init;
|
|
25
28
|
upgrade;
|
|
26
29
|
load;
|
|
@@ -59,13 +62,77 @@ export class DashboardComponent {
|
|
|
59
62
|
this._message.success('Successfully initialized the system');
|
|
60
63
|
});
|
|
61
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Run the pending upgrades as a process rather than behind a spinner.
|
|
67
|
+
*
|
|
68
|
+
* A spinner says the same thing for ten seconds and for ten minutes, which is
|
|
69
|
+
* the whole problem: an upgrade that rebuilds the largest table in a schema
|
|
70
|
+
* looks exactly like one that has hung, and the only way anybody found out
|
|
71
|
+
* which was to wait for a proxy to give up.
|
|
72
|
+
*
|
|
73
|
+
* Works whether or not the application's endpoint streams. Where it does, each
|
|
74
|
+
* NDJSON event becomes a line in the process log — which function is running,
|
|
75
|
+
* how far through it is, what each one cost. Where it does not, the single
|
|
76
|
+
* reply produces no lines and the process is simply a labelled spinner, which
|
|
77
|
+
* is what every application had before this.
|
|
78
|
+
*/
|
|
62
79
|
upgradeClick() {
|
|
63
|
-
this.upgrade()
|
|
64
|
-
.
|
|
80
|
+
const process = this._process.run('System upgrade', this.upgrade()
|
|
81
|
+
.pipe(map((event) => this._upgradeLine(event)), filter((line) => line !== null)));
|
|
82
|
+
// The pending-upgrade count on this screen is the thing the button was
|
|
83
|
+
// pressed to change, so it is re-read when the run settles — including when
|
|
84
|
+
// it FAILS, because a run that stopped halfway still completed everything
|
|
85
|
+
// before the one that broke.
|
|
86
|
+
process.completed$
|
|
87
|
+
.pipe(take(1), takeUntil(this._destroy$))
|
|
88
|
+
.subscribe((state) => {
|
|
65
89
|
this._load();
|
|
66
|
-
|
|
90
|
+
if (state === ProcessState.Success) {
|
|
91
|
+
this._message.success('Successfully upgraded the system');
|
|
92
|
+
}
|
|
67
93
|
});
|
|
68
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* One emission off the upgrade endpoint, as a line for the process log — or
|
|
97
|
+
* null for anything with nothing to say, which is dropped rather than logged.
|
|
98
|
+
*
|
|
99
|
+
* `FsApi.stream()` wraps every NDJSON line in a `StreamEventData`, and
|
|
100
|
+
* `FsProcess` logs a string emission verbatim. So the mapping happens here: an
|
|
101
|
+
* object handed to the log renders as `[object Object]`.
|
|
102
|
+
*
|
|
103
|
+
* `ping` is deliberately silent. It is the heartbeat that stops a proxy
|
|
104
|
+
* closing a run that is still working, it fires after every statement, and it
|
|
105
|
+
* would bury the events worth reading.
|
|
106
|
+
*/
|
|
107
|
+
_upgradeLine(event) {
|
|
108
|
+
const data = (event instanceof StreamEventData ? event.data : event);
|
|
109
|
+
if (typeof data === 'string') {
|
|
110
|
+
return data;
|
|
111
|
+
}
|
|
112
|
+
if (!data || !data.type || data.type === 'ping') {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const step = `${data.index} of ${data.total}`;
|
|
116
|
+
switch (data.type) {
|
|
117
|
+
case 'start':
|
|
118
|
+
return data.total
|
|
119
|
+
? `${data.total} upgrade(s) to run: ${(data.functions || []).join(', ')}`
|
|
120
|
+
: 'Nothing to upgrade';
|
|
121
|
+
case 'upgrade':
|
|
122
|
+
if (data.state === 'started') {
|
|
123
|
+
return `${step} ${data.name}…`;
|
|
124
|
+
}
|
|
125
|
+
return data.state === 'completed'
|
|
126
|
+
? `${step} ${data.name} — ${data.duration}`
|
|
127
|
+
: `${step} ${data.name} FAILED — ${data.message}`;
|
|
128
|
+
case 'done':
|
|
129
|
+
return data.completed
|
|
130
|
+
? `Completed ${data.completed} upgrade(s)`
|
|
131
|
+
: 'Nothing to upgrade';
|
|
132
|
+
default:
|
|
133
|
+
return data.message || null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
69
136
|
_load() {
|
|
70
137
|
this.load()
|
|
71
138
|
.subscribe((dashboard) => {
|
|
@@ -99,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
99
166
|
}], actions: [{
|
|
100
167
|
type: Input
|
|
101
168
|
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFhLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVks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QWtCLCtKQ3RDL0Isc3dJQXlLTSw4a0JEN0lFLGdCQUFnQixpS0FDaEIsYUFBYSxnUkFDYixPQUFPLG9GQUNQLE9BQU8sMklBQ1AsVUFBVSxpUkFDVixTQUFTLGdMQUNULFlBQVksaVNBQ1osWUFBWTs7MkZBR1Asa0JBQWtCO2tCQWpCOUIsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ0wsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixZQUFZO3FCQUNmOzhCQVFhLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUVVLE9BQU87c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQnVpbGREYXRhLCBGc0J1aWxkU2VydmljZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2J1aWxkJztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1pbnV0ZXMgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IERhc2hib2FyZEFjdGlvbiB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9kYXNoYm9hcmQtYWN0aW9uJztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQgeyBGc0xhYmVsTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGFiZWwnO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgRnNNZW51TW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVudSc7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLXN5c3RlbS1kYXNoYm9hcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Rhc2hib2FyZC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBGc1NrZWxldG9uTW9kdWxlLFxuICAgICAgICBGc0xhYmVsTW9kdWxlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBNYXRJY29uLFxuICAgICAgICBNYXRUb29sdGlwLFxuICAgICAgICBNYXRCdXR0b24sXG4gICAgICAgIEZzTWVudU1vZHVsZSxcbiAgICAgICAgRnNEYXRlTW9kdWxlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgX2J1aWxkU2VydmljZSA9IGluamVjdChGc0J1aWxkU2VydmljZSk7XG5cblxuICBASW5wdXQoKSBwdWJsaWMgaW5pdDogKCkgPT4gYW55O1xuICBASW5wdXQoKSBwdWJsaWMgdXBncmFkZTogKCkgPT4gYW55O1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZDogKCkgPT4gYW55O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25zOiBEYXNoYm9hcmRBY3Rpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBkYXNoYm9hcmQ7XG4gIHB1YmxpYyBidXR0b25BY3Rpb25zOiBEYXNoYm9hcmRBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYnVpbGQ6IEJ1aWxkRGF0YTtcbiAgcHVibGljIG1lbnVBY3Rpb25zOiBEYXNoYm9hcmRBY3Rpb25bXSA9IFtdO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fbG9hZCgpO1xuICAgIHRoaXMuYnV0dG9uQWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiAhaXRlbS5tZW51OyBcbiAgICB9KTtcbiAgICB0aGlzLm1lbnVBY3Rpb25zID0gdGhpcy5hY3Rpb25zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIGl0ZW0ubWVudTsgXG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkID0gdGhpcy5fYnVpbGRTZXJ2aWNlLmJ1aWxkO1xuICAgIHRoaXMuX2J1aWxkU2VydmljZS5idWlsZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoYnVpbGQ6IEJ1aWxkRGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmJ1aWxkID0gYnVpbGQ7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGFjdGlvbkNsaWNrKGFjdGlvbikge1xuICAgIGFjdGlvbi5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGluaXRDbGljaygpIHtcbiAgICB0aGlzLmluaXQoKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIHRoZSBzeXN0ZW0nKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZ3JhZGVDbGljaygpIHtcbiAgICB0aGlzLnVwZ3JhZGUoKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvYWQoKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgdXBncmFkZWQgdGhlIHN5c3RlbScpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkKCkge1xuICAgIHRoaXMubG9hZCgpXG4gICAgICAuc3Vic2NyaWJlKChkYXNoYm9hcmQpID0+IHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQgPSBkYXNoYm9hcmQ7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLmNyb25SYW5BdHRlbnRpb24gPSAhZGFzaGJvYXJkLmNyb25SYW4gfHxcbiAgICAgICAgIGRpZmZlcmVuY2VJbk1pbnV0ZXMobmV3IERhdGUoKSwgbmV3IERhdGUoZGFzaGJvYXJkLmNyb25SYW4pKSA+IDE1O1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2ICpmc1NrZWxldG9uPVwiZGFzaGJvYXJkXCI+XG4gIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLWxnLndyYXAuYWxpZ24tc3RhcnRcIj5cbiAgICA8ZGl2PlxuICAgICAgPGgyPlxuICAgICAgICBTZXJ2ZXJcbiAgICAgIDwvaDI+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBEYXRlL1RpbWVcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgZGFzaGJvYXJkLnNlcnZlclRpbWUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnIH19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgVGltZXpvbmVcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgZGFzaGJvYXJkLnNlcnZlclRpbWV6b25lIH19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgSG9zdG5hbWVcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgZGFzaGJvYXJkLnNlcnZlckhvc3RuYW1lIH19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgRGlyZWN0b3J5XG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7IGRhc2hib2FyZC5hcHBEaXJlY3RvcnkgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgIDxoMj5cbiAgICAgICAgU3lzdGVtXG4gICAgICA8L2gyPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgTW9kZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7eyBkYXNoYm9hcmQuYXBwTW9kZSB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIE5vdGlmaWNhdGlvbiBSZWNpcGllbnRzXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7IGRhc2hib2FyZC5ub3RpZnlSZWNpcGllbnRzLmpvaW4oJywgJykgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgIDxoMj5cbiAgICAgICAgRGF0YWJhc2VcbiAgICAgIDwvaDI+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBOYW1lXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7IGRhc2hib2FyZC5kYXRhYmFzZU5hbWUgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBEYXRlL1RpbWVcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgZGFzaGJvYXJkLmRhdGFiYXNlVGltZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBUaW1lem9uZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7eyBkYXNoYm9hcmQuZGF0YWJhc2VUaW1lem9uZSB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKGJ1aWxkIHx8IGRhc2hib2FyZC51cGdyYWRlcy5sZW5ndGgpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAoYnVpbGQpIHtcbiAgICAgICAgICA8aDI+XG4gICAgICAgICAgICBCdWlsZFxuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICBWZXJzaW9uXG4gICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAge3sgYnVpbGQudmVyc2lvbiB8fCAnVW5rbm93bicgfX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgRGF0ZVxuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7IChidWlsZC5kYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJykgfHwgJ1Vua25vd24nIH19XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGRhc2hib2FyZC51cGdyYWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgIFBlbmRpbmcgVXBncmFkZXNcbiAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImF0dGVudGlvblwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ25lZWRzLWF0dGVudGlvbic6ICEhZGFzaGJvYXJkLnVwZ3JhZGVzLmxlbmd0aCB9XCI+XG4gICAgICAgICAgICAgIHt7IGRhc2hib2FyZC51cGdyYWRlcy5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZGFzaGJvYXJkLnVwZ3JhZGVzLmpvaW4oJ1xcbicpXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwLXBlbmRpbmctdXBncmFkZXNcIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXY+XG4gICAgICA8aDI+XG4gICAgICAgIENyb25cbiAgICAgIDwvaDI+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBMYXN0IFJhblxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiYXR0ZW50aW9uXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICduZWVkcy1hdHRlbnRpb24nOiBkYXNoYm9hcmQuY3JvblJhbkF0dGVudGlvbiB9XCI+XG4gICAgICAgICAgQGlmICghZGFzaGJvYXJkLmNyb25SYW4pIHtcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICBOZXZlclxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGRhc2hib2FyZC5jcm9uUmFuKSB7XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge3sgZGFzaGJvYXJkLmNyb25SYW4gfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cInVwZ3JhZGVDbGljaygpXCI+XG4gICAgICAgIFJ1biBVcGdyYWRlc1xuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwiaW5pdENsaWNrKClcIj5cbiAgICAgICAgSW5pdCBTeXN0ZW1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgQGZvciAoYWN0aW9uIG9mIGJ1dHRvbkFjdGlvbnM7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNsaWNrKGFjdGlvbilcIj5cbiAgICAgICAgICB7eyBhY3Rpb24ubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKG1lbnVBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICA8ZnMtbWVudSBidXR0b25DbGFzcz1cIm1hdC1zdHJva2VkLWJ1dHRvbiBtZW51LWJ1dHRvblwiPlxuICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBtZW51QWN0aW9uczsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25DbGljayhhY3Rpb24pXCI+XG4gICAgICAgICAgICAgIHt7IGFjdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZnMtbWVudT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBYSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFB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T0FBTywySUFDUCxVQUFVLGlSQUNWLFNBQVMsZ0xBQ1QsWUFBWSxpU0FDWixZQUFZOzsyRkFHUCxrQkFBa0I7a0JBakI5QixTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDTCxnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLFlBQVk7cUJBQ2Y7OEJBU2EsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBRVUsT0FBTztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdHJlYW1FdmVudERhdGEgfSBmcm9tICdAZmlyZXN0aXRjaC9hcGknO1xuaW1wb3J0IHsgQnVpbGREYXRhLCBGc0J1aWxkU2VydmljZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2J1aWxkJztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNQcm9jZXNzLCBQcm9jZXNzU3RhdGUgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9jZXNzJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgZGlmZmVyZW5jZUluTWludXRlcyB9IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9uIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2Rhc2hib2FyZC1hY3Rpb24nO1xuaW1wb3J0IHsgRnNTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NrZWxldG9uJztcbmltcG9ydCB7IEZzTGFiZWxNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9sYWJlbCc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcbmltcG9ydCB7IEZzRGF0ZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RhdGUnO1xuaW1wb3J0IHsgVXBncmFkZUV2ZW50IH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL3VwZ3JhZGUtZXZlbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZnMtc3lzdGVtLWRhc2hib2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZzU2tlbGV0b25Nb2R1bGUsXG4gICAgICAgIEZzTGFiZWxNb2R1bGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE1hdEljb24sXG4gICAgICAgIE1hdFRvb2x0aXAsXG4gICAgICAgIE1hdEJ1dHRvbixcbiAgICAgICAgRnNNZW51TW9kdWxlLFxuICAgICAgICBGc0RhdGVNb2R1bGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfYnVpbGRTZXJ2aWNlID0gaW5qZWN0KEZzQnVpbGRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuXG5cbiAgQElucHV0KCkgcHVibGljIGluaXQ6ICgpID0+IGFueTtcbiAgQElucHV0KCkgcHVibGljIHVwZ3JhZGU6ICgpID0+IGFueTtcbiAgQElucHV0KCkgcHVibGljIGxvYWQ6ICgpID0+IGFueTtcblxuICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uczogRGFzaGJvYXJkQWN0aW9uW10gPSBbXTtcblxuICBwdWJsaWMgZGFzaGJvYXJkO1xuICBwdWJsaWMgYnV0dG9uQWN0aW9uczogRGFzaGJvYXJkQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJ1aWxkOiBCdWlsZERhdGE7XG4gIHB1YmxpYyBtZW51QWN0aW9uczogRGFzaGJvYXJkQWN0aW9uW10gPSBbXTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2xvYWQoKTtcbiAgICB0aGlzLmJ1dHRvbkFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gIWl0ZW0ubWVudTsgXG4gICAgfSk7XG4gICAgdGhpcy5tZW51QWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiBpdGVtLm1lbnU7IFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZCA9IHRoaXMuX2J1aWxkU2VydmljZS5idWlsZDtcbiAgICB0aGlzLl9idWlsZFNlcnZpY2UuYnVpbGQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGJ1aWxkOiBCdWlsZERhdGEpID0+IHtcbiAgICAgICAgdGhpcy5idWlsZCA9IGJ1aWxkO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb25DbGljayhhY3Rpb24pIHtcbiAgICBhY3Rpb24uY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0Q2xpY2soKSB7XG4gICAgdGhpcy5pbml0KClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1N1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCB0aGUgc3lzdGVtJyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHBlbmRpbmcgdXBncmFkZXMgYXMgYSBwcm9jZXNzIHJhdGhlciB0aGFuIGJlaGluZCBhIHNwaW5uZXIuXG4gICAqXG4gICAqIEEgc3Bpbm5lciBzYXlzIHRoZSBzYW1lIHRoaW5nIGZvciB0ZW4gc2Vjb25kcyBhbmQgZm9yIHRlbiBtaW51dGVzLCB3aGljaCBpc1xuICAgKiB0aGUgd2hvbGUgcHJvYmxlbTogYW4gdXBncmFkZSB0aGF0IHJlYnVpbGRzIHRoZSBsYXJnZXN0IHRhYmxlIGluIGEgc2NoZW1hXG4gICAqIGxvb2tzIGV4YWN0bHkgbGlrZSBvbmUgdGhhdCBoYXMgaHVuZywgYW5kIHRoZSBvbmx5IHdheSBhbnlib2R5IGZvdW5kIG91dFxuICAgKiB3aGljaCB3YXMgdG8gd2FpdCBmb3IgYSBwcm94eSB0byBnaXZlIHVwLlxuICAgKlxuICAgKiBXb3JrcyB3aGV0aGVyIG9yIG5vdCB0aGUgYXBwbGljYXRpb24ncyBlbmRwb2ludCBzdHJlYW1zLiBXaGVyZSBpdCBkb2VzLCBlYWNoXG4gICAqIE5ESlNPTiBldmVudCBiZWNvbWVzIGEgbGluZSBpbiB0aGUgcHJvY2VzcyBsb2cg4oCUIHdoaWNoIGZ1bmN0aW9uIGlzIHJ1bm5pbmcsXG4gICAqIGhvdyBmYXIgdGhyb3VnaCBpdCBpcywgd2hhdCBlYWNoIG9uZSBjb3N0LiBXaGVyZSBpdCBkb2VzIG5vdCwgdGhlIHNpbmdsZVxuICAgKiByZXBseSBwcm9kdWNlcyBubyBsaW5lcyBhbmQgdGhlIHByb2Nlc3MgaXMgc2ltcGx5IGEgbGFiZWxsZWQgc3Bpbm5lciwgd2hpY2hcbiAgICogaXMgd2hhdCBldmVyeSBhcHBsaWNhdGlvbiBoYWQgYmVmb3JlIHRoaXMuXG4gICAqL1xuICBwdWJsaWMgdXBncmFkZUNsaWNrKCkge1xuICAgIGNvbnN0IHByb2Nlc3MgPSB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgICdTeXN0ZW0gdXBncmFkZScsXG4gICAgICB0aGlzLnVwZ3JhZGUoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGV2ZW50KSA9PiB0aGlzLl91cGdyYWRlTGluZShldmVudCkpLFxuICAgICAgICAgIGZpbHRlcigobGluZSk6IGxpbmUgaXMgc3RyaW5nID0+IGxpbmUgIT09IG51bGwpLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICAvLyBUaGUgcGVuZGluZy11cGdyYWRlIGNvdW50IG9uIHRoaXMgc2NyZWVuIGlzIHRoZSB0aGluZyB0aGUgYnV0dG9uIHdhc1xuICAgIC8vIHByZXNzZWQgdG8gY2hhbmdlLCBzbyBpdCBpcyByZS1yZWFkIHdoZW4gdGhlIHJ1biBzZXR0bGVzIOKAlCBpbmNsdWRpbmcgd2hlblxuICAgIC8vIGl0IEZBSUxTLCBiZWNhdXNlIGEgcnVuIHRoYXQgc3RvcHBlZCBoYWxmd2F5IHN0aWxsIGNvbXBsZXRlZCBldmVyeXRoaW5nXG4gICAgLy8gYmVmb3JlIHRoZSBvbmUgdGhhdCBicm9rZS5cbiAgICBwcm9jZXNzLmNvbXBsZXRlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IFByb2Nlc3NTdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkKCk7XG5cbiAgICAgICAgaWYgKHN0YXRlID09PSBQcm9jZXNzU3RhdGUuU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU3VjY2Vzc2Z1bGx5IHVwZ3JhZGVkIHRoZSBzeXN0ZW0nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT25lIGVtaXNzaW9uIG9mZiB0aGUgdXBncmFkZSBlbmRwb2ludCwgYXMgYSBsaW5lIGZvciB0aGUgcHJvY2VzcyBsb2cg4oCUIG9yXG4gICAqIG51bGwgZm9yIGFueXRoaW5nIHdpdGggbm90aGluZyB0byBzYXksIHdoaWNoIGlzIGRyb3BwZWQgcmF0aGVyIHRoYW4gbG9nZ2VkLlxuICAgKlxuICAgKiBgRnNBcGkuc3RyZWFtKClgIHdyYXBzIGV2ZXJ5IE5ESlNPTiBsaW5lIGluIGEgYFN0cmVhbUV2ZW50RGF0YWAsIGFuZFxuICAgKiBgRnNQcm9jZXNzYCBsb2dzIGEgc3RyaW5nIGVtaXNzaW9uIHZlcmJhdGltLiBTbyB0aGUgbWFwcGluZyBoYXBwZW5zIGhlcmU6IGFuXG4gICAqIG9iamVjdCBoYW5kZWQgdG8gdGhlIGxvZyByZW5kZXJzIGFzIGBbb2JqZWN0IE9iamVjdF1gLlxuICAgKlxuICAgKiBgcGluZ2AgaXMgZGVsaWJlcmF0ZWx5IHNpbGVudC4gSXQgaXMgdGhlIGhlYXJ0YmVhdCB0aGF0IHN0b3BzIGEgcHJveHlcbiAgICogY2xvc2luZyBhIHJ1biB0aGF0IGlzIHN0aWxsIHdvcmtpbmcsIGl0IGZpcmVzIGFmdGVyIGV2ZXJ5IHN0YXRlbWVudCwgYW5kIGl0XG4gICAqIHdvdWxkIGJ1cnkgdGhlIGV2ZW50cyB3b3J0aCByZWFkaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBncmFkZUxpbmUoZXZlbnQ6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBkYXRhOiBVcGdyYWRlRXZlbnQgPSAoZXZlbnQgaW5zdGFuY2VvZiBTdHJlYW1FdmVudERhdGEgPyBldmVudC5kYXRhIDogZXZlbnQpIGFzIFVwZ3JhZGVFdmVudDtcblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICghZGF0YSB8fCAhZGF0YS50eXBlIHx8IGRhdGEudHlwZSA9PT0gJ3BpbmcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwID0gYCR7ZGF0YS5pbmRleH0gb2YgJHtkYXRhLnRvdGFsfWA7XG5cbiAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gZGF0YS50b3RhbFxuICAgICAgICAgID8gYCR7ZGF0YS50b3RhbH0gdXBncmFkZShzKSB0byBydW46ICR7KGRhdGEuZnVuY3Rpb25zIHx8IFtdKS5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICdOb3RoaW5nIHRvIHVwZ3JhZGUnO1xuXG4gICAgICBjYXNlICd1cGdyYWRlJzpcbiAgICAgICAgaWYgKGRhdGEuc3RhdGUgPT09ICdzdGFydGVkJykge1xuICAgICAgICAgIHJldHVybiBgJHtzdGVwfSAke2RhdGEubmFtZX3igKZgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGEuc3RhdGUgPT09ICdjb21wbGV0ZWQnXG4gICAgICAgICAgPyBgJHtzdGVwfSAke2RhdGEubmFtZX0g4oCUICR7ZGF0YS5kdXJhdGlvbn1gXG4gICAgICAgICAgOiBgJHtzdGVwfSAke2RhdGEubmFtZX0gRkFJTEVEIOKAlCAke2RhdGEubWVzc2FnZX1gO1xuXG4gICAgICBjYXNlICdkb25lJzpcbiAgICAgICAgcmV0dXJuIGRhdGEuY29tcGxldGVkXG4gICAgICAgICAgPyBgQ29tcGxldGVkICR7ZGF0YS5jb21wbGV0ZWR9IHVwZ3JhZGUocylgXG4gICAgICAgICAgOiAnTm90aGluZyB0byB1cGdyYWRlJztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRhdGEubWVzc2FnZSB8fCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xvYWQoKSB7XG4gICAgdGhpcy5sb2FkKClcbiAgICAgIC5zdWJzY3JpYmUoKGRhc2hib2FyZCkgPT4ge1xuICAgICAgICB0aGlzLmRhc2hib2FyZCA9IGRhc2hib2FyZDtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQuY3JvblJhbkF0dGVudGlvbiA9ICFkYXNoYm9hcmQuY3JvblJhbiB8fFxuICAgICAgICAgZGlmZmVyZW5jZUluTWludXRlcyhuZXcgRGF0ZSgpLCBuZXcgRGF0ZShkYXNoYm9hcmQuY3JvblJhbikpID4gMTU7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgKmZzU2tlbGV0b249XCJkYXNoYm9hcmRcIj5cbiAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtbGcud3JhcC5hbGlnbi1zdGFydFwiPlxuICAgIDxkaXY+XG4gICAgICA8aDI+XG4gICAgICAgIFNlcnZlclxuICAgICAgPC9oMj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIERhdGUvVGltZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7eyBkYXNoYm9hcmQuc2VydmVyVGltZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBUaW1lem9uZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7eyBkYXNoYm9hcmQuc2VydmVyVGltZXpvbmUgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBIb3N0bmFtZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7eyBkYXNoYm9hcmQuc2VydmVySG9zdG5hbWUgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBEaXJlY3RvcnlcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgZGFzaGJvYXJkLmFwcERpcmVjdG9yeSB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGgyPlxuICAgICAgICBTeXN0ZW1cbiAgICAgIDwvaDI+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBNb2RlXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7IGRhc2hib2FyZC5hcHBNb2RlIH19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgTm90aWZpY2F0aW9uIFJlY2lwaWVudHNcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgZGFzaGJvYXJkLm5vdGlmeVJlY2lwaWVudHMuam9pbignLCAnKSB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGgyPlxuICAgICAgICBEYXRhYmFzZVxuICAgICAgPC9oMj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIE5hbWVcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgZGFzaGJvYXJkLmRhdGFiYXNlTmFtZSB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIERhdGUvVGltZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7eyBkYXNoYm9hcmQuZGF0YWJhc2VUaW1lIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJyB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIFRpbWV6b25lXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7IGRhc2hib2FyZC5kYXRhYmFzZVRpbWV6b25lIH19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIEBpZiAoYnVpbGQgfHwgZGFzaGJvYXJkLnVwZ3JhZGVzLmxlbmd0aCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgQGlmIChidWlsZCkge1xuICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgIEJ1aWxkXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgIFZlcnNpb25cbiAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICB7eyBidWlsZC52ZXJzaW9uIHx8ICdVbmtub3duJyB9fVxuICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICBEYXRlXG4gICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAge3sgKGJ1aWxkLmRhdGUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnKSB8fCAnVW5rbm93bicgfX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZGFzaGJvYXJkLnVwZ3JhZGVzLmxlbmd0aCkge1xuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgUGVuZGluZyBVcGdyYWRlc1xuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXR0ZW50aW9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbmVlZHMtYXR0ZW50aW9uJzogISFkYXNoYm9hcmQudXBncmFkZXMubGVuZ3RoIH1cIj5cbiAgICAgICAgICAgICAge3sgZGFzaGJvYXJkLnVwZ3JhZGVzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJkYXNoYm9hcmQudXBncmFkZXMuam9pbignXFxuJylcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXAtcGVuZGluZy11cGdyYWRlc1wiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdj5cbiAgICAgIDxoMj5cbiAgICAgICAgQ3JvblxuICAgICAgPC9oMj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIExhc3QgUmFuXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJhdHRlbnRpb25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ25lZWRzLWF0dGVudGlvbic6IGRhc2hib2FyZC5jcm9uUmFuQXR0ZW50aW9uIH1cIj5cbiAgICAgICAgICBAaWYgKCFkYXNoYm9hcmQuY3JvblJhbikge1xuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIE5ldmVyXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZGFzaGJvYXJkLmNyb25SYW4pIHtcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7eyBkYXNoYm9hcmQuY3JvblJhbiB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwidXBncmFkZUNsaWNrKClcIj5cbiAgICAgICAgUnVuIFVwZ3JhZGVzXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJpbml0Q2xpY2soKVwiPlxuICAgICAgICBJbml0IFN5c3RlbVxuICAgICAgPC9idXR0b24+XG4gICAgICBAZm9yIChhY3Rpb24gb2YgYnV0dG9uQWN0aW9uczsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQ2xpY2soYWN0aW9uKVwiPlxuICAgICAgICAgIHt7IGFjdGlvbi5sYWJlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIEBpZiAobWVudUFjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIDxmcy1tZW51IGJ1dHRvbkNsYXNzPVwibWF0LXN0cm9rZWQtYnV0dG9uIG1lbnUtYnV0dG9uXCI+XG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIG1lbnVBY3Rpb25zOyB0cmFjayBhY3Rpb24pIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNsaWNrKGFjdGlvbilcIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9mcy1tZW51PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
@@ -2,4 +2,5 @@ export * from './dashboard-action';
|
|
|
2
2
|
export * from './process-action';
|
|
3
3
|
export * from './process';
|
|
4
4
|
export * from './system-config';
|
|
5
|
-
|
|
5
|
+
export * from './upgrade-event';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGFzaGJvYXJkLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3Byb2Nlc3MtYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvY2Vzcyc7XG5leHBvcnQgKiBmcm9tICcuL3N5c3RlbS1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi91cGdyYWRlLWV2ZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vaW50ZXJmYWNlcy91cGdyYWRlLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9uZSBOREpTT04gbGluZSBvZmYgYSBzdHJlYW1pbmcgdXBncmFkZSBlbmRwb2ludC5cbiAqXG4gKiBUaGUgZnJhbWV3b3JrJ3Mgc3lzdGVtIHZpZXcgc3RyZWFtcyB0aGVzZSBvbmx5IHdoZW4gdGhlIGNhbGxlciBhc2tzIGZvciBhXG4gKiBzdHJlYW0sIHNvIGFuIGFwcGxpY2F0aW9uIHRoYXQgaGFzIG5vdCBvcHRlZCBpbiBlbWl0cyBhbiBvcmRpbmFyeSByZXBseSBhbmRcbiAqIG5vbmUgb2YgdGhpcyBhcHBsaWVzIOKAlCBzZWUgYERhc2hib2FyZENvbXBvbmVudC5fdXBncmFkZUxpbmUoKWAsIHdoaWNoIHRyZWF0c1xuICogYW55dGhpbmcgdW5yZWNvZ25pc2VkIGFzIGhhdmluZyBub3RoaW5nIHRvIGxvZy5cbiAqXG4gKiBgc3RhcnRgIGFycml2ZXMgb25jZSB3aXRoIHRoZSBmdWxsIGxpc3Qgb2YgcGVuZGluZyBmdW5jdGlvbnMsIGJlY2F1c2UgXCJ3b3JraW5nXG4gKiBvbiAyIG9mIDlcIiBpcyBvbmx5IG1lYW5pbmdmdWwgdG8gc29tZWJvZHkgd2hvIHdhcyB0b2xkIHRoZXJlIHdlcmUgOS4gYHVwZ3JhZGVgXG4gKiBhcnJpdmVzIHR3aWNlIHBlciBmdW5jdGlvbiwgb24gZWl0aGVyIHNpZGUgb2YgaXQsIGNhcnJ5aW5nIHdoYXQgaXQgY29zdC5cbiAqIGBwaW5nYCBpcyB0aGUgaGVhcnRiZWF0IGFuZCBzYXlzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBncmFkZUV2ZW50IHtcbiAgdHlwZTogJ3N0YXJ0JyB8ICd1cGdyYWRlJyB8ICdsb2cnIHwgJ3BpbmcnIHwgJ2RvbmUnO1xuICBzdGF0ZT86ICdzdGFydGVkJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGluZGV4PzogbnVtYmVyO1xuICB0b3RhbD86IG51bWJlcjtcbiAgY29tcGxldGVkPzogbnVtYmVyO1xuICBkdXJhdGlvbj86IHN0cmluZztcbiAgc2Vjb25kcz86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgZnVuY3Rpb25zPzogc3RyaW5nW107XG59XG4iXX0=
|
package/esm2022/public_api.mjs
CHANGED
|
@@ -17,4 +17,4 @@ export { LinkifyPipe } from './app/modules/system/pipes/linkify.pipe';
|
|
|
17
17
|
export { ApiLogStates, CronStates, ProcessStates } from './app/modules/system/consts';
|
|
18
18
|
export { ApiLogState, CronState, ProcessState } from './app/modules/system/enums';
|
|
19
19
|
export { FS_SYSTEM_CONFIG } from './app/modules/system/injectors/system-config.injector';
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSWxGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgeyBGc1N5c3RlbU1vZHVsZSB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2ZzLXN5c3RlbS5tb2R1bGUnO1xuXG5leHBvcnQgeyBRdWVyeUxvZ3NDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL3F1ZXJ5LWxvZ3MvY29tcG9uZW50cyc7XG5leHBvcnQgeyBBcGlMb2dDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL2FwaS1sb2cnO1xuZXhwb3J0IHsgQXBpTG9nc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvYXBpLWxvZ3MnO1xuZXhwb3J0IHsgQ3JvbkNvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3Jvbic7XG5leHBvcnQgeyBDcm9uTG9nQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9jcm9uLWxvZyc7XG5leHBvcnQgeyBDcm9uc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3JvbnMnO1xuZXhwb3J0IHsgRGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9kYXNoYm9hcmQnO1xuZXhwb3J0IHsgSW5mb0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvaW5mbyc7XG5leHBvcnQgeyBQcm9jZXNzQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzJztcbmV4cG9ydCB7IFByb2Nlc3Nlc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvcHJvY2Vzc2VzJztcbmV4cG9ydCB7IFNlcnZlckxvZ3NDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL3NlcnZlci1sb2dzJztcbmV4cG9ydCB7IFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9zZXR0aW5ncyc7XG5leHBvcnQgeyBVcGdyYWRlTG9nc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvdXBncmFkZS1sb2dzJztcbmV4cG9ydCB7IEtleU5hbWVWYWx1ZVBpcGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL3N5c3RlbS9waXBlcy9rZXktbmFtZS12YWx1ZS5waXBlJztcbmV4cG9ydCB7IExpbmtpZnlQaXBlIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9zeXN0ZW0vcGlwZXMvbGlua2lmeS5waXBlJztcblxuZXhwb3J0IHsgQXBpTG9nU3RhdGVzLCBDcm9uU3RhdGVzLCBQcm9jZXNzU3RhdGVzIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9zeXN0ZW0vY29uc3RzJztcbmV4cG9ydCB7IEFwaUxvZ1N0YXRlLCBDcm9uU3RhdGUsIFByb2Nlc3NTdGF0ZSB9IGZyb20gJy4vYXBwL21vZHVsZXMvc3lzdGVtL2VudW1zJztcblxuZXhwb3J0IHsgRGFzaGJvYXJkQWN0aW9uLCBGc1N5c3RlbUNvbmZpZywgUHJvY2Vzc0FjdGlvbiwgVXBncmFkZUV2ZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9zeXN0ZW0vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7IEZTX1NZU1RFTV9DT05GSUcgfSBmcm9tICcuL2FwcC9tb2R1bGVzL3N5c3RlbS9pbmplY3RvcnMvc3lzdGVtLWNvbmZpZy5pbmplY3Rvcic7XG4iXX0=
|
|
@@ -47,7 +47,7 @@ import { FsApi, RequestMethod, StreamEventData, StreamEventType } from '@firesti
|
|
|
47
47
|
import { Subject, timer, Observable } from 'rxjs';
|
|
48
48
|
import { addMinutes, addHours, addDays, subSeconds, differenceInSeconds, getDaysInMonth, differenceInMinutes } from 'date-fns';
|
|
49
49
|
import { FsMessage } from '@firestitch/message';
|
|
50
|
-
import { FsProcess } from '@firestitch/process';
|
|
50
|
+
import { FsProcess, ProcessState as ProcessState$1 } from '@firestitch/process';
|
|
51
51
|
import { FsPrompt } from '@firestitch/prompt';
|
|
52
52
|
import { SelectionActionType } from '@firestitch/selection';
|
|
53
53
|
import { FsBuildService } from '@firestitch/build';
|
|
@@ -848,6 +848,7 @@ class DashboardComponent {
|
|
|
848
848
|
_message = inject(FsMessage);
|
|
849
849
|
_cdRef = inject(ChangeDetectorRef);
|
|
850
850
|
_buildService = inject(FsBuildService);
|
|
851
|
+
_process = inject(FsProcess);
|
|
851
852
|
init;
|
|
852
853
|
upgrade;
|
|
853
854
|
load;
|
|
@@ -886,13 +887,77 @@ class DashboardComponent {
|
|
|
886
887
|
this._message.success('Successfully initialized the system');
|
|
887
888
|
});
|
|
888
889
|
}
|
|
890
|
+
/**
|
|
891
|
+
* Run the pending upgrades as a process rather than behind a spinner.
|
|
892
|
+
*
|
|
893
|
+
* A spinner says the same thing for ten seconds and for ten minutes, which is
|
|
894
|
+
* the whole problem: an upgrade that rebuilds the largest table in a schema
|
|
895
|
+
* looks exactly like one that has hung, and the only way anybody found out
|
|
896
|
+
* which was to wait for a proxy to give up.
|
|
897
|
+
*
|
|
898
|
+
* Works whether or not the application's endpoint streams. Where it does, each
|
|
899
|
+
* NDJSON event becomes a line in the process log — which function is running,
|
|
900
|
+
* how far through it is, what each one cost. Where it does not, the single
|
|
901
|
+
* reply produces no lines and the process is simply a labelled spinner, which
|
|
902
|
+
* is what every application had before this.
|
|
903
|
+
*/
|
|
889
904
|
upgradeClick() {
|
|
890
|
-
this.upgrade()
|
|
891
|
-
.
|
|
905
|
+
const process = this._process.run('System upgrade', this.upgrade()
|
|
906
|
+
.pipe(map((event) => this._upgradeLine(event)), filter((line) => line !== null)));
|
|
907
|
+
// The pending-upgrade count on this screen is the thing the button was
|
|
908
|
+
// pressed to change, so it is re-read when the run settles — including when
|
|
909
|
+
// it FAILS, because a run that stopped halfway still completed everything
|
|
910
|
+
// before the one that broke.
|
|
911
|
+
process.completed$
|
|
912
|
+
.pipe(take(1), takeUntil(this._destroy$))
|
|
913
|
+
.subscribe((state) => {
|
|
892
914
|
this._load();
|
|
893
|
-
|
|
915
|
+
if (state === ProcessState$1.Success) {
|
|
916
|
+
this._message.success('Successfully upgraded the system');
|
|
917
|
+
}
|
|
894
918
|
});
|
|
895
919
|
}
|
|
920
|
+
/**
|
|
921
|
+
* One emission off the upgrade endpoint, as a line for the process log — or
|
|
922
|
+
* null for anything with nothing to say, which is dropped rather than logged.
|
|
923
|
+
*
|
|
924
|
+
* `FsApi.stream()` wraps every NDJSON line in a `StreamEventData`, and
|
|
925
|
+
* `FsProcess` logs a string emission verbatim. So the mapping happens here: an
|
|
926
|
+
* object handed to the log renders as `[object Object]`.
|
|
927
|
+
*
|
|
928
|
+
* `ping` is deliberately silent. It is the heartbeat that stops a proxy
|
|
929
|
+
* closing a run that is still working, it fires after every statement, and it
|
|
930
|
+
* would bury the events worth reading.
|
|
931
|
+
*/
|
|
932
|
+
_upgradeLine(event) {
|
|
933
|
+
const data = (event instanceof StreamEventData ? event.data : event);
|
|
934
|
+
if (typeof data === 'string') {
|
|
935
|
+
return data;
|
|
936
|
+
}
|
|
937
|
+
if (!data || !data.type || data.type === 'ping') {
|
|
938
|
+
return null;
|
|
939
|
+
}
|
|
940
|
+
const step = `${data.index} of ${data.total}`;
|
|
941
|
+
switch (data.type) {
|
|
942
|
+
case 'start':
|
|
943
|
+
return data.total
|
|
944
|
+
? `${data.total} upgrade(s) to run: ${(data.functions || []).join(', ')}`
|
|
945
|
+
: 'Nothing to upgrade';
|
|
946
|
+
case 'upgrade':
|
|
947
|
+
if (data.state === 'started') {
|
|
948
|
+
return `${step} ${data.name}…`;
|
|
949
|
+
}
|
|
950
|
+
return data.state === 'completed'
|
|
951
|
+
? `${step} ${data.name} — ${data.duration}`
|
|
952
|
+
: `${step} ${data.name} FAILED — ${data.message}`;
|
|
953
|
+
case 'done':
|
|
954
|
+
return data.completed
|
|
955
|
+
? `Completed ${data.completed} upgrade(s)`
|
|
956
|
+
: 'Nothing to upgrade';
|
|
957
|
+
default:
|
|
958
|
+
return data.message || null;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
896
961
|
_load() {
|
|
897
962
|
this.load()
|
|
898
963
|
.subscribe((dashboard) => {
|