angular-9-datatable
Version:
DataTable component for Angular 9 framework
165 lines • 22.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, Input, EventEmitter, SimpleChange, OnChanges, DoCheck, IterableDiffers, IterableDiffer, Output } from "@angular/core";
import * as _ from "lodash";
import { ReplaySubject } from "rxjs";
let DataTable = class DataTable {
constructor(differs) {
this.differs = differs;
this.inputData = [];
this.sortBy = "";
this.sortOrder = "asc";
this.sortByChange = new EventEmitter();
this.sortOrderChange = new EventEmitter();
this.rowsOnPage = 1000;
this.activePage = 1;
this.mustRecalculateData = false;
this.onSortChange = new ReplaySubject(1);
this.onPageChange = new EventEmitter();
this.diff = differs.find([]).create(null);
}
getSort() {
return { sortBy: this.sortBy, sortOrder: this.sortOrder };
}
setSort(sortBy, sortOrder) {
if (this.sortBy !== sortBy || this.sortOrder !== sortOrder) {
this.sortBy = sortBy;
this.sortOrder = _.includes(["asc", "desc"], sortOrder) ? sortOrder : "asc";
this.mustRecalculateData = true;
this.onSortChange.next({ sortBy: sortBy, sortOrder: sortOrder });
this.sortByChange.emit(this.sortBy);
this.sortOrderChange.emit(this.sortOrder);
}
}
getPage() {
return { activePage: this.activePage, rowsOnPage: this.rowsOnPage, dataLength: this.inputData.length };
}
setPage(activePage, rowsOnPage) {
if (this.rowsOnPage !== rowsOnPage || this.activePage !== activePage) {
this.activePage = this.activePage !== activePage ? activePage : this.calculateNewActivePage(this.rowsOnPage, rowsOnPage);
this.rowsOnPage = rowsOnPage;
this.mustRecalculateData = true;
this.onPageChange.emit({
activePage: this.activePage,
rowsOnPage: this.rowsOnPage,
dataLength: this.inputData ? this.inputData.length : 0
});
}
}
calculateNewActivePage(previousRowsOnPage, currentRowsOnPage) {
let firstRowOnPage = (this.activePage - 1) * previousRowsOnPage + 1;
let newActivePage = Math.ceil(firstRowOnPage / currentRowsOnPage);
return newActivePage;
}
recalculatePage() {
let lastPage = Math.ceil(this.inputData.length / this.rowsOnPage);
this.activePage = lastPage < this.activePage ? lastPage : this.activePage;
this.activePage = this.activePage || 1;
this.onPageChange.emit({
activePage: this.activePage,
rowsOnPage: this.rowsOnPage,
dataLength: this.inputData.length
});
}
ngOnChanges(changes) {
if (changes["rowsOnPage"]) {
this.rowsOnPage = changes["rowsOnPage"].previousValue;
this.setPage(this.activePage, changes["rowsOnPage"].currentValue);
this.mustRecalculateData = true;
}
if (changes["sortBy"] || changes["sortOrder"]) {
if (!_.includes(["asc", "desc"], this.sortOrder)) {
console.warn("angular2-datatable: value for input mfSortOrder must be one of ['asc', 'desc'], but is:", this.sortOrder);
this.sortOrder = "asc";
}
if (this.sortBy) {
this.onSortChange.next({ sortBy: this.sortBy, sortOrder: this.sortOrder });
}
this.mustRecalculateData = true;
}
if (changes["inputData"]) {
this.inputData = changes["inputData"].currentValue || [];
this.recalculatePage();
this.mustRecalculateData = true;
}
}
ngDoCheck() {
let changes = this.diff.diff(this.inputData);
if (changes) {
this.recalculatePage();
this.mustRecalculateData = true;
}
if (this.mustRecalculateData) {
this.fillData();
this.mustRecalculateData = false;
}
}
fillData() {
this.activePage = this.activePage;
this.rowsOnPage = this.rowsOnPage;
let offset = (this.activePage - 1) * this.rowsOnPage;
let data = this.inputData;
var sortBy = this.sortBy;
if (typeof sortBy === 'string' || sortBy instanceof String) {
data = _.orderBy(data, this.caseInsensitiveIteratee(sortBy), this.sortOrder == 'asc' ? 'asc' : 'desc');
}
else {
data = _.orderBy(data, sortBy, this.sortOrder == 'asc' ? 'asc' : 'desc');
}
data = _.slice(data, offset, offset + this.rowsOnPage);
this.data = data;
}
caseInsensitiveIteratee(sortBy) {
return (row) => {
var value = row;
for (let sortByProperty of sortBy.split('.')) {
if (value) {
value = value[sortByProperty];
}
}
if (value && typeof value === 'string' || value instanceof String) {
return value.toLowerCase();
}
return value;
};
}
};
DataTable.ctorParameters = () => [
{ type: IterableDiffers }
];
__decorate([
Input("mfData"),
__metadata("design:type", Array)
], DataTable.prototype, "inputData", void 0);
__decorate([
Input("mfSortBy"),
__metadata("design:type", Object)
], DataTable.prototype, "sortBy", void 0);
__decorate([
Input("mfSortOrder"),
__metadata("design:type", Object)
], DataTable.prototype, "sortOrder", void 0);
__decorate([
Output("mfSortByChange"),
__metadata("design:type", Object)
], DataTable.prototype, "sortByChange", void 0);
__decorate([
Output("mfSortOrderChange"),
__metadata("design:type", Object)
], DataTable.prototype, "sortOrderChange", void 0);
__decorate([
Input("mfRowsOnPage"),
__metadata("design:type", Object)
], DataTable.prototype, "rowsOnPage", void 0);
__decorate([
Input("mfActivePage"),
__metadata("design:type", Object)
], DataTable.prototype, "activePage", void 0);
DataTable = __decorate([
Directive({
selector: 'table[mfData]',
exportAs: 'mfDataTable'
}),
__metadata("design:paramtypes", [IterableDiffers])
], DataTable);
export { DataTable };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLTktZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL2RhdGEtdGFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUNqRixjQUFjLEVBQUUsTUFBTSxFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBcUJyQyxJQUFhLFNBQVMsR0FBdEIsTUFBYSxTQUFTO0lBb0JsQixZQUEyQixPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQWpCM0IsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUVwQixXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2QsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUNsRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbkQsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUk3QixpQkFBWSxHQUFHLElBQUksYUFBYSxDQUFZLENBQUMsQ0FBQyxDQUFDO1FBQy9DLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUdoRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxPQUFPO1FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFF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Ozs2Q0FBMEI7QUFDekI7SUFBdEIsS0FBSyxDQUFDLGNBQWMsQ0FBQzs7NkNBQXVCO0FBWHBDLFNBQVM7SUFKckIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGVBQWU7UUFDekIsUUFBUSxFQUFFLGFBQWE7S0FDMUIsQ0FBQztxQ0FxQnNDLGVBQWU7R0FwQjFDLFNBQVMsQ0EySXJCO1NBM0lZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgRGlyZWN0aXZlLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2UsIE9uQ2hhbmdlcywgRG9DaGVjaywgSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgSXRlcmFibGVEaWZmZXIsIE91dHB1dFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU29ydEV2ZW50IHtcclxuICAgIHNvcnRCeTogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgICBzb3J0T3JkZXI6IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VFdmVudCB7XHJcbiAgICBhY3RpdmVQYWdlOiBudW1iZXI7XHJcbiAgICByb3dzT25QYWdlOiBudW1iZXI7XHJcbiAgICBkYXRhTGVuZ3RoOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUV2ZW50IHtcclxuICAgIGxlbmd0aDogbnVtYmVyO1xyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAndGFibGVbbWZEYXRhXScsXHJcbiAgICBleHBvcnRBczogJ21mRGF0YVRhYmxlJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBEb0NoZWNrIHtcclxuXHJcbiAgICBwcml2YXRlIGRpZmY6IEl0ZXJhYmxlRGlmZmVyPGFueT47XHJcbiAgICBASW5wdXQoXCJtZkRhdGFcIikgcHVibGljIGlucHV0RGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgICBASW5wdXQoXCJtZlNvcnRCeVwiKSBwdWJsaWMgc29ydEJ5OiBzdHJpbmcgfCBzdHJpbmdbXSA9IFwiXCI7XHJcbiAgICBASW5wdXQoXCJtZlNvcnRPcmRlclwiKSBwdWJsaWMgc29ydE9yZGVyID0gXCJhc2NcIjtcclxuICAgIEBPdXRwdXQoXCJtZlNvcnRCeUNoYW5nZVwiKSBwdWJsaWMgc29ydEJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBzdHJpbmdbXT4oKTtcclxuICAgIEBPdXRwdXQoXCJtZlNvcnRPcmRlckNoYW5nZVwiKSBwdWJsaWMgc29ydE9yZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQElucHV0KFwibWZSb3dzT25QYWdlXCIpIHB1YmxpYyByb3dzT25QYWdlID0gMTAwMDtcclxuICAgIEBJbnB1dChcIm1mQWN0aXZlUGFnZVwiKSBwdWJsaWMgYWN0aXZlUGFnZSA9IDE7XHJcblxyXG4gICAgcHJpdmF0ZSBtdXN0UmVjYWxjdWxhdGVEYXRhID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGRhdGE6IGFueVtdO1xyXG5cclxuICAgIHB1YmxpYyBvblNvcnRDaGFuZ2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTb3J0RXZlbnQ+KDEpO1xyXG4gICAgcHVibGljIG9uUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycykge1xyXG4gICAgICAgIHRoaXMuZGlmZiA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTb3J0KCk6IFNvcnRFdmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHsgc29ydEJ5OiB0aGlzLnNvcnRCeSwgc29ydE9yZGVyOiB0aGlzLnNvcnRPcmRlciB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTb3J0KHNvcnRCeTogc3RyaW5nIHwgc3RyaW5nW10sIHNvcnRPcmRlcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc29ydEJ5ICE9PSBzb3J0QnkgfHwgdGhpcy5zb3J0T3JkZXIgIT09IHNvcnRPcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRCeSA9IHNvcnRCeTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0T3JkZXIgPSBfLmluY2x1ZGVzKFtcImFzY1wiLCBcImRlc2NcIl0sIHNvcnRPcmRlcikgPyBzb3J0T3JkZXIgOiBcImFzY1wiO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU29ydENoYW5nZS5uZXh0KHsgc29ydEJ5OiBzb3J0QnksIHNvcnRPcmRlcjogc29ydE9yZGVyIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRCeUNoYW5nZS5lbWl0KHRoaXMuc29ydEJ5KTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLnNvcnRPcmRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYWdlKCk6IFBhZ2VFdmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHsgYWN0aXZlUGFnZTogdGhpcy5hY3RpdmVQYWdlLCByb3dzT25QYWdlOiB0aGlzLnJvd3NPblBhZ2UsIGRhdGFMZW5ndGg6IHRoaXMuaW5wdXREYXRhLmxlbmd0aCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRQYWdlKGFjdGl2ZVBhZ2U6IG51bWJlciwgcm93c09uUGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucm93c09uUGFnZSAhPT0gcm93c09uUGFnZSB8fCB0aGlzLmFjdGl2ZVBhZ2UgIT09IGFjdGl2ZVBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVQYWdlID0gdGhpcy5hY3RpdmVQYWdlICE9PSBhY3RpdmVQYWdlID8gYWN0aXZlUGFnZSA6IHRoaXMuY2FsY3VsYXRlTmV3QWN0aXZlUGFnZSh0aGlzLnJvd3NPblBhZ2UsIHJvd3NPblBhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLnJvd3NPblBhZ2UgPSByb3dzT25QYWdlO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVBhZ2U6IHRoaXMuYWN0aXZlUGFnZSxcclxuICAgICAgICAgICAgICAgIHJvd3NPblBhZ2U6IHRoaXMucm93c09uUGFnZSxcclxuICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IHRoaXMuaW5wdXREYXRhID8gdGhpcy5pbnB1dERhdGEubGVuZ3RoIDogMFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVOZXdBY3RpdmVQYWdlKHByZXZpb3VzUm93c09uUGFnZTogbnVtYmVyLCBjdXJyZW50Um93c09uUGFnZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZmlyc3RSb3dPblBhZ2UgPSAodGhpcy5hY3RpdmVQYWdlIC0gMSkgKiBwcmV2aW91c1Jvd3NPblBhZ2UgKyAxO1xyXG4gICAgICAgIGxldCBuZXdBY3RpdmVQYWdlID0gTWF0aC5jZWlsKGZpcnN0Um93T25QYWdlIC8gY3VycmVudFJvd3NPblBhZ2UpO1xyXG4gICAgICAgIHJldHVybiBuZXdBY3RpdmVQYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVjYWxjdWxhdGVQYWdlKCkge1xyXG4gICAgICAgIGxldCBsYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLmlucHV0RGF0YS5sZW5ndGggLyB0aGlzLnJvd3NPblBhZ2UpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlUGFnZSA9IGxhc3RQYWdlIDwgdGhpcy5hY3RpdmVQYWdlID8gbGFzdFBhZ2UgOiB0aGlzLmFjdGl2ZVBhZ2U7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYWdlID0gdGhpcy5hY3RpdmVQYWdlIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmVQYWdlOiB0aGlzLmFjdGl2ZVBhZ2UsXHJcbiAgICAgICAgICAgIHJvd3NPblBhZ2U6IHRoaXMucm93c09uUGFnZSxcclxuICAgICAgICAgICAgZGF0YUxlbmd0aDogdGhpcy5pbnB1dERhdGEubGVuZ3RoXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pOiBhbnkge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzW1wicm93c09uUGFnZVwiXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd3NPblBhZ2UgPSBjaGFuZ2VzW1wicm93c09uUGFnZVwiXS5wcmV2aW91c1ZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhZ2UodGhpcy5hY3RpdmVQYWdlLCBjaGFuZ2VzW1wicm93c09uUGFnZVwiXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1tcInNvcnRCeVwiXSB8fCBjaGFuZ2VzW1wic29ydE9yZGVyXCJdKSB7XHJcbiAgICAgICAgICAgIGlmICghXy5pbmNsdWRlcyhbXCJhc2NcIiwgXCJkZXNjXCJdLCB0aGlzLnNvcnRPcmRlcikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImFuZ3VsYXIyLWRhdGF0YWJsZTogdmFsdWUgZm9yIGlucHV0IG1mU29ydE9yZGVyIG11c3QgYmUgb25lIG9mIFsnYXNjJywgJ2Rlc2MnXSwgYnV0IGlzOlwiLCB0aGlzLnNvcnRPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcmRlciA9IFwiYXNjXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc29ydEJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU29ydENoYW5nZS5uZXh0KHsgc29ydEJ5OiB0aGlzLnNvcnRCeSwgc29ydE9yZGVyOiB0aGlzLnNvcnRPcmRlciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1tcImlucHV0RGF0YVwiXSkge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0RGF0YSA9IGNoYW5nZXNbXCJpbnB1dERhdGFcIl0uY3VycmVudFZhbHVlIHx8IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlUGFnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IGFueSB7XHJcbiAgICAgICAgbGV0IGNoYW5nZXMgPSB0aGlzLmRpZmYuZGlmZih0aGlzLmlucHV0RGF0YSk7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBhZ2UoKTtcclxuICAgICAgICAgICAgdGhpcy5tdXN0UmVjYWxjdWxhdGVEYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxEYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGxEYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlUGFnZSA9IHRoaXMuYWN0aXZlUGFnZTtcclxuICAgICAgICB0aGlzLnJvd3NPblBhZ2UgPSB0aGlzLnJvd3NPblBhZ2U7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXQgPSAodGhpcy5hY3RpdmVQYWdlIC0gMSkgKiB0aGlzLnJvd3NPblBhZ2U7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmlucHV0RGF0YTtcclxuICAgICAgICB2YXIgc29ydEJ5ID0gdGhpcy5zb3J0Qnk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzb3J0QnkgPT09ICdzdHJpbmcnIHx8IHNvcnRCeSBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICBkYXRhID0gXy5vcmRlckJ5KGRhdGEsIHRoaXMuY2FzZUluc2Vuc2l0aXZlSXRlcmF0ZWUoPHN0cmluZz5zb3J0QnkpLCB0aGlzLnNvcnRPcmRlciA9PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhID0gXy5vcmRlckJ5KGRhdGEsIHNvcnRCeSwgdGhpcy5zb3J0T3JkZXIgPT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEgPSBfLnNsaWNlKGRhdGEsIG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5yb3dzT25QYWdlKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FzZUluc2Vuc2l0aXZlSXRlcmF0ZWUoc29ydEJ5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gKHJvdzogYW55KTogYW55ID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gcm93O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBzb3J0QnlQcm9wZXJ0eSBvZiBzb3J0Qnkuc3BsaXQoJy4nKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtzb3J0QnlQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59Il19