@alauda-fe/common
Version:
Alauda frontend team common codes.
76 lines • 14.8 kB
JavaScript
import { HttpClient } from '@angular/common/http';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core';
import { of, Subject, catchError, startWith, switchMap, takeUntil, map, } from 'rxjs';
import { API_GATEWAY, K8sUtilService, publishRef, } from '../../../../core/public-api';
import { ResourceListBase } from '../../base-list';
import { ResourceSelectContextService } from '../../context.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
import * as i2 from "../../context.service";
import * as i3 from "../../../../core/public-api";
import * as i4 from "../../internals/data-grid/component";
export class ClusterListComponent extends ResourceListBase {
constructor(http, contextService, cdr, k8sUtil) {
super(cdr, k8sUtil, contextService);
this.http = http;
this.type = 'cluster';
this.clusters = [];
this.clusters$ = this.reload$$.pipe(startWith(null), switchMap(() => this.http.get(`${API_GATEWAY}/auth/v1/clusters`)), map(list => list.items), catchError(() => of([])), takeUntil(this.destroy$$), publishRef());
this.loadClusterInfo$$ = new Subject();
}
ngOnInit() {
this.clusters = this.contextService.cachedClusters;
this.setSelected();
this.clusters$.subscribe(clusters => {
this.clusters = this.mapResource(clusters);
this.setSelected();
this.loading = false;
this.forceLoading = false;
this.loadClusterInfo$$.next(clusters);
this.cdr.markForCheck();
});
}
setSelected() {
this.selectedCluster = this.clusters.find(c => c.name === this.value);
}
ngOnDestroy() {
this.destroy$$.next();
this.destroy$$.complete();
}
mapResource(list) {
return list.map(item => ({
name: this.k8sUtil.getName(item),
displayName: this.k8sUtil.getDisplayName(item),
status: this.getClusterStatus(item),
timestamp: item.metadata.creationTimestamp,
__origin: item,
}));
}
getClusterStatus(cluster) {
if (cluster?.status) {
const clusterStatus = cluster.status.conditions.find(condition => condition.type === 'ComponentNotHealthy');
if (clusterStatus) {
return clusterStatus.status.toLowerCase() === 'true'
? 'abnormal'
: 'normal';
}
}
return 'abnormal';
}
static { this.ɵfac = function ClusterListComponent_Factory(t) { return new (t || ClusterListComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i2.ResourceSelectContextService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.K8sUtilService)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClusterListComponent, selectors: [["acl-cluster-list"]], inputs: { value: "value" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 7, consts: [[3, "selectItem", "reload", "data", "fields", "context", "popupLite", "selectedUid", "type", "loading"]], template: function ClusterListComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "acl-resource-data-grid", 0);
i0.ɵɵlistener("selectItem", function ClusterListComponent_Template_acl_resource_data_grid_selectItem_0_listener($event) { return ctx.onSelect($event); })("reload", function ClusterListComponent_Template_acl_resource_data_grid_reload_0_listener() { return ctx.reload(); });
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("data", ctx.clusters)("fields", ctx.fields)("context", ctx.context)("popupLite", ctx.popupLite)("selectedUid", ctx.selectedCluster == null ? null : ctx.selectedCluster.__origin.metadata.uid)("type", ctx.type)("loading", ctx.forceLoading || !(ctx.clusters == null ? null : ctx.clusters.length) && ctx.loading);
} }, dependencies: [i4.ResourceDataGridComponent], styles: ["[_nghost-%COMP%]{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter[_ngcontent-%COMP%]{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter[_ngcontent-%COMP%] aui-form-item[_ngcontent-%COMP%] .aui-form-item{margin-bottom:0}.filter__project[_ngcontent-%COMP%]{margin-right:50px;padding-bottom:8px}.filter__project[_ngcontent-%COMP%] aui-select[_ngcontent-%COMP%]{width:240px}.filter__cluster[_ngcontent-%COMP%]{flex:1}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%]{margin-bottom:8px;display:inline-flex}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag{border:none}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}"], changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClusterListComponent, [{
type: Component,
args: [{ selector: 'acl-cluster-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<acl-resource-data-grid\n [data]=\"clusters\"\n [fields]=\"fields\"\n [context]=\"context\"\n [popupLite]=\"popupLite\"\n (selectItem)=\"onSelect($event)\"\n [selectedUid]=\"selectedCluster?.__origin.metadata.uid\"\n [type]=\"type\"\n [loading]=\"forceLoading || (!clusters?.length && loading)\"\n (reload)=\"reload()\"\n></acl-resource-data-grid>\n", styles: [":host{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter aui-form-item ::ng-deep .aui-form-item{margin-bottom:0}.filter__project{margin-right:50px;padding-bottom:8px}.filter__project aui-select{width:240px}.filter__cluster{flex:1}.cluster-tags aui-check-tag{margin-bottom:8px;display:inline-flex}.cluster-tags aui-check-tag::ng-deep .aui-tag{border:none}.cluster-tags aui-check-tag::ng-deep .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}\n"] }]
}], () => [{ type: i1.HttpClient }, { type: i2.ResourceSelectContextService }, { type: i0.ChangeDetectorRef }, { type: i3.K8sUtilService }], { value: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClusterListComponent, { className: "ClusterListComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2J1c2luZXNzL3Jlc291cmNlLXNlbGVjdC9leHBvcnRzL2NsdXN0ZXItbGlzdC9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvYnVzaW5lc3MvcmVzb3VyY2Utc2VsZWN0L2V4cG9ydHMvY2x1c3Rlci1saXN0L3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEVBQUUsRUFDRixPQUFPLEVBQ1AsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFHTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFTckUsTUFBTSxPQUFPLG9CQUNYLFNBQVEsZ0JBQWdCO0lBMkJ4QixZQUNtQixJQUFnQixFQUNqQyxjQUE0QyxFQUM1QyxHQUFzQixFQUN0QixPQUF1QjtRQUV2QixLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUxuQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBdEJuQyxTQUFJLEdBQUcsU0FBa0IsQ0FBQztRQUkxQixhQUFRLEdBQXNCLEVBQUUsQ0FBQztRQUVqQyxjQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxJQUFZLENBQUMsRUFDdkIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNYLEdBQUcsV0FBVyxtQkFBbUIsQ0FDbEMsQ0FDRixFQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFlLENBQUMsQ0FBQyxFQUNyQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixVQUFVLEVBQUUsQ0FDYixDQUFDO1FBRUYsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQWEsQ0FBQztJQVM3QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDbkQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFUSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDOUMsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1lBQzFDLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBaUI7UUFDaEMsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNsRCxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQ3RELENBQUM7WUFDRixJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtvQkFDbEQsQ0FBQyxDQUFDLFVBQVU7b0JBQ1osQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztxRkFqRlUsb0JBQW9CO29FQUFwQixvQkFBb0I7WUNwQ2pDLGlEQVVDO1lBREMsQUFKQSxpSUFBYyxvQkFBZ0IsSUFBQyxzR0FJckIsWUFBUSxJQUFDO1lBQ3BCLGlCQUF5Qjs7WUFGeEIsQUFEQSxBQURBLEFBRkEsQUFEQSxBQURBLEFBREEsbUNBQWlCLHNCQUNBLHdCQUNFLDRCQUNJLCtGQUUrQixrQkFDekMsb0dBQzZDOzs7aUZENEIvQyxvQkFBb0I7Y0FOaEMsU0FBUzsyQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTttSkFPL0MsS0FBSztrQkFESixLQUFLOztrRkFKSyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBvZixcbiAgU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgbWFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgQ2x1c3RlcixcbiAgS3ViZXJuZXRlc1Jlc291cmNlTGlzdCxcbiAgQVBJX0dBVEVXQVksXG4gIEs4c1V0aWxTZXJ2aWNlLFxuICBwdWJsaXNoUmVmLFxufSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgUmVzb3VyY2VMaXN0QmFzZSB9IGZyb20gJy4uLy4uL2Jhc2UtbGlzdCc7XG5pbXBvcnQgeyBSZXNvdXJjZVNlbGVjdENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENsdXN0ZXJEYXRhSXRlbSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLWNsdXN0ZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2x1c3Rlckxpc3RDb21wb25lbnRcbiAgZXh0ZW5kcyBSZXNvdXJjZUxpc3RCYXNlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KClcbiAgdmFsdWU6IHN0cmluZztcblxuICB0eXBlID0gJ2NsdXN0ZXInIGFzIGNvbnN0O1xuXG4gIHNlbGVjdGVkQ2x1c3RlcjogQ2x1c3RlckRhdGFJdGVtO1xuXG4gIGNsdXN0ZXJzOiBDbHVzdGVyRGF0YUl0ZW1bXSA9IFtdO1xuXG4gIGNsdXN0ZXJzJCA9IHRoaXMucmVsb2FkJCQucGlwZShcbiAgICBzdGFydFdpdGgobnVsbCBhcyB2b2lkKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuaHR0cC5nZXQ8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxDbHVzdGVyPj4oXG4gICAgICAgIGAke0FQSV9HQVRFV0FZfS9hdXRoL3YxL2NsdXN0ZXJzYCxcbiAgICAgICksXG4gICAgKSxcbiAgICBtYXAobGlzdCA9PiBsaXN0Lml0ZW1zKSxcbiAgICBjYXRjaEVycm9yKCgpID0+IG9mKFtdIGFzIENsdXN0ZXJbXSkpLFxuICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGxvYWRDbHVzdGVySW5mbyQkID0gbmV3IFN1YmplY3Q8Q2x1c3RlcltdPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBjb250ZXh0U2VydmljZTogUmVzb3VyY2VTZWxlY3RDb250ZXh0U2VydmljZSxcbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGs4c1V0aWw6IEs4c1V0aWxTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcihjZHIsIGs4c1V0aWwsIGNvbnRleHRTZXJ2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2x1c3RlcnMgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNhY2hlZENsdXN0ZXJzO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcbiAgICB0aGlzLmNsdXN0ZXJzJC5zdWJzY3JpYmUoY2x1c3RlcnMgPT4ge1xuICAgICAgdGhpcy5jbHVzdGVycyA9IHRoaXMubWFwUmVzb3VyY2UoY2x1c3RlcnMpO1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcmNlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkQ2x1c3RlckluZm8kJC5uZXh0KGNsdXN0ZXJzKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2x1c3RlciA9IHRoaXMuY2x1c3RlcnMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy52YWx1ZSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG1hcFJlc291cmNlKGxpc3Q6IENsdXN0ZXJbXSk6IENsdXN0ZXJEYXRhSXRlbVtdIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoaXRlbSA9PiAoe1xuICAgICAgbmFtZTogdGhpcy5rOHNVdGlsLmdldE5hbWUoaXRlbSksXG4gICAgICBkaXNwbGF5TmFtZTogdGhpcy5rOHNVdGlsLmdldERpc3BsYXlOYW1lKGl0ZW0pLFxuICAgICAgc3RhdHVzOiB0aGlzLmdldENsdXN0ZXJTdGF0dXMoaXRlbSksXG4gICAgICB0aW1lc3RhbXA6IGl0ZW0ubWV0YWRhdGEuY3JlYXRpb25UaW1lc3RhbXAsXG4gICAgICBfX29yaWdpbjogaXRlbSxcbiAgICB9KSk7XG4gIH1cblxuICBnZXRDbHVzdGVyU3RhdHVzKGNsdXN0ZXI/OiBDbHVzdGVyKSB7XG4gICAgaWYgKGNsdXN0ZXI/LnN0YXR1cykge1xuICAgICAgY29uc3QgY2x1c3RlclN0YXR1cyA9IGNsdXN0ZXIuc3RhdHVzLmNvbmRpdGlvbnMuZmluZChcbiAgICAgICAgY29uZGl0aW9uID0+IGNvbmRpdGlvbi50eXBlID09PSAnQ29tcG9uZW50Tm90SGVhbHRoeScsXG4gICAgICApO1xuICAgICAgaWYgKGNsdXN0ZXJTdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIGNsdXN0ZXJTdGF0dXMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgICAgICAgID8gJ2Fibm9ybWFsJ1xuICAgICAgICAgIDogJ25vcm1hbCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnYWJub3JtYWwnO1xuICB9XG59XG4iLCI8YWNsLXJlc291cmNlLWRhdGEtZ3JpZFxuICBbZGF0YV09XCJjbHVzdGVyc1wiXG4gIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtwb3B1cExpdGVdPVwicG9wdXBMaXRlXCJcbiAgKHNlbGVjdEl0ZW0pPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gIFtzZWxlY3RlZFVpZF09XCJzZWxlY3RlZENsdXN0ZXI/Ll9fb3JpZ2luLm1ldGFkYXRhLnVpZFwiXG4gIFt0eXBlXT1cInR5cGVcIlxuICBbbG9hZGluZ109XCJmb3JjZUxvYWRpbmcgfHwgKCFjbHVzdGVycz8ubGVuZ3RoICYmIGxvYWRpbmcpXCJcbiAgKHJlbG9hZCk9XCJyZWxvYWQoKVwiXG4+PC9hY2wtcmVzb3VyY2UtZGF0YS1ncmlkPlxuIl19