ngx-config-datatable
Version:
use configuration to generate datatable
393 lines • 26.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
import { BehaviorSubject, combineLatest, Subscription } from 'rxjs';
import { filter } from 'rxjs/operators';
var DatatableComponent = /** @class */ (function () {
function DatatableComponent() {
var _this = this;
this.isShowCheckbox = true;
this.isShowRowNumber = true;
this.className = '';
this.sortCommand = new EventEmitter();
this.checkRowCommand = new EventEmitter();
this.sub = new Subscription();
this.datatableSetting$ = new BehaviorSubject(null);
this.data$ = new BehaviorSubject([]);
this.rows = [];
this.footers = [];
this.headerChecked = false;
this.sub.add(combineLatest(this.datatableSetting$, this.data$).pipe(filter((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), datatableSetting = _b[0], data = _b[1];
return datatableSetting ? true : false;
}))).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), datatableSetting = _b[0], data = _b[1];
_this.render();
})));
}
Object.defineProperty(DatatableComponent.prototype, "datatableSetting", {
get: /**
* @return {?}
*/
function () {
return this.datatableSetting$.getValue();
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this.datatableSetting$.next(v);
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatatableComponent.prototype, "data", {
get: /**
* @return {?}
*/
function () {
return this.data$.getValue();
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this.data$.next(v);
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
DatatableComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.sub.unsubscribe();
};
/**
* @private
* @return {?}
*/
DatatableComponent.prototype.render = /**
* @private
* @return {?}
*/
function () {
this.rows = [];
this.footers = [];
this.addRows();
this.addSummaryRow();
};
/**
* @param {?} sortInfo
* @return {?}
*/
DatatableComponent.prototype.changeSort = /**
* @param {?} sortInfo
* @return {?}
*/
function (sortInfo) {
var e_1, _a;
try {
for (var _b = tslib_1.__values(this.datatableSetting.headers), _c = _b.next(); !_c.done; _c = _b.next()) {
var item = _c.value;
if (item.propName !== sortInfo.propName) {
item.sort = 'none';
}
else {
item.sort = sortInfo.sort;
}
}
}
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; }
}
this.sortCommand.emit(sortInfo);
};
/**
* @param {?} event
* @return {?}
*/
DatatableComponent.prototype.headerCheckIt = /**
* @param {?} event
* @return {?}
*/
function (event) {
var e_2, _a;
event.preventDefault();
this.headerChecked = !this.headerChecked;
try {
for (var _b = tslib_1.__values(this.rows), _c = _b.next(); !_c.done; _c = _b.next()) {
var row = _c.value;
// tslint:disable-next-line:no-string-literal
row['cbk__checked'] = this.headerChecked;
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
this.checkAllCheckbox();
};
/**
* @param {?} event
* @param {?} row
* @return {?}
*/
DatatableComponent.prototype.rowCheckIt = /**
* @param {?} event
* @param {?} row
* @return {?}
*/
function (event, row) {
event.preventDefault();
this.checkAllCheckbox();
};
/**
* @private
* @return {?}
*/
DatatableComponent.prototype.checkAllCheckbox = /**
* @private
* @return {?}
*/
function () {
// tslint:disable-next-line:no-string-literal
this.headerChecked = !this.rows.some((/**
* @param {?} a
* @return {?}
*/
function (a) { return !a['cbk__checked']; }));
// tslint:disable-next-line:no-string-literal
/** @type {?} */
var ids = this.rows.filter((/**
* @param {?} a
* @return {?}
*/
function (a) { return !!a['cbk__checked']; })).map((/**
* @param {?} a
* @return {?}
*/
function (a) { return a.id; }));
this.checkRowCommand.emit(ids);
};
/**
* @private
* @return {?}
*/
DatatableComponent.prototype.addRows = /**
* @private
* @return {?}
*/
function () {
var e_3, _a, e_4, _b;
this.checkDatatableSetting();
try {
for (var _c = tslib_1.__values(this.data), _d = _c.next(); !_d.done; _d = _c.next()) {
var row = _d.value;
/** @type {?} */
var cs = {
id: row.id,
rowData: row,
columns: []
};
try {
for (var _e = tslib_1.__values(this.datatableSetting.headers), _f = _e.next(); !_f.done; _f = _e.next()) {
var item = _f.value;
if (!item.isEnabled) {
continue;
}
/** @type {?} */
var vv = row[item.propName];
if (item.converter) {
vv = item.converter.to(vv);
}
cs.columns.push({
isHtml: item.isHtml,
content: vv
});
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
}
finally { if (e_4) throw e_4.error; }
}
this.rows.push(cs);
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_3) throw e_3.error; }
}
};
/**
* @private
* @return {?}
*/
DatatableComponent.prototype.addSummaryRow = /**
* @private
* @return {?}
*/
function () {
var e_5, _a, e_6, _b;
this.checkDatatableSetting();
/** @type {?} */
var fs = {
id: '',
rowData: { id: '' },
columns: []
};
if (!this.datatableSetting.headers.some((/**
* @param {?} a
* @return {?}
*/
function (a) { return a.isSum; }))) {
return;
}
try {
for (var _c = tslib_1.__values(this.datatableSetting.headers), _d = _c.next(); !_d.done; _d = _c.next()) {
var item = _d.value;
if (!item.isEnabled) {
continue;
}
if (!item.isSum) {
fs.columns.push({
isHtml: item.isHtml,
content: ''
});
continue;
}
/** @type {?} */
var tTotal = 0;
try {
for (var _e = tslib_1.__values(this.data), _f = _e.next(); !_f.done; _f = _e.next()) {
var row = _f.value;
/** @type {?} */
var vv = row[item.propName];
tTotal += +vv;
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
}
finally { if (e_6) throw e_6.error; }
}
if (item.converter) {
tTotal = item.converter.to(tTotal);
}
fs.columns.push({
isHtml: item.isHtml,
content: tTotal
});
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_5) throw e_5.error; }
}
this.footers.push(fs);
};
/**
* @private
* @return {?}
*/
DatatableComponent.prototype.checkDatatableSetting = /**
* @private
* @return {?}
*/
function () {
if (!this.datatableSetting) {
throw new Error('please set up the datatableSetting property');
}
};
DatatableComponent.decorators = [
{ type: Component, args: [{
selector: 'cdt-datatable',
template: "<table *ngIf=\"datatableSetting\" [class]=\"className\">\n <thead>\n <tr>\n <th *ngIf=\"isShowCheckbox\">\n <input type=\"checkbox\" \n [checked]=\" headerChecked\"\n (change)=\"headerCheckIt($event)\">\n </th>\n <th *ngIf=\"isShowRowNumber\">#</th>\n <th [ngClass]=\"{'d-none': !item.isEnabled}\" *ngFor=\"let item of datatableSetting.headers\">\n <cdt-btn-sort [info]=\"item\" (clickLink)=\"changeSort($event)\"></cdt-btn-sort>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows; let i=index\">\n\n <td *ngIf=\"isShowCheckbox\">\n <input type=\"checkbox\" \n [checked]=\"!!row.cbk__checked\" \n (change)=\"row.cbk__checked=!row.cbk__checked;rowCheckIt($event, row)\">\n </td>\n\n <td *ngIf=\"isShowRowNumber\"><span>{{i+1}}</span></td>\n\n <ng-container *ngFor=\"let column of row.columns\">\n <td *ngIf=\"column.isHtml\" [innerHTML]=\"column.content\"></td>\n <td *ngIf=\"!column.isHtml\" [innerText]=\"column.content\"></td>\n </ng-container>\n\n <td>\n <ng-container *ngTemplateOutlet=\"rowTmpl, context: { $implicit: row }\"></ng-container>\n </td>\n\n </tr>\n </tbody>\n <tfoot>\n <tr *ngFor=\"let row of footers\">\n <th *ngIf=\"isShowCheckbox\">\n </th>\n <th *ngIf=\"isShowRowNumber\"></th>\n <ng-container *ngFor=\"let column of row.columns\">\n <td>{{column.content}}</td>\n </ng-container>\n <th>\n </th>\n </tr>\n </tfoot>\n</table>",
styles: [""]
}] }
];
/** @nocollapse */
DatatableComponent.ctorParameters = function () { return []; };
DatatableComponent.propDecorators = {
rowTmpl: [{ type: ContentChild, args: ['rowCommand', { static: true },] }],
isShowCheckbox: [{ type: Input }],
isShowRowNumber: [{ type: Input }],
className: [{ type: Input }],
datatableSetting: [{ type: Input }],
data: [{ type: Input }],
sortCommand: [{ type: Output }],
checkRowCommand: [{ type: Output }]
};
return DatatableComponent;
}());
export { DatatableComponent };
if (false) {
/** @type {?} */
DatatableComponent.prototype.rowTmpl;
/** @type {?} */
DatatableComponent.prototype.isShowCheckbox;
/** @type {?} */
DatatableComponent.prototype.isShowRowNumber;
/** @type {?} */
DatatableComponent.prototype.className;
/** @type {?} */
DatatableComponent.prototype.sortCommand;
/** @type {?} */
DatatableComponent.prototype.checkRowCommand;
/**
* @type {?}
* @private
*/
DatatableComponent.prototype.sub;
/**
* @type {?}
* @private
*/
DatatableComponent.prototype.datatableSetting$;
/**
* @type {?}
* @private
*/
DatatableComponent.prototype.data$;
/** @type {?} */
DatatableComponent.prototype.rows;
/** @type {?} */
DatatableComponent.prototype.footers;
/** @type {?} */
DatatableComponent.prototype.headerChecked;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1jb25maWctZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU14QztJQXNDRTtRQUFBLGlCQVNDO1FBdENRLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFlZCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRWpELFFBQUcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pCLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFvQixJQUFJLENBQUMsQ0FBQztRQUNqRSxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFFckQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUMsSUFBSSxDQUNKLE1BQU07Ozs7UUFBQyxVQUFDLEVBQXdCO2dCQUF4QiwwQkFBd0IsRUFBdkIsd0JBQWdCLEVBQUUsWUFBSTtZQUFNLE9BQUEsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztRQUEvQixDQUErQixFQUFDLENBQ3RFLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsRUFBd0I7Z0JBQXhCLDBCQUF3QixFQUF2Qix3QkFBZ0IsRUFBRSxZQUFJO1lBQ2xDLEtBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQWxDRCxzQkFDSSxnREFBZ0I7Ozs7UUFHcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxDQUFDOzs7OztRQU5ELFVBQ3FCLENBQW9CO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQzs7O09BQUE7SUFJRCxzQkFDSSxvQ0FBSTs7OztRQUdSO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLENBQUM7Ozs7O1FBTkQsVUFDUyxDQUFjO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7OztPQUFBOzs7O0lBMEJELHdDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFTyxtQ0FBTTs7OztJQUFkO1FBQ0UsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQzs7Ozs7SUFFRCx1Q0FBVTs7OztJQUFWLFVBQVcsUUFBaUI7OztZQUMxQixLQUFtQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQSxnQkFBQSw0QkFBRTtnQkFBN0MsSUFBTSxJQUFJLFdBQUE7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO2lCQUNwQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7aUJBQzNCO2FBQ0Y7Ozs7Ozs7OztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7O0lBRUQsMENBQWE7Ozs7SUFBYixVQUFjLEtBQVk7O1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7WUFFekMsS0FBa0IsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxJQUFJLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQXhCLElBQU0sR0FBRyxXQUFBO2dCQUNaLDZDQUE2QztnQkFDN0MsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDMUM7Ozs7Ozs7OztRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7Ozs7OztJQUVELHVDQUFVOzs7OztJQUFWLFVBQVcsS0FBWSxFQUFFLEdBQUc7UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7Ozs7O0lBRU8sNkNBQWdCOzs7O0lBQXhCO1FBQ0UsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFsQixDQUFrQixFQUFDLENBQUM7OztZQUd4RCxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFuQixDQUFtQixFQUFDLENBQUMsR0FBRzs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEVBQUUsRUFBSixDQUFJLEVBQUM7UUFDckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7Ozs7SUFFTyxvQ0FBTzs7OztJQUFmOztRQUNFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOztZQUU3QixLQUFrQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLElBQUksQ0FBQSxnQkFBQSw0QkFBRTtnQkFBeEIsSUFBTSxHQUFHLFdBQUE7O29CQUNOLEVBQUUsR0FBUztvQkFDZixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLEdBQUc7b0JBQ1osT0FBTyxFQUFFLEVBQUU7aUJBQ1o7O29CQUNELEtBQW1CLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFBLGdCQUFBLDRCQUFFO3dCQUE3QyxJQUFNLElBQUksV0FBQTt3QkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTs0QkFDbkIsU0FBUzt5QkFDVjs7NEJBQ0csRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7NEJBQ2xCLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDNUI7d0JBQ0QsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7NEJBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNOzRCQUNuQixPQUFPLEVBQUUsRUFBRTt5QkFDWixDQUFDLENBQUM7cUJBQ0o7Ozs7Ozs7OztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNwQjs7Ozs7Ozs7O0lBQ0gsQ0FBQzs7Ozs7SUFFTywwQ0FBYTs7OztJQUFyQjs7UUFDRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7WUFFdkIsRUFBRSxHQUFTO1lBQ2YsRUFBRSxFQUFFLEVBQUU7WUFDTixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ25CLE9BQU8sRUFBRSxFQUFFO1NBQ1o7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsS0FBSyxFQUFQLENBQU8sRUFBQyxFQUFFO1lBQ3JELE9BQU87U0FDUjs7WUFDRCxLQUFtQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQSxnQkFBQSw0QkFBRTtnQkFBN0MsSUFBTSxJQUFJLFdBQUE7Z0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ25CLFNBQVM7aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2YsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixPQUFPLEVBQUUsRUFBRTtxQkFDWixDQUFDLENBQUM7b0JBQ0gsU0FBUztpQkFDVjs7b0JBRUcsTUFBTSxHQUFHLENBQUM7O29CQUNkLEtBQWtCLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsSUFBSSxDQUFBLGdCQUFBLDRCQUFFO3dCQUF4QixJQUFNLEdBQUcsV0FBQTs7NEJBQ04sRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUM3QixNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7cUJBQ2Y7Ozs7Ozs7OztnQkFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2xCLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDcEM7Z0JBQ0QsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixPQUFPLEVBQUUsTUFBTTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7Ozs7Ozs7OztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBRU8sa0RBQXFCOzs7O0lBQTdCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDOztnQkF0S0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6Qiw0akRBQXlDOztpQkFFMUM7Ozs7OzBCQUdFLFlBQVksU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2lDQUUzQyxLQUFLO2tDQUNMLEtBQUs7NEJBRUwsS0FBSzttQ0FDTCxLQUFLO3VCQU9MLEtBQUs7OEJBT0wsTUFBTTtrQ0FDTixNQUFNOztJQTRJVCx5QkFBQztDQUFBLEFBeEtELElBd0tDO1NBbktZLGtCQUFrQjs7O0lBRTdCLHFDQUF3RTs7SUFFeEUsNENBQStCOztJQUMvQiw2Q0FBZ0M7O0lBRWhDLHVDQUF3Qjs7SUFleEIseUNBQW9EOztJQUNwRCw2Q0FBeUQ7Ozs7O0lBRXpELGlDQUFpQzs7Ozs7SUFDakMsK0NBQXlFOzs7OztJQUN6RSxtQ0FBcUQ7O0lBRXJELGtDQUFrQjs7SUFDbEIscUNBQXFCOztJQUNyQiwyQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSURhdGF0YWJsZVNldHRpbmcgfSBmcm9tICcuLi9pbnRlcmZhY2UvSURhdGF0YWJsZVNldHRpbmcnO1xuaW1wb3J0IHsgSUhlYWRlciB9IGZyb20gJy4uL2ludGVyZmFjZS9JSGVhZGVyJztcbmltcG9ydCB7IElJZE9iamVjdCB9IGZyb20gJy4uL2ludGVyZmFjZS9JSWRPYmplY3QnO1xuaW1wb3J0IHsgSVJvdyB9IGZyb20gJy4uL2ludGVyZmFjZS9JUm93JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2R0LWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIEBDb250ZW50Q2hpbGQoJ3Jvd0NvbW1hbmQnLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dUbXBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpIGlzU2hvd0NoZWNrYm94ID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNTaG93Um93TnVtYmVyID0gdHJ1ZTtcblxuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KClcbiAgc2V0IGRhdGF0YWJsZVNldHRpbmcodjogSURhdGF0YWJsZVNldHRpbmcpIHtcbiAgICB0aGlzLmRhdGF0YWJsZVNldHRpbmckLm5leHQodik7XG4gIH1cbiAgZ2V0IGRhdGF0YWJsZVNldHRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlU2V0dGluZyQuZ2V0VmFsdWUoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGF0YSh2OiBJSWRPYmplY3RbXSkge1xuICAgIHRoaXMuZGF0YSQubmV4dCh2KTtcbiAgfVxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhJC5nZXRWYWx1ZSgpO1xuICB9XG4gIEBPdXRwdXQoKSBzb3J0Q29tbWFuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUhlYWRlcj4oKTtcbiAgQE91dHB1dCgpIGNoZWNrUm93Q29tbWFuZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgcHJpdmF0ZSBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgZGF0YXRhYmxlU2V0dGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElEYXRhdGFibGVTZXR0aW5nPihudWxsKTtcbiAgcHJpdmF0ZSBkYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUlkT2JqZWN0W10+KFtdKTtcblxuICByb3dzOiBJUm93W10gPSBbXTtcbiAgZm9vdGVyczogSVJvd1tdID0gW107XG4gIGhlYWRlckNoZWNrZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN1Yi5hZGQoY29tYmluZUxhdGVzdChcbiAgICAgIHRoaXMuZGF0YXRhYmxlU2V0dGluZyQsXG4gICAgICB0aGlzLmRhdGEkXG4gICAgKS5waXBlKFxuICAgICAgZmlsdGVyKChbZGF0YXRhYmxlU2V0dGluZywgZGF0YV0pID0+IGRhdGF0YWJsZVNldHRpbmcgPyB0cnVlIDogZmFsc2UpXG4gICAgKS5zdWJzY3JpYmUoKFtkYXRhdGFibGVTZXR0aW5nLCBkYXRhXSkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIoKSB7XG4gICAgdGhpcy5yb3dzID0gW107XG4gICAgdGhpcy5mb290ZXJzID0gW107XG5cbiAgICB0aGlzLmFkZFJvd3MoKTtcbiAgICB0aGlzLmFkZFN1bW1hcnlSb3coKTtcbiAgfVxuXG4gIGNoYW5nZVNvcnQoc29ydEluZm86IElIZWFkZXIpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhdGFibGVTZXR0aW5nLmhlYWRlcnMpIHtcbiAgICAgIGlmIChpdGVtLnByb3BOYW1lICE9PSBzb3J0SW5mby5wcm9wTmFtZSkge1xuICAgICAgICBpdGVtLnNvcnQgPSAnbm9uZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtLnNvcnQgPSBzb3J0SW5mby5zb3J0O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNvcnRDb21tYW5kLmVtaXQoc29ydEluZm8pO1xuICB9XG5cbiAgaGVhZGVyQ2hlY2tJdChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaGVhZGVyQ2hlY2tlZCA9ICF0aGlzLmhlYWRlckNoZWNrZWQ7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgcm93WydjYmtfX2NoZWNrZWQnXSA9IHRoaXMuaGVhZGVyQ2hlY2tlZDtcbiAgICB9XG4gICAgdGhpcy5jaGVja0FsbENoZWNrYm94KCk7XG4gIH1cblxuICByb3dDaGVja0l0KGV2ZW50OiBFdmVudCwgcm93KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNoZWNrQWxsQ2hlY2tib3goKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbGxDaGVja2JveCgpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcbiAgICB0aGlzLmhlYWRlckNoZWNrZWQgPSAhdGhpcy5yb3dzLnNvbWUoYSA9PiAhYVsnY2JrX19jaGVja2VkJ10pO1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgY29uc3QgaWRzID0gdGhpcy5yb3dzLmZpbHRlcihhID0+ICEhYVsnY2JrX19jaGVja2VkJ10pLm1hcChhID0+IGEuaWQpO1xuICAgIHRoaXMuY2hlY2tSb3dDb21tYW5kLmVtaXQoaWRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUm93cygpIHtcbiAgICB0aGlzLmNoZWNrRGF0YXRhYmxlU2V0dGluZygpO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhKSB7XG4gICAgICBjb25zdCBjczogSVJvdyA9IHtcbiAgICAgICAgaWQ6IHJvdy5pZCxcbiAgICAgICAgcm93RGF0YTogcm93LFxuICAgICAgICBjb2x1bW5zOiBbXVxuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGF0YWJsZVNldHRpbmcuaGVhZGVycykge1xuICAgICAgICBpZiAoIWl0ZW0uaXNFbmFibGVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZ2ID0gcm93W2l0ZW0ucHJvcE5hbWVdO1xuICAgICAgICBpZiAoaXRlbS5jb252ZXJ0ZXIpIHtcbiAgICAgICAgICB2diA9IGl0ZW0uY29udmVydGVyLnRvKHZ2KTtcbiAgICAgICAgfVxuICAgICAgICBjcy5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgIGlzSHRtbDogaXRlbS5pc0h0bWwsXG4gICAgICAgICAgY29udGVudDogdnZcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJvd3MucHVzaChjcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdW1tYXJ5Um93KCkge1xuICAgIHRoaXMuY2hlY2tEYXRhdGFibGVTZXR0aW5nKCk7XG5cbiAgICBjb25zdCBmczogSVJvdyA9IHtcbiAgICAgIGlkOiAnJyxcbiAgICAgIHJvd0RhdGE6IHsgaWQ6ICcnIH0sXG4gICAgICBjb2x1bW5zOiBbXVxuICAgIH07XG4gICAgaWYgKCF0aGlzLmRhdGF0YWJsZVNldHRpbmcuaGVhZGVycy5zb21lKGEgPT4gYS5pc1N1bSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YXRhYmxlU2V0dGluZy5oZWFkZXJzKSB7XG4gICAgICBpZiAoIWl0ZW0uaXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpdGVtLmlzU3VtKSB7XG4gICAgICAgIGZzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgaXNIdG1sOiBpdGVtLmlzSHRtbCxcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCB0VG90YWwgPSAwO1xuICAgICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhKSB7XG4gICAgICAgIGNvbnN0IHZ2ID0gcm93W2l0ZW0ucHJvcE5hbWVdO1xuICAgICAgICB0VG90YWwgKz0gK3Z2O1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XG4gICAgICAgIHRUb3RhbCA9IGl0ZW0uY29udmVydGVyLnRvKHRUb3RhbCk7XG4gICAgICB9XG4gICAgICBmcy5jb2x1bW5zLnB1c2goe1xuICAgICAgICBpc0h0bWw6IGl0ZW0uaXNIdG1sLFxuICAgICAgICBjb250ZW50OiB0VG90YWxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmZvb3RlcnMucHVzaChmcyk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRGF0YXRhYmxlU2V0dGluZygpIHtcbiAgICBpZiAoIXRoaXMuZGF0YXRhYmxlU2V0dGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwbGVhc2Ugc2V0IHVwIHRoZSBkYXRhdGFibGVTZXR0aW5nIHByb3BlcnR5Jyk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==