@fdot/angular-dotcodes
Version:
`npm install @fdot/angular-dotcodes --save`
225 lines (224 loc) • 24.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Inject, Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Observable, BehaviorSubject } from 'rxjs';
import { map } from 'rxjs/operators';
import { Config } from './models/config';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
var AngularDotcodesService = /** @class */ (function () {
function AngularDotcodesService(http, config) {
this.http = http;
this.config = config;
this.codesCache = new Map();
this.codeCache = new Map();
if (!config) {
throw Error('Call AngularDotcodesService with for root passing in the config object');
}
}
/**
* Method GetCode
* @param {?} column Column name to get Dotcode from
* @param {?} codeValue The code value to retrieve
* @return {?} Full HTTP response as Observable
*/
AngularDotcodesService.prototype.GetCode = /**
* Method GetCode
* @param {?} column Column name to get Dotcode from
* @param {?} codeValue The code value to retrieve
* @return {?} Full HTTP response as Observable
*/
function (column, codeValue) {
var /** @type {?} */ key = column + "-" + codeValue;
if (this.codeCache.get(key)) {
this.codeCache.get(column + "-" + codeValue);
}
else if (this.codesCache.get(column)) {
var /** @type {?} */ codes = this.codesCache.get(column).value;
if (codes) {
var /** @type {?} */ code = codes.filter(function (c) { return c.value === codeValue; });
if (code && code.length === 1) {
if (!this.codeCache.get(key)) {
this.codeCache.set(key, new BehaviorSubject(null));
}
this.codeCache.get(key).next(code[0]);
}
else {
this.loadCodes(key, column, codeValue);
}
}
else {
this.loadCodes(key, column, codeValue);
}
}
else {
this.loadCodes(key, column, codeValue);
}
return this.codeCache.get(key);
};
/**
* @param {?} key
* @param {?} column
* @param {?} codeValue
* @return {?}
*/
AngularDotcodesService.prototype.loadCodes = /**
* @param {?} key
* @param {?} column
* @param {?} codeValue
* @return {?}
*/
function (key, column, codeValue) {
var _this = this;
this.codeCache.set(key, new BehaviorSubject(null));
var /** @type {?} */ uri = "/GetCode";
var /** @type {?} */ headers = new HttpHeaders();
var /** @type {?} */ params = new HttpParams();
if (column !== undefined && column !== null) {
params = params.set('column', column + '');
}
if (codeValue !== undefined && codeValue !== null) {
params = params.set('codeValue', codeValue + '');
}
this.sendRequest('get', uri, headers, params, null).toPromise().then(function (b) {
if (b && b.body) {
_this.codeCache.get(key).next(b.body);
}
});
};
/**
* Method GetCodes
* @param {?} column Column name to get Dotcode from
* @return {?} Full HTTP response as Observable
*/
AngularDotcodesService.prototype.GetCodes = /**
* Method GetCodes
* @param {?} column Column name to get Dotcode from
* @return {?} Full HTTP response as Observable
*/
function (column) {
var _this = this;
if (this.codesCache.get(column)) {
this.codesCache.get(column);
}
else {
this.codesCache.set(column, new BehaviorSubject(null));
var /** @type {?} */ uri = "/GetCodes";
var /** @type {?} */ headers = new HttpHeaders();
var /** @type {?} */ params = new HttpParams();
if (column !== undefined && column !== null) {
params = params.set('column', column + '');
}
this.sendRequest('get', uri, headers, params, null).toPromise().then(function (b) {
if (b && b.body) {
_this.codesCache.get(column).next(b.body);
}
});
}
return this.codesCache.get(column);
};
/**
* Method GetRelatedCodes
* @param {?} column Column name for dotcode
* @param {?} codeValue DotCode value to get related codes for
* @param {?} relatedCode Related Column name to get Related Codes from
* @return {?} Full HTTP response as Observable
*/
AngularDotcodesService.prototype.GetRelatedCodes = /**
* Method GetRelatedCodes
* @param {?} column Column name for dotcode
* @param {?} codeValue DotCode value to get related codes for
* @param {?} relatedCode Related Column name to get Related Codes from
* @return {?} Full HTTP response as Observable
*/
function (column, codeValue, relatedCode) {
var /** @type {?} */ uri = "/GetRelatedCodes";
var /** @type {?} */ headers = new HttpHeaders();
var /** @type {?} */ params = new HttpParams();
if (column !== undefined && column !== null) {
params = params.set('column', column + '');
}
if (codeValue !== undefined && codeValue !== null) {
params = params.set('codeValue', codeValue + '');
}
if (relatedCode !== undefined && relatedCode !== null) {
params = params.set('relatedCode', relatedCode + '');
}
return this.sendRequest('get', uri, headers, params, null).pipe(map(function (b) {
if (b && b.body) {
return b.body;
}
}));
};
/**
* @template T
* @param {?} method
* @param {?} uri
* @param {?} headers
* @param {?} params
* @param {?} body
* @return {?}
*/
AngularDotcodesService.prototype.sendRequest = /**
* @template T
* @param {?} method
* @param {?} uri
* @param {?} headers
* @param {?} params
* @param {?} body
* @return {?}
*/
function (method, uri, headers, params, body) {
headers = headers.set('Ocp-Apim-Subscription-Key', this.config.apiKey);
if (method === 'get') {
return this.http.get(this.config.host + uri, { headers: headers.set('Accept', 'application/json'), params: params, observe: 'response' });
}
else if (method === 'put') {
return this.http.put(this.config.host + uri, body, { headers: headers.set('Content-Type', 'application/json'), params: params, observe: 'response' });
}
else if (method === 'post') {
return this.http.post(this.config.host + uri, body, { headers: headers.set('Content-Type', 'application/json'), params: params, observe: 'response' });
}
else if (method === 'delete') {
return this.http.delete(this.config.host + uri, { headers: headers, params: params, observe: 'response' });
}
else {
console.error('Unsupported request: ' + method);
return Observable.throw('Unsupported request: ' + method);
}
};
AngularDotcodesService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */
AngularDotcodesService.ctorParameters = function () { return [
{ type: HttpClient, },
{ type: Config, decorators: [{ type: Inject, args: ['config',] },] },
]; };
/** @nocollapse */ AngularDotcodesService.ngInjectableDef = i0.defineInjectable({ factory: function AngularDotcodesService_Factory() { return new AngularDotcodesService(i0.inject(i1.HttpClient), i0.inject("config")); }, token: AngularDotcodesService, providedIn: "root" });
return AngularDotcodesService;
}());
export { AngularDotcodesService };
function AngularDotcodesService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
AngularDotcodesService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
AngularDotcodesService.ctorParameters;
/** @type {?} */
AngularDotcodesService.prototype.codesCache;
/** @type {?} */
AngularDotcodesService.prototype.codeCache;
/** @type {?} */
AngularDotcodesService.prototype.http;
/** @type {?} */
AngularDotcodesService.prototype.config;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kb3Rjb2Rlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZkb3QvYW5ndWxhci1kb3Rjb2Rlcy8iLCJzb3VyY2VzIjpbImxpYi9hbmd1bGFyLWRvdGNvZGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0lBU3ZDLGdDQUFvQixJQUFnQixFQUE0QjtRQUE1QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQTRCLFdBQU0sR0FBTixNQUFNOzBCQUhqRCxJQUFJLEdBQUcsRUFBc0M7eUJBQzlDLElBQUksR0FBRyxFQUFvQztRQUc3RCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1NBQ3ZGO0tBQ0Y7Ozs7Ozs7SUFRTSx3Q0FBTzs7Ozs7O2NBQUMsTUFBYyxFQUFFLFNBQWlCO1FBQzlDLHFCQUFNLEdBQUcsR0FBTSxNQUFNLFNBQUksU0FBVyxDQUFDO1FBRXJDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBSSxNQUFNLFNBQUksU0FBVyxDQUFDLENBQUM7U0FDOUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFD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LENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUMvRztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUMzRDs7O2dCQTVJSixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7O2dCQVpRLFVBQVU7Z0JBUVYsTUFBTSx1QkFTMEIsTUFBTSxTQUFDLFFBQVE7OztpQ0FsQnhEOztTQWNhLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRG90Q29kZSxcclxuICBSZWxhdGVkQ29kZVxyXG59IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJEb3Rjb2Rlc1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgY29kZXNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBCZWhhdmlvclN1YmplY3Q8RG90Q29kZVtdPj4oKTtcclxuICBwcml2YXRlIGNvZGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBCZWhhdmlvclN1YmplY3Q8RG90Q29kZT4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgQEluamVjdCgnY29uZmlnJykgcHJpdmF0ZSBjb25maWc6IENvbmZpZykge1xyXG4gICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ0NhbGwgQW5ndWxhckRvdGNvZGVzU2VydmljZSB3aXRoIGZvciByb290IHBhc3NpbmcgaW4gdGhlIGNvbmZpZyBvYmplY3QnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogTWV0aG9kIEdldENvZGVcclxuICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIG5hbWUgdG8gZ2V0IERvdGNvZGUgZnJvbVxyXG4gICogQHBhcmFtIGNvZGVWYWx1ZSBUaGUgY29kZSB2YWx1ZSB0byByZXRyaWV2ZVxyXG4gICogQHJldHVybiBGdWxsIEhUVFAgcmVzcG9uc2UgYXMgT2JzZXJ2YWJsZVxyXG4gICovXHJcbiAgcHVibGljIEdldENvZGUoY29sdW1uOiBzdHJpbmcsIGNvZGVWYWx1ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb3RDb2RlPiB7XHJcbiAgICBjb25zdCBrZXkgPSBgJHtjb2x1bW59LSR7Y29kZVZhbHVlfWA7XHJcblxyXG4gICAgaWYgKHRoaXMuY29kZUNhY2hlLmdldChrZXkpKSB7XHJcbiAgICAgIHRoaXMuY29kZUNhY2hlLmdldChgJHtjb2x1bW59LSR7Y29kZVZhbHVlfWApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbikpIHtcclxuICAgICAgY29uc3QgY29kZXMgPSB0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbikudmFsdWU7XHJcbiAgICAgIGlmIChjb2Rlcykge1xyXG4gICAgICAgIGNvbnN0IGNvZGUgPSBjb2Rlcy5maWx0ZXIoYyA9PiBjLnZhbHVlID09PSBjb2RlVmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAoY29kZSAmJiBjb2RlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNvZGVDYWNoZS5nZXQoa2V5KSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvZGVDYWNoZS5zZXQoa2V5LCBuZXcgQmVoYXZpb3JTdWJqZWN0PERvdENvZGU+KG51bGwpKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNvZGVDYWNoZS5nZXQoa2V5KS5uZXh0KGNvZGVbMF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRDb2RlcyhrZXksIGNvbHVtbiwgY29kZVZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQ29kZXMoa2V5LCBjb2x1bW4sIGNvZGVWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZENvZGVzKGtleSwgY29sdW1uLCBjb2RlVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmNvZGVDYWNoZS5nZXQoa2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZENvZGVzKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZywgY29kZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY29kZUNhY2hlLnNldChrZXksIG5ldyBCZWhhdmlvclN1YmplY3Q8RG90Q29kZT4obnVsbCkpO1xyXG5cclxuICAgIGNvbnN0IHVyaSA9IGAvR2V0Q29kZWA7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuXHJcbiAgICBpZiAoY29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NvbHVtbicsIGNvbHVtbiArICcnKTtcclxuICAgIH1cclxuICAgIGlmIChjb2RlVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBjb2RlVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnY29kZVZhbHVlJywgY29kZVZhbHVlICsgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VuZFJlcXVlc3Q8RG90Q29kZT4oJ2dldCcsIHVyaSwgaGVhZGVycywgcGFyYW1zLCBudWxsKS50b1Byb21pc2UoKS50aGVuKGIgPT4ge1xyXG4gICAgICBpZiAoYiAmJiBiLmJvZHkpIHtcclxuICAgICAgICB0aGlzLmNvZGVDYWNoZS5nZXQoa2V5KS5uZXh0KGIuYm9keSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAqIE1ldGhvZCBHZXRDb2Rlc1xyXG4gICogQHBhcmFtIGNvbHVtbiBDb2x1bW4gbmFtZSB0byBnZXQgRG90Y29kZSBmcm9tXHJcbiAgKiBAcmV0dXJuIEZ1bGwgSFRUUCByZXNwb25zZSBhcyBPYnNlcnZhYmxlXHJcbiAgKi9cclxuICBwdWJsaWMgR2V0Q29kZXMoY29sdW1uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPERvdENvZGVbXT4ge1xyXG4gICAgaWYgKHRoaXMuY29kZXNDYWNoZS5nZXQoY29sdW1uKSkge1xyXG4gICAgICB0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZGVzQ2FjaGUuc2V0KGNvbHVtbiwgbmV3IEJlaGF2aW9yU3ViamVjdDxEb3RDb2RlW10+KG51bGwpKTtcclxuXHJcbiAgICAgIGNvbnN0IHVyaSA9IGAvR2V0Q29kZXNgO1xyXG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICBpZiAoY29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnY29sdW1uJywgY29sdW1uICsgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VuZFJlcXVlc3Q8RG90Q29kZVtdPignZ2V0JywgdXJpLCBoZWFkZXJzLCBwYXJhbXMsIG51bGwpLnRvUHJvbWlzZSgpLnRoZW4oYiA9PiB7XHJcbiAgICAgICAgaWYgKGIgJiYgYi5ib2R5KSB7XHJcbiAgICAgICAgICB0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbikubmV4dChiLmJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29kZXNDYWNoZS5nZXQoY29sdW1uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogTWV0aG9kIEdldFJlbGF0ZWRDb2Rlc1xyXG4gICogQHBhcmFtIGNvbHVtbiBDb2x1bW4gbmFtZSBmb3IgZG90Y29kZVxyXG4gICogQHBhcmFtIGNvZGVWYWx1ZSBEb3RDb2RlIHZhbHVlIHRvIGdldCByZWxhdGVkIGNvZGVzIGZvclxyXG4gICogQHBhcmFtIHJlbGF0ZWRDb2RlIFJlbGF0ZWQgQ29sdW1uIG5hbWUgdG8gZ2V0IFJlbGF0ZWQgQ29kZXMgZnJvbVxyXG4gICogQHJldHVybiBGdWxsIEhUVFAgcmVzcG9uc2UgYXMgT2JzZXJ2YWJsZVxyXG4gICovXHJcbiAgcHVibGljIEdldFJlbGF0ZWRDb2Rlcyhjb2x1bW46IHN0cmluZywgY29kZVZhbHVlOiBzdHJpbmcsIHJlbGF0ZWRDb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlbGF0ZWRDb2RlW10+IHtcclxuICAgIGNvbnN0IHVyaSA9IGAvR2V0UmVsYXRlZENvZGVzYDtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKGNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbiAhPT0gbnVsbCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdjb2x1bW4nLCBjb2x1bW4gKyAnJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29kZVZhbHVlICE9PSB1bmRlZmluZWQgJiYgY29kZVZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NvZGVWYWx1ZScsIGNvZGVWYWx1ZSArICcnKTtcclxuICAgIH1cclxuICAgIGlmIChyZWxhdGVkQ29kZSAhPT0gdW5kZWZpbmVkICYmIHJlbGF0ZWRDb2RlICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3JlbGF0ZWRDb2RlJywgcmVsYXRlZENvZGUgKyAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VuZFJlcXVlc3Q8UmVsYXRlZENvZGVbXT4oJ2dldCcsIHVyaSwgaGVhZGVycywgcGFyYW1zLCBudWxsKS5waXBlKFxyXG4gICAgICBtYXAoYiA9PiB7XHJcbiAgICAgICAgaWYgKGIgJiYgYi5ib2R5KSB7XHJcbiAgICAgICAgICByZXR1cm4gYi5ib2R5O1xyXG4gICAgICAgIH1cclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kUmVxdWVzdDxUPihtZXRob2Q6IHN0cmluZywgdXJpOiBzdHJpbmcsIGhlYWRlcnM6IEh0dHBIZWFkZXJzLCBwYXJhbXM6IEh0dHBQYXJhbXMsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFQ+PiB7XHJcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ09jcC1BcGltLVN1YnNjcmlwdGlvbi1LZXknLCB0aGlzLmNvbmZpZy5hcGlLZXkpO1xyXG4gICAgaWYgKG1ldGhvZCA9PT0gJ2dldCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5jb25maWcuaG9zdCArIHVyaSxcclxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpLCBwYXJhbXM6IHBhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAncHV0Jykge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPih0aGlzLmNvbmZpZy5ob3N0ICsgdXJpLCBib2R5LFxyXG4gICAgICAgIHsgaGVhZGVyczogaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyksIHBhcmFtczogcGFyYW1zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdwb3N0Jykge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy5jb25maWcuaG9zdCArIHVyaSwgYm9keSxcclxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpLCBwYXJhbXM6IHBhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAnZGVsZXRlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxUPih0aGlzLmNvbmZpZy5ob3N0ICsgdXJpLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVW5zdXBwb3J0ZWQgcmVxdWVzdDogJyArIG1ldGhvZCk7XHJcbiAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KCdVbnN1cHBvcnRlZCByZXF1ZXN0OiAnICsgbWV0aG9kKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19