@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
111 lines • 17.5 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixNQUFNLDBDQUEwQyxDQUFDO0FBQ3JHLE9BQU8sRUFBNkIsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQU92SCxjQUFjO0FBQ2Q7SUFBK0MsNkNBQXFCO0lBQXBFOztJQXFDQSxDQUFDO0lBcENVLDBDQUFNLEdBQWIsVUFBYyxJQUF1QixFQUFFLGVBQTBDLEVBQzdFLHVCQUFtRDtRQUNuRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU8sOENBQVUsR0FBbEIsVUFBbUIsSUFBdUIsRUFBRSxlQUEwQyxFQUNsRix1QkFBa0QsRUFBRSxNQUF1QjtRQUMzRSxJQUFJLENBQVMsQ0FBQztRQUNkLElBQUksR0FBb0IsQ0FBQztRQUN6QixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hCLElBQU0sR0FBRyxHQUFzQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3RILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7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QyxLQUFLLENBQUMsQ0FBQztRQUMzQyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0lBQ3pELENBQUM7SUFFTyx5Q0FBTSxHQUFkLFVBQWUsSUFBdUIsRUFBRSxLQUFzQjtRQUMxRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzdGLENBQUM7O2dCQTdEb0Isa0JBQWtCOztJQUg5Qix3QkFBd0I7UUFKcEMsSUFBSSxDQUFDO1lBQ0YsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUM7eUNBSXVCLGtCQUFrQjtPQUg5Qix3QkFBd0IsQ0FpRXBDO0lBQUQsK0JBQUM7Q0FBQSxBQWpFRCxJQWlFQztTQWpFWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFzZUZpbHRlcmluZ1N0cmF0ZWd5LCBJRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IElneFRyZWVHcmlkQVBJU2VydmljZSB9IGZyb20gJy4vdHJlZS1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZCc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSBleHRlbmRzIEJhc2VGaWx0ZXJpbmdTdHJhdGVneSB7XG4gICAgcHVibGljIGZpbHRlcihkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSwgZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZT86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckltcGwoZGF0YSwgZXhwcmVzc2lvbnNUcmVlLCBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckltcGwoZGF0YTogSVRyZWVHcmlkUmVjb3JkW10sIGV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIHBhcmVudDogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkW10ge1xuICAgICAgICBsZXQgaTogbnVtYmVyO1xuICAgICAgICBsZXQgcmVjOiBJVHJlZUdyaWRSZWNvcmQ7XG4gICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXM6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGlmICgoRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KGV4cHJlc3Npb25zVHJlZSkgJiYgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlKSkgfHwgIWxlbikge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICByZWMgPSBEYXRhVXRpbC5jbG9uZVRyZWVHcmlkUmVjb3JkKGRhdGFbaV0pO1xuICAgICAgICAgICAgcmVjLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIGlmIChyZWMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuID0gdGhpcy5maWx0ZXJJbXBsKHJlYy5jaGlsZHJlbiwgZXhwcmVzc2lvbnNUcmVlLCBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZSwgcmVjKTtcbiAgICAgICAgICAgICAgICByZWMuY2hpbGRyZW4gPSBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZENoaWxkcmVuIDogbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hSZWNvcmQocmVjLCBleHByZXNzaW9uc1RyZWUpICYmIHRoaXMubWF0Y2hSZWNvcmQocmVjLCBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZSkpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChyZWMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWMuY2hpbGRyZW4gJiYgcmVjLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZWMuaXNGaWx0ZXJlZE91dFBhcmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2gocmVjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGaWVsZFZhbHVlKHJlYzogb2JqZWN0LCBmaWVsZE5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbFJlY29yZCA9IDxJVHJlZUdyaWRSZWNvcmQ+cmVjO1xuICAgICAgICByZXR1cm4gaGllcmFyY2hpY2FsUmVjb3JkLmRhdGFbZmllbGROYW1lXTtcbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3RyZWVHcmlkRmlsdGVyaW5nJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkRmlsdGVyaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUgZ3JpZEFQSTogSWd4VHJlZUdyaWRBUElTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7XG4gICAgICAgIHRoaXMuZ3JpZEFQSSA9IDxJZ3hUcmVlR3JpZEFQSVNlcnZpY2U+Z3JpZEFQSTtcbiAgICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShoaWVyYXJjaHlEYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSwgZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICBmaWx0ZXJTdHJhdGVneTogSUZpbHRlcmluZ1N0cmF0ZWd5LFxuICAgICAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgaWQ6IHN0cmluZywgcGlwZVRyaWdnZXI6IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgY29uc3Qgc3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgc3RyYXRlZ3k6IG5ldyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5KClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZmlsdGVyU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIHN0YXRlLnN0cmF0ZWd5ID0gZmlsdGVyU3RyYXRlZ3k7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0RmlsdGVyZWRPdXRQcm9wZXJ0eShncmlkLnJlY29yZHMpO1xuXG4gICAgICAgIGlmIChGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoc3RhdGUuZXhwcmVzc2lvbnNUcmVlKSAmJiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoc3RhdGUuYWR2YW5jZWRFeHByZXNzaW9uc1RyZWUpKSB7XG4gICAgICAgICAgICBncmlkLmZpbHRlcmVkRGF0YSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gaGllcmFyY2h5RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmlsdGVyKGhpZXJhcmNoeURhdGEsIHN0YXRlKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICB0aGlzLmV4cGFuZEFsbFJlY3Vyc2l2ZShncmlkLCByZXN1bHQsIGdyaWQuZXhwYW5zaW9uU3RhdGVzLCBmaWx0ZXJlZERhdGEpO1xuICAgICAgICBncmlkLmZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRGaWx0ZXJlZE91dFByb3BlcnR5KG1hcDogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPikge1xuICAgICAgICBjb25zdCBrZXlzID0gQXJyYXkuZnJvbShtYXAua2V5cygpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtYXAuZ2V0KGtleXNbaV0pLmlzRmlsdGVyZWRPdXRQYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZEFsbFJlY3Vyc2l2ZShncmlkOiBJZ3hUcmVlR3JpZENvbXBvbmVudCwgZGF0YTogSVRyZWVHcmlkUmVjb3JkW10sXG4gICAgICAgIGV4cGFuZGVkU3RhdGVzOiBNYXA8YW55LCBib29sZWFuPiwgZmlsdGVyZWREYXRhOiBhbnlbXSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRhdGFbaV07XG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEucHVzaChyZWMuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vblByb2Nlc3NlZFJlY29yZChncmlkLCByZWMpO1xuXG4gICAgICAgICAgICBpZiAocmVjLmNoaWxkcmVuICYmIHJlYy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZXMuc2V0KHJlYy5yb3dJRCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxSZWN1cnNpdmUoZ3JpZCwgcmVjLmNoaWxkcmVuLCBleHBhbmRlZFN0YXRlcywgZmlsdGVyZWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTm9uUHJvY2Vzc2VkUmVjb3JkKGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LCByZWNvcmQ6IElUcmVlR3JpZFJlY29yZCkge1xuICAgICAgICBjb25zdCByZWMgPSBncmlkLnJlY29yZHMuZ2V0KHJlY29yZC5yb3dJRCk7XG4gICAgICAgIHJlYy5pc0ZpbHRlcmVkT3V0UGFyZW50ID0gcmVjb3JkLmlzRmlsdGVyZWRPdXRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXIoZGF0YTogSVRyZWVHcmlkUmVjb3JkW10sIHN0YXRlOiBJRmlsdGVyaW5nU3RhdGUpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5zdHJhdGVneS5maWx0ZXIoZGF0YSwgc3RhdGUuZXhwcmVzc2lvbnNUcmVlLCBzdGF0ZS5hZHZhbmNlZEV4cHJlc3Npb25zVHJlZSk7XG4gICAgfVxufVxuIl19