UNPKG

@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
/** * @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS13ZWItY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVtYS9qcy1iYXNlLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvYmFzZS9iYXNlLXdlYi1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSw0QkFPQzs7O0lBTkcsaURBQXlCOztJQUN6QiwwQ0FBa0I7O0lBQ2xCLDRDQUF5Qjs7SUFDekIsNkJBQUs7O0lBQ0wsK0JBQVk7O0lBQ1osaUNBQVM7Ozs7O0FBTWI7Ozs7SUFBc0MsNENBQVc7SUFjN0M7UUFBQSxZQUNJLGlCQUFPLFNBQ1Y7UUFkRCxVQUFJLEdBQVEsRUFBRSxDQUFDOztJQWNmLENBQUM7Ozs7SUFFSywrQkFBSTs7O0lBQVY7Ozs7S0FBZ0I7Ozs7SUFDaEIsaUNBQU07OztJQUFOLGNBQVcsQ0FBQzs7OztJQUNaLDhDQUFtQjs7O0lBQW5CLGNBQXdCLENBQUM7Ozs7SUFDekIsaUNBQU07OztJQUFOLGNBQVcsQ0FBQzs7Ozs7OztJQUNaLG1EQUF3Qjs7Ozs7O0lBQXhCLFVBQXlCLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7Ozs7SUFFbEQsNENBQWlCOzs7SUFBakI7UUFBQSxpQkFnQ0M7O1lBL0JPLFVBQVU7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxNQUFNO2FBQ2YsQ0FBQyxDQUFDO1NBQ047YUFBSTtZQUNELFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsSUFBRyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSTs7O1lBQUM7Z0JBQ2IsS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLENBQUMsRUFBQyxDQUFBO1NBQ0w7YUFBSTtZQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtTQUNuQjtJQUNMLENBQUM7SUFFRCxzQkFBSSxzQ0FBUTs7OztRQUFaO1lBQ0ksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7O2dCQUNoRCxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7O2dCQUN4QyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7O2dCQUN2QyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFFNUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDNUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFFOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFCLENBQUM7OztPQUFBOzs7Ozs7O0lBRUQsc0NBQVc7Ozs7OztJQUFYLFVBQVksUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLO1FBQWxDLGlCQW9EQzs7WUFuRE8sR0FBRyxHQUFHLEVBQUU7UUFDWiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLEtBQUs7OztZQUFHO2dCQUNKLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQ3RDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdEM7cUJBQU07b0JBQ0gsT0FBTyxFQUFFLENBQUM7aUJBQ2I7WUFDTCxDQUFDLENBQUEsQ0FBQTtTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLEtBQUs7Ozs7WUFBRyxVQUFVLEtBQUs7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQSxDQUFBO1NBQ0o7UUFDRCxpQ0FBaUM7UUFDakMsSUFBSSxRQUFRLEtBQUssZUFBZSxFQUFFO1lBQzlCLGtCQUFrQjtZQUNsQiwwQ0FBMEM7WUFDMUMsS0FBSztZQUNMLEtBQUs7Ozs7WUFBRyxVQUFDLEtBQUs7Z0JBQ1YsSUFBRyxLQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNuQixLQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtpQkFDbkM7cUJBQUk7b0JBQ0QsS0FBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO2lCQUNoQztnQkFDRCxjQUFjO2dCQUNkLElBQUcsS0FBSSxDQUFDLFdBQVcsRUFBRTtvQkFDakIsS0FBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtpQkFDekQ7cUJBQUk7b0JBQ0QsS0FBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUMsS0FBSyxDQUFDLENBQUE7aUJBQ3BDO1lBQ0wsQ0FBQyxDQUFBLENBQUM7U0FDTDtRQUNELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDMUIsa0JBQWtCO1lBQ2xCLDBDQUEwQztZQUMxQyxLQUFLO1lBQ0wsS0FBSzs7OztZQUFHLFVBQUMsS0FBSzs7b0JBQ04sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87Ozs7Z0JBQUMsVUFBQyxDQUFDO29CQUN4QixLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDMUIsQ0FBQyxFQUFDLENBQUM7Z0JBQ0gsS0FBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDdEMsQ0FBQyxDQUFBLENBQUM7U0FDTDtRQUNELDRDQUE0QztRQUM1QyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Ozs7OztJQUVELG1DQUFROzs7OztJQUFSLFVBQVMsU0FBUyxFQUFFLE1BQU07UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUVELG1CQUFtQjs7Ozs7O0lBQ25CLG1DQUFROzs7Ozs7SUFBUixVQUFTLEtBQUs7UUFDVixJQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakQsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQzdELE9BQU87U0FDVjtRQUNELElBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEQsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDNUI7UUFDRCxJQUFJLENBQUMsS0FBSyx3QkFBTyxJQUFJLENBQUMsS0FBSyxFQUFLLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7Ozs7O0lBRUQsbUNBQVE7Ozs7SUFBUixVQUFTLEdBQUc7UUFDUixJQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3REO2FBQUk7WUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNqRDtJQUNMLENBQUM7Ozs7O0lBRUQsc0NBQVc7Ozs7SUFBWCxVQUFZLEdBQUc7UUFDWCxJQUFHLENBQUMsR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ25CO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDekI7SUFDTCxDQUFDO0lBRUQsa0JBQWtCOzs7Ozs7O0lBQ2xCLGtDQUFPOzs7Ozs7O0lBQVAsVUFBUSxNQUFNLEVBQUUsTUFBTTtRQUF0QixpQkFTQztRQVJHLElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPOzs7OztZQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsRUFBQyxDQUFDO1NBQ047YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Ozs7SUFFRCxrQ0FBTzs7O0lBQVA7UUFDSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQzs7OztJQUVELG9DQUFTOzs7SUFBVDtRQUNJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwRTtJQUNMLENBQUM7SUFFRCxRQUFROzs7Ozs7SUFDUixpQ0FBTTs7Ozs7O0lBQU4sVUFBTyxVQUFVO1FBQ2IsSUFBSTs7Z0JBQ0ksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFBRSxPQUFPLENBQUMsQ0FBQzthQUFFO1NBQ2hEO1FBQ0QsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNiLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFBQSxDQUFDOzs7OztJQUVGLGdEQUFxQjs7OztJQUFyQixVQUFzQixHQUFHOztZQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUzs7OztRQUFFLFVBQVUsQ0FBQztZQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7SUFFTCx1QkFBQztBQUFELENBQUMsQUE5TUQsQ0FBc0MsV0FBVyxHQThNaEQ7Ozs7Ozs7SUE1TUcsZ0NBQWU7O0lBQ2YsOEJBQWdCOztJQUNoQix3Q0FBYTs7SUFDYixtQ0FBZ0I7O0lBQ2hCLGdDQUFLOztJQUNMLGlDQUFNOztJQUNOLHVDQUFZOztJQUNaLG9DQUFTOztJQUNULHdDQUFhOztJQUNiLGtDQUFlOztJQUNmLHFDQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIElXZWJDb21wb25lbnQge1xuICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaztcbiAgICBjb25uZWN0ZWRDYWxsYmFjaztcbiAgICBkZWZpbmVQdWJsaWNNZXRob2RzOiBhbnk7XG4gICAgaW5pdDtcbiAgICByZW5kZXI6IGFueTtcbiAgICB0ZW1wbGF0ZTtcbn1cblxuLypcbiAgICBiYXNlIGNsYXNzIGZvciB2YW5pbGxhLWpzIHdlYmNvbXBvbmVudHNcbiovXG5leHBvcnQgY2xhc3MgQmFzZVdlYkNvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IGltcGxlbWVudHMgSVdlYkNvbXBvbmVudCB7XG5cbiAgICBkYXRhOiBhbnkgPSB7fTtcbiAgICBlbDogSFRNTEVsZW1lbnQ7XG4gICAgaHRtbFRlbXBsYXRlO1xuICAgIGltcG9ydHM6IHN0cmluZztcbiAgICByb290O1xuICAgIHN0YXRlO1xuICAgIHNoYXJlZFN0YXRlO1xuICAgIGRhdGFKc29uO1xuICAgIGN1cnJlbnRTdGF0ZTtcbiAgICBzdHlsZXM6IHN0cmluZztcbiAgICBfdGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7IH1cbiAgICByZW5kZXIoKSB7IH1cbiAgICBkZWZpbmVQdWJsaWNNZXRob2RzKCkgeyB9XG4gICAgcmVtb3ZlKCkgeyB9XG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7IH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICBsZXQgc2hhZG93Um9vdDtcbiAgICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICAgIGlmKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHNoYWRvd1Jvb3QgPSB0aGlzLnJvb3QgPSB0aGlzLmF0dGFjaFNoYWRvdyh7XG4gICAgICAgICAgICAgICAgbW9kZTogJ29wZW4nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBzaGFkb3dSb290ID0gdGhpcy5yb290ID0gdGhpcy5zaGFkb3dSb290O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWwgPSBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRoaXMudGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlID0gdGhpcy5zZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFN0YXRlID0gdGhpcy5nZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbW92ZVN0YXRlID0gdGhpcy5yZW1vdmVTdGF0ZS5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZ2V0RGF0YSA9IHRoaXMuZ2V0RGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldERhdGEgPSB0aGlzLnNldERhdGEuYmluZCh0aGlzKTtcbiAgICAgICAgaWYodGhpcy5kZWZpbmVQdWJsaWNNZXRob2RzKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZVB1YmxpY01ldGhvZHMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCA9IHRoaXMuaW5pdC5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFKc29uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YUpzb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaW5pdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5wcmVSZW5kZXIoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgIGxldCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICBsZXQgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBsZXQgaW1wb3J0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hlYWQnKTtcblxuICAgICAgICBpbXBvcnRzLmlubmVySFRNTCA9IHRoaXMuaW1wb3J0cyB8fCBgYDtcbiAgICAgICAgc3R5bGVzLmlubmVySFRNTCA9IHRoaXMuc3R5bGVzIHx8IGBgO1xuICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IHRoaXMuaHRtbFRlbXBsYXRlIHx8IGBgO1xuICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICdjb250ZW50JztcblxuICAgICAgICB0aGlzLl90ZW1wbGF0ZS5jb250ZW50LmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaW1wb3J0cyk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIGRlY2xhcmVQcm9wKHByb3BOYW1lLCBnZXRGbiwgc2V0Rm4pIHtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICAvLyBkZWZhdWx0IGdldHRlcnMgLyBzZXR0ZXJzXG4gICAgICAgIGlmICghZ2V0Rm4pIHtcbiAgICAgICAgICAgIGdldEZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZShwcm9wTmFtZSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKHByb3BOYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2V0Rm4pIHtcbiAgICAgICAgICAgIHNldEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUocHJvcE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjdXJyZW50LXN0YXRlOiBnZXR0ZXIgLyBzZXR0ZXJcbiAgICAgICAgaWYgKHByb3BOYW1lID09PSAnY3VycmVudC1zdGF0ZScpIHtcbiAgICAgICAgICAgIC8vIGdldEZuID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShwcm9wTmFtZSk7XG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgc2V0Rm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmlzSnNvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShKU09OLnBhcnNlKHZhbHVlKSlcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6dmFsdWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gMiB3YXkgc3RhdGVcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNoYXJlZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKHByb3BOYW1lLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUpKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShwcm9wTmFtZSx2YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1cnJlbnQtc3RhdGU6IGdldHRlciAvIHNldHRlclxuICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdkYXRhLWpzb24nKSB7XG4gICAgICAgICAgICAvLyBnZXRGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUocHJvcE5hbWUpO1xuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIHNldEZuID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtrXSA9IGRhdGFba11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShwcm9wTmFtZSwgdmFsdWUpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIG9ialtwcm9wTmFtZV0gPSB7Z2V0OiBnZXRGbiwgc2V0OiBzZXRGbn07XG4gICAgICAgIG9ialt0aGlzLmtlYmFiVG9Mb3dlckNhbWVsQ2FzZShwcm9wTmFtZSldID0ge2dldDogZ2V0Rm4sIHNldDogc2V0Rm59O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBvYmopO1xuICAgIH1cblxuICAgIGRpc3BhdGNoKGV2ZW50TmFtZSwgZGV0YWlsKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7YnViYmxlczogdHJ1ZSwgZGV0YWlsOiBkZXRhaWx9KSlcbiAgICB9XG5cbiAgICAvLyBzdGF0ZSBtYW5hZ2VtZW50XG4gICAgc2V0U3RhdGUoc3RhdGUpIHtcbiAgICAgICAgaWYodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyAmJiAhdGhpcy5pc0pzb24oc3RhdGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdzZXRTdGF0ZSBvbmx5IGFjY2VwdHMgYW4gb2JqZWN0IGFzIGFyZ3VtZW50Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzSnNvbihzdGF0ZSkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gey4uLnRoaXMuc3RhdGUsIC4uLnN0YXRlfTtcbiAgICB9XG5cbiAgICBnZXRTdGF0ZShrZXkpIHtcbiAgICAgICAgaWYoa2V5ICYmIHRoaXMuc3RhdGVba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZVtrZXldKSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RhdGUoa2V5KSB7XG4gICAgICAgIGlmKCFrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gJ3t9JztcbiAgICAgICAgICAgIHRoaXMucHJlUmVuZGVyKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlW2tleV1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGEgbWFuYWdlbWVudFxuICAgIHNldERhdGEob2JqZWN0LCBleHRlbmQpIHtcbiAgICAgICAgaWYgKGV4dGVuZCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChrLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2tdID0gb2JqZWN0W2tdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVSZW5kZXIoKTtcbiAgICB9XG5cbiAgICBnZXREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIHByZVJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50JylbJ2lubmVySFRNTCddID0gdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHV0aWxzXG4gICAgaXNKc29uKGpzb25TdHJpbmcpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IG8gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8gPT09IFwib2JqZWN0XCIpIHsgcmV0dXJuIG87IH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAga2ViYWJUb0xvd2VyQ2FtZWxDYXNlKHN0cikge1xuICAgICAgICBsZXQgc3RyaW5nID0gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhcXC1cXHcpL2csIGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gbVsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cblxuXG5cblxuXG4iXX0=