ice-utilities
Version:
Utilities for manage arrays, breadcrumb, dom elements, dates, injectors, local storage, login, objects, router animations, router, session storage, strings and translate utilities, encryption, for angular 6+ with ECMAScript 6 - ECMAScript 2015
283 lines • 21.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { PRIMARY_OUTLET } from '@angular/router';
import { TranslateUtils } from './translateUtils';
import { SessionUtils } from './sessionUtils';
import { ArrayUtils } from './arrayUtils';
import { StringUtils } from './stringUtils';
// @dynamic
/**
* @abstract
*/
export class RouterUtils {
/**
* @param {?=} router
* @return {?}
*/
static setRouterInstance(router) {
if (!this.router && router) {
this.router = router;
}
}
/**
* @param {?} dir
* @return {?}
*/
static setStaticDir(dir) {
if (!this.staticDir && dir) {
this.staticDir = `/${dir}/`;
this.staticDirR = `/${dir}R/`;
}
}
/**
* @param {?} dir
* @return {?}
*/
static setDynamicDir(dir) {
if (!this.dynamicDir && dir) {
this.dynamicDir = `/${dir}/`;
this.dynamicDirR = `/${dir}R/`;
}
}
/**
* @param {?} dir
* @return {?}
*/
static setNotAllowedDir(dir) {
if (!this.notAllowed && dir) {
this.notAllowed = dir;
}
}
/**
* @param {?} dir
* @return {?}
*/
static setListDir(dir) {
if (!this.listDir && dir) {
this.listDir = dir;
}
}
/**
* @param {?} modulo
* @param {?} tipo
* @param {?=} end
* @return {?}
*/
static getRerouteUrl(modulo, tipo, end) {
if (this.router) {
/** @type {?} */
let url;
/** @type {?} */
const mod = modulo.toUpperCase();
/** @type {?} */
const tt = tipo.toUpperCase();
/** @type {?} */
const urlroute = this.router.url;
if (StringUtils.includes(urlroute, `/${mod}/`)) {
url = `/${mod}R/${tt}/`;
}
else if (StringUtils.includes(urlroute, `/${mod}R/`)) {
url = `/${mod}/${tt}/`;
}
if (end) {
url += end.toString();
}
return url;
}
else {
return '/';
}
}
/**
* @param {?} mod
* @param {?} id
* @return {?}
*/
static setDinamicDirUrl(mod, id) {
return `${this.dynamicDir}${mod.toUpperCase()}/${id.toString()}`;
}
/**
* @param {?} sys
* @param {?} mod
* @return {?}
*/
static setCustomDirUrl(sys, mod) {
return `${this.staticDir}${sys}/${mod}`;
}
/**
* @param {?=} extra
* @return {?}
*/
static evalPerm(extra) {
if (this.router) {
/** @type {?} */
let url = this.router.url;
/** @type {?} */
const sinDrouter = url.split('(');
url = sinDrouter[0];
if (StringUtils.includes(url, ';')) {
/** @type {?} */
const surl = url.split(';');
url = surl[0];
}
if (extra) {
url = url.replace(extra, '');
}
if (StringUtils.includes(url, this.dynamicDirR)) {
url = url.replace(this.dynamicDirR, this.dynamicDir);
}
else if (StringUtils.includes(url, this.staticDirR)) {
url = url.replace(this.staticDirR, this.staticDir);
}
if ((StringUtils.includes(url, this.dynamicDir)
|| StringUtils.includes(url, this.staticDirR)
|| StringUtils.includes(url, this.staticDir)
|| StringUtils.includes(url, this.staticDirR))
&&
this.urlNotAllowed(url)) {
this.router.navigate([this.notAllowed]);
}
}
else {
this.router.navigate([this.notAllowed]);
}
}
/**
* @param {?} route
* @param {?=} params
* @param {?=} lista
* @return {?}
*/
static getSegmentsRoute(route, params = {}, lista = false) {
/** @type {?} */
const tree = this.router.parseUrl(route);
/** @type {?} */
const g = tree.root.children[PRIMARY_OUTLET];
/** @type {?} */
const s = g.segments;
/** @type {?} */
const final = s.map(p => {
return p.path;
});
if (lista) {
return [...final, ...[this.listDir], ...[params]];
}
else {
return [...final, ...[params]];
}
}
/**
* @param {?} route
* @param {?} id
* @param {?=} params
* @param {?=} lista
* @return {?}
*/
static getSegmentsRouteId(route, id, params = {}, lista = false) {
/** @type {?} */
const tree = this.router.parseUrl(route);
/** @type {?} */
const g = tree.root.children[PRIMARY_OUTLET];
/** @type {?} */
const s = g.segments;
/** @type {?} */
const final = s.map(p => {
return p.path;
});
if (lista) {
return [...final, ...[id.toString()], ...['Lista'], ...[params]];
}
else {
return [...final, ...[id.toString()], ...[params]];
}
}
/**
* @param {?} men
* @return {?}
*/
static setNotAllowMen(men) {
SessionUtils.setSession('notallowedmen', men);
}
/**
* @param {?} menset
* @return {?}
*/
static getNotAllowMen(menset) {
/** @type {?} */
let men = SessionUtils.getSession('notallowedmen');
if (men !== null) {
SessionUtils.deleteSession('notallowedmen');
}
else {
men = menset;
}
return TranslateUtils.Translate(men);
}
/**
* @param {?} url
* @return {?}
*/
static setAllowedUrl(url) {
SessionUtils.setSession('allowedurl', url);
}
/**
* @param {?} url
* @return {?}
*/
static urlNotAllowed(url) {
/** @type {?} */
const urlsAllowed = SessionUtils.getSession('allowedurl');
/** @type {?} */
let notA = true;
if (urlsAllowed !== null) {
notA = ArrayUtils.notInArray(urlsAllowed, url);
}
return notA;
}
}
RouterUtils.dynamicDir = '';
RouterUtils.staticDir = '';
RouterUtils.dynamicDirR = '';
RouterUtils.staticDirR = '';
RouterUtils.notAllowed = '/';
RouterUtils.listDir = 'list';
if (false) {
/**
* @type {?}
* @private
*/
RouterUtils.router;
/**
* @type {?}
* @private
*/
RouterUtils.dynamicDir;
/**
* @type {?}
* @private
*/
RouterUtils.staticDir;
/**
* @type {?}
* @private
*/
RouterUtils.dynamicDirR;
/**
* @type {?}
* @private
*/
RouterUtils.staticDirR;
/**
* @type {?}
* @private
*/
RouterUtils.notAllowed;
/**
* @type {?}
* @private
*/
RouterUtils.listDir;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyVXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pY2UtdXRpbGl0aWVzLyIsInNvdXJjZXMiOlsibGliL3V0aWxpdGllcy9yb3V0ZXJVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLGNBQWMsRUFBK0MsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFFMUMsTUFBTSxPQUFnQixXQUFXOzs7OztJQVEvQixNQUFNLENBQUMsaUJBQWlCLENBQUUsTUFBZTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDdEI7SUFDSCxDQUFDOzs7OztJQUNELE1BQU0sQ0FBQyxZQUFZLENBQUUsR0FBVztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztTQUMvQjtJQUNILENBQUM7Ozs7O0lBQ0QsTUFBTSxDQUFDLGFBQWEsQ0FBRSxHQUFXO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7Ozs7SUFDRCxN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ZUFBZSxDQUFDO1FBQ3ZELElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUNoQixZQUFZLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCxHQUFHLEdBQUcsTUFBTSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7Ozs7SUFDRCxNQUFNLENBQUMsYUFBYSxDQUFFLEdBQVE7UUFDNUIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Ozs7SUFDRCxNQUFNLENBQUMsYUFBYSxDQUFFLEdBQVc7O2NBQ3pCLFdBQVcsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQzs7WUFDckQsSUFBSSxHQUFHLElBQUk7UUFDZixJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDeEIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQTNJYyxzQkFBVSxHQUFHLEVBQUUsQ0FBQztBQUNoQixxQkFBUyxHQUFHLEVBQUUsQ0FBQztBQUNmLHVCQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLHNCQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLHNCQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLG1CQUFPLEdBQUcsTUFBTSxDQUFDOzs7Ozs7SUFOaEMsbUJBQThCOzs7OztJQUM5Qix1QkFBK0I7Ozs7O0lBQy9CLHNCQUE4Qjs7Ozs7SUFDOUIsd0JBQWdDOzs7OztJQUNoQyx1QkFBK0I7Ozs7O0lBQy9CLHVCQUFnQzs7Ozs7SUFDaEMsb0JBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQUklNQVJZX09VVExFVCwgUm91dGVyLCBVcmxTZWdtZW50LCBVcmxTZWdtZW50R3JvdXAsIFVybFRyZWV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7VHJhbnNsYXRlVXRpbHN9IGZyb20gJy4vdHJhbnNsYXRlVXRpbHMnO1xyXG5pbXBvcnQge1Nlc3Npb25VdGlsc30gZnJvbSAnLi9zZXNzaW9uVXRpbHMnO1xyXG5pbXBvcnQge0FycmF5VXRpbHN9IGZyb20gJy4vYXJyYXlVdGlscyc7XHJcbmltcG9ydCB7U3RyaW5nVXRpbHN9IGZyb20gJy4vc3RyaW5nVXRpbHMnO1xyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUm91dGVyVXRpbHMge1xyXG4gIHByaXZhdGUgc3RhdGljIHJvdXRlcjogUm91dGVyO1xyXG4gIHByaXZhdGUgc3RhdGljIGR5bmFtaWNEaXIgPSAnJztcclxuICBwcml2YXRlIHN0YXRpYyBzdGF0aWNEaXIgPSAnJztcclxuICBwcml2YXRlIHN0YXRpYyBkeW5hbWljRGlyUiA9ICcnO1xyXG4gIHByaXZhdGUgc3RhdGljIHN0YXRpY0RpclIgPSAnJztcclxuICBwcml2YXRlIHN0YXRpYyBub3RBbGxvd2VkID0gJy8nO1xyXG4gIHByaXZhdGUgc3RhdGljIGxpc3REaXIgPSAnbGlzdCc7XHJcbiAgc3RhdGljIHNldFJvdXRlckluc3RhbmNlIChyb3V0ZXI/OiBSb3V0ZXIpIHtcclxuICAgIGlmICghdGhpcy5yb3V0ZXIgJiYgcm91dGVyKSB7XHJcbiAgICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgc2V0U3RhdGljRGlyIChkaXI6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnN0YXRpY0RpciAmJiBkaXIpIHtcclxuICAgICAgdGhpcy5zdGF0aWNEaXIgPSBgLyR7ZGlyfS9gO1xyXG4gICAgICB0aGlzLnN0YXRpY0RpclIgPSBgLyR7ZGlyfVIvYDtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdGljIHNldER5bmFtaWNEaXIgKGRpcjogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuZHluYW1pY0RpciAmJiBkaXIpIHtcclxuICAgICAgdGhpcy5keW5hbWljRGlyID0gYC8ke2Rpcn0vYDtcclxuICAgICAgdGhpcy5keW5hbWljRGlyUiA9IGAvJHtkaXJ9Ui9gO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgc2V0Tm90QWxsb3dlZERpciAoZGlyOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5ub3RBbGxvd2VkICYmIGRpcikge1xyXG4gICAgICB0aGlzLm5vdEFsbG93ZWQgPSBkaXI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBzZXRMaXN0RGlyIChkaXI6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmxpc3REaXIgJiYgZGlyKSB7XHJcbiAgICAgIHRoaXMubGlzdERpciA9IGRpcjtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdGljIGdldFJlcm91dGVVcmwgKG1vZHVsbzogc3RyaW5nLCB0aXBvOiBzdHJpbmcsIGVuZD86IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5yb3V0ZXIpIHtcclxuICAgICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgICBjb25zdCBtb2QgPSBtb2R1bG8udG9VcHBlckNhc2UoKTtcclxuICAgICAgY29uc3QgdHQgPSB0aXBvLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IHVybHJvdXRlOiBzdHJpbmcgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgIGlmIChTdHJpbmdVdGlscy5pbmNsdWRlcyh1cmxyb3V0ZSwgYC8ke21vZH0vYCkpIHtcclxuICAgICAgICB1cmwgPSBgLyR7bW9kfVIvJHt0dH0vYDtcclxuICAgICAgfSBlbHNlIGlmIChTdHJpbmdVdGlscy5pbmNsdWRlcyh1cmxyb3V0ZSwgYC8ke21vZH1SL2ApKSB7XHJcbiAgICAgICAgdXJsID0gYC8ke21vZH0vJHt0dH0vYDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZW5kKSB7XHJcbiAgICAgICAgdXJsICs9IGVuZC50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJy8nO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgc2V0RGluYW1pY0RpclVybChtb2Q6IHN0cmluZywgaWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5keW5hbWljRGlyfSR7bW9kLnRvVXBwZXJDYXNlKCl9LyR7aWQudG9TdHJpbmcoKX1gO1xyXG4gIH1cclxuICBzdGF0aWMgc2V0Q3VzdG9tRGlyVXJsKHN5czogc3RyaW5nLCBtb2Q6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5zdGF0aWNEaXJ9JHtzeXN9LyR7bW9kfWA7XHJcbiAgfVxyXG4gIHN0YXRpYyBldmFsUGVybSAoZXh0cmE/OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJvdXRlcikge1xyXG4gICAgICBsZXQgdXJsOiBzdHJpbmcgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgIGNvbnN0IHNpbkRyb3V0ZXIgPSB1cmwuc3BsaXQoJygnKTtcclxuICAgICAgdXJsID0gc2luRHJvdXRlclswXTtcclxuICAgICAgaWYgKFN0cmluZ1V0aWxzLmluY2x1ZGVzKHVybCwgJzsnKSkge1xyXG4gICAgICAgIGNvbnN0IHN1cmwgPSB1cmwuc3BsaXQoJzsnKTtcclxuICAgICAgICB1cmwgPSBzdXJsWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRyYSkge1xyXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKGV4dHJhLCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFN0cmluZ1V0aWxzLmluY2x1ZGVzKHVybCwgdGhpcy5keW5hbWljRGlyUikpIHtcclxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSh0aGlzLmR5bmFtaWNEaXJSLCB0aGlzLmR5bmFtaWNEaXIpO1xyXG4gICAgICB9IGVsc2UgaWYgKFN0cmluZ1V0aWxzLmluY2x1ZGVzKHVybCwgdGhpcy5zdGF0aWNEaXJSKSkge1xyXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHRoaXMuc3RhdGljRGlyUiwgdGhpcy5zdGF0aWNEaXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoXHJcbiAgICAgICAgICBTdHJpbmdVdGlscy5pbmNsdWRlcyh1cmwsIHRoaXMuZHluYW1pY0RpcilcclxuICAgICAgICAgIHx8IFN0cmluZ1V0aWxzLmluY2x1ZGVzKHVybCwgdGhpcy5zdGF0aWNEaXJSKVxyXG4gICAgICAgICAgfHwgU3RyaW5nVXRpbHMuaW5jbHVkZXModXJsLCB0aGlzLnN0YXRpY0RpcilcclxuICAgICAgICAgIHx8IFN0cmluZ1V0aWxzLmluY2x1ZGVzKHVybCwgdGhpcy5zdGF0aWNEaXJSKVxyXG4gICAgICAgIClcclxuICAgICAgICAmJlxyXG4gICAgICAgIHRoaXMudXJsTm90QWxsb3dlZCh1cmwpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm5vdEFsbG93ZWRdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubm90QWxsb3dlZF0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgZ2V0U2VnbWVudHNSb3V0ZShyb3V0ZTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IHt9LCBsaXN0YSA9IGZhbHNlKTogKGFueSB8IGFueSlbXSB7XHJcbiAgICAgIGNvbnN0IHRyZWU6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybChyb3V0ZSk7XHJcbiAgICAgIGNvbnN0IGc6IFVybFNlZ21lbnRHcm91cCA9IHRyZWUucm9vdC5jaGlsZHJlbltQUklNQVJZX09VVExFVF07XHJcbiAgICAgIGNvbnN0IHM6IFVybFNlZ21lbnRbXSA9IGcuc2VnbWVudHM7XHJcbiAgICAgIGNvbnN0IGZpbmFsOiBhbnlbXSA9IHMubWFwKHAgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHAucGF0aDtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChsaXN0YSkge1xyXG4gICAgICAgICAgcmV0dXJuIFsuLi5maW5hbCwgLi4uW3RoaXMubGlzdERpcl0sIC4uLltwYXJhbXNdXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBbLi4uZmluYWwsIC4uLltwYXJhbXNdXTtcclxuICAgICAgfVxyXG4gIH1cclxuICBzdGF0aWMgZ2V0U2VnbWVudHNSb3V0ZUlkKHJvdXRlOiBzdHJpbmcsIGlkOiBudW1iZXIsIHBhcmFtczogYW55ID0ge30sIGxpc3RhID0gZmFsc2UpOiAoYW55IHwgYW55KVtdIHtcclxuICAgIGNvbnN0IHRyZWU6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybChyb3V0ZSk7XHJcbiAgICBjb25zdCBnOiBVcmxTZWdtZW50R3JvdXAgPSB0cmVlLnJvb3QuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xyXG4gICAgY29uc3QgczogVXJsU2VnbWVudFtdID0gZy5zZWdtZW50cztcclxuICAgIGNvbnN0IGZpbmFsOiBhbnlbXSA9IHMubWFwKHAgPT4ge1xyXG4gICAgICByZXR1cm4gcC5wYXRoO1xyXG4gICAgfSk7XHJcbiAgICBpZiAobGlzdGEpIHtcclxuICAgICAgcmV0dXJuIFsuLi5maW5hbCwgLi4uW2lkLnRvU3RyaW5nKCldLCAuLi5bJ0xpc3RhJ10sIC4uLltwYXJhbXNdXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbLi4uZmluYWwsIC4uLltpZC50b1N0cmluZygpXSwgLi4uW3BhcmFtc11dO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgc2V0Tm90QWxsb3dNZW4gKG1lbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBTZXNzaW9uVXRpbHMuc2V0U2Vzc2lvbignbm90YWxsb3dlZG1lbicsIG1lbik7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXROb3RBbGxvd01lbiAobWVuc2V0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1lbjogYW55ID0gU2Vzc2lvblV0aWxzLmdldFNlc3Npb24oJ25vdGFsbG93ZWRtZW4nKTtcclxuICAgIGlmIChtZW4gIT09IG51bGwpIHtcclxuICAgICAgU2Vzc2lvblV0aWxzLmRlbGV0ZVNlc3Npb24oJ25vdGFsbG93ZWRtZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1lbiA9IG1lbnNldDtcclxuICAgIH1cclxuICAgIHJldHVybiBUcmFuc2xhdGVVdGlscy5UcmFuc2xhdGUobWVuKTtcclxuICB9XHJcbiAgc3RhdGljIHNldEFsbG93ZWRVcmwgKHVybDogYW55KTogdm9pZCB7XHJcbiAgICBTZXNzaW9uVXRpbHMuc2V0U2Vzc2lvbignYWxsb3dlZHVybCcsIHVybCk7XHJcbiAgfVxyXG4gIHN0YXRpYyB1cmxOb3RBbGxvd2VkICh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdXJsc0FsbG93ZWQgPSBTZXNzaW9uVXRpbHMuZ2V0U2Vzc2lvbignYWxsb3dlZHVybCcpO1xyXG4gICAgbGV0IG5vdEEgPSB0cnVlO1xyXG4gICAgaWYgKHVybHNBbGxvd2VkICE9PSBudWxsKSB7XHJcbiAgICAgIG5vdEEgPSBBcnJheVV0aWxzLm5vdEluQXJyYXkodXJsc0FsbG93ZWQsIHVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm90QTtcclxuICB9XHJcbn1cclxuIl19