@fdot/angular-dotcodes
Version:
`npm install @fdot/angular-dotcodes --save`
192 lines (191 loc) • 23.3 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";
export class AngularDotcodesService {
/**
* @param {?} http
* @param {?} config
*/
constructor(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
*/
GetCode(column, codeValue) {
const /** @type {?} */ key = `${column}-${codeValue}`;
if (this.codeCache.get(key)) {
this.codeCache.get(`${column}-${codeValue}`);
}
else if (this.codesCache.get(column)) {
const /** @type {?} */ codes = this.codesCache.get(column).value;
if (codes) {
const /** @type {?} */ code = codes.filter(c => 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 {?}
*/
loadCodes(key, column, codeValue) {
this.codeCache.set(key, new BehaviorSubject(null));
const /** @type {?} */ uri = `/GetCode`;
const /** @type {?} */ headers = new HttpHeaders();
let /** @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(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
*/
GetCodes(column) {
if (this.codesCache.get(column)) {
this.codesCache.get(column);
}
else {
this.codesCache.set(column, new BehaviorSubject(null));
const /** @type {?} */ uri = `/GetCodes`;
const /** @type {?} */ headers = new HttpHeaders();
let /** @type {?} */ params = new HttpParams();
if (column !== undefined && column !== null) {
params = params.set('column', column + '');
}
this.sendRequest('get', uri, headers, params, null).toPromise().then(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
*/
GetRelatedCodes(column, codeValue, relatedCode) {
const /** @type {?} */ uri = `/GetRelatedCodes`;
const /** @type {?} */ headers = new HttpHeaders();
let /** @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(b => {
if (b && b.body) {
return b.body;
}
}));
}
/**
* @template T
* @param {?} method
* @param {?} uri
* @param {?} headers
* @param {?} params
* @param {?} body
* @return {?}
*/
sendRequest(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 = () => [
{ 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" });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kb3Rjb2Rlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZkb3QvYW5ndWxhci1kb3Rjb2Rlcy8iLCJzb3VyY2VzIjpbImxpYi9hbmd1bGFyLWRvdGNvZGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLekMsTUFBTTs7Ozs7SUFJSixZQUFvQixJQUFnQixFQUE0QjtRQUE1QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQTRCLFdBQU0sR0FBTixNQUFNOzBCQUhqRCxJQUFJLEdBQUcsRUFBc0M7eUJBQzlDLElBQUksR0FBRyxFQUFvQztRQUc3RCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1NBQ3ZGO0tBQ0Y7Ozs7Ozs7SUFRTSxPQUFPLENBQUMsTUFBYyxFQUFFLFNBQWlCO1FBQzlDLHVCQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUVyQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztTQUM5QztRQUFDLElBQUksQ0FB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LENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUMvRztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUMzRDs7OztZQTVJSixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFaUSxVQUFVO1lBUVYsTUFBTSx1QkFTMEIsTUFBTSxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIERvdENvZGUsXHJcbiAgUmVsYXRlZENvZGVcclxufSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2NvbmZpZyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRG90Y29kZXNTZXJ2aWNlIHtcclxuICBwcml2YXRlIGNvZGVzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PERvdENvZGVbXT4+KCk7XHJcbiAgcHJpdmF0ZSBjb2RlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PERvdENvZGU+PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoJ2NvbmZpZycpIHByaXZhdGUgY29uZmlnOiBDb25maWcpIHtcclxuICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdDYWxsIEFuZ3VsYXJEb3Rjb2Rlc1NlcnZpY2Ugd2l0aCBmb3Igcm9vdCBwYXNzaW5nIGluIHRoZSBjb25maWcgb2JqZWN0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIE1ldGhvZCBHZXRDb2RlXHJcbiAgKiBAcGFyYW0gY29sdW1uIENvbHVtbiBuYW1lIHRvIGdldCBEb3Rjb2RlIGZyb21cclxuICAqIEBwYXJhbSBjb2RlVmFsdWUgVGhlIGNvZGUgdmFsdWUgdG8gcmV0cmlldmVcclxuICAqIEByZXR1cm4gRnVsbCBIVFRQIHJlc3BvbnNlIGFzIE9ic2VydmFibGVcclxuICAqL1xyXG4gIHB1YmxpYyBHZXRDb2RlKGNvbHVtbjogc3RyaW5nLCBjb2RlVmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8RG90Q29kZT4ge1xyXG4gICAgY29uc3Qga2V5ID0gYCR7Y29sdW1ufS0ke2NvZGVWYWx1ZX1gO1xyXG5cclxuICAgIGlmICh0aGlzLmNvZGVDYWNoZS5nZXQoa2V5KSkge1xyXG4gICAgICB0aGlzLmNvZGVDYWNoZS5nZXQoYCR7Y29sdW1ufS0ke2NvZGVWYWx1ZX1gKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pKSB7XHJcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pLnZhbHVlO1xyXG4gICAgICBpZiAoY29kZXMpIHtcclxuICAgICAgICBjb25zdCBjb2RlID0gY29kZXMuZmlsdGVyKGMgPT4gYy52YWx1ZSA9PT0gY29kZVZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKGNvZGUgJiYgY29kZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2RlQ2FjaGUuc2V0KGtleSwgbmV3IEJlaGF2aW9yU3ViamVjdDxEb3RDb2RlPihudWxsKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSkubmV4dChjb2RlWzBdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkQ29kZXMoa2V5LCBjb2x1bW4sIGNvZGVWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZENvZGVzKGtleSwgY29sdW1uLCBjb2RlVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRDb2RlcyhrZXksIGNvbHVtbiwgY29kZVZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRDb2RlcyhrZXk6IHN0cmluZywgY29sdW1uOiBzdHJpbmcsIGNvZGVWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNvZGVDYWNoZS5zZXQoa2V5LCBuZXcgQmVoYXZpb3JTdWJqZWN0PERvdENvZGU+KG51bGwpKTtcclxuXHJcbiAgICBjb25zdCB1cmkgPSBgL0dldENvZGVgO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcblxyXG4gICAgaWYgKGNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbiAhPT0gbnVsbCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdjb2x1bW4nLCBjb2x1bW4gKyAnJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29kZVZhbHVlICE9PSB1bmRlZmluZWQgJiYgY29kZVZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NvZGVWYWx1ZScsIGNvZGVWYWx1ZSArICcnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbmRSZXF1ZXN0PERvdENvZGU+KCdnZXQnLCB1cmksIGhlYWRlcnMsIHBhcmFtcywgbnVsbCkudG9Qcm9taXNlKCkudGhlbihiID0+IHtcclxuICAgICAgaWYgKGIgJiYgYi5ib2R5KSB7XHJcbiAgICAgICAgdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSkubmV4dChiLmJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgKiBNZXRob2QgR2V0Q29kZXNcclxuICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIG5hbWUgdG8gZ2V0IERvdGNvZGUgZnJvbVxyXG4gICogQHJldHVybiBGdWxsIEhUVFAgcmVzcG9uc2UgYXMgT2JzZXJ2YWJsZVxyXG4gICovXHJcbiAgcHVibGljIEdldENvZGVzKGNvbHVtbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb3RDb2RlW10+IHtcclxuICAgIGlmICh0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbikpIHtcclxuICAgICAgdGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2Rlc0NhY2hlLnNldChjb2x1bW4sIG5ldyBCZWhhdmlvclN1YmplY3Q8RG90Q29kZVtdPihudWxsKSk7XHJcblxyXG4gICAgICBjb25zdCB1cmkgPSBgL0dldENvZGVzYDtcclxuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgaWYgKGNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NvbHVtbicsIGNvbHVtbiArICcnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbmRSZXF1ZXN0PERvdENvZGVbXT4oJ2dldCcsIHVyaSwgaGVhZGVycywgcGFyYW1zLCBudWxsKS50b1Byb21pc2UoKS50aGVuKGIgPT4ge1xyXG4gICAgICAgIGlmIChiICYmIGIuYm9keSkge1xyXG4gICAgICAgICAgdGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pLm5leHQoYi5ib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIE1ldGhvZCBHZXRSZWxhdGVkQ29kZXNcclxuICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIG5hbWUgZm9yIGRvdGNvZGVcclxuICAqIEBwYXJhbSBjb2RlVmFsdWUgRG90Q29kZSB2YWx1ZSB0byBnZXQgcmVsYXRlZCBjb2RlcyBmb3JcclxuICAqIEBwYXJhbSByZWxhdGVkQ29kZSBSZWxhdGVkIENvbHVtbiBuYW1lIHRvIGdldCBSZWxhdGVkIENvZGVzIGZyb21cclxuICAqIEByZXR1cm4gRnVsbCBIVFRQIHJlc3BvbnNlIGFzIE9ic2VydmFibGVcclxuICAqL1xyXG4gIHB1YmxpYyBHZXRSZWxhdGVkQ29kZXMoY29sdW1uOiBzdHJpbmcsIGNvZGVWYWx1ZTogc3RyaW5nLCByZWxhdGVkQ29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZWxhdGVkQ29kZVtdPiB7XHJcbiAgICBjb25zdCB1cmkgPSBgL0dldFJlbGF0ZWRDb2Rlc2A7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChjb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4gIT09IG51bGwpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnY29sdW1uJywgY29sdW1uICsgJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvZGVWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNvZGVWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdjb2RlVmFsdWUnLCBjb2RlVmFsdWUgKyAnJyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVsYXRlZENvZGUgIT09IHVuZGVmaW5lZCAmJiByZWxhdGVkQ29kZSAhPT0gbnVsbCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyZWxhdGVkQ29kZScsIHJlbGF0ZWRDb2RlICsgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0PFJlbGF0ZWRDb2RlW10+KCdnZXQnLCB1cmksIGhlYWRlcnMsIHBhcmFtcywgbnVsbCkucGlwZShcclxuICAgICAgbWFwKGIgPT4ge1xyXG4gICAgICAgIGlmIChiICYmIGIuYm9keSkge1xyXG4gICAgICAgICAgcmV0dXJuIGIuYm9keTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VuZFJlcXVlc3Q8VD4obWV0aG9kOiBzdHJpbmcsIHVyaTogc3RyaW5nLCBoZWFkZXJzOiBIdHRwSGVhZGVycywgcGFyYW1zOiBIdHRwUGFyYW1zLCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxUPj4ge1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdPY3AtQXBpbS1TdWJzY3JpcHRpb24tS2V5JywgdGhpcy5jb25maWcuYXBpS2V5KTtcclxuICAgIGlmIChtZXRob2QgPT09ICdnZXQnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuY29uZmlnLmhvc3QgKyB1cmksXHJcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKSwgcGFyYW1zOiBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ3B1dCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4odGhpcy5jb25maWcuaG9zdCArIHVyaSwgYm9keSxcclxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpLCBwYXJhbXM6IHBhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAncG9zdCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQ+KHRoaXMuY29uZmlnLmhvc3QgKyB1cmksIGJvZHksXHJcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKSwgcGFyYW1zOiBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ2RlbGV0ZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8VD4odGhpcy5jb25maWcuaG9zdCArIHVyaSwgeyBoZWFkZXJzOiBoZWFkZXJzLCBwYXJhbXM6IHBhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vuc3VwcG9ydGVkIHJlcXVlc3Q6ICcgKyBtZXRob2QpO1xyXG4gICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdygnVW5zdXBwb3J0ZWQgcmVxdWVzdDogJyArIG1ldGhvZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==