UNPKG

@intzi1992/cdk-table-exporter

Version:
160 lines 20.9 kB
import { Directive, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./services/service-locator.service"; import * as i2 from "./services/data-extractor.service"; /** * Exporter class for CdkTable. Abstracts the varying behaviors among different CdkTable implementations. */ export class CdkTableExporter { constructor(serviceLocator, dataExtractor, _cdkTable) { this.serviceLocator = serviceLocator; this.dataExtractor = dataExtractor; this._cdkTable = _cdkTable; this.exportCompleted = new EventEmitter(); this.exportStarted = new EventEmitter(); } /** * Triggers page event chain thus extracting and exporting all the rows in nativetables in pages */ exportTable(exportType, options) { this.loadExporter(exportType); this._options = options; this.exportStarted.emit(); this._isIterating = true; this._isExporting = true; this._data = new Array(); this.extractTableHeader(); try { this.exportWithPagination(); } catch (notPaginated) { this.exportSinglePage(); } } toggleRow(index) { const paginatedRowIndex = this.getPaginatedRowIndex(index); if (this.isToggleOn(paginatedRowIndex)) { this.toggleOff(paginatedRowIndex); } else { this.toggleOn(paginatedRowIndex); } } /** * This event will clear rows selection done using toggleRow functionality */ resetToggleRows() { this._selectedRows = []; } toggleOn(index) { this._selectedRows = [...(this._selectedRows || []), index]; } toggleOff(index) { this._selectedRows = this._selectedRows.filter(x => x !== index); } isToggleOn(index) { return this._selectedRows?.includes(index); } loadExporter(exportType) { this._exporterService = this.serviceLocator.getService(exportType, this.exporter); } exportWithPagination() { this._initialPageIndex = this.getCurrentPageIndex(); this.initPageHandler(); this.goToPage(0); } exportSinglePage() { this.extractDataOnCurrentPage(); this.extractTableFooter(); this.exportExtractedData(); } extractDataOnCurrentPage() { const rows = this.dataExtractor.extractRows(this._cdkTable, this.hiddenColumns); this._data = this._data.concat(this.getSelectedRows(rows)); } getSelectedRows(rows) { if (this.isSelectiveExport()) { return rows.filter((_, i) => this._selectedRows.includes(this.getPaginatedRowIndex(i))); } else { return rows; } } isSelectiveExport() { return this._selectedRows && !this.isMasterToggleOff() && !this.isMasterToggleOn(); } isMasterToggleOn() { return this.compareSelectedRowCount(this.getTotalItemsCount()); } isMasterToggleOff() { return this.compareSelectedRowCount(0); } compareSelectedRowCount(rowCount) { return !!(this._selectedRows.length === rowCount); } initPageHandler() { if (!this._subscription) { this._subscription = this.getPageChangeObservable()?.subscribe(() => { setTimeout(() => { if (this._isIterating) { this.extractDataOnCurrentPage(); if (this.hasNextPage()) { this.nextPage(); } else { this._isIterating = false; this.goToPage(this._initialPageIndex); } } else if (this._isExporting) { this._isExporting = false; this.extractTableFooter(); this.exportExtractedData(); } }); }); } } exportExtractedData() { this._exporterService.export(this._data, this._options); this._data = new Array(); this.exportCompleted.emit(); } extractSpecialRows(outlet) { this._data.push(...this.dataExtractor.extractRows(this._cdkTable, this.hiddenColumns, outlet)); } extractTableHeader() { this.extractSpecialRows(this._cdkTable._headerRowOutlet); } extractTableFooter() { this.extractSpecialRows(this._cdkTable._footerRowOutlet); } hasNextPage() { if (this.getCurrentPageIndex() < this.getPageCount() - 1) { return true; } else { return false; } } nextPage() { this.goToPage(this.getCurrentPageIndex() + 1); } getPaginatedRowIndex(index) { return index + (this.getPageSize() * this.getCurrentPageIndex()); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CdkTableExporter, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: CdkTableExporter, inputs: { hiddenColumns: "hiddenColumns", exporter: "exporter" }, outputs: { exportCompleted: "exportCompleted", exportStarted: "exportStarted" }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CdkTableExporter, decorators: [{ type: Directive }], ctorParameters: () => [{ type: i1.ServiceLocatorService }, { type: i2.DataExtractorService }, { type: undefined }], propDecorators: { hiddenColumns: [{ type: Input }], exporter: [{ type: Input }], exportCompleted: [{ type: Output }], exportStarted: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRhYmxlLWV4cG9ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrLXRhYmxlLWV4cG9ydGVyL3NyYy9saWIvY2RrLXRhYmxlLWV4cG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRdkU7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLGdCQUFnQjtJQTBCcEMsWUFDVSxjQUFxQyxFQUNyQyxhQUFtQyxFQUNqQyxTQUFjO1FBRmhCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBSztRQXZCaEIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzNDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQXVCaEQsQ0FBQztJQWlDSjs7T0FFRztJQUNILFdBQVcsQ0FBQyxVQUEyRSxFQUFFLE9BQTZDO1FBQ3BJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUFDLE9BQU8sWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNyQixNQUFNLGlCQUFpQixHQUFXLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLFlBQVksQ0FBQyxVQUFlO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQWdCO1FBQ3RDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFGLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3RGLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxRQUFnQjtRQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNsRSxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNsQixDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7NEJBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7d0JBQ3hDLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO3dCQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDN0IsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBcUI7UUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWE7UUFDeEMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDOytHQWhObUIsZ0JBQWdCO21HQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBRHJDLFNBQVM7a0pBS0MsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFSb3dPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXhwb3J0VHlwZSB9IGZyb20gJy4vZXhwb3J0LXR5cGUnO1xuaW1wb3J0IHsgRXhjZWxPcHRpb25zLCBPcHRpb25zLCBUeHRPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IERhdGFFeHRyYWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kYXRhLWV4dHJhY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy9leHBvcnRlcnMvZXhwb3J0ZXInO1xuaW1wb3J0IHsgU2VydmljZUxvY2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZXJ2aWNlLWxvY2F0b3Iuc2VydmljZSc7XG5cbi8qKlxuICogRXhwb3J0ZXIgY2xhc3MgZm9yIENka1RhYmxlLiBBYnN0cmFjdHMgdGhlIHZhcnlpbmcgYmVoYXZpb3JzIGFtb25nIGRpZmZlcmVudCBDZGtUYWJsZSBpbXBsZW1lbnRhdGlvbnMuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENka1RhYmxlRXhwb3J0ZXIge1xuXG4gIHByaXZhdGUgX2V4cG9ydGVyU2VydmljZTogRXhwb3J0ZXI8T3B0aW9ucz47XG5cbiAgQElucHV0KCkgaGlkZGVuQ29sdW1ucz86IEFycmF5PG51bWJlcj47XG4gIEBJbnB1dCgpIGV4cG9ydGVyPzogRXhwb3J0ZXI8T3B0aW9ucz47XG4gIEBPdXRwdXQoKSBleHBvcnRDb21wbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnRTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBEYXRhIGFycmF5IHdoaWNoIGlzIGV4dHJhY3RlZCBmcm9tIG5hdGl2ZVRhYmxlXG4gICAqL1xuICBwcml2YXRlIF9kYXRhOiBBcnJheTxhbnk+O1xuXG4gIHByaXZhdGUgX2lzSXRlcmF0aW5nOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2luaXRpYWxQYWdlSW5kZXg6IG51bWJlcjtcblxuICBwcml2YXRlIF9pc0V4cG9ydGluZzogYm9vbGVhbjtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9vcHRpb25zPzogT3B0aW9ucztcblxuICBwcml2YXRlIF9zZWxlY3RlZFJvd3M6IEFycmF5PG51bWJlcj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlTG9jYXRvcjogU2VydmljZUxvY2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YUV4dHJhY3RvcjogRGF0YUV4dHJhY3RvclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIF9jZGtUYWJsZTogYW55XG4gICkge31cblxuICAvKipcbiAgICogTXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBvZiB0aGUgdGFibGVcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRQYWdlQ291bnQoKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgb24gYSBwYWdlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0UGFnZVNpemUoKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNdXN0IHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgcGFnZSB0aGF0J3MgZGlzcGxheWVkXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0Q3VycmVudFBhZ2VJbmRleCgpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE11c3QgcmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRhYmxlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VG90YWxJdGVtc0NvdW50KCk6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hlbiBjYWxsZWQsIHRoZSBDZGtUYWJsZSBzaG91bGQgcmVuZGVyIHRoZSByb3dzIGluc2lkZSB0aGUgcGFnZSB3aG9zZSBpbmRleCBnaXZlbiBhcyBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGluZGV4IHBhZ2UgaW5kZXhcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnb1RvUGFnZShpbmRleDogbnVtYmVyKTogdm9pZDtcblxuICAvKipcbiAgICogTXVzdCByZXR1cm4gYW4gb2JzZXJ2YWJsZSB0aGF0IG5vdGlmaWVzIHRoZSBzdWJzY3JpYmVycyBhYm91dCBwYWdlIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRQYWdlQ2hhbmdlT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHBhZ2UgZXZlbnQgY2hhaW4gdGh1cyBleHRyYWN0aW5nIGFuZCBleHBvcnRpbmcgYWxsIHRoZSByb3dzIGluIG5hdGl2ZXRhYmxlcyBpbiBwYWdlc1xuICAgKi9cbiAgZXhwb3J0VGFibGUoZXhwb3J0VHlwZT86IEV4cG9ydFR5cGUgfCAneGxzJyB8ICd4bHN4JyB8ICdjc3YnIHwgJ3R4dCcgfCAnanNvbicgfCAnb3RoZXInLCBvcHRpb25zPzogT3B0aW9ucyB8IEV4Y2VsT3B0aW9ucyB8IFR4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmxvYWRFeHBvcnRlcihleHBvcnRUeXBlKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmV4cG9ydFN0YXJ0ZWQuZW1pdCgpO1xuICAgIHRoaXMuX2lzSXRlcmF0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9pc0V4cG9ydGluZyA9IHRydWU7XG4gICAgdGhpcy5fZGF0YSA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgdGhpcy5leHRyYWN0VGFibGVIZWFkZXIoKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5leHBvcnRXaXRoUGFnaW5hdGlvbigpO1xuICAgIH0gY2F0Y2ggKG5vdFBhZ2luYXRlZCkge1xuICAgICAgdGhpcy5leHBvcnRTaW5nbGVQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdpbmF0ZWRSb3dJbmRleDogbnVtYmVyID0gdGhpcy5nZXRQYWdpbmF0ZWRSb3dJbmRleChpbmRleCk7XG4gICAgaWYgKHRoaXMuaXNUb2dnbGVPbihwYWdpbmF0ZWRSb3dJbmRleCkpIHtcbiAgICAgIHRoaXMudG9nZ2xlT2ZmKHBhZ2luYXRlZFJvd0luZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2dnbGVPbihwYWdpbmF0ZWRSb3dJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgd2lsbCBjbGVhciByb3dzIHNlbGVjdGlvbiBkb25lIHVzaW5nIHRvZ2dsZVJvdyBmdW5jdGlvbmFsaXR5XG4gICAqL1xuICByZXNldFRvZ2dsZVJvd3MoKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZU9uKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbLi4uKHRoaXMuX3NlbGVjdGVkUm93cyB8fCBbXSksIGluZGV4XTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlT2ZmKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSAgdGhpcy5fc2VsZWN0ZWRSb3dzLmZpbHRlcih4ID0+IHggIT09IGluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUb2dnbGVPbihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93cz8uaW5jbHVkZXMoaW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRXhwb3J0ZXIoZXhwb3J0VHlwZTogYW55KSB7XG4gICAgdGhpcy5fZXhwb3J0ZXJTZXJ2aWNlID0gdGhpcy5zZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKGV4cG9ydFR5cGUsIHRoaXMuZXhwb3J0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRXaXRoUGFnaW5hdGlvbigpIHtcbiAgICB0aGlzLl9pbml0aWFsUGFnZUluZGV4ID0gdGhpcy5nZXRDdXJyZW50UGFnZUluZGV4KCk7XG4gICAgdGhpcy5pbml0UGFnZUhhbmRsZXIoKTtcbiAgICB0aGlzLmdvVG9QYWdlKDApO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRTaW5nbGVQYWdlKCkge1xuICAgIHRoaXMuZXh0cmFjdERhdGFPbkN1cnJlbnRQYWdlKCk7XG4gICAgdGhpcy5leHRyYWN0VGFibGVGb290ZXIoKTtcbiAgICB0aGlzLmV4cG9ydEV4dHJhY3RlZERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERhdGFPbkN1cnJlbnRQYWdlKCkge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGFFeHRyYWN0b3IuZXh0cmFjdFJvd3ModGhpcy5fY2RrVGFibGUsIHRoaXMuaGlkZGVuQ29sdW1ucyk7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEuY29uY2F0KHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKHJvd3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzKHJvd3M6IEFycmF5PGFueT4pIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGl2ZUV4cG9ydCgpKSB7XG4gICAgICByZXR1cm4gcm93cy5maWx0ZXIoKF8sIGkpID0+IHRoaXMuX3NlbGVjdGVkUm93cy5pbmNsdWRlcyh0aGlzLmdldFBhZ2luYXRlZFJvd0luZGV4KGkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNTZWxlY3RpdmVFeHBvcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93cyAmJiAhdGhpcy5pc01hc3RlclRvZ2dsZU9mZigpICYmICAhdGhpcy5pc01hc3RlclRvZ2dsZU9uKCk7XG4gIH1cblxuICBwcml2YXRlIGlzTWFzdGVyVG9nZ2xlT24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZVNlbGVjdGVkUm93Q291bnQodGhpcy5nZXRUb3RhbEl0ZW1zQ291bnQoKSk7XG4gIH1cblxuICBwcml2YXRlIGlzTWFzdGVyVG9nZ2xlT2ZmKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmVTZWxlY3RlZFJvd0NvdW50KDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0ZWRSb3dDb3VudChyb3dDb3VudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuX3NlbGVjdGVkUm93cy5sZW5ndGggPT09IHJvd0NvdW50KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFBhZ2VIYW5kbGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLmdldFBhZ2VDaGFuZ2VPYnNlcnZhYmxlKCk/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9pc0l0ZXJhdGluZykge1xuICAgICAgICAgICAgdGhpcy5leHRyYWN0RGF0YU9uQ3VycmVudFBhZ2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc05leHRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5faXNJdGVyYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLl9pbml0aWFsUGFnZUluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzRXhwb3J0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0V4cG9ydGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5leHRyYWN0VGFibGVGb290ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0RXh0cmFjdGVkRGF0YSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4cG9ydEV4dHJhY3RlZERhdGEoKSB7XG4gICAgdGhpcy5fZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLl9kYXRhLCB0aGlzLl9vcHRpb25zKTtcbiAgICB0aGlzLl9kYXRhID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICB0aGlzLmV4cG9ydENvbXBsZXRlZC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RTcGVjaWFsUm93cyhvdXRsZXQ6IERhdGFSb3dPdXRsZXQpIHtcbiAgICB0aGlzLl9kYXRhLnB1c2goLi4udGhpcy5kYXRhRXh0cmFjdG9yLmV4dHJhY3RSb3dzKHRoaXMuX2Nka1RhYmxlLCB0aGlzLmhpZGRlbkNvbHVtbnMsIG91dGxldCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VGFibGVIZWFkZXIoKSB7XG4gICAgdGhpcy5leHRyYWN0U3BlY2lhbFJvd3ModGhpcy5fY2RrVGFibGUuX2hlYWRlclJvd091dGxldCk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RUYWJsZUZvb3RlcigpIHtcbiAgICB0aGlzLmV4dHJhY3RTcGVjaWFsUm93cyh0aGlzLl9jZGtUYWJsZS5fZm9vdGVyUm93T3V0bGV0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzTmV4dFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZ2V0Q3VycmVudFBhZ2VJbmRleCgpIDwgdGhpcy5nZXRQYWdlQ291bnQoKSAtIDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmdvVG9QYWdlKHRoaXMuZ2V0Q3VycmVudFBhZ2VJbmRleCgpICsgMSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhZ2luYXRlZFJvd0luZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleCArICh0aGlzLmdldFBhZ2VTaXplKCkgKiB0aGlzLmdldEN1cnJlbnRQYWdlSW5kZXgoKSk7XG4gIH1cbn1cbiJdfQ==