ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
175 lines (173 loc) • 19.5 kB
JavaScript
import { NgIf, NgSwitch, NgSwitchCase } from '@angular/common';
import { ChangeDetectionStrategy, Component, Input, Optional, ViewEncapsulation } from '@angular/core';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { NzOutletModule } from 'ng-zorro-antd/core/outlet';
import { NzIconModule } from 'ng-zorro-antd/icon';
import { NzResultNotFoundComponent } from './partial/not-found';
import { NzResultServerErrorComponent } from './partial/server-error.component';
import { NzResultUnauthorizedComponent } from './partial/unauthorized';
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/bidi";
import * as i2 from "ng-zorro-antd/core/outlet";
import * as i3 from "ng-zorro-antd/icon";
const IconMap = {
success: 'check-circle',
error: 'close-circle',
info: 'exclamation-circle',
warning: 'warning'
};
const ExceptionStatus = ['404', '500', '403'];
export class NzResultComponent {
constructor(cdr, directionality) {
this.cdr = cdr;
this.directionality = directionality;
this.nzStatus = 'info';
this.isException = false;
this.dir = 'ltr';
this.destroy$ = new Subject();
}
ngOnInit() {
this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction) => {
this.dir = direction;
this.cdr.detectChanges();
});
this.dir = this.directionality.value;
}
ngOnChanges() {
this.setStatusIcon();
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
setStatusIcon() {
const icon = this.nzIcon;
this.isException = ExceptionStatus.indexOf(this.nzStatus) !== -1;
this.icon = icon
? typeof icon === 'string'
? IconMap[icon] || icon
: icon
: this.isException
? undefined
: IconMap[this.nzStatus];
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzResultComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: NzResultComponent, isStandalone: true, selector: "nz-result", inputs: { nzIcon: "nzIcon", nzTitle: "nzTitle", nzStatus: "nzStatus", nzSubTitle: "nzSubTitle", nzExtra: "nzExtra" }, host: { properties: { "class.ant-result-success": "nzStatus === 'success'", "class.ant-result-error": "nzStatus === 'error'", "class.ant-result-info": "nzStatus === 'info'", "class.ant-result-warning": "nzStatus === 'warning'", "class.ant-result-rtl": "dir === 'rtl'" }, classAttribute: "ant-result" }, exportAs: ["nzResult"], usesOnChanges: true, ngImport: i0, template: `
<div class="ant-result-icon">
<ng-container *ngIf="!isException; else exceptionTpl">
<ng-container *ngIf="icon">
<ng-container *nzStringTemplateOutlet="icon; let icon">
<span nz-icon [nzType]="icon" nzTheme="fill"></span>
</ng-container>
</ng-container>
<ng-content *ngIf="!icon" select="[nz-result-icon]"></ng-content>
</ng-container>
</div>
<ng-container *ngIf="nzTitle">
<div class="ant-result-title" *nzStringTemplateOutlet="nzTitle">
{{ nzTitle }}
</div>
</ng-container>
<ng-content *ngIf="!nzTitle" select="div[nz-result-title]"></ng-content>
<ng-container *ngIf="nzSubTitle">
<div class="ant-result-subtitle" *nzStringTemplateOutlet="nzSubTitle">
{{ nzSubTitle }}
</div>
</ng-container>
<ng-content *ngIf="!nzSubTitle" select="div[nz-result-subtitle]"></ng-content>
<ng-content select="nz-result-content, [nz-result-content]"></ng-content>
<div class="ant-result-extra" *ngIf="nzExtra">
<ng-container *nzStringTemplateOutlet="nzExtra">
{{ nzExtra }}
</ng-container>
</div>
<ng-content *ngIf="!nzExtra" select="div[nz-result-extra]"></ng-content>
<ng-template #exceptionTpl>
<ng-container [ngSwitch]="nzStatus">
<nz-result-not-found *ngSwitchCase="'404'"></nz-result-not-found>
<nz-result-server-error *ngSwitchCase="'500'"></nz-result-server-error>
<nz-result-unauthorized *ngSwitchCase="'403'"></nz-result-unauthorized>
</ng-container>
</ng-template>
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NzOutletModule }, { kind: "directive", type: i2.NzStringTemplateOutletDirective, selector: "[nzStringTemplateOutlet]", inputs: ["nzStringTemplateOutletContext", "nzStringTemplateOutlet"], exportAs: ["nzStringTemplateOutlet"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i3.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "component", type: NzResultNotFoundComponent, selector: "nz-result-not-found", exportAs: ["nzResultNotFound"] }, { kind: "component", type: NzResultServerErrorComponent, selector: "nz-result-server-error", exportAs: ["nzResultServerError"] }, { kind: "component", type: NzResultUnauthorizedComponent, selector: "nz-result-unauthorized", exportAs: ["nzResultUnauthorized"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzResultComponent, decorators: [{
type: Component,
args: [{
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
selector: 'nz-result',
exportAs: 'nzResult',
template: `
<div class="ant-result-icon">
<ng-container *ngIf="!isException; else exceptionTpl">
<ng-container *ngIf="icon">
<ng-container *nzStringTemplateOutlet="icon; let icon">
<span nz-icon [nzType]="icon" nzTheme="fill"></span>
</ng-container>
</ng-container>
<ng-content *ngIf="!icon" select="[nz-result-icon]"></ng-content>
</ng-container>
</div>
<ng-container *ngIf="nzTitle">
<div class="ant-result-title" *nzStringTemplateOutlet="nzTitle">
{{ nzTitle }}
</div>
</ng-container>
<ng-content *ngIf="!nzTitle" select="div[nz-result-title]"></ng-content>
<ng-container *ngIf="nzSubTitle">
<div class="ant-result-subtitle" *nzStringTemplateOutlet="nzSubTitle">
{{ nzSubTitle }}
</div>
</ng-container>
<ng-content *ngIf="!nzSubTitle" select="div[nz-result-subtitle]"></ng-content>
<ng-content select="nz-result-content, [nz-result-content]"></ng-content>
<div class="ant-result-extra" *ngIf="nzExtra">
<ng-container *nzStringTemplateOutlet="nzExtra">
{{ nzExtra }}
</ng-container>
</div>
<ng-content *ngIf="!nzExtra" select="div[nz-result-extra]"></ng-content>
<ng-template #exceptionTpl>
<ng-container [ngSwitch]="nzStatus">
<nz-result-not-found *ngSwitchCase="'404'"></nz-result-not-found>
<nz-result-server-error *ngSwitchCase="'500'"></nz-result-server-error>
<nz-result-unauthorized *ngSwitchCase="'403'"></nz-result-unauthorized>
</ng-container>
</ng-template>
`,
host: {
class: 'ant-result',
'[class.ant-result-success]': `nzStatus === 'success'`,
'[class.ant-result-error]': `nzStatus === 'error'`,
'[class.ant-result-info]': `nzStatus === 'info'`,
'[class.ant-result-warning]': `nzStatus === 'warning'`,
'[class.ant-result-rtl]': `dir === 'rtl'`
},
imports: [
NgIf,
NzOutletModule,
NzIconModule,
NgSwitch,
NzResultNotFoundComponent,
NzResultServerErrorComponent,
NzResultUnauthorizedComponent,
NgSwitchCase
],
standalone: true
}]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Directionality, decorators: [{
type: Optional
}] }], propDecorators: { nzIcon: [{
type: Input
}], nzTitle: [{
type: Input
}], nzStatus: [{
type: Input
}], nzSubTitle: [{
type: Input
}], nzExtra: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvcmVzdWx0L3Jlc3VsdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUlMLFFBQVEsRUFFUixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFNdkUsTUFBTSxPQUFPLEdBQUc7SUFDZCxPQUFPLEVBQUUsY0FBYztJQUN2QixLQUFLLEVBQUUsY0FBYztJQUNyQixJQUFJLEVBQUUsb0JBQW9CO0lBQzFCLE9BQU8sRUFBRSxTQUFTO0NBQ25CLENBQUM7QUFDRixNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFrRTlDLE1BQU0sT0FBTyxpQkFBaUI7SUFhNUIsWUFDVSxHQUFzQixFQUNWLGNBQThCO1FBRDFDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ1YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBWjNDLGFBQVEsR0FBdUIs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dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOek91dGxldE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9vdXRsZXQnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcblxuaW1wb3J0IHsgTnpSZXN1bHROb3RGb3VuZENvbXBvbmVudCB9IGZyb20gJy4vcGFydGlhbC9ub3QtZm91bmQnO1xuaW1wb3J0IHsgTnpSZXN1bHRTZXJ2ZXJFcnJvckNvbXBvbmVudCB9IGZyb20gJy4vcGFydGlhbC9zZXJ2ZXItZXJyb3IuY29tcG9uZW50JztcbmltcG9ydCB7IE56UmVzdWx0VW5hdXRob3JpemVkQ29tcG9uZW50IH0gZnJvbSAnLi9wYXJ0aWFsL3VuYXV0aG9yaXplZCc7XG5cbmV4cG9ydCB0eXBlIE56UmVzdWx0SWNvblR5cGUgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ2luZm8nIHwgJ3dhcm5pbmcnO1xuZXhwb3J0IHR5cGUgTnpFeGNlcHRpb25TdGF0dXNUeXBlID0gJzQwNCcgfCAnNTAwJyB8ICc0MDMnO1xuZXhwb3J0IHR5cGUgTnpSZXN1bHRTdGF0dXNUeXBlID0gTnpFeGNlcHRpb25TdGF0dXNUeXBlIHwgTnpSZXN1bHRJY29uVHlwZTtcblxuY29uc3QgSWNvbk1hcCA9IHtcbiAgc3VjY2VzczogJ2NoZWNrLWNpcmNsZScsXG4gIGVycm9yOiAnY2xvc2UtY2lyY2xlJyxcbiAgaW5mbzogJ2V4Y2xhbWF0aW9uLWNpcmNsZScsXG4gIHdhcm5pbmc6ICd3YXJuaW5nJ1xufTtcbmNvbnN0IEV4Y2VwdGlvblN0YXR1cyA9IFsnNDA0JywgJzUwMCcsICc0MDMnXTtcblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzZWxlY3RvcjogJ256LXJlc3VsdCcsXG4gIGV4cG9ydEFzOiAnbnpSZXN1bHQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhbnQtcmVzdWx0LWljb25cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFeGNlcHRpb247IGVsc2UgZXhjZXB0aW9uVHBsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbnpTdHJpbmdUZW1wbGF0ZU91dGxldD1cImljb247IGxldCBpY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIFtuelR5cGVdPVwiaWNvblwiIG56VGhlbWU9XCJmaWxsXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhaWNvblwiIHNlbGVjdD1cIltuei1yZXN1bHQtaWNvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnpUaXRsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFudC1yZXN1bHQtdGl0bGVcIiAqbnpTdHJpbmdUZW1wbGF0ZU91dGxldD1cIm56VGl0bGVcIj5cbiAgICAgICAge3sgbnpUaXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhbnpUaXRsZVwiIHNlbGVjdD1cImRpdltuei1yZXN1bHQtdGl0bGVdXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuelN1YlRpdGxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYW50LXJlc3VsdC1zdWJ0aXRsZVwiICpuelN0cmluZ1RlbXBsYXRlT3V0bGV0PVwibnpTdWJUaXRsZVwiPlxuICAgICAgICB7eyBuelN1YlRpdGxlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudCAqbmdJZj1cIiFuelN1YlRpdGxlXCIgc2VsZWN0PVwiZGl2W256LXJlc3VsdC1zdWJ0aXRsZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibnotcmVzdWx0LWNvbnRlbnQsIFtuei1yZXN1bHQtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImFudC1yZXN1bHQtZXh0cmFcIiAqbmdJZj1cIm56RXh0cmFcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJuekV4dHJhXCI+XG4gICAgICAgIHt7IG56RXh0cmEgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIW56RXh0cmFcIiBzZWxlY3Q9XCJkaXZbbnotcmVzdWx0LWV4dHJhXVwiPjwvbmctY29udGVudD5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZXhjZXB0aW9uVHBsPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibnpTdGF0dXNcIj5cbiAgICAgICAgPG56LXJlc3VsdC1ub3QtZm91bmQgKm5nU3dpdGNoQ2FzZT1cIic0MDQnXCI+PC9uei1yZXN1bHQtbm90LWZvdW5kPlxuICAgICAgICA8bnotcmVzdWx0LXNlcnZlci1lcnJvciAqbmdTd2l0Y2hDYXNlPVwiJzUwMCdcIj48L256LXJlc3VsdC1zZXJ2ZXItZXJyb3I+XG4gICAgICAgIDxuei1yZXN1bHQtdW5hdXRob3JpemVkICpuZ1N3aXRjaENhc2U9XCInNDAzJ1wiPjwvbnotcmVzdWx0LXVuYXV0aG9yaXplZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC1yZXN1bHQnLFxuICAgICdbY2xhc3MuYW50LXJlc3VsdC1zdWNjZXNzXSc6IGBuelN0YXR1cyA9PT0gJ3N1Y2Nlc3MnYCxcbiAgICAnW2NsYXNzLmFudC1yZXN1bHQtZXJyb3JdJzogYG56U3RhdHVzID09PSAnZXJyb3InYCxcbiAgICAnW2NsYXNzLmFudC1yZXN1bHQtaW5mb10nOiBgbnpTdGF0dXMgPT09ICdpbmZvJ2AsXG4gICAgJ1tjbGFzcy5hbnQtcmVzdWx0LXdhcm5pbmddJzogYG56U3RhdHVzID09PSAnd2FybmluZydgLFxuICAgICdbY2xhc3MuYW50LXJlc3VsdC1ydGxdJzogYGRpciA9PT0gJ3J0bCdgXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE56T3V0bGV0TW9kdWxlLFxuICAgIE56SWNvbk1vZHVsZSxcbiAgICBOZ1N3aXRjaCxcbiAgICBOelJlc3VsdE5vdEZvdW5kQ29tcG9uZW50LFxuICAgIE56UmVzdWx0U2VydmVyRXJyb3JDb21wb25lbnQsXG4gICAgTnpSZXN1bHRVbmF1dGhvcml6ZWRDb21wb25lbnQsXG4gICAgTmdTd2l0Y2hDYXNlXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTnpSZXN1bHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KCkgbnpJY29uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG4gIEBJbnB1dCgpIG56VGl0bGU/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgQElucHV0KCkgbnpTdGF0dXM6IE56UmVzdWx0U3RhdHVzVHlwZSA9ICdpbmZvJztcbiAgQElucHV0KCkgbnpTdWJUaXRsZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBASW5wdXQoKSBuekV4dHJhPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgaWNvbj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBpc0V4Y2VwdGlvbiA9IGZhbHNlO1xuICBkaXI6IERpcmVjdGlvbiA9ICdsdHInO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpcmVjdGlvbmFsaXR5OiBEaXJlY3Rpb25hbGl0eVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXJlY3Rpb25hbGl0eS5jaGFuZ2U/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRpcmVjdGlvbjogRGlyZWN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmRpciA9IGRpcmVjdGlvbjtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGlyID0gdGhpcy5kaXJlY3Rpb25hbGl0eS52YWx1ZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdHVzSWNvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGF0dXNJY29uKCk6IHZvaWQge1xuICAgIGNvbnN0IGljb24gPSB0aGlzLm56SWNvbjtcblxuICAgIHRoaXMuaXNFeGNlcHRpb24gPSBFeGNlcHRpb25TdGF0dXMuaW5kZXhPZih0aGlzLm56U3RhdHVzKSAhPT0gLTE7XG4gICAgdGhpcy5pY29uID0gaWNvblxuICAgICAgPyB0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBJY29uTWFwW2ljb24gYXMgTnpSZXN1bHRJY29uVHlwZV0gfHwgaWNvblxuICAgICAgICA6IGljb25cbiAgICAgIDogdGhpcy5pc0V4Y2VwdGlvblxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IEljb25NYXBbdGhpcy5uelN0YXR1cyBhcyBOelJlc3VsdEljb25UeXBlXTtcbiAgfVxufVxuIl19