ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
252 lines • 21.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: src/table-data.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @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';
export class NzTableDataService {
constructor() {
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 {?}
*/
([pageIndex, pageSize, listOfCalc]) => {
return {
pageIndex,
pageSize,
sort: listOfCalc
.filter((/**
* @param {?} item
* @return {?}
*/
item => item.sortFn))
.map((/**
* @param {?} item
* @return {?}
*/
item => {
return {
key: (/** @type {?} */ (item.key)),
value: item.sortOrder
};
})),
filter: listOfCalc
.filter((/**
* @param {?} item
* @return {?}
*/
item => item.filterFn))
.map((/**
* @param {?} item
* @return {?}
*/
item => {
return {
key: (/** @type {?} */ (item.key)),
value: item.filterValue
};
}))
};
})));
this.listOfDataAfterCalc$ = combineLatest([this.listOfData$, this.listOfCalcOperator$]).pipe(map((/**
* @param {?} __0
* @return {?}
*/
([listOfData, listOfCalcOperator]) => {
/** @type {?} */
let listOfDataAfterCalc = [...listOfData];
/** @type {?} */
const listOfFilterOperator = listOfCalcOperator.filter((/**
* @param {?} item
* @return {?}
*/
item => {
const { filterValue, filterFn } = item;
/** @type {?} */
const isReset = filterValue === null || filterValue === undefined || (Array.isArray(filterValue) && (/** @type {?} */ (filterValue)).length === 0);
return !isReset && typeof filterFn === 'function';
}));
for (const item of listOfFilterOperator) {
const { filterFn, filterValue } = item;
listOfDataAfterCalc = listOfDataAfterCalc.filter((/**
* @param {?} data
* @return {?}
*/
data => ((/** @type {?} */ (filterFn)))(filterValue, data)));
}
/** @type {?} */
const listOfSortOperator = listOfCalcOperator
.filter((/**
* @param {?} item
* @return {?}
*/
item => item.sortOrder !== null && typeof item.sortFn === 'function'))
.sort((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
(a, b) => +b.sortPriority - +a.sortPriority));
listOfDataAfterCalc.sort((/**
* @param {?} record1
* @param {?} record2
* @return {?}
*/
(record1, record2) => {
for (const item of listOfSortOperator) {
const { sortFn, sortOrder } = item;
if (sortFn && sortOrder) {
/** @type {?} */
const compareResult = ((/** @type {?} */ (sortFn)))(record1, record2, sortOrder);
if (compareResult !== 0) {
return sortOrder === 'ascend' ? compareResult : -compareResult;
}
}
}
return 0;
}));
return listOfDataAfterCalc;
})));
this.listOfFrontEndCurrentPageData$ = combineLatest([this.pageIndexDistinct$, this.pageSizeDistinct$, this.listOfDataAfterCalc$]).pipe(takeUntil(this.destroy$), filter((/**
* @param {?} value
* @return {?}
*/
value => {
const [pageIndex, pageSize, listOfData] = value;
/** @type {?} */
const maxPageIndex = Math.ceil(listOfData.length / pageSize) || 1;
return pageIndex <= maxPageIndex;
})), map((/**
* @param {?} __0
* @return {?}
*/
([pageIndex, pageSize, listOfData]) => {
return listOfData.slice((pageIndex - 1) * pageSize, pageIndex * pageSize);
})));
this.listOfCurrentPageData$ = this.frontPagination$.pipe(switchMap((/**
* @param {?} pagination
* @return {?}
*/
pagination => (pagination ? this.listOfFrontEndCurrentPageData$ : this.listOfData$))));
this.total$ = this.frontPagination$.pipe(switchMap((/**
* @param {?} pagination
* @return {?}
*/
pagination => (pagination ? this.listOfDataAfterCalc$ : this.listOfData$))), map((/**
* @param {?} list
* @return {?}
*/
list => list.length)), distinctUntilChanged());
}
/**
* @param {?} size
* @return {?}
*/
updatePageSize(size) {
this.pageSize$.next(size);
}
/**
* @param {?} pagination
* @return {?}
*/
updateFrontPagination(pagination) {
this.frontPagination$.next(pagination);
}
/**
* @param {?} index
* @return {?}
*/
updatePageIndex(index) {
this.pageIndex$.next(index);
}
/**
* @param {?} list
* @return {?}
*/
updateListOfData(list) {
this.listOfData$.next(list);
}
/**
* @return {?}
*/
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
}
NzTableDataService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NzTableDataService.ctorParameters = () => [];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC90YWJsZS8iLCJzb3VyY2VzIjpbInNyYy90YWJsZS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJN0csTUFBTSxPQUFPLGtCQUFrQjtJQThHN0I7UUE3R1EsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDekIsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3RELGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUM3RCx1QkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDbEUsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQVN2QyxFQUFFLENBQUMsQ0FBQztRQUNOLGlCQUFZLEdBQW1DLGFBQWEsQ0FBQztZQUMzRCxJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLG1C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Ozs7OztJQUM5RCx1Q0FBb0Q7Ozs7O0lBQ3BELHlDQUE2RDs7SUFDN0QsZ0RBQWtFOztJQUNsRSwrQ0FBZ0U7O0lBQ2hFLGlEQVNNOztJQUNOLDBDQTZCRTs7Ozs7SUFDRixrREE2QkU7Ozs7O0lBQ0YsNERBVUU7O0lBQ0Ysb0RBRUU7O0lBQ0Ysb0NBSUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBza2lwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE56VGFibGVEYXRhLCBOelRhYmxlRmlsdGVyRm4sIE56VGFibGVGaWx0ZXJWYWx1ZSwgTnpUYWJsZVF1ZXJ5UGFyYW1zLCBOelRhYmxlU29ydEZuLCBOelRhYmxlU29ydE9yZGVyIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOelRhYmxlRGF0YVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBwYWdlSW5kZXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xuICBwcml2YXRlIGZyb250UGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxMCk7XG4gIHByaXZhdGUgbGlzdE9mRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE56VGFibGVEYXRhW10+KFtdKTtcbiAgcGFnZUluZGV4RGlzdGluY3QkID0gdGhpcy5wYWdlSW5kZXgkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIHBhZ2VTaXplRGlzdGluY3QkID0gdGhpcy5wYWdlU2l6ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgbGlzdE9mQ2FsY09wZXJhdG9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgQXJyYXk8e1xuICAgICAga2V5Pzogc3RyaW5nO1xuICAgICAgc29ydEZuOiBOelRhYmxlU29ydEZuIHwgbnVsbCB8IGJvb2xlYW47XG4gICAgICBzb3J0T3JkZXI6IE56VGFibGVTb3J0T3JkZXI7XG4gICAgICBmaWx0ZXJGbjogTnpUYWJsZUZpbHRlckZuIHwgbnVsbCB8IGJvb2xlYW47XG4gICAgICBmaWx0ZXJWYWx1ZTogTnpUYWJsZUZpbHRlclZhbHVlO1xuICAgICAgc29ydFByaW9yaXR5OiBudW1iZXIgfCBib29sZWFuO1xuICAgIH0+XG4gID4oW10pO1xuICBxdWVyeVBhcmFtcyQ6IE9ic2VydmFibGU8TnpUYWJsZVF1ZXJ5UGFyYW1zPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucGFnZUluZGV4RGlzdGluY3QkLFxuICAgIHRoaXMucGFnZVNpemVEaXN0aW5jdCQsXG4gICAgdGhpcy5saXN0T2ZDYWxjT3BlcmF0b3IkXG4gIF0pLnBpcGUoXG4gICAgZGVib3VuY2VUaW1lKDApLFxuICAgIHNraXAoMSksXG4gICAgbWFwKChbcGFnZUluZGV4LCBwYWdlU2l6ZSwgbGlzdE9mQ2FsY10pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VJbmRleCxcbiAgICAgICAgcGFnZVNpemUsXG4gICAgICAgIHNvcnQ6IGxpc3RPZkNhbGNcbiAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zb3J0Rm4pXG4gICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS5rZXkhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5zb3J0T3JkZXJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcjogbGlzdE9mQ2FsY1xuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmZpbHRlckZuKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5ISxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uZmlsdGVyVmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSBsaXN0T2ZEYXRhQWZ0ZXJDYWxjJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMubGlzdE9mRGF0YSQsIHRoaXMubGlzdE9mQ2FsY09wZXJhdG9yJF0pLnBpcGUoXG4gICAgbWFwKChbbGlzdE9mRGF0YSwgbGlzdE9mQ2FsY09wZXJhdG9yXSkgPT4ge1xuICAgICAgbGV0IGxpc3RPZkRhdGFBZnRlckNhbGMgPSBbLi4ubGlzdE9mRGF0YV07XG4gICAgICBjb25zdCBsaXN0T2ZGaWx0ZXJPcGVyYXRvciA9IGxpc3RPZkNhbGNPcGVyYXRvci5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyVmFsdWUsIGZpbHRlckZuIH0gPSBpdGVtO1xuICAgICAgICBjb25zdCBpc1Jlc2V0ID0gZmlsdGVyVmFsdWUgPT09IG51bGwgfHwgZmlsdGVyVmFsdWUgPT09IHVuZGVmaW5lZCB8fCAoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZSkgJiYgZmlsdGVyVmFsdWUhLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgIHJldHVybiAhaXNSZXNldCAmJiB0eXBlb2YgZmlsdGVyRm4gPT09ICdmdW5jdGlvbic7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0T2ZGaWx0ZXJPcGVyYXRvcikge1xuICAgICAgICBjb25zdCB7IGZpbHRlckZuLCBmaWx0ZXJWYWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgbGlzdE9mRGF0YUFmdGVyQ2FsYyA9IGxpc3RPZkRhdGFBZnRlckNhbGMuZmlsdGVyKGRhdGEgPT4gKGZpbHRlckZuIGFzIE56VGFibGVGaWx0ZXJGbikoZmlsdGVyVmFsdWUsIGRhdGEpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpc3RPZlNvcnRPcGVyYXRvciA9IGxpc3RPZkNhbGNPcGVyYXRvclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zb3J0T3JkZXIgIT09IG51bGwgJiYgdHlwZW9mIGl0ZW0uc29ydEZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gK2Iuc29ydFByaW9yaXR5IC0gK2Euc29ydFByaW9yaXR5KTtcbiAgICAgIGxpc3RPZkRhdGFBZnRlckNhbGMuc29ydCgocmVjb3JkMSwgcmVjb3JkMikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdE9mU29ydE9wZXJhdG9yKSB7XG4gICAgICAgICAgY29uc3QgeyBzb3J0Rm4sIHNvcnRPcmRlciB9ID0gaXRlbTtcbiAgICAgICAgICBpZiAoc29ydEZuICYmIHNvcnRPcmRlcikge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVJlc3VsdCA9IChzb3J0Rm4gYXMgTnpUYWJsZVNvcnRGbikocmVjb3JkMSwgcmVjb3JkMiwgc29ydE9yZGVyKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ICE9PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09ICdhc2NlbmQnID8gY29tcGFyZVJlc3VsdCA6IC1jb21wYXJlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxpc3RPZkRhdGFBZnRlckNhbGM7XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSBsaXN0T2ZGcm9udEVuZEN1cnJlbnRQYWdlRGF0YSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnBhZ2VJbmRleERpc3RpbmN0JCwgdGhpcy5wYWdlU2l6ZURpc3RpbmN0JCwgdGhpcy5saXN0T2ZEYXRhQWZ0ZXJDYWxjJF0pLnBpcGUoXG4gICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgIGZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBbcGFnZUluZGV4LCBwYWdlU2l6ZSwgbGlzdE9mRGF0YV0gPSB2YWx1ZTtcbiAgICAgIGNvbnN0IG1heFBhZ2VJbmRleCA9IE1hdGguY2VpbChsaXN0T2ZEYXRhLmxlbmd0aCAvIHBhZ2VTaXplKSB8fCAxO1xuICAgICAgcmV0dXJuIHBhZ2VJbmRleCA8PSBtYXhQYWdlSW5kZXg7XG4gICAgfSksXG4gICAgbWFwKChbcGFnZUluZGV4LCBwYWdlU2l6ZSwgbGlzdE9mRGF0YV0pID0+IHtcbiAgICAgIHJldHVybiBsaXN0T2ZEYXRhLnNsaWNlKChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplLCBwYWdlSW5kZXggKiBwYWdlU2l6ZSk7XG4gICAgfSlcbiAgKTtcbiAgbGlzdE9mQ3VycmVudFBhZ2VEYXRhJCA9IHRoaXMuZnJvbnRQYWdpbmF0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcChwYWdpbmF0aW9uID0+IChwYWdpbmF0aW9uID8gdGhpcy5saXN0T2ZGcm9udEVuZEN1cnJlbnRQYWdlRGF0YSQgOiB0aGlzLmxpc3RPZkRhdGEkKSlcbiAgKTtcbiAgdG90YWwkID0gdGhpcy5mcm9udFBhZ2luYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKHBhZ2luYXRpb24gPT4gKHBhZ2luYXRpb24gPyB0aGlzLmxpc3RPZkRhdGFBZnRlckNhbGMkIDogdGhpcy5saXN0T2ZEYXRhJCkpLFxuICAgIG1hcChsaXN0ID0+IGxpc3QubGVuZ3RoKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG5cbiAgdXBkYXRlUGFnZVNpemUoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU2l6ZSQubmV4dChzaXplKTtcbiAgfVxuICB1cGRhdGVGcm9udFBhZ2luYXRpb24ocGFnaW5hdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZnJvbnRQYWdpbmF0aW9uJC5uZXh0KHBhZ2luYXRpb24pO1xuICB9XG4gIHVwZGF0ZVBhZ2VJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXgkLm5leHQoaW5kZXgpO1xuICB9XG4gIHVwZGF0ZUxpc3RPZkRhdGEobGlzdDogTnpUYWJsZURhdGFbXSk6IHZvaWQge1xuICAgIHRoaXMubGlzdE9mRGF0YSQubmV4dChsaXN0KTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHt9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19