UNPKG

ng-zorro-antd

Version:

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

158 lines 21.3 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 { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes'; import { EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; import { filter, take, takeUntil } from 'rxjs/operators'; import { isPromise } from 'ng-zorro-antd/core/util'; export class NzModalRef { constructor(overlayRef, config, containerInstance) { this.overlayRef = overlayRef; this.config = config; this.containerInstance = containerInstance; this.componentInstance = null; this.componentRef = null; this.state = 0 /* NzModalState.OPEN */; this.afterClose = new Subject(); this.afterOpen = new Subject(); this.destroy$ = new Subject(); containerInstance.animationStateChanged .pipe(filter(event => event.phaseName === 'done' && event.toState === 'enter'), take(1)) .subscribe(() => { this.afterOpen.next(); this.afterOpen.complete(); if (config.nzAfterOpen instanceof EventEmitter) { config.nzAfterOpen.emit(); } }); containerInstance.animationStateChanged .pipe(filter(event => event.phaseName === 'done' && event.toState === 'exit'), take(1)) .subscribe(() => { clearTimeout(this.closeTimeout); this._finishDialogClose(); }); containerInstance.containerClick.pipe(takeUntil(this.destroy$)).subscribe(() => { const cancelable = !this.config.nzCancelLoading && !this.config.nzOkLoading; if (cancelable) { this.trigger("cancel" /* NzTriggerAction.CANCEL */); } }); overlayRef .keydownEvents() .pipe(filter(event => this.config.nzKeyboard && !this.config.nzCancelLoading && !this.config.nzOkLoading && event.keyCode === ESCAPE && !hasModifierKey(event))) .subscribe(event => { event.preventDefault(); this.trigger("cancel" /* NzTriggerAction.CANCEL */); }); containerInstance.cancelTriggered .pipe(takeUntil(this.destroy$)) .subscribe(() => this.trigger("cancel" /* NzTriggerAction.CANCEL */)); containerInstance.okTriggered.pipe(takeUntil(this.destroy$)).subscribe(() => this.trigger("ok" /* NzTriggerAction.OK */)); overlayRef.detachments().subscribe(() => { this.afterClose.next(this.result); this.afterClose.complete(); if (config.nzAfterClose instanceof EventEmitter) { config.nzAfterClose.emit(this.result); } this.componentInstance = null; this.componentRef = null; this.overlayRef.dispose(); }); } getContentComponent() { return this.componentInstance; } getContentComponentRef() { return this.componentRef; } getElement() { return this.containerInstance.getNativeElement(); } destroy(result) { this.close(result); } triggerOk() { return this.trigger("ok" /* NzTriggerAction.OK */); } triggerCancel() { return this.trigger("cancel" /* NzTriggerAction.CANCEL */); } close(result) { if (this.state !== 0 /* NzModalState.OPEN */) { return; } this.result = result; this.containerInstance.animationStateChanged .pipe(filter(event => event.phaseName === 'start'), take(1)) .subscribe(event => { this.overlayRef.detachBackdrop(); this.closeTimeout = setTimeout(() => { this._finishDialogClose(); }, event.totalTime + 100); }); this.containerInstance.startExitAnimation(); this.state = 1 /* NzModalState.CLOSING */; } updateConfig(config) { Object.assign(this.config, config); this.containerInstance.bindBackdropStyle(); this.containerInstance.cdr.markForCheck(); } getState() { return this.state; } getConfig() { return this.config; } getBackdropElement() { return this.overlayRef.backdropElement; } async trigger(action) { if (this.state === 1 /* NzModalState.CLOSING */) { return; } const trigger = { ok: this.config.nzOnOk, cancel: this.config.nzOnCancel }[action]; const loadingKey = { ok: 'nzOkLoading', cancel: 'nzCancelLoading' }[action]; const loading = this.config[loadingKey]; if (loading) { return; } if (trigger instanceof EventEmitter) { trigger.emit(this.getContentComponent()); } else if (typeof trigger === 'function') { const result = trigger(this.getContentComponent()); if (isPromise(result)) { this.config[loadingKey] = true; let doClose = false; try { doClose = (await result); } finally { this.config[loadingKey] = false; this.closeWhitResult(doClose); } } else { this.closeWhitResult(result); } } } closeWhitResult(result) { if (result !== false) { this.close(result); } } _finishDialogClose() { this.state = 2 /* NzModalState.CLOSED */; this.overlayRef.dispose(); this.destroy$.next(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRCxPQUFPLEVBQWdCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWlCcEQsTUFBTSxPQUFPLFVBQVU7SUFZckIsWUFDVSxVQUFzQixFQUN0QixNQUFvQixFQUNyQixpQkFBOEM7UUFGN0MsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3JCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFkdkQsc0JBQWlCLEdBQWEsSUFBSSxDQUFDO1FBQ25DLGlCQUFZLEdBQTJCLElBQUksQ0FBQztRQUU1QyxVQUFLLDZCQUFtQztRQUN4QyxlQUFVLEdBQTJCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSWpDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBT3JDLGlCQUFpQixDQUFDLHFCQUFxQjthQUNwQyxJQUFJLENBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFDeEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZ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QztRQUMzQyxDQUFDO2FBQU0sSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDL0IsSUFBSSxPQUFPLEdBQXdCLEtBQUssQ0FBQztnQkFDekMsSUFBSSxDQUFDO29CQUNILE9BQU8sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFrQixDQUFDO2dCQUM1QyxDQUFDO3dCQUFTLENBQUM7b0JBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsTUFBaUI7UUFDdkMsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsS0FBSyw4QkFBc0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgRVNDQVBFLCBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuXG5pbXBvcnQgeyBCYXNlTW9kYWxDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTnpNb2RhbExlZ2FjeUFQSSB9IGZyb20gJy4vbW9kYWwtbGVnYWN5LWFwaSc7XG5pbXBvcnQgeyBNb2RhbE9wdGlvbnMgfSBmcm9tICcuL21vZGFsLXR5cGVzJztcblxuZXhwb3J0IGNvbnN0IGVudW0gTnpNb2RhbFN0YXRlIHtcbiAgT1BFTixcbiAgQ0xPU0lORyxcbiAgQ0xPU0VEXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIE56VHJpZ2dlckFjdGlvbiB7XG4gIENBTkNFTCA9ICdjYW5jZWwnLFxuICBPSyA9ICdvaydcbn1cblxuZXhwb3J0IGNsYXNzIE56TW9kYWxSZWY8VCA9IE56U2FmZUFueSwgUiA9IE56U2FmZUFueT4gaW1wbGVtZW50cyBOek1vZGFsTGVnYWN5QVBJPFQsIFI+IHtcbiAgY29tcG9uZW50SW5zdGFuY2U6IFQgfCBudWxsID0gbnVsbDtcbiAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8VD4gfCBudWxsID0gbnVsbDtcbiAgcmVzdWx0PzogUjtcbiAgc3RhdGU6IE56TW9kYWxTdGF0ZSA9IE56TW9kYWxTdGF0ZS5PUEVOO1xuICBhZnRlckNsb3NlOiBTdWJqZWN0PFIgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgYWZ0ZXJPcGVuOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIGNsb3NlVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZixcbiAgICBwcml2YXRlIGNvbmZpZzogTW9kYWxPcHRpb25zLFxuICAgIHB1YmxpYyBjb250YWluZXJJbnN0YW5jZTogQmFzZU1vZGFsQ29udGFpbmVyQ29tcG9uZW50XG4gICkge1xuICAgIGNvbnRhaW5lckluc3RhbmNlLmFuaW1hdGlvblN0YXRlQ2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5waGFzZU5hbWUgPT09ICdkb25lJyAmJiBldmVudC50b1N0YXRlID09PSAnZW50ZXInKSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWZ0ZXJPcGVuLm5leHQoKTtcbiAgICAgICAgdGhpcy5hZnRlck9wZW4uY29tcGxldGUoKTtcbiAgICAgICAgaWYgKGNvbmZpZy5uekFmdGVyT3BlbiBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcikge1xuICAgICAgICAgIGNvbmZpZy5uekFmdGVyT3Blbi5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY29udGFpbmVySW5zdGFuY2UuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnBoYXNlTmFtZSA9PT0gJ2RvbmUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdleGl0JyksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpO1xuICAgICAgfSk7XG5cbiAgICBjb250YWluZXJJbnN0YW5jZS5jb250YWluZXJDbGljay5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbmNlbGFibGUgPSAhdGhpcy5jb25maWcubnpDYW5jZWxMb2FkaW5nICYmICF0aGlzLmNvbmZpZy5uek9rTG9hZGluZztcbiAgICAgIGlmIChjYW5jZWxhYmxlKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcihOelRyaWdnZXJBY3Rpb24uQ0FOQ0VMKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG92ZXJsYXlSZWZcbiAgICAgIC5rZXlkb3duRXZlbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgZXZlbnQgPT5cbiAgICAgICAgICAgICh0aGlzLmNvbmZpZy5uektleWJvYXJkIGFzIGJvb2xlYW4pICYmXG4gICAgICAgICAgICAhdGhpcy5jb25maWcubnpDYW5jZWxMb2FkaW5nICYmXG4gICAgICAgICAgICAhdGhpcy5jb25maWcubnpPa0xvYWRpbmcgJiZcbiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJlxuICAgICAgICAgICAgIWhhc01vZGlmaWVyS2V5KGV2ZW50KVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKE56VHJpZ2dlckFjdGlvbi5DQU5DRUwpO1xuICAgICAgfSk7XG5cbiAgICBjb250YWluZXJJbnN0YW5jZS5jYW5jZWxUcmlnZ2VyZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy50cmlnZ2VyKE56VHJpZ2dlckFjdGlvbi5DQU5DRUwpKTtcblxuICAgIGNvbnRhaW5lckluc3RhbmNlLm9rVHJpZ2dlcmVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50cmlnZ2VyKE56VHJpZ2dlckFjdGlvbi5PSykpO1xuXG4gICAgb3ZlcmxheVJlZi5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmFmdGVyQ2xvc2UubmV4dCh0aGlzLnJlc3VsdCk7XG4gICAgICB0aGlzLmFmdGVyQ2xvc2UuY29tcGxldGUoKTtcbiAgICAgIGlmIChjb25maWcubnpBZnRlckNsb3NlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgIGNvbmZpZy5uekFmdGVyQ2xvc2UuZW1pdCh0aGlzLnJlc3VsdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gbnVsbDtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb250ZW50Q29tcG9uZW50KCk6IFQge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlIGFzIFQ7XG4gIH1cblxuICBnZXRDb250ZW50Q29tcG9uZW50UmVmKCk6IFJlYWRvbmx5PENvbXBvbmVudFJlZjxUPiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWYgYXMgUmVhZG9ubHk8Q29tcG9uZW50UmVmPFQ+IHwgbnVsbD47XG4gIH1cblxuICBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXJJbnN0YW5jZS5nZXROYXRpdmVFbGVtZW50KCk7XG4gIH1cblxuICBkZXN0cm95KHJlc3VsdD86IFIpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gIH1cblxuICB0cmlnZ2VyT2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlcihOelRyaWdnZXJBY3Rpb24uT0spO1xuICB9XG5cbiAgdHJpZ2dlckNhbmNlbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyKE56VHJpZ2dlckFjdGlvbi5DQU5DRUwpO1xuICB9XG5cbiAgY2xvc2UocmVzdWx0PzogUik6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBOek1vZGFsU3RhdGUuT1BFTikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlLmFuaW1hdGlvblN0YXRlQ2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5waGFzZU5hbWUgPT09ICdzdGFydCcpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCk7XG4gICAgICAgIHRoaXMuY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKTtcbiAgICAgICAgfSwgZXZlbnQudG90YWxUaW1lICsgMTAwKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jb250YWluZXJJbnN0YW5jZS5zdGFydEV4aXRBbmltYXRpb24oKTtcbiAgICB0aGlzLnN0YXRlID0gTnpNb2RhbFN0YXRlLkNMT1NJTkc7XG4gIH1cblxuICB1cGRhdGVDb25maWcoY29uZmlnOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLCBjb25maWcpO1xuICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UuYmluZEJhY2tkcm9wU3R5bGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldFN0YXRlKCk6IE56TW9kYWxTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGU7XG4gIH1cblxuICBnZXRDb25maWcoKTogTW9kYWxPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cblxuICBnZXRCYWNrZHJvcEVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJpZ2dlcihhY3Rpb246IE56VHJpZ2dlckFjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBOek1vZGFsU3RhdGUuQ0xPU0lORykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0cmlnZ2VyID0geyBvazogdGhpcy5jb25maWcubnpPbk9rLCBjYW5jZWw6IHRoaXMuY29uZmlnLm56T25DYW5jZWwgfVthY3Rpb25dO1xuICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB7IG9rOiAnbnpPa0xvYWRpbmcnLCBjYW5jZWw6ICduekNhbmNlbExvYWRpbmcnIH1bYWN0aW9uXSBhcyAnbnpPa0xvYWRpbmcnIHwgJ256Q2FuY2VsTG9hZGluZyc7XG4gICAgY29uc3QgbG9hZGluZyA9IHRoaXMuY29uZmlnW2xvYWRpbmdLZXldO1xuICAgIGlmIChsb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0cmlnZ2VyIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICB0cmlnZ2VyLmVtaXQodGhpcy5nZXRDb250ZW50Q29tcG9uZW50KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyaWdnZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRyaWdnZXIodGhpcy5nZXRDb250ZW50Q29tcG9uZW50KCkpO1xuICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgIHRoaXMuY29uZmlnW2xvYWRpbmdLZXldID0gdHJ1ZTtcbiAgICAgICAgbGV0IGRvQ2xvc2U6IGJvb2xlYW4gfCB2b2lkIHwge30gPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkb0Nsb3NlID0gKGF3YWl0IHJlc3VsdCkgYXMgdHlwZW9mIHJlc3VsdDtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tsb2FkaW5nS2V5XSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2xvc2VXaGl0UmVzdWx0KGRvQ2xvc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsb3NlV2hpdFJlc3VsdChyZXN1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VXaGl0UmVzdWx0KHJlc3VsdDogTnpTYWZlQW55KTogdm9pZCB7XG4gICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBfZmluaXNoRGlhbG9nQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9IE56TW9kYWxTdGF0ZS5DTE9TRUQ7XG4gICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxufVxuIl19