UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

132 lines 15 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import { isPromise } from 'ng-zorro-antd/core/util'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { NzI18nService } from 'ng-zorro-antd/i18n'; import { NzModalRef } from './modal-ref'; import { ModalOptions } from './modal-types'; export class NzModalFooterComponent { constructor(i18n, config) { this.i18n = i18n; this.config = config; this.buttonsFooter = false; this.buttons = []; this.cancelTriggered = new EventEmitter(); this.okTriggered = new EventEmitter(); this.destroy$ = new Subject(); if (Array.isArray(config.nzFooter)) { this.buttonsFooter = true; this.buttons = config.nzFooter.map(mergeDefaultOption); } this.i18n.localeChange.pipe(takeUntil(this.destroy$)).subscribe(() => { this.locale = this.i18n.getLocaleData('Modal'); }); } onCancel() { this.cancelTriggered.emit(); } onOk() { this.okTriggered.emit(); } /** * Returns the value of the specified key. * If it is a function, run and return the return value of the function. */ getButtonCallableProp(options, prop) { const value = options[prop]; const componentInstance = this.modalRef.getContentComponent(); return typeof value === 'function' ? value.apply(options, componentInstance && [componentInstance]) : value; } /** * Run function based on the type and set its `loading` prop if needed. */ onButtonClick(options) { const loading = this.getButtonCallableProp(options, 'loading'); if (!loading) { const result = this.getButtonCallableProp(options, 'onClick'); if (options.autoLoading && isPromise(result)) { options.loading = true; result.then(() => (options.loading = false)).catch(() => (options.loading = false)); } } } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } } NzModalFooterComponent.decorators = [ { type: Component, args: [{ selector: 'div[nz-modal-footer]', exportAs: 'NzModalFooterBuiltin', template: ` <ng-container *ngIf="config.nzFooter; else defaultFooterButtons"> <ng-container *nzStringTemplateOutlet="config.nzFooter; context: { $implicit: config.nzComponentParams, modalRef: modalRef }"> <div *ngIf="!buttonsFooter" [innerHTML]="config.nzTitle"></div> <ng-container *ngIf="buttonsFooter"> <button *ngFor="let button of buttons" nz-button (click)="onButtonClick(button)" [hidden]="!getButtonCallableProp(button, 'show')" [nzLoading]="getButtonCallableProp(button, 'loading')" [disabled]="getButtonCallableProp(button, 'disabled')" [nzType]="button.type!" [nzDanger]="button.danger" [nzShape]="button.shape!" [nzSize]="button.size!" [nzGhost]="button.ghost!" > {{ button.label }} </button> </ng-container> </ng-container> </ng-container> <ng-template #defaultFooterButtons> <button *ngIf="config.nzCancelText !== null" [attr.cdkFocusInitial]="config.nzAutofocus === 'cancel' || null" nz-button (click)="onCancel()" [nzLoading]="!!config.nzCancelLoading" [disabled]="config.nzCancelDisabled" > {{ config.nzCancelText || locale.cancelText }} </button> <button *ngIf="config.nzOkText !== null" [attr.cdkFocusInitial]="config.nzAutofocus === 'ok' || null" nz-button [nzType]="config.nzOkType!" [nzDanger]="config.nzOkDanger" (click)="onOk()" [nzLoading]="!!config.nzOkLoading" [disabled]="config.nzOkDisabled" > {{ config.nzOkText || locale.okText }} </button> </ng-template> `, host: { class: 'ant-modal-footer' }, changeDetection: ChangeDetectionStrategy.Default },] } ]; NzModalFooterComponent.ctorParameters = () => [ { type: NzI18nService }, { type: ModalOptions } ]; NzModalFooterComponent.propDecorators = { cancelTriggered: [{ type: Output }], okTriggered: [{ type: Output }], modalRef: [{ type: Input }] }; function mergeDefaultOption(options) { return Object.assign({ type: null, size: 'default', autoLoading: true, show: true, loading: false, disabled: false }, options); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS92c3RzL3dvcmsvMS9zL2NvbXBvbmVudHMvbW9kYWwvIiwic291cmNlcyI6WyJtb2RhbC1mb290ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFFekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQXNCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTBEakUsTUFBTSxPQUFPLHNCQUFzQjtJQVNqQyxZQUFvQixJQUFtQixFQUFTLE1BQW9CO1FBQWhELFNBQUksR0FBSixJQUFJLENBQWU7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBUnBFLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBeUIsRUFBRSxDQUFDO1FBRWhCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbEQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFHckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxHQUFJLE1BQU0sQ0FBQyxRQUFpQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25FLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxPQUEyQixFQUFFLElBQThCO1FBQy9FLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5RCxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5RyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsT0FBMkI7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RCxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM1QyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDckY7U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OztZQTlHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDVDtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osS0FBSyxFQUFFLGtCQUFrQjtpQkFDMUI7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE9BQU87YUFDakQ7OztZQTVEUSxhQUFhO1lBR08sWUFBWTs7OzhCQThEdEMsTUFBTTswQkFDTixNQUFNO3VCQUNOLEtBQUs7O0FBbURSLFNBQVMsa0JBQWtCLENBQUMsT0FBMkI7SUFDckQsdUJBQ0UsSUFBSSxFQUFFLElBQUksRUFDVixJQUFJLEVBQUUsU0FBUyxFQUNmLFdBQVcsRUFBRSxJQUFJLEVBQ2pCLElBQUksRUFBRSxJQUFJLEVBQ1YsT0FBTyxFQUFFLEtBQUssRUFDZCxRQUFRLEVBQUUsS0FBSyxJQUNaLE9BQU8sRUFDVjtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOekkxOG5TZXJ2aWNlLCBOek1vZGFsSTE4bkludGVyZmFjZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaTE4bic7XG5cbmltcG9ydCB7IE56TW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXJlZic7XG5pbXBvcnQgeyBNb2RhbEJ1dHRvbk9wdGlvbnMsIE1vZGFsT3B0aW9ucyB9IGZyb20gJy4vbW9kYWwtdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkaXZbbnotbW9kYWwtZm9vdGVyXScsXG4gIGV4cG9ydEFzOiAnTnpNb2RhbEZvb3RlckJ1aWx0aW4nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcubnpGb290ZXI7IGVsc2UgZGVmYXVsdEZvb3RlckJ1dHRvbnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJjb25maWcubnpGb290ZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb25maWcubnpDb21wb25lbnRQYXJhbXMsIG1vZGFsUmVmOiBtb2RhbFJlZiB9XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhYnV0dG9uc0Zvb3RlclwiIFtpbm5lckhUTUxdPVwiY29uZmlnLm56VGl0bGVcIj48L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJ1dHRvbnNGb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNcIlxuICAgICAgICAgICAgbnotYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24pXCJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiIWdldEJ1dHRvbkNhbGxhYmxlUHJvcChidXR0b24sICdzaG93JylcIlxuICAgICAgICAgICAgW256TG9hZGluZ109XCJnZXRCdXR0b25DYWxsYWJsZVByb3AoYnV0dG9uLCAnbG9hZGluZycpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRCdXR0b25DYWxsYWJsZVByb3AoYnV0dG9uLCAnZGlzYWJsZWQnKVwiXG4gICAgICAgICAgICBbbnpUeXBlXT1cImJ1dHRvbi50eXBlIVwiXG4gICAgICAgICAgICBbbnpEYW5nZXJdPVwiYnV0dG9uLmRhbmdlclwiXG4gICAgICAgICAgICBbbnpTaGFwZV09XCJidXR0b24uc2hhcGUhXCJcbiAgICAgICAgICAgIFtuelNpemVdPVwiYnV0dG9uLnNpemUhXCJcbiAgICAgICAgICAgIFtuekdob3N0XT1cImJ1dHRvbi5naG9zdCFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZvb3RlckJ1dHRvbnM+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLm56Q2FuY2VsVGV4dCAhPT0gbnVsbFwiXG4gICAgICAgIFthdHRyLmNka0ZvY3VzSW5pdGlhbF09XCJjb25maWcubnpBdXRvZm9jdXMgPT09ICdjYW5jZWwnIHx8IG51bGxcIlxuICAgICAgICBuei1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgICBbbnpMb2FkaW5nXT1cIiEhY29uZmlnLm56Q2FuY2VsTG9hZGluZ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJjb25maWcubnpDYW5jZWxEaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIHt7IGNvbmZpZy5uekNhbmNlbFRleHQgfHwgbG9jYWxlLmNhbmNlbFRleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImNvbmZpZy5uek9rVGV4dCAhPT0gbnVsbFwiXG4gICAgICAgIFthdHRyLmNka0ZvY3VzSW5pdGlhbF09XCJjb25maWcubnpBdXRvZm9jdXMgPT09ICdvaycgfHwgbnVsbFwiXG4gICAgICAgIG56LWJ1dHRvblxuICAgICAgICBbbnpUeXBlXT1cImNvbmZpZy5uek9rVHlwZSFcIlxuICAgICAgICBbbnpEYW5nZXJdPVwiY29uZmlnLm56T2tEYW5nZXJcIlxuICAgICAgICAoY2xpY2spPVwib25PaygpXCJcbiAgICAgICAgW256TG9hZGluZ109XCIhIWNvbmZpZy5uek9rTG9hZGluZ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJjb25maWcubnpPa0Rpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgY29uZmlnLm56T2tUZXh0IHx8IGxvY2FsZS5va1RleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC1tb2RhbC1mb290ZXInXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdFxufSlcbmV4cG9ydCBjbGFzcyBOek1vZGFsRm9vdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgYnV0dG9uc0Zvb3RlciA9IGZhbHNlO1xuICBidXR0b25zOiBNb2RhbEJ1dHRvbk9wdGlvbnNbXSA9IFtdO1xuICBsb2NhbGUhOiBOek1vZGFsSTE4bkludGVyZmFjZTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNhbmNlbFRyaWdnZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG9rVHJpZ2dlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBASW5wdXQoKSBtb2RhbFJlZiE6IE56TW9kYWxSZWY7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaTE4bjogTnpJMThuU2VydmljZSwgcHVibGljIGNvbmZpZzogTW9kYWxPcHRpb25zKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnLm56Rm9vdGVyKSkge1xuICAgICAgdGhpcy5idXR0b25zRm9vdGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuYnV0dG9ucyA9IChjb25maWcubnpGb290ZXIgYXMgTW9kYWxCdXR0b25PcHRpb25zW10pLm1hcChtZXJnZURlZmF1bHRPcHRpb24pO1xuICAgIH1cbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLmkxOG4uZ2V0TG9jYWxlRGF0YSgnTW9kYWwnKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsVHJpZ2dlcmVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uT2soKTogdm9pZCB7XG4gICAgdGhpcy5va1RyaWdnZXJlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBrZXkuXG4gICAqIElmIGl0IGlzIGEgZnVuY3Rpb24sIHJ1biBhbmQgcmV0dXJuIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKG9wdGlvbnM6IE1vZGFsQnV0dG9uT3B0aW9ucywgcHJvcDoga2V5b2YgTW9kYWxCdXR0b25PcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW3Byb3BdO1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gdGhpcy5tb2RhbFJlZi5nZXRDb250ZW50Q29tcG9uZW50KCk7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmFwcGx5KG9wdGlvbnMsIGNvbXBvbmVudEluc3RhbmNlICYmIFtjb21wb25lbnRJbnN0YW5jZV0pIDogdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSB0eXBlIGFuZCBzZXQgaXRzIGBsb2FkaW5nYCBwcm9wIGlmIG5lZWRlZC5cbiAgICovXG4gIG9uQnV0dG9uQ2xpY2sob3B0aW9uczogTW9kYWxCdXR0b25PcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgbG9hZGluZyA9IHRoaXMuZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKG9wdGlvbnMsICdsb2FkaW5nJyk7XG4gICAgaWYgKCFsb2FkaW5nKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEJ1dHRvbkNhbGxhYmxlUHJvcChvcHRpb25zLCAnb25DbGljaycpO1xuICAgICAgaWYgKG9wdGlvbnMuYXV0b0xvYWRpbmcgJiYgaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgb3B0aW9ucy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0LnRoZW4oKCkgPT4gKG9wdGlvbnMubG9hZGluZyA9IGZhbHNlKSkuY2F0Y2goKCkgPT4gKG9wdGlvbnMubG9hZGluZyA9IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVmYXVsdE9wdGlvbihvcHRpb25zOiBNb2RhbEJ1dHRvbk9wdGlvbnMpOiBNb2RhbEJ1dHRvbk9wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IG51bGwsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIGF1dG9Mb2FkaW5nOiB0cnVlLFxuICAgIHNob3c6IHRydWUsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbn1cbiJdfQ==