ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
412 lines • 26.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: base.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @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 {?} */
let globalCounter = 0;
/**
* @abstract
*/
export class NzMNService {
/**
* @param {?} nzSingletonService
* @param {?} overlay
* @param {?} injector
*/
constructor(nzSingletonService, overlay, injector) {
this.nzSingletonService = nzSingletonService;
this.overlay = overlay;
this.injector = injector;
}
/**
* @param {?=} id
* @return {?}
*/
remove(id) {
if (this.container) {
if (id) {
this.container.remove(id);
}
else {
this.container.removeAll();
}
}
}
/**
* @protected
* @return {?}
*/
getInstanceId() {
return `${this.componentPrefix}-${globalCounter++}`;
}
/**
* @protected
* @template T
* @param {?} ctor
* @return {?}
*/
withContainer(ctor) {
/** @type {?} */
let containerInstance = this.nzSingletonService.getSingletonWithKey(this.componentPrefix);
if (containerInstance) {
return (/** @type {?} */ (containerInstance));
}
/** @type {?} */
const overlayRef = this.overlay.create({
hasBackdrop: false,
scrollStrategy: this.overlay.scrollStrategies.noop(),
positionStrategy: this.overlay.position().global()
});
/** @type {?} */
const componentPortal = new ComponentPortal(ctor, null, this.injector);
/** @type {?} */
const componentRef = overlayRef.attach(componentPortal);
/** @type {?} */
const overlayPane = overlayRef.overlayElement;
overlayPane.style.zIndex = '1010';
if (!containerInstance) {
this.container = containerInstance = componentRef.instance;
this.nzSingletonService.registerSingletonWithKey(this.componentPrefix, containerInstance);
}
return (/** @type {?} */ (containerInstance));
}
}
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
*/
export class NzMNContainerComponent {
/**
* @param {?} cdr
* @param {?} nzConfigService
*/
constructor(cdr, nzConfigService) {
this.cdr = cdr;
this.nzConfigService = nzConfigService;
this.instances = [];
this.destroy$ = new Subject();
this.updateConfig();
}
/**
* @return {?}
*/
ngOnInit() {
this.subscribeConfigChange();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
/**
* @param {?} data
* @return {?}
*/
create(data) {
/** @type {?} */
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;
}
/**
* @param {?} id
* @param {?=} userAction
* @return {?}
*/
remove(id, userAction = false) {
this.instances.some((/**
* @param {?} instance
* @param {?} index
* @return {?}
*/
(instance, index) => {
if (instance.messageId === id) {
this.instances.splice(index, 1);
this.instances = [...this.instances];
this.onRemove(instance, userAction);
this.readyInstances();
return true;
}
return false;
}));
}
/**
* @return {?}
*/
removeAll() {
this.instances.forEach((/**
* @param {?} i
* @return {?}
*/
i => this.onRemove(i, false)));
this.instances = [];
this.readyInstances();
}
/**
* @protected
* @param {?} instance
* @return {?}
*/
onCreate(instance) {
instance.options = this.mergeOptions(instance.options);
instance.onClose = new Subject();
return (/** @type {?} */ (instance));
}
/**
* @protected
* @param {?} instance
* @param {?} userAction
* @return {?}
*/
onRemove(instance, userAction) {
instance.onClose.next(userAction);
instance.onClose.complete();
}
/**
* @protected
* @return {?}
*/
readyInstances() {
this.cdr.detectChanges();
}
/**
* @protected
* @param {?=} options
* @return {?}
*/
mergeOptions(options) {
const { nzDuration, nzAnimate, nzPauseOnHover } = this.config;
return Object.assign({ nzDuration, nzAnimate, nzPauseOnHover }, options);
}
}
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
*/
export class NzMNComponent {
/**
* @param {?} cdr
*/
constructor(cdr) {
this.cdr = cdr;
this.destroyed = new EventEmitter();
this.eraseTimer = null;
}
/**
* @return {?}
*/
ngOnInit() {
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 {?}
*/
ngOnDestroy() {
if (this.autoClose) {
this.clearEraseTimeout();
}
}
/**
* @return {?}
*/
onEnter() {
if (this.autoClose && this.options.nzPauseOnHover) {
this.clearEraseTimeout();
this.updateTTL();
}
}
/**
* @return {?}
*/
onLeave() {
if (this.autoClose && this.options.nzPauseOnHover) {
this.startEraseTimeout();
}
}
/**
* @protected
* @param {?=} userAction
* @return {?}
*/
destroy(userAction = false) {
if (this.options.nzAnimate) {
this.instance.state = 'leave';
this.cdr.detectChanges();
setTimeout((/**
* @return {?}
*/
() => {
this.destroyed.next({ id: this.instance.messageId, userAction: userAction });
}), 200);
}
else {
this.destroyed.next({ id: this.instance.messageId, userAction: userAction });
}
}
/**
* @private
* @return {?}
*/
initErase() {
this.eraseTTL = this.options.nzDuration;
this.eraseTimingStart = Date.now();
}
/**
* @private
* @return {?}
*/
updateTTL() {
if (this.autoClose) {
this.eraseTTL -= Date.now() - this.eraseTimingStart;
}
}
/**
* @private
* @return {?}
*/
startEraseTimeout() {
if (this.eraseTTL > 0) {
this.clearEraseTimeout();
this.eraseTimer = setTimeout((/**
* @return {?}
*/
() => this.destroy()), this.eraseTTL);
this.eraseTimingStart = Date.now();
}
else {
this.destroy();
}
}
/**
* @private
* @return {?}
*/
clearEraseTimeout() {
if (this.eraseTimer !== null) {
clearTimeout(this.eraseTimer);
this.eraseTimer = null;
}
}
}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvbWVzc2FnZS8iLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBU0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBcUIsWUFBWSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUc3RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztJQUkzQixhQUFhLEdBQUcsQ0FBQzs7OztBQUVyQixNQUFNLE9BQWdCLFdBQVc7Ozs7OztJQUkvQixZQUFzQixrQkFBc0MsRUFBWSxPQUFnQixFQUFVLFFBQWtCO1FBQTlGLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7Ozs7O0lBRXhILE1BQU0sQ0FBQyxFQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLEVBQUUsRUFBRTtnQkFDTixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMzQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQzVCO1NBQ0Y7SUFDSCxDQUFDOzs7OztJQUVTLGFBQWE7UUFDckIsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksYUFBYSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxDQUFDOzs7Ozs7O0lBRVMsYUFBYSxDQUFtQyxJQUFzQjs7WUFDMUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDekYsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixPQUFPLG1CQUFBLGlCQUFpQixFQUFLLENBQUM7U0FDL0I7O2NBRUssVUFBVSxH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Q0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDcEM7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7Ozs7O0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDNUIsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtJQUNILENBQUM7Q0FDRjs7O0lBdEZDLGlDQUFrQzs7SUFDbEMsOEJBQWM7O0lBRWQsa0NBQTZFOzs7OztJQUU3RSxnQ0FBa0Q7Ozs7O0lBQ2xELGtDQUE2Qjs7Ozs7SUFDN0IsbUNBQTJDOzs7OztJQUMzQyx5Q0FBbUM7Ozs7O0lBQ25DLGlDQUEyQjs7Ozs7SUFFZiw0QkFBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlQ29uZmlnLCBOekNvbmZpZ1NlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IE56U2luZ2xldG9uU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE56TWVzc2FnZURhdGEsIE56TWVzc2FnZURhdGFPcHRpb25zIH0gZnJvbSAnLi90eXBpbmdzJztcblxubGV0IGdsb2JhbENvdW50ZXIgPSAwO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTnpNTlNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcG9uZW50UHJlZml4OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjb250YWluZXI6IE56TU5Db250YWluZXJDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG56U2luZ2xldG9uU2VydmljZTogTnpTaW5nbGV0b25TZXJ2aWNlLCBwcm90ZWN0ZWQgb3ZlcmxheTogT3ZlcmxheSwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgcmVtb3ZlKGlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGFpbmVyKSB7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlKGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUFsbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJbnN0YW5jZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29tcG9uZW50UHJlZml4fS0ke2dsb2JhbENvdW50ZXIrK31gO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdpdGhDb250YWluZXI8VCBleHRlbmRzIE56TU5Db250YWluZXJDb21wb25lbnQ+KGN0b3I6IENvbXBvbmVudFR5cGU8VD4pOiBUIHtcbiAgICBsZXQgY29udGFpbmVySW5zdGFuY2UgPSB0aGlzLm56U2luZ2xldG9uU2VydmljZS5nZXRTaW5nbGV0b25XaXRoS2V5KHRoaXMuY29tcG9uZW50UHJlZml4KTtcbiAgICBpZiAoY29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBjb250YWluZXJJbnN0YW5jZSBhcyBUO1xuICAgIH1cblxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ub29wKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoY3RvciwgbnVsbCwgdGhpcy5pbmplY3Rvcik7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gb3ZlcmxheVJlZi5hdHRhY2goY29tcG9uZW50UG9ydGFsKTtcbiAgICBjb25zdCBvdmVybGF5UGFuZSA9IG92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQ7XG4gICAgb3ZlcmxheVBhbmUuc3R5bGUuekluZGV4ID0gJzEwMTAnO1xuXG4gICAgaWYgKCFjb250YWluZXJJbnN0YW5jZSkge1xuICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXJJbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgIHRoaXMubnpTaW5nbGV0b25TZXJ2aWNlLnJlZ2lzdGVyU2luZ2xldG9uV2l0aEtleSh0aGlzLmNvbXBvbmVudFByZWZpeCwgY29udGFpbmVySW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXJJbnN0YW5jZSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOek1OQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25maWc6IFJlcXVpcmVkPE1lc3NhZ2VDb25maWc+O1xuICBpbnN0YW5jZXM6IEFycmF5PFJlcXVpcmVkPE56TWVzc2FnZURhdGE+PiA9IFtdO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByb3RlY3RlZCBuekNvbmZpZ1NlcnZpY2U6IE56Q29uZmlnU2VydmljZSkge1xuICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZUNvbmZpZ0NoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IE56TWVzc2FnZURhdGEpOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLm9uQ3JlYXRlKGRhdGEpO1xuXG4gICAgaWYgKHRoaXMuaW5zdGFuY2VzLmxlbmd0aCA+PSB0aGlzLmNvbmZpZy5uek1heFN0YWNrKSB7XG4gICAgICB0aGlzLmluc3RhbmNlcyA9IHRoaXMuaW5zdGFuY2VzLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIHRoaXMuaW5zdGFuY2VzID0gWy4uLnRoaXMuaW5zdGFuY2VzLCBpbnN0YW5jZV07XG5cbiAgICB0aGlzLnJlYWR5SW5zdGFuY2VzKCk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICByZW1vdmUoaWQ6IHN0cmluZywgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0YW5jZXMuc29tZSgoaW5zdGFuY2UsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2UubWVzc2FnZUlkID09PSBpZCkge1xuICAgICAgICB0aGlzLmluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmluc3RhbmNlcyA9IFsuLi50aGlzLmluc3RhbmNlc107XG4gICAgICAgIHRoaXMub25SZW1vdmUoaW5zdGFuY2UsIHVzZXJBY3Rpb24pO1xuICAgICAgICB0aGlzLnJlYWR5SW5zdGFuY2VzKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zdGFuY2VzLmZvckVhY2goaSA9PiB0aGlzLm9uUmVtb3ZlKGksIGZhbHNlKSk7XG4gICAgdGhpcy5pbnN0YW5jZXMgPSBbXTtcblxuICAgIHRoaXMucmVhZHlJbnN0YW5jZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNyZWF0ZShpbnN0YW5jZTogTnpNZXNzYWdlRGF0YSk6IFJlcXVpcmVkPE56TWVzc2FnZURhdGE+IHtcbiAgICBpbnN0YW5jZS5vcHRpb25zID0gdGhpcy5tZXJnZU9wdGlvbnMoaW5zdGFuY2Uub3B0aW9ucyk7XG4gICAgaW5zdGFuY2Uub25DbG9zZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcmV0dXJuIGluc3RhbmNlIGFzIFJlcXVpcmVkPE56TWVzc2FnZURhdGE+O1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uUmVtb3ZlKGluc3RhbmNlOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPiwgdXNlckFjdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGluc3RhbmNlLm9uQ2xvc2UubmV4dCh1c2VyQWN0aW9uKTtcbiAgICBpbnN0YW5jZS5vbkNsb3NlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZHlJbnN0YW5jZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZUNvbmZpZygpOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzdWJzY3JpYmVDb25maWdDaGFuZ2UoKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgbWVyZ2VPcHRpb25zKG9wdGlvbnM/OiBOek1lc3NhZ2VEYXRhT3B0aW9ucyk6IE56TWVzc2FnZURhdGFPcHRpb25zIHtcbiAgICBjb25zdCB7IG56RHVyYXRpb24sIG56QW5pbWF0ZSwgbnpQYXVzZU9uSG92ZXIgfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiB7IG56RHVyYXRpb24sIG56QW5pbWF0ZSwgbnpQYXVzZU9uSG92ZXIsIC4uLm9wdGlvbnMgfTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTnpNTkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgaW5zdGFuY2U6IFJlcXVpcmVkPE56TWVzc2FnZURhdGE+O1xuICBpbmRleDogbnVtYmVyO1xuXG4gIHJlYWRvbmx5IGRlc3Ryb3llZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nOyB1c2VyQWN0aW9uOiBib29sZWFuIH0+KCk7XG5cbiAgcHJvdGVjdGVkIG9wdGlvbnM6IFJlcXVpcmVkPE56TWVzc2FnZURhdGFPcHRpb25zPjtcbiAgcHJvdGVjdGVkIGF1dG9DbG9zZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGVyYXNlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcm90ZWN0ZWQgZXJhc2VUaW1pbmdTdGFydDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZXJhc2VUVEw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmluc3RhbmNlLm9wdGlvbnMgYXMgUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YU9wdGlvbnM+O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5uekFuaW1hdGUpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc3RhdGUgPSAnZW50ZXInO1xuICAgIH1cblxuICAgIHRoaXMuYXV0b0Nsb3NlID0gdGhpcy5vcHRpb25zLm56RHVyYXRpb24gPiAwO1xuXG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKSB7XG4gICAgICB0aGlzLmluaXRFcmFzZSgpO1xuICAgICAgdGhpcy5zdGFydEVyYXNlVGltZW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5jbGVhckVyYXNlVGltZW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRW50ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlICYmIHRoaXMub3B0aW9ucy5uelBhdXNlT25Ib3Zlcikge1xuICAgICAgdGhpcy5jbGVhckVyYXNlVGltZW91dCgpO1xuICAgICAgdGhpcy51cGRhdGVUVEwoKTtcbiAgICB9XG4gIH1cblxuICBvbkxlYXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSAmJiB0aGlzLm9wdGlvbnMubnpQYXVzZU9uSG92ZXIpIHtcbiAgICAgIHRoaXMuc3RhcnRFcmFzZVRpbWVvdXQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVzdHJveSh1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm56QW5pbWF0ZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5zdGF0ZSA9ICdsZWF2ZSc7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQubmV4dCh7IGlkOiB0aGlzLmluc3RhbmNlLm1lc3NhZ2VJZCwgdXNlckFjdGlvbjogdXNlckFjdGlvbiB9KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoeyBpZDogdGhpcy5pbnN0YW5jZS5tZXNzYWdlSWQsIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24gfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0RXJhc2UoKTogdm9pZCB7XG4gICAgdGhpcy5lcmFzZVRUTCA9IHRoaXMub3B0aW9ucy5uekR1cmF0aW9uO1xuICAgIHRoaXMuZXJhc2VUaW1pbmdTdGFydCA9IERhdGUubm93KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRUTCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UpIHtcbiAgICAgIHRoaXMuZXJhc2VUVEwgLT0gRGF0ZS5ub3coKSAtIHRoaXMuZXJhc2VUaW1pbmdTdGFydDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVFRMID4gMCkge1xuICAgICAgdGhpcy5jbGVhckVyYXNlVGltZW91dCgpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmRlc3Ryb3koKSwgdGhpcy5lcmFzZVRUTCk7XG4gICAgICB0aGlzLmVyYXNlVGltaW5nU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmVyYXNlVGltZXIpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==