UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

303 lines 24.3 kB
/** * @fileoverview added by tsickle * Generated from: src/table-data.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __read, __spread, __values } from "tslib"; /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { Injectable } from '@angular/core'; import { BehaviorSubject, combineLatest, Subject } from 'rxjs'; import { debounceTime, distinctUntilChanged, filter, map, skip, switchMap, takeUntil } from 'rxjs/operators'; var NzTableDataService = /** @class */ (function () { function NzTableDataService() { var _this = this; this.destroy$ = new Subject(); this.pageIndex$ = new BehaviorSubject(1); this.frontPagination$ = new BehaviorSubject(true); this.pageSize$ = new BehaviorSubject(10); this.listOfData$ = new BehaviorSubject([]); this.pageIndexDistinct$ = this.pageIndex$.pipe(distinctUntilChanged()); this.pageSizeDistinct$ = this.pageSize$.pipe(distinctUntilChanged()); this.listOfCalcOperator$ = new BehaviorSubject([]); this.queryParams$ = combineLatest([ this.pageIndexDistinct$, this.pageSizeDistinct$, this.listOfCalcOperator$ ]).pipe(debounceTime(0), skip(1), map((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = __read(_a, 3), pageIndex = _b[0], pageSize = _b[1], listOfCalc = _b[2]; return { pageIndex: pageIndex, pageSize: pageSize, sort: listOfCalc .filter((/** * @param {?} item * @return {?} */ function (item) { return item.sortFn; })) .map((/** * @param {?} item * @return {?} */ function (item) { return { key: (/** @type {?} */ (item.key)), value: item.sortOrder }; })), filter: listOfCalc .filter((/** * @param {?} item * @return {?} */ function (item) { return item.filterFn; })) .map((/** * @param {?} item * @return {?} */ function (item) { return { key: (/** @type {?} */ (item.key)), value: item.filterValue }; })) }; }))); this.listOfDataAfterCalc$ = combineLatest([this.listOfData$, this.listOfCalcOperator$]).pipe(map((/** * @param {?} __0 * @return {?} */ function (_a) { var e_1, _b; var _c = __read(_a, 2), listOfData = _c[0], listOfCalcOperator = _c[1]; /** @type {?} */ var listOfDataAfterCalc = __spread(listOfData); /** @type {?} */ var listOfFilterOperator = listOfCalcOperator.filter((/** * @param {?} item * @return {?} */ function (item) { var filterValue = item.filterValue, filterFn = item.filterFn; /** @type {?} */ var isReset = filterValue === null || filterValue === undefined || (Array.isArray(filterValue) && (/** @type {?} */ (filterValue)).length === 0); return !isReset && typeof filterFn === 'function'; })); var _loop_1 = function (item) { var filterFn = item.filterFn, filterValue = item.filterValue; listOfDataAfterCalc = listOfDataAfterCalc.filter((/** * @param {?} data * @return {?} */ function (data) { return ((/** @type {?} */ (filterFn)))(filterValue, data); })); }; try { for (var listOfFilterOperator_1 = __values(listOfFilterOperator), listOfFilterOperator_1_1 = listOfFilterOperator_1.next(); !listOfFilterOperator_1_1.done; listOfFilterOperator_1_1 = listOfFilterOperator_1.next()) { var item = listOfFilterOperator_1_1.value; _loop_1(item); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (listOfFilterOperator_1_1 && !listOfFilterOperator_1_1.done && (_b = listOfFilterOperator_1.return)) _b.call(listOfFilterOperator_1); } finally { if (e_1) throw e_1.error; } } /** @type {?} */ var listOfSortOperator = listOfCalcOperator .filter((/** * @param {?} item * @return {?} */ function (item) { return item.sortOrder !== null && typeof item.sortFn === 'function'; })) .sort((/** * @param {?} a * @param {?} b * @return {?} */ function (a, b) { return +b.sortPriority - +a.sortPriority; })); listOfDataAfterCalc.sort((/** * @param {?} record1 * @param {?} record2 * @return {?} */ function (record1, record2) { var e_2, _a; try { for (var listOfSortOperator_1 = __values(listOfSortOperator), listOfSortOperator_1_1 = listOfSortOperator_1.next(); !listOfSortOperator_1_1.done; listOfSortOperator_1_1 = listOfSortOperator_1.next()) { var item = listOfSortOperator_1_1.value; var sortFn = item.sortFn, sortOrder = item.sortOrder; if (sortFn && sortOrder) { /** @type {?} */ var compareResult = ((/** @type {?} */ (sortFn)))(record1, record2, sortOrder); if (compareResult !== 0) { return sortOrder === 'ascend' ? compareResult : -compareResult; } } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (listOfSortOperator_1_1 && !listOfSortOperator_1_1.done && (_a = listOfSortOperator_1.return)) _a.call(listOfSortOperator_1); } finally { if (e_2) throw e_2.error; } } return 0; })); return listOfDataAfterCalc; }))); this.listOfFrontEndCurrentPageData$ = combineLatest([this.pageIndexDistinct$, this.pageSizeDistinct$, this.listOfDataAfterCalc$]).pipe(takeUntil(this.destroy$), filter((/** * @param {?} value * @return {?} */ function (value) { var _a = __read(value, 3), pageIndex = _a[0], pageSize = _a[1], listOfData = _a[2]; /** @type {?} */ var maxPageIndex = Math.ceil(listOfData.length / pageSize) || 1; return pageIndex <= maxPageIndex; })), map((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = __read(_a, 3), pageIndex = _b[0], pageSize = _b[1], listOfData = _b[2]; return listOfData.slice((pageIndex - 1) * pageSize, pageIndex * pageSize); }))); this.listOfCurrentPageData$ = this.frontPagination$.pipe(switchMap((/** * @param {?} pagination * @return {?} */ function (pagination) { return (pagination ? _this.listOfFrontEndCurrentPageData$ : _this.listOfData$); }))); this.total$ = this.frontPagination$.pipe(switchMap((/** * @param {?} pagination * @return {?} */ function (pagination) { return (pagination ? _this.listOfDataAfterCalc$ : _this.listOfData$); })), map((/** * @param {?} list * @return {?} */ function (list) { return list.length; })), distinctUntilChanged()); } /** * @param {?} size * @return {?} */ NzTableDataService.prototype.updatePageSize = /** * @param {?} size * @return {?} */ function (size) { this.pageSize$.next(size); }; /** * @param {?} pagination * @return {?} */ NzTableDataService.prototype.updateFrontPagination = /** * @param {?} pagination * @return {?} */ function (pagination) { this.frontPagination$.next(pagination); }; /** * @param {?} index * @return {?} */ NzTableDataService.prototype.updatePageIndex = /** * @param {?} index * @return {?} */ function (index) { this.pageIndex$.next(index); }; /** * @param {?} list * @return {?} */ NzTableDataService.prototype.updateListOfData = /** * @param {?} list * @return {?} */ function (list) { this.listOfData$.next(list); }; /** * @return {?} */ NzTableDataService.prototype.ngOnDestroy = /** * @return {?} */ function () { this.destroy$.next(); this.destroy$.complete(); }; NzTableDataService.decorators = [ { type: Injectable } ]; /** @nocollapse */ NzTableDataService.ctorParameters = function () { return []; }; return NzTableDataService; }()); export { NzTableDataService }; if (false) { /** * @type {?} * @private */ NzTableDataService.prototype.destroy$; /** * @type {?} * @private */ NzTableDataService.prototype.pageIndex$; /** * @type {?} * @private */ NzTableDataService.prototype.frontPagination$; /** * @type {?} * @private */ NzTableDataService.prototype.pageSize$; /** * @type {?} * @private */ NzTableDataService.prototype.listOfData$; /** @type {?} */ NzTableDataService.prototype.pageIndexDistinct$; /** @type {?} */ NzTableDataService.prototype.pageSizeDistinct$; /** @type {?} */ NzTableDataService.prototype.listOfCalcOperator$; /** @type {?} */ NzTableDataService.prototype.queryParams$; /** * @type {?} * @private */ NzTableDataService.prototype.listOfDataAfterCalc$; /** * @type {?} * @private */ NzTableDataService.prototype.listOfFrontEndCurrentPageData$; /** @type {?} */ NzTableDataService.prototype.listOfCurrentPageData$; /** @type {?} */ NzTableDataService.prototype.total$; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC90YWJsZS8iLCJzb3VyY2VzIjpbInNyYy90YWJsZS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdHO0lBK0dFO1FBQUEsaUJBQWdCO1FBN0dSLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUN0RCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUMsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDN0QsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLHNCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNoRSx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FTdkMsRUFBRSxDQUFDLENBQUM7UUFDTixpQkFBWSxHQUFtQyxhQUFhLENBQUM7WUFDM0QsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUI7U0FDekIsQ0FBQyxDQUFDLElBQUksQ0FDTCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUc7Ozs7UUFBQyxVQUFDLEVBQWlDO2dCQUFqQyxrQkFBaUMsRUFBaEMsaUJBQVMsRUFBRSxnQkFBUSxFQUFFLGtCQUFVO1lBQ25DLE9BQU87Z0JBQ0wsU0FBUyxXQUFBO2dCQUNULFFBQVEsVUFBQTtnQkFDUixJQUFJLEVBQUUsVUFBVTtxQkFDYixNQUFNOzs7O2dCQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLE1BQU0sRUFBWCxDQUFXLEVBQUM7cUJBQzNCLEdBQUc7Ozs7Z0JBQUMsVUFBQSxJQUFJO29CQUNQLE9BQU87d0JBQ0wsR0FBRyxFQUFFLG1CQUFBLElBQUksQ0FBQyxHQUFHLEVBQUM7d0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUN0QixDQUFDO2dCQUNKLENBQUMsRUFBQztnQkFDSixNQUFNLEVBQUUsVUFBVTtxQkFDZixNQUFNOzs7O2dCQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLFFBQVEsRUFBYixDQUFhLEVBQUM7cUJBQzdCLEdBQUc7Ozs7Z0JBQUMsVUFBQSxJQUFJO29CQUNQLE9BQU87d0JBQ0wsR0FBRyxFQUFFLG1CQUFBLElBQUksQ0FBQyxHQUFHLEVBQUM7d0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO3FCQUN4QixDQUFDO2dCQUNKLENBQUMsRUFBQzthQUNMLENBQUM7UUFDSixDQUFDLEVBQUMsQ0FDSCxDQUFDO1FBQ00seUJBQW9CLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0YsR0FBRzs7OztRQUFDLFVBQUMsRUFBZ0M7O2dCQUFoQyxrQkFBZ0MsRUFBL0Isa0JBQVUsRUFBRSwwQkFBa0I7O2dCQUM5QixtQkFBbUIsWUFBTyxVQUFVLENBQUM7O2dCQUNuQyxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNOzs7O1lBQUMsVUFBQSxJQUFJO2dCQUNqRCxJQUFBLDhCQUFXLEVBQUUsd0JBQVE7O29CQUN2QixPQUFPLEdBQUcsV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxtQkFBQSxXQUFXLEVBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUM5SCxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsQ0FBQztZQUNwRCxDQUFDLEVBQUM7b0NBQ1MsSUFBSTtnQkFDTCxJQUFBLHdCQUFRLEVBQUUsOEJBQVc7Z0JBQzdCLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLE1BQU07Ozs7Z0JBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxDQUFDLG1CQUFBLFFBQVEsRUFBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBaEQsQ0FBZ0QsRUFBQyxDQUFDOzs7Z0JBRjdHLEtBQW1CLElBQUEseUJBQUEsU0FBQSxvQkFBb0IsQ0FBQSwwREFBQTtvQkFBbEMsSUFBTSxJQUFJLGlDQUFBOzRCQUFKLElBQUk7aUJBR2Q7Ozs7Ozs7Ozs7Z0JBQ0ssa0JBQWtCLEdBQUcsa0JBQWtCO2lCQUMxQyxNQUFNOzs7O1lBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUE1RCxDQUE0RCxFQUFDO2lCQUM1RSxJQUFJOzs7OztZQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQWpDLENBQWlDLEVBQUM7WUFDcEQsbUJBQW1CLENBQUMsSUFBSTs7Ozs7WUFBQyxVQUFDLE9BQU8sRUFBRSxPQUFPOzs7b0JBQ3hDLEtBQW1CLElBQUEsdUJBQUEsU0FBQSxrQkFBa0IsQ0FBQSxzREFBQSxzRkFBRTt3QkFBbEMsSUFBTSxJQUFJLCtCQUFBO3dCQUNMLElBQUEsb0JBQU0sRUFBRSwwQkFBUzt3QkFDekIsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFOztnQ0FDakIsYUFBYSxHQUFHLENBQUMsbUJBQUEsTUFBTSxFQUFpQixDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7NEJBQzVFLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtnQ0FDdkIsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDOzZCQUNoRTt5QkFDRjtxQkFDRjs7Ozs7Ozs7O2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxFQUFDLENBQUM7WUFDSCxPQUFPLG1CQUFtQixDQUFDO1FBQzdCLENBQUMsRUFBQyxDQUNILENBQUM7UUFDTSxtQ0FBOEIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2SSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixNQUFNOzs7O1FBQUMsVUFBQSxLQUFLO1lBQ0osSUFBQSxxQkFBeUMsRUFBeEMsaUJBQVMsRUFBRSxnQkFBUSxFQUFFLGtCQUFtQjs7Z0JBQ3pDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNqRSxPQUFPLFNBQVMsSUFBSSxZQUFZLENBQUM7UUFDbkMsQ0FBQyxFQUFDLEVBQ0YsR0FBRzs7OztRQUFDLFVBQUMsRUFBaUM7Z0JBQWpDLGtCQUFpQyxFQUFoQyxpQkFBUyxFQUFFLGdCQUFRLEVBQUUsa0JBQVU7WUFDbkMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDNUUsQ0FBQyxFQUFDLENBQ0gsQ0FBQztRQUNGLDJCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ2pELFNBQVM7Ozs7UUFBQyxVQUFBLFVBQVUsSUFBSSxPQUFBLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxXQUFXLENBQUMsRUFBckUsQ0FBcUUsRUFBQyxDQUMvRixDQUFDO1FBQ0YsV0FBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ2pDLFNBQVM7Ozs7UUFBQyxVQUFBLFVBQVUsSUFBSSxPQUFBLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxXQUFXLENBQUMsRUFBM0QsQ0FBMkQsRUFBQyxFQUNwRixHQUFHOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsTUFBTSxFQUFYLENBQVcsRUFBQyxFQUN4QixvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBY2EsQ0FBQzs7Ozs7SUFaaEIsMkNBQWM7Ozs7SUFBZCxVQUFlLElBQVk7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7Ozs7SUFDRCxrREFBcUI7Ozs7SUFBckIsVUFBc0IsVUFBbUI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDOzs7OztJQUNELDRDQUFlOzs7O0lBQWYsVUFBZ0IsS0FBYTtRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOzs7OztJQUNELDZDQUFnQjs7OztJQUFoQixVQUFpQixJQUFtQjtRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDOzs7O0lBRUQsd0NBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7O2dCQW5IRixVQUFVOzs7O0lBb0hYLHlCQUFDO0NBQUEsQUFwSEQsSUFvSEM7U0FuSFksa0JBQWtCOzs7Ozs7SUFDN0Isc0NBQWlDOzs7OztJQUNqQyx3Q0FBb0Q7Ozs7O0lBQ3BELDhDQUE4RDs7Ozs7SUFDOUQsdUNBQW9EOzs7OztJQUNwRCx5Q0FBNkQ7O0lBQzdELGdEQUFrRTs7SUFDbEUsK0NBQWdFOztJQUNoRSxpREFTTTs7SUFDTiwwQ0E2QkU7Ozs7O0lBQ0Ysa0RBNkJFOzs7OztJQUNGLDREQVVFOztJQUNGLG9EQUVFOztJQUNGLG9DQUlFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFsaWJhYmEuY29tIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2tpcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOelRhYmxlRGF0YSwgTnpUYWJsZUZpbHRlckZuLCBOelRhYmxlRmlsdGVyVmFsdWUsIE56VGFibGVRdWVyeVBhcmFtcywgTnpUYWJsZVNvcnRGbiwgTnpUYWJsZVNvcnRPcmRlciB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTnpUYWJsZURhdGFTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgcGFnZUluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcbiAgcHJpdmF0ZSBmcm9udFBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBwYWdlU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMTApO1xuICBwcml2YXRlIGxpc3RPZkRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOelRhYmxlRGF0YVtdPihbXSk7XG4gIHBhZ2VJbmRleERpc3RpbmN0JCA9IHRoaXMucGFnZUluZGV4JC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICBwYWdlU2l6ZURpc3RpbmN0JCA9IHRoaXMucGFnZVNpemUkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIGxpc3RPZkNhbGNPcGVyYXRvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIEFycmF5PHtcbiAgICAgIGtleT86IHN0cmluZztcbiAgICAgIHNvcnRGbjogTnpUYWJsZVNvcnRGbiB8IG51bGwgfCBib29sZWFuO1xuICAgICAgc29ydE9yZGVyOiBOelRhYmxlU29ydE9yZGVyO1xuICAgICAgZmlsdGVyRm46IE56VGFibGVGaWx0ZXJGbiB8IG51bGwgfCBib29sZWFuO1xuICAgICAgZmlsdGVyVmFsdWU6IE56VGFibGVGaWx0ZXJWYWx1ZTtcbiAgICAgIHNvcnRQcmlvcml0eTogbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9PlxuICA+KFtdKTtcbiAgcXVlcnlQYXJhbXMkOiBPYnNlcnZhYmxlPE56VGFibGVRdWVyeVBhcmFtcz4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnBhZ2VJbmRleERpc3RpbmN0JCxcbiAgICB0aGlzLnBhZ2VTaXplRGlzdGluY3QkLFxuICAgIHRoaXMubGlzdE9mQ2FsY09wZXJhdG9yJFxuICBdKS5waXBlKFxuICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICBza2lwKDEpLFxuICAgIG1hcCgoW3BhZ2VJbmRleCwgcGFnZVNpemUsIGxpc3RPZkNhbGNdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlSW5kZXgsXG4gICAgICAgIHBhZ2VTaXplLFxuICAgICAgICBzb3J0OiBsaXN0T2ZDYWxjXG4gICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc29ydEZuKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5ISxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uc29ydE9yZGVyXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICBmaWx0ZXI6IGxpc3RPZkNhbGNcbiAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maWx0ZXJGbilcbiAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAga2V5OiBpdGVtLmtleSEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmZpbHRlclZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICB9O1xuICAgIH0pXG4gICk7XG4gIHByaXZhdGUgbGlzdE9mRGF0YUFmdGVyQ2FsYyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxpc3RPZkRhdGEkLCB0aGlzLmxpc3RPZkNhbGNPcGVyYXRvciRdKS5waXBlKFxuICAgIG1hcCgoW2xpc3RPZkRhdGEsIGxpc3RPZkNhbGNPcGVyYXRvcl0pID0+IHtcbiAgICAgIGxldCBsaXN0T2ZEYXRhQWZ0ZXJDYWxjID0gWy4uLmxpc3RPZkRhdGFdO1xuICAgICAgY29uc3QgbGlzdE9mRmlsdGVyT3BlcmF0b3IgPSBsaXN0T2ZDYWxjT3BlcmF0b3IuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlclZhbHVlLCBmaWx0ZXJGbiB9ID0gaXRlbTtcbiAgICAgICAgY29uc3QgaXNSZXNldCA9IGZpbHRlclZhbHVlID09PSBudWxsIHx8IGZpbHRlclZhbHVlID09PSB1bmRlZmluZWQgfHwgKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpICYmIGZpbHRlclZhbHVlIS5sZW5ndGggPT09IDApO1xuICAgICAgICByZXR1cm4gIWlzUmVzZXQgJiYgdHlwZW9mIGZpbHRlckZuID09PSAnZnVuY3Rpb24nO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdE9mRmlsdGVyT3BlcmF0b3IpIHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJGbiwgZmlsdGVyVmFsdWUgfSA9IGl0ZW07XG4gICAgICAgIGxpc3RPZkRhdGFBZnRlckNhbGMgPSBsaXN0T2ZEYXRhQWZ0ZXJDYWxjLmZpbHRlcihkYXRhID0+IChmaWx0ZXJGbiBhcyBOelRhYmxlRmlsdGVyRm4pKGZpbHRlclZhbHVlLCBkYXRhKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaXN0T2ZTb3J0T3BlcmF0b3IgPSBsaXN0T2ZDYWxjT3BlcmF0b3JcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc29ydE9yZGVyICE9PSBudWxsICYmIHR5cGVvZiBpdGVtLnNvcnRGbiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+ICtiLnNvcnRQcmlvcml0eSAtICthLnNvcnRQcmlvcml0eSk7XG4gICAgICBsaXN0T2ZEYXRhQWZ0ZXJDYWxjLnNvcnQoKHJlY29yZDEsIHJlY29yZDIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3RPZlNvcnRPcGVyYXRvcikge1xuICAgICAgICAgIGNvbnN0IHsgc29ydEZuLCBzb3J0T3JkZXIgfSA9IGl0ZW07XG4gICAgICAgICAgaWYgKHNvcnRGbiAmJiBzb3J0T3JkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVSZXN1bHQgPSAoc29ydEZuIGFzIE56VGFibGVTb3J0Rm4pKHJlY29yZDEsIHJlY29yZDIsIHNvcnRPcmRlcik7XG4gICAgICAgICAgICBpZiAoY29tcGFyZVJlc3VsdCAhPT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjZW5kJyA/IGNvbXBhcmVSZXN1bHQgOiAtY29tcGFyZVJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaXN0T2ZEYXRhQWZ0ZXJDYWxjO1xuICAgIH0pXG4gICk7XG4gIHByaXZhdGUgbGlzdE9mRnJvbnRFbmRDdXJyZW50UGFnZURhdGEkID0gY29tYmluZUxhdGVzdChbdGhpcy5wYWdlSW5kZXhEaXN0aW5jdCQsIHRoaXMucGFnZVNpemVEaXN0aW5jdCQsIHRoaXMubGlzdE9mRGF0YUFmdGVyQ2FsYyRdKS5waXBlKFxuICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICBmaWx0ZXIodmFsdWUgPT4ge1xuICAgICAgY29uc3QgW3BhZ2VJbmRleCwgcGFnZVNpemUsIGxpc3RPZkRhdGFdID0gdmFsdWU7XG4gICAgICBjb25zdCBtYXhQYWdlSW5kZXggPSBNYXRoLmNlaWwobGlzdE9mRGF0YS5sZW5ndGggLyBwYWdlU2l6ZSkgfHwgMTtcbiAgICAgIHJldHVybiBwYWdlSW5kZXggPD0gbWF4UGFnZUluZGV4O1xuICAgIH0pLFxuICAgIG1hcCgoW3BhZ2VJbmRleCwgcGFnZVNpemUsIGxpc3RPZkRhdGFdKSA9PiB7XG4gICAgICByZXR1cm4gbGlzdE9mRGF0YS5zbGljZSgocGFnZUluZGV4IC0gMSkgKiBwYWdlU2l6ZSwgcGFnZUluZGV4ICogcGFnZVNpemUpO1xuICAgIH0pXG4gICk7XG4gIGxpc3RPZkN1cnJlbnRQYWdlRGF0YSQgPSB0aGlzLmZyb250UGFnaW5hdGlvbiQucGlwZShcbiAgICBzd2l0Y2hNYXAocGFnaW5hdGlvbiA9PiAocGFnaW5hdGlvbiA/IHRoaXMubGlzdE9mRnJvbnRFbmRDdXJyZW50UGFnZURhdGEkIDogdGhpcy5saXN0T2ZEYXRhJCkpXG4gICk7XG4gIHRvdGFsJCA9IHRoaXMuZnJvbnRQYWdpbmF0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcChwYWdpbmF0aW9uID0+IChwYWdpbmF0aW9uID8gdGhpcy5saXN0T2ZEYXRhQWZ0ZXJDYWxjJCA6IHRoaXMubGlzdE9mRGF0YSQpKSxcbiAgICBtYXAobGlzdCA9PiBsaXN0Lmxlbmd0aCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHVwZGF0ZVBhZ2VTaXplKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemUkLm5leHQoc2l6ZSk7XG4gIH1cbiAgdXBkYXRlRnJvbnRQYWdpbmF0aW9uKHBhZ2luYXRpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZyb250UGFnaW5hdGlvbiQubmV4dChwYWdpbmF0aW9uKTtcbiAgfVxuICB1cGRhdGVQYWdlSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4JC5uZXh0KGluZGV4KTtcbiAgfVxuICB1cGRhdGVMaXN0T2ZEYXRhKGxpc3Q6IE56VGFibGVEYXRhW10pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RPZkRhdGEkLm5leHQobGlzdCk7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7fVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==