UNPKG

ngx-filters

Version:

This library was generated for all type of frameworks such as Angular Material, Prime Ng, etc. Providing Filters such as Number Box, TextBox, Date, Single Select, Multi Select And True/False Filters for grids or list.

199 lines 27.9 kB
import { NgxFiltersService } from "./ngx-filters.service"; import { Directive, EventEmitter, Injector } from "@angular/core"; import { FilterTypes } from "./ngx-types"; export class NgxFiltersParentBase { constructor(injector) { this.filters = []; this.filterCount = 0; this.innerFilters = []; this.apply = new EventEmitter(); this.filterChange = new EventEmitter(); this._firstFilters = []; this.filteredFilters = []; this.filteredFiltersChange = new EventEmitter(); this.filtersService = injector.get(NgxFiltersService); this.filtersService.conditionSource = this.filtersService.getConditionSource(); } ngOnChanges(changes) { if (changes && changes.filters && changes.filters.currentValue) { this.populateInnerFilter(); } } getClone(outerFilters) { const filters = []; outerFilters.forEach(filter => { filters.push({ options: filter.options, hidden: filter.hidden, field: filter.field, conditionOperator: filter.conditionOperator, logicalOperator: filter.logicalOperator, label: filter.label, value: filter.value !== null && filter.value !== undefined ? typeof (filter.value) === 'object' && filter.type !== FilterTypes.DateTime ? Object.assign({}, filter.value) : filter.value : null, type: filter.type, valueTo: filter.valueTo, values: filter.values ? [...filter.values] : null, valuesName: filter.valuesName, valueName: filter.valueName, valueToName: filter.valueToName, conditionName: filter.conditionName, hasFilter: filter.hasFilter, hiddenCondition: filter.hiddenCondition, disabledCondition: filter.disabledCondition, conditionOperators: filter.conditionOperators, hideRemove: filter.hideRemove, displayLabel: filter.displayLabel // creationTime: filter['created'] }); }); return filters; } get filterTypes() { return FilterTypes; } applyFilter(filter) { if (this.filtersService.checkHasFilter(filter)) { filter['created'] = (new Date()).getTime(); filter.hasFilter = true; this.filtersService.setValueForDateHasNoValue(filter); } else { filter['created'] = 0; } if (this.afterFilterChange) { filter.displayLabel = this.filtersService.getDisplayLabel(filter); this.afterFilterChange(filter).then((result) => { this.filterChange.emit(filter); this.applyFilters(); filter.displayLabel = result; }); } else { filter.displayLabel = this.filtersService.getDisplayLabel(filter); this.filterChange.emit(filter); this.applyFilters(); } } applyFilters() { // this.filters = []; setTimeout(() => { this._setFilterCount(); this._getAndSetFilteredFilters(); this.innerFilters = this._sort(this.innerFilters); this.filters = this.getClone(this.innerFilters); this.apply.emit({ filters: this.filters, filteredFilters: this.filteredFilters, filtersQueryString: this.filtersService.getFiltersInQueryString(this.filteredFilters) }); }, 10); if (this.afterApply) { this.afterApply(); } } mapFilters(filteredFilters) { return filteredFilters.map(filter => { var _a, _b, _c, _d; if (filter.type == FilterTypes.TrueFalse && filter.value == false && ((_b = (_a = filter.options) === null || _a === void 0 ? void 0 : _a.trueFalseOptions) === null || _b === void 0 ? void 0 : _b.falseIsNull) == true) { filter.value = null; } if (filter.type == FilterTypes.SingleSelect || filter.type == FilterTypes.MultiSelect) { if (filter.type == FilterTypes.SingleSelect && filter.value) { filter.value = filter.value[(_d = (_c = filter === null || filter === void 0 ? void 0 : filter.options) === null || _c === void 0 ? void 0 : _c.selectBoxOptions) === null || _d === void 0 ? void 0 : _d.valueMember]; } else if (filter.values) { filter.values = filter.values.map(va => { var _a, _b; return va[(_b = (_a = filter === null || filter === void 0 ? void 0 : filter.options) === null || _a === void 0 ? void 0 : _a.selectBoxOptions) === null || _b === void 0 ? void 0 : _b.valueMember]; }); } } if (filter.type === FilterTypes.DateTime) { filter.value = this.filtersService.getTime(filter.value); filter.valueTo = this.filtersService.getTime(filter.valueTo); } return filter; }); } mapFiltersForFilteredFilters(filteredFilters) { const items = []; filteredFilters.forEach(item => { items.push({ value: item.value, values: item.values, type: item.type, logicalOperator: item.logicalOperator, conditionOperator: item.conditionOperator, field: item.field, valueTo: item.valueTo }); }); return items; } _getAndSetFilteredFilters() { this.filteredFilters = this.mapFilters(this.getClone(this.innerFilters).filter(z => z.hasFilter)); this.filteredFilters = this.mapFiltersForFilteredFilters(this.filteredFilters); this.filteredFiltersChange.emit(this.filteredFilters); } populateInnerFilter() { this.innerFilters = []; this.filters.forEach(item => { item.hasFilter = this.filtersService.checkHasFilter(item); this.filtersService.setValueForDateHasNoValue((item)); }); this.filters = this._sort(this.filters); this.innerFilters = this.getClone(this.filters); this._getAndSetFilteredFilters(); this._firstFilters = this.getClone(this.filters); this._firstFilters.forEach(w => { w.values = null; w.value = null; w.valueToName = null; w.valuesName = null; w.hasFilter = false; w.valueTo = null; }); this._setFilterCount(); } _setFilterCount() { var _a; this.filterCount = (_a = this.innerFilters.filter(z => z.hasFilter && !z.hidden)) === null || _a === void 0 ? void 0 : _a.length; } ngOnInit() { // this.filtersService.useJalaliDate = this.useJalaliDate; // if (!this.isMobile) { // this.populateInnerFilter(); // } } _sort(filter) { return filter.sort((a, b) => { let aa = a.hasFilter ? 0 : 1; if (a['created']) { aa = aa - a['created']; } let bb = b.hasFilter ? 0 : 1; if (b['created']) { bb = bb - b['created']; } return aa - bb; }); } onClearAll() { this.innerFilters = this.getClone(this._firstFilters); this.filters = this.getClone(this._firstFilters); this.apply.emit({ filters: this.filters, filteredFilters: [], filtersQueryString: null }); } } NgxFiltersParentBase.decorators = [ { type: Directive, args: [{},] } ]; NgxFiltersParentBase.ctorParameters = () => [ { type: Injector } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpbHRlcnMtcGFyZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvYS5tb2hhbW1hZGkvc291cmNlL3JlcG9zL015bGlicmFyeS9Bbmd1bGFyLkxpYnJhcnkvbGlicy9wcm9qZWN0cy9uZ3gtZmlsdGVycy9zcmMvIiwic291cmNlcyI6WyJsaWIvbmd4LWZpbHRlcnMtcGFyZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQVMsV0FBVyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUl0RSxNQUFNLE9BQWdCLG9CQUFvQjtJQWF4QyxZQUFzQixRQUFrQjtRQVgvQixZQUFPLEdBQWEsRUFBRSxDQUFDO1FBRWhDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ25CLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUNqRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFM0Msa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDNUIsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUc1RCxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lB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QUFhO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDaEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDeEI7WUFDRCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDaEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDeEI7WUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixlQUFlLEVBQUUsRUFBRTtZQUNuQixrQkFBa0IsRUFBRSxJQUFJO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQXRORixTQUFTLFNBQUMsRUFBRTs7O1lBSm9CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05neEZpbHRlcnNTZXJ2aWNlfSBmcm9tIFwiLi9uZ3gtZmlsdGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlc30gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtGaWx0ZXIsIEZpbHRlclR5cGVzLCBOZ3hBcHBseUZpbHRlclJlc3VsdH0gZnJvbSBcIi4vbmd4LXR5cGVzXCI7XHJcblxyXG5cclxuQERpcmVjdGl2ZSh7fSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5neEZpbHRlcnNQYXJlbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIHB1YmxpYyBmaWx0ZXJzU2VydmljZTogTmd4RmlsdGVyc1NlcnZpY2VcclxuICBhYnN0cmFjdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xyXG4gIGFic3RyYWN0IGFmdGVyQXBwbHk7XHJcbiAgZmlsdGVyQ291bnQgPSAwO1xyXG4gIGlubmVyRmlsdGVyczogRmlsdGVyW10gPSBbXTtcclxuICBhYnN0cmFjdCBhcHBseSA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd4QXBwbHlGaWx0ZXJSZXN1bHQ+KCk7XHJcbiAgYWJzdHJhY3QgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXI+KCk7XHJcbiAgYWJzdHJhY3QgYWZ0ZXJGaWx0ZXJDaGFuZ2U6IChmaWx0ZXI6IEZpbHRlcikgPT4gUHJvbWlzZTxhbnk+O1xyXG4gIHByaXZhdGUgX2ZpcnN0RmlsdGVyczogRmlsdGVyW10gPSBbXTtcclxuICBhYnN0cmFjdCBmaWx0ZXJlZEZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgYWJzdHJhY3QgZmlsdGVyZWRGaWx0ZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJbXT4oKTtcclxuXHJcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5maWx0ZXJzU2VydmljZSA9IGluamVjdG9yLmdldChOZ3hGaWx0ZXJzU2VydmljZSk7XHJcbiAgICB0aGlzLmZpbHRlcnNTZXJ2aWNlLmNvbmRpdGlvblNvdXJjZSA9IHRoaXMuZmlsdGVyc1NlcnZpY2UuZ2V0Q29uZGl0aW9uU291cmNlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcyAmJiBjaGFuZ2VzLmZpbHRlcnMgJiYgY2hhbmdlcy5maWx0ZXJzLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLnBvcHVsYXRlSW5uZXJGaWx0ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENsb25lKG91dGVyRmlsdGVyczogRmlsdGVyW10pOiBGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICBvdXRlckZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xyXG4gICAgICBmaWx0ZXJzLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3B0aW9uczogZmlsdGVyLm9wdGlvbnMsXHJcbiAgICAgICAgICBoaWRkZW46IGZpbHRlci5oaWRkZW4sXHJcbiAgICAgICAgICBmaWVsZDogZmlsdGVyLmZpZWxkLFxyXG4gICAgICAgICAgY29uZGl0aW9uT3BlcmF0b3I6IGZpbHRlci5jb25kaXRpb25PcGVyYXRvcixcclxuICAgICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogZmlsdGVyLmxvZ2ljYWxPcGVyYXRvcixcclxuICAgICAgICAgIGxhYmVsOiBmaWx0ZXIubGFiZWwsXHJcbiAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlICE9PSBudWxsICYmIGZpbHRlci52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdHlwZW9mIChmaWx0ZXIudmFsdWUpID09PSAnb2JqZWN0JyAmJiBmaWx0ZXIudHlwZSAhPT0gRmlsdGVyVHlwZXMuRGF0ZVRpbWUgPyB7Li4uZmlsdGVyLnZhbHVlfSA6IGZpbHRlci52YWx1ZSA6IG51bGwsXHJcbiAgICAgICAgICB0eXBlOiBmaWx0ZXIudHlwZSxcclxuICAgICAgICAgIHZhbHVlVG86IGZpbHRlci52YWx1ZVRvLFxyXG4gICAgICAgICAgdmFsdWVzOiBmaWx0ZXIudmFsdWVzID8gWy4uLmZpbHRlci52YWx1ZXNdIDogbnVsbCxcclxuICAgICAgICAgIHZhbHVlc05hbWU6IGZpbHRlci52YWx1ZXNOYW1lLFxyXG4gICAgICAgICAgdmFsdWVOYW1lOiBmaWx0ZXIudmFsdWVOYW1lLFxyXG4gICAgICAgICAgdmFsdWVUb05hbWU6IGZpbHRlci52YWx1ZVRvTmFtZSxcclxuICAgICAgICAgIGNvbmRpdGlvbk5hbWU6IGZpbHRlci5jb25kaXRpb25OYW1lLFxyXG4gICAgICAgICAgaGFzRmlsdGVyOiBmaWx0ZXIuaGFzRmlsdGVyLFxyXG4gICAgICAgICAgaGlkZGVuQ29uZGl0aW9uOiBmaWx0ZXIuaGlkZGVuQ29uZGl0aW9uLFxyXG4gICAgICAgICAgZGlzYWJsZWRDb25kaXRpb246IGZpbHRlci5kaXNhYmxlZENvbmRpdGlvbixcclxuICAgICAgICAgIGNvbmRpdGlvbk9wZXJhdG9yczogZmlsdGVyLmNvbmRpdGlvbk9wZXJhdG9ycyxcclxuICAgICAgICAgIGhpZGVSZW1vdmU6IGZpbHRlci5oaWRlUmVtb3ZlLFxyXG4gICAgICAgICAgZGlzcGxheUxhYmVsOiBmaWx0ZXIuZGlzcGxheUxhYmVsXHJcbiAgICAgICAgICAvLyBjcmVhdGlvblRpbWU6IGZpbHRlclsnY3JlYXRlZCddXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyVHlwZXMoKSB7XHJcbiAgICByZXR1cm4gRmlsdGVyVHlwZXM7XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcihmaWx0ZXI6IEZpbHRlcik6IHZvaWQge1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5maWx0ZXJzU2VydmljZS5jaGVja0hhc0ZpbHRlcihmaWx0ZXIpKSB7XHJcblxyXG4gICAgICBmaWx0ZXJbJ2NyZWF0ZWQnXSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcbiAgICAgIGZpbHRlci5oYXNGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbHRlcnNTZXJ2aWNlLnNldFZhbHVlRm9yRGF0ZUhhc05vVmFsdWUoZmlsdGVyKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWx0ZXJbJ2NyZWF0ZWQnXSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZnRlckZpbHRlckNoYW5nZSkge1xyXG4gICAgICBmaWx0ZXIuZGlzcGxheUxhYmVsID0gdGhpcy5maWx0ZXJzU2VydmljZS5nZXREaXNwbGF5TGFiZWwoZmlsdGVyKTtcclxuICAgICAgdGhpcy5hZnRlckZpbHRlckNoYW5nZShmaWx0ZXIpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoZmlsdGVyKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICAgIGZpbHRlci5kaXNwbGF5TGFiZWwgPSByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmlsdGVyLmRpc3BsYXlMYWJlbCA9IHRoaXMuZmlsdGVyc1NlcnZpY2UuZ2V0RGlzcGxheUxhYmVsKGZpbHRlcik7XHJcbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoZmlsdGVyKTtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuZmlsdGVycyA9IFtdO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3NldEZpbHRlckNvdW50KCk7XHJcbiAgICAgIHRoaXMuX2dldEFuZFNldEZpbHRlcmVkRmlsdGVycygpO1xyXG4gICAgICB0aGlzLmlubmVyRmlsdGVycyA9IHRoaXMuX3NvcnQodGhpcy5pbm5lckZpbHRlcnMpO1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSB0aGlzLmdldENsb25lKHRoaXMuaW5uZXJGaWx0ZXJzKTtcclxuICAgICAgdGhpcy5hcHBseS5lbWl0KHtcclxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgICAgZmlsdGVyZWRGaWx0ZXJzOiB0aGlzLmZpbHRlcmVkRmlsdGVycyxcclxuICAgICAgICBmaWx0ZXJzUXVlcnlTdHJpbmc6IHRoaXMuZmlsdGVyc1NlcnZpY2UuZ2V0RmlsdGVyc0luUXVlcnlTdHJpbmcodGhpcy5maWx0ZXJlZEZpbHRlcnMpXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0sIDEwKTtcclxuICAgIGlmICh0aGlzLmFmdGVyQXBwbHkpIHtcclxuICAgICAgdGhpcy5hZnRlckFwcGx5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlcnMoZmlsdGVyZWRGaWx0ZXJzKTogRmlsdGVyW10ge1xyXG5cclxuICAgIHJldHVybiBmaWx0ZXJlZEZpbHRlcnMubWFwKGZpbHRlciA9PiB7XHJcbiAgICAgIGlmIChmaWx0ZXIudHlwZSA9PSBGaWx0ZXJUeXBlcy5UcnVlRmFsc2UgJiZcclxuICAgICAgICBmaWx0ZXIudmFsdWUgPT0gZmFsc2VcclxuICAgICAgICAmJiBmaWx0ZXIub3B0aW9ucz8udHJ1ZUZhbHNlT3B0aW9ucz8uZmFsc2VJc051bGwgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGZpbHRlci52YWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZpbHRlci50eXBlID09IEZpbHRlclR5cGVzLlNpbmdsZVNlbGVjdCB8fCBmaWx0ZXIudHlwZSA9PSBGaWx0ZXJUeXBlcy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PSBGaWx0ZXJUeXBlcy5TaW5nbGVTZWxlY3QgJiYgZmlsdGVyLnZhbHVlKSB7XHJcbiAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBmaWx0ZXIudmFsdWVbZmlsdGVyPy5vcHRpb25zPy5zZWxlY3RCb3hPcHRpb25zPy52YWx1ZU1lbWJlcl07XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIudmFsdWVzKSB7XHJcbiAgICAgICAgICBmaWx0ZXIudmFsdWVzID0gZmlsdGVyLnZhbHVlcy5tYXAodmEgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFbZmlsdGVyPy5vcHRpb25zPy5zZWxlY3RCb3hPcHRpb25zPy52YWx1ZU1lbWJlcl07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSBGaWx0ZXJUeXBlcy5EYXRlVGltZSkge1xyXG4gICAgICAgIGZpbHRlci52YWx1ZSA9IHRoaXMuZmlsdGVyc1NlcnZpY2UuZ2V0VGltZShmaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgIGZpbHRlci52YWx1ZVRvID0gdGhpcy5maWx0ZXJzU2VydmljZS5nZXRUaW1lKGZpbHRlci52YWx1ZVRvKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmlsdGVyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlcnNGb3JGaWx0ZXJlZEZpbHRlcnMoZmlsdGVyZWRGaWx0ZXJzOiBGaWx0ZXJbXSk6IEZpbHRlcltdIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gW107XHJcbiAgICBmaWx0ZXJlZEZpbHRlcnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgdmFsdWVzOiBpdGVtLnZhbHVlcyxcclxuICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgbG9naWNhbE9wZXJhdG9yOiBpdGVtLmxvZ2ljYWxPcGVyYXRvcixcclxuICAgICAgICBjb25kaXRpb25PcGVyYXRvcjogaXRlbS5jb25kaXRpb25PcGVyYXRvcixcclxuICAgICAgICBmaWVsZDogaXRlbS5maWVsZCxcclxuICAgICAgICB2YWx1ZVRvOiBpdGVtLnZhbHVlVG9cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW1zIGFzIGFueTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEFuZFNldEZpbHRlcmVkRmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyZWRGaWx0ZXJzID0gdGhpcy5tYXBGaWx0ZXJzKHRoaXMuZ2V0Q2xvbmUodGhpcy5pbm5lckZpbHRlcnMpLmZpbHRlcih6ID0+IHouaGFzRmlsdGVyKSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkRmlsdGVycyA9IHRoaXMubWFwRmlsdGVyc0ZvckZpbHRlcmVkRmlsdGVycyh0aGlzLmZpbHRlcmVkRmlsdGVycyk7XHJcbiAgICB0aGlzLmZpbHRlcmVkRmlsdGVyc0NoYW5nZS5lbWl0KHRoaXMuZmlsdGVyZWRGaWx0ZXJzKTtcclxuXHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZUlubmVyRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbm5lckZpbHRlcnMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVycy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLmhhc0ZpbHRlciA9IHRoaXMuZmlsdGVyc1NlcnZpY2UuY2hlY2tIYXNGaWx0ZXIoaXRlbSk7XHJcbiAgICAgIHRoaXMuZmlsdGVyc1NlcnZpY2Uuc2V0VmFsdWVGb3JEYXRlSGFzTm9WYWx1ZSgoaXRlbSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJzID0gdGhpcy5fc29ydCh0aGlzLmZpbHRlcnMpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJGaWx0ZXJzID0gdGhpcy5nZXRDbG9uZSh0aGlzLmZpbHRlcnMpO1xyXG5cclxuICAgIHRoaXMuX2dldEFuZFNldEZpbHRlcmVkRmlsdGVycygpO1xyXG5cclxuICAgIHRoaXMuX2ZpcnN0RmlsdGVycyA9IHRoaXMuZ2V0Q2xvbmUodGhpcy5maWx0ZXJzKTtcclxuICAgIHRoaXMuX2ZpcnN0RmlsdGVycy5mb3JFYWNoKHcgPT4ge1xyXG4gICAgICB3LnZhbHVlcyA9IG51bGw7XHJcbiAgICAgIHcudmFsdWUgPSBudWxsO1xyXG4gICAgICB3LnZhbHVlVG9OYW1lID0gbnVsbDtcclxuICAgICAgdy52YWx1ZXNOYW1lID0gbnVsbDtcclxuICAgICAgdy5oYXNGaWx0ZXIgPSBmYWxzZTtcclxuICAgICAgdy52YWx1ZVRvID0gbnVsbDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc2V0RmlsdGVyQ291bnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEZpbHRlckNvdW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJDb3VudCA9IHRoaXMuaW5uZXJGaWx0ZXJzLmZpbHRlcih6ID0+IHouaGFzRmlsdGVyICYmICF6LmhpZGRlbik/Lmxlbmd0aDtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuZmlsdGVyc1NlcnZpY2UudXNlSmFsYWxpRGF0ZSA9IHRoaXMudXNlSmFsYWxpRGF0ZTtcclxuICAgIC8vIGlmICghdGhpcy5pc01vYmlsZSkge1xyXG4gICAgLy8gdGhpcy5wb3B1bGF0ZUlubmVyRmlsdGVyKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3J0KGZpbHRlcjogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gZmlsdGVyLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgbGV0IGFhID0gYS5oYXNGaWx0ZXIgPyAwIDogMTtcclxuICAgICAgaWYgKGFbJ2NyZWF0ZWQnXSkge1xyXG4gICAgICAgIGFhID0gYWEgLSBhWydjcmVhdGVkJ107XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGJiID0gYi5oYXNGaWx0ZXIgPyAwIDogMTtcclxuICAgICAgaWYgKGJbJ2NyZWF0ZWQnXSkge1xyXG4gICAgICAgIGJiID0gYmIgLSBiWydjcmVhdGVkJ107XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFhIC0gYmI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXJBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlubmVyRmlsdGVycyA9IHRoaXMuZ2V0Q2xvbmUodGhpcy5fZmlyc3RGaWx0ZXJzKTtcclxuICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuZ2V0Q2xvbmUodGhpcy5fZmlyc3RGaWx0ZXJzKTtcclxuICAgIHRoaXMuYXBwbHkuZW1pdCh7XHJcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyxcclxuICAgICAgZmlsdGVyZWRGaWx0ZXJzOiBbXSxcclxuICAgICAgZmlsdGVyc1F1ZXJ5U3RyaW5nOiBudWxsXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19