angular-9-datatable
Version:
DataTable component for Angular 9 framework
177 lines • 23.7 kB
JavaScript
import { __decorate, __metadata, __values } from "tslib";
import { Directive, Input, EventEmitter, SimpleChange, OnChanges, DoCheck, IterableDiffers, IterableDiffer, Output } from "@angular/core";
import * as _ from "lodash";
import { ReplaySubject } from "rxjs";
var DataTable = /** @class */ (function () {
function DataTable(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);
}
DataTable.prototype.getSort = function () {
return { sortBy: this.sortBy, sortOrder: this.sortOrder };
};
DataTable.prototype.setSort = function (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);
}
};
DataTable.prototype.getPage = function () {
return { activePage: this.activePage, rowsOnPage: this.rowsOnPage, dataLength: this.inputData.length };
};
DataTable.prototype.setPage = function (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
});
}
};
DataTable.prototype.calculateNewActivePage = function (previousRowsOnPage, currentRowsOnPage) {
var firstRowOnPage = (this.activePage - 1) * previousRowsOnPage + 1;
var newActivePage = Math.ceil(firstRowOnPage / currentRowsOnPage);
return newActivePage;
};
DataTable.prototype.recalculatePage = function () {
var 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
});
};
DataTable.prototype.ngOnChanges = function (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;
}
};
DataTable.prototype.ngDoCheck = function () {
var changes = this.diff.diff(this.inputData);
if (changes) {
this.recalculatePage();
this.mustRecalculateData = true;
}
if (this.mustRecalculateData) {
this.fillData();
this.mustRecalculateData = false;
}
};
DataTable.prototype.fillData = function () {
this.activePage = this.activePage;
this.rowsOnPage = this.rowsOnPage;
var offset = (this.activePage - 1) * this.rowsOnPage;
var 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;
};
DataTable.prototype.caseInsensitiveIteratee = function (sortBy) {
return function (row) {
var e_1, _a;
var value = row;
try {
for (var _b = __values(sortBy.split('.')), _c = _b.next(); !_c.done; _c = _b.next()) {
var sortByProperty = _c.value;
if (value) {
value = value[sortByProperty];
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
if (value && typeof value === 'string' || value instanceof String) {
return value.toLowerCase();
}
return value;
};
};
DataTable.ctorParameters = function () { return [
{ 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);
return DataTable;
}());
export { DataTable };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLTktZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL2RhdGEtdGFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUNqRixjQUFjLEVBQUUsTUFBTSxFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBcUJyQztJQW9CSSxtQkFBMkIsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFqQjNCLGNBQVMsR0FBVSxFQUFFLENBQUM7UUFFcEIsV0FBTSxHQUFzQixFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNkLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFDbEQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRW5ELGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUVyQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFJN0IsaUJBQVksR0FBRyxJQUFJLGFBQWEsQ0FBWSxDQUFDLENBQUMsQ0FBQztRQUMvQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFHaEQsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sMkJBQU8sR0FBZDtRQUNJLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFD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UUFBNUIsTUFBTSxDQUFDLG1CQUFtQixDQUFDOztzREFBcUQ7SUFFMUQ7UUFBdEIsS0FBSyxDQUFDLGNBQWMsQ0FBQzs7aURBQTBCO0lBQ3pCO1FBQXRCLEtBQUssQ0FBQyxjQUFjLENBQUM7O2lEQUF1QjtJQVhwQyxTQUFTO1FBSnJCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFFBQVEsRUFBRSxhQUFhO1NBQzFCLENBQUM7eUNBcUJzQyxlQUFlO09BcEIxQyxTQUFTLENBMklyQjtJQUFELGdCQUFDO0NBQUEsQUEzSUQsSUEySUM7U0EzSVksU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBEaXJlY3RpdmUsIElucHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZSwgT25DaGFuZ2VzLCBEb0NoZWNrLCBJdGVyYWJsZURpZmZlcnMsXHJcbiAgICBJdGVyYWJsZURpZmZlciwgT3V0cHV0XHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0RXZlbnQge1xyXG4gICAgc29ydEJ5OiBzdHJpbmcgfCBzdHJpbmdbXTtcclxuICAgIHNvcnRPcmRlcjogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUV2ZW50IHtcclxuICAgIGFjdGl2ZVBhZ2U6IG51bWJlcjtcclxuICAgIHJvd3NPblBhZ2U6IG51bWJlcjtcclxuICAgIGRhdGFMZW5ndGg6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEYXRhRXZlbnQge1xyXG4gICAgbGVuZ3RoOiBudW1iZXI7XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICd0YWJsZVttZkRhdGFdJyxcclxuICAgIGV4cG9ydEFzOiAnbWZEYXRhVGFibGUnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIERvQ2hlY2sge1xyXG5cclxuICAgIHByaXZhdGUgZGlmZjogSXRlcmFibGVEaWZmZXI8YW55PjtcclxuICAgIEBJbnB1dChcIm1mRGF0YVwiKSBwdWJsaWMgaW5wdXREYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIEBJbnB1dChcIm1mU29ydEJ5XCIpIHB1YmxpYyBzb3J0Qnk6IHN0cmluZyB8IHN0cmluZ1tdID0gXCJcIjtcclxuICAgIEBJbnB1dChcIm1mU29ydE9yZGVyXCIpIHB1YmxpYyBzb3J0T3JkZXIgPSBcImFzY1wiO1xyXG4gICAgQE91dHB1dChcIm1mU29ydEJ5Q2hhbmdlXCIpIHB1YmxpYyBzb3J0QnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHN0cmluZ1tdPigpO1xyXG4gICAgQE91dHB1dChcIm1mU29ydE9yZGVyQ2hhbmdlXCIpIHB1YmxpYyBzb3J0T3JkZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICBASW5wdXQoXCJtZlJvd3NPblBhZ2VcIikgcHVibGljIHJvd3NPblBhZ2UgPSAxMDAwO1xyXG4gICAgQElucHV0KFwibWZBY3RpdmVQYWdlXCIpIHB1YmxpYyBhY3RpdmVQYWdlID0gMTtcclxuXHJcbiAgICBwcml2YXRlIG11c3RSZWNhbGN1bGF0ZURhdGEgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgZGF0YTogYW55W107XHJcblxyXG4gICAgcHVibGljIG9uU29ydENoYW5nZSA9IG5ldyBSZXBsYXlTdWJqZWN0PFNvcnRFdmVudD4oMSk7XHJcbiAgICBwdWJsaWMgb25QYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzKSB7XHJcbiAgICAgICAgdGhpcy5kaWZmID0gZGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNvcnQoKTogU29ydEV2ZW50IHtcclxuICAgICAgICByZXR1cm4geyBzb3J0Qnk6IHRoaXMuc29ydEJ5LCBzb3J0T3JkZXI6IHRoaXMuc29ydE9yZGVyIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNvcnQoc29ydEJ5OiBzdHJpbmcgfCBzdHJpbmdbXSwgc29ydE9yZGVyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zb3J0QnkgIT09IHNvcnRCeSB8fCB0aGlzLnNvcnRPcmRlciAhPT0gc29ydE9yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydEJ5ID0gc29ydEJ5O1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRPcmRlciA9IF8uaW5jbHVkZXMoW1wiYXNjXCIsIFwiZGVzY1wiXSwgc29ydE9yZGVyKSA/IHNvcnRPcmRlciA6IFwiYXNjXCI7XHJcbiAgICAgICAgICAgIHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25Tb3J0Q2hhbmdlLm5leHQoeyBzb3J0Qnk6IHNvcnRCeSwgc29ydE9yZGVyOiBzb3J0T3JkZXIgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydEJ5Q2hhbmdlLmVtaXQodGhpcy5zb3J0QnkpO1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuc29ydE9yZGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhZ2UoKTogUGFnZUV2ZW50IHtcclxuICAgICAgICByZXR1cm4geyBhY3RpdmVQYWdlOiB0aGlzLmFjdGl2ZVBhZ2UsIHJvd3NPblBhZ2U6IHRoaXMucm93c09uUGFnZSwgZGF0YUxlbmd0aDogdGhpcy5pbnB1dERhdGEubGVuZ3RoIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBhZ2UoYWN0aXZlUGFnZTogbnVtYmVyLCByb3dzT25QYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5yb3dzT25QYWdlICE9PSByb3dzT25QYWdlIHx8IHRoaXMuYWN0aXZlUGFnZSAhPT0gYWN0aXZlUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2UgIT09IGFjdGl2ZVBhZ2UgPyBhY3RpdmVQYWdlIDogdGhpcy5jYWxjdWxhdGVOZXdBY3RpdmVQYWdlKHRoaXMucm93c09uUGFnZSwgcm93c09uUGFnZSk7XHJcbiAgICAgICAgICAgIHRoaXMucm93c09uUGFnZSA9IHJvd3NPblBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlUGFnZTogdGhpcy5hY3RpdmVQYWdlLFxyXG4gICAgICAgICAgICAgICAgcm93c09uUGFnZTogdGhpcy5yb3dzT25QYWdlLFxyXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogdGhpcy5pbnB1dERhdGEgPyB0aGlzLmlucHV0RGF0YS5sZW5ndGggOiAwXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZU5ld0FjdGl2ZVBhZ2UocHJldmlvdXNSb3dzT25QYWdlOiBudW1iZXIsIGN1cnJlbnRSb3dzT25QYWdlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBmaXJzdFJvd09uUGFnZSA9ICh0aGlzLmFjdGl2ZVBhZ2UgLSAxKSAqIHByZXZpb3VzUm93c09uUGFnZSArIDE7XHJcbiAgICAgICAgbGV0IG5ld0FjdGl2ZVBhZ2UgPSBNYXRoLmNlaWwoZmlyc3RSb3dPblBhZ2UgLyBjdXJyZW50Um93c09uUGFnZSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0FjdGl2ZVBhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWNhbGN1bGF0ZVBhZ2UoKSB7XHJcbiAgICAgICAgbGV0IGxhc3RQYWdlID0gTWF0aC5jZWlsKHRoaXMuaW5wdXREYXRhLmxlbmd0aCAvIHRoaXMucm93c09uUGFnZSk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYWdlID0gbGFzdFBhZ2UgPCB0aGlzLmFjdGl2ZVBhZ2UgPyBsYXN0UGFnZSA6IHRoaXMuYWN0aXZlUGFnZTtcclxuICAgICAgICB0aGlzLmFjdGl2ZVBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2UgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICAgIGFjdGl2ZVBhZ2U6IHRoaXMuYWN0aXZlUGFnZSxcclxuICAgICAgICAgICAgcm93c09uUGFnZTogdGhpcy5yb3dzT25QYWdlLFxyXG4gICAgICAgICAgICBkYXRhTGVuZ3RoOiB0aGlzLmlucHV0RGF0YS5sZW5ndGhcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSk6IGFueSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbXCJyb3dzT25QYWdlXCJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93c09uUGFnZSA9IGNoYW5nZXNbXCJyb3dzT25QYWdlXCJdLnByZXZpb3VzVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnZSh0aGlzLmFjdGl2ZVBhZ2UsIGNoYW5nZXNbXCJyb3dzT25QYWdlXCJdLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzW1wic29ydEJ5XCJdIHx8IGNoYW5nZXNbXCJzb3J0T3JkZXJcIl0pIHtcclxuICAgICAgICAgICAgaWYgKCFfLmluY2x1ZGVzKFtcImFzY1wiLCBcImRlc2NcIl0sIHRoaXMuc29ydE9yZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiYW5ndWxhcjItZGF0YXRhYmxlOiB2YWx1ZSBmb3IgaW5wdXQgbWZTb3J0T3JkZXIgbXVzdCBiZSBvbmUgb2YgWydhc2MnLCAnZGVzYyddLCBidXQgaXM6XCIsIHRoaXMuc29ydE9yZGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc29ydE9yZGVyID0gXCJhc2NcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zb3J0QnkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25Tb3J0Q2hhbmdlLm5leHQoeyBzb3J0Qnk6IHRoaXMuc29ydEJ5LCBzb3J0T3JkZXI6IHRoaXMuc29ydE9yZGVyIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzW1wiaW5wdXREYXRhXCJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXREYXRhID0gY2hhbmdlc1tcImlucHV0RGF0YVwiXS5jdXJyZW50VmFsdWUgfHwgW107XHJcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVQYWdlKCk7XHJcbiAgICAgICAgICAgIHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogYW55IHtcclxuICAgICAgICBsZXQgY2hhbmdlcyA9IHRoaXMuZGlmZi5kaWZmKHRoaXMuaW5wdXREYXRhKTtcclxuICAgICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlUGFnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdXN0UmVjYWxjdWxhdGVEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbERhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy5tdXN0UmVjYWxjdWxhdGVEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsbERhdGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xyXG4gICAgICAgIHRoaXMucm93c09uUGFnZSA9IHRoaXMucm93c09uUGFnZTtcclxuXHJcbiAgICAgICAgbGV0IG9mZnNldCA9ICh0aGlzLmFjdGl2ZVBhZ2UgLSAxKSAqIHRoaXMucm93c09uUGFnZTtcclxuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuaW5wdXREYXRhO1xyXG4gICAgICAgIHZhciBzb3J0QnkgPSB0aGlzLnNvcnRCeTtcclxuICAgICAgICBpZiAodHlwZW9mIHNvcnRCeSA9PT0gJ3N0cmluZycgfHwgc29ydEJ5IGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBfLm9yZGVyQnkoZGF0YSwgdGhpcy5jYXNlSW5zZW5zaXRpdmVJdGVyYXRlZSg8c3RyaW5nPnNvcnRCeSksIHRoaXMuc29ydE9yZGVyID09ICdhc2MnID8gJ2FzYycgOiAnZGVzYycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBfLm9yZGVyQnkoZGF0YSwgc29ydEJ5LCB0aGlzLnNvcnRPcmRlciA9PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YSA9IF8uc2xpY2UoZGF0YSwgb2Zmc2V0LCBvZmZzZXQgKyB0aGlzLnJvd3NPblBhZ2UpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYXNlSW5zZW5zaXRpdmVJdGVyYXRlZShzb3J0Qnk6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiAocm93OiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSByb3c7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnRCeVByb3BlcnR5IG9mIHNvcnRCeS5zcGxpdCgnLicpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3NvcnRCeVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0iXX0=