UNPKG

ng-zorro-antd

Version:

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

252 lines 21.3 kB
/** * @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(300), 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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RDs7Ozs7SUFDOUQsdUNBQW9EOzs7OztJQUNwRCx5Q0FBNkQ7O0lBQzdELGdEQUFrRTs7SUFDbEUsK0NBQWdFOztJQUNoRSxpREFTTTs7SUFDTiwwQ0E2QkU7Ozs7O0lBQ0Ysa0RBNkJFOzs7OztJQUNGLDREQVVFOztJQUNGLG9EQUVFOztJQUNGLG9DQUlFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFsaWJhYmEuY29tIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2tpcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOelRhYmxlRGF0YSwgTnpUYWJsZUZpbHRlckZuLCBOelRhYmxlRmlsdGVyVmFsdWUsIE56VGFibGVRdWVyeVBhcmFtcywgTnpUYWJsZVNvcnRGbiwgTnpUYWJsZVNvcnRPcmRlciB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTnpUYWJsZURhdGFTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgcGFnZUluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcbiAgcHJpdmF0ZSBmcm9udFBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBwYWdlU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMTApO1xuICBwcml2YXRlIGxpc3RPZkRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOelRhYmxlRGF0YVtdPihbXSk7XG4gIHBhZ2VJbmRleERpc3RpbmN0JCA9IHRoaXMucGFnZUluZGV4JC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICBwYWdlU2l6ZURpc3RpbmN0JCA9IHRoaXMucGFnZVNpemUkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIGxpc3RPZkNhbGNPcGVyYXRvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIEFycmF5PHtcbiAgICAgIGtleT86IHN0cmluZztcbiAgICAgIHNvcnRGbjogTnpUYWJsZVNvcnRGbiB8IG51bGwgfCBib29sZWFuO1xuICAgICAgc29ydE9yZGVyOiBOelRhYmxlU29ydE9yZGVyO1xuICAgICAgZmlsdGVyRm46IE56VGFibGVGaWx0ZXJGbiB8IG51bGwgfCBib29sZWFuO1xuICAgICAgZmlsdGVyVmFsdWU6IE56VGFibGVGaWx0ZXJWYWx1ZTtcbiAgICAgIHNvcnRQcmlvcml0eTogbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9PlxuICA+KFtdKTtcbiAgcXVlcnlQYXJhbXMkOiBPYnNlcnZhYmxlPE56VGFibGVRdWVyeVBhcmFtcz4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnBhZ2VJbmRleERpc3RpbmN0JCxcbiAgICB0aGlzLnBhZ2VTaXplRGlzdGluY3QkLFxuICAgIHRoaXMubGlzdE9mQ2FsY09wZXJhdG9yJFxuICBdKS5waXBlKFxuICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgIHNraXAoMSksXG4gICAgbWFwKChbcGFnZUluZGV4LCBwYWdlU2l6ZSwgbGlzdE9mQ2FsY10pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VJbmRleCxcbiAgICAgICAgcGFnZVNpemUsXG4gICAgICAgIHNvcnQ6IGxpc3RPZkNhbGNcbiAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zb3J0Rm4pXG4gICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS5rZXkhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5zb3J0T3JkZXJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcjogbGlzdE9mQ2FsY1xuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmZpbHRlckZuKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5ISxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uZmlsdGVyVmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSBsaXN0T2ZEYXRhQWZ0ZXJDYWxjJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMubGlzdE9mRGF0YSQsIHRoaXMubGlzdE9mQ2FsY09wZXJhdG9yJF0pLnBpcGUoXG4gICAgbWFwKChbbGlzdE9mRGF0YSwgbGlzdE9mQ2FsY09wZXJhdG9yXSkgPT4ge1xuICAgICAgbGV0IGxpc3RPZkRhdGFBZnRlckNhbGMgPSBbLi4ubGlzdE9mRGF0YV07XG4gICAgICBjb25zdCBsaXN0T2ZGaWx0ZXJPcGVyYXRvciA9IGxpc3RPZkNhbGNPcGVyYXRvci5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyVmFsdWUsIGZpbHRlckZuIH0gPSBpdGVtO1xuICAgICAgICBjb25zdCBpc1Jlc2V0ID0gZmlsdGVyVmFsdWUgPT09IG51bGwgfHwgZmlsdGVyVmFsdWUgPT09IHVuZGVmaW5lZCB8fCAoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZSkgJiYgZmlsdGVyVmFsdWUhLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgIHJldHVybiAhaXNSZXNldCAmJiB0eXBlb2YgZmlsdGVyRm4gPT09ICdmdW5jdGlvbic7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0T2ZGaWx0ZXJPcGVyYXRvcikge1xuICAgICAgICBjb25zdCB7IGZpbHRlckZuLCBmaWx0ZXJWYWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgbGlzdE9mRGF0YUFmdGVyQ2FsYyA9IGxpc3RPZkRhdGFBZnRlckNhbGMuZmlsdGVyKGRhdGEgPT4gKGZpbHRlckZuIGFzIE56VGFibGVGaWx0ZXJGbikoZmlsdGVyVmFsdWUsIGRhdGEpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpc3RPZlNvcnRPcGVyYXRvciA9IGxpc3RPZkNhbGNPcGVyYXRvclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zb3J0T3JkZXIgIT09IG51bGwgJiYgdHlwZW9mIGl0ZW0uc29ydEZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gK2Iuc29ydFByaW9yaXR5IC0gK2Euc29ydFByaW9yaXR5KTtcbiAgICAgIGxpc3RPZkRhdGFBZnRlckNhbGMuc29ydCgocmVjb3JkMSwgcmVjb3JkMikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdE9mU29ydE9wZXJhdG9yKSB7XG4gICAgICAgICAgY29uc3QgeyBzb3J0Rm4sIHNvcnRPcmRlciB9ID0gaXRlbTtcbiAgICAgICAgICBpZiAoc29ydEZuICYmIHNvcnRPcmRlcikge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVJlc3VsdCA9IChzb3J0Rm4gYXMgTnpUYWJsZVNvcnRGbikocmVjb3JkMSwgcmVjb3JkMiwgc29ydE9yZGVyKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ICE9PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09ICdhc2NlbmQnID8gY29tcGFyZVJlc3VsdCA6IC1jb21wYXJlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxpc3RPZkRhdGFBZnRlckNhbGM7XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSBsaXN0T2ZGcm9udEVuZEN1cnJlbnRQYWdlRGF0YSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnBhZ2VJbmRleERpc3RpbmN0JCwgdGhpcy5wYWdlU2l6ZURpc3RpbmN0JCwgdGhpcy5saXN0T2ZEYXRhQWZ0ZXJDYWxjJF0pLnBpcGUoXG4gICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgIGZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBbcGFnZUluZGV4LCBwYWdlU2l6ZSwgbGlzdE9mRGF0YV0gPSB2YWx1ZTtcbiAgICAgIGNvbnN0IG1heFBhZ2VJbmRleCA9IE1hdGguY2VpbChsaXN0T2ZEYXRhLmxlbmd0aCAvIHBhZ2VTaXplKSB8fCAxO1xuICAgICAgcmV0dXJuIHBhZ2VJbmRleCA8PSBtYXhQYWdlSW5kZXg7XG4gICAgfSksXG4gICAgbWFwKChbcGFnZUluZGV4LCBwYWdlU2l6ZSwgbGlzdE9mRGF0YV0pID0+IHtcbiAgICAgIHJldHVybiBsaXN0T2ZEYXRhLnNsaWNlKChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplLCBwYWdlSW5kZXggKiBwYWdlU2l6ZSk7XG4gICAgfSlcbiAgKTtcbiAgbGlzdE9mQ3VycmVudFBhZ2VEYXRhJCA9IHRoaXMuZnJvbnRQYWdpbmF0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcChwYWdpbmF0aW9uID0+IChwYWdpbmF0aW9uID8gdGhpcy5saXN0T2ZGcm9udEVuZEN1cnJlbnRQYWdlRGF0YSQgOiB0aGlzLmxpc3RPZkRhdGEkKSlcbiAgKTtcbiAgdG90YWwkID0gdGhpcy5mcm9udFBhZ2luYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKHBhZ2luYXRpb24gPT4gKHBhZ2luYXRpb24gPyB0aGlzLmxpc3RPZkRhdGFBZnRlckNhbGMkIDogdGhpcy5saXN0T2ZEYXRhJCkpLFxuICAgIG1hcChsaXN0ID0+IGxpc3QubGVuZ3RoKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG5cbiAgdXBkYXRlUGFnZVNpemUoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU2l6ZSQubmV4dChzaXplKTtcbiAgfVxuICB1cGRhdGVGcm9udFBhZ2luYXRpb24ocGFnaW5hdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZnJvbnRQYWdpbmF0aW9uJC5uZXh0KHBhZ2luYXRpb24pO1xuICB9XG4gIHVwZGF0ZVBhZ2VJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXgkLm5leHQoaW5kZXgpO1xuICB9XG4gIHVwZGF0ZUxpc3RPZkRhdGEobGlzdDogTnpUYWJsZURhdGFbXSk6IHZvaWQge1xuICAgIHRoaXMubGlzdE9mRGF0YSQubmV4dChsaXN0KTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHt9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19