UNPKG

@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
/** * @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=