UNPKG

@csvbox/angular

Version:
440 lines 44.9 kB
/** * @fileoverview added by tsickle * Generated from: lib/csvbox-button.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewChild, Input, SecurityContext } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { insertCSS } from '../utlis/insertCSS'; /** @type {?} */ var appVersion = '1.1.16'; var CSVBoxButtonComponent = /** @class */ (function () { function CSVBoxButtonComponent(sanitizer) { this.sanitizer = sanitizer; this.isModalShown = false; this.uuid = null; this.customDomain = null; this.dataLocation = null; this.language = null; this.isIframeLoaded = false; this.openModalOnIframeLoad = false; this.lazy = false; this.iframe = null; this.disabled = true; } /** * @return {?} */ CSVBoxButtonComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.uuid = this.generateUuid(); /** @type {?} */ var domain = this.customDomain ? this.customDomain : "app.csvbox.io"; if (this.dataLocation) { domain = this.dataLocation + "-" + domain; } /** @type {?} */ var iframeUrl = "https://" + domain + "/embed/" + this.licenseKey; iframeUrl += "?library-version=" + appVersion; iframeUrl += "&framework=angular"; if (this.dataLocation) { iframeUrl += "&preventRedirect"; } if (this.language) { iframeUrl += "&language" + this.language; } if (this.environment) { /** @type {?} */ var environment = JSON.stringify(this.environment).replace(/['"]/g, (/** * @param {?} match * @return {?} */ function (match) { return '\\' + match; })); iframeUrl += "&env=" + environment; } this.safeUrl = this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, this.sanitizer.bypassSecurityTrustResourceUrl(iframeUrl)); }; /** * @return {?} */ CSVBoxButtonComponent.prototype.generateUuid = /** * @return {?} */ function () { return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); }; /** * @param {?} changes * @return {?} */ CSVBoxButtonComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes["user"] && changes['user'].currentValue != changes['user'].previousValue) { this.updateUserVariabe(changes['user'].currentValue); } }; /** * @param {?} data * @return {?} */ CSVBoxButtonComponent.prototype.updateUserVariabe = /** * @param {?} data * @return {?} */ function (data) { this.user = data; if (this.iframe && this.iframe.contentWindow) { this.iframe.contentWindow.postMessage({ "customer": data }, "*"); } }; /** * @return {?} */ CSVBoxButtonComponent.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; window.addEventListener("message", (/** * @param {?} event * @return {?} */ function (event) { if (event && typeof event.data == "object") { if (event.data && event.data.data && event.data.data.unique_token == _this.uuid) { if (event.data.type && event.data.type == "data-on-submit") { /** @type {?} */ var metadata = event.data.data; metadata["column_mappings"] = event.data.column_mapping; delete metadata["unique_token"]; if (_this.onSubmit) _this.onSubmit(metadata); if (_this.isSubmitted) _this.isSubmitted(metadata); if (_this.submitted) _this.submitted(metadata); } else if (event.data.type && event.data.type == "data-push-status") { if (event.data.data.import_status == "success") { if (event.data.row_data) { /** @type {?} */ var primary_row_data = event.data.row_data; /** @type {?} */ var headers_1 = event.data.headers; /** @type {?} */ var rows_1 = []; /** @type {?} */ var dynamic_columns_indexes_1 = event.data.dynamicColumnsIndexes; /** @type {?} */ var virtual_columns_indexes_1 = event.data.virtualColumnsIndexes || []; primary_row_data.forEach((/** * @param {?} row_data * @return {?} */ function (row_data) { /** @type {?} */ var x = {}; /** @type {?} */ var dynamic_columns = {}; /** @type {?} */ var virtual_data = {}; row_data.data && row_data.data.forEach((/** * @param {?} col * @param {?} i * @return {?} */ function (col, i) { if (col == undefined) { col = ""; } ; if (dynamic_columns_indexes_1.includes(i)) { dynamic_columns[headers_1[i]] = col; } else if (virtual_columns_indexes_1.includes(i)) { virtual_data[headers_1[i]] = col; } else { x[headers_1[i]] = col; } })); if (row_data && row_data.unmapped_data) { x["_unmapped_data"] = row_data.unmapped_data; } if (dynamic_columns && Object.keys(dynamic_columns).length > 0) { x["_dynamic_data"] = dynamic_columns; } if (virtual_data && Object.keys(virtual_data).length > 0) { x["_virtual_data"] = virtual_data; } rows_1.push(x); })); /** @type {?} */ var metadata = event.data.data; metadata["rows"] = rows_1; metadata["column_mappings"] = event.data.column_mapping; metadata["raw_columns"] = event.data.raw_columns; metadata["ignored_columns"] = event.data.ignored_column_row; delete metadata["unique_token"]; if (_this.onImport) _this.onImport(true, metadata); if (_this.isImported) _this.isImported(true, metadata); if (_this.imported) _this.imported(true, metadata); } else { /** @type {?} */ var metadata = event.data.data; delete metadata["unique_token"]; if (_this.onImport) _this.onImport(true, metadata); if (_this.isImported) _this.isImported(true, metadata); if (_this.imported) _this.imported(true, metadata); } } else { /** @type {?} */ var metadata = event.data.data; delete metadata["unique_token"]; if (_this.onImport) _this.onImport(false, metadata); if (_this.isImported) _this.isImported(false, metadata); if (_this.imported) _this.imported(false, metadata); } } else if (event.data.type && event.data.type == "csvbox-modal-hidden") { if (_this.holder) _this.holder.style.display = 'none'; _this.isModalShown = false; if (_this.onClose) _this.onClose(); if (_this.isClosed) _this.isClosed(); if (_this.closed) _this.closed(); } else if (event.data.type && event.data.type == "csvbox-upload-successful") { if (_this.onImport) _this.onImport(true); if (_this.isImported) _this.isImported(true); if (_this.imported) _this.imported(true); } else if (event.data.type && event.data.type == "csvbox-upload-failed") { if (_this.onImport) _this.onImport(false); if (_this.isImported) _this.isImported(false); if (_this.imported) _this.imported(false); } } } }), false); if (this.lazy) { this.disabled = false; } else { this.disabled = true; this.initImporter(); } }; /** * @return {?} */ CSVBoxButtonComponent.prototype.initImporter = /** * @return {?} */ function () { if (this.loadStarted) this.loadStarted(); insertCSS(); /** @type {?} */ var iframe = document.createElement("iframe"); this.iframe = iframe; iframe.setAttribute("src", this.safeUrl); iframe.frameBorder = "0"; /** @type {?} */ var self = this; iframe.onload = (/** * @return {?} */ function () { if (self.onReady) self.onReady(); if (self.isReady) self.isReady(); if (self.importerReady) self.importerReady(); self.disabled = false; self.isIframeLoaded = true; if (self.iframe && self.iframe.contentWindow) { self.iframe.contentWindow.postMessage({ "customer": self.user ? self.user : null, "columns": self.dynamicColumns ? self.dynamicColumns : null, "options": self.options ? self.options : null, "unique_token": self.uuid }, "*"); } if (self.openModalOnIframeLoad) { self.openModal(); } }); this.holder = document.createElement('div'); this.holder.classList.add('csvbox-holder'); this.holder.setAttribute('id', "csvbox-embed-" + this.uuid); this.holder.appendChild(iframe); document.body.insertAdjacentElement('beforeend', this.holder); }; /** * @return {?} */ CSVBoxButtonComponent.prototype.openModal = /** * @return {?} */ function () { if (this.lazy) { if (!this.iframe) { this.openModalOnIframeLoad = true; this.initImporter(); return; } } if (!this.isModalShown) { if (this.isIframeLoaded) { this.isModalShown = true; if (this.holder) this.holder.style.display = 'block'; if (this.iframe && this.iframe.contentWindow) { this.iframe.contentWindow.postMessage('openModal', '*'); } } else { this.openModalOnIframeLoad = true; } } }; CSVBoxButtonComponent.decorators = [ { type: Component, args: [{ selector: 'csvbox-button', template: "\n <div>\n <button [disabled]=\"disabled\" #initiator (click)=\"openModal()\" [attr.data-csvbox-token]=\"uuid\">\n <ng-content></ng-content>\n </button>\n </div>\n " }] } ]; /** @nocollapse */ CSVBoxButtonComponent.ctorParameters = function () { return [ { type: DomSanitizer } ]; }; CSVBoxButtonComponent.propDecorators = { initiator: [{ type: ViewChild, args: ['initiator', { static: false },] }], onImport: [{ type: Input }], onReady: [{ type: Input }], onClose: [{ type: Input }], onSubmit: [{ type: Input }], isImported: [{ type: Input }], isReady: [{ type: Input }], isClosed: [{ type: Input }], isSubmitted: [{ type: Input }], importerReady: [{ type: Input }], closed: [{ type: Input }], submitted: [{ type: Input }], imported: [{ type: Input }], loadStarted: [{ type: Input }], user: [{ type: Input }], dynamicColumns: [{ type: Input }], licenseKey: [{ type: Input }], options: [{ type: Input }], uuid: [{ type: Input }], customDomain: [{ type: Input }], dataLocation: [{ type: Input }], language: [{ type: Input }], environment: [{ type: Input }], isIframeLoaded: [{ type: Input }], openModalOnIframeLoad: [{ type: Input }], lazy: [{ type: Input }], disabled: [{ type: Input }] }; return CSVBoxButtonComponent; }()); export { CSVBoxButtonComponent }; if (false) { /** @type {?} */ CSVBoxButtonComponent.prototype.isModalShown; /** @type {?} */ CSVBoxButtonComponent.prototype.initiator; /** @type {?} */ CSVBoxButtonComponent.prototype.onImport; /** @type {?} */ CSVBoxButtonComponent.prototype.onReady; /** @type {?} */ CSVBoxButtonComponent.prototype.onClose; /** @type {?} */ CSVBoxButtonComponent.prototype.onSubmit; /** @type {?} */ CSVBoxButtonComponent.prototype.isImported; /** @type {?} */ CSVBoxButtonComponent.prototype.isReady; /** @type {?} */ CSVBoxButtonComponent.prototype.isClosed; /** @type {?} */ CSVBoxButtonComponent.prototype.isSubmitted; /** @type {?} */ CSVBoxButtonComponent.prototype.importerReady; /** @type {?} */ CSVBoxButtonComponent.prototype.closed; /** @type {?} */ CSVBoxButtonComponent.prototype.submitted; /** @type {?} */ CSVBoxButtonComponent.prototype.imported; /** @type {?} */ CSVBoxButtonComponent.prototype.loadStarted; /** @type {?} */ CSVBoxButtonComponent.prototype.user; /** @type {?} */ CSVBoxButtonComponent.prototype.dynamicColumns; /** @type {?} */ CSVBoxButtonComponent.prototype.licenseKey; /** @type {?} */ CSVBoxButtonComponent.prototype.options; /** @type {?} */ CSVBoxButtonComponent.prototype.uuid; /** @type {?} */ CSVBoxButtonComponent.prototype.customDomain; /** @type {?} */ CSVBoxButtonComponent.prototype.dataLocation; /** @type {?} */ CSVBoxButtonComponent.prototype.language; /** @type {?} */ CSVBoxButtonComponent.prototype.environment; /** @type {?} */ CSVBoxButtonComponent.prototype.isIframeLoaded; /** @type {?} */ CSVBoxButtonComponent.prototype.openModalOnIframeLoad; /** @type {?} */ CSVBoxButtonComponent.prototype.lazy; /** @type {?} */ CSVBoxButtonComponent.prototype.safeUrl; /** @type {?} */ CSVBoxButtonComponent.prototype.iframe; /** @type {?} */ CSVBoxButtonComponent.prototype.disabled; /** @type {?} */ CSVBoxButtonComponent.prototype.holder; /** @type {?} */ CSVBoxButtonComponent.prototype.sanitizer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2Ym94LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY3N2Ym94L2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY3N2Ym94LWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFDVCxLQUFLLEVBR0wsZUFBZSxFQUVoQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztJQUV6QyxVQUFVLEdBQUcsUUFBUTtBQUUzQjtJQXFERSwrQkFBbUIsU0FBc0I7UUFBdEIsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQXhDekMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUF1QlosU0FBSSxHQUFXLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixhQUFRLEdBQVcsSUFBSSxDQUFDO1FBR3hCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUV2QyxTQUFJLEdBQVksS0FBSyxDQUFDO1FBSS9CLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFFTCxhQUFRLEdBQVksSUFBSSxDQUFDO0lBRVUsQ0FBQzs7OztJQUk3Qyx3Q0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7WUFDNUIsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWU7UUFDcEUsSUFBRyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQUUsTUFBTSxHQUFNLElBQUksQ0FBQyxZQUFZLFNBQUksTUFBUSxDQUFDO1NBQUU7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OytCQUNMLEtBQUs7MkJBQ0wsS0FBSzs4QkFDTCxLQUFLO2lDQUVMLEtBQUs7d0NBQ0wsS0FBSzt1QkFFTCxLQUFLOzJCQU1MLEtBQUs7O0lBZ05SLDRCQUFDO0NBQUEsQUFuUUQsSUFtUUM7U0F4UFkscUJBQXFCOzs7SUFFaEMsNkNBQXFCOztJQUVyQiwwQ0FBd0Q7O0lBQ3hELHlDQUE0Qjs7SUFDNUIsd0NBQTJCOztJQUMzQix3Q0FBMkI7O0lBQzNCLHlDQUE0Qjs7SUFFNUIsMkNBQThCOztJQUM5Qix3Q0FBMkI7O0lBQzNCLHlDQUE0Qjs7SUFDNUIsNENBQStCOztJQUUvQiw4Q0FBaUM7O0lBQ2pDLHVDQUEwQjs7SUFDMUIsMENBQTZCOztJQUM3Qix5Q0FBNEI7O0lBQzVCLDRDQUErQjs7SUFFL0IscUNBQXNCOztJQUN0QiwrQ0FBZ0M7O0lBQ2hDLDJDQUE0Qjs7SUFDNUIsd0NBQXlCOztJQUN6QixxQ0FBNkI7O0lBQzdCLDZDQUFxQzs7SUFDckMsNkNBQXFDOztJQUNyQyx5Q0FBaUM7O0lBQ2pDLDRDQUE2Qjs7SUFFN0IsK0NBQXlDOztJQUN6QyxzREFBZ0Q7O0lBRWhELHFDQUErQjs7SUFFL0Isd0NBQWE7O0lBRWIsdUNBQWM7O0lBRWQseUNBQWtDOztJQUlsQyx1Q0FBWTs7SUFGQSwwQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFNlY3VyaXR5Q29udGV4dCxcclxuICBBZnRlckNvbnRlbnRJbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgaW5zZXJ0Q1NTIH0gZnJvbSAnLi4vdXRsaXMvaW5zZXJ0Q1NTJztcclxuXHJcbmNvbnN0IGFwcFZlcnNpb24gPSAnMS4xLjE2JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3N2Ym94LWJ1dHRvbicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXY+XHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgI2luaXRpYXRvciAoY2xpY2spPVwib3Blbk1vZGFsKClcIiBbYXR0ci5kYXRhLWNzdmJveC10b2tlbl09XCJ1dWlkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIGBcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBDU1ZCb3hCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCB7XHJcblxyXG4gIGlzTW9kYWxTaG93biA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbml0aWF0b3InLCB7c3RhdGljOiBmYWxzZX0pIGluaXRpYXRvcjogYW55O1xyXG4gIEBJbnB1dCgpIG9uSW1wb3J0OiBGdW5jdGlvbjtcclxuICBASW5wdXQoKSBvblJlYWR5OiBGdW5jdGlvbjtcclxuICBASW5wdXQoKSBvbkNsb3NlOiBGdW5jdGlvbjtcclxuICBASW5wdXQoKSBvblN1Ym1pdDogRnVuY3Rpb247XHJcblxyXG4gIEBJbnB1dCgpIGlzSW1wb3J0ZWQ6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGlzUmVhZHk6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGlzQ2xvc2VkOiBGdW5jdGlvbjtcclxuICBASW5wdXQoKSBpc1N1Ym1pdHRlZDogRnVuY3Rpb247XHJcblxyXG4gIEBJbnB1dCgpIGltcG9ydGVyUmVhZHk6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGNsb3NlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KCkgc3VibWl0dGVkOiBGdW5jdGlvbjtcclxuICBASW5wdXQoKSBpbXBvcnRlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KCkgbG9hZFN0YXJ0ZWQ6IEZ1bmN0aW9uO1xyXG5cclxuICBASW5wdXQoKSB1c2VyOiBPYmplY3Q7XHJcbiAgQElucHV0KCkgZHluYW1pY0NvbHVtbnM6IE9iamVjdDtcclxuICBASW5wdXQoKSBsaWNlbnNlS2V5OiBTdHJpbmc7XHJcbiAgQElucHV0KCkgb3B0aW9uczogT2JqZWN0O1xyXG4gIEBJbnB1dCgpIHV1aWQ6IFN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgY3VzdG9tRG9tYWluOiBTdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRhdGFMb2NhdGlvbjogU3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBsYW5ndWFnZTogU3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBlbnZpcm9ubWVudDogT2JqZWN0O1xyXG5cclxuICBASW5wdXQoKSBpc0lmcmFtZUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG9wZW5Nb2RhbE9uSWZyYW1lTG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBsYXp5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNhZmVVcmw6IGFueTtcclxuXHJcbiAgaWZyYW1lID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc2FuaXRpemVyOkRvbVNhbml0aXplcikge31cclxuXHJcbiAgaG9sZGVyOiBhbnk7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51dWlkID0gdGhpcy5nZW5lcmF0ZVV1aWQoKTtcclxuICAgIGxldCBkb21haW4gPSB0aGlzLmN1c3RvbURvbWFpbiA/IHRoaXMuY3VzdG9tRG9tYWluIDogXCJhcHAuY3N2Ym94LmlvXCI7XHJcbiAgICBpZih0aGlzLmRhdGFMb2NhdGlvbikgeyBkb21haW4gPSBgJHt0aGlzLmRhdGFMb2NhdGlvbn0tJHtkb21haW59YDsgfVxyXG4gICAgbGV0IGlmcmFtZVVybCA9IGBodHRwczovLyR7ZG9tYWlufS9lbWJlZC8ke3RoaXMubGljZW5zZUtleX1gO1xyXG4gICAgaWZyYW1lVXJsICs9IGA/bGlicmFyeS12ZXJzaW9uPSR7IGFwcFZlcnNpb24gfWA7XHJcbiAgICBpZnJhbWVVcmwgKz0gXCImZnJhbWV3b3JrPWFuZ3VsYXJcIjtcclxuICAgIGlmKHRoaXMuZGF0YUxvY2F0aW9uKSB7XHJcbiAgICAgIGlmcmFtZVVybCArPSBcIiZwcmV2ZW50UmVkaXJlY3RcIjtcclxuICAgIH1cclxuICAgIGlmKHRoaXMubGFuZ3VhZ2Upe1xyXG4gICAgICBpZnJhbWVVcmwgKz0gXCImbGFuZ3VhZ2VcIiArIHRoaXMubGFuZ3VhZ2U7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmVudmlyb25tZW50KSB7XHJcbiAgICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZW52aXJvbm1lbnQpLnJlcGxhY2UoL1snXCJdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XHJcbiAgICAgICAgICByZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZnJhbWVVcmwgKz0gYCZlbnY9JHtlbnZpcm9ubWVudH1gO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zYWZlVXJsID0gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LlJFU09VUkNFX1VSTCwgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGlmcmFtZVVybCkpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVVdWlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KSArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZihjaGFuZ2VzW1widXNlclwiXSAmJiBjaGFuZ2VzWyd1c2VyJ10uY3VycmVudFZhbHVlICE9IGNoYW5nZXNbJ3VzZXInXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVXNlclZhcmlhYmUoY2hhbmdlc1sndXNlciddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2VyVmFyaWFiZShkYXRhKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXIgPSBkYXRhO1xyXG4gICAgaWYgKHRoaXMuaWZyYW1lICYmIHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgXCJjdXN0b21lclwiIDogZGF0YVxyXG4gICAgICB9LCBcIipcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmKGV2ZW50ICYmIHR5cGVvZiBldmVudC5kYXRhID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZihldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZGF0YSAmJiBldmVudC5kYXRhLmRhdGEudW5pcXVlX3Rva2VuID09IHRoaXMudXVpZCkge1xyXG4gICAgICAgICAgaWYoZXZlbnQuZGF0YS50eXBlICYmIGV2ZW50LmRhdGEudHlwZSA9PSBcImRhdGEtb24tc3VibWl0XCIpIHtcclxuICAgICAgICAgICAgbGV0IG1ldGFkYXRhID0gZXZlbnQuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICBtZXRhZGF0YVtcImNvbHVtbl9tYXBwaW5nc1wiXSA9IGV2ZW50LmRhdGEuY29sdW1uX21hcHBpbmc7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRhZGF0YVtcInVuaXF1ZV90b2tlblwiXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25TdWJtaXQpIHRoaXMub25TdWJtaXQobWV0YWRhdGEpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1N1Ym1pdHRlZCkgdGhpcy5pc1N1Ym1pdHRlZChtZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1pdHRlZCkgdGhpcy5zdWJtaXR0ZWQobWV0YWRhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmKGV2ZW50LmRhdGEudHlwZSAmJiBldmVudC5kYXRhLnR5cGUgPT0gXCJkYXRhLXB1c2gtc3RhdHVzXCIpIHtcclxuICAgICAgICAgICAgaWYoZXZlbnQuZGF0YS5kYXRhLmltcG9ydF9zdGF0dXMgPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmKGV2ZW50LmRhdGEucm93X2RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJpbWFyeV9yb3dfZGF0YSA9IGV2ZW50LmRhdGEucm93X2RhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBldmVudC5kYXRhLmhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvd3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZHluYW1pY19jb2x1bW5zX2luZGV4ZXMgPSBldmVudC5kYXRhLmR5bmFtaWNDb2x1bW5zSW5kZXhlcztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmlydHVhbF9jb2x1bW5zX2luZGV4ZXMgPSBldmVudC5kYXRhLnZpcnR1YWxDb2x1bW5zSW5kZXhlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9yb3dfZGF0YS5mb3JFYWNoKChyb3dfZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHggPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBkeW5hbWljX2NvbHVtbnMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCB2aXJ0dWFsX2RhdGEgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICByb3dfZGF0YS5kYXRhICYmIHJvd19kYXRhLmRhdGEuZm9yRWFjaCgoY29sLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29sID09IHVuZGVmaW5lZCl7IGNvbCA9IFwiXCJ9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkeW5hbWljX2NvbHVtbnNfaW5kZXhlcy5pbmNsdWRlcyhpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljX2NvbHVtbnNbaGVhZGVyc1tpXV0gPSBjb2w7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodmlydHVhbF9jb2x1bW5zX2luZGV4ZXMuaW5jbHVkZXMoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxfZGF0YVtoZWFkZXJzW2ldXSA9IGNvbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2hlYWRlcnNbaV1dID0gY29sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYocm93X2RhdGEgJiYgcm93X2RhdGEudW5tYXBwZWRfZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4W1wiX3VubWFwcGVkX2RhdGFcIl0gPSByb3dfZGF0YS51bm1hcHBlZF9kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYoZHluYW1pY19jb2x1bW5zICYmIE9iamVjdC5rZXlzKGR5bmFtaWNfY29sdW1ucykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4W1wiX2R5bmFtaWNfZGF0YVwiXSA9IGR5bmFtaWNfY29sdW1ucztcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmKHZpcnR1YWxfZGF0YSAmJiBPYmplY3Qua2V5cyh2aXJ0dWFsX2RhdGEpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFtcIl92aXJ0dWFsX2RhdGFcIl0gPSB2aXJ0dWFsX2RhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1ldGFkYXRhID0gZXZlbnQuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhW1wicm93c1wiXSA9IHJvd3M7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFbXCJjb2x1bW5fbWFwcGluZ3NcIl0gPSBldmVudC5kYXRhLmNvbHVtbl9tYXBwaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhW1wicmF3X2NvbHVtbnNcIl0gPSBldmVudC5kYXRhLnJhd19jb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhW1wiaWdub3JlZF9jb2x1bW5zXCJdID0gZXZlbnQuZGF0YS5pZ25vcmVkX2NvbHVtbl9yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1ldGFkYXRhW1widW5pcXVlX3Rva2VuXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uSW1wb3J0KSB0aGlzLm9uSW1wb3J0KHRydWUsIG1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ltcG9ydGVkKSB0aGlzLmlzSW1wb3J0ZWQodHJ1ZSwgbWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltcG9ydGVkKSB0aGlzLmltcG9ydGVkKHRydWUsIG1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXRhZGF0YSA9IGV2ZW50LmRhdGEuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbWV0YWRhdGFbXCJ1bmlxdWVfdG9rZW5cIl07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25JbXBvcnQpIHRoaXMub25JbXBvcnQodHJ1ZSwgbWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW1wb3J0ZWQpIHRoaXMuaXNJbXBvcnRlZCh0cnVlLCBtZXRhZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1wb3J0ZWQpIHRoaXMuaW1wb3J0ZWQodHJ1ZSwgbWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWV0YWRhdGEgPSBldmVudC5kYXRhLmRhdGE7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgbWV0YWRhdGFbXCJ1bmlxdWVfdG9rZW5cIl07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkltcG9ydCkgdGhpcy5vbkltcG9ydChmYWxzZSwgbWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbXBvcnRlZCkgdGhpcy5pc0ltcG9ydGVkKGZhbHNlLCBtZXRhZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbXBvcnRlZCkgdGhpcy5pbXBvcnRlZChmYWxzZSwgbWV0YWRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYoZXZlbnQuZGF0YS50eXBlICYmIGV2ZW50LmRhdGEudHlwZSA9PSBcImNzdmJveC1tb2RhbC1oaWRkZW5cIikge1xyXG4gICAgICAgICAgICBpZih0aGlzLmhvbGRlcikgdGhpcy5ob2xkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5pc01vZGFsU2hvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25DbG9zZSkgdGhpcy5vbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xvc2VkKSB0aGlzLmlzQ2xvc2VkKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkgdGhpcy5jbG9zZWQoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZihldmVudC5kYXRhLnR5cGUgJiYgZXZlbnQuZGF0YS50eXBlID09IFwiY3N2Ym94LXVwbG9hZC1zdWNjZXNzZnVsXCIpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5vbkltcG9ydCkgdGhpcy5vbkltcG9ydCh0cnVlKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pc0ltcG9ydGVkKSB0aGlzLmlzSW1wb3J0ZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW1wb3J0ZWQpIHRoaXMuaW1wb3J0ZWQodHJ1ZSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYoZXZlbnQuZGF0YS50eXBlICYmIGV2ZW50LmRhdGEudHlwZSA9PSBcImNzdmJveC11cGxvYWQtZmFpbGVkXCIpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5vbkltcG9ydCkgdGhpcy5vbkltcG9ydChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbXBvcnRlZCkgdGhpcy5pc0ltcG9ydGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbXBvcnRlZCkgdGhpcy5pbXBvcnRlZChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSk7XHJcblxyXG4gICAgaWYodGhpcy5sYXp5KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmluaXRJbXBvcnRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEltcG9ydGVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9hZFN0YXJ0ZWQpIHRoaXMubG9hZFN0YXJ0ZWQoKTtcclxuXHJcbiAgICBpbnNlcnRDU1MoKTtcclxuXHJcbiAgICBsZXQgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgIHRoaXMuaWZyYW1lID0gaWZyYW1lO1xyXG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCB0aGlzLnNhZmVVcmwpO1xyXG4gICAgaWZyYW1lLmZyYW1lQm9yZGVyID0gXCIwXCI7XHJcblxyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKHNlbGYub25SZWFkeSkgc2VsZi5vblJlYWR5KCk7XHJcbiAgICAgIGlmIChzZWxmLmlzUmVhZHkpIHNlbGYuaXNSZWFkeSgpO1xyXG4gICAgICBpZiAoc2VsZi5pbXBvcnRlclJlYWR5KSBzZWxmLmltcG9ydGVyUmVhZHkoKTtcclxuXHJcbiAgICAgIHNlbGYuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgc2VsZi5pc0lmcmFtZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIGlmIChzZWxmLmlmcmFtZSAmJiBzZWxmLmlmcmFtZS5jb250ZW50V2luZG93KSB7XHJcbiAgICAgICAgc2VsZi5pZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICBcImN1c3RvbWVyXCIgOiBzZWxmLnVzZXIgPyBzZWxmLnVzZXIgOiBudWxsLFxyXG4gICAgICAgICAgXCJjb2x1bW5zXCIgOiBzZWxmLmR5bmFtaWNDb2x1bW5zID8gc2VsZi5keW5hbWljQ29sdW1ucyA6IG51bGwsXHJcbiAgICAgICAgICBcIm9wdGlvbnNcIiA6IHNlbGYub3B0aW9ucyA/IHNlbGYub3B0aW9ucyA6IG51bGwsXHJcbiAgICAgICAgICBcInVuaXF1ZV90b2tlblwiOiBzZWxmLnV1aWRcclxuICAgICAgICB9LCBcIipcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYoc2VsZi5vcGVuTW9kYWxPbklmcmFtZUxvYWQpIHtcclxuICAgICAgICBzZWxmLm9wZW5Nb2RhbCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMuaG9sZGVyLmNsYXNzTGlzdC5hZGQoJ2NzdmJveC1ob2xkZXInKTtcclxuICAgIHRoaXMuaG9sZGVyLnNldEF0dHJpYnV0ZSgnaWQnLCBgY3N2Ym94LWVtYmVkLSR7dGhpcy51dWlkfWApO1xyXG4gICAgdGhpcy5ob2xkZXIuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChcclxuICAgICAgJ2JlZm9yZWVuZCcsIHRoaXMuaG9sZGVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5sYXp5KSB7XHJcbiAgICAgIGlmKCF0aGlzLmlmcmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5vcGVuTW9kYWxPbklmcmFtZUxvYWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pbml0SW1wb3J0ZXIoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuaXNNb2RhbFNob3duKSB7XHJcbiAgICAgIGlmKHRoaXMuaXNJZnJhbWVMb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNNb2RhbFNob3duID0gdHJ1ZTtcclxuICAgICAgICAgIGlmKHRoaXMuaG9sZGVyKSB0aGlzLmhvbGRlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgIGlmKHRoaXMuaWZyYW1lICYmIHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5pZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgnb3Blbk1vZGFsJywgJyonKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub3Blbk1vZGFsT25JZnJhbWVMb2FkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19