UNPKG

ng-zorro-antd

Version:

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

211 lines 28.1 kB
import { ComponentPortal } from '@angular/cdk/portal'; import { Directive, EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; import { filter, take } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "ng-zorro-antd/core/config"; let globalCounter = 0; export class NzMNService { constructor(nzSingletonService, overlay, injector) { this.nzSingletonService = nzSingletonService; this.overlay = overlay; this.injector = injector; } remove(id) { if (this.container) { if (id) { this.container.remove(id); } else { this.container.removeAll(); } } } getInstanceId() { return `${this.componentPrefix}-${globalCounter++}`; } withContainer(ctor) { let containerInstance = this.nzSingletonService.getSingletonWithKey(this.componentPrefix); if (containerInstance) { return containerInstance; } const overlayRef = this.overlay.create({ hasBackdrop: false, scrollStrategy: this.overlay.scrollStrategies.noop(), positionStrategy: this.overlay.position().global() }); const componentPortal = new ComponentPortal(ctor, null, this.injector); const componentRef = overlayRef.attach(componentPortal); const overlayWrapper = overlayRef.hostElement; overlayWrapper.style.zIndex = '1010'; if (!containerInstance) { this.container = containerInstance = componentRef.instance; this.nzSingletonService.registerSingletonWithKey(this.componentPrefix, containerInstance); this.container.afterAllInstancesRemoved.subscribe(() => { this.container = undefined; this.nzSingletonService.unregisterSingletonWithKey(this.componentPrefix); overlayRef.dispose(); }); } return containerInstance; } } export class NzMNContainerComponent { constructor(cdr, nzConfigService) { this.cdr = cdr; this.nzConfigService = nzConfigService; this.instances = []; this._afterAllInstancesRemoved = new Subject(); this.afterAllInstancesRemoved = this._afterAllInstancesRemoved.asObservable(); this.destroy$ = new Subject(); this.updateConfig(); } ngOnInit() { this.subscribeConfigChange(); } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } create(data) { const instance = this.onCreate(data); if (this.instances.length >= this.config.nzMaxStack) { this.instances = this.instances.slice(1); } this.instances = [...this.instances, instance]; this.readyInstances(); return instance; } remove(id, userAction = false) { this.instances .map((instance, index) => ({ index, instance })) .filter(({ instance }) => instance.messageId === id) .forEach(({ index, instance }) => { this.instances.splice(index, 1); this.instances = [...this.instances]; this.onRemove(instance, userAction); this.readyInstances(); }); if (!this.instances.length) { this.onAllInstancesRemoved(); } } removeAll() { this.instances.forEach(i => this.onRemove(i, false)); this.instances = []; this.readyInstances(); this.onAllInstancesRemoved(); } onCreate(instance) { instance.options = this.mergeOptions(instance.options); instance.onClose = new Subject(); return instance; } onRemove(instance, userAction) { instance.onClose.next(userAction); instance.onClose.complete(); } onAllInstancesRemoved() { this._afterAllInstancesRemoved.next(); this._afterAllInstancesRemoved.complete(); } readyInstances() { this.cdr.detectChanges(); } mergeOptions(options) { const { nzDuration, nzAnimate, nzPauseOnHover } = this.config; return { nzDuration, nzAnimate, nzPauseOnHover, ...options }; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzMNContainerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NzConfigService }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: NzMNContainerComponent, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzMNContainerComponent, decorators: [{ type: Directive }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NzConfigService }] }); export class NzMNComponent { constructor(cdr) { this.cdr = cdr; this.destroyed = new EventEmitter(); this.animationStateChanged = new Subject(); this.userAction = false; } ngOnInit() { this.options = this.instance.options; if (this.options.nzAnimate) { this.instance.state = 'enter'; this.animationStateChanged .pipe(filter(event => event.phaseName === 'done' && event.toState === 'leave'), take(1)) .subscribe(() => { clearTimeout(this.closeTimer); this.destroyed.next({ id: this.instance.messageId, userAction: this.userAction }); }); } this.autoClose = this.options.nzDuration > 0; if (this.autoClose) { this.initErase(); this.startEraseTimeout(); } } ngOnDestroy() { if (this.autoClose) { this.clearEraseTimeout(); } this.animationStateChanged.complete(); } onEnter() { if (this.autoClose && this.options.nzPauseOnHover) { this.clearEraseTimeout(); this.updateTTL(); } } onLeave() { if (this.autoClose && this.options.nzPauseOnHover) { this.startEraseTimeout(); } } destroy(userAction = false) { this.userAction = userAction; if (this.options.nzAnimate) { this.instance.state = 'leave'; this.cdr.detectChanges(); this.closeTimer = setTimeout(() => { this.closeTimer = undefined; this.destroyed.next({ id: this.instance.messageId, userAction }); }, 200); } else { this.destroyed.next({ id: this.instance.messageId, userAction }); } } initErase() { this.eraseTTL = this.options.nzDuration; this.eraseTimingStart = Date.now(); } updateTTL() { if (this.autoClose) { this.eraseTTL -= Date.now() - this.eraseTimingStart; } } startEraseTimeout() { if (this.eraseTTL > 0) { this.clearEraseTimeout(); this.eraseTimer = setTimeout(() => this.destroy(), this.eraseTTL); this.eraseTimingStart = Date.now(); } else { this.destroy(); } } clearEraseTimeout() { if (this.eraseTimer !== null) { clearTimeout(this.eraseTimer); this.eraseTimer = undefined; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzMNComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: NzMNComponent, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzMNComponent, decorators: [{ type: Directive }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTzlDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV0QixNQUFNLE9BQWdCLFdBQVc7SUFJL0IsWUFDWSxrQkFBc0MsRUFDdEMsT0FBZ0IsRUFDbEIsUUFBa0I7UUFGaEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDekIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxFQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYTtRQUNyQixPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxhQUFhLEVBQUUsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFUyxhQUFhLENBQW1DLElBQXNCO1FBQzlFLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENB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LEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBaUIsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDOzhHQXJHbUIsYUFBYTtrR0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQURsQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1lc3NhZ2VDb25maWcsIE56Q29uZmlnU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTnpTaW5nbGV0b25TZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3NlcnZpY2VzJztcblxuaW1wb3J0IHsgTnpNZXNzYWdlRGF0YSwgTnpNZXNzYWdlRGF0YU9wdGlvbnMgfSBmcm9tICcuL3R5cGluZ3MnO1xuXG5sZXQgZ2xvYmFsQ291bnRlciA9IDA7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOek1OU2VydmljZSB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb21wb25lbnRQcmVmaXg6IHN0cmluZztcbiAgcHJvdGVjdGVkIGNvbnRhaW5lcj86IE56TU5Db250YWluZXJDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG56U2luZ2xldG9uU2VydmljZTogTnpTaW5nbGV0b25TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge31cblxuICByZW1vdmUoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmUoaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlQWxsKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEluc3RhbmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb21wb25lbnRQcmVmaXh9LSR7Z2xvYmFsQ291bnRlcisrfWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2l0aENvbnRhaW5lcjxUIGV4dGVuZHMgTnpNTkNvbnRhaW5lckNvbXBvbmVudD4oY3RvcjogQ29tcG9uZW50VHlwZTxUPik6IFQge1xuICAgIGxldCBjb250YWluZXJJbnN0YW5jZSA9IHRoaXMubnpTaW5nbGV0b25TZXJ2aWNlLmdldFNpbmdsZXRvbldpdGhLZXkodGhpcy5jb21wb25lbnRQcmVmaXgpO1xuICAgIGlmIChjb250YWluZXJJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIGNvbnRhaW5lckluc3RhbmNlIGFzIFQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpXG4gICAgfSk7XG4gICAgY29uc3QgY29tcG9uZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChjdG9yLCBudWxsLCB0aGlzLmluamVjdG9yKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBvdmVybGF5UmVmLmF0dGFjaChjb21wb25lbnRQb3J0YWwpO1xuICAgIGNvbnN0IG92ZXJsYXlXcmFwcGVyID0gb3ZlcmxheVJlZi5ob3N0RWxlbWVudDtcbiAgICBvdmVybGF5V3JhcHBlci5zdHlsZS56SW5kZXggPSAnMTAxMCc7XG5cbiAgICBpZiAoIWNvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lckluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgICAgdGhpcy5uelNpbmdsZXRvblNlcnZpY2UucmVnaXN0ZXJTaW5nbGV0b25XaXRoS2V5KHRoaXMuY29tcG9uZW50UHJlZml4LCBjb250YWluZXJJbnN0YW5jZSk7XG4gICAgICB0aGlzLmNvbnRhaW5lci5hZnRlckFsbEluc3RhbmNlc1JlbW92ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubnpTaW5nbGV0b25TZXJ2aWNlLnVucmVnaXN0ZXJTaW5nbGV0b25XaXRoS2V5KHRoaXMuY29tcG9uZW50UHJlZml4KTtcbiAgICAgICAgb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVySW5zdGFuY2UgYXMgVDtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOek1OQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25maWc/OiBSZXF1aXJlZDxNZXNzYWdlQ29uZmlnPjtcbiAgaW5zdGFuY2VzOiBBcnJheTxSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPj4gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hZnRlckFsbEluc3RhbmNlc1JlbW92ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IGFmdGVyQWxsSW5zdGFuY2VzUmVtb3ZlZCA9IHRoaXMuX2FmdGVyQWxsSW5zdGFuY2VzUmVtb3ZlZC5hc09ic2VydmFibGUoKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBuekNvbmZpZ1NlcnZpY2U6IE56Q29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVDb25maWdDaGFuZ2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBOek1lc3NhZ2VEYXRhKTogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5vbkNyZWF0ZShkYXRhKTtcblxuICAgIGlmICh0aGlzLmluc3RhbmNlcy5sZW5ndGggPj0gdGhpcy5jb25maWchLm56TWF4U3RhY2spIHtcbiAgICAgIHRoaXMuaW5zdGFuY2VzID0gdGhpcy5pbnN0YW5jZXMuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnN0YW5jZXMgPSBbLi4udGhpcy5pbnN0YW5jZXMsIGluc3RhbmNlXTtcblxuICAgIHRoaXMucmVhZHlJbnN0YW5jZXMoKTtcblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHJlbW92ZShpZDogc3RyaW5nLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmluc3RhbmNlc1xuICAgICAgLm1hcCgoaW5zdGFuY2UsIGluZGV4KSA9PiAoeyBpbmRleCwgaW5zdGFuY2UgfSkpXG4gICAgICAuZmlsdGVyKCh7IGluc3RhbmNlIH0pID0+IGluc3RhbmNlLm1lc3NhZ2VJZCA9PT0gaWQpXG4gICAgICAuZm9yRWFjaCgoeyBpbmRleCwgaW5zdGFuY2UgfSkgPT4ge1xuICAgICAgICB0aGlzLmluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmluc3RhbmNlcyA9IFsuLi50aGlzLmluc3RhbmNlc107XG4gICAgICAgIHRoaXMub25SZW1vdmUoaW5zdGFuY2UsIHVzZXJBY3Rpb24pO1xuICAgICAgICB0aGlzLnJlYWR5SW5zdGFuY2VzKCk7XG4gICAgICB9KTtcblxuICAgIGlmICghdGhpcy5pbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9uQWxsSW5zdGFuY2VzUmVtb3ZlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmluc3RhbmNlcy5mb3JFYWNoKGkgPT4gdGhpcy5vblJlbW92ZShpLCBmYWxzZSkpO1xuICAgIHRoaXMuaW5zdGFuY2VzID0gW107XG5cbiAgICB0aGlzLnJlYWR5SW5zdGFuY2VzKCk7XG4gICAgdGhpcy5vbkFsbEluc3RhbmNlc1JlbW92ZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNyZWF0ZShpbnN0YW5jZTogTnpNZXNzYWdlRGF0YSk6IFJlcXVpcmVkPE56TWVzc2FnZURhdGE+IHtcbiAgICBpbnN0YW5jZS5vcHRpb25zID0gdGhpcy5tZXJnZU9wdGlvbnMoaW5zdGFuY2Uub3B0aW9ucyk7XG4gICAgaW5zdGFuY2Uub25DbG9zZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcmV0dXJuIGluc3RhbmNlIGFzIFJlcXVpcmVkPE56TWVzc2FnZURhdGE+O1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uUmVtb3ZlKGluc3RhbmNlOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPiwgdXNlckFjdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGluc3RhbmNlLm9uQ2xvc2UubmV4dCh1c2VyQWN0aW9uKTtcbiAgICBpbnN0YW5jZS5vbkNsb3NlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIG9uQWxsSW5zdGFuY2VzUmVtb3ZlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hZnRlckFsbEluc3RhbmNlc1JlbW92ZWQubmV4dCgpO1xuICAgIHRoaXMuX2FmdGVyQWxsSW5zdGFuY2VzUmVtb3ZlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWR5SW5zdGFuY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVDb25maWcoKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3Vic2NyaWJlQ29uZmlnQ2hhbmdlKCk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIG1lcmdlT3B0aW9ucyhvcHRpb25zPzogTnpNZXNzYWdlRGF0YU9wdGlvbnMpOiBOek1lc3NhZ2VEYXRhT3B0aW9ucyB7XG4gICAgY29uc3QgeyBuekR1cmF0aW9uLCBuekFuaW1hdGUsIG56UGF1c2VPbkhvdmVyIH0gPSB0aGlzLmNvbmZpZyE7XG4gICAgcmV0dXJuIHsgbnpEdXJhdGlvbiwgbnpBbmltYXRlLCBuelBhdXNlT25Ib3ZlciwgLi4ub3B0aW9ucyB9O1xuICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE56TU5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGluc3RhbmNlITogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT47XG4gIGluZGV4PzogbnVtYmVyO1xuXG4gIHJlYWRvbmx5IGRlc3Ryb3llZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nOyB1c2VyQWN0aW9uOiBib29sZWFuIH0+KCk7XG4gIHJlYWRvbmx5IGFuaW1hdGlvblN0YXRlQ2hhbmdlZDogU3ViamVjdDxBbmltYXRpb25FdmVudD4gPSBuZXcgU3ViamVjdDxBbmltYXRpb25FdmVudD4oKTtcblxuICBwcm90ZWN0ZWQgb3B0aW9ucyE6IFJlcXVpcmVkPE56TWVzc2FnZURhdGFPcHRpb25zPjtcbiAgcHJvdGVjdGVkIGF1dG9DbG9zZT86IGJvb2xlYW47XG4gIHByb3RlY3RlZCBjbG9zZVRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByb3RlY3RlZCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBlcmFzZVRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByb3RlY3RlZCBlcmFzZVRpbWluZ1N0YXJ0PzogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZXJhc2VUVEwhOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucyBhcyBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhT3B0aW9ucz47XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm56QW5pbWF0ZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5zdGF0ZSA9ICdlbnRlcic7XG4gICAgICB0aGlzLmFuaW1hdGlvblN0YXRlQ2hhbmdlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQucGhhc2VOYW1lID09PSAnZG9uZScgJiYgZXZlbnQudG9TdGF0ZSA9PT0gJ2xlYXZlJyksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZXIpO1xuICAgICAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoeyBpZDogdGhpcy5pbnN0YW5jZS5tZXNzYWdlSWQsIHVzZXJBY3Rpb246IHRoaXMudXNlckFjdGlvbiB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvQ2xvc2UgPSB0aGlzLm9wdGlvbnMubnpEdXJhdGlvbiA+IDA7XG5cbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UpIHtcbiAgICAgIHRoaXMuaW5pdEVyYXNlKCk7XG4gICAgICB0aGlzLnN0YXJ0RXJhc2VUaW1lb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKSB7XG4gICAgICB0aGlzLmNsZWFyRXJhc2VUaW1lb3V0KCk7XG4gICAgfVxuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkVudGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSAmJiB0aGlzLm9wdGlvbnMubnpQYXVzZU9uSG92ZXIpIHtcbiAgICAgIHRoaXMuY2xlYXJFcmFzZVRpbWVvdXQoKTtcbiAgICAgIHRoaXMudXBkYXRlVFRMKCk7XG4gICAgfVxuICB9XG5cbiAgb25MZWF2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UgJiYgdGhpcy5vcHRpb25zLm56UGF1c2VPbkhvdmVyKSB7XG4gICAgICB0aGlzLnN0YXJ0RXJhc2VUaW1lb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGRlc3Ryb3kodXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy51c2VyQWN0aW9uID0gdXNlckFjdGlvbjtcbiAgICBpZiAodGhpcy5vcHRpb25zLm56QW5pbWF0ZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5zdGF0ZSA9ICdsZWF2ZSc7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmNsb3NlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZVRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KHsgaWQ6IHRoaXMuaW5zdGFuY2UubWVzc2FnZUlkLCB1c2VyQWN0aW9uIH0pO1xuICAgICAgfSwgMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0cm95ZWQubmV4dCh7IGlkOiB0aGlzLmluc3RhbmNlLm1lc3NhZ2VJZCwgdXNlckFjdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRFcmFzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVyYXNlVFRMID0gdGhpcy5vcHRpb25zLm56RHVyYXRpb247XG4gICAgdGhpcy5lcmFzZVRpbWluZ1N0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVFRMKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5lcmFzZVRUTCAtPSBEYXRlLm5vdygpIC0gdGhpcy5lcmFzZVRpbWluZ1N0YXJ0ITtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVFRMID4gMCkge1xuICAgICAgdGhpcy5jbGVhckVyYXNlVGltZW91dCgpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmRlc3Ryb3koKSwgdGhpcy5lcmFzZVRUTCk7XG4gICAgICB0aGlzLmVyYXNlVGltaW5nU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmVyYXNlVGltZXIpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19