UNPKG

ontimize-web-ngx

Version:
178 lines 22.5 kB
import { Directive, EventEmitter, Output } from '@angular/core'; import { MatSort } from '@angular/material/sort'; import { Codes } from '../../../../util/codes'; import { Util } from '../../../../util/util'; import * as i0 from "@angular/core"; export class OMatSort extends MatSort { constructor() { super(...arguments); this.activeArray = []; this.directionById = {}; this.oSortChange = new EventEmitter(); } set oMatSortColumns(value) { this.restart(); this.setTableInfo(value); } setMultipleSort(val) { this.multipleSort = val; } getSortColumns() { const activeData = []; this.activeArray.forEach((s) => { activeData.push({ id: s.id, direction: this.directionById[s.id] }); }); return activeData; } setSortColumns(sortColArray) { this.restart(); this.setTableInfo(sortColArray); } restart() { this.activeArray = []; this.directionById = {}; } setTableInfo(sortColArray) { sortColArray.forEach((colData) => { const sortDirection = colData.ascendent ? Codes.ASC_SORT : Codes.DESC_SORT; this.activeArray.push({ id: colData.columnName, start: sortDirection, disableClear: false }); this.directionById[colData.columnName] = sortDirection; }); } addSortColumn(sortable) { if (this.isActive(sortable)) { this.direction = this.directionById[sortable.id]; this.directionById[sortable.id] = this.getNextSortDirection(sortable); this.direction = ''; if (this.directionById[sortable.id] === '') { this.deleteSortColumn(sortable.id); } } else { if (!this.multipleSort) { this.activeArray = []; this.directionById = {}; } this.activeArray.push(sortable); this.directionById[sortable.id] = sortable.start ? sortable.start : this.start; } const activeData = this.getSortColumns(); this._stateChanges.next(); this.oSortChange.emit(activeData); } deleteSortColumn(id) { delete this.directionById[id]; const index = this.activeArray.findIndex(element => element.id === id); if (index > -1) { this.activeArray.splice(index, 1); } } isActive(sortable) { return Util.isDefined(this.activeArray.find((s) => sortable.id === s.id)); } hasDirection(id) { let direction; if (Util.isDefined(this.directionById[id])) { direction = this.directionById[id]; } return (direction === 'asc' || direction === 'desc'); } getSortedDataBySQLOrder(data, sqlOrderArray) { this.setSortColumns(sqlOrderArray); return this.getSortedData(data); } getSortedData(data) { const sortColumns = this.getSortColumns(); if (sortColumns.length === 0 || data.length === 0) { return data; } this.sortables.forEach((value, key) => { this.deregister(value); }); return this.sortByColumns(data, sortColumns); } sortByColumns(data, sortColumns) { const sortFunctionBind = this.sortFunction.bind(this); for (let i = 0, len = sortColumns.length; i < len; i++) { const sortC = sortColumns[i]; this.activeSortColumn = sortC.id; this.activeSortDirection = sortC.direction; if (i === 0) { data = data.sort(sortFunctionBind); } else { const groupedData = this.getDataGrouped(data, sortColumns, i); if (groupedData.length >= data.length) { break; } data = this.sortGroupedData(groupedData); } } return data; } getDataGrouped(data, sortColumns, index) { const propArr = []; sortColumns.forEach((item, i) => { if (i < index) { propArr.push(item.id); } }); if (propArr.length === 0) { return data; } const result = []; data.forEach(item => { let value = ''; propArr.forEach(prop => { value += item[prop]; }); const filtered = result.filter(resItem => resItem.key === value); if (filtered.length === 0) { result.push({ key: value, values: [item] }); } else if (filtered.length === 1) { filtered[0].values.push(item); } }); return result; } sortGroupedData(groupedData) { const self = this; return groupedData.reduce((obj, item) => { const arr = item.values; const sorted = arr.length <= 1 ? arr : arr.sort(self.sortFunction.bind(self)); obj.push(...sorted); return obj; }, []); } sortFunction(a, b) { let propertyA = ''; let propertyB = ''; [propertyA, propertyB] = [a[this.activeSortColumn], b[this.activeSortColumn]]; return Util.sortFunction(propertyA, propertyB, this.activeSortDirection); } } OMatSort.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OMatSort, deps: null, target: i0.ɵɵFactoryTarget.Directive }); OMatSort.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: OMatSort, selector: "[oMatSort]", inputs: { disabled: ["oMatSortDisabled", "disabled"], oMatSortColumns: "oMatSortColumns" }, outputs: { oSortChange: "matSortChange" }, exportAs: ["oMatSort"], usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OMatSort, decorators: [{ type: Directive, args: [{ selector: '[oMatSort]', exportAs: 'oMatSort', inputs: ['disabled: oMatSortDisabled', 'oMatSortColumns'] }] }], propDecorators: { oSortChange: [{ type: Output, args: ['matSortChange'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1tYXQtc29ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvc29ydC9vLW1hdC1zb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFlLE1BQU0sd0JBQXdCLENBQUM7QUFHOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFZN0MsTUFBTSxPQUFPLFFBQVMsU0FBUSxPQUFPO0lBTHJDOztRQU9FLGdCQUFXLEdBQXVCLEVBQUUsQ0FBQztRQUNyQyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQU9mLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7S0F5S25FO0lBdktDLElBQUksZUFBZSxDQUFDLEtBQWlCO1FBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFZO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBYyxFQUFFLEVBQUU7WUFDMUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1IsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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LEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDcEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQU0sRUFBRSxDQUFNO1FBQ3pCLElBQUksU0FBUyxHQUFvQixFQUFFLENBQUM7UUFDcEMsSUFBSSxTQUFTLEdBQW9CLEVBQUUsQ0FBQztRQUNwQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzRSxDQUFDOztzR0FqTFUsUUFBUTswRkFBUixRQUFROzRGQUFSLFFBQVE7a0JBTHBCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixNQUFNLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxpQkFBaUIsQ0FBQztpQkFDMUQ7OEJBV1UsV0FBVztzQkFEbkIsTUFBTTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5cbmV4cG9ydCB0eXBlIE9NYXRTb3J0R3JvdXBlZERhdGEgPSB7XG4gIGtleTogYW55O1xuICB2YWx1ZXM6IGFueVtdO1xufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW29NYXRTb3J0XScsXG4gIGV4cG9ydEFzOiAnb01hdFNvcnQnLFxuICBpbnB1dHM6IFsnZGlzYWJsZWQ6IG9NYXRTb3J0RGlzYWJsZWQnLCAnb01hdFNvcnRDb2x1bW5zJ11cbn0pXG5leHBvcnQgY2xhc3MgT01hdFNvcnQgZXh0ZW5kcyBNYXRTb3J0IHtcblxuICBhY3RpdmVBcnJheTogQXJyYXk8TWF0U29ydGFibGU+ID0gW107XG4gIGRpcmVjdGlvbkJ5SWQ6IGFueSA9IHt9O1xuXG4gIHByb3RlY3RlZCBtdWx0aXBsZVNvcnQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBhY3RpdmVTb3J0Q29sdW1uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhY3RpdmVTb3J0RGlyZWN0aW9uOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgnbWF0U29ydENoYW5nZScpXG4gIHJlYWRvbmx5IG9Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHNldCBvTWF0U29ydENvbHVtbnModmFsdWU6IFNRTE9yZGVyW10pIHtcbiAgICB0aGlzLnJlc3RhcnQoKTtcbiAgICB0aGlzLnNldFRhYmxlSW5mbyh2YWx1ZSk7XG4gIH1cblxuICBzZXRNdWx0aXBsZVNvcnQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5tdWx0aXBsZVNvcnQgPSB2YWw7XG4gIH1cblxuICBnZXRTb3J0Q29sdW1ucygpOiBhbnlbXSB7XG4gICAgY29uc3QgYWN0aXZlRGF0YSA9IFtdO1xuICAgIHRoaXMuYWN0aXZlQXJyYXkuZm9yRWFjaCgoczogTWF0U29ydGFibGUpID0+IHtcbiAgICAgIGFjdGl2ZURhdGEucHVzaCh7XG4gICAgICAgIGlkOiBzLmlkLFxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uQnlJZFtzLmlkXVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZURhdGE7XG4gIH1cblxuICBzZXRTb3J0Q29sdW1ucyhzb3J0Q29sQXJyYXk6IFNRTE9yZGVyW10pIHtcbiAgICB0aGlzLnJlc3RhcnQoKTtcbiAgICB0aGlzLnNldFRhYmxlSW5mbyhzb3J0Q29sQXJyYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0YXJ0KCkge1xuICAgIHRoaXMuYWN0aXZlQXJyYXkgPSBbXTtcbiAgICB0aGlzLmRpcmVjdGlvbkJ5SWQgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUYWJsZUluZm8oc29ydENvbEFycmF5OiBBcnJheTxTUUxPcmRlcj4pIHtcblxuICAgIHNvcnRDb2xBcnJheS5mb3JFYWNoKChjb2xEYXRhOiBTUUxPcmRlcikgPT4ge1xuICAgICAgY29uc3Qgc29ydERpcmVjdGlvbjogYW55ID0gY29sRGF0YS5hc2NlbmRlbnQgPyBDb2Rlcy5BU0NfU09SVCA6IENvZGVzLkRFU0NfU09SVDtcbiAgICAgIHRoaXMuYWN0aXZlQXJyYXkucHVzaCh7XG4gICAgICAgIGlkOiBjb2xEYXRhLmNvbHVtbk5hbWUsXG4gICAgICAgIHN0YXJ0OiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICBkaXNhYmxlQ2xlYXI6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uQnlJZFtjb2xEYXRhLmNvbHVtbk5hbWVdID0gc29ydERpcmVjdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNvcnRDb2x1bW4oc29ydGFibGU6IE1hdFNvcnRhYmxlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUoc29ydGFibGUpKSB7XG4gICAgICAvLyB3b3JrYXJvdW5kIGZvciBoYXZpbmcgYSBwcm9wcGVyIHdvcmsgaW4gZ2V0TmV4dFNvcnREaXJlY3Rpb247XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uQnlJZFtzb3J0YWJsZS5pZF07XG4gICAgICB0aGlzLmRpcmVjdGlvbkJ5SWRbc29ydGFibGUuaWRdID0gdGhpcy5nZXROZXh0U29ydERpcmVjdGlvbihzb3J0YWJsZSk7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9ICcnO1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uQnlJZFtzb3J0YWJsZS5pZF0gPT09ICcnKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlU29ydENvbHVtbihzb3J0YWJsZS5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZVNvcnQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVBcnJheSA9IFtdO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkJ5SWQgPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlQXJyYXkucHVzaChzb3J0YWJsZSk7XG4gICAgICB0aGlzLmRpcmVjdGlvbkJ5SWRbc29ydGFibGUuaWRdID0gc29ydGFibGUuc3RhcnQgPyBzb3J0YWJsZS5zdGFydCA6IHRoaXMuc3RhcnQ7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZURhdGEgPSB0aGlzLmdldFNvcnRDb2x1bW5zKCk7XG4gICAgdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB0aGlzLm9Tb3J0Q2hhbmdlLmVtaXQoYWN0aXZlRGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlU29ydENvbHVtbihpZDogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMuZGlyZWN0aW9uQnlJZFtpZF07XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmFjdGl2ZUFycmF5LmZpbmRJbmRleChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IGlkKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5hY3RpdmVBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGlzQWN0aXZlKHNvcnRhYmxlOiBNYXRTb3J0YWJsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLmFjdGl2ZUFycmF5LmZpbmQoKHM6IE1hdFNvcnRhYmxlKSA9PiBzb3J0YWJsZS5pZCA9PT0gcy5pZCkpO1xuICB9XG5cbiAgaGFzRGlyZWN0aW9uKGlkOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgZGlyZWN0aW9uO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRpcmVjdGlvbkJ5SWRbaWRdKSkge1xuICAgICAgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb25CeUlkW2lkXTtcbiAgICB9XG4gICAgcmV0dXJuIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKTtcbiAgfVxuXG4gIGdldFNvcnRlZERhdGFCeVNRTE9yZGVyKGRhdGE6IGFueVtdLCBzcWxPcmRlckFycmF5OiBTUUxPcmRlcltdKTogYW55W10ge1xuICAgIHRoaXMuc2V0U29ydENvbHVtbnMoc3FsT3JkZXJBcnJheSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U29ydGVkRGF0YShkYXRhKTtcbiAgfVxuXG4gIGdldFNvcnRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3Qgc29ydENvbHVtbnMgPSB0aGlzLmdldFNvcnRDb2x1bW5zKCk7XG4gICAgaWYgKHNvcnRDb2x1bW5zLmxlbmd0aCA9PT0gMCB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMuc29ydGFibGVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHRoaXMuZGVyZWdpc3Rlcih2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29ydEJ5Q29sdW1ucyhkYXRhLCBzb3J0Q29sdW1ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydEJ5Q29sdW1ucyhkYXRhOiBhbnlbXSwgc29ydENvbHVtbnM6IGFueVtdKSB7XG4gICAgY29uc3Qgc29ydEZ1bmN0aW9uQmluZCA9IHRoaXMuc29ydEZ1bmN0aW9uLmJpbmQodGhpcyk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNvcnRDb2x1bW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBzb3J0QyA9IHNvcnRDb2x1bW5zW2ldO1xuICAgICAgdGhpcy5hY3RpdmVTb3J0Q29sdW1uID0gc29ydEMuaWQ7XG4gICAgICB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24gPSBzb3J0Qy5kaXJlY3Rpb247XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBkYXRhID0gZGF0YS5zb3J0KHNvcnRGdW5jdGlvbkJpbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JvdXBlZERhdGE6IE9NYXRTb3J0R3JvdXBlZERhdGFbXSA9IHRoaXMuZ2V0RGF0YUdyb3VwZWQoZGF0YSwgc29ydENvbHVtbnMsIGkpO1xuICAgICAgICBpZiAoZ3JvdXBlZERhdGEubGVuZ3RoID49IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IHRoaXMuc29ydEdyb3VwZWREYXRhKGdyb3VwZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0YUdyb3VwZWQoZGF0YTogYW55LCBzb3J0Q29sdW1uczogYW55W10sIGluZGV4OiBudW1iZXIpOiBPTWF0U29ydEdyb3VwZWREYXRhW10ge1xuICAgIGNvbnN0IHByb3BBcnIgPSBbXTtcbiAgICBzb3J0Q29sdW1ucy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGluZGV4KSB7XG4gICAgICAgIHByb3BBcnIucHVzaChpdGVtLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocHJvcEFyci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IE9NYXRTb3J0R3JvdXBlZERhdGFbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgcHJvcEFyci5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICB2YWx1ZSArPSBpdGVtW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gcmVzdWx0LmZpbHRlcihyZXNJdGVtID0+IHJlc0l0ZW0ua2V5ID09PSB2YWx1ZSk7XG4gICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICBrZXk6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlczogW2l0ZW1dXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmlsdGVyZWRbMF0udmFsdWVzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0R3JvdXBlZERhdGEoZ3JvdXBlZERhdGE6IE9NYXRTb3J0R3JvdXBlZERhdGFbXSk6IGFueVtdIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gZ3JvdXBlZERhdGEucmVkdWNlKChvYmo6IGFueSwgaXRlbTogYW55KSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBpdGVtLnZhbHVlcztcbiAgICAgIGNvbnN0IHNvcnRlZCA9IGFyci5sZW5ndGggPD0gMSA/IGFyciA6IGFyci5zb3J0KHNlbGYuc29ydEZ1bmN0aW9uLmJpbmQoc2VsZikpO1xuICAgICAgb2JqLnB1c2goLi4uc29ydGVkKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgc29ydEZ1bmN0aW9uKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcbiAgICBsZXQgcHJvcGVydHlBOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcbiAgICBsZXQgcHJvcGVydHlCOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcbiAgICBbcHJvcGVydHlBLCBwcm9wZXJ0eUJdID0gW2FbdGhpcy5hY3RpdmVTb3J0Q29sdW1uXSwgYlt0aGlzLmFjdGl2ZVNvcnRDb2x1bW5dXTtcbiAgICByZXR1cm4gVXRpbC5zb3J0RnVuY3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIsIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbik7XG4gIH1cblxufVxuIl19