@firestitch/system 18.0.32 → 18.0.34
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 -4
- package/app/modules/system/components/processes/processes.component.d.ts +4 -4
- package/app/modules/system/interfaces/process.d.ts +2 -0
- package/esm2022/app/modules/system/components/api-log/api-log.component.mjs +3 -3
- package/esm2022/app/modules/system/components/api-logs/api-logs.component.mjs +3 -3
- package/esm2022/app/modules/system/components/process/process.component.mjs +58 -37
- package/esm2022/app/modules/system/components/processes/processes.component.mjs +53 -47
- package/esm2022/app/modules/system/interfaces/process.mjs +1 -1
- package/fesm2022/firestitch-system.mjs +77 -50
- package/fesm2022/firestitch-system.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { OnDestroy, OnInit } from
|
|
2
|
-
import { Observable } from
|
|
3
|
-
import { Process } from
|
|
4
|
-
import { ProcessState } from
|
|
1
|
+
import { OnDestroy, OnInit } from "@angular/core";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { Process } from "../../interfaces";
|
|
4
|
+
import { ProcessState } from "./../../enums/process-state.enum";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class ProcessComponent implements OnInit, OnDestroy {
|
|
7
7
|
data: any;
|
|
@@ -23,6 +23,7 @@ export declare class ProcessComponent implements OnInit, OnDestroy {
|
|
|
23
23
|
run(): void;
|
|
24
24
|
queue(): void;
|
|
25
25
|
download(): void;
|
|
26
|
+
get formattedProcessData(): string | null;
|
|
26
27
|
ngOnDestroy(): void;
|
|
27
28
|
static ɵfac: i0.ɵɵFactoryDeclaration<ProcessComponent, never>;
|
|
28
29
|
static ɵcmp: i0.ɵɵComponentDeclaration<ProcessComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { OnDestroy, OnInit } from
|
|
2
|
-
import { FsListComponent, FsListConfig } from
|
|
3
|
-
import { ProcessState } from
|
|
4
|
-
import { ProcessAction } from
|
|
1
|
+
import { OnDestroy, OnInit } from "@angular/core";
|
|
2
|
+
import { FsListComponent, FsListConfig } from "@firestitch/list";
|
|
3
|
+
import { ProcessState } from "../../enums";
|
|
4
|
+
import { ProcessAction } from "./../../interfaces/process-action";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class ProcessesComponent implements OnInit, OnDestroy {
|
|
7
7
|
private _dialog;
|
|
@@ -26,10 +26,10 @@ export class ApiLogComponent {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiLogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
29
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ApiLogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n @if (apiLog.code) {\n <fs-label-field>\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n }\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n @if (apiLog.direction) {\n <fs-label-field>\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n }\n\n @if (apiLog.length) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n }\n\n @if (apiLog.method) {\n @if (apiLog.method) {\n <fs-label-field>\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n }\n }\n\n @if (apiLog.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n }\n </div>\n\n @if (apiLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n }\n\n <div>\n @if (apiLog.request) {\n <fs-label-field>\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.response) {\n <fs-label-field>\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i3.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i3.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i4.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "pipe", type: i4.FsDateFormatPipe, name: "fsDateFormat" }] });
|
|
29
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ApiLogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n @if (apiLog.code) {\n <fs-label-field>\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n }\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n @if (apiLog.direction) {\n <fs-label-field>\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n }\n\n @if (apiLog.length) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n }\n\n @if (apiLog.method) {\n @if (apiLog.method) {\n <fs-label-field>\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n }\n }\n\n @if (apiLog.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n }\n </div>\n\n @if (apiLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n }\n\n <div>\n @if (apiLog.request) {\n <fs-label-field>\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.response) {\n <fs-label-field>\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.headers) {\n <fs-label-field>\n <fs-label>\n Headers\n </fs-label>\n <pre>{{apiLog.headers|json}}</pre>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i3.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i3.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i4.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "pipe", type: i4.FsDateFormatPipe, name: "fsDateFormat" }] });
|
|
30
30
|
}
|
|
31
31
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiLogComponent, decorators: [{
|
|
32
32
|
type: Component,
|
|
33
|
-
args: [{ standalone: true, imports: [FsSkeletonModule, FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, FsLabelModule, MatDialogActions, MatButton, MatDialogClose, JsonPipe, FsDateModule], template: "<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n @if (apiLog.code) {\n <fs-label-field>\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n }\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n @if (apiLog.direction) {\n <fs-label-field>\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n }\n\n @if (apiLog.length) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n }\n\n @if (apiLog.method) {\n @if (apiLog.method) {\n <fs-label-field>\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n }\n }\n\n @if (apiLog.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n }\n </div>\n\n @if (apiLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n }\n\n <div>\n @if (apiLog.request) {\n <fs-label-field>\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.response) {\n <fs-label-field>\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n" }]
|
|
33
|
+
args: [{ standalone: true, imports: [FsSkeletonModule, FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, FsLabelModule, MatDialogActions, MatButton, MatDialogClose, JsonPipe, FsDateModule], template: "<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n @if (apiLog.code) {\n <fs-label-field>\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n }\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n @if (apiLog.direction) {\n <fs-label-field>\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n }\n\n @if (apiLog.length) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n }\n\n @if (apiLog.method) {\n @if (apiLog.method) {\n <fs-label-field>\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n }\n }\n\n @if (apiLog.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n }\n </div>\n\n @if (apiLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n }\n\n <div>\n @if (apiLog.request) {\n <fs-label-field>\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.response) {\n <fs-label-field>\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.headers) {\n <fs-label-field>\n <fs-label>\n Headers\n </fs-label>\n <pre>{{apiLog.headers|json}}</pre>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n" }]
|
|
34
34
|
}] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvYXBpLWxvZy9hcGktbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9hcGktbG9nL2FwaS1sb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFTaEQsTUFBTSxPQUFPLGVBQWU7SUFDbEIsVUFBVSxHQUFHLE1BQU0sQ0FBZ0MsWUFBWSxDQUFDLENBQUM7SUFDekUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUd4QixNQUFNLENBQUM7SUFDUCxZQUFZLENBQUM7SUFFYixRQUFRO1FBRWIsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFakQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7dUdBZlUsZUFBZTsyRkFBZixlQUFlLHdFQ25CNUIseWxGQTBIQSx5RER6R2MsZ0JBQWdCLGlLQUFFLGNBQWMsaU1BQUUsY0FBYywrSEFBaUIsZ0JBQWdCLHdHQUFFLGFBQWEsZ1JBQUUsZ0JBQWdCLDRIQUFFLFNBQVMsaUxBQUUsY0FBYyxnTEFBRSxRQUFRLDRDQUFFLFlBQVk7OzJGQUV0SyxlQUFlO2tCQU4zQixTQUFTO2lDQUdNLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEFwaUxvZ1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5kZXgtbmFtZS12YWx1ZSc7XG5pbXBvcnQgeyBGc1NrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2tlbGV0b24nO1xuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgRnNMYWJlbE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xhYmVsJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBKc29uUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXBpLWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXBpLWxvZy5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0ZzU2tlbGV0b25Nb2R1bGUsIEZzRGlhbG9nTW9kdWxlLCBNYXREaWFsb2dUaXRsZSwgQ2RrU2Nyb2xsYWJsZSwgTWF0RGlhbG9nQ29udGVudCwgRnNMYWJlbE1vZHVsZSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0QnV0dG9uLCBNYXREaWFsb2dDbG9zZSwgSnNvblBpcGUsIEZzRGF0ZU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQXBpTG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxBcGlMb2dDb21wb25lbnQ+PihNYXREaWFsb2dSZWYpO1xuICBkYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7XG5cblxuICBwdWJsaWMgYXBpTG9nO1xuICBwdWJsaWMgYXBpTG9nU3RhdGVzO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuYXBpTG9nU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoQXBpTG9nU3RhdGVzKTtcblxuICAgIGlmICh0aGlzLmRhdGEuYXBpTG9nKSB7XG4gICAgICB0aGlzLmFwaUxvZyA9IHRoaXMuZGF0YS5hcGlMb2c7XG4gICAgfVxuICB9XG59XG4iLCI8ZnMtZGlhbG9nICpmc1NrZWxldG9uPVwiYXBpTG9nXCI+XG5cbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPkFQSSBMb2c8L2Rpdj5cblxuICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLWxnLndyYXAuYWxpZ24tc3RhcnRcIj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIFR5cGVcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3thcGlMb2cudHlwZX19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBTdGF0dXNcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3thcGlMb2dTdGF0ZXNbYXBpTG9nLnN0YXRlXX19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICBAaWYgKGFwaUxvZy5jb2RlKSB7XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBDb2RlXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7e2FwaUxvZy5jb2RlfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIH1cblxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgRGF0ZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7e2FwaUxvZy5jcmVhdGVEYXRlfGZzRGF0ZUZvcm1hdDogJ2Z1bGwtZGF0ZS10aW1lJ319XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICBAaWYgKGFwaUxvZy5kaXJlY3Rpb24pIHtcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIERpcmVjdGlvblxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3thcGlMb2cuZGlyZWN0aW9ufX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIH1cblxuICAgICAgQGlmIChhcGlMb2cubGVuZ3RoKSB7XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBEdXJhdGlvblxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3sgYXBpTG9nLmxlbmd0aCB8IGZzRGF0ZUR1cmF0aW9uIH19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoYXBpTG9nLm1ldGhvZCkge1xuICAgICAgICBAaWYgKGFwaUxvZy5tZXRob2QpIHtcbiAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgIE1ldGhvZFxuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7YXBpTG9nLm1ldGhvZH19XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaWYgKGFwaUxvZy51cmwpIHtcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIFVSTFxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3thcGlMb2cudXJsfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoYXBpTG9nLm1lc3NhZ2UpIHtcbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIE1lc3NhZ2VcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3thcGlMb2cubWVzc2FnZX19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIH1cblxuICAgIDxkaXY+XG4gICAgICBAaWYgKGFwaUxvZy5yZXF1ZXN0KSB7XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBSZXF1ZXN0XG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICA8cHJlPnt7YXBpTG9nLnJlcXVlc3R8anNvbn19PC9wcmU+XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoYXBpTG9nLnJlc3BvbnNlKSB7XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBSZXNwb25zZVxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgPHByZT57e2FwaUxvZy5yZXNwb25zZXxqc29ufX08L3ByZT5cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIH1cblxuICAgICAgQGlmIChhcGlMb2cuaGVhZGVycykge1xuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgSGVhZGVyc1xuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgPHByZT57e2FwaUxvZy5oZWFkZXJzfGpzb259fTwvcHJlPlxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgRG9uZVxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbjwvZnMtZGlhbG9nPlxuIl19
|
|
@@ -58,7 +58,7 @@ export class ApiLogsComponent {
|
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ApiLogsComponent, isStandalone: true, selector: "fs-system-api-logs", inputs: { loadApiLogs: "loadApiLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n @if (row.direction=='outgoing') {\n <mat-icon class=\"direction\">arrow_upward</mat-icon>\n }\n @if (row.direction=='incoming') {\n <mat-icon class=\"direction\">arrow_downward</mat-icon>\n }\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n @if (row.code) {\n <span class=\"code\" [ngClass]=\"{'success': row.code
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ApiLogsComponent, isStandalone: true, selector: "fs-system-api-logs", inputs: { loadApiLogs: "loadApiLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n @if (row.direction=='outgoing') {\n <mat-icon class=\"direction\">arrow_upward</mat-icon>\n }\n @if (row.direction=='incoming') {\n <mat-icon class=\"direction\">arrow_downward</mat-icon>\n }\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n @if (row.code) {\n <span class=\"code\" [ngClass]=\"{'success': row.code >= 200 && row.code < 300,'error': row.code < 200 || row.code >= 300 }\">[{{row.code}}]</span>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div>@if (row.length) {\n <small>Duration: {{ row.length | fsDateDuration }}</small>\n }</div>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [".code.success{color:green}.code.error{color:red}.direction{font-size:14px;height:14px;line-height:14px;width:14px}\n"], dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i2.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "component", type: i2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
62
62
|
}
|
|
63
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiLogsComponent, decorators: [{
|
|
64
64
|
type: Component,
|
|
@@ -67,11 +67,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
67
67
|
MatIcon,
|
|
68
68
|
NgClass,
|
|
69
69
|
FsDateModule,
|
|
70
|
-
], template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n @if (row.direction=='outgoing') {\n <mat-icon class=\"direction\">arrow_upward</mat-icon>\n }\n @if (row.direction=='incoming') {\n <mat-icon class=\"direction\">arrow_downward</mat-icon>\n }\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n @if (row.code) {\n <span class=\"code\" [ngClass]=\"{'success': row.code
|
|
70
|
+
], template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n @if (row.direction=='outgoing') {\n <mat-icon class=\"direction\">arrow_upward</mat-icon>\n }\n @if (row.direction=='incoming') {\n <mat-icon class=\"direction\">arrow_downward</mat-icon>\n }\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n @if (row.code) {\n <span class=\"code\" [ngClass]=\"{'success': row.code >= 200 && row.code < 300,'error': row.code < 200 || row.code >= 300 }\">[{{row.code}}]</span>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div>@if (row.length) {\n <small>Duration: {{ row.length | fsDateDuration }}</small>\n }</div>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [".code.success{color:green}.code.error{color:red}.direction{font-size:14px;height:14px;line-height:14px;width:14px}\n"] }]
|
|
71
71
|
}], propDecorators: { list: [{
|
|
72
72
|
type: ViewChild,
|
|
73
73
|
args: [FsListComponent, { static: true }]
|
|
74
74
|
}], loadApiLogs: [{
|
|
75
75
|
type: Input
|
|
76
76
|
}] } });
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWxvZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL2FwaS1sb2dzL2FwaS1sb2dzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9hcGktbG9ncy9hcGktbG9ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBZ0Isa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbkcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQWdCaEQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBSTdCLElBQUksQ0FBa0I7SUFFYixXQUFXLENBQTBEO0lBRTlFLE1BQU0sR0FBaUIsSUFBSSxDQUFDO0lBQzVCLFlBQVksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFNUMsUUFBUTtRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sSUFBSSxDQUFDLE1BQU07UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2pDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRTtZQUNoQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixNQUFNLEVBQUU7Z0JBQ04sUUFBUSxFQUFFLGtCQUFrQixDQUFDLElBQUk7YUFDbEM7WUFDRCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPO29CQUN0QixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsUUFBUTtpQkFDaEI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNO29CQUNyQixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsUUFBUTtvQkFDZixNQUFNLEVBQUUsWUFBWTtpQkFDckI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUztvQkFDeEIsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQztpQkFDaEM7YUFDRjtZQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUcsQ0FBQyxDQUFDO2dCQUUxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO3FCQUMzQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQzNFLENBQUM7WUFDTixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7dUdBdkRVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLDRKQUloQixlQUFlLDhEQ25DNUIsbTdDQXdDQSw2S0RmUSxZQUFZLHluQkFDWixPQUFPLDJJQUNQLE9BQU8sbUZBQ1AsWUFBWTs7MkZBR1AsZ0JBQWdCO2tCQWI1QixTQUFTOytCQUNJLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxZQUFZO3FCQUNmOzhCQU9JLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc1QixXQUFXO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcsIFBhZ2luYXRpb25TdHJhdGVneSwgRnNMaXN0TW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpTG9nU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9pbmRleC1uYW1lLXZhbHVlJztcbmltcG9ydCB7IEFwaUxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FwaS1sb2cvYXBpLWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLXN5c3RlbS1hcGktbG9ncycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwaS1sb2dzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcGktbG9ncy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBGc0xpc3RNb2R1bGUsXG4gICAgICAgIE1hdEljb24sXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIEZzRGF0ZU1vZHVsZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcGlMb2dzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG5cblxuICBAVmlld0NoaWxkKEZzTGlzdENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIGxpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBASW5wdXQoKSBwdWJsaWMgbG9hZEFwaUxvZ3M6IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8eyBkYXRhOiBhbnlbXTsgcGFnaW5nOiBhbnkgfT47XG5cbiAgcHVibGljIGNvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcbiAgcHVibGljIGFwaUxvZ1N0YXRlcyA9IGluZGV4TmFtZVZhbHVlKEFwaUxvZ1N0YXRlcyk7XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2NvbmZpZ0xpc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuKGFwaUxvZykge1xuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEFwaUxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyBhcGlMb2cgfSxcbiAgICAgIHdpZHRoOiAnODUlJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ0xpc3QoKSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBwYWdpbmc6IHtcbiAgICAgICAgc3RyYXRlZ3k6IFBhZ2luYXRpb25TdHJhdGVneS5NYW55LFxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgIGxhYmVsOiAnU3RhdHVzJyxcbiAgICAgICAgICB2YWx1ZXM6IEFwaUxvZ1N0YXRlcyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjcmVhdGVEYXRlJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5EYXRlUmFuZ2UsXG4gICAgICAgICAgbGFiZWw6IFsnRnJvbSBEYXRlJywgJ1RvIERhdGUnXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmZXRjaDogKHF1ZXJ5KSA9PiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocXVlcnksIHsgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFwaUxvZ3MocXVlcnkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+ICh7IGRhdGE6IHJlc3BvbnNlLmRhdGEsIHBhZ2luZzogcmVzcG9uc2UucGFnaW5nIH0pKSxcbiAgICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZnMtbGlzdCBbY29uZmlnXT1cImNvbmZpZ1wiPlxuICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPk5hbWU8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJvcGVuKHJvdylcIj5cbiAgICAgICAge3tyb3cudHlwZSB8fCAnVW5rbm93bid9fVxuICAgICAgICBAaWYgKHJvdy5kaXJlY3Rpb249PSdvdXRnb2luZycpIHtcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJkaXJlY3Rpb25cIj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAocm93LmRpcmVjdGlvbj09J2luY29taW5nJykge1xuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRpcmVjdGlvblwiPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgfVxuICAgICAgPC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtbj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+U3RhdHVzPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7YXBpTG9nU3RhdGVzW3Jvdy5zdGF0ZV19fVxuICAgICAgQGlmIChyb3cuY29kZSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImNvZGVcIiBbbmdDbGFzc109XCJ7J3N1Y2Nlc3MnOiByb3cuY29kZSA+PSAyMDAgJiYgcm93LmNvZGUgPCAzMDAsJ2Vycm9yJzogcm93LmNvZGUgPCAyMDAgfHwgcm93LmNvZGUgPj0gMzAwIH1cIj5be3tyb3cuY29kZX19XTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPk1lc3NhZ2U8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAge3tyb3cubWVzc2FnZX19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5EYXRlPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XG4gICAgICA8ZGl2PkBpZiAocm93Lmxlbmd0aCkge1xuICAgICAgICA8c21hbGw+RHVyYXRpb246IHt7IHJvdy5sZW5ndGggfCBmc0RhdGVEdXJhdGlvbiB9fTwvc21hbGw+XG4gICAgICB9PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbjwvZnMtbGlzdD5cbiJdfQ==
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from
|
|
2
|
-
import { MAT_DIALOG_DATA,
|
|
3
|
-
import { FsApi, RequestMethod, StreamEventData, StreamEventType } from
|
|
4
|
-
import { FsMessage } from
|
|
5
|
-
import { FsProcess } from
|
|
6
|
-
import { FsPrompt } from
|
|
7
|
-
import { Subject, timer } from
|
|
8
|
-
import { filter, map, switchMap, takeUntil, tap } from
|
|
9
|
-
import { ProcessProcessStates } from
|
|
10
|
-
import { ProcessData } from
|
|
11
|
-
import { indexNameValue } from
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, } from "@angular/core";
|
|
2
|
+
import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle, } from "@angular/material/dialog";
|
|
3
|
+
import { FsApi, RequestMethod, StreamEventData, StreamEventType, } from "@firestitch/api";
|
|
4
|
+
import { FsMessage } from "@firestitch/message";
|
|
5
|
+
import { FsProcess } from "@firestitch/process";
|
|
6
|
+
import { FsPrompt } from "@firestitch/prompt";
|
|
7
|
+
import { Subject, timer } from "rxjs";
|
|
8
|
+
import { filter, map, switchMap, takeUntil, tap } from "rxjs/operators";
|
|
9
|
+
import { ProcessProcessStates } from "../../consts";
|
|
10
|
+
import { ProcessData } from "../../data/process.data";
|
|
11
|
+
import { indexNameValue } from "../../helpers/index-name-value";
|
|
12
|
+
import { CdkScrollable } from "@angular/cdk/scrolling";
|
|
13
|
+
import { NgClass } from "@angular/common";
|
|
14
|
+
import { MatButton } from "@angular/material/button";
|
|
15
|
+
import { MatProgressSpinner } from "@angular/material/progress-spinner";
|
|
16
|
+
import { FsDateModule } from "@firestitch/date";
|
|
17
|
+
import { FsDialogModule } from "@firestitch/dialog";
|
|
18
|
+
import { FsLabelModule } from "@firestitch/label";
|
|
19
|
+
import { FsSkeletonModule } from "@firestitch/skeleton";
|
|
20
|
+
import { ProcessStates } from "./../../consts/process-states.const";
|
|
21
|
+
import { ProcessState } from "./../../enums/process-state.enum";
|
|
22
22
|
import * as i0 from "@angular/core";
|
|
23
23
|
import * as i1 from "@firestitch/skeleton";
|
|
24
24
|
import * as i2 from "@firestitch/dialog";
|
|
@@ -38,14 +38,12 @@ export class ProcessComponent {
|
|
|
38
38
|
_destroy$ = new Subject();
|
|
39
39
|
_processData = inject(ProcessData);
|
|
40
40
|
ngOnInit() {
|
|
41
|
-
this.load$()
|
|
42
|
-
.subscribe(() => {
|
|
41
|
+
this.load$().subscribe(() => {
|
|
43
42
|
this.runningRefresh();
|
|
44
43
|
});
|
|
45
44
|
}
|
|
46
45
|
load$() {
|
|
47
|
-
return this._processData.get(this.data.process.id)
|
|
48
|
-
.pipe(tap((process) => {
|
|
46
|
+
return this._processData.get(this.data.process.id).pipe(tap((process) => {
|
|
49
47
|
this.process = process;
|
|
50
48
|
this._cdRef.markForCheck();
|
|
51
49
|
}));
|
|
@@ -56,21 +54,22 @@ export class ProcessComponent {
|
|
|
56
54
|
.subscribe();
|
|
57
55
|
}
|
|
58
56
|
kill() {
|
|
59
|
-
this._prompt
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
this._prompt
|
|
58
|
+
.confirm({
|
|
59
|
+
title: "Kill process",
|
|
60
|
+
template: "Are you sure you would like to kill the process?",
|
|
62
61
|
})
|
|
63
62
|
.pipe(switchMap(() => this._processData.kill(this.data.process)), switchMap(() => this.load$()))
|
|
64
63
|
.subscribe(() => {
|
|
65
|
-
this._message.success(
|
|
64
|
+
this._message.success("Killed process");
|
|
66
65
|
});
|
|
67
66
|
}
|
|
68
67
|
run() {
|
|
69
|
-
this._process
|
|
70
|
-
.run(`Run ${this.process.name}`, this._api
|
|
68
|
+
this._process.run(`Run ${this.process.name}`, this._api
|
|
71
69
|
.stream(RequestMethod.Post, `processes/${this.process.id}/run`)
|
|
72
70
|
.pipe(tap((event) => {
|
|
73
|
-
if (event instanceof StreamEventData &&
|
|
71
|
+
if (event instanceof StreamEventData &&
|
|
72
|
+
event.type === StreamEventType.Sent) {
|
|
74
73
|
this.process.state = ProcessState.Running;
|
|
75
74
|
this._cdRef.markForCheck();
|
|
76
75
|
}
|
|
@@ -79,20 +78,42 @@ export class ProcessComponent {
|
|
|
79
78
|
}), filter((data) => !!data)));
|
|
80
79
|
}
|
|
81
80
|
queue() {
|
|
82
|
-
this._message.success(
|
|
83
|
-
this._processData
|
|
81
|
+
this._message.success("Running process");
|
|
82
|
+
this._processData
|
|
83
|
+
.queue(this.data.process)
|
|
84
84
|
.pipe(switchMap(() => this.load$()))
|
|
85
85
|
.subscribe();
|
|
86
86
|
}
|
|
87
87
|
download() {
|
|
88
88
|
this._processData.download(this.data.process);
|
|
89
89
|
}
|
|
90
|
+
get formattedProcessData() {
|
|
91
|
+
const d = this.process?.data;
|
|
92
|
+
if (d === null || d === undefined) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
let value = d;
|
|
96
|
+
if (typeof d === "string") {
|
|
97
|
+
try {
|
|
98
|
+
value = JSON.parse(d);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return d;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
return JSON.stringify(value, null, 2);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return String(value);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
90
111
|
ngOnDestroy() {
|
|
91
112
|
this._destroy$.next(null);
|
|
92
113
|
this._destroy$.complete();
|
|
93
114
|
}
|
|
94
115
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
95
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ProcessComponent, isStandalone: true, 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
|
|
116
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ProcessComponent, isStandalone: true, 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 Class\n </fs-label>\n {{ process.class || 'None' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Function\n </fs-label>\n {{ process['function'] || 'None' }}\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 @if (process.state === ProcessState.Running) {\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n }\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Notification Email\n </fs-label>\n @if (process.notify) {\n <a [href]=\"'mailto:' + process.notify\">\n {{ process.notify }}\n </a>\n } @else {\n None\n }\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n @if (process.pid) {\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n }\n </fs-label-field>\n @if (process.createDate) {\n <fs-label-field>\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.startDate) {\n <fs-label-field>\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.endDate) {\n <fs-label-field>\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.duration) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n }\n </div>\n <fs-label-field>\n <fs-label>\n Data\n </fs-label>\n @if (formattedProcessData === null) {\n None\n } @else {\n <pre class=\"log json-block\">\n {{ formattedProcessData }}\n </pre>\n }\n </fs-label-field>\n @if (process.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n }\n @if (process.log) {\n <fs-label-field>\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n }\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 @if (process.state === ProcessState.Running) {\n <button\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n }\n @if (process.state !== ProcessState.Running) {\n <button\n mat-button\n (click)=\"run()\">\n Run\n </button>\n }\n @if (( process.state !== ProcessState.Running && process.state !== ProcessState.Queued )) {\n <button\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n }\n @if (process.filename) {\n <button\n mat-button\n (click)=\"download()\">\n Download\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.json-block{max-height:320px;margin:0;overflow:auto;white-space:pre-wrap;word-break:break-word}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\n"], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i3.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i3.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i4.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "pipe", type: i4.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
96
117
|
}
|
|
97
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessComponent, decorators: [{
|
|
98
119
|
type: Component,
|
|
@@ -109,6 +130,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
109
130
|
MatButton,
|
|
110
131
|
MatDialogClose,
|
|
111
132
|
FsDateModule,
|
|
112
|
-
], 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
|
|
133
|
+
], 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 Class\n </fs-label>\n {{ process.class || 'None' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Function\n </fs-label>\n {{ process['function'] || 'None' }}\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 @if (process.state === ProcessState.Running) {\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n }\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Notification Email\n </fs-label>\n @if (process.notify) {\n <a [href]=\"'mailto:' + process.notify\">\n {{ process.notify }}\n </a>\n } @else {\n None\n }\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n @if (process.pid) {\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n }\n </fs-label-field>\n @if (process.createDate) {\n <fs-label-field>\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.startDate) {\n <fs-label-field>\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.endDate) {\n <fs-label-field>\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.duration) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n }\n </div>\n <fs-label-field>\n <fs-label>\n Data\n </fs-label>\n @if (formattedProcessData === null) {\n None\n } @else {\n <pre class=\"log json-block\">\n {{ formattedProcessData }}\n </pre>\n }\n </fs-label-field>\n @if (process.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n }\n @if (process.log) {\n <fs-label-field>\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n }\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 @if (process.state === ProcessState.Running) {\n <button\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n }\n @if (process.state !== ProcessState.Running) {\n <button\n mat-button\n (click)=\"run()\">\n Run\n </button>\n }\n @if (( process.state !== ProcessState.Running && process.state !== ProcessState.Queued )) {\n <button\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n }\n @if (process.filename) {\n <button\n mat-button\n (click)=\"download()\">\n Download\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.json-block{max-height:320px;margin:0;overflow:auto;white-space:pre-wrap;word-break:break-word}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\n"] }]
|
|
113
134
|
}] });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvcHJvY2Vzcy9wcm9jZXNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzL3Byb2Nlc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ILE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQWMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR2hF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QUFDLE9BQU8sQ0FBQzthQUN2QyxJQUFJLENBQ0gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUM5QjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7dUdBL0ZVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLHdFQ2xEN0IsMHJIQTRJWSxnUUR4R0osZ0JBQWdCLGlLQUNoQixjQUFjLGlNQUNkLGNBQWMsK0hBRWQsZ0JBQWdCLHdHQUNoQixhQUFhLGdSQUNiLE9BQU8sb0ZBQ1Asa0JBQWtCLCtLQUNsQixnQkFBZ0IsNEhBQ2hCLFNBQVMsaUxBQ1QsY0FBYyxvTEFDZCxZQUFZOzsyRkFHUCxnQkFBZ0I7a0JBcEI1QixTQUFTO3NDQUdXLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNMLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLE9BQU87d0JBQ1Asa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsY0FBYzt3QkFDZCxZQUFZO3FCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dUaXRsZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc0FwaSwgUmVxdWVzdE1ldGhvZCwgU3RyZWFtRXZlbnREYXRhLCBTdHJlYW1FdmVudFR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9hcGknO1xuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb2Nlc3MgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9jZXNzJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbmltcG9ydCB7IFByb2Nlc3NQcm9jZXNzU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IFByb2Nlc3NEYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9wcm9jZXNzLmRhdGEnO1xuaW1wb3J0IHsgaW5kZXhOYW1lVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2luZGV4LW5hbWUtdmFsdWUnO1xuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBQcm9jZXNzU3RhdGVzIH0gZnJvbSAnLi8uLi8uLi9jb25zdHMvcHJvY2Vzcy1zdGF0ZXMuY29uc3QnO1xuaW1wb3J0IHsgUHJvY2Vzc1N0YXRlIH0gZnJvbSAnLi8uLi8uLi9lbnVtcy9wcm9jZXNzLXN0YXRlLmVudW0nO1xuaW1wb3J0IHsgRnNTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NrZWxldG9uJztcbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEZzTGFiZWxNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9sYWJlbCc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IEZzRGF0ZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RhdGUnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9jZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9jZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZzU2tlbGV0b25Nb2R1bGUsXG4gICAgICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dUaXRsZSxcbiAgICAgICAgQ2RrU2Nyb2xsYWJsZSxcbiAgICAgICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICAgICAgRnNMYWJlbE1vZHVsZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyLFxuICAgICAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgICAgICBNYXRCdXR0b24sXG4gICAgICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgICAgICBGc0RhdGVNb2R1bGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgZGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuICBwcml2YXRlIF9hcGkgPSBpbmplY3QoRnNBcGkpO1xuXG5cbiAgcHVibGljIHByb2Nlc3M6IFByb2Nlc3M7XG4gIHB1YmxpYyBQcm9jZXNzU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoUHJvY2Vzc1N0YXRlcyk7XG4gIHB1YmxpYyBQcm9jZXNzUHJvY2Vzc1N0YXRlcyA9IGluZGV4TmFtZVZhbHVlKFByb2Nlc3NQcm9jZXNzU3RhdGVzKTtcbiAgcHVibGljIFByb2Nlc3NTdGF0ZSA9IFByb2Nlc3NTdGF0ZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX3Byb2Nlc3NEYXRhID0gaW5qZWN0KFByb2Nlc3NEYXRhKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkJCgpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5uaW5nUmVmcmVzaCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZCQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0RhdGEuZ2V0KHRoaXMuZGF0YS5wcm9jZXNzLmlkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocHJvY2VzcykgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3M7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuICBcbiAgcHVibGljIHJ1bm5pbmdSZWZyZXNoKCkge1xuICAgIHRpbWVyKDAsIDIwMDApXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMucHJvY2Vzcy5zdGF0ZSA9PT0gU3RyaW5nKFByb2Nlc3NTdGF0ZS5SdW5uaW5nKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWQkKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGtpbGwoKSB7XG4gICAgdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgdGl0bGU6ICdLaWxsIHByb2Nlc3MnLFxuICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8ga2lsbCB0aGUgcHJvY2Vzcz8nLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX3Byb2Nlc3NEYXRhLmtpbGwodGhpcy5kYXRhLnByb2Nlc3MpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZCQoKSksXG4gICAgICApICBcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0tpbGxlZCBwcm9jZXNzJyk7XG4gICAgICB9KTsgICBcbiAgfVxuXG4gIHB1YmxpYyBydW4oKSB7XG4gICAgdGhpcy5fcHJvY2Vzc1xuICAgICAgLnJ1bihgUnVuICR7dGhpcy5wcm9jZXNzLm5hbWV9YCwgdGhpcy5fYXBpXG4gICAgICAgIC5zdHJlYW0oXG4gICAgICAgICAgUmVxdWVzdE1ldGhvZC5Qb3N0LCBgcHJvY2Vzc2VzLyR7dGhpcy5wcm9jZXNzLmlkfS9ydW5gKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZihldmVudCBpbnN0YW5jZW9mIFN0cmVhbUV2ZW50RGF0YSAmJiBldmVudC50eXBlID09PSBTdHJlYW1FdmVudFR5cGUuU2VudCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3Muc3RhdGUgPSBQcm9jZXNzU3RhdGUuUnVubmluZztcbiAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBTdHJlYW1FdmVudERhdGEpLFxuICAgICAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmVudD8uZGF0YTtcbiAgICAgICAgICB9KSwgICBcbiAgICAgICAgICBmaWx0ZXIoKGRhdGEpID0+ICEhZGF0YSksXG4gICAgICAgICksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIHF1ZXVlKCkge1xuICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUnVubmluZyBwcm9jZXNzJyk7XG4gICAgdGhpcy5fcHJvY2Vzc0RhdGEucXVldWUodGhpcy5kYXRhLnByb2Nlc3MpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZCQoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWQoKSB7XG4gICAgdGhpcy5fcHJvY2Vzc0RhdGEuZG93bmxvYWQodGhpcy5kYXRhLnByb2Nlc3MpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG59XG4iLCI8ZnMtZGlhbG9nICpmc1NrZWxldG9uPVwicHJvY2Vzc1wiPlxuICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+XG4gICAgUHJvY2Vzc1xuICA8L2Rpdj5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1sZy53cmFwLmFsaWduLXN0YXJ0XCI+XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBOYW1lXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLnByZXR0eU5hbWUgfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIFN0YXR1c1xuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncnVubmluZyc6IHByb2Nlc3Muc3RhdGUgPT09IFByb2Nlc3NTdGF0ZS5SdW5uaW5nIH1cIj5cbiAgICAgICAgICAgIHt7IFByb2Nlc3NTdGF0ZXNbcHJvY2Vzcy5zdGF0ZV0gfX1cbiAgICAgICAgICAgIEBpZiAocHJvY2Vzcy5zdGF0ZSA9PT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjIwXCJcbiAgICAgICAgICAgICAgICBbbW9kZV09XCInaW5kZXRlcm1pbmF0ZSdcIj5cbiAgICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgQGlmIChwcm9jZXNzLm5vdGlmeSkge1xuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgTm90aWZpY2F0aW9uIEVtYWlsXG4gICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAge3sgcHJvY2Vzcy5ub3RpZnkgfX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICB9XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBQcm9jZXNzIElEXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLnBpZCB8fCAnTm9uZScgfX1cbiAgICAgICAgICBAaWYgKHByb2Nlc3MucGlkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIj5cbiAgICAgICAgICAgICAge3sgUHJvY2Vzc1Byb2Nlc3NTdGF0ZXNbcHJvY2Vzcy5wcm9jZXNzU3RhdGVdIHx8ICdVbmtub3duJyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICBAaWYgKHByb2Nlc3MuY3JlYXRlRGF0ZSkge1xuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgQ3JlYXRlIERhdGVcbiAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICB7eyBwcm9jZXNzLmNyZWF0ZURhdGUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnIH19XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHByb2Nlc3Muc3RhcnREYXRlKSB7XG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICBTdGFydCBEYXRlXG4gICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAge3sgcHJvY2Vzcy5zdGFydERhdGUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnIH19XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHByb2Nlc3MuZW5kRGF0ZSkge1xuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgQ29tcGxldGUgRGF0ZVxuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7IHByb2Nlc3MuZW5kRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAocHJvY2Vzcy5kdXJhdGlvbikge1xuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgRHVyYXRpb25cbiAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICB7eyBwcm9jZXNzLmR1cmF0aW9uIHwgZnNEYXRlRHVyYXRpb246IHtob3VyczogdHJ1ZSwgbWludXRlczogdHJ1ZSwgc2Vjb25kczogdHJ1ZX0gfX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAocHJvY2Vzcy5tZXNzYWdlKSB7XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBNZXNzYWdlXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLm1lc3NhZ2UgfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIH1cbiAgICAgIEBpZiAocHJvY2Vzcy5sb2cpIHtcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIExvZ1xuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ1wiPlxuICAgICAgICAgICAge3sgcHJvY2Vzcy5sb2cgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgIENsb3NlXG4gICAgPC9idXR0b24+XG4gICAgQGlmIChwcm9jZXNzLnN0YXRlID09PSBQcm9jZXNzU3RhdGUuUnVubmluZykge1xuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJraWxsKClcIj5cbiAgICAgICAgS2lsbFxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAocHJvY2Vzcy5zdGF0ZSAhPT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmcpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwicnVuKClcIj5cbiAgICAgICAgUnVuXG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmICgoXG4gICAgICBwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZyAmJlxuICAgICAgcHJvY2Vzcy5zdGF0ZSAhPT0gUHJvY2Vzc1N0YXRlLlF1ZXVlZFxuICAgICAgKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJxdWV1ZSgpXCI+XG4gICAgICAgIFF1ZXVlXG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmIChwcm9jZXNzLmZpbGVuYW1lKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKClcIj5cbiAgICAgICAgRG93bmxvYWRcbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz4iXX0=
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvcHJvY2Vzcy9wcm9jZXNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9wcm9jZXNzL3Byb2Nlc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDakIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQ0gsS0FBSyxFQUNMLGFBQWEsRUFDYixlQUFlLEVBQ2YsZUFBZSxHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBYyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7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LGdCQUFnQixpS0FDaEIsY0FBYyxpTUFDZCxjQUFjLCtIQUVkLGdCQUFnQix3R0FDaEIsYUFBYSxnUkFDYixPQUFPLG9GQUNQLGtCQUFrQiwrS0FDbEIsZ0JBQWdCLDRIQUNoQixTQUFTLGlMQUNULGNBQWMsb0xBQ2QsWUFBWTs7MkZBR0gsZ0JBQWdCO2tCQXBCNUIsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixPQUFPO3dCQUNQLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULGNBQWM7d0JBQ2QsWUFBWTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIGluamVjdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQge1xuICAgIE1BVF9ESUFMT0dfREFUQSxcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgTWF0RGlhbG9nVGl0bGUsXG59IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcblxuaW1wb3J0IHtcbiAgICBGc0FwaSxcbiAgICBSZXF1ZXN0TWV0aG9kLFxuICAgIFN0cmVhbUV2ZW50RGF0YSxcbiAgICBTdHJlYW1FdmVudFR5cGUsXG59IGZyb20gXCJAZmlyZXN0aXRjaC9hcGlcIjtcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gXCJAZmlyZXN0aXRjaC9tZXNzYWdlXCI7XG5pbXBvcnQgeyBGc1Byb2Nlc3MgfSBmcm9tIFwiQGZpcmVzdGl0Y2gvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tIFwiQGZpcmVzdGl0Y2gvcHJvbXB0XCI7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IFByb2Nlc3NQcm9jZXNzU3RhdGVzIH0gZnJvbSBcIi4uLy4uL2NvbnN0c1wiO1xuaW1wb3J0IHsgUHJvY2Vzc0RhdGEgfSBmcm9tIFwiLi4vLi4vZGF0YS9wcm9jZXNzLmRhdGFcIjtcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvaW5kZXgtbmFtZS12YWx1ZVwiO1xuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3Njcm9sbGluZ1wiO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyXCI7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tIFwiQGZpcmVzdGl0Y2gvZGF0ZVwiO1xuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tIFwiQGZpcmVzdGl0Y2gvZGlhbG9nXCI7XG5pbXBvcnQgeyBGc0xhYmVsTW9kdWxlIH0gZnJvbSBcIkBmaXJlc3RpdGNoL2xhYmVsXCI7XG5pbXBvcnQgeyBGc1NrZWxldG9uTW9kdWxlIH0gZnJvbSBcIkBmaXJlc3RpdGNoL3NrZWxldG9uXCI7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdGVzIH0gZnJvbSBcIi4vLi4vLi4vY29uc3RzL3Byb2Nlc3Mtc3RhdGVzLmNvbnN0XCI7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdGUgfSBmcm9tIFwiLi8uLi8uLi9lbnVtcy9wcm9jZXNzLXN0YXRlLmVudW1cIjtcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvY2Vzcy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vcHJvY2Vzcy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGc1NrZWxldG9uTW9kdWxlLFxuICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgIE1hdERpYWxvZ1RpdGxlLFxuICAgIENka1Njcm9sbGFibGUsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBGc0xhYmVsTW9kdWxlLFxuICAgIE5nQ2xhc3MsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyLFxuICAgIE1hdERpYWxvZ0FjdGlvbnMsXG4gICAgTWF0QnV0dG9uLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIEZzRGF0ZU1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgZGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuICBwcml2YXRlIF9hcGkgPSBpbmplY3QoRnNBcGkpO1xuXG4gIHB1YmxpYyBwcm9jZXNzOiBQcm9jZXNzO1xuICBwdWJsaWMgUHJvY2Vzc1N0YXRlcyA9IGluZGV4TmFtZVZhbHVlKFByb2Nlc3NTdGF0ZXMpO1xuICBwdWJsaWMgUHJvY2Vzc1Byb2Nlc3NTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShQcm9jZXNzUHJvY2Vzc1N0YXRlcyk7XG4gIHB1YmxpYyBQcm9jZXNzU3RhdGUgPSBQcm9jZXNzU3RhdGU7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9wcm9jZXNzRGF0YSA9IGluamVjdChQcm9jZXNzRGF0YSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZCQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ydW5uaW5nUmVmcmVzaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGxvYWQkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NEYXRhLmdldCh0aGlzLmRhdGEucHJvY2Vzcy5pZCkucGlwZShcbiAgICAgIHRhcCgocHJvY2VzcykgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSBwcm9jZXNzO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcnVubmluZ1JlZnJlc2goKSB7XG4gICAgdGltZXIoMCwgMjAwMClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5wcm9jZXNzLnN0YXRlID09PSBTdHJpbmcoUHJvY2Vzc1N0YXRlLlJ1bm5pbmcpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZCQoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMga2lsbCgpIHtcbiAgICB0aGlzLl9wcm9tcHRcbiAgICAgIC5jb25maXJtKHtcbiAgICAgICAgdGl0bGU6IFwiS2lsbCBwcm9jZXNzXCIsXG4gICAgICAgIHRlbXBsYXRlOiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBraWxsIHRoZSBwcm9jZXNzP1wiLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fcHJvY2Vzc0RhdGEua2lsbCh0aGlzLmRhdGEucHJvY2VzcykpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkJCgpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoXCJLaWxsZWQgcHJvY2Vzc1wiKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJ1bigpIHtcbiAgICB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgIGBSdW4gJHt0aGlzLnByb2Nlc3MubmFtZX1gLFxuICAgICAgdGhpcy5fYXBpXG4gICAgICAgIC5zdHJlYW0oUmVxdWVzdE1ldGhvZC5Qb3N0LCBgcHJvY2Vzc2VzLyR7dGhpcy5wcm9jZXNzLmlkfS9ydW5gKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgU3RyZWFtRXZlbnREYXRhICYmXG4gICAgICAgICAgICAgIGV2ZW50LnR5cGUgPT09IFN0cmVhbUV2ZW50VHlwZS5TZW50XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzLnN0YXRlID0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmc7XG4gICAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgU3RyZWFtRXZlbnREYXRhKSxcbiAgICAgICAgICBtYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQ/LmRhdGE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmlsdGVyKChkYXRhKSA9PiAhIWRhdGEpLFxuICAgICAgICApLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcXVldWUoKSB7XG4gICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKFwiUnVubmluZyBwcm9jZXNzXCIpO1xuICAgIHRoaXMuX3Byb2Nlc3NEYXRhXG4gICAgICAucXVldWUodGhpcy5kYXRhLnByb2Nlc3MpXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkJCgpKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZCgpIHtcbiAgICB0aGlzLl9wcm9jZXNzRGF0YS5kb3dubG9hZCh0aGlzLmRhdGEucHJvY2Vzcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcm1hdHRlZFByb2Nlc3NEYXRhKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGQgPSB0aGlzLnByb2Nlc3M/LmRhdGE7XG4gICAgaWYgKGQgPT09IG51bGwgfHwgZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IHZhbHVlOiB1bmtub3duID0gZDtcbiAgICBpZiAodHlwZW9mIGQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZShkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8ZnMtZGlhbG9nICpmc1NrZWxldG9uPVwicHJvY2Vzc1wiPlxuICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+XG4gICAgUHJvY2Vzc1xuICA8L2Rpdj5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1sZy53cmFwLmFsaWduLXN0YXJ0XCI+XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBOYW1lXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLnByZXR0eU5hbWUgfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIENsYXNzXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICB7eyBwcm9jZXNzLmNsYXNzIHx8ICdOb25lJyB9fVxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgRnVuY3Rpb25cbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7IHByb2Nlc3NbJ2Z1bmN0aW9uJ10gfHwgJ05vbmUnIH19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBTdGF0dXNcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdydW5uaW5nJzogcHJvY2Vzcy5zdGF0ZSA9PT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmcgfVwiPlxuICAgICAgICAgICAge3sgUHJvY2Vzc1N0YXRlc1twcm9jZXNzLnN0YXRlXSB9fVxuICAgICAgICAgICAgQGlmIChwcm9jZXNzLnN0YXRlID09PSBQcm9jZXNzU3RhdGUuUnVubmluZykge1xuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjBcIlxuICAgICAgICAgICAgICAgIFttb2RlXT1cIidpbmRldGVybWluYXRlJ1wiPlxuICAgICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgTm90aWZpY2F0aW9uIEVtYWlsXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICBAaWYgKHByb2Nlc3Mubm90aWZ5KSB7XG4gICAgICAgICAgICA8YSBbaHJlZl09XCInbWFpbHRvOicgKyBwcm9jZXNzLm5vdGlmeVwiPlxuICAgICAgICAgICAgICB7eyBwcm9jZXNzLm5vdGlmeSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgTm9uZVxuICAgICAgICAgIH1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIFByb2Nlc3MgSURcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7IHByb2Nlc3MucGlkIHx8ICdOb25lJyB9fVxuICAgICAgICAgIEBpZiAocHJvY2Vzcy5waWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICB7eyBQcm9jZXNzUHJvY2Vzc1N0YXRlc1twcm9jZXNzLnByb2Nlc3NTdGF0ZV0gfHwgJ1Vua25vd24nIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIEBpZiAocHJvY2Vzcy5jcmVhdGVEYXRlKSB7XG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICBDcmVhdGUgRGF0ZVxuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7IHByb2Nlc3MuY3JlYXRlRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAocHJvY2Vzcy5zdGFydERhdGUpIHtcbiAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgIFN0YXJ0IERhdGVcbiAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICB7eyBwcm9jZXNzLnN0YXJ0RGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAocHJvY2Vzcy5lbmREYXRlKSB7XG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICBDb21wbGV0ZSBEYXRlXG4gICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAge3sgcHJvY2Vzcy5lbmREYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJyB9fVxuICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChwcm9jZXNzLmR1cmF0aW9uKSB7XG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICBEdXJhdGlvblxuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7IHByb2Nlc3MuZHVyYXRpb24gfCBmc0RhdGVEdXJhdGlvbjoge2hvdXJzOiB0cnVlLCBtaW51dGVzOiB0cnVlLCBzZWNvbmRzOiB0cnVlfSB9fVxuICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgRGF0YVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICBAaWYgKGZvcm1hdHRlZFByb2Nlc3NEYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgTm9uZVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8cHJlIGNsYXNzPVwibG9nIGpzb24tYmxvY2tcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZFByb2Nlc3NEYXRhIH19XG4gICAgICAgICAgPC9wcmU+XG4gICAgICAgIH1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICBAaWYgKHByb2Nlc3MubWVzc2FnZSkge1xuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgTWVzc2FnZVxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3sgcHJvY2Vzcy5tZXNzYWdlIH19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICB9XG4gICAgICBAaWYgKHByb2Nlc3MubG9nKSB7XG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICBMb2dcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dcIj5cbiAgICAgICAgICAgIHt7IHByb2Nlc3MubG9nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICBDbG9zZVxuICAgIDwvYnV0dG9uPlxuICAgIEBpZiAocHJvY2Vzcy5zdGF0ZSA9PT0gUHJvY2Vzc1N0YXRlLlJ1bm5pbmcpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImtpbGwoKVwiPlxuICAgICAgICBLaWxsXG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmIChwcm9jZXNzLnN0YXRlICE9PSBQcm9jZXNzU3RhdGUuUnVubmluZykge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwicnVuKClcIj5cbiAgICAgICAgUnVuXG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmICgoIHByb2Nlc3Muc3RhdGUgIT09IFByb2Nlc3NTdGF0ZS5SdW5uaW5nICYmIHByb2Nlc3Muc3RhdGUgIT09IFByb2Nlc3NTdGF0ZS5RdWV1ZWQgKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwicXVldWUoKVwiPlxuICAgICAgICBRdWV1ZVxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAocHJvY2Vzcy5maWxlbmFtZSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWQoKVwiPlxuICAgICAgICBEb3dubG9hZFxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbjwvZnMtZGlhbG9nPiJdfQ==
|