UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

111 lines 17.5 kB
import { __decorate, __extends, __metadata } from "tslib"; import { Pipe } from '@angular/core'; import { DataUtil } from '../../data-operations/data-util'; import { GridBaseAPIService } from '../api.service'; import { BaseFilteringStrategy } from '../../data-operations/filtering-strategy'; import { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree'; /** @hidden */ var TreeGridFilteringStrategy = /** @class */ (function (_super) { __extends(TreeGridFilteringStrategy, _super); function TreeGridFilteringStrategy() { return _super !== null && _super.apply(this, arguments) || this; } TreeGridFilteringStrategy.prototype.filter = function (data, expressionsTree, advancedExpressionsTree) { return this.filterImpl(data, expressionsTree, advancedExpressionsTree, undefined); }; TreeGridFilteringStrategy.prototype.filterImpl = function (data, expressionsTree, advancedExpressionsTree, parent) { var i; var rec; var len = data.length; var res = []; if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) { return data; } for (i = 0; i < len; i++) { rec = DataUtil.cloneTreeGridRecord(data[i]); rec.parent = parent; if (rec.children) { var filteredChildren = this.filterImpl(rec.children, expressionsTree, advancedExpressionsTree, rec); rec.children = filteredChildren.length > 0 ? filteredChildren : null; } if (this.matchRecord(rec, expressionsTree) && this.matchRecord(rec, advancedExpressionsTree)) { res.push(rec); } else if (rec.children && rec.children.length > 0) { rec.isFilteredOutParent = true; res.push(rec); } } return res; }; TreeGridFilteringStrategy.prototype.getFieldValue = function (rec, fieldName) { var hierarchicalRecord = rec; return hierarchicalRecord.data[fieldName]; }; return TreeGridFilteringStrategy; }(BaseFilteringStrategy)); export { TreeGridFilteringStrategy }; /** @hidden */ var IgxTreeGridFilteringPipe = /** @class */ (function () { function IgxTreeGridFilteringPipe(gridAPI) { this.gridAPI = gridAPI; } IgxTreeGridFilteringPipe.prototype.transform = function (hierarchyData, expressionsTree, filterStrategy, advancedFilteringExpressionsTree, id, pipeTrigger) { var grid = this.gridAPI.grid; var state = { expressionsTree: expressionsTree, advancedExpressionsTree: advancedFilteringExpressionsTree, strategy: new TreeGridFilteringStrategy() }; if (filterStrategy) { state.strategy = filterStrategy; } this.resetFilteredOutProperty(grid.records); if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) { grid.filteredData = null; return hierarchyData; } var result = this.filter(hierarchyData, state); var filteredData = []; this.expandAllRecursive(grid, result, grid.expansionStates, filteredData); grid.filteredData = filteredData; return result; }; IgxTreeGridFilteringPipe.prototype.resetFilteredOutProperty = function (map) { var keys = Array.from(map.keys()); for (var i = 0; i < keys.length; i++) { map.get(keys[i]).isFilteredOutParent = undefined; } }; IgxTreeGridFilteringPipe.prototype.expandAllRecursive = function (grid, data, expandedStates, filteredData) { for (var i = 0; i < data.length; i++) { var rec = data[i]; filteredData.push(rec.data); this.updateNonProcessedRecord(grid, rec); if (rec.children && rec.children.length > 0) { expandedStates.set(rec.rowID, true); this.expandAllRecursive(grid, rec.children, expandedStates, filteredData); } } }; IgxTreeGridFilteringPipe.prototype.updateNonProcessedRecord = function (grid, record) { var rec = grid.records.get(record.rowID); rec.isFilteredOutParent = record.isFilteredOutParent; }; IgxTreeGridFilteringPipe.prototype.filter = function (data, state) { return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree); }; IgxTreeGridFilteringPipe.ctorParameters = function () { return [ { type: GridBaseAPIService } ]; }; IgxTreeGridFilteringPipe = __decorate([ Pipe({ name: 'treeGridFiltering', pure: true }), __metadata("design:paramtypes", [GridBaseAPIService]) ], IgxTreeGridFilteringPipe); return IgxTreeGridFilteringPipe; }()); export { IgxTreeGridFilteringPipe }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixNQUFNLDBDQUEwQyxDQUFDO0FBQ3JHLE9BQU8sRUFBNkIsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQU92SCxjQUFjO0FBQ2Q7SUFBK0MsNkNBQXFCO0lBQXBFOztJQXFDQSxDQUFDO0lBcENVLDBDQUFNLEdBQWIsVUFBYyxJQUF1QixFQUFFLGVBQTBDLEVBQzdFLHVCQUFtRDtRQUNuRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU8sOENBQVUsR0FBbEIsVUFBbUIsSUFBdUIsRUFBRSxlQUEwQyxFQUNsRix1QkFBa0QsRUFBRSxNQUF1QjtRQUMzRSxJQUFJLENBQVMsQ0FBQztRQUNkLElBQUksR0FBb0IsQ0FBQztRQUN6QixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hCLElBQU0sR0FBRyxHQUFzQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3RILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QixHQUFHLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3BCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtnQkFDZCxJQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUN4RTtZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUMsRUFBRTtnQkFDMUYsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQjtpQkFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNoRCxHQUFHLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1NBQ0o7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFUyxpREFBYSxHQUF2QixVQUF3QixHQUFXLEVBQUUsU0FBaUI7UUFDbEQsSUFBTSxrQkFBa0IsR0FBb0IsR0FBRyxDQUFDO1FBQ2hELE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDTCxnQ0FBQztBQUFELENBQUMsQUFyQ0QsQ0FBK0MscUJBQXFCLEdBcUNuRTs7QUFFRCxjQUFjO0FBS2Q7SUFHSSxrQ0FBWSxPQUE0RDtRQUNwRSxJQUFJLENBQUMsT0FBTyxHQUEwQixPQUFPLENBQUM7SUFDakQsQ0FBQztJQUVLLDRDQUFTLEdBQWhCLFVBQWlCLGFBQWdDLEVBQUUsZUFBMEMsRUFDekYsY0FBa0MsRUFDbEMsZ0NBQTJELEVBQUUsRUFBVSxFQUFFLFdBQW1CO1FBQzVGLElBQU0sSUFBSSxHQUF5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFNLEtBQUssR0FBb0I7WUFDM0IsZUFBZSxFQUFFLGVBQWU7WUFDaEMsdUJBQXVCLEVBQUUsZ0NBQWdDO1lBQ3pELFFBQVEsRUFBRSxJQUFJLHlCQUF5QixFQUFFO1NBQzVDLENBQUM7UUFFRixJQUFJLGNBQWMsRUFBRTtZQUNoQixLQUFLLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztTQUNuQztRQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUMsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsRUFBRTtZQUN4SCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixPQUFPLGFBQWEsQ0FBQztTQUN4QjtRQUVELElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQU0sWUFBWSxHQUFVLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBRWpDLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTywyREFBd0IsR0FBaEMsVUFBaUMsR0FBOEI7UUFDM0QsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFTyxxREFBa0IsR0FBMUIsVUFBMkIsSUFBMEIsRUFBRSxJQUF1QixFQUMxRSxjQUFpQyxFQUFFLFlBQW1CO1FBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXpDLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUM3RTtTQUNKO0lBQ0wsQ0FBQztJQUVPLDJEQUF3QixHQUFoQyxVQUFpQyxJQUEwQixFQUFFLE1BQXVCO1FBQ2hGLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0lBQ3pELENBQUM7SUFFTyx5Q0FBTSxHQUFkLFVBQWUsSUFBdUIsRUFBRSxLQUFzQjtRQUMxRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzdGLENBQUM7O2dCQTdEb0Isa0JBQWtCOztJQUg5Qix3QkFBd0I7UUFKcEMsSUFBSSxDQUFDO1lBQ0YsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUM7eUNBSXVCLGtCQUFrQjtPQUg5Qix3QkFBd0IsQ0FpRXBDO0lBQUQsK0JBQUM7Q0FBQSxBQWpFRCxJQWlFQztTQWpFWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFzZUZpbHRlcmluZ1N0cmF0ZWd5LCBJRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IElneFRyZWVHcmlkQVBJU2VydmljZSB9IGZyb20gJy4vdHJlZS1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZCc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSBleHRlbmRzIEJhc2VGaWx0ZXJpbmdTdHJhdGVneSB7XG4gICAgcHVibGljIGZpbHRlcihkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSwgZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZT86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckltcGwoZGF0YSwgZXhwcmVzc2lvbnNUcmVlLCBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckltcGwoZGF0YTogSVRyZWVHcmlkUmVjb3JkW10sIGV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIHBhcmVudDogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkW10ge1xuICAgICAgICBsZXQgaTogbnVtYmVyO1xuICAgICAgICBsZXQgcmVjOiBJVHJlZUdyaWRSZWNvcmQ7XG4gICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXM6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGlmICgoRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KGV4cHJlc3Npb25zVHJlZSkgJiYgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlKSkgfHwgIWxlbikge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICByZWMgPSBEYXRhVXRpbC5jbG9uZVRyZWVHcmlkUmVjb3JkKGRhdGFbaV0pO1xuICAgICAgICAgICAgcmVjLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIGlmIChyZWMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuID0gdGhpcy5maWx0ZXJJbXBsKHJlYy5jaGlsZHJlbiwgZXhwcmVzc2lvbnNUcmVlLCBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZSwgcmVjKTtcbiAgICAgICAgICAgICAgICByZWMuY2hpbGRyZW4gPSBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZENoaWxkcmVuIDogbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hSZWNvcmQocmVjLCBleHByZXNzaW9uc1RyZWUpICYmIHRoaXMubWF0Y2hSZWNvcmQocmVjLCBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZSkpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChyZWMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWMuY2hpbGRyZW4gJiYgcmVjLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZWMuaXNGaWx0ZXJlZE91dFBhcmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2gocmVjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGaWVsZFZhbHVlKHJlYzogb2JqZWN0LCBmaWVsZE5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbFJlY29yZCA9IDxJVHJlZUdyaWRSZWNvcmQ+cmVjO1xuICAgICAgICByZXR1cm4gaGllcmFyY2hpY2FsUmVjb3JkLmRhdGFbZmllbGROYW1lXTtcbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3RyZWVHcmlkRmlsdGVyaW5nJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkRmlsdGVyaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUgZ3JpZEFQSTogSWd4VHJlZUdyaWRBUElTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7XG4gICAgICAgIHRoaXMuZ3JpZEFQSSA9IDxJZ3hUcmVlR3JpZEFQSVNlcnZpY2U+Z3JpZEFQSTtcbiAgICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShoaWVyYXJjaHlEYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSwgZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICBmaWx0ZXJTdHJhdGVneTogSUZpbHRlcmluZ1N0cmF0ZWd5LFxuICAgICAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgaWQ6IHN0cmluZywgcGlwZVRyaWdnZXI6IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgY29uc3Qgc3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgc3RyYXRlZ3k6IG5ldyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5KClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZmlsdGVyU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIHN0YXRlLnN0cmF0ZWd5ID0gZmlsdGVyU3RyYXRlZ3k7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0RmlsdGVyZWRPdXRQcm9wZXJ0eShncmlkLnJlY29yZHMpO1xuXG4gICAgICAgIGlmIChGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoc3RhdGUuZXhwcmVzc2lvbnNUcmVlKSAmJiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoc3RhdGUuYWR2YW5jZWRFeHByZXNzaW9uc1RyZWUpKSB7XG4gICAgICAgICAgICBncmlkLmZpbHRlcmVkRGF0YSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gaGllcmFyY2h5RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmlsdGVyKGhpZXJhcmNoeURhdGEsIHN0YXRlKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICB0aGlzLmV4cGFuZEFsbFJlY3Vyc2l2ZShncmlkLCByZXN1bHQsIGdyaWQuZXhwYW5zaW9uU3RhdGVzLCBmaWx0ZXJlZERhdGEpO1xuICAgICAgICBncmlkLmZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRGaWx0ZXJlZE91dFByb3BlcnR5KG1hcDogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPikge1xuICAgICAgICBjb25zdCBrZXlzID0gQXJyYXkuZnJvbShtYXAua2V5cygpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtYXAuZ2V0KGtleXNbaV0pLmlzRmlsdGVyZWRPdXRQYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZEFsbFJlY3Vyc2l2ZShncmlkOiBJZ3hUcmVlR3JpZENvbXBvbmVudCwgZGF0YTogSVRyZWVHcmlkUmVjb3JkW10sXG4gICAgICAgIGV4cGFuZGVkU3RhdGVzOiBNYXA8YW55LCBib29sZWFuPiwgZmlsdGVyZWREYXRhOiBhbnlbXSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRhdGFbaV07XG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEucHVzaChyZWMuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vblByb2Nlc3NlZFJlY29yZChncmlkLCByZWMpO1xuXG4gICAgICAgICAgICBpZiAocmVjLmNoaWxkcmVuICYmIHJlYy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZXMuc2V0KHJlYy5yb3dJRCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxSZWN1cnNpdmUoZ3JpZCwgcmVjLmNoaWxkcmVuLCBleHBhbmRlZFN0YXRlcywgZmlsdGVyZWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTm9uUHJvY2Vzc2VkUmVjb3JkKGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LCByZWNvcmQ6IElUcmVlR3JpZFJlY29yZCkge1xuICAgICAgICBjb25zdCByZWMgPSBncmlkLnJlY29yZHMuZ2V0KHJlY29yZC5yb3dJRCk7XG4gICAgICAgIHJlYy5pc0ZpbHRlcmVkT3V0UGFyZW50ID0gcmVjb3JkLmlzRmlsdGVyZWRPdXRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXIoZGF0YTogSVRyZWVHcmlkUmVjb3JkW10sIHN0YXRlOiBJRmlsdGVyaW5nU3RhdGUpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5zdHJhdGVneS5maWx0ZXIoZGF0YSwgc3RhdGUuZXhwcmVzc2lvbnNUcmVlLCBzdGF0ZS5hZHZhbmNlZEV4cHJlc3Npb25zVHJlZSk7XG4gICAgfVxufVxuIl19