@firestitch/system 18.0.26 → 18.0.28
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/process/process.component.d.ts +5 -1
- package/app/modules/system/components/processes/processes.component.d.ts +5 -1
- package/esm2022/app/modules/system/components/process/process.component.mjs +31 -29
- package/esm2022/app/modules/system/components/processes/processes.component.mjs +42 -23
- package/fesm2022/firestitch-system.mjs +79 -65
- package/fesm2022/firestitch-system.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { FsApi } from '@firestitch/api';
|
|
2
3
|
import { FsMessage } from '@firestitch/message';
|
|
4
|
+
import { FsProcess } from '@firestitch/process';
|
|
3
5
|
import { FsPrompt } from '@firestitch/prompt';
|
|
4
6
|
import { Observable } from 'rxjs';
|
|
5
7
|
import { Process } from '../../interfaces';
|
|
@@ -12,6 +14,8 @@ export declare class ProcessComponent implements OnInit, OnDestroy {
|
|
|
12
14
|
private _message;
|
|
13
15
|
private _cdRef;
|
|
14
16
|
private _prompt;
|
|
17
|
+
private _process;
|
|
18
|
+
private _api;
|
|
15
19
|
process: Process;
|
|
16
20
|
ProcessStates: {};
|
|
17
21
|
ProcessProcessStates: {};
|
|
@@ -20,7 +24,7 @@ export declare class ProcessComponent implements OnInit, OnDestroy {
|
|
|
20
24
|
private _processData;
|
|
21
25
|
constructor(data: {
|
|
22
26
|
process: any;
|
|
23
|
-
}, _message: FsMessage, _cdRef: ChangeDetectorRef, _prompt: FsPrompt);
|
|
27
|
+
}, _message: FsMessage, _cdRef: ChangeDetectorRef, _prompt: FsPrompt, _process: FsProcess, _api: FsApi);
|
|
24
28
|
ngOnInit(): void;
|
|
25
29
|
load$(): Observable<any>;
|
|
26
30
|
runningRefresh(): void;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
+
import { FsApi } from '@firestitch/api';
|
|
3
4
|
import { FsListComponent, FsListConfig } from '@firestitch/list';
|
|
4
5
|
import { FsMessage } from '@firestitch/message';
|
|
6
|
+
import { FsProcess } from '@firestitch/process';
|
|
5
7
|
import { ProcessState } from '../../enums';
|
|
6
8
|
import { ProcessAction } from './../../interfaces/process-action';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
export declare class ProcessesComponent implements OnInit, OnDestroy {
|
|
9
11
|
private _dialog;
|
|
10
12
|
private _message;
|
|
13
|
+
private _process;
|
|
14
|
+
private _api;
|
|
11
15
|
list: FsListComponent;
|
|
12
16
|
actions: ProcessAction[];
|
|
13
17
|
config: FsListConfig;
|
|
@@ -15,7 +19,7 @@ export declare class ProcessesComponent implements OnInit, OnDestroy {
|
|
|
15
19
|
ProcessState: typeof ProcessState;
|
|
16
20
|
private _destroy$;
|
|
17
21
|
private _processData;
|
|
18
|
-
constructor(_dialog: MatDialog, _message: FsMessage);
|
|
22
|
+
constructor(_dialog: MatDialog, _message: FsMessage, _process: FsProcess, _api: FsApi);
|
|
19
23
|
ngOnInit(): void;
|
|
20
24
|
reload(): void;
|
|
21
25
|
open(process: any): void;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Inject, } from '@angular/core';
|
|
2
2
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import { FsApi, RequestMethod, StreamEventData, StreamEventType } from '@firestitch/api';
|
|
3
4
|
import { FsMessage } from '@firestitch/message';
|
|
5
|
+
import { FsProcess } from '@firestitch/process';
|
|
4
6
|
import { FsPrompt } from '@firestitch/prompt';
|
|
5
7
|
import { Subject, timer } from 'rxjs';
|
|
6
|
-
import { filter, switchMap, takeUntil, tap } from 'rxjs/operators';
|
|
7
|
-
import { HttpEventType } from '@angular/common/http';
|
|
8
|
+
import { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
|
|
8
9
|
import { ProcessProcessStates } from '../../consts';
|
|
9
10
|
import { ProcessData } from '../../data/process.data';
|
|
10
11
|
import { indexNameValue } from '../../helpers/index-name-value';
|
|
@@ -13,30 +14,36 @@ import { ProcessState } from './../../enums/process-state.enum';
|
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "@firestitch/message";
|
|
15
16
|
import * as i2 from "@firestitch/prompt";
|
|
16
|
-
import * as i3 from "@
|
|
17
|
-
import * as i4 from "@
|
|
18
|
-
import * as i5 from "@angular/
|
|
19
|
-
import * as i6 from "@angular/material/
|
|
20
|
-
import * as i7 from "@
|
|
21
|
-
import * as i8 from "@
|
|
22
|
-
import * as i9 from "@firestitch/
|
|
23
|
-
import * as i10 from "@firestitch/
|
|
17
|
+
import * as i3 from "@firestitch/process";
|
|
18
|
+
import * as i4 from "@firestitch/api";
|
|
19
|
+
import * as i5 from "@angular/common";
|
|
20
|
+
import * as i6 from "@angular/material/button";
|
|
21
|
+
import * as i7 from "@angular/material/dialog";
|
|
22
|
+
import * as i8 from "@angular/material/progress-spinner";
|
|
23
|
+
import * as i9 from "@firestitch/skeleton";
|
|
24
|
+
import * as i10 from "@firestitch/label";
|
|
25
|
+
import * as i11 from "@firestitch/dialog";
|
|
26
|
+
import * as i12 from "@firestitch/date";
|
|
24
27
|
export class ProcessComponent {
|
|
25
28
|
data;
|
|
26
29
|
_message;
|
|
27
30
|
_cdRef;
|
|
28
31
|
_prompt;
|
|
32
|
+
_process;
|
|
33
|
+
_api;
|
|
29
34
|
process;
|
|
30
35
|
ProcessStates = indexNameValue(ProcessStates);
|
|
31
36
|
ProcessProcessStates = indexNameValue(ProcessProcessStates);
|
|
32
37
|
ProcessState = ProcessState;
|
|
33
38
|
_destroy$ = new Subject();
|
|
34
39
|
_processData = inject(ProcessData);
|
|
35
|
-
constructor(data, _message, _cdRef, _prompt) {
|
|
40
|
+
constructor(data, _message, _cdRef, _prompt, _process, _api) {
|
|
36
41
|
this.data = data;
|
|
37
42
|
this._message = _message;
|
|
38
43
|
this._cdRef = _cdRef;
|
|
39
44
|
this._prompt = _prompt;
|
|
45
|
+
this._process = _process;
|
|
46
|
+
this._api = _api;
|
|
40
47
|
}
|
|
41
48
|
ngOnInit() {
|
|
42
49
|
this.load$()
|
|
@@ -67,22 +74,17 @@ export class ProcessComponent {
|
|
|
67
74
|
});
|
|
68
75
|
}
|
|
69
76
|
run() {
|
|
70
|
-
this.
|
|
71
|
-
|
|
72
|
-
.
|
|
73
|
-
reportProgress: true,
|
|
74
|
-
})
|
|
77
|
+
this._process
|
|
78
|
+
.run(`Run ${this.process.name}`, this._api
|
|
79
|
+
.stream(RequestMethod.Post, `processes/${this.process.id}/run`)
|
|
75
80
|
.pipe(tap((event) => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
this.process.state = ProcessState.Running;
|
|
80
|
-
this._cdRef.markForCheck();
|
|
81
|
-
}
|
|
82
|
-
break;
|
|
81
|
+
if (event instanceof StreamEventData && event.type === StreamEventType.Sent) {
|
|
82
|
+
this.process.state = ProcessState.Running;
|
|
83
|
+
this._cdRef.markForCheck();
|
|
83
84
|
}
|
|
84
|
-
}))
|
|
85
|
-
|
|
85
|
+
}), filter((event) => event instanceof StreamEventData), map((event) => {
|
|
86
|
+
return event?.data;
|
|
87
|
+
}), filter((data) => !!data)));
|
|
86
88
|
}
|
|
87
89
|
queue() {
|
|
88
90
|
this._message.success('Running process');
|
|
@@ -97,8 +99,8 @@ export class ProcessComponent {
|
|
|
97
99
|
this._destroy$.next(null);
|
|
98
100
|
this._destroy$.complete();
|
|
99
101
|
}
|
|
100
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.FsMessage }, { token: i0.ChangeDetectorRef }, { token: i2.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
|
|
101
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProcessComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>\n Process\n </div>\n <mat-dialog-content>\n <div class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ process.prettyName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div\n class=\"status\"\n [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ ProcessStates[process.state] }}\n <ng-container *ngIf=\"process.state === ProcessState.Running\">\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n </ng-container>\n </div>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.notify\">\n <fs-label>\n Notification Email\n </fs-label>\n {{ process.notify }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n <ng-container *ngIf=\"process.pid\">\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n </ng-container>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.createDate\">\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.startDate\">\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.endDate\">\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.duration\">\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n </div>\n <fs-label-field *ngIf=\"process.message\">\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.log\">\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Close\n </button>\n <button\n *ngIf=\"process.state === ProcessState.Running\"\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n <button\n *ngIf=\"process.state !== ProcessState.Running\"\n mat-button\n (click)=\"run()\">\n Run\n </button>\n <button\n *ngIf=\"(\n process.state !== ProcessState.Running && \n process.state !== ProcessState.Queued\n )\"\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n <button\n *ngIf=\"process.filename\"\n mat-button\n (click)=\"download()\">\n Download\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\n"], dependencies: [{ kind: "directive", type:
|
|
102
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.FsMessage }, { token: i0.ChangeDetectorRef }, { token: i2.FsPrompt }, { token: i3.FsProcess }, { token: i4.FsApi }], target: i0.ɵɵFactoryTarget.Component });
|
|
103
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProcessComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>\n Process\n </div>\n <mat-dialog-content>\n <div class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ process.prettyName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div\n class=\"status\"\n [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ ProcessStates[process.state] }}\n <ng-container *ngIf=\"process.state === ProcessState.Running\">\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n </ng-container>\n </div>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.notify\">\n <fs-label>\n Notification Email\n </fs-label>\n {{ process.notify }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n <ng-container *ngIf=\"process.pid\">\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n </ng-container>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.createDate\">\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.startDate\">\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.endDate\">\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.duration\">\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n </div>\n <fs-label-field *ngIf=\"process.message\">\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.log\">\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Close\n </button>\n <button\n *ngIf=\"process.state === ProcessState.Running\"\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n <button\n *ngIf=\"process.state !== ProcessState.Running\"\n mat-button\n (click)=\"run()\">\n Run\n </button>\n <button\n *ngIf=\"(\n process.state !== ProcessState.Running && \n process.state !== ProcessState.Queued\n )\"\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n <button\n *ngIf=\"process.filename\"\n mat-button\n (click)=\"download()\">\n Download\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i7.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i7.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i7.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i9.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "component", type: i10.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i10.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i11.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "pipe", type: i12.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "pipe", type: i12.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
102
104
|
}
|
|
103
105
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessComponent, decorators: [{
|
|
104
106
|
type: Component,
|
|
@@ -106,5 +108,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
106
108
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
107
109
|
type: Inject,
|
|
108
110
|
args: [MAT_DIALOG_DATA]
|
|
109
|
-
}] }, { type: i1.FsMessage }, { type: i0.ChangeDetectorRef }, { type: i2.FsPrompt }] });
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvcHJvY2Vzcy9wcm9jZXNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzL3Byb2Nlc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUN0RSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQWMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7OztBQVFoRSxNQUFNLE9BQU8sZ0JBQWdCO0lB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QUFDO29CQUFDLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDdkMsSUFBSSxDQUNILFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDOUI7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3VHQS9GVSxnQkFBZ0Isa0JBV2pCLGVBQWU7MkZBWGQsZ0JBQWdCLG9EQzVCN0IsbWlIQTBIWTs7MkZEOUZDLGdCQUFnQjtrQkFMNUIsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNOzswQkFhNUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBQcm9jZXNzUHJvY2Vzc1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBQcm9jZXNzRGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcHJvY2Vzcy5kYXRhJztcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9pbmRleC1uYW1lLXZhbHVlJztcbmltcG9ydCB7IFByb2Nlc3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgUHJvY2Vzc1N0YXRlcyB9IGZyb20gJy4vLi4vLi4vY29uc3RzL3Byb2Nlc3Mtc3RhdGVzLmNvbnN0JztcbmltcG9ydCB7IFByb2Nlc3NTdGF0ZSB9IGZyb20gJy4vLi4vLi4vZW51bXMvcHJvY2Vzcy1zdGF0ZS5lbnVtJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2Nlc3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9jZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9jZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBwcm9jZXNzOiBQcm9jZXNzO1xuICBwdWJsaWMgUHJvY2Vzc1N0YXRlcyA9IGluZGV4TmFtZVZhbHVlKFByb2Nlc3NTdGF0ZXMpO1xuICBwdWJsaWMgUHJvY2Vzc1Byb2Nlc3NTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShQcm9jZXNzUHJvY2Vzc1N0YXRlcyk7XG4gIHB1YmxpYyBQcm9jZXNzU3RhdGUgPSBQcm9jZXNzU3RhdGU7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9wcm9jZXNzRGF0YSA9IGluamVjdChQcm9jZXNzRGF0YSk7XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHtcbiAgICAgICBwcm9jZXNzOiBhbnksXG4gICAgfSxcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3Byb21wdDogRnNQcm9tcHQsXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkJCgpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5uaW5nUmVmcmVzaCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZCQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0RhdGEuZ2V0KHRoaXMuZGF0YS5wcm9jZXNzLmlkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocHJvY2VzcykgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3M7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuICBcbiAgcHVibGljIHJ1bm5pbmdSZWZyZXNoKCkge1xuICAgIHRpbWVyKDAsIDIwMDApXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMucHJvY2Vzcy5zdGF0ZSA9PT0gU3RyaW5nKFByb2Nlc3NTdGF0ZS5SdW5uaW5nKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWQkKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGtpbGwoKSB7XG4gICAgdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgdGl0bGU6ICdLaWxsIHByb2Nlc3MnLFxuICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8ga2lsbCB0aGUgcHJvY2Vzcz8nLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX3Byb2Nlc3NEYXRhLmtpbGwodGhpcy5kYXRhLnByb2Nlc3MpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZCQoKSksXG4gICAgICApICBcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0tpbGxlZCBwcm9jZXNzJyk7XG4gICAgICB9KTsgICBcbiAgfVxuXG4gIHB1YmxpYyBydW4oKSB7XG4gICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdSdW5uaW5nIHByb2Nlc3MnKTtcbiAgICB0aGlzLl9wcm9jZXNzRGF0YVxuICAgICAgLnJ1bih0aGlzLmRhdGEucHJvY2Vzcywge1xuICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlNlbnQ6IHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzLnN0YXRlID0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmc7XG4gICAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHF1ZXVlKCkge1xuICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUnVubmluZyBwcm9jZXNzJyk7XG4gICAgdGhpcy5fcHJvY2Vzc0RhdGEucXVldWUodGhpcy5kYXRhLnByb2Nlc3MpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZCQoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWQoKSB7XG4gICAgdGhpcy5fcHJvY2Vzc0RhdGEuZG93bmxvYWQodGhpcy5kYXRhLnByb2Nlc3MpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG59XG4iLCI8ZnMtZGlhbG9nICpmc1NrZWxldG9uPVwicHJvY2Vzc1wiPlxuICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+XG4gICAgUHJvY2Vzc1xuICA8L2Rpdj5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1sZy53cmFwLmFsaWduLXN0YXJ0XCI+XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBOYW1lXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLnByZXR0eU5hbWUgfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIFN0YXR1c1xuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1c1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3J1bm5pbmcnOiBwcm9jZXNzLnN0YXRlID09PSBQcm9jZXNzU3RhdGUuUnVubmluZyB9XCI+XG4gICAgICAgICAgICB7eyBQcm9jZXNzU3RhdGVzW3Byb2Nlc3Muc3RhdGVdIH19XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvY2Vzcy5zdGF0ZSA9PT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmdcIj5cbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjIwXCJcbiAgICAgICAgICAgICAgICBbbW9kZV09XCInaW5kZXRlcm1pbmF0ZSdcIj5cbiAgICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJwcm9jZXNzLm5vdGlmeVwiPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbiBFbWFpbFxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3sgcHJvY2Vzcy5ub3RpZnkgfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIFByb2Nlc3MgSURcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7IHByb2Nlc3MucGlkIHx8ICdOb25lJyB9fVxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9jZXNzLnBpZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCI+XG4gICAgICAgICAgICAgIHt7IFByb2Nlc3NQcm9jZXNzU3RhdGVzW3Byb2Nlc3MucHJvY2Vzc1N0YXRlXSB8fCAnVW5rbm93bicgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJwcm9jZXNzLmNyZWF0ZURhdGVcIj5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBDcmVhdGUgRGF0ZVxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3sgcHJvY2Vzcy5jcmVhdGVEYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJyB9fVxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJwcm9jZXNzLnN0YXJ0RGF0ZVwiPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIFN0YXJ0IERhdGVcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7IHByb2Nlc3Muc3RhcnREYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJyB9fVxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJwcm9jZXNzLmVuZERhdGVcIj5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBDb21wbGV0ZSBEYXRlXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLmVuZERhdGUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnIH19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cInByb2Nlc3MuZHVyYXRpb25cIj5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBEdXJhdGlvblxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3sgcHJvY2Vzcy5kdXJhdGlvbiB8IGZzRGF0ZUR1cmF0aW9uOiB7aG91cnM6IHRydWUsIG1pbnV0ZXM6IHRydWUsIHNlY29uZHM6IHRydWV9IH19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cInByb2Nlc3MubWVzc2FnZVwiPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgTWVzc2FnZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7eyBwcm9jZXNzLm1lc3NhZ2UgfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJwcm9jZXNzLmxvZ1wiPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgTG9nXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dcIj5cbiAgICAgICAgICB7eyBwcm9jZXNzLmxvZyB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICBDbG9zZVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJwcm9jZXNzLnN0YXRlID09PSBQcm9jZXNzU3RhdGUuUnVubmluZ1wiXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cImtpbGwoKVwiPlxuICAgICAgS2lsbFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZ1wiXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cInJ1bigpXCI+XG4gICAgICBSdW5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiKFxuICAgICAgICAgIHByb2Nlc3Muc3RhdGUgIT09IFByb2Nlc3NTdGF0ZS5SdW5uaW5nICYmIFxuICAgICAgICAgIHByb2Nlc3Muc3RhdGUgIT09IFByb2Nlc3NTdGF0ZS5RdWV1ZWRcbiAgICAgICAgKVwiXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cInF1ZXVlKClcIj5cbiAgICAgIFF1ZXVlXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInByb2Nlc3MuZmlsZW5hbWVcIlxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJkb3dubG9hZCgpXCI+XG4gICAgICBEb3dubG9hZFxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbjwvZnMtZGlhbG9nPiJdfQ==
|
|
111
|
+
}] }, { type: i1.FsMessage }, { type: i0.ChangeDetectorRef }, { type: i2.FsPrompt }, { type: i3.FsProcess }, { type: i4.FsApi }] });
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvcHJvY2Vzcy9wcm9jZXNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzL3Byb2Nlc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUN0RSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBYyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxD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WGQsZ0JBQWdCLG9EQzdCN0IsbWlIQTBIWTs7MkZEN0ZDLGdCQUFnQjtrQkFMNUIsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNOzswQkFhNUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzQXBpLCBSZXF1ZXN0TWV0aG9kLCBTdHJlYW1FdmVudERhdGEsIFN0cmVhbUV2ZW50VHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2FwaSc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvY2VzcyB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb2Nlc3MnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cblxuaW1wb3J0IHsgUHJvY2Vzc1Byb2Nlc3NTdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgUHJvY2Vzc0RhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3Byb2Nlc3MuZGF0YSc7XG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5kZXgtbmFtZS12YWx1ZSc7XG5pbXBvcnQgeyBQcm9jZXNzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IFByb2Nlc3NTdGF0ZXMgfSBmcm9tICcuLy4uLy4uL2NvbnN0cy9wcm9jZXNzLXN0YXRlcy5jb25zdCc7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdGUgfSBmcm9tICcuLy4uLy4uL2VudW1zL3Byb2Nlc3Mtc3RhdGUuZW51bSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9jZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvY2Vzcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcHJvY2VzczogUHJvY2VzcztcbiAgcHVibGljIFByb2Nlc3NTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShQcm9jZXNzU3RhdGVzKTtcbiAgcHVibGljIFByb2Nlc3NQcm9jZXNzU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoUHJvY2Vzc1Byb2Nlc3NTdGF0ZXMpO1xuICBwdWJsaWMgUHJvY2Vzc1N0YXRlID0gUHJvY2Vzc1N0YXRlO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfcHJvY2Vzc0RhdGEgPSBpbmplY3QoUHJvY2Vzc0RhdGEpO1xuICBcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7XG4gICAgICAgcHJvY2VzczogYW55LFxuICAgIH0sXG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9wcm9tcHQ6IEZzUHJvbXB0LFxuICAgIHByaXZhdGUgX3Byb2Nlc3M6IEZzUHJvY2VzcyxcbiAgICBwcml2YXRlIF9hcGk6IEZzQXBpLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZCQoKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucnVubmluZ1JlZnJlc2goKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGxvYWQkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NEYXRhLmdldCh0aGlzLmRhdGEucHJvY2Vzcy5pZClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHByb2Nlc3MpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3MgPSBwcm9jZXNzO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cbiAgXG4gIHB1YmxpYyBydW5uaW5nUmVmcmVzaCgpIHtcbiAgICB0aW1lcigwLCAyMDAwKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnByb2Nlc3Muc3RhdGUgPT09IFN0cmluZyhQcm9jZXNzU3RhdGUuUnVubmluZykpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkJCgpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBraWxsKCkge1xuICAgIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnS2lsbCBwcm9jZXNzJyxcbiAgICAgIHRlbXBsYXRlOiAnQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGtpbGwgdGhlIHByb2Nlc3M/JyxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9wcm9jZXNzRGF0YS5raWxsKHRoaXMuZGF0YS5wcm9jZXNzKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWQkKCkpLFxuICAgICAgKSAgXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdLaWxsZWQgcHJvY2VzcycpO1xuICAgICAgfSk7ICAgXG4gIH1cblxuICBwdWJsaWMgcnVuKCkge1xuICAgIHRoaXMuX3Byb2Nlc3NcbiAgICAgIC5ydW4oYFJ1biAke3RoaXMucHJvY2Vzcy5uYW1lfWAsIHRoaXMuX2FwaVxuICAgICAgICAuc3RyZWFtKFxuICAgICAgICAgIFJlcXVlc3RNZXRob2QuUG9zdCwgYHByb2Nlc3Nlcy8ke3RoaXMucHJvY2Vzcy5pZH0vcnVuYClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYoZXZlbnQgaW5zdGFuY2VvZiBTdHJlYW1FdmVudERhdGEgJiYgZXZlbnQudHlwZSA9PT0gU3RyZWFtRXZlbnRUeXBlLlNlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzLnN0YXRlID0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmc7XG4gICAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgU3RyZWFtRXZlbnREYXRhKSxcbiAgICAgICAgICBtYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQ/LmRhdGE7XG4gICAgICAgICAgfSksICAgXG4gICAgICAgICAgZmlsdGVyKChkYXRhKSA9PiAhIWRhdGEpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBxdWV1ZSgpIHtcbiAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1J1bm5pbmcgcHJvY2VzcycpO1xuICAgIHRoaXMuX3Byb2Nlc3NEYXRhLnF1ZXVlKHRoaXMuZGF0YS5wcm9jZXNzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWQkKCkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkKCkge1xuICAgIHRoaXMuX3Byb2Nlc3NEYXRhLmRvd25sb2FkKHRoaXMuZGF0YS5wcm9jZXNzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxufVxuIiwiPGZzLWRpYWxvZyAqZnNTa2VsZXRvbj1cInByb2Nlc3NcIj5cbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPlxuICAgIFByb2Nlc3NcbiAgPC9kaXY+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtbGcud3JhcC5hbGlnbi1zdGFydFwiPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgTmFtZVxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3sgcHJvY2Vzcy5wcmV0dHlOYW1lIH19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBTdGF0dXNcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdydW5uaW5nJzogcHJvY2Vzcy5zdGF0ZSA9PT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmcgfVwiPlxuICAgICAgICAgICAge3sgUHJvY2Vzc1N0YXRlc1twcm9jZXNzLnN0YXRlXSB9fVxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2Nlc3Muc3RhdGUgPT09IFByb2Nlc3NTdGF0ZS5SdW5uaW5nXCI+XG4gICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXG4gICAgICAgICAgICAgICAgW21vZGVdPVwiJ2luZGV0ZXJtaW5hdGUnXCI+XG4gICAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwicHJvY2Vzcy5ub3RpZnlcIj5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBOb3RpZmljYXRpb24gRW1haWxcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7IHByb2Nlc3Mubm90aWZ5IH19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBQcm9jZXNzIElEXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLnBpZCB8fCAnTm9uZScgfX1cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvY2Vzcy5waWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICB7eyBQcm9jZXNzUHJvY2Vzc1N0YXRlc1twcm9jZXNzLnByb2Nlc3NTdGF0ZV0gfHwgJ1Vua25vd24nIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwicHJvY2Vzcy5jcmVhdGVEYXRlXCI+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgQ3JlYXRlIERhdGVcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7IHByb2Nlc3MuY3JlYXRlRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwicHJvY2Vzcy5zdGFydERhdGVcIj5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBTdGFydCBEYXRlXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLnN0YXJ0RGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwicHJvY2Vzcy5lbmREYXRlXCI+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgQ29tcGxldGUgRGF0ZVxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3sgcHJvY2Vzcy5lbmREYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJyB9fVxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJwcm9jZXNzLmR1cmF0aW9uXCI+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgRHVyYXRpb25cbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7IHByb2Nlc3MuZHVyYXRpb24gfCBmc0RhdGVEdXJhdGlvbjoge2hvdXJzOiB0cnVlLCBtaW51dGVzOiB0cnVlLCBzZWNvbmRzOiB0cnVlfSB9fVxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJwcm9jZXNzLm1lc3NhZ2VcIj5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIE1lc3NhZ2VcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3sgcHJvY2Vzcy5tZXNzYWdlIH19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwicHJvY2Vzcy5sb2dcIj5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIExvZ1xuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nXCI+XG4gICAgICAgICAge3sgcHJvY2Vzcy5sb2cgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgQ2xvc2VcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwicHJvY2Vzcy5zdGF0ZSA9PT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmdcIlxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJraWxsKClcIj5cbiAgICAgIEtpbGxcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwicHJvY2Vzcy5zdGF0ZSAhPT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmdcIlxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJydW4oKVwiPlxuICAgICAgUnVuXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIihcbiAgICAgICAgICBwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZyAmJiBcbiAgICAgICAgICBwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUXVldWVkXG4gICAgICAgIClcIlxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJxdWV1ZSgpXCI+XG4gICAgICBRdWV1ZVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJwcm9jZXNzLmZpbGVuYW1lXCJcbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwiZG93bmxvYWQoKVwiPlxuICAgICAgRG93bmxvYWRcbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz4iXX0=
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, inject, Input, ViewChild, } from '@angular/core';
|
|
2
2
|
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
+
import { FsApi, RequestMethod, StreamEventData, StreamEventType } from '@firestitch/api';
|
|
3
4
|
import { ItemType } from '@firestitch/filter';
|
|
4
5
|
import { FsListComponent } from '@firestitch/list';
|
|
5
6
|
import { FsMessage } from '@firestitch/message';
|
|
7
|
+
import { FsProcess } from '@firestitch/process';
|
|
6
8
|
import { Subject } from 'rxjs';
|
|
7
|
-
import { map, takeUntil } from 'rxjs/operators';
|
|
9
|
+
import { filter, map, takeUntil, tap } from 'rxjs/operators';
|
|
8
10
|
import { ProcessStates } from '../../consts';
|
|
9
11
|
import { ProcessData } from '../../data/process.data';
|
|
10
12
|
import { ProcessState } from '../../enums';
|
|
@@ -13,12 +15,16 @@ import { ProcessComponent } from './../process/process.component';
|
|
|
13
15
|
import * as i0 from "@angular/core";
|
|
14
16
|
import * as i1 from "@angular/material/dialog";
|
|
15
17
|
import * as i2 from "@firestitch/message";
|
|
16
|
-
import * as i3 from "@
|
|
17
|
-
import * as i4 from "@firestitch/
|
|
18
|
-
import * as i5 from "@
|
|
18
|
+
import * as i3 from "@firestitch/process";
|
|
19
|
+
import * as i4 from "@firestitch/api";
|
|
20
|
+
import * as i5 from "@angular/common";
|
|
21
|
+
import * as i6 from "@firestitch/date";
|
|
22
|
+
import * as i7 from "@firestitch/list";
|
|
19
23
|
export class ProcessesComponent {
|
|
20
24
|
_dialog;
|
|
21
25
|
_message;
|
|
26
|
+
_process;
|
|
27
|
+
_api;
|
|
22
28
|
list;
|
|
23
29
|
actions = [];
|
|
24
30
|
config = null;
|
|
@@ -26,9 +32,11 @@ export class ProcessesComponent {
|
|
|
26
32
|
ProcessState = ProcessState;
|
|
27
33
|
_destroy$ = new Subject();
|
|
28
34
|
_processData = inject(ProcessData);
|
|
29
|
-
constructor(_dialog, _message) {
|
|
35
|
+
constructor(_dialog, _message, _process, _api) {
|
|
30
36
|
this._dialog = _dialog;
|
|
31
37
|
this._message = _message;
|
|
38
|
+
this._process = _process;
|
|
39
|
+
this._api = _api;
|
|
32
40
|
}
|
|
33
41
|
ngOnInit() {
|
|
34
42
|
this._configList();
|
|
@@ -61,20 +69,6 @@ export class ProcessesComponent {
|
|
|
61
69
|
this.config = {
|
|
62
70
|
actions: [],
|
|
63
71
|
rowActions: [
|
|
64
|
-
{
|
|
65
|
-
label: 'Run',
|
|
66
|
-
show: (process) => {
|
|
67
|
-
return process.state !== ProcessState.Running;
|
|
68
|
-
},
|
|
69
|
-
click: (data) => {
|
|
70
|
-
this._message.info('Running process...');
|
|
71
|
-
this._processData.run(data)
|
|
72
|
-
.subscribe(() => {
|
|
73
|
-
this.reload();
|
|
74
|
-
this._message.success('Ran process');
|
|
75
|
-
});
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
72
|
{
|
|
79
73
|
label: 'Queue',
|
|
80
74
|
show: (process) => {
|
|
@@ -89,6 +83,31 @@ export class ProcessesComponent {
|
|
|
89
83
|
});
|
|
90
84
|
},
|
|
91
85
|
},
|
|
86
|
+
{
|
|
87
|
+
label: 'Run',
|
|
88
|
+
show: (data) => {
|
|
89
|
+
return data.state !== ProcessState.Running;
|
|
90
|
+
},
|
|
91
|
+
click: (process) => {
|
|
92
|
+
this._process
|
|
93
|
+
.run(`Run ${process.name}`, this._api
|
|
94
|
+
.stream(RequestMethod.Post, `processes/${process.id}/run`)
|
|
95
|
+
.pipe(tap((event) => {
|
|
96
|
+
if (event instanceof StreamEventData && event.type === StreamEventType.Sent) {
|
|
97
|
+
process = {
|
|
98
|
+
...process,
|
|
99
|
+
state: ProcessState.Running,
|
|
100
|
+
};
|
|
101
|
+
this.list
|
|
102
|
+
.updateData(process, (row) => {
|
|
103
|
+
return process.id === row.id;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}), filter((event) => event instanceof StreamEventData), map((event) => {
|
|
107
|
+
return event?.data;
|
|
108
|
+
}), filter((data) => !!data)));
|
|
109
|
+
},
|
|
110
|
+
},
|
|
92
111
|
{
|
|
93
112
|
label: 'Kill',
|
|
94
113
|
show: (data) => {
|
|
@@ -155,16 +174,16 @@ export class ProcessesComponent {
|
|
|
155
174
|
});
|
|
156
175
|
});
|
|
157
176
|
}
|
|
158
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessesComponent, deps: [{ token: i1.MatDialog }, { token: i2.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
|
|
159
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProcessesComponent, selector: "fs-system-processes", inputs: { actions: "actions" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>\n Name\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Status\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ ProcessStates[row.state] }}\n <small>\n <div *ngIf=\"row.state===ProcessState.Running && row.percent\">\n Complete: {{ row.percent }}%\n </div>\n <div *ngIf=\"row.state===ProcessState.Completed && row.filename\">\n <a\n href=\"javascript:;\"\n (click)=\"download(row)\">\n {{ row.filename }}\n </a>\n </div>\n <div *ngIf=\"row.pid\">\n PID: {{ row.pid }}\n </div>\n <div *ngIf=\"row.state===ProcessState.Running && row.notify\">\n Notify: {{ row.notify }}\n </div>\n </small>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Duration\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Message\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Completed\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.endDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [""], dependencies: [{ kind: "directive", type:
|
|
177
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessesComponent, deps: [{ token: i1.MatDialog }, { token: i2.FsMessage }, { token: i3.FsProcess }, { token: i4.FsApi }], target: i0.ɵɵFactoryTarget.Component });
|
|
178
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProcessesComponent, selector: "fs-system-processes", inputs: { actions: "actions" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>\n Name\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Status\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ ProcessStates[row.state] }}\n <small>\n <div *ngIf=\"row.state===ProcessState.Running && row.percent\">\n Complete: {{ row.percent }}%\n </div>\n <div *ngIf=\"row.state===ProcessState.Completed && row.filename\">\n <a\n href=\"javascript:;\"\n (click)=\"download(row)\">\n {{ row.filename }}\n </a>\n </div>\n <div *ngIf=\"row.pid\">\n PID: {{ row.pid }}\n </div>\n <div *ngIf=\"row.state===ProcessState.Running && row.notify\">\n Notify: {{ row.notify }}\n </div>\n </small>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Duration\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Message\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Completed\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.endDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "component", type: i7.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i7.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i7.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i7.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "pipe", type: i6.FsDateDurationPipe, name: "fsDateDuration" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
160
179
|
}
|
|
161
180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessesComponent, decorators: [{
|
|
162
181
|
type: Component,
|
|
163
182
|
args: [{ selector: 'fs-system-processes', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>\n Name\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Status\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ ProcessStates[row.state] }}\n <small>\n <div *ngIf=\"row.state===ProcessState.Running && row.percent\">\n Complete: {{ row.percent }}%\n </div>\n <div *ngIf=\"row.state===ProcessState.Completed && row.filename\">\n <a\n href=\"javascript:;\"\n (click)=\"download(row)\">\n {{ row.filename }}\n </a>\n </div>\n <div *ngIf=\"row.pid\">\n PID: {{ row.pid }}\n </div>\n <div *ngIf=\"row.state===ProcessState.Running && row.notify\">\n Notify: {{ row.notify }}\n </div>\n </small>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Duration\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Message\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Completed\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.endDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>" }]
|
|
164
|
-
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.FsMessage }], propDecorators: { list: [{
|
|
183
|
+
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.FsMessage }, { type: i3.FsProcess }, { type: i4.FsApi }], propDecorators: { list: [{
|
|
165
184
|
type: ViewChild,
|
|
166
185
|
args: [FsListComponent]
|
|
167
186
|
}], actions: [{
|
|
168
187
|
type: Input
|
|
169
188
|
}] } });
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzZXMvcHJvY2Vzc2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzZXMvcHJvY2Vzc2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxHQUNoRixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQVNsRSxNQUFNLE9BQU8sa0JBQWtCO0lBZW5CO0lBQ0E7SUFiSCxJQUFJLENBQWtCO0lB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aUlBRWxCLGVBQWUsZ0RDOUI1Qix3MkRBdUVVOzsyRkQzQ0csa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNO3NHQUt4QyxJQUFJO3NCQURWLFNBQVM7dUJBQUMsZUFBZTtnQkFHVixPQUFPO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFByb2Nlc3NTdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgUHJvY2Vzc0RhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3Byb2Nlc3MuZGF0YSc7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5kZXgtbmFtZS12YWx1ZSc7XG5cbmltcG9ydCB7IFByb2Nlc3NBY3Rpb24gfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvcHJvY2Vzcy1hY3Rpb24nO1xuaW1wb3J0IHsgUHJvY2Vzc0NvbXBvbmVudCB9IGZyb20gJy4vLi4vcHJvY2Vzcy9wcm9jZXNzLmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtc3lzdGVtLXByb2Nlc3NlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9jZXNzZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9jZXNzZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3Nlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKEZzTGlzdENvbXBvbmVudCkgXG4gIHB1YmxpYyBsaXN0OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgcHVibGljIGFjdGlvbnM6IFByb2Nlc3NBY3Rpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBjb25maWc6IEZzTGlzdENvbmZpZyA9IG51bGw7XG4gIHB1YmxpYyBQcm9jZXNzU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoUHJvY2Vzc1N0YXRlcyk7XG4gIHB1YmxpYyBQcm9jZXNzU3RhdGUgPSBQcm9jZXNzU3RhdGU7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9wcm9jZXNzRGF0YSA9IGluamVjdChQcm9jZXNzRGF0YSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9jb25maWdMaXN0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCkge1xuICAgIHRoaXMubGlzdC5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuKHByb2Nlc3MpIHtcbiAgICB0aGlzLl9kaWFsb2dcbiAgICAgIC5vcGVuKFByb2Nlc3NDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHByb2Nlc3MsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiAnODUlJyxcbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZChwcm9jZXNzKSB7XG4gICAgdGhpcy5fcHJvY2Vzc0RhdGEuZG93bmxvYWQocHJvY2Vzcyk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWdMaXN0KCkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgYWN0aW9uczogW10sXG4gICAgICByb3dBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ1J1bicsXG4gICAgICAgICAgc2hvdzogKHByb2Nlc3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsaWNrOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZS5pbmZvKCdSdW5uaW5nIHByb2Nlc3MuLi4nKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NEYXRhLnJ1bihkYXRhKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUmFuIHByb2Nlc3MnKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdRdWV1ZScsXG4gICAgICAgICAgc2hvdzogKHByb2Nlc3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZyAmJiBcbiAgICAgICAgICAgICAgcHJvY2Vzcy5zdGF0ZSAhPT0gUHJvY2Vzc1N0YXRlLlF1ZXVlZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsaWNrOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0RhdGEucXVldWUoZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1F1ZXVlZCBwcm9jZXNzJyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0tpbGwnLFxuICAgICAgICAgIHNob3c6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gISFkYXRhLnBpZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsaWNrOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZS5pbmZvKCdLaWxsaW5nIHByb2Nlc3MuLi4nKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NEYXRhLmtpbGwoZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0tpbGxlZCBwcm9jZXNzJyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0RlbGV0ZScsXG4gICAgICAgICAgY2xpY2s6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzRGF0YS5kZWxldGUoZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0RlbGV0ZWQgcHJvY2VzcycpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgIGxhYmVsOiAnU3RhdHVzJyxcbiAgICAgICAgICB2YWx1ZXM6IFByb2Nlc3NTdGF0ZXMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0RhdGEuZ2V0cyhxdWVyeSwgeyBrZXk6IG51bGwgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gKHsgZGF0YTogcmVzcG9uc2UucHJvY2Vzc2VzLCBwYWdpbmc6IHJlc3BvbnNlLnBhZ2luZyB9KSksXG4gICAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29uZmlnLmFjdGlvbnMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGxhYmVsOiBhY3Rpb24ubGFiZWwsXG4gICAgICAgICAgbWVudTogYWN0aW9uLm1lbnUsXG4gICAgICAgICAgY2xpY2s6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmNsaWNrKSB7XG4gICAgICAgICAgICAgIGFjdGlvbi5jbGljayhkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFjdGlvbi5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGlhbG9nLm9wZW4oYWN0aW9uLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxmcy1saXN0IFtjb25maWddPVwiY29uZmlnXCI+XG4gIDxmcy1saXN0LWNvbHVtbj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+XG4gICAgICBOYW1lXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxhIChjbGljayk9XCJvcGVuKHJvdylcIj5cbiAgICAgICAge3sgcm93Lm5hbWUgfX1cbiAgICAgIDwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPlxuICAgICAgU3RhdHVzXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7IFByb2Nlc3NTdGF0ZXNbcm93LnN0YXRlXSB9fVxuICAgICAgPHNtYWxsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnN0YXRlPT09UHJvY2Vzc1N0YXRlLlJ1bm5pbmcgJiYgcm93LnBlcmNlbnRcIj5cbiAgICAgICAgICBDb21wbGV0ZToge3sgcm93LnBlcmNlbnQgfX0lXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnN0YXRlPT09UHJvY2Vzc1N0YXRlLkNvbXBsZXRlZCAmJiByb3cuZmlsZW5hbWVcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKHJvdylcIj5cbiAgICAgICAgICAgIHt7IHJvdy5maWxlbmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJyb3cucGlkXCI+XG4gICAgICAgICAgUElEOiB7eyByb3cucGlkIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnN0YXRlPT09UHJvY2Vzc1N0YXRlLlJ1bm5pbmcgJiYgcm93Lm5vdGlmeVwiPlxuICAgICAgICAgIE5vdGlmeToge3sgcm93Lm5vdGlmeSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc21hbGw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5cbiAgICAgIER1cmF0aW9uXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7IHJvdy5kdXJhdGlvbiB8IGZzRGF0ZUR1cmF0aW9uOiB7aG91cnM6IHRydWUsIG1pbnV0ZXM6IHRydWUsIHNlY29uZHM6IHRydWV9IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5cbiAgICAgIE1lc3NhZ2VcbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAge3sgcm93Lm1lc3NhZ2UgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPlxuICAgICAgQ29tcGxldGVkXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuZW5kRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbjwvZnMtbGlzdD4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzZXMvcHJvY2Vzc2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzZXMvcHJvY2Vzc2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxHQUNoRixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFP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dCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc0FwaSwgUmVxdWVzdE1ldGhvZCwgU3RyZWFtRXZlbnREYXRhLCBTdHJlYW1FdmVudFR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9hcGknO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNQcm9jZXNzIH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvY2Vzcyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUHJvY2Vzc1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBQcm9jZXNzRGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcHJvY2Vzcy5kYXRhJztcbmltcG9ydCB7IFByb2Nlc3NTdGF0ZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9pbmRleC1uYW1lLXZhbHVlJztcblxuXG5pbXBvcnQgeyBQcm9jZXNzQWN0aW9uIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL3Byb2Nlc3MtYWN0aW9uJztcbmltcG9ydCB7IFByb2Nlc3NDb21wb25lbnQgfSBmcm9tICcuLy4uL3Byb2Nlc3MvcHJvY2Vzcy5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXN5c3RlbS1wcm9jZXNzZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvY2Vzc2VzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvY2Vzc2VzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9jZXNzZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQpIFxuICBwdWJsaWMgbGlzdDogRnNMaXN0Q29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25zOiBQcm9jZXNzQWN0aW9uW10gPSBbXTtcblxuICBwdWJsaWMgY29uZmlnOiBGc0xpc3RDb25maWcgPSBudWxsO1xuICBwdWJsaWMgUHJvY2Vzc1N0YXRlcyA9IGluZGV4TmFtZVZhbHVlKFByb2Nlc3NTdGF0ZXMpO1xuICBwdWJsaWMgUHJvY2Vzc1N0YXRlID0gUHJvY2Vzc1N0YXRlO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfcHJvY2Vzc0RhdGEgPSBpbmplY3QoUHJvY2Vzc0RhdGEpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgICBwcml2YXRlIF9wcm9jZXNzOiBGc1Byb2Nlc3MsXG4gICAgcHJpdmF0ZSBfYXBpOiBGc0FwaSxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY29uZmlnTGlzdCgpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZCgpIHtcbiAgICB0aGlzLmxpc3QucmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgb3Blbihwcm9jZXNzKSB7XG4gICAgdGhpcy5fZGlhbG9nXG4gICAgICAub3BlbihQcm9jZXNzQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBwcm9jZXNzLFxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogJzg1JScsXG4gICAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWQocHJvY2Vzcykge1xuICAgIHRoaXMuX3Byb2Nlc3NEYXRhLmRvd25sb2FkKHByb2Nlc3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlnTGlzdCgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGFjdGlvbnM6IFtdLFxuICAgICAgcm93QWN0aW9uczogWyAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdRdWV1ZScsXG4gICAgICAgICAgc2hvdzogKHByb2Nlc3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZyAmJiBcbiAgICAgICAgICAgICAgcHJvY2Vzcy5zdGF0ZSAhPT0gUHJvY2Vzc1N0YXRlLlF1ZXVlZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsaWNrOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0RhdGEucXVldWUoZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1F1ZXVlZCBwcm9jZXNzJyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ1J1bicsXG4gICAgICAgICAgc2hvdzogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsaWNrOiAocHJvY2VzcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1xuICAgICAgICAgICAgICAucnVuKGBSdW4gJHtwcm9jZXNzLm5hbWV9YCwgdGhpcy5fYXBpXG4gICAgICAgICAgICAgICAgLnN0cmVhbShcbiAgICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2QuUG9zdCwgYHByb2Nlc3Nlcy8ke3Byb2Nlc3MuaWR9L3J1bmApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50IGluc3RhbmNlb2YgU3RyZWFtRXZlbnREYXRhICYmIGV2ZW50LnR5cGUgPT09IFN0cmVhbUV2ZW50VHlwZS5TZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByb2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogUHJvY2Vzc1N0YXRlLlJ1bm5pbmcsXG4gICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZURhdGEocHJvY2VzcywgKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5pZCA9PT0gcm93LmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBTdHJlYW1FdmVudERhdGEpLFxuICAgICAgICAgICAgICAgICAgbWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ/LmRhdGE7XG4gICAgICAgICAgICAgICAgICB9KSwgICBcbiAgICAgICAgICAgICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0tpbGwnLFxuICAgICAgICAgIHNob3c6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gISFkYXRhLnBpZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsaWNrOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZS5pbmZvKCdLaWxsaW5nIHByb2Nlc3MuLi4nKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NEYXRhLmtpbGwoZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0tpbGxlZCBwcm9jZXNzJyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0RlbGV0ZScsXG4gICAgICAgICAgY2xpY2s6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzRGF0YS5kZWxldGUoZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0RlbGV0ZWQgcHJvY2VzcycpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgIGxhYmVsOiAnU3RhdHVzJyxcbiAgICAgICAgICB2YWx1ZXM6IFByb2Nlc3NTdGF0ZXMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0RhdGEuZ2V0cyhxdWVyeSwgeyBrZXk6IG51bGwgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gKHsgZGF0YTogcmVzcG9uc2UucHJvY2Vzc2VzLCBwYWdpbmc6IHJlc3BvbnNlLnBhZ2luZyB9KSksXG4gICAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29uZmlnLmFjdGlvbnMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGxhYmVsOiBhY3Rpb24ubGFiZWwsXG4gICAgICAgICAgbWVudTogYWN0aW9uLm1lbnUsXG4gICAgICAgICAgY2xpY2s6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmNsaWNrKSB7XG4gICAgICAgICAgICAgIGFjdGlvbi5jbGljayhkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFjdGlvbi5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGlhbG9nLm9wZW4oYWN0aW9uLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxmcy1saXN0IFtjb25maWddPVwiY29uZmlnXCI+XG4gIDxmcy1saXN0LWNvbHVtbj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+XG4gICAgICBOYW1lXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxhIChjbGljayk9XCJvcGVuKHJvdylcIj5cbiAgICAgICAge3sgcm93Lm5hbWUgfX1cbiAgICAgIDwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPlxuICAgICAgU3RhdHVzXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7IFByb2Nlc3NTdGF0ZXNbcm93LnN0YXRlXSB9fVxuICAgICAgPHNtYWxsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnN0YXRlPT09UHJvY2Vzc1N0YXRlLlJ1bm5pbmcgJiYgcm93LnBlcmNlbnRcIj5cbiAgICAgICAgICBDb21wbGV0ZToge3sgcm93LnBlcmNlbnQgfX0lXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnN0YXRlPT09UHJvY2Vzc1N0YXRlLkNvbXBsZXRlZCAmJiByb3cuZmlsZW5hbWVcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKHJvdylcIj5cbiAgICAgICAgICAgIHt7IHJvdy5maWxlbmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJyb3cucGlkXCI+XG4gICAgICAgICAgUElEOiB7eyByb3cucGlkIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnN0YXRlPT09UHJvY2Vzc1N0YXRlLlJ1bm5pbmcgJiYgcm93Lm5vdGlmeVwiPlxuICAgICAgICAgIE5vdGlmeToge3sgcm93Lm5vdGlmeSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc21hbGw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5cbiAgICAgIER1cmF0aW9uXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7IHJvdy5kdXJhdGlvbiB8IGZzRGF0ZUR1cmF0aW9uOiB7aG91cnM6IHRydWUsIG1pbnV0ZXM6IHRydWUsIHNlY29uZHM6IHRydWV9IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5cbiAgICAgIE1lc3NhZ2VcbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAge3sgcm93Lm1lc3NhZ2UgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPlxuICAgICAgQ29tcGxldGVkXG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuZW5kRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbjwvZnMtbGlzdD4iXX0=
|