lamb-web-lib
Version:
LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).
346 lines • 22.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/**
* @license
* Copyright Lamb Team. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Injectable } from '@angular/core';
import { share } from 'rxjs/operators';
import { Location } from '@angular/common';
import { itemHover$, submenuToggle$, itemClick$, itemSelect$, navigateHome$, getSelectedItem$, addItems$, } from './variables';
var LambMenuInternalService = /** @class */ (function () {
function LambMenuInternalService(location) {
this.location = location;
this.items = [];
this.items = [];
}
/**
* @return {?}
*/
LambMenuInternalService.prototype.getItems = /**
* @return {?}
*/
function () {
return this.items;
};
/**
* @param {?} items
* @param {?} tag
* @param {?=} except
* @return {?}
*/
LambMenuInternalService.prototype.collapseAll = /**
* @param {?} items
* @param {?} tag
* @param {?=} except
* @return {?}
*/
function (items, tag, except) {
var _this = this;
/** @type {?} */
var excepts = this.getParent(tag, except);
items.forEach(function (item) { return _this.collapseItem(item, tag, excepts); });
};
/**
* @param {?} tag
* @param {?=} item
* @return {?}
*/
LambMenuInternalService.prototype.getParent = /**
* @param {?} tag
* @param {?=} item
* @return {?}
*/
function (tag, item) {
if (!item) {
return;
}
/** @type {?} */
var arr = [];
arr.push(item);
if (item.parent) {
arr.push.apply(arr, tslib_1.__spread(this.getParent(tag, item.parent)));
}
return arr;
};
/**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
LambMenuInternalService.prototype.itemHover = /**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
function (item, tag) {
itemHover$.next({ tag: tag, item: item });
};
/**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
LambMenuInternalService.prototype.submenuToggle = /**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
function (item, tag) {
submenuToggle$.next({ tag: tag, item: item });
};
/**
* @param {?} item
* @param {?} tag
* @return {?}
*/
LambMenuInternalService.prototype.selectItem = /**
* @param {?} item
* @param {?} tag
* @return {?}
*/
function (item, tag) {
item.selected = true;
this.itemSelect(item, tag);
this.selectParent(item, tag);
};
/**
* @param {?} __0
* @param {?} tag
* @return {?}
*/
LambMenuInternalService.prototype.selectParent = /**
* @param {?} __0
* @param {?} tag
* @return {?}
*/
function (_a, tag) {
var item = _a.parent;
if (!item) {
return;
}
if (!item.expanded) {
item.expanded = true;
this.submenuToggle(item, tag);
}
item.selected = true;
this.selectParent(item, tag);
};
/**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
LambMenuInternalService.prototype.itemClick = /**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
function (item, tag) {
itemClick$.next({ tag: tag, item: item });
};
/**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
LambMenuInternalService.prototype.itemSelect = /**
* @param {?} item
* @param {?=} tag
* @return {?}
*/
function (item, tag) {
itemSelect$.next({ tag: tag, item: item });
};
/**
* @return {?}
*/
LambMenuInternalService.prototype.onAddItem = /**
* @return {?}
*/
function () {
return addItems$.pipe(share());
};
/**
* @return {?}
*/
LambMenuInternalService.prototype.onNavigateHome = /**
* @return {?}
*/
function () {
return navigateHome$.pipe(share());
};
/**
* @return {?}
*/
LambMenuInternalService.prototype.onGetSelectedItem = /**
* @return {?}
*/
function () {
return getSelectedItem$.pipe(share());
};
/**
* @param {?} items
* @return {?}
*/
LambMenuInternalService.prototype.resetItems = /**
* @param {?} items
* @return {?}
*/
function (items) {
var _this = this;
items.forEach(function (item) { return _this.resetItem(item); });
};
/**
* @param {?} item
* @return {?}
*/
LambMenuInternalService.prototype.resetItem = /**
* @param {?} item
* @return {?}
*/
function (item) {
var _this = this;
item.selected = false;
if (item.children) {
item.children.forEach(function (child) {
_this.resetItem(child);
});
}
};
/**
* @param {?} items
* @return {?}
*/
LambMenuInternalService.prototype.prepareItems = /**
* @param {?} items
* @return {?}
*/
function (items) {
var _this = this;
items.forEach(function (item) { return _this.setParent(item); });
};
/**
* @param {?} item
* @return {?}
*/
LambMenuInternalService.prototype.setParent = /**
* @param {?} item
* @return {?}
*/
function (item) {
var _this = this;
if (item.children) {
item.children.forEach(function (child) {
child.parent = item;
_this.setParent(child);
});
}
};
/**
* @param {?} items
* @param {?} tag
* @param {?=} collapseOther
* @return {?}
*/
LambMenuInternalService.prototype.updateSelection = /**
* @param {?} items
* @param {?} tag
* @param {?=} collapseOther
* @return {?}
*/
function (items, tag, collapseOther) {
var _this = this;
if (collapseOther === void 0) { collapseOther = false; }
if (collapseOther) {
this.collapseAll(items, tag);
}
items.forEach(function (item) { return _this.selectItemByUrl(item, tag); });
};
/**
* @param {?} item
* @param {?} tag
* @return {?}
*/
LambMenuInternalService.prototype.selectItemByUrl = /**
* @param {?} item
* @param {?} tag
* @return {?}
*/
function (item, tag) {
/** @type {?} */
var wasSelected = item.selected;
/** @type {?} */
var isSelected = this.selectedInUrl(item);
if (!wasSelected && isSelected) {
this.selectItem(item, tag);
}
if (item.children) {
this.updateSelection(item.children, tag);
}
};
/**
* @param {?} item
* @return {?}
*/
LambMenuInternalService.prototype.selectedInUrl = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var exact = item.pathMatch === 'full';
/** @type {?} */
var location = this.location.path();
return ((exact && location === item.link) ||
(!exact && location.includes(item.link)) ||
(exact && item.fragment && location.substr(location.indexOf('#') + 1).includes(item.fragment)));
};
/**
* @param {?} item
* @param {?=} tag
* @param {?=} excepts
* @return {?}
*/
LambMenuInternalService.prototype.collapseItem = /**
* @param {?} item
* @param {?=} tag
* @param {?=} excepts
* @return {?}
*/
function (item, tag, excepts) {
var _this = this;
// if (except && except === item)) {
if (excepts && excepts.some(function (it) { return it === item; })) {
return;
}
/** @type {?} */
var wasExpanded = item.expanded;
item.expanded = false;
if (wasExpanded) {
this.submenuToggle(item);
}
if (item.children) {
item.children.forEach(function (child) { return _this.collapseItem(child, tag); });
}
};
LambMenuInternalService.decorators = [
{ type: Injectable },
];
LambMenuInternalService.ctorParameters = function () { return [
{ type: Location }
]; };
return LambMenuInternalService;
}());
export { LambMenuInternalService };
if (false) {
/** @type {?} */
LambMenuInternalService.prototype.items;
/** @type {?} */
LambMenuInternalService.prototype.location;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pbnRlcm5hbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbGFtYi13ZWItbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbWVudS9tZW51LWludGVybmFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQU9BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUNuRCxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxHQUMzQyxNQUFNLGFBQWEsQ0FBQztBQUdyQjtJQUlFLGlDQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjlCLFVBQUssR0FBbUIsRUFBRSxDQUFDO1FBR2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7Ozs7SUFFTSwwQ0FBUTs7O0lBQWY7UUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDOzs7Ozs7O0lBRU0sNkNBQVc7Ozs7OztJQUFsQixVQUFtQixLQUFxQixFQUFFLEdBQVcsRUFBRSxNQUFxQjtRQUE1RSxpQkFHQzs7WUFGTyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1FBQzNDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQXJDLENBQXFDLENBQUMsQ0FBQztJQUMvRCxDQUFDOzs7Ozs7SUFFTywyQ0FBUzs7Ozs7SUFBakIsVUFBa0IsR0FBVyxFQUFFLElBQW1CO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0sQ0FBQztRQUNULENBQUM7O1lBQ0ssR0FBRyxHQUFHLEVBQUU7UUFDZCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEIsR0FBRyxDQUFDLElBQUksT0FBUixHQUFHLG1CQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRTtRQUNoRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNiLENBQUM7Ozs7OztJQUVNLDJDQUFTOzs7OztJQUFoQixVQUFpQixJQUFrQixFQUFFLEdBQVk7UUFDL0MsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBQSxFQUFFLElBQUksTUFBQSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs7Ozs7SUFFTSwrQ0FBYTs7Ozs7SUFBcEIsVUFBcUIsSUFBa0IsRUFBRSxHQUFZO1FBQ25ELGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUEsRUFBRSxJQUFJLE1BQUEsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQzs7Ozs7O0lBRU0sNENBQVU7Ozs7O0lBQWpCLFVBQWtCLElBQWtCLEVBQUUsR0FBVztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDOzs7Ozs7SUFFTyw4Q0FBWTs7Ozs7SUFBcEIsVUFBcUIsRUFBOEIsRUFBRSxHQUFXO1lBQXpDLGdCQUFZO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0sQ0FBQztRQUNULENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDOzs7Ozs7SUFFTSwyQ0FBUzs7Ozs7SUFBaEIsVUFBaUIsSUFBa0IsRUFBRSxHQUFZO1FBQy9DLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUEsRUFBRSxJQUFJLE1BQUEsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQzs7Ozs7O0lBRU8sNENBQVU7Ozs7O0lBQWxCLFVBQW1CLElBQWtCLEVBQUUsR0FBWTtRQUNqRCxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7SUFFTSwyQ0FBUzs7O0lBQWhCO1FBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs7O0lBRU0sZ0RBQWM7OztJQUFyQjtRQUNFLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQzs7OztJQUVNLG1EQUFpQjs7O0lBQXhCO1FBQ0UsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Ozs7O0lBRU0sNENBQVU7Ozs7SUFBakIsVUFBa0IsS0FBcUI7UUFBdkMsaUJBRUM7UUFEQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsS0FBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBcEIsQ0FBb0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Ozs7O0lBRU8sMkNBQVM7Ozs7SUFBakIsVUFBa0IsSUFBa0I7UUFBcEMsaUJBUUM7UUFQQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUV0QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUs7Z0JBQ3pCLEtBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7Ozs7SUFFTSw4Q0FBWTs7OztJQUFuQixVQUFvQixLQUFxQjtRQUF6QyxpQkFFQztRQURDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFwQixDQUFvQixDQUFDLENBQUM7SUFDOUMsQ0FBQzs7Ozs7SUFFTywyQ0FBUzs7OztJQUFqQixVQUFrQixJQUFrQjtRQUFwQyxpQkFPQztRQU5DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztnQkFDekIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7Ozs7OztJQUVNLGlEQUFlOzs7Ozs7SUFBdEIsVUFBdUIsS0FBcUIsRUFBRSxHQUFXLEVBQUUsYUFBOEI7UUFBekYsaUJBS0M7UUFMMEQsOEJBQUEsRUFBQSxxQkFBOEI7UUFDdkYsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLEtBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUEvQixDQUErQixDQUFDLENBQUM7SUFDekQsQ0FBQzs7Ozs7O0lBRU8saURBQWU7Ozs7O0lBQXZCLFVBQXdCLElBQWtCLEVBQUUsR0FBVzs7WUFDL0MsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFROztZQUMzQixVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDM0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDOzs7OztJQUVPLCtDQUFhOzs7O0lBQXJCLFVBQXNCLElBQWtCOztZQUNoQyxLQUFLLEdBQVksSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNOztZQUMxQyxRQUFRLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7UUFDN0MsTUFBTSxDQUFDLENBQ0wsQ0FBQyxLQUFLLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDakMsQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQy9GLENBQUM7SUFDSixDQUFDOzs7Ozs7O0lBRU8sOENBQVk7Ozs7OztJQUFwQixVQUFxQixJQUFrQixFQUFFLEdBQVksRUFBRSxPQUF3QjtRQUEvRSxpQkFjQztRQWJDLG9DQUFvQztRQUNwQyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLEVBQUUsS0FBSyxJQUFJLEVBQVgsQ0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQztRQUNULENBQUM7O1lBQ0ssV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBN0IsQ0FBNkIsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDOztnQkFsSkYsVUFBVTs7O2dCQVBGLFFBQVE7O0lBMEpqQiw4QkFBQztDQUFBLEFBbkpELElBbUpDO1NBbEpZLHVCQUF1Qjs7O0lBQ2xDLHdDQUFtQzs7SUFFdkIsMkNBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgTGFtYiBUZWFtLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGFtYk1lbnVJdGVtLCBMYW1iTWVudUJhZyB9IGZyb20gJy4vbWVudS1pdGVtJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgaXRlbUhvdmVyJCwgc3VibWVudVRvZ2dsZSQsIGl0ZW1DbGljayQsIGl0ZW1TZWxlY3QkLFxyXG4gIG5hdmlnYXRlSG9tZSQsIGdldFNlbGVjdGVkSXRlbSQsIGFkZEl0ZW1zJCxcclxufSBmcm9tICcuL3ZhcmlhYmxlcyc7XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGFtYk1lbnVJbnRlcm5hbFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgaXRlbXM6IExhbWJNZW51SXRlbVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbXMoKTogTGFtYk1lbnVJdGVtW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VBbGwoaXRlbXM6IExhbWJNZW51SXRlbVtdLCB0YWc6IHN0cmluZywgZXhjZXB0PzogTGFtYk1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBleGNlcHRzID0gdGhpcy5nZXRQYXJlbnQodGFnLCBleGNlcHQpO1xyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuY29sbGFwc2VJdGVtKGl0ZW0sIHRhZywgZXhjZXB0cykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnQodGFnOiBzdHJpbmcsIGl0ZW0/OiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgaWYgKGl0ZW0ucGFyZW50KSB7XHJcbiAgICAgIGFyci5wdXNoKC4uLnRoaXMuZ2V0UGFyZW50KHRhZywgaXRlbS5wYXJlbnQpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXRlbUhvdmVyKGl0ZW06IExhbWJNZW51SXRlbSwgdGFnPzogc3RyaW5nKSB7XHJcbiAgICBpdGVtSG92ZXIkLm5leHQoeyB0YWcsIGl0ZW0gfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3VibWVudVRvZ2dsZShpdGVtOiBMYW1iTWVudUl0ZW0sIHRhZz86IHN0cmluZykge1xyXG4gICAgc3VibWVudVRvZ2dsZSQubmV4dCh7IHRhZywgaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RJdGVtKGl0ZW06IExhbWJNZW51SXRlbSwgdGFnOiBzdHJpbmcpIHtcclxuICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0KGl0ZW0sIHRhZyk7XHJcbiAgICB0aGlzLnNlbGVjdFBhcmVudChpdGVtLCB0YWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RQYXJlbnQoeyBwYXJlbnQ6IGl0ZW0gfTogTGFtYk1lbnVJdGVtLCB0YWc6IHN0cmluZykge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWl0ZW0uZXhwYW5kZWQpIHtcclxuICAgICAgaXRlbS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3VibWVudVRvZ2dsZShpdGVtLCB0YWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RQYXJlbnQoaXRlbSwgdGFnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpdGVtQ2xpY2soaXRlbTogTGFtYk1lbnVJdGVtLCB0YWc/OiBzdHJpbmcpIHtcclxuICAgIGl0ZW1DbGljayQubmV4dCh7IHRhZywgaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlbVNlbGVjdChpdGVtOiBMYW1iTWVudUl0ZW0sIHRhZz86IHN0cmluZykge1xyXG4gICAgaXRlbVNlbGVjdCQubmV4dCh7IHRhZywgaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFkZEl0ZW0oKTogT2JzZXJ2YWJsZTx7IHRhZzogc3RyaW5nLCBpdGVtczogTGFtYk1lbnVJdGVtW10gfT4ge1xyXG4gICAgcmV0dXJuIGFkZEl0ZW1zJC5waXBlKHNoYXJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVIb21lKCk6IE9ic2VydmFibGU8eyB0YWc6IHN0cmluZyB9PiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdGVIb21lJC5waXBlKHNoYXJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uR2V0U2VsZWN0ZWRJdGVtKCk6IE9ic2VydmFibGU8eyB0YWc6IHN0cmluZzsgbGlzdGVuZXI6IEJlaGF2aW9yU3ViamVjdDxMYW1iTWVudUJhZz4gfT4ge1xyXG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSXRlbSQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEl0ZW1zKGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSkge1xyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMucmVzZXRJdGVtKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRJdGVtKGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgaXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW0oY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmVwYXJlSXRlbXMoaXRlbXM6IExhbWJNZW51SXRlbVtdKSB7XHJcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5zZXRQYXJlbnQoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQYXJlbnQoaXRlbTogTGFtYk1lbnVJdGVtKSB7XHJcbiAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xyXG4gICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IGl0ZW07XHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb24oaXRlbXM6IExhbWJNZW51SXRlbVtdLCB0YWc6IHN0cmluZywgY29sbGFwc2VPdGhlcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoY29sbGFwc2VPdGhlcikge1xyXG4gICAgICB0aGlzLmNvbGxhcHNlQWxsKGl0ZW1zLCB0YWcpO1xyXG4gICAgfVxyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuc2VsZWN0SXRlbUJ5VXJsKGl0ZW0sIHRhZykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RJdGVtQnlVcmwoaXRlbTogTGFtYk1lbnVJdGVtLCB0YWc6IHN0cmluZykge1xyXG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSBpdGVtLnNlbGVjdGVkO1xyXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJblVybChpdGVtKTtcclxuICAgIGlmICghd2FzU2VsZWN0ZWQgJiYgaXNTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbSwgdGFnKTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGl0ZW0uY2hpbGRyZW4sIHRhZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdGVkSW5VcmwoaXRlbTogTGFtYk1lbnVJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBleGFjdDogYm9vbGVhbiA9IGl0ZW0ucGF0aE1hdGNoID09PSAnZnVsbCc7XHJcbiAgICBjb25zdCBsb2NhdGlvbjogc3RyaW5nID0gdGhpcy5sb2NhdGlvbi5wYXRoKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAoZXhhY3QgJiYgbG9jYXRpb24gPT09IGl0ZW0ubGluaykgfHxcclxuICAgICAgKCFleGFjdCAmJiBsb2NhdGlvbi5pbmNsdWRlcyhpdGVtLmxpbmspKSB8fFxyXG4gICAgICAoZXhhY3QgJiYgaXRlbS5mcmFnbWVudCAmJiBsb2NhdGlvbi5zdWJzdHIobG9jYXRpb24uaW5kZXhPZignIycpICsgMSkuaW5jbHVkZXMoaXRlbS5mcmFnbWVudCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsYXBzZUl0ZW0oaXRlbTogTGFtYk1lbnVJdGVtLCB0YWc/OiBzdHJpbmcsIGV4Y2VwdHM/OiBMYW1iTWVudUl0ZW1bXSkge1xyXG4gICAgLy8gaWYgKGV4Y2VwdCAmJiBleGNlcHQgPT09IGl0ZW0pKSB7XHJcbiAgICBpZiAoZXhjZXB0cyAmJiBleGNlcHRzLnNvbWUoaXQgPT4gaXQgPT09IGl0ZW0pKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHdhc0V4cGFuZGVkID0gaXRlbS5leHBhbmRlZDtcclxuICAgIGl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIGlmICh3YXNFeHBhbmRlZCkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVUb2dnbGUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcclxuICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHRoaXMuY29sbGFwc2VJdGVtKGNoaWxkLCB0YWcpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==