UNPKG

@yoyoboot/l-52abp-ng

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.13.

267 lines 31 kB
import { AppComponentBaseDirective } from './app-component-base'; import { Directive } from '@angular/core'; import { PagedRequestDto, SortType } from './interfaces'; import * as i0 from "@angular/core"; /** * 分页列表基类,包含一些分页通用方法。注意 派生类中的 `ngOnInit` 会覆盖此类中的此方法。 */ export class PagedListingComponentBaseDirective extends AppComponentBaseDirective { /** * 构造函数 * @param injector 注入器 * @param nzModalRef (optional) nzModal 模态框关闭、销毁等处理帮助,只能在modal中打开的组件中注入,非modal打开的组件注入null即可,否则报错。因为nzModalRef是建立在nzModalComponent之上的。 */ constructor(injector) { super(injector); /** 分页大小 */ this.pageSize = this.appConfig.grid.defaultPageSize; /** 当前页 */ this.pageSizeOptions = this.appConfig.grid.defaultPageSizes; /** 当前页 */ this.pageNumber = 1; /** 总页数 */ this.totalPages = 1; /** 数据是否处于加载状态 */ this.isTableLoading = true; /** 是否全部选中 */ this.allChecked = false; /** 全选框是否禁用 */ this.allCheckboxDisabled = false; /** 选择框非全选状态,控制全选框的样式:☒ */ this.checkboxIndeterminate = false; /** 已选中数据项列表 */ this.selectedDataItems = []; /** 排序条件 - 表达式 */ this.sortConditions = []; /** 排序 */ this.sorting = undefined; /** 模糊搜索的文本 */ this.filterText = ''; /** 数据表的数据源 */ this.dataList = []; /** 布尔类型表格列头过滤列表 */ this.booleanFilterList = [ { text: this.l('All'), value: 'All' }, { text: this.l('Yes'), value: true }, { text: this.l('No'), value: false } ]; } ngOnInit() { this.refresh(); } /** 刷新表格数据 */ refresh() { this.restCheckStatus(this.dataList); this.getDataPage(this.pageNumber); } /** 刷新表格数据并跳转到第一页(`pageNumber = 1`) */ refreshGoFirstPage() { this.pageNumber = 1; this.restCheckStatus(this.dataList); this.getDataPage(this.pageNumber); } /** 获取数据页 */ getDataPage(page) { const req = new PagedRequestDto(); req.maxResultCount = this.pageSize; req.skipCount = (page - 1) * this.pageSize; req.sorting = this.sorting; this.isTableLoading = true; this.fetchDataList(req, page, () => { this.isTableLoading = false; // 更新全选框禁用状态 this.refreshAllCheckBoxDisabled(); }); } /** 刷新全选框是否禁用 */ refreshAllCheckBoxDisabled() { this.allCheckboxDisabled = this.dataList.length <= 0; } /** 当页码发生改变 */ pageNumberChange() { if (this.pageNumber > 0) { this.refresh(); } } /** * 选中全部记录 * @param value 是否选中 */ checkAll(value) { this.dataList.forEach(data => data.checked = this.allChecked); this.refreshCheckStatus(this.dataList); } /** * 刷新选中状态 * @param entityList 数据集合 */ refreshCheckStatus(entityList) { // 是否全部选中 const allChecked = entityList.every(value => value.checked === true); // 是否全部未选中 const allUnChecked = entityList.every(value => !value.checked); // 是否全选 this.allChecked = allChecked; // 全选框样式控制 this.checkboxIndeterminate = !allChecked && !allUnChecked; // 已选中数据 this.selectedDataItems = entityList.filter(value => value.checked); } /** * 重置选中状态 * @param entityList 数据集合 */ restCheckStatus(entityList) { if (!Array.isArray(entityList)) { entityList = this.dataList; } this.allChecked = false; this.checkboxIndeterminate = false; // 已选中数据 this.selectedDataItems = []; // 设置数据为未选中状态 entityList.forEach(value => (value.checked = false)); } /** * 计算分页 * @param result 分页结果Dto * @param pageNumber 当前页码 */ showPaging(result) { this.totalItems = result.totalCount; this.totalPages = Math.ceil(this.totalItems / this.pageSize); } /** 排序条件发生改变 */ onSortChange(sortConditions, sorting) { this.sortConditions = sortConditions !== null && sortConditions !== void 0 ? sortConditions : []; this.sorting = sorting; this.refresh(); } /** 数据表格排序 */ gridSort(sort) { this.sorting = undefined; this.sortConditions = []; let ascOrDesc = sort.value; // 'ascend' or 'descend' or null const filedName = sort.key; // 字段名 if (ascOrDesc) { ascOrDesc = abp.utils.replaceAll(ascOrDesc, 'end', ''); const args = ['{0} {1}', filedName, ascOrDesc]; const sortingStr = abp.utils.formatString.apply(this, args); this.sorting = sortingStr; this.sortConditions.push({ field: filedName, order: 0, type: ascOrDesc === 'asc' ? SortType.Asc : SortType.Desc }); } this.refresh(); } /** * 权限列表验证 * @param permissions 权限名称列表 */ isGrantedAny(...permissions) { if (!permissions) { return false; } for (const permission of permissions) { if (this.isGranted(permission)) { return true; } } return false; } /** st change事件 */ stChange(e) { switch (e.type) { case 'checkbox': // 多选 const checked = e.checkbox; this.refreshCheckStatus(checked); break; case 'radio': // 单选 this.refreshCheckStatus([e.radio]); break; case 'sort': // 排序 const sortMap = this.processSorting(e); this.onSortChange(this.toSortConditions(sortMap), this.toSortingString(sortMap)); break; case 'pi': // page index 修改 this.pageNumber = e.pi; this.pageNumberChange(); break; case 'ps': // page size 修改 this.pageSize = e.ps; this.refresh(); break; } } /** STChange 转 sort cond */ toSortConditions(sortMap) { if (!sortMap) { return []; } let index = 0; const sortConditions = []; // tslint:disable-next-line:forin for (const key in sortMap) { sortConditions.push({ field: key, order: index++, type: sortMap[key] }); } return sortConditions; } /** STChange 转 sorting */ toSortingString(sortMap) { if (!sortMap) { return ''; } // 处理数据 let sorting = ''; // tslint:disable-next-line:forin for (const key in sortMap) { sorting += `${key} ${sortMap[key]},`; } // 截取最后的字符串 if (sorting.endsWith(',')) { sorting = sorting.substr(0, sorting.length - 1); } return sorting; } /** 预处理sorting数据 */ processSorting(input) { // 结果集 const sortMap = {}; if (input.type !== 'sort') { return sortMap; } let sortType = SortType.None; // tslint:disable-next-line:no-string-literal const inputSortStringArr = input.sort.map['sort'].split('-'); inputSortStringArr.forEach(o => { const lastIndex = o.lastIndexOf('.'); const field = o.substring(0, lastIndex); const fieldSortType = o.substring(lastIndex + 1, o.length); sortType = SortType.None; switch (fieldSortType) { case 'descend': sortType = SortType.Desc; break; case 'ascend': sortType = SortType.Asc; break; } if (sortType !== SortType.None) { sortMap[field] = sortType; } }); return sortMap; } } PagedListingComponentBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PagedListingComponentBaseDirective, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); PagedListingComponentBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: PagedListingComponentBaseDirective, usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PagedListingComponentBaseDirective, decorators: [{ type: Directive }], ctorParameters: function () { return [{ type: i0.Injector }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZWQtbGlzdGluZy1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2wtNTJhYnAtbmcvc3JjL2NvbXBvbmVudC1iYXNlL3BhZ2VkLWxpc3RpbmctY29tcG9uZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFvQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFrQixlQUFlLEVBQWtCLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFJekY7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLGtDQUE0QyxTQUFRLHlCQUF5QjtJQTRDakc7Ozs7T0FJRztJQUNILFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBL0NsQixXQUFXO1FBQ1gsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUUvQyxVQUFVO1FBQ1Ysb0JBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2RCxVQUFVO1FBQ1YsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUVmLFVBQVU7UUFDVixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBSWYsaUJBQWlCO1FBQ2pCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXRCLGFBQWE7UUFDYixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGNBQWM7UUFDZCx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUIsMEJBQTBCO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUU5QixlQUFlO1FBQ2Ysc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBRTlCLGlCQUFpQjtRQUNqQixtQkFBYyxHQUFxQixFQUFFLENBQUM7UUFFdEMsU0FBUztRQUNULFlBQU8s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LFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDN0IsNkNBQTZDO1FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFM0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDekIsUUFBUSxhQUFhLEVBQUU7Z0JBQ3JCLEtBQUssU0FBUztvQkFDWixRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQ3hCLE1BQU07YUFDVDtZQUVELElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDM0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O2dJQXpTbUIsa0NBQWtDO29IQUFsQyxrQ0FBa0M7NEZBQWxDLGtDQUFrQztrQkFEdkQsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcENvbXBvbmVudEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2FwcC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBJbmplY3RvciwgT25Jbml0LCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElTb3J0Q29uZGl0aW9uLCBQYWdlZFJlcXVlc3REdG8sIFBhZ2VkUmVzdWx0RHRvLCBTb3J0VHlwZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTVENoYW5nZSB9IGZyb20gJ0BkZWxvbi9hYmMvc3QnO1xuXG5cbi8qKlxuICog5YiG6aG15YiX6KGo5Z+657G777yM5YyF5ZCr5LiA5Lqb5YiG6aG16YCa55So5pa55rOV44CC5rOo5oSPIOa0vueUn+exu+S4reeahCBgbmdPbkluaXRgIOS8muimhuebluatpOexu+S4reeahOatpOaWueazleOAglxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWdlZExpc3RpbmdDb21wb25lbnRCYXNlRGlyZWN0aXZlPFRFbnRpdHk+IGV4dGVuZHMgQXBwQ29tcG9uZW50QmFzZURpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqIOWIhumhteWkp+WwjyAqL1xuICBwYWdlU2l6ZSA9IHRoaXMuYXBwQ29uZmlnLmdyaWQuZGVmYXVsdFBhZ2VTaXplO1xuXG4gIC8qKiDlvZPliY3pobUgKi9cbiAgcGFnZVNpemVPcHRpb25zID0gdGhpcy5hcHBDb25maWcuZ3JpZC5kZWZhdWx0UGFnZVNpemVzO1xuXG4gIC8qKiDlvZPliY3pobUgKi9cbiAgcGFnZU51bWJlciA9IDE7XG5cbiAgLyoqIOaAu+mhteaVsCAqL1xuICB0b3RhbFBhZ2VzID0gMTtcbiAgLyoqIOaAu+iusOW9leaVsCAqL1xuICB0b3RhbEl0ZW1zOiBudW1iZXI7XG5cbiAgLyoqIOaVsOaNruaYr+WQpuWkhOS6juWKoOi9veeKtuaAgSAqL1xuICBpc1RhYmxlTG9hZGluZyA9IHRydWU7XG5cbiAgLyoqIOaYr+WQpuWFqOmDqOmAieS4rSAqL1xuICBhbGxDaGVja2VkID0gZmFsc2U7XG5cbiAgLyoqIOWFqOmAieahhuaYr+WQpuemgeeUqCAqL1xuICBhbGxDaGVja2JveERpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIOmAieaLqeahhumdnuWFqOmAieeKtuaAge+8jOaOp+WItuWFqOmAieahhueahOagt+W8j++8muKYkiAqL1xuICBjaGVja2JveEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAvKiog5bey6YCJ5Lit5pWw5o2u6aG55YiX6KGoICovXG4gIHNlbGVjdGVkRGF0YUl0ZW1zOiBhbnlbXSA9IFtdO1xuXG4gIC8qKiDmjpLluo/mnaHku7YgLSDooajovr7lvI8gKi9cbiAgc29ydENvbmRpdGlvbnM6IElTb3J0Q29uZGl0aW9uW10gPSBbXTtcblxuICAvKiog5o6S5bqPICovXG4gIHNvcnRpbmc6IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICAvKiog5qih57OK5pCc57Si55qE5paH5pysICovXG4gIGZpbHRlclRleHQgPSAnJztcblxuICAvKiog5pWw5o2u6KGo55qE5pWw5o2u5rqQICovXG4gIGRhdGFMaXN0OiBURW50aXR5W10gPSBbXTtcblxuICAvKipcbiAgICog5p6E6YCg5Ye95pWwXG4gICAqIEBwYXJhbSBpbmplY3RvciDms6jlhaXlmahcbiAgICogQHBhcmFtIG56TW9kYWxSZWYgKG9wdGlvbmFsKSBuek1vZGFsIOaooeaAgeahhuWFs+mXreOAgemUgOavgeetieWkhOeQhuW4ruWKqe+8jOWPquiDveWcqG1vZGFs5Lit5omT5byA55qE57uE5Lu25Lit5rOo5YWl77yM6Z2ebW9kYWzmiZPlvIDnmoTnu4Tku7bms6jlhaVudWxs5Y2z5Y+v77yM5ZCm5YiZ5oql6ZSZ44CC5Zug5Li6bnpNb2RhbFJlZuaYr+W7uueri+WcqG56TW9kYWxDb21wb25lbnTkuYvkuIrnmoTjgIJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqIOWIt+aWsOihqOagvOaVsOaNriAqL1xuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMucmVzdENoZWNrU3RhdHVzKHRoaXMuZGF0YUxpc3QpO1xuICAgIHRoaXMuZ2V0RGF0YVBhZ2UodGhpcy5wYWdlTnVtYmVyKTtcbiAgfVxuXG4gIC8qKiDliLfmlrDooajmoLzmlbDmja7lubbot7PovazliLDnrKzkuIDpobXvvIhgcGFnZU51bWJlciA9IDFg77yJICovXG4gIHJlZnJlc2hHb0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xuICAgIHRoaXMucmVzdENoZWNrU3RhdHVzKHRoaXMuZGF0YUxpc3QpO1xuICAgIHRoaXMuZ2V0RGF0YVBhZ2UodGhpcy5wYWdlTnVtYmVyKTtcbiAgfVxuXG4gIC8qKiDluIPlsJTnsbvlnovooajmoLzliJflpLTov4fmu6TliJfooaggKi9cbiAgYm9vbGVhbkZpbHRlckxpc3Q6IGFueVtdID0gW1xuICAgIHsgdGV4dDogdGhpcy5sKCdBbGwnKSwgdmFsdWU6ICdBbGwnIH0sXG4gICAgeyB0ZXh0OiB0aGlzLmwoJ1llcycpLCB2YWx1ZTogdHJ1ZSB9LFxuICAgIHsgdGV4dDogdGhpcy5sKCdObycpLCB2YWx1ZTogZmFsc2UgfVxuICBdO1xuXG4gIC8qKiDojrflj5bmlbDmja7pobUgKi9cbiAgZ2V0RGF0YVBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVxID0gbmV3IFBhZ2VkUmVxdWVzdER0bygpO1xuICAgIHJlcS5tYXhSZXN1bHRDb3VudCA9IHRoaXMucGFnZVNpemU7XG4gICAgcmVxLnNraXBDb3VudCA9IChwYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xuICAgIHJlcS5zb3J0aW5nID0gdGhpcy5zb3J0aW5nO1xuICAgIHRoaXMuaXNUYWJsZUxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmV0Y2hEYXRhTGlzdChyZXEsIHBhZ2UsICgpID0+IHtcbiAgICAgIHRoaXMuaXNUYWJsZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIC8vIOabtOaWsOWFqOmAieahhuemgeeUqOeKtuaAgVxuICAgICAgdGhpcy5yZWZyZXNoQWxsQ2hlY2tCb3hEaXNhYmxlZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIOWIt+aWsOWFqOmAieahhuaYr+WQpuemgeeUqCAqL1xuICByZWZyZXNoQWxsQ2hlY2tCb3hEaXNhYmxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbENoZWNrYm94RGlzYWJsZWQgPSB0aGlzLmRhdGFMaXN0Lmxlbmd0aCA8PSAwO1xuICB9XG5cblxuICAvKiog5b2T6aG156CB5Y+R55Sf5pS55Y+YICovXG4gIHBhZ2VOdW1iZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnZU51bWJlciA+IDApIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgInkuK3lhajpg6jorrDlvZVcbiAgICogQHBhcmFtIHZhbHVlIOaYr+WQpumAieS4rVxuICAgKi9cbiAgY2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFMaXN0LmZvckVhY2goZGF0YSA9PiAoZGF0YSBhcyBhbnkpLmNoZWNrZWQgPSB0aGlzLmFsbENoZWNrZWQpO1xuICAgIHRoaXMucmVmcmVzaENoZWNrU3RhdHVzKHRoaXMuZGF0YUxpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOmAieS4reeKtuaAgVxuICAgKiBAcGFyYW0gZW50aXR5TGlzdCDmlbDmja7pm4blkIhcbiAgICovXG4gIHJlZnJlc2hDaGVja1N0YXR1cyhlbnRpdHlMaXN0OiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIOaYr+WQpuWFqOmDqOmAieS4rVxuICAgIGNvbnN0IGFsbENoZWNrZWQgPSBlbnRpdHlMaXN0LmV2ZXJ5KHZhbHVlID0+IHZhbHVlLmNoZWNrZWQgPT09IHRydWUpO1xuICAgIC8vIOaYr+WQpuWFqOmDqOacqumAieS4rVxuICAgIGNvbnN0IGFsbFVuQ2hlY2tlZCA9IGVudGl0eUxpc3QuZXZlcnkodmFsdWUgPT4gIXZhbHVlLmNoZWNrZWQpO1xuICAgIC8vIOaYr+WQpuWFqOmAiVxuICAgIHRoaXMuYWxsQ2hlY2tlZCA9IGFsbENoZWNrZWQ7XG4gICAgLy8g5YWo6YCJ5qGG5qC35byP5o6n5Yi2XG4gICAgdGhpcy5jaGVja2JveEluZGV0ZXJtaW5hdGUgPSAhYWxsQ2hlY2tlZCAmJiAhYWxsVW5DaGVja2VkO1xuICAgIC8vIOW3sumAieS4reaVsOaNrlxuICAgIHRoaXMuc2VsZWN0ZWREYXRhSXRlbXMgPSBlbnRpdHlMaXN0LmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5jaGVja2VkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDph43nva7pgInkuK3nirbmgIFcbiAgICogQHBhcmFtIGVudGl0eUxpc3Qg5pWw5o2u6ZuG5ZCIXG4gICAqL1xuICByZXN0Q2hlY2tTdGF0dXMoZW50aXR5TGlzdDogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXR5TGlzdCkpIHtcbiAgICAgIGVudGl0eUxpc3QgPSB0aGlzLmRhdGFMaXN0IGFzIGFueVtdO1xuICAgIH1cbiAgICB0aGlzLmFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNoZWNrYm94SW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIC8vIOW3sumAieS4reaVsOaNrlxuICAgIHRoaXMuc2VsZWN0ZWREYXRhSXRlbXMgPSBbXTtcbiAgICAvLyDorr7nva7mlbDmja7kuLrmnKrpgInkuK3nirbmgIFcbiAgICBlbnRpdHlMaXN0LmZvckVhY2godmFsdWUgPT4gKHZhbHVlLmNoZWNrZWQgPSBmYWxzZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiuoeeul+WIhumhtVxuICAgKiBAcGFyYW0gcmVzdWx0IOWIhumhtee7k+aenER0b1xuICAgKiBAcGFyYW0gcGFnZU51bWJlciDlvZPliY3pobXnoIFcbiAgICovXG4gIHNob3dQYWdpbmcocmVzdWx0OiBQYWdlZFJlc3VsdER0byk6IHZvaWQge1xuICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3VsdC50b3RhbENvdW50O1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMgLyB0aGlzLnBhZ2VTaXplKTtcbiAgfVxuXG4gIC8qKiDmjpLluo/mnaHku7blj5HnlJ/mlLnlj5ggKi9cbiAgb25Tb3J0Q2hhbmdlKHNvcnRDb25kaXRpb25zOiBJU29ydENvbmRpdGlvbltdLCBzb3J0aW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvcnRDb25kaXRpb25zID0gc29ydENvbmRpdGlvbnMgPz8gW107XG4gICAgdGhpcy5zb3J0aW5nID0gc29ydGluZztcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKiDmlbDmja7ooajmoLzmjpLluo8gKi9cbiAgZ3JpZFNvcnQoc29ydDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zb3J0aW5nID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc29ydENvbmRpdGlvbnMgPSBbXTtcblxuICAgIGxldCBhc2NPckRlc2MgPSBzb3J0LnZhbHVlOyAvLyAnYXNjZW5kJyBvciAnZGVzY2VuZCcgb3IgbnVsbFxuICAgIGNvbnN0IGZpbGVkTmFtZSA9IHNvcnQua2V5OyAvLyDlrZfmrrXlkI1cbiAgICBpZiAoYXNjT3JEZXNjKSB7XG4gICAgICBhc2NPckRlc2MgPSBhYnAudXRpbHMucmVwbGFjZUFsbChhc2NPckRlc2MsICdlbmQnLCAnJyk7XG4gICAgICBjb25zdCBhcmdzID0gWyd7MH0gezF9JywgZmlsZWROYW1lLCBhc2NPckRlc2NdO1xuICAgICAgY29uc3Qgc29ydGluZ1N0ciA9IGFicC51dGlscy5mb3JtYXRTdHJpbmcuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB0aGlzLnNvcnRpbmcgPSBzb3J0aW5nU3RyO1xuXG4gICAgICB0aGlzLnNvcnRDb25kaXRpb25zLnB1c2goe1xuICAgICAgICBmaWVsZDogZmlsZWROYW1lLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgdHlwZTogYXNjT3JEZXNjID09PSAnYXNjJyA/IFNvcnRUeXBlLkFzYyA6IFNvcnRUeXBlLkRlc2NcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmnYPpmZDliJfooajpqozor4FcbiAgICogQHBhcmFtIHBlcm1pc3Npb25zIOadg+mZkOWQjeensOWIl+ihqFxuICAgKi9cbiAgaXNHcmFudGVkQW55KC4uLnBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghcGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5pc0dyYW50ZWQocGVybWlzc2lvbikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBzdCBjaGFuZ2Xkuovku7YgKi9cbiAgc3RDaGFuZ2UoZTogU1RDaGFuZ2UpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGUudHlwZSkge1xuICAgICAgY2FzZSAnY2hlY2tib3gnOiAvLyDlpJrpgIlcbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IGUuY2hlY2tib3g7XG4gICAgICAgIHRoaXMucmVmcmVzaENoZWNrU3RhdHVzKGNoZWNrZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JhZGlvJzogLy8g5Y2V6YCJXG4gICAgICAgIHRoaXMucmVmcmVzaENoZWNrU3RhdHVzKFtlLnJhZGlvXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc29ydCc6IC8vIOaOkuW6j1xuICAgICAgICBjb25zdCBzb3J0TWFwID0gdGhpcy5wcm9jZXNzU29ydGluZyhlKTtcbiAgICAgICAgdGhpcy5vblNvcnRDaGFuZ2UodGhpcy50b1NvcnRDb25kaXRpb25zKHNvcnRNYXApLCB0aGlzLnRvU29ydGluZ1N0cmluZyhzb3J0TWFwKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGknOiAvLyBwYWdlIGluZGV4IOS/ruaUuVxuICAgICAgICB0aGlzLnBhZ2VOdW1iZXIgPSBlLnBpO1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJDaGFuZ2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcyc6IC8vIHBhZ2Ugc2l6ZSDkv67mlLlcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGUucHM7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKiogU1RDaGFuZ2Ug6L2sIHNvcnQgY29uZCAqL1xuICBwcm90ZWN0ZWQgdG9Tb3J0Q29uZGl0aW9ucyhzb3J0TWFwOiB7IFtuYW1lOiBzdHJpbmddOiBTb3J0VHlwZSB9KTogSVNvcnRDb25kaXRpb25bXSB7XG4gICAgaWYgKCFzb3J0TWFwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBzb3J0Q29uZGl0aW9uczogSVNvcnRDb25kaXRpb25bXSA9IFtdO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxuICAgIGZvciAoY29uc3Qga2V5IGluIHNvcnRNYXApIHtcbiAgICAgIHNvcnRDb25kaXRpb25zLnB1c2goe1xuICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICBvcmRlcjogaW5kZXgrKyxcbiAgICAgICAgdHlwZTogc29ydE1hcFtrZXldXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRDb25kaXRpb25zO1xuICB9XG5cbiAgLyoqIFNUQ2hhbmdlIOi9rCBzb3J0aW5nICovXG4gIHByb3RlY3RlZCB0b1NvcnRpbmdTdHJpbmcoc29ydE1hcDogeyBbbmFtZTogc3RyaW5nXTogU29ydFR5cGUgfSk6IHN0cmluZyB7XG4gICAgaWYgKCFzb3J0TWFwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIOWkhOeQhuaVsOaNrlxuICAgIGxldCBzb3J0aW5nID0gJyc7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc29ydE1hcCkge1xuICAgICAgc29ydGluZyArPSBgJHtrZXl9ICR7c29ydE1hcFtrZXldfSxgO1xuICAgIH1cblxuICAgIC8vIOaIquWPluacgOWQjueahOWtl+espuS4slxuICAgIGlmIChzb3J0aW5nLmVuZHNXaXRoKCcsJykpIHtcbiAgICAgIHNvcnRpbmcgPSBzb3J0aW5nLnN1YnN0cigwLCBzb3J0aW5nLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0aW5nO1xuICB9XG5cbiAgLyoqIOmihOWkhOeQhnNvcnRpbmfmlbDmja4gKi9cbiAgcHJvdGVjdGVkIHByb2Nlc3NTb3J0aW5nKGlucHV0OiBTVENoYW5nZSk6IHsgW25hbWU6IHN0cmluZ106IFNvcnRUeXBlIH0ge1xuICAgIC8vIOe7k+aenOmbhlxuICAgIGNvbnN0IHNvcnRNYXA6IHsgW25hbWU6IHN0cmluZ106IFNvcnRUeXBlIH0gPSB7fTtcbiAgICBpZiAoaW5wdXQudHlwZSAhPT0gJ3NvcnQnKSB7XG4gICAgICByZXR1cm4gc29ydE1hcDtcbiAgICB9XG5cbiAgICBsZXQgc29ydFR5cGUgPSBTb3J0VHlwZS5Ob25lO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgIGNvbnN0IGlucHV0U29ydFN0cmluZ0FyciA9IGlucHV0LnNvcnQhLm1hcFsnc29ydCddLnNwbGl0KCctJyk7XG4gICAgaW5wdXRTb3J0U3RyaW5nQXJyLmZvckVhY2gobyA9PiB7XG4gICAgICBjb25zdCBsYXN0SW5kZXggPSBvLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICBjb25zdCBmaWVsZCA9IG8uc3Vic3RyaW5nKDAsIGxhc3RJbmRleCk7XG4gICAgICBjb25zdCBmaWVsZFNvcnRUeXBlID0gby5zdWJzdHJpbmcobGFzdEluZGV4ICsgMSwgby5sZW5ndGgpO1xuXG4gICAgICBzb3J0VHlwZSA9IFNvcnRUeXBlLk5vbmU7XG4gICAgICBzd2l0Y2ggKGZpZWxkU29ydFR5cGUpIHtcbiAgICAgICAgY2FzZSAnZGVzY2VuZCc6XG4gICAgICAgICAgc29ydFR5cGUgPSBTb3J0VHlwZS5EZXNjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhc2NlbmQnOlxuICAgICAgICAgIHNvcnRUeXBlID0gU29ydFR5cGUuQXNjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc29ydFR5cGUgIT09IFNvcnRUeXBlLk5vbmUpIHtcbiAgICAgICAgc29ydE1hcFtmaWVsZF0gPSBzb3J0VHlwZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzb3J0TWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaVsOaNruaKveixoeaOpeWPo++8jOW/hemhu+WunueOsFxuICAgKiBAcGFyYW0gcmVxdWVzdCDor7fmsYLlv4XpnIDlj4LmlbAgc2tpcENvdW50OiBudW1iZXI7IG1heFJlc3VsdENvdW50OiBudW1iZXI7XG4gICAqIEBwYXJhbSBwYWdlTnVtYmVyIOW9k+WJjemhteeggVxuICAgKiBAcGFyYW0gZmluaXNoZWRDYWxsYmFjayDlrozmiJDlkI7lm57osIPlh73mlbBcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBmZXRjaERhdGFMaXN0KFxuICAgIHJlcXVlc3Q6IFBhZ2VkUmVxdWVzdER0byxcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgZmluaXNoZWRDYWxsYmFjaz86ICgpID0+IHZvaWRcbiAgKTogdm9pZDtcbn1cbiJdfQ==