UNPKG

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
/** * @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