UNPKG

@terminus/ngx-tools

Version:

[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github

179 lines 20.5 kB
import { __decorate, __param } from "tslib"; /** * Sourced from MIT Licensed Library * https://github.com/7leads/ngx-cookie-service */ import { DOCUMENT, isPlatformBrowser, } from '@angular/common'; import { Inject, Injectable, InjectionToken, PLATFORM_ID, } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; var MS_IN_SECONDS = 1000; var SECONDS_IN_MINUTE = 60; var MINUTES_IN_HOUR = 60; var HOURS_IN_DAY = 24; var MS_IN_DAY = MS_IN_SECONDS * SECONDS_IN_MINUTE * MINUTES_IN_HOUR * HOURS_IN_DAY; /** * A service to manage browser cookies */ var TsCookieService = /** @class */ (function () { function TsCookieService( // HACK: This `any` is required. See comment inside constructor. // eslint-disable-next-line @typescript-eslint/no-explicit-any _document, platformId) { this._document = _document; this.platformId = platformId; // HACK: The angular compiler doesn't understand the type `Document` when determining the metadata for injectable parameters. // So we are using `any` for the injection signature (making Angular happy), but coercing to a TypeScript type within the class. // See https://github.com/angular/angular/issues/20351 this.document = _document; // The PLATFORM_ID allows us to check if we're in a browser this.documentIsAccessible = isPlatformBrowser(platformId); } /** * Set a cookie * * @param name - Cookie name * @param value - Cookie value * @param expires - Number of days until the cookies expires or an actual `Date` * @param path - Cookie path * @param domain - Cookie domain * @param secure - Secure flag * @param sameSite - OWASP samesite token `Lax` or `Strict` */ TsCookieService.prototype.set = function (name, value, expires, path, domain, secure, sameSite) { if (!this.documentIsAccessible) { return; } var cookieString = encodeURIComponent(name) + "=" + encodeURIComponent(value) + ";"; if (expires) { if (typeof expires === 'number') { var dateExpires = new Date(new Date().getTime() + (expires * MS_IN_DAY)); cookieString += "expires=" + dateExpires.toUTCString() + ";"; } else { cookieString += "expires=" + expires.toUTCString() + ";"; } } if (path) { cookieString += "path=" + path + ";"; } if (domain) { cookieString += "domain=" + domain + ";"; } if (secure) { cookieString += 'secure;'; } if (sameSite) { cookieString += "sameSite=" + sameSite + ";"; } this.document.cookie = cookieString; }; /** * Verify if a cookie exists * * @param name - Cookie name * @returns boolean */ TsCookieService.prototype.check = function (name) { if (!this.documentIsAccessible) { return false; } var regExp = this.getCookieRegExp(encodeURIComponent(name)); return regExp.test(this.document.cookie); }; /** * @param name - Cookie name * @returns any */ TsCookieService.prototype.get = function (name) { if (this.documentIsAccessible && this.check(name)) { var regExp = this.getCookieRegExp(encodeURIComponent(name)); var result = regExp.exec(this.document.cookie); return result ? decodeURIComponent(result[1]) /* istanbul ignore next - Unreachable */ : ''; } return ''; }; /** * Get all cookies * * @returns Object containing all cookies */ // eslint-disable-next-line @typescript-eslint/no-explicit-any TsCookieService.prototype.getAll = function () { if (!this.documentIsAccessible) { return {}; } // eslint-disable-next-line @typescript-eslint/no-explicit-any var cookies = {}; var document = this.document; // istanbul ignore else if (document.cookie && document.cookie !== '') { var split = document.cookie.split(';').filter(function (v) { return v !== ''; }); // eslint-disable-next-line @typescript-eslint/prefer-for-of for (var i = 0; i < split.length; i += 1) { var currentCookie = split[i].split('='); currentCookie[0] = currentCookie[0].replace(/^ /, ''); cookies[decodeURIComponent(currentCookie[0])] = decodeURIComponent(currentCookie[1]); } } return cookies; }; /** * Delete a cookie * * NOTE: This clears the value and sets the cookie as expired. The browser will delete the expired cookie the next time a request * is made to the domain. * * @param name - Cookie name * @param path - Cookie path * @param domain - Cookie domain */ TsCookieService.prototype.delete = function (name, path, domain) { if (!this.documentIsAccessible) { return; } this.set(name, '', new Date('Thu, 01 Jan 1970 00:00:01 GMT'), path, domain); }; /** * Delete all cookies * * @param path - Cookie path * @param domain - Cookie domain */ TsCookieService.prototype.deleteAll = function (path, domain) { if (!this.documentIsAccessible) { return; } // eslint-disable-next-line @typescript-eslint/no-explicit-any var cookies = this.getAll(); for (var cookieName in cookies) { // istanbul ignore else if (cookies.hasOwnProperty(cookieName)) { this.delete(cookieName, path, domain); } } }; /** * Get a regular expression based on a cookie name * * @param name - Cookie name * @returns RegExp */ TsCookieService.prototype.getCookieRegExp = function (name) { var escapedName = name.replace(/([\[\]\{\}\(\)\|\=\;\+\?\,\.\*\^\$])/ig, '\\$1'); return new RegExp("(?:^" + escapedName + "|;\\s*" + escapedName + ")=(.*?)(?:;|$)", 'g'); }; TsCookieService.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: InjectionToken, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] } ]; }; TsCookieService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TsCookieService_Factory() { return new TsCookieService(i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i0.PLATFORM_ID)); }, token: TsCookieService, providedIn: "root" }); TsCookieService = __decorate([ Injectable({ providedIn: 'root' }), __param(0, Inject(DOCUMENT)), __param(1, Inject(PLATFORM_ID)) ], TsCookieService); return TsCookieService; }()); export { TsCookieService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy9icm93c2VyLyIsInNvdXJjZXMiOlsiY29va2llcy9jb29raWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRztBQUNILE9BQU8sRUFDTCxRQUFRLEVBQ1IsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQzs7O0FBRXZCLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQztBQUMzQixJQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixJQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDM0IsSUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLElBQU0sU0FBUyxHQUFHLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxlQUFlLEdBQUcsWUFBWSxDQUFDO0FBR3JGOztHQUVHO0FBRUg7SUFJRTtJQUNFLGdFQUFnRTtJQUNoRSw4REFBOEQ7SUFDcEMsU0FBYyxFQUNYLFVBQWtDO1FBRHJDLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDWCxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUUvRCw2SEFBNkg7UUFDN0gsZ0lBQWdJO1FBQ2hJLHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQXFCLENBQUM7UUFDdEMsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLDZCQUFHLEdBQVYsVUFDRSxJQUFZLEVBQ1osS0FBYSxFQUNiLE9BQXVCLEVBQ3ZCLElBQWEsRUFDYixNQUFlLEVBQ2YsTUFBZ0IsRUFDaEIsUUFBMkI7UUFFM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFB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RjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHlDQUFlLEdBQXZCLFVBQXdCLElBQVk7UUFDbEMsSUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksTUFBTSxDQUFDLFNBQU8sV0FBVyxjQUFTLFdBQVcsbUJBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakYsQ0FBQzs7Z0RBN0tFLE1BQU0sU0FBQyxRQUFRO2dCQUN5QixjQUFjLHVCQUF0RCxNQUFNLFNBQUMsV0FBVzs7O0lBUlYsZUFBZTtRQUQzQixVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFROUIsV0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDaEIsV0FBQSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7T0FSWCxlQUFlLENBc0wzQjswQkFoTkQ7Q0FnTkMsQUF0TEQsSUFzTEM7U0F0TFksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU291cmNlZCBmcm9tIE1JVCBMaWNlbnNlZCBMaWJyYXJ5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vN2xlYWRzL25neC1jb29raWUtc2VydmljZVxuICovXG5pbXBvcnQge1xuICBET0NVTUVOVCxcbiAgaXNQbGF0Zm9ybUJyb3dzZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdGlvblRva2VuLFxuICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IE1TX0lOX1NFQ09ORFMgPSAxMDAwO1xuY29uc3QgU0VDT05EU19JTl9NSU5VVEUgPSA2MDtcbmNvbnN0IE1JTlVURVNfSU5fSE9VUiA9IDYwO1xuY29uc3QgSE9VUlNfSU5fREFZID0gMjQ7XG5jb25zdCBNU19JTl9EQVkgPSBNU19JTl9TRUNPTkRTICogU0VDT05EU19JTl9NSU5VVEUgKiBNSU5VVEVTX0lOX0hPVVIgKiBIT1VSU19JTl9EQVk7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdG8gbWFuYWdlIGJyb3dzZXIgY29va2llc1xuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRzQ29va2llU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRJc0FjY2Vzc2libGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIEhBQ0s6IFRoaXMgYGFueWAgaXMgcmVxdWlyZWQuIFNlZSBjb21tZW50IGluc2lkZSBjb25zdHJ1Y3Rvci5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBJbmplY3Rpb25Ub2tlbjxPYmplY3Q+LFxuICApIHtcbiAgICAvLyBIQUNLOiBUaGUgYW5ndWxhciBjb21waWxlciBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIHR5cGUgYERvY3VtZW50YCB3aGVuIGRldGVybWluaW5nIHRoZSBtZXRhZGF0YSBmb3IgaW5qZWN0YWJsZSBwYXJhbWV0ZXJzLlxuICAgIC8vIFNvIHdlIGFyZSB1c2luZyBgYW55YCBmb3IgdGhlIGluamVjdGlvbiBzaWduYXR1cmUgKG1ha2luZyBBbmd1bGFyIGhhcHB5KSwgYnV0IGNvZXJjaW5nIHRvIGEgVHlwZVNjcmlwdCB0eXBlIHdpdGhpbiB0aGUgY2xhc3MuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzIwMzUxXG4gICAgdGhpcy5kb2N1bWVudCA9IF9kb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgICAvLyBUaGUgUExBVEZPUk1fSUQgYWxsb3dzIHVzIHRvIGNoZWNrIGlmIHdlJ3JlIGluIGEgYnJvd3NlclxuICAgIHRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUgPSBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBjb29raWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBDb29raWUgbmFtZVxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb29raWUgdmFsdWVcbiAgICogQHBhcmFtIGV4cGlyZXMgLSBOdW1iZXIgb2YgZGF5cyB1bnRpbCB0aGUgY29va2llcyBleHBpcmVzIG9yIGFuIGFjdHVhbCBgRGF0ZWBcbiAgICogQHBhcmFtIHBhdGggLSBDb29raWUgcGF0aFxuICAgKiBAcGFyYW0gZG9tYWluIC0gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIC0gU2VjdXJlIGZsYWdcbiAgICogQHBhcmFtIHNhbWVTaXRlIC0gT1dBU1Agc2FtZXNpdGUgdG9rZW4gYExheGAgb3IgYFN0cmljdGBcbiAgICovXG4gIHB1YmxpYyBzZXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZXhwaXJlcz86IG51bWJlciB8IERhdGUsXG4gICAgcGF0aD86IHN0cmluZyxcbiAgICBkb21haW4/OiBzdHJpbmcsXG4gICAgc2VjdXJlPzogYm9vbGVhbixcbiAgICBzYW1lU2l0ZT86ICdMYXgnIHwgJ1N0cmljdCcsXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb29raWVTdHJpbmcgPSBgJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX07YDtcblxuICAgIGlmIChleHBpcmVzKSB7XG4gICAgICBpZiAodHlwZW9mIGV4cGlyZXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IGRhdGVFeHBpcmVzOiBEYXRlID0gbmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyAoZXhwaXJlcyAqIE1TX0lOX0RBWSkpO1xuXG4gICAgICAgIGNvb2tpZVN0cmluZyArPSBgZXhwaXJlcz0ke2RhdGVFeHBpcmVzLnRvVVRDU3RyaW5nKCl9O2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb29raWVTdHJpbmcgKz0gYGV4cGlyZXM9JHtleHBpcmVzLnRvVVRDU3RyaW5nKCl9O2A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvb2tpZVN0cmluZyArPSBgcGF0aD0ke3BhdGh9O2A7XG4gICAgfVxuXG4gICAgaWYgKGRvbWFpbikge1xuICAgICAgY29va2llU3RyaW5nICs9IGBkb21haW49JHtkb21haW59O2A7XG4gICAgfVxuXG4gICAgaWYgKHNlY3VyZSkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdzZWN1cmU7JztcbiAgICB9XG5cbiAgICBpZiAoc2FtZVNpdGUpIHtcbiAgICAgIGNvb2tpZVN0cmluZyArPSBgc2FtZVNpdGU9JHtzYW1lU2l0ZX07YDtcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgaWYgYSBjb29raWUgZXhpc3RzXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQ29va2llIG5hbWVcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgcHVibGljIGNoZWNrKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gdGhpcy5nZXRDb29raWVSZWdFeHAoZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpKTtcbiAgICByZXR1cm4gcmVnRXhwLnRlc3QodGhpcy5kb2N1bWVudC5jb29raWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gQ29va2llIG5hbWVcbiAgICogQHJldHVybnMgYW55XG4gICAqL1xuICBwdWJsaWMgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUgJiYgdGhpcy5jaGVjayhuYW1lKSkge1xuICAgICAgY29uc3QgcmVnRXhwOiBSZWdFeHAgPSB0aGlzLmdldENvb2tpZVJlZ0V4cChlbmNvZGVVUklDb21wb25lbnQobmFtZSkpO1xuICAgICAgY29uc3QgcmVzdWx0OiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gcmVnRXhwLmV4ZWModGhpcy5kb2N1bWVudC5jb29raWUpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ID8gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBVbnJlYWNoYWJsZSAqLyA6ICcnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBjb29raWVzXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIGFsbCBjb29raWVzXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgZ2V0QWxsKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgY29va2llczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudDtcblxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gICAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT09ICcnKSB7XG4gICAgICBjb25zdCBzcGxpdDogc3RyaW5nW10gPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKS5maWx0ZXIodiA9PiB2ICE9PSAnJyk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBjdXJyZW50Q29va2llOiBzdHJpbmdbXSA9IHNwbGl0W2ldLnNwbGl0KCc9Jyk7XG4gICAgICAgIGN1cnJlbnRDb29raWVbMF0gPSBjdXJyZW50Q29va2llWzBdLnJlcGxhY2UoL14gLywgJycpO1xuICAgICAgICBjb29raWVzW2RlY29kZVVSSUNvbXBvbmVudChjdXJyZW50Q29va2llWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQoY3VycmVudENvb2tpZVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgY29va2llXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgY2xlYXJzIHRoZSB2YWx1ZSBhbmQgc2V0cyB0aGUgY29va2llIGFzIGV4cGlyZWQuIFRoZSBicm93c2VyIHdpbGwgZGVsZXRlIHRoZSBleHBpcmVkIGNvb2tpZSB0aGUgbmV4dCB0aW1lIGEgcmVxdWVzdFxuICAgKiBpcyBtYWRlIHRvIHRoZSBkb21haW4uXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQ29va2llIG5hbWVcbiAgICogQHBhcmFtIHBhdGggLSBDb29raWUgcGF0aFxuICAgKiBAcGFyYW0gZG9tYWluIC0gQ29va2llIGRvbWFpblxuICAgKi9cbiAgcHVibGljIGRlbGV0ZShuYW1lOiBzdHJpbmcsIHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldChuYW1lLCAnJywgbmV3IERhdGUoJ1RodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDEgR01UJyksIHBhdGgsIGRvbWFpbik7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFsbCBjb29raWVzXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gQ29va2llIHBhdGhcbiAgICogQHBhcmFtIGRvbWFpbiAtIENvb2tpZSBkb21haW5cbiAgICovXG4gIHB1YmxpYyBkZWxldGVBbGwocGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBjb29raWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gdGhpcy5nZXRBbGwoKTtcblxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBpbiBjb29raWVzKSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgaWYgKGNvb2tpZXMuaGFzT3duUHJvcGVydHkoY29va2llTmFtZSkpIHtcbiAgICAgICAgdGhpcy5kZWxldGUoY29va2llTmFtZSwgcGF0aCwgZG9tYWluKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVndWxhciBleHByZXNzaW9uIGJhc2VkIG9uIGEgY29va2llIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBDb29raWUgbmFtZVxuICAgKiBAcmV0dXJucyBSZWdFeHBcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29va2llUmVnRXhwKG5hbWU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gICAgY29uc3QgZXNjYXBlZE5hbWU6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvKFtcXFtcXF1cXHtcXH1cXChcXClcXHxcXD1cXDtcXCtcXD9cXCxcXC5cXCpcXF5cXCRdKS9pZywgJ1xcXFwkMScpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpeJHtlc2NhcGVkTmFtZX18O1xcXFxzKiR7ZXNjYXBlZE5hbWV9KT0oLio/KSg/Ojt8JClgLCAnZycpO1xuICB9XG5cbn1cbiJdfQ==