@ema/js-base-library
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
348 lines • 25.8 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
*/
export class BaseWebComponent extends HTMLElement {
constructor() {
super();
this.data = {};
}
/**
* @return {?}
*/
init() {
return tslib_1.__awaiter(this, void 0, void 0, function* () { });
}
/**
* @return {?}
*/
render() { }
/**
* @return {?}
*/
definePublicMethods() { }
/**
* @return {?}
*/
remove() { }
/**
* @param {?} name
* @param {?} oldVal
* @param {?} newVal
* @return {?}
*/
attributeChangedCallback(name, oldVal, newVal) { }
/**
* @return {?}
*/
connectedCallback() {
/** @type {?} */
let 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 {?}
*/
() => {
this.preRender();
}));
}
else {
this.preRender();
}
}
/**
* @return {?}
*/
get template() {
if (this._template) {
return this._template;
}
this._template = document.createElement('template');
/** @type {?} */
let styles = document.createElement('style');
/** @type {?} */
let content = document.createElement('div');
/** @type {?} */
let 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;
}
/**
* @param {?} propName
* @param {?} getFn
* @param {?} setFn
* @return {?}
*/
declareProp(propName, getFn, setFn) {
/** @type {?} */
let 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 {?}
*/
(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 {?}
*/
(value) => {
/** @type {?} */
let data = JSON.parse(value);
Object.keys(data).forEach((/**
* @param {?} k
* @return {?}
*/
(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 {?}
*/
dispatch(eventName, detail) {
this.dispatchEvent(new CustomEvent(eventName, { bubbles: true, detail: detail }));
}
// state management
/**
* @param {?} state
* @return {?}
*/
setState(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 = Object.assign({}, this.state, state);
}
/**
* @param {?} key
* @return {?}
*/
getState(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 {?}
*/
removeState(key) {
if (!key) {
this.state = {};
this.currentState = '{}';
this.preRender();
}
else {
delete this.state[key];
}
}
// data management
/**
* @param {?} object
* @param {?} extend
* @return {?}
*/
setData(object, extend) {
if (extend) {
Object.keys(object).forEach((/**
* @param {?} k
* @param {?} i
* @return {?}
*/
(k, i) => {
this.data[k] = object[k];
}));
}
else {
this.data = object;
}
this.preRender();
}
/**
* @return {?}
*/
getData() {
return this.data;
}
/**
* @return {?}
*/
preRender() {
if (this.root) {
this.root.querySelector('.content')['innerHTML'] = this.render();
}
}
// utils
/**
* @param {?} jsonString
* @return {?}
*/
isJson(jsonString) {
try {
/** @type {?} */
let o = JSON.parse(jsonString);
if (o && typeof o === "object") {
return o;
}
}
catch (e) { }
return false;
}
;
/**
* @param {?} str
* @return {?}
*/
kebabToLowerCamelCase(str) {
/** @type {?} */
let string = str.charAt(0).toLowerCase() + str.slice(1);
return string.replace(/(\-\w)/g, (/**
* @param {?} m
* @return {?}
*/
function (m) {
return m[1].toUpperCase();
}));
}
}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS13ZWItY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVtYS9qcy1iYXNlLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvYmFzZS9iYXNlLXdlYi1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSw0QkFPQzs7O0lBTkcsaURBQXlCOztJQUN6QiwwQ0FBa0I7O0lBQ2xCLDRDQUF5Qjs7SUFDekIsNkJBQUs7O0lBQ0wsK0JBQVk7O0lBQ1osaUNBQVM7Ozs7O0FBTWIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQVc7SUFjN0M7UUFDSSxLQUFLLEVBQUUsQ0FBQTtRQWJYLFNBQUksR0FBUSxFQUFFLENBQUM7SUFjZixDQUFDOzs7O0lBRUssSUFBSTtzRUFBSyxDQUFDO0tBQUE7Ozs7SUFDaEIsTUFBTSxLQUFLLENBQUM7Ozs7SUFDWixtQkFBbUIsS0FBSyxDQUFDOzs7O0lBQ3pCLE1BQU0sS0FBSyxDQUFDOzs7Ozs7O0lBQ1osd0JBQXdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQzs7OztJQUVsRCxpQkFBaUI7O1lBQ1QsVUFBVTtRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDdkMsSUFBSSxFQUFFLE1BQU07YUFDZixDQUFDLENBQUM7U0FDTjthQUFJO1lBQ0QsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUM1QztRQUNELElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxHQUFH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QUksRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwRTtJQUNMLENBQUM7Ozs7OztJQUdELE1BQU0sQ0FBQyxVQUFVO1FBQ2IsSUFBSTs7Z0JBQ0ksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFBRSxPQUFPLENBQUMsQ0FBQzthQUFFO1NBQ2hEO1FBQ0QsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNiLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFBQSxDQUFDOzs7OztJQUVGLHFCQUFxQixDQUFDLEdBQUc7O1lBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTOzs7O1FBQUUsVUFBVSxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlCLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQztDQUVKOzs7SUE1TUcsZ0NBQWU7O0lBQ2YsOEJBQWdCOztJQUNoQix3Q0FBYTs7SUFDYixtQ0FBZ0I7O0lBQ2hCLGdDQUFLOztJQUNMLGlDQUFNOztJQUNOLHVDQUFZOztJQUNaLG9DQUFTOztJQUNULHdDQUFhOztJQUNiLGtDQUFlOztJQUNmLHFDQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIElXZWJDb21wb25lbnQge1xuICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaztcbiAgICBjb25uZWN0ZWRDYWxsYmFjaztcbiAgICBkZWZpbmVQdWJsaWNNZXRob2RzOiBhbnk7XG4gICAgaW5pdDtcbiAgICByZW5kZXI6IGFueTtcbiAgICB0ZW1wbGF0ZTtcbn1cblxuLypcbiAgICBiYXNlIGNsYXNzIGZvciB2YW5pbGxhLWpzIHdlYmNvbXBvbmVudHNcbiovXG5leHBvcnQgY2xhc3MgQmFzZVdlYkNvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IGltcGxlbWVudHMgSVdlYkNvbXBvbmVudCB7XG5cbiAgICBkYXRhOiBhbnkgPSB7fTtcbiAgICBlbDogSFRNTEVsZW1lbnQ7XG4gICAgaHRtbFRlbXBsYXRlO1xuICAgIGltcG9ydHM6IHN0cmluZztcbiAgICByb290O1xuICAgIHN0YXRlO1xuICAgIHNoYXJlZFN0YXRlO1xuICAgIGRhdGFKc29uO1xuICAgIGN1cnJlbnRTdGF0ZTtcbiAgICBzdHlsZXM6IHN0cmluZztcbiAgICBfdGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7IH1cbiAgICByZW5kZXIoKSB7IH1cbiAgICBkZWZpbmVQdWJsaWNNZXRob2RzKCkgeyB9XG4gICAgcmVtb3ZlKCkgeyB9XG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7IH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICBsZXQgc2hhZG93Um9vdDtcbiAgICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICAgIGlmKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHNoYWRvd1Jvb3QgPSB0aGlzLnJvb3QgPSB0aGlzLmF0dGFjaFNoYWRvdyh7XG4gICAgICAgICAgICAgICAgbW9kZTogJ29wZW4nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBzaGFkb3dSb290ID0gdGhpcy5yb290ID0gdGhpcy5zaGFkb3dSb290O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWwgPSBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRoaXMudGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlID0gdGhpcy5zZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFN0YXRlID0gdGhpcy5nZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbW92ZVN0YXRlID0gdGhpcy5yZW1vdmVTdGF0ZS5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZ2V0RGF0YSA9IHRoaXMuZ2V0RGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldERhdGEgPSB0aGlzLnNldERhdGEuYmluZCh0aGlzKTtcbiAgICAgICAgaWYodGhpcy5kZWZpbmVQdWJsaWNNZXRob2RzKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZVB1YmxpY01ldGhvZHMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCA9IHRoaXMuaW5pdC5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFKc29uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YUpzb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaW5pdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5wcmVSZW5kZXIoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgIGxldCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICBsZXQgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBsZXQgaW1wb3J0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hlYWQnKTtcblxuICAgICAgICBpbXBvcnRzLmlubmVySFRNTCA9IHRoaXMuaW1wb3J0cyB8fCBgYDtcbiAgICAgICAgc3R5bGVzLmlubmVySFRNTCA9IHRoaXMuc3R5bGVzIHx8IGBgO1xuICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IHRoaXMuaHRtbFRlbXBsYXRlIHx8IGBgO1xuICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICdjb250ZW50JztcblxuICAgICAgICB0aGlzLl90ZW1wbGF0ZS5jb250ZW50LmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaW1wb3J0cyk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIGRlY2xhcmVQcm9wKHByb3BOYW1lLCBnZXRGbiwgc2V0Rm4pIHtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICAvLyBkZWZhdWx0IGdldHRlcnMgLyBzZXR0ZXJzXG4gICAgICAgIGlmICghZ2V0Rm4pIHtcbiAgICAgICAgICAgIGdldEZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZShwcm9wTmFtZSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKHByb3BOYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2V0Rm4pIHtcbiAgICAgICAgICAgIHNldEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUocHJvcE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjdXJyZW50LXN0YXRlOiBnZXR0ZXIgLyBzZXR0ZXJcbiAgICAgICAgaWYgKHByb3BOYW1lID09PSAnY3VycmVudC1zdGF0ZScpIHtcbiAgICAgICAgICAgIC8vIGdldEZuID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShwcm9wTmFtZSk7XG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgc2V0Rm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmlzSnNvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShKU09OLnBhcnNlKHZhbHVlKSlcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6dmFsdWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gMiB3YXkgc3RhdGVcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNoYXJlZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKHByb3BOYW1lLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUpKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShwcm9wTmFtZSx2YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1cnJlbnQtc3RhdGU6IGdldHRlciAvIHNldHRlclxuICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdkYXRhLWpzb24nKSB7XG4gICAgICAgICAgICAvLyBnZXRGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUocHJvcE5hbWUpO1xuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIHNldEZuID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtrXSA9IGRhdGFba11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShwcm9wTmFtZSwgdmFsdWUpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIG9ialtwcm9wTmFtZV0gPSB7Z2V0OiBnZXRGbiwgc2V0OiBzZXRGbn07XG4gICAgICAgIG9ialt0aGlzLmtlYmFiVG9Mb3dlckNhbWVsQ2FzZShwcm9wTmFtZSldID0ge2dldDogZ2V0Rm4sIHNldDogc2V0Rm59O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBvYmopO1xuICAgIH1cblxuICAgIGRpc3BhdGNoKGV2ZW50TmFtZSwgZGV0YWlsKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7YnViYmxlczogdHJ1ZSwgZGV0YWlsOiBkZXRhaWx9KSlcbiAgICB9XG5cbiAgICAvLyBzdGF0ZSBtYW5hZ2VtZW50XG4gICAgc2V0U3RhdGUoc3RhdGUpIHtcbiAgICAgICAgaWYodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyAmJiAhdGhpcy5pc0pzb24oc3RhdGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdzZXRTdGF0ZSBvbmx5IGFjY2VwdHMgYW4gb2JqZWN0IGFzIGFyZ3VtZW50Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzSnNvbihzdGF0ZSkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gey4uLnRoaXMuc3RhdGUsIC4uLnN0YXRlfTtcbiAgICB9XG5cbiAgICBnZXRTdGF0ZShrZXkpIHtcbiAgICAgICAgaWYoa2V5ICYmIHRoaXMuc3RhdGVba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZVtrZXldKSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RhdGUoa2V5KSB7XG4gICAgICAgIGlmKCFrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gJ3t9JztcbiAgICAgICAgICAgIHRoaXMucHJlUmVuZGVyKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlW2tleV1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGEgbWFuYWdlbWVudFxuICAgIHNldERhdGEob2JqZWN0LCBleHRlbmQpIHtcbiAgICAgICAgaWYgKGV4dGVuZCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChrLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2tdID0gb2JqZWN0W2tdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVSZW5kZXIoKTtcbiAgICB9XG5cbiAgICBnZXREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIHByZVJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50JylbJ2lubmVySFRNTCddID0gdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHV0aWxzXG4gICAgaXNKc29uKGpzb25TdHJpbmcpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IG8gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8gPT09IFwib2JqZWN0XCIpIHsgcmV0dXJuIG87IH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAga2ViYWJUb0xvd2VyQ2FtZWxDYXNlKHN0cikge1xuICAgICAgICBsZXQgc3RyaW5nID0gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhcXC1cXHcpL2csIGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gbVsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cblxuXG5cblxuXG4iXX0=