@ema/js-base-library
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
439 lines • 28.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/**
* @record
*/
function IWebComponent() { }
if (false) {
/** @type {?} */
IWebComponent.prototype.attributeChangedCallback;
/** @type {?} */
IWebComponent.prototype.connectedCallback;
/** @type {?} */
IWebComponent.prototype.definePublicMethods;
/** @type {?} */
IWebComponent.prototype.init;
/** @type {?} */
IWebComponent.prototype.render;
/** @type {?} */
IWebComponent.prototype.template;
}
/*
base class for vanilla-js webcomponents
*/
var /*
base class for vanilla-js webcomponents
*/
BaseWebComponent = /** @class */ (function (_super) {
tslib_1.__extends(BaseWebComponent, _super);
function BaseWebComponent() {
var _this = _super.call(this) || this;
_this.data = {};
return _this;
}
/**
* @return {?}
*/
BaseWebComponent.prototype.init = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
return [2 /*return*/];
}); });
};
/**
* @return {?}
*/
BaseWebComponent.prototype.render = /**
* @return {?}
*/
function () { };
/**
* @return {?}
*/
BaseWebComponent.prototype.definePublicMethods = /**
* @return {?}
*/
function () { };
/**
* @return {?}
*/
BaseWebComponent.prototype.remove = /**
* @return {?}
*/
function () { };
/**
* @param {?} name
* @param {?} oldVal
* @param {?} newVal
* @return {?}
*/
BaseWebComponent.prototype.attributeChangedCallback = /**
* @param {?} name
* @param {?} oldVal
* @param {?} newVal
* @return {?}
*/
function (name, oldVal, newVal) { };
/**
* @return {?}
*/
BaseWebComponent.prototype.connectedCallback = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var shadowRoot;
this.data = {};
if (!this.shadowRoot) {
shadowRoot = this.root = this.attachShadow({
mode: 'open'
});
}
else {
shadowRoot = this.root = this.shadowRoot;
}
this.el = shadowRoot.appendChild(this.template.content.cloneNode(true));
this.setState = this.setState.bind(this);
this.getState = this.getState.bind(this);
this.removeState = this.removeState.bind(this);
this.getData = this.getData.bind(this);
this.setData = this.setData.bind(this);
if (this.definePublicMethods) {
this.definePublicMethods();
}
if (this.init) {
this.init = this.init.bind(this);
}
if (this.dataJson) {
this.data = JSON.parse(this.dataJson);
}
if (this.init) {
this.init().then((/**
* @return {?}
*/
function () {
_this.preRender();
}));
}
else {
this.preRender();
}
};
Object.defineProperty(BaseWebComponent.prototype, "template", {
get: /**
* @return {?}
*/
function () {
if (this._template) {
return this._template;
}
this._template = document.createElement('template');
/** @type {?} */
var styles = document.createElement('style');
/** @type {?} */
var content = document.createElement('div');
/** @type {?} */
var imports = document.createElement('head');
imports.innerHTML = this.imports || "";
styles.innerHTML = this.styles || "";
content.innerHTML = this.htmlTemplate || "";
content.className = 'content';
this._template.content.appendChild(styles);
this._template.content.appendChild(imports);
this._template.content.appendChild(content);
return this._template;
},
enumerable: true,
configurable: true
});
/**
* @param {?} propName
* @param {?} getFn
* @param {?} setFn
* @return {?}
*/
BaseWebComponent.prototype.declareProp = /**
* @param {?} propName
* @param {?} getFn
* @param {?} setFn
* @return {?}
*/
function (propName, getFn, setFn) {
var _this = this;
/** @type {?} */
var obj = {};
// default getters / setters
if (!getFn) {
getFn = (/**
* @return {?}
*/
function () {
if (this.getAttribute(propName) !== null) {
return this.getAttribute(propName);
}
else {
return '';
}
});
}
if (!setFn) {
setFn = (/**
* @param {?} value
* @return {?}
*/
function (value) {
this.setAttribute(propName, value);
});
}
// current-state: getter / setter
if (propName === 'current-state') {
// getFn = () => {
// return this.getAttribute(propName);
// };
setFn = (/**
* @param {?} value
* @return {?}
*/
function (value) {
if (_this.isJson(value)) {
_this.setState(JSON.parse(value));
}
else {
_this.setState({ value: value });
}
// 2 way state
if (_this.sharedState) {
_this.setAttribute(propName, JSON.stringify(_this.state));
}
else {
_this.setAttribute(propName, value);
}
});
}
// current-state: getter / setter
if (propName === 'data-json') {
// getFn = () => {
// return this.getAttribute(propName);
// };
setFn = (/**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var data = JSON.parse(value);
Object.keys(data).forEach((/**
* @param {?} k
* @return {?}
*/
function (k) {
_this.data[k] = data[k];
}));
_this.setAttribute(propName, value);
});
}
// obj[propName] = {get: getFn, set: setFn};
obj[this.kebabToLowerCamelCase(propName)] = { get: getFn, set: setFn };
Object.defineProperties(this, obj);
};
/**
* @param {?} eventName
* @param {?} detail
* @return {?}
*/
BaseWebComponent.prototype.dispatch = /**
* @param {?} eventName
* @param {?} detail
* @return {?}
*/
function (eventName, detail) {
this.dispatchEvent(new CustomEvent(eventName, { bubbles: true, detail: detail }));
};
// state management
// state management
/**
* @param {?} state
* @return {?}
*/
BaseWebComponent.prototype.setState =
// state management
/**
* @param {?} state
* @return {?}
*/
function (state) {
if (typeof state === 'string' && !this.isJson(state)) {
console.error('setState only accepts an object as argument');
return;
}
if (typeof state === 'string' && this.isJson(state)) {
state = JSON.parse(state);
}
this.state = tslib_1.__assign({}, this.state, state);
};
/**
* @param {?} key
* @return {?}
*/
BaseWebComponent.prototype.getState = /**
* @param {?} key
* @return {?}
*/
function (key) {
if (key && this.state[key]) {
return JSON.parse(JSON.stringify(this.state[key]));
}
else {
return JSON.parse(JSON.stringify(this.state));
}
};
/**
* @param {?} key
* @return {?}
*/
BaseWebComponent.prototype.removeState = /**
* @param {?} key
* @return {?}
*/
function (key) {
if (!key) {
this.state = {};
this.currentState = '{}';
this.preRender();
}
else {
delete this.state[key];
}
};
// data management
// data management
/**
* @param {?} object
* @param {?} extend
* @return {?}
*/
BaseWebComponent.prototype.setData =
// data management
/**
* @param {?} object
* @param {?} extend
* @return {?}
*/
function (object, extend) {
var _this = this;
if (extend) {
Object.keys(object).forEach((/**
* @param {?} k
* @param {?} i
* @return {?}
*/
function (k, i) {
_this.data[k] = object[k];
}));
}
else {
this.data = object;
}
this.preRender();
};
/**
* @return {?}
*/
BaseWebComponent.prototype.getData = /**
* @return {?}
*/
function () {
return this.data;
};
/**
* @return {?}
*/
BaseWebComponent.prototype.preRender = /**
* @return {?}
*/
function () {
if (this.root) {
this.root.querySelector('.content')['innerHTML'] = this.render();
}
};
// utils
// utils
/**
* @param {?} jsonString
* @return {?}
*/
BaseWebComponent.prototype.isJson =
// utils
/**
* @param {?} jsonString
* @return {?}
*/
function (jsonString) {
try {
/** @type {?} */
var o = JSON.parse(jsonString);
if (o && typeof o === "object") {
return o;
}
}
catch (e) { }
return false;
};
;
/**
* @param {?} str
* @return {?}
*/
BaseWebComponent.prototype.kebabToLowerCamelCase = /**
* @param {?} str
* @return {?}
*/
function (str) {
/** @type {?} */
var string = str.charAt(0).toLowerCase() + str.slice(1);
return string.replace(/(\-\w)/g, (/**
* @param {?} m
* @return {?}
*/
function (m) {
return m[1].toUpperCase();
}));
};
return BaseWebComponent;
}(HTMLElement));
/*
base class for vanilla-js webcomponents
*/
export { BaseWebComponent };
if (false) {
/** @type {?} */
BaseWebComponent.prototype.data;
/** @type {?} */
BaseWebComponent.prototype.el;
/** @type {?} */
BaseWebComponent.prototype.htmlTemplate;
/** @type {?} */
BaseWebComponent.prototype.imports;
/** @type {?} */
BaseWebComponent.prototype.root;
/** @type {?} */
BaseWebComponent.prototype.state;
/** @type {?} */
BaseWebComponent.prototype.sharedState;
/** @type {?} */
BaseWebComponent.prototype.dataJson;
/** @type {?} */
BaseWebComponent.prototype.currentState;
/** @type {?} */
BaseWebComponent.prototype.styles;
/** @type {?} */
BaseWebComponent.prototype._template;
/* Skipping unhandled member: ;*/
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS13ZWItY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVtYS9qcy1iYXNlLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvYmFzZS9iYXNlLXdlYi1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSw0QkFPQzs7O0lBTkcsaURBQXlCOztJQUN6QiwwQ0FBa0I7O0lBQ2xCLDRDQUF5Qjs7SUFDekIsNkJBQUs7O0lBQ0wsK0JBQVk7O0lBQ1osaUNBQVM7Ozs7O0FBTWI7Ozs7SUFBc0MsNENBQVc7SUFjN0M7UUFBQSxZQUNJLGlCQUFPLFNBQ1Y7UUFkRCxVQUFJLEdBQVEsRUFBRSxDQUFDOztJQWNmLENBQUM7Ozs7SUFFSywrQkFBSTs7O0lBQVY7Ozs7S0FBZ0I7Ozs7SUFDaEIsaUNBQU07OztJQUFOLGNBQVcsQ0FBQzs7OztJQUNaLDhDQUFtQjs7O0lBQW5CLGNBQXdCLENBQUM7Ozs7SUFDekIsaUNBQU07OztJQUFOLGNBQVcsQ0FBQzs7Ozs7OztJQUNaLG1EQUF3Qjs7Ozs7O0lBQXhCLFVBQXlCLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7Ozs7SUFFbEQsNENBQWlCOzs7SUFBakI7UUFBQSxpQkFnQ0M7O1lBL0JPLFVBQVU7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxNQUFNO2FBQ2YsQ0FBQyxDQUFDO1NBQ047YUFBSTtZQUNELFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxD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OztJQUNOLHVDQUFZOztJQUNaLG9DQUFTOztJQUNULHdDQUFhOztJQUNiLGtDQUFlOztJQUNmLHFDQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIElXZWJDb21wb25lbnQge1xuICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaztcbiAgICBjb25uZWN0ZWRDYWxsYmFjaztcbiAgICBkZWZpbmVQdWJsaWNNZXRob2RzOiBhbnk7XG4gICAgaW5pdDtcbiAgICByZW5kZXI6IGFueTtcbiAgICB0ZW1wbGF0ZTtcbn1cblxuLypcbiAgICBiYXNlIGNsYXNzIGZvciB2YW5pbGxhLWpzIHdlYmNvbXBvbmVudHNcbiovXG5leHBvcnQgY2xhc3MgQmFzZVdlYkNvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IGltcGxlbWVudHMgSVdlYkNvbXBvbmVudCB7XG5cbiAgICBkYXRhOiBhbnkgPSB7fTtcbiAgICBlbDogSFRNTEVsZW1lbnQ7XG4gICAgaHRtbFRlbXBsYXRlO1xuICAgIGltcG9ydHM6IHN0cmluZztcbiAgICByb290O1xuICAgIHN0YXRlO1xuICAgIHNoYXJlZFN0YXRlO1xuICAgIGRhdGFKc29uO1xuICAgIGN1cnJlbnRTdGF0ZTtcbiAgICBzdHlsZXM6IHN0cmluZztcbiAgICBfdGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7IH1cbiAgICByZW5kZXIoKSB7IH1cbiAgICBkZWZpbmVQdWJsaWNNZXRob2RzKCkgeyB9XG4gICAgcmVtb3ZlKCkgeyB9XG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7IH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICBsZXQgc2hhZG93Um9vdDtcbiAgICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICAgIGlmKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHNoYWRvd1Jvb3QgPSB0aGlzLnJvb3QgPSB0aGlzLmF0dGFjaFNoYWRvdyh7XG4gICAgICAgICAgICAgICAgbW9kZTogJ29wZW4nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBzaGFkb3dSb290ID0gdGhpcy5yb290ID0gdGhpcy5zaGFkb3dSb290O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWwgPSBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRoaXMudGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlID0gdGhpcy5zZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFN0YXRlID0gdGhpcy5nZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbW92ZVN0YXRlID0gdGhpcy5yZW1vdmVTdGF0ZS5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZ2V0RGF0YSA9IHRoaXMuZ2V0RGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldERhdGEgPSB0aGlzLnNldERhdGEuYmluZCh0aGlzKTtcbiAgICAgICAgaWYodGhpcy5kZWZpbmVQdWJsaWNNZXRob2RzKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZVB1YmxpY01ldGhvZHMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCA9IHRoaXMuaW5pdC5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFKc29uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YUpzb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaW5pdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5wcmVSZW5kZXIoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgIGxldCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICBsZXQgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBsZXQgaW1wb3J0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hlYWQnKTtcblxuICAgICAgICBpbXBvcnRzLmlubmVySFRNTCA9IHRoaXMuaW1wb3J0cyB8fCBgYDtcbiAgICAgICAgc3R5bGVzLmlubmVySFRNTCA9IHRoaXMuc3R5bGVzIHx8IGBgO1xuICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IHRoaXMuaHRtbFRlbXBsYXRlIHx8IGBgO1xuICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICdjb250ZW50JztcblxuICAgICAgICB0aGlzLl90ZW1wbGF0ZS5jb250ZW50LmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaW1wb3J0cyk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIGRlY2xhcmVQcm9wKHByb3BOYW1lLCBnZXRGbiwgc2V0Rm4pIHtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICAvLyBkZWZhdWx0IGdldHRlcnMgLyBzZXR0ZXJzXG4gICAgICAgIGlmICghZ2V0Rm4pIHtcbiAgICAgICAgICAgIGdldEZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZShwcm9wTmFtZSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKHByb3BOYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2V0Rm4pIHtcbiAgICAgICAgICAgIHNldEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUocHJvcE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjdXJyZW50LXN0YXRlOiBnZXR0ZXIgLyBzZXR0ZXJcbiAgICAgICAgaWYgKHByb3BOYW1lID09PSAnY3VycmVudC1zdGF0ZScpIHtcbiAgICAgICAgICAgIC8vIGdldEZuID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShwcm9wTmFtZSk7XG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgc2V0Rm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmlzSnNvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShKU09OLnBhcnNlKHZhbHVlKSlcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6dmFsdWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gMiB3YXkgc3RhdGVcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNoYXJlZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKHByb3BOYW1lLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUpKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShwcm9wTmFtZSx2YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1cnJlbnQtc3RhdGU6IGdldHRlciAvIHNldHRlclxuICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdkYXRhLWpzb24nKSB7XG4gICAgICAgICAgICAvLyBnZXRGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUocHJvcE5hbWUpO1xuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIHNldEZuID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtrXSA9IGRhdGFba11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShwcm9wTmFtZSwgdmFsdWUpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIG9ialtwcm9wTmFtZV0gPSB7Z2V0OiBnZXRGbiwgc2V0OiBzZXRGbn07XG4gICAgICAgIG9ialt0aGlzLmtlYmFiVG9Mb3dlckNhbWVsQ2FzZShwcm9wTmFtZSldID0ge2dldDogZ2V0Rm4sIHNldDogc2V0Rm59O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBvYmopO1xuICAgIH1cblxuICAgIGRpc3BhdGNoKGV2ZW50TmFtZSwgZGV0YWlsKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7YnViYmxlczogdHJ1ZSwgZGV0YWlsOiBkZXRhaWx9KSlcbiAgICB9XG5cbiAgICAvLyBzdGF0ZSBtYW5hZ2VtZW50XG4gICAgc2V0U3RhdGUoc3RhdGUpIHtcbiAgICAgICAgaWYodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyAmJiAhdGhpcy5pc0pzb24oc3RhdGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdzZXRTdGF0ZSBvbmx5IGFjY2VwdHMgYW4gb2JqZWN0IGFzIGFyZ3VtZW50Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzSnNvbihzdGF0ZSkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gey4uLnRoaXMuc3RhdGUsIC4uLnN0YXRlfTtcbiAgICB9XG5cbiAgICBnZXRTdGF0ZShrZXkpIHtcbiAgICAgICAgaWYoa2V5ICYmIHRoaXMuc3RhdGVba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZVtrZXldKSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RhdGUoa2V5KSB7XG4gICAgICAgIGlmKCFrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gJ3t9JztcbiAgICAgICAgICAgIHRoaXMucHJlUmVuZGVyKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlW2tleV1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGEgbWFuYWdlbWVudFxuICAgIHNldERhdGEob2JqZWN0LCBleHRlbmQpIHtcbiAgICAgICAgaWYgKGV4dGVuZCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChrLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2tdID0gb2JqZWN0W2tdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVSZW5kZXIoKTtcbiAgICB9XG5cbiAgICBnZXREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIHByZVJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50JylbJ2lubmVySFRNTCddID0gdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHV0aWxzXG4gICAgaXNKc29uKGpzb25TdHJpbmcpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IG8gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8gPT09IFwib2JqZWN0XCIpIHsgcmV0dXJuIG87IH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAga2ViYWJUb0xvd2VyQ2FtZWxDYXNlKHN0cikge1xuICAgICAgICBsZXQgc3RyaW5nID0gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhcXC1cXHcpL2csIGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gbVsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cblxuXG5cblxuXG4iXX0=