@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
JavaScript
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==