UNPKG

ng-zorro-antd

Version:

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

516 lines 29.7 kB
/** * @fileoverview added by tsickle * Generated from: base.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __assign, __read, __spread } from "tslib"; /** * @license * Copyright Alibaba.com All Rights Reserved. * * 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 { ComponentPortal } from '@angular/cdk/portal'; import { EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; /** @type {?} */ var globalCounter = 0; /** * @abstract */ var /** * @abstract */ NzMNService = /** @class */ (function () { function NzMNService(nzSingletonService, overlay, injector) { this.nzSingletonService = nzSingletonService; this.overlay = overlay; this.injector = injector; } /** * @param {?=} id * @return {?} */ NzMNService.prototype.remove = /** * @param {?=} id * @return {?} */ function (id) { if (this.container) { if (id) { this.container.remove(id); } else { this.container.removeAll(); } } }; /** * @protected * @return {?} */ NzMNService.prototype.getInstanceId = /** * @protected * @return {?} */ function () { return this.componentPrefix + "-" + globalCounter++; }; /** * @protected * @template T * @param {?} ctor * @return {?} */ NzMNService.prototype.withContainer = /** * @protected * @template T * @param {?} ctor * @return {?} */ function (ctor) { /** @type {?} */ var containerInstance = this.nzSingletonService.getSingletonWithKey(this.componentPrefix); if (containerInstance) { return (/** @type {?} */ (containerInstance)); } /** @type {?} */ var overlayRef = this.overlay.create({ hasBackdrop: false, scrollStrategy: this.overlay.scrollStrategies.noop(), positionStrategy: this.overlay.position().global() }); /** @type {?} */ var componentPortal = new ComponentPortal(ctor, null, this.injector); /** @type {?} */ var componentRef = overlayRef.attach(componentPortal); /** @type {?} */ var overlayPane = overlayRef.overlayElement; overlayPane.style.zIndex = '1010'; if (!containerInstance) { this.container = containerInstance = componentRef.instance; this.nzSingletonService.registerSingletonWithKey(this.componentPrefix, containerInstance); } return (/** @type {?} */ (containerInstance)); }; return NzMNService; }()); /** * @abstract */ export { NzMNService }; if (false) { /** * @type {?} * @protected */ NzMNService.prototype.componentPrefix; /** * @type {?} * @protected */ NzMNService.prototype.container; /** * @type {?} * @protected */ NzMNService.prototype.nzSingletonService; /** * @type {?} * @protected */ NzMNService.prototype.overlay; /** * @type {?} * @private */ NzMNService.prototype.injector; } /** * @abstract */ var /** * @abstract */ NzMNContainerComponent = /** @class */ (function () { function NzMNContainerComponent(cdr, nzConfigService) { this.cdr = cdr; this.nzConfigService = nzConfigService; this.instances = []; this.destroy$ = new Subject(); this.updateConfig(); } /** * @return {?} */ NzMNContainerComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.subscribeConfigChange(); }; /** * @return {?} */ NzMNContainerComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.destroy$.next(); this.destroy$.complete(); }; /** * @param {?} data * @return {?} */ NzMNContainerComponent.prototype.create = /** * @param {?} data * @return {?} */ function (data) { /** @type {?} */ var instance = this.onCreate(data); if (this.instances.length >= (/** @type {?} */ (this.config)).nzMaxStack) { this.instances = this.instances.slice(1); } this.instances = __spread(this.instances, [instance]); this.readyInstances(); return instance; }; /** * @param {?} id * @param {?=} userAction * @return {?} */ NzMNContainerComponent.prototype.remove = /** * @param {?} id * @param {?=} userAction * @return {?} */ function (id, userAction) { var _this = this; if (userAction === void 0) { userAction = false; } this.instances.some((/** * @param {?} instance * @param {?} index * @return {?} */ function (instance, index) { if (instance.messageId === id) { _this.instances.splice(index, 1); _this.instances = __spread(_this.instances); _this.onRemove(instance, userAction); _this.readyInstances(); return true; } return false; })); }; /** * @return {?} */ NzMNContainerComponent.prototype.removeAll = /** * @return {?} */ function () { var _this = this; this.instances.forEach((/** * @param {?} i * @return {?} */ function (i) { return _this.onRemove(i, false); })); this.instances = []; this.readyInstances(); }; /** * @protected * @param {?} instance * @return {?} */ NzMNContainerComponent.prototype.onCreate = /** * @protected * @param {?} instance * @return {?} */ function (instance) { instance.options = this.mergeOptions(instance.options); instance.onClose = new Subject(); return (/** @type {?} */ (instance)); }; /** * @protected * @param {?} instance * @param {?} userAction * @return {?} */ NzMNContainerComponent.prototype.onRemove = /** * @protected * @param {?} instance * @param {?} userAction * @return {?} */ function (instance, userAction) { instance.onClose.next(userAction); instance.onClose.complete(); }; /** * @protected * @return {?} */ NzMNContainerComponent.prototype.readyInstances = /** * @protected * @return {?} */ function () { this.cdr.detectChanges(); }; /** * @protected * @param {?=} options * @return {?} */ NzMNContainerComponent.prototype.mergeOptions = /** * @protected * @param {?=} options * @return {?} */ function (options) { var _a = (/** @type {?} */ (this.config)), nzDuration = _a.nzDuration, nzAnimate = _a.nzAnimate, nzPauseOnHover = _a.nzPauseOnHover; return __assign({ nzDuration: nzDuration, nzAnimate: nzAnimate, nzPauseOnHover: nzPauseOnHover }, options); }; return NzMNContainerComponent; }()); /** * @abstract */ export { NzMNContainerComponent }; if (false) { /** @type {?} */ NzMNContainerComponent.prototype.config; /** @type {?} */ NzMNContainerComponent.prototype.instances; /** * @type {?} * @protected */ NzMNContainerComponent.prototype.destroy$; /** * @type {?} * @protected */ NzMNContainerComponent.prototype.cdr; /** * @type {?} * @protected */ NzMNContainerComponent.prototype.nzConfigService; /** * @abstract * @protected * @return {?} */ NzMNContainerComponent.prototype.updateConfig = function () { }; /** * @abstract * @protected * @return {?} */ NzMNContainerComponent.prototype.subscribeConfigChange = function () { }; } /** * @abstract */ var /** * @abstract */ NzMNComponent = /** @class */ (function () { function NzMNComponent(cdr) { this.cdr = cdr; this.destroyed = new EventEmitter(); this.eraseTimer = null; } /** * @return {?} */ NzMNComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.options = (/** @type {?} */ (this.instance.options)); if (this.options.nzAnimate) { this.instance.state = 'enter'; } this.autoClose = this.options.nzDuration > 0; if (this.autoClose) { this.initErase(); this.startEraseTimeout(); } }; /** * @return {?} */ NzMNComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.autoClose) { this.clearEraseTimeout(); } }; /** * @return {?} */ NzMNComponent.prototype.onEnter = /** * @return {?} */ function () { if (this.autoClose && this.options.nzPauseOnHover) { this.clearEraseTimeout(); this.updateTTL(); } }; /** * @return {?} */ NzMNComponent.prototype.onLeave = /** * @return {?} */ function () { if (this.autoClose && this.options.nzPauseOnHover) { this.startEraseTimeout(); } }; /** * @protected * @param {?=} userAction * @return {?} */ NzMNComponent.prototype.destroy = /** * @protected * @param {?=} userAction * @return {?} */ function (userAction) { var _this = this; if (userAction === void 0) { userAction = false; } if (this.options.nzAnimate) { this.instance.state = 'leave'; this.cdr.detectChanges(); setTimeout((/** * @return {?} */ function () { _this.destroyed.next({ id: _this.instance.messageId, userAction: userAction }); }), 200); } else { this.destroyed.next({ id: this.instance.messageId, userAction: userAction }); } }; /** * @private * @return {?} */ NzMNComponent.prototype.initErase = /** * @private * @return {?} */ function () { this.eraseTTL = this.options.nzDuration; this.eraseTimingStart = Date.now(); }; /** * @private * @return {?} */ NzMNComponent.prototype.updateTTL = /** * @private * @return {?} */ function () { if (this.autoClose) { this.eraseTTL -= Date.now() - (/** @type {?} */ (this.eraseTimingStart)); } }; /** * @private * @return {?} */ NzMNComponent.prototype.startEraseTimeout = /** * @private * @return {?} */ function () { var _this = this; if (this.eraseTTL > 0) { this.clearEraseTimeout(); this.eraseTimer = setTimeout((/** * @return {?} */ function () { return _this.destroy(); }), this.eraseTTL); this.eraseTimingStart = Date.now(); } else { this.destroy(); } }; /** * @private * @return {?} */ NzMNComponent.prototype.clearEraseTimeout = /** * @private * @return {?} */ function () { if (this.eraseTimer !== null) { clearTimeout(this.eraseTimer); this.eraseTimer = null; } }; return NzMNComponent; }()); /** * @abstract */ export { NzMNComponent }; if (false) { /** @type {?} */ NzMNComponent.prototype.instance; /** @type {?} */ NzMNComponent.prototype.index; /** @type {?} */ NzMNComponent.prototype.destroyed; /** * @type {?} * @protected */ NzMNComponent.prototype.options; /** * @type {?} * @protected */ NzMNComponent.prototype.autoClose; /** * @type {?} * @protected */ NzMNComponent.prototype.eraseTimer; /** * @type {?} * @protected */ NzMNComponent.prototype.eraseTimingStart; /** * @type {?} * @protected */ NzMNComponent.prototype.eraseTTL; /** * @type {?} * @protected */ NzMNComponent.prototype.cdr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvbWVzc2FnZS8iLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQXFCLFlBQVksRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFHN0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7SUFJM0IsYUFBYSxHQUFHLENBQUM7Ozs7QUFFckI7Ozs7SUFJRSxxQkFBc0Isa0JBQXNDLEVBQVksT0FBZ0IsRUFBVSxRQUFrQjtRQUE5Rix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBRyxDQUFDOzs7OztJQUV4SCw0QkFBTTs7OztJQUFOLFVBQU8sRUFBVztRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDM0I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUM1QjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7SUFFUyxtQ0FBYTs7OztJQUF2QjtRQUNFLE9BQVUsSUFBSSxDQUFDLGVBQWUsU0FBSSxhQUFhLEVBQUksQ0FBQztJQUN0RCxDQUFDOzs7Ozs7O0lBRVMsbUNBQWE7Ozs7OztJQUF2QixVQUEwRCxJQUFzQjs7WUFDMUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDekYsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixPQUFPLG1CQUFBLGlCQUFpQixFQUFLLENBQUM7U0FDL0I7O1lBRUssVUFB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QUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLG1CQUFBLElBQUksQ0FBQyxnQkFBZ0IsRUFBQyxDQUFDO1NBQ3REO0lBQ0gsQ0FBQzs7Ozs7SUFFTyx5Q0FBaUI7Ozs7SUFBekI7UUFBQSxpQkFRQztRQVBDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVOzs7WUFBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLE9BQU8sRUFBRSxFQUFkLENBQWMsR0FBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNwQzthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQzs7Ozs7SUFFTyx5Q0FBaUI7Ozs7SUFBekI7UUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBQ0gsb0JBQUM7QUFBRCxDQUFDLEFBdkZELElBdUZDOzs7Ozs7O0lBdEZDLGlDQUFtQzs7SUFDbkMsOEJBQWU7O0lBRWYsa0NBQTZFOzs7OztJQUU3RSxnQ0FBbUQ7Ozs7O0lBQ25ELGtDQUE4Qjs7Ozs7SUFDOUIsbUNBQTJDOzs7OztJQUMzQyx5Q0FBb0M7Ozs7O0lBQ3BDLGlDQUE0Qjs7Ozs7SUFFaEIsNEJBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFsaWJhYmEuY29tIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVzc2FnZUNvbmZpZywgTnpDb25maWdTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBOelNpbmdsZXRvblNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvc2VydmljZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOek1lc3NhZ2VEYXRhLCBOek1lc3NhZ2VEYXRhT3B0aW9ucyB9IGZyb20gJy4vdHlwaW5ncyc7XG5cbmxldCBnbG9iYWxDb3VudGVyID0gMDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE56TU5TZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbXBvbmVudFByZWZpeDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgY29udGFpbmVyPzogTnpNTkNvbnRhaW5lckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbnpTaW5nbGV0b25TZXJ2aWNlOiBOelNpbmdsZXRvblNlcnZpY2UsIHByb3RlY3RlZCBvdmVybGF5OiBPdmVybGF5LCBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICByZW1vdmUoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmUoaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlQWxsKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEluc3RhbmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb21wb25lbnRQcmVmaXh9LSR7Z2xvYmFsQ291bnRlcisrfWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2l0aENvbnRhaW5lcjxUIGV4dGVuZHMgTnpNTkNvbnRhaW5lckNvbXBvbmVudD4oY3RvcjogQ29tcG9uZW50VHlwZTxUPik6IFQge1xuICAgIGxldCBjb250YWluZXJJbnN0YW5jZSA9IHRoaXMubnpTaW5nbGV0b25TZXJ2aWNlLmdldFNpbmdsZXRvbldpdGhLZXkodGhpcy5jb21wb25lbnRQcmVmaXgpO1xuICAgIGlmIChjb250YWluZXJJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIGNvbnRhaW5lckluc3RhbmNlIGFzIFQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpXG4gICAgfSk7XG4gICAgY29uc3QgY29tcG9uZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChjdG9yLCBudWxsLCB0aGlzLmluamVjdG9yKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBvdmVybGF5UmVmLmF0dGFjaChjb21wb25lbnRQb3J0YWwpO1xuICAgIGNvbnN0IG92ZXJsYXlQYW5lID0gb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudDtcbiAgICBvdmVybGF5UGFuZS5zdHlsZS56SW5kZXggPSAnMTAxMCc7XG5cbiAgICBpZiAoIWNvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lckluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgICAgdGhpcy5uelNpbmdsZXRvblNlcnZpY2UucmVnaXN0ZXJTaW5nbGV0b25XaXRoS2V5KHRoaXMuY29tcG9uZW50UHJlZml4LCBjb250YWluZXJJbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lckluc3RhbmNlIGFzIFQ7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE56TU5Db250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNvbmZpZz86IFJlcXVpcmVkPE1lc3NhZ2VDb25maWc+O1xuICBpbnN0YW5jZXM6IEFycmF5PFJlcXVpcmVkPE56TWVzc2FnZURhdGE+PiA9IFtdO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByb3RlY3RlZCBuekNvbmZpZ1NlcnZpY2U6IE56Q29uZmlnU2VydmljZSkge1xuICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZUNvbmZpZ0NoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IE56TWVzc2FnZURhdGEpOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLm9uQ3JlYXRlKGRhdGEpO1xuXG4gICAgaWYgKHRoaXMuaW5zdGFuY2VzLmxlbmd0aCA+PSB0aGlzLmNvbmZpZyEubnpNYXhTdGFjaykge1xuICAgICAgdGhpcy5pbnN0YW5jZXMgPSB0aGlzLmluc3RhbmNlcy5zbGljZSgxKTtcbiAgICB9XG5cbiAgICB0aGlzLmluc3RhbmNlcyA9IFsuLi50aGlzLmluc3RhbmNlcywgaW5zdGFuY2VdO1xuXG4gICAgdGhpcy5yZWFkeUluc3RhbmNlcygpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBzdHJpbmcsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuaW5zdGFuY2VzLnNvbWUoKGluc3RhbmNlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlLm1lc3NhZ2VJZCA9PT0gaWQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZXMgPSBbLi4udGhpcy5pbnN0YW5jZXNdO1xuICAgICAgICB0aGlzLm9uUmVtb3ZlKGluc3RhbmNlLCB1c2VyQWN0aW9uKTtcbiAgICAgICAgdGhpcy5yZWFkeUluc3RhbmNlcygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmluc3RhbmNlcy5mb3JFYWNoKGkgPT4gdGhpcy5vblJlbW92ZShpLCBmYWxzZSkpO1xuICAgIHRoaXMuaW5zdGFuY2VzID0gW107XG5cbiAgICB0aGlzLnJlYWR5SW5zdGFuY2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DcmVhdGUoaW5zdGFuY2U6IE56TWVzc2FnZURhdGEpOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPiB7XG4gICAgaW5zdGFuY2Uub3B0aW9ucyA9IHRoaXMubWVyZ2VPcHRpb25zKGluc3RhbmNlLm9wdGlvbnMpO1xuICAgIGluc3RhbmNlLm9uQ2xvc2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHJldHVybiBpbnN0YW5jZSBhcyBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPjtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblJlbW92ZShpbnN0YW5jZTogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT4sIHVzZXJBY3Rpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpbnN0YW5jZS5vbkNsb3NlLm5leHQodXNlckFjdGlvbik7XG4gICAgaW5zdGFuY2Uub25DbG9zZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWR5SW5zdGFuY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVDb25maWcoKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3Vic2NyaWJlQ29uZmlnQ2hhbmdlKCk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIG1lcmdlT3B0aW9ucyhvcHRpb25zPzogTnpNZXNzYWdlRGF0YU9wdGlvbnMpOiBOek1lc3NhZ2VEYXRhT3B0aW9ucyB7XG4gICAgY29uc3QgeyBuekR1cmF0aW9uLCBuekFuaW1hdGUsIG56UGF1c2VPbkhvdmVyIH0gPSB0aGlzLmNvbmZpZyE7XG4gICAgcmV0dXJuIHsgbnpEdXJhdGlvbiwgbnpBbmltYXRlLCBuelBhdXNlT25Ib3ZlciwgLi4ub3B0aW9ucyB9O1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOek1OQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBpbnN0YW5jZSE6IFJlcXVpcmVkPE56TWVzc2FnZURhdGE+O1xuICBpbmRleD86IG51bWJlcjtcblxuICByZWFkb25seSBkZXN0cm95ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZzsgdXNlckFjdGlvbjogYm9vbGVhbiB9PigpO1xuXG4gIHByb3RlY3RlZCBvcHRpb25zITogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YU9wdGlvbnM+O1xuICBwcm90ZWN0ZWQgYXV0b0Nsb3NlPzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGVyYXNlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcm90ZWN0ZWQgZXJhc2VUaW1pbmdTdGFydD86IG51bWJlcjtcbiAgcHJvdGVjdGVkIGVyYXNlVFRMITogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucyBhcyBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhT3B0aW9ucz47XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm56QW5pbWF0ZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5zdGF0ZSA9ICdlbnRlcic7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvQ2xvc2UgPSB0aGlzLm9wdGlvbnMubnpEdXJhdGlvbiA+IDA7XG5cbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UpIHtcbiAgICAgIHRoaXMuaW5pdEVyYXNlKCk7XG4gICAgICB0aGlzLnN0YXJ0RXJhc2VUaW1lb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKSB7XG4gICAgICB0aGlzLmNsZWFyRXJhc2VUaW1lb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgb25FbnRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UgJiYgdGhpcy5vcHRpb25zLm56UGF1c2VPbkhvdmVyKSB7XG4gICAgICB0aGlzLmNsZWFyRXJhc2VUaW1lb3V0KCk7XG4gICAgICB0aGlzLnVwZGF0ZVRUTCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTGVhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlICYmIHRoaXMub3B0aW9ucy5uelBhdXNlT25Ib3Zlcikge1xuICAgICAgdGhpcy5zdGFydEVyYXNlVGltZW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXN0cm95KHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubnpBbmltYXRlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLnN0YXRlID0gJ2xlYXZlJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KHsgaWQ6IHRoaXMuaW5zdGFuY2UubWVzc2FnZUlkLCB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uIH0pO1xuICAgICAgfSwgMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0cm95ZWQubmV4dCh7IGlkOiB0aGlzLmluc3RhbmNlLm1lc3NhZ2VJZCwgdXNlckFjdGlvbjogdXNlckFjdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRFcmFzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVyYXNlVFRMID0gdGhpcy5vcHRpb25zLm56RHVyYXRpb247XG4gICAgdGhpcy5lcmFzZVRpbWluZ1N0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVFRMKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5lcmFzZVRUTCAtPSBEYXRlLm5vdygpIC0gdGhpcy5lcmFzZVRpbWluZ1N0YXJ0ITtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVFRMID4gMCkge1xuICAgICAgdGhpcy5jbGVhckVyYXNlVGltZW91dCgpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmRlc3Ryb3koKSwgdGhpcy5lcmFzZVRUTCk7XG4gICAgICB0aGlzLmVyYXNlVGltaW5nU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmVyYXNlVGltZXIpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==