UNPKG

ng-zorro-antd

Version:

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

105 lines 17.8 kB
/** * 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'; import * as i0 from "@angular/core"; 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(([pageIndex, pageSize, listOfCalc]) => ({ pageIndex, pageSize, sort: listOfCalc .filter(item => item.sortFn) .map(item => ({ key: item.key, value: item.sortOrder })), filter: listOfCalc .filter(item => item.filterFn) .map(item => ({ key: item.key, value: item.filterValue })) }))); this.listOfDataAfterCalc$ = combineLatest([this.listOfData$, this.listOfCalcOperator$]).pipe(map(([listOfData, listOfCalcOperator]) => { let listOfDataAfterCalc = [...listOfData]; const listOfFilterOperator = listOfCalcOperator.filter(item => { const { filterValue, filterFn } = item; const isReset = filterValue === null || filterValue === undefined || (Array.isArray(filterValue) && filterValue.length === 0); return !isReset && typeof filterFn === 'function'; }); for (const item of listOfFilterOperator) { const { filterFn, filterValue } = item; listOfDataAfterCalc = listOfDataAfterCalc.filter(data => filterFn(filterValue, data)); } const listOfSortOperator = listOfCalcOperator .filter(item => item.sortOrder !== null && typeof item.sortFn === 'function') .sort((a, b) => +b.sortPriority - +a.sortPriority); if (listOfCalcOperator.length) { listOfDataAfterCalc.sort((record1, record2) => { for (const item of listOfSortOperator) { const { sortFn, sortOrder } = item; if (sortFn && sortOrder) { const compareResult = 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(value => { const [pageIndex, pageSize, listOfData] = value; const maxPageIndex = Math.ceil(listOfData.length / pageSize) || 1; return pageIndex <= maxPageIndex; }), map(([pageIndex, pageSize, listOfData]) => listOfData.slice((pageIndex - 1) * pageSize, pageIndex * pageSize))); this.listOfCurrentPageData$ = this.frontPagination$.pipe(switchMap(pagination => (pagination ? this.listOfFrontEndCurrentPageData$ : this.listOfDataAfterCalc$))); this.total$ = this.frontPagination$.pipe(switchMap(pagination => (pagination ? this.listOfDataAfterCalc$ : this.listOfData$)), map(list => list.length), distinctUntilChanged()); } updatePageSize(size) { this.pageSize$.next(size); } updateFrontPagination(pagination) { this.frontPagination$.next(pagination); } updatePageIndex(index) { this.pageIndex$.next(index); } updateListOfData(list) { this.listOfData$.next(list); } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } } NzTableDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: NzTableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); NzTableDataService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: NzTableDataService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: NzTableDataService, decorators: [{ type: Injectable }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy90YWJsZS9zcmMvdGFibGUtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVc3RyxNQUFNLE9BQU8sa0JBQWtCO0lBK0c3QjtRQTlHUSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN6QixlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDdEQsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7UUFDNUQsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLHNCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNoRSx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FTdkMsRUFBRSxDQUFDLENBQUM7UUFDTixpQkFBWSxHQUFtQyxhQUFhLENBQUM7WUFDM0QsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FB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QyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQ3hHLENBQUM7UUFDRixXQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDakMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ3BGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDeEIsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztJQWNhLENBQUM7SUFaaEIsY0FBYyxDQUFDLElBQVk7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELHFCQUFxQixDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxJQUFrQjtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzsrR0FuSFUsa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2tpcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIE56VGFibGVGaWx0ZXJGbixcbiAgTnpUYWJsZUZpbHRlclZhbHVlLFxuICBOelRhYmxlUXVlcnlQYXJhbXMsXG4gIE56VGFibGVTb3J0Rm4sXG4gIE56VGFibGVTb3J0T3JkZXJcbn0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOelRhYmxlRGF0YVNlcnZpY2U8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBwYWdlSW5kZXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xuICBwcml2YXRlIGZyb250UGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxMCk7XG4gIHByaXZhdGUgbGlzdE9mRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHJlYWRvbmx5IFRbXT4oW10pO1xuICBwYWdlSW5kZXhEaXN0aW5jdCQgPSB0aGlzLnBhZ2VJbmRleCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgcGFnZVNpemVEaXN0aW5jdCQgPSB0aGlzLnBhZ2VTaXplJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICBsaXN0T2ZDYWxjT3BlcmF0b3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBBcnJheTx7XG4gICAgICBrZXk/OiBzdHJpbmc7XG4gICAgICBzb3J0Rm46IE56VGFibGVTb3J0Rm48VD4gfCBudWxsIHwgYm9vbGVhbjtcbiAgICAgIHNvcnRPcmRlcjogTnpUYWJsZVNvcnRPcmRlcjtcbiAgICAgIGZpbHRlckZuOiBOelRhYmxlRmlsdGVyRm48VD4gfCBudWxsIHwgYm9vbGVhbjtcbiAgICAgIGZpbHRlclZhbHVlOiBOelRhYmxlRmlsdGVyVmFsdWU7XG4gICAgICBzb3J0UHJpb3JpdHk6IG51bWJlciB8IGJvb2xlYW47XG4gICAgfT5cbiAgPihbXSk7XG4gIHF1ZXJ5UGFyYW1zJDogT2JzZXJ2YWJsZTxOelRhYmxlUXVlcnlQYXJhbXM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5wYWdlSW5kZXhEaXN0aW5jdCQsXG4gICAgdGhpcy5wYWdlU2l6ZURpc3RpbmN0JCxcbiAgICB0aGlzLmxpc3RPZkNhbGNPcGVyYXRvciRcbiAgXSkucGlwZShcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgc2tpcCgxKSxcbiAgICBtYXAoKFtwYWdlSW5kZXgsIHBhZ2VTaXplLCBsaXN0T2ZDYWxjXSkgPT4gKHtcbiAgICAgIHBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplLFxuICAgICAgc29ydDogbGlzdE9mQ2FsY1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zb3J0Rm4pXG4gICAgICAgIC5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgIGtleTogaXRlbS5rZXkhLFxuICAgICAgICAgIHZhbHVlOiBpdGVtLnNvcnRPcmRlclxuICAgICAgICB9KSksXG4gICAgICBmaWx0ZXI6IGxpc3RPZkNhbGNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uZmlsdGVyRm4pXG4gICAgICAgIC5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgIGtleTogaXRlbS5rZXkhLFxuICAgICAgICAgIHZhbHVlOiBpdGVtLmZpbHRlclZhbHVlXG4gICAgICAgIH0pKVxuICAgIH0pKVxuICApO1xuICBwcml2YXRlIGxpc3RPZkRhdGFBZnRlckNhbGMkID0gY29tYmluZUxhdGVzdChbdGhpcy5saXN0T2ZEYXRhJCwgdGhpcy5saXN0T2ZDYWxjT3BlcmF0b3IkXSkucGlwZShcbiAgICBtYXAoKFtsaXN0T2ZEYXRhLCBsaXN0T2ZDYWxjT3BlcmF0b3JdKSA9PiB7XG4gICAgICBsZXQgbGlzdE9mRGF0YUFmdGVyQ2FsYyA9IFsuLi5saXN0T2ZEYXRhXTtcbiAgICAgIGNvbnN0IGxpc3RPZkZpbHRlck9wZXJhdG9yID0gbGlzdE9mQ2FsY09wZXJhdG9yLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJWYWx1ZSwgZmlsdGVyRm4gfSA9IGl0ZW07XG4gICAgICAgIGNvbnN0IGlzUmVzZXQgPVxuICAgICAgICAgIGZpbHRlclZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgZmlsdGVyVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlKSAmJiBmaWx0ZXJWYWx1ZSEubGVuZ3RoID09PSAwKTtcbiAgICAgICAgcmV0dXJuICFpc1Jlc2V0ICYmIHR5cGVvZiBmaWx0ZXJGbiA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3RPZkZpbHRlck9wZXJhdG9yKSB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyRm4sIGZpbHRlclZhbHVlIH0gPSBpdGVtO1xuICAgICAgICBsaXN0T2ZEYXRhQWZ0ZXJDYWxjID0gbGlzdE9mRGF0YUFmdGVyQ2FsYy5maWx0ZXIoZGF0YSA9PiAoZmlsdGVyRm4gYXMgTnpUYWJsZUZpbHRlckZuPFQ+KShmaWx0ZXJWYWx1ZSwgZGF0YSkpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGlzdE9mU29ydE9wZXJhdG9yID0gbGlzdE9mQ2FsY09wZXJhdG9yXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnNvcnRPcmRlciAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlbS5zb3J0Rm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiArYi5zb3J0UHJpb3JpdHkgLSArYS5zb3J0UHJpb3JpdHkpO1xuICAgICAgaWYgKGxpc3RPZkNhbGNPcGVyYXRvci5sZW5ndGgpIHtcbiAgICAgICAgbGlzdE9mRGF0YUFmdGVyQ2FsYy5zb3J0KChyZWNvcmQxLCByZWNvcmQyKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3RPZlNvcnRPcGVyYXRvcikge1xuICAgICAgICAgICAgY29uc3QgeyBzb3J0Rm4sIHNvcnRPcmRlciB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChzb3J0Rm4gJiYgc29ydE9yZGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVSZXN1bHQgPSAoc29ydEZuIGFzIE56VGFibGVTb3J0Rm48VD4pKHJlY29yZDEsIHJlY29yZDIsIHNvcnRPcmRlcik7XG4gICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gJ2FzY2VuZCcgPyBjb21wYXJlUmVzdWx0IDogLWNvbXBhcmVSZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RPZkRhdGFBZnRlckNhbGM7XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSBsaXN0T2ZGcm9udEVuZEN1cnJlbnRQYWdlRGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnBhZ2VJbmRleERpc3RpbmN0JCxcbiAgICB0aGlzLnBhZ2VTaXplRGlzdGluY3QkLFxuICAgIHRoaXMubGlzdE9mRGF0YUFmdGVyQ2FsYyRcbiAgXSkucGlwZShcbiAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IFtwYWdlSW5kZXgsIHBhZ2VTaXplLCBsaXN0T2ZEYXRhXSA9IHZhbHVlO1xuICAgICAgY29uc3QgbWF4UGFnZUluZGV4ID0gTWF0aC5jZWlsKGxpc3RPZkRhdGEubGVuZ3RoIC8gcGFnZVNpemUpIHx8IDE7XG4gICAgICByZXR1cm4gcGFnZUluZGV4IDw9IG1heFBhZ2VJbmRleDtcbiAgICB9KSxcbiAgICBtYXAoKFtwYWdlSW5kZXgsIHBhZ2VTaXplLCBsaXN0T2ZEYXRhXSkgPT4gbGlzdE9mRGF0YS5zbGljZSgocGFnZUluZGV4IC0gMSkgKiBwYWdlU2l6ZSwgcGFnZUluZGV4ICogcGFnZVNpemUpKVxuICApO1xuICBsaXN0T2ZDdXJyZW50UGFnZURhdGEkID0gdGhpcy5mcm9udFBhZ2luYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKHBhZ2luYXRpb24gPT4gKHBhZ2luYXRpb24gPyB0aGlzLmxpc3RPZkZyb250RW5kQ3VycmVudFBhZ2VEYXRhJCA6IHRoaXMubGlzdE9mRGF0YUFmdGVyQ2FsYyQpKVxuICApO1xuICB0b3RhbCQgPSB0aGlzLmZyb250UGFnaW5hdGlvbiQucGlwZShcbiAgICBzd2l0Y2hNYXAocGFnaW5hdGlvbiA9PiAocGFnaW5hdGlvbiA/IHRoaXMubGlzdE9mRGF0YUFmdGVyQ2FsYyQgOiB0aGlzLmxpc3RPZkRhdGEkKSksXG4gICAgbWFwKGxpc3QgPT4gbGlzdC5sZW5ndGgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICB1cGRhdGVQYWdlU2l6ZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplJC5uZXh0KHNpemUpO1xuICB9XG4gIHVwZGF0ZUZyb250UGFnaW5hdGlvbihwYWdpbmF0aW9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mcm9udFBhZ2luYXRpb24kLm5leHQocGFnaW5hdGlvbik7XG4gIH1cbiAgdXBkYXRlUGFnZUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VJbmRleCQubmV4dChpbmRleCk7XG4gIH1cbiAgdXBkYXRlTGlzdE9mRGF0YShsaXN0OiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RPZkRhdGEkLm5leHQobGlzdCk7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7fVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==