UNPKG

@ng-dominus/dm-table

Version:
109 lines 19.2 kB
import { BehaviorSubject, catchError, merge, throwError } from "rxjs"; import { MatTableDataSource } from "@angular/material/table"; import { FormGroup } from "@angular/forms"; import { InjectionToken } from "@angular/core"; export var DmTableIntl; (function (DmTableIntl) { DmTableIntl[DmTableIntl["NO_DATA"] = 0] = "NO_DATA"; DmTableIntl[DmTableIntl["LOADING"] = 1] = "LOADING"; })(DmTableIntl || (DmTableIntl = {})); export const DM_TABLE_INTL = new InjectionToken('Dominus table i18n strings'); export const DM_TABLE_RENDER_COMPONENT_DATA = new InjectionToken('DM_TABLE_RENDER_COMPONENT_DATA'); export class DmTableDataSourceAdapter extends MatTableDataSource { constructor(requestMethod, http, dataSrc, sort, onBeforeRequest, paginator, mapRowsFn, filters) { super(); this.requestMethod = requestMethod; this.http = http; this.dataSrc = dataSrc; this.onBeforeRequest = onBeforeRequest; this.mapRowsFn = mapRowsFn; this.filters = filters; this.totalResults = 0; this.loadingData$ = new BehaviorSubject(false); this.sortRef = sort; this.paginatorRef = paginator; if (typeof dataSrc !== 'string') { this.sort = sort; if (paginator) { this.paginator = paginator; } } this.eventsSub = (paginator?.page ? merge(sort.sortChange, paginator.page) : sort.sortChange).subscribe((event) => this.refresh(event.pageIndex === undefined)); } connect() { this.refresh(false); return super.connect(); } getTotalResults() { return this.totalResults; } refresh(resetPage = true) { if (this.loadingData$.getValue()) { return; } const paginator = this.paginatorRef; const dataSrc = this.dataSrc; if (resetPage && paginator) { paginator.pageIndex = 0; } if (typeof dataSrc === 'string') { return this.handleServerSideDataSrc(dataSrc); } const mapRowsFn = this.mapRowsFn; this.data = mapRowsFn ? mapRowsFn(dataSrc) : dataSrc; this.totalResults = this.data.length; } onDataLoading() { return this.loadingData$.asObservable(); } handleServerSideDataSrc(dataSource) { this.loadingData$.next(true); const requestMethod = this.requestMethod.toUpperCase(); const requestOptions = { responseType: 'json', observe: "body" }; const filters = this.filters; let requestData; if (filters instanceof FormGroup) { requestData = Object.assign({}, filters.value || {}); } else { requestData = filters || {}; } requestData['dm_sort_col'] = this.sortRef?.active || ''; requestData['dm_sort_dir'] = this.sortRef?.direction || ''; requestData['dm_page_index'] = this.paginatorRef?.pageIndex || 0; requestData['dm_page_len'] = this.paginatorRef?.pageSize || 0; if (requestMethod === 'GET') { requestOptions.params = requestData; } else { requestOptions.body = requestData; } this.onBeforeRequest(requestOptions).then(options => { this.http.request(requestMethod, dataSource, options) .pipe(catchError((error) => { this.data = []; this.loadingData$.next(false); return throwError(() => new Error(`Table data request from ${dataSource} failed! Error: ${error.message || 'Unknown'}`)); })) .subscribe((response) => { if (response && response.rows) { if (this.paginatorRef) { this.paginatorRef.length = response.totalResults; } this.totalResults = response.totalResults; this.data = this.mapRowsFn ? this.mapRowsFn(response.rows) : response.rows; } this.loadingData$.next(false); }); }); } disconnect() { this.eventsSub.unsubscribe(); this.loadingData$.complete(); super.disconnect(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG0tdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kbS10YWJsZS9zcmMvbGliL2RtLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBNEIsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSTlGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTNELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsY0FBYyxFQUFzQixNQUFNLGVBQWUsQ0FBQztBQWlEbEUsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNuQixtREFBTyxDQUFBO0lBQ1AsbURBQU8sQ0FBQTtBQUNYLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QjtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsNEJBQTRCLENBQUMsQ0FBQztBQUMzRyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsZ0NBQWdDLENBQUMsQ0FBQztBQStCL0gsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGtCQUF1QjtJQU9qRSxZQUNZLGFBQXFCLEVBQ3JCLElBQWdCLEVBQ2hCLE9BQTBCLEVBQ2xDLElBQWEsRUFDSSxlQUEwRixFQUMzRyxTQUF3QixFQUNoQixTQUFrQyxFQUNsQyxPQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQVRBLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFFakIsb0JBQWUsR0FBZixlQUFlLENBQTJFO1FBRW5HLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBZDVC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LElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztvQkFFMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztpQkFDOUU7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUSxVQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgdGhyb3dFcnJvcn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cENvbnRleHQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7TWF0U29ydH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NvcnRcIjtcbmltcG9ydCB7TWF0UGFnaW5hdG9yfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yXCI7XG5pbXBvcnQge01hdFRhYmxlRGF0YVNvdXJjZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYmxlXCI7XG5pbXBvcnQge25nQ2xhc3NDb21wYXRpYmxlfSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQge0Zvcm1Hcm91cH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge0luamVjdGlvblRva2VuLCBQcm92aWRlclRva2VuLCBUeXBlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERtVGFibGVDb2x1bW5EZWZpbml0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBkYXRhIHNvdXJjZSB3aGVuIHByb3ZpZGluZyB2YWx1ZSBmb3IgdGhpcyBjb2x1bW4uXG4gICAgICogRm9yIGV4YW1wbGUgdGhlIGNvbHVtbiBpZCAnbXlfY29sdW1uJyBzaG91bGQgYmUgZm91bmQgaW4gdGhlIGRhdGEgc291cmNlLCBsaWtlIHNvOiBbeydteV9jb2x1bW4nOiAnY29sdW1uX3ZhbHVlJ30sIC4uLl0uXG4gICAgICovXG4gICAgaWQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgY29sdW1uIGRpc3BsYXkgbmFtZS5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ2xhc3NlcyB0byBiZSBwbGFjZWQgb24gdGhlIHdob2xlIGNvbHVtbiAodGggJiB0ZCkuXG4gICAgICogVGhlIHZhbHVlcyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBuZ0NsYXNzLlxuICAgICAqL1xuICAgIGNsYXNzZXM/OiBuZ0NsYXNzQ29tcGF0aWJsZTtcbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIGNvbHVtbiBzb3J0YWJsZT9cbiAgICAgKi9cbiAgICBzb3J0YWJsZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGNvbHVtbiBpcyBkaXNwbGF5ZWQgb3IgaGlkZGVuLlxuICAgICAqL1xuICAgIHZpc2libGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFJlbmRlciB0aGlzIGNvbHVtbiB1c2luZyBhIHBpcGUgb3IgYSBjb21wb25lbnQuXG4gICAgICogSWYgYm90aCBhcmUgc2V0LCB0aGUgY29tcG9uZW50IHByb3BlcnR5IHRha2VzIHByaW9yaXR5XG4gICAgICovXG4gICAgcmVuZGVyVXNpbmc/OiB7XG4gICAgICAgIGNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICAgICAgcGlwZT86IFByb3ZpZGVyVG9rZW48YW55PjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gZWl0aGVyIHRoZSBwaXBlIG9yIHRoZSBjb21wb25lbnRcbiAgICAgICAgICovXG4gICAgICAgIGFyZ3VtZW50cz86IGFueVtdIHwge1trZXk6IHN0cmluZ106IGFueX1cbiAgICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERtVGFibGVSb3cge1xuICAgIFtjb2x1bW5JZDogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERtVGFibGVSZW5kZXJDb21wb25lbnREYXRhIHtcbiAgICBjb2x1bW5JZDogc3RyaW5nO1xuICAgIGNvbHVtbkRhdGE6IHN0cmluZztcbiAgICBhcmd1bWVudHM6IGFueVtdIHwge1trZXk6IHN0cmluZ106IGFueX07XG59XG5cbmV4cG9ydCBlbnVtIERtVGFibGVJbnRsIHtcbiAgICBOT19EQVRBLFxuICAgIExPQURJTkdcbn1cblxuZXhwb3J0IGNvbnN0IERNX1RBQkxFX0lOVEwgPSBuZXcgSW5qZWN0aW9uVG9rZW48UmVjb3JkPERtVGFibGVJbnRsLCBzdHJpbmc+PignRG9taW51cyB0YWJsZSBpMThuIHN0cmluZ3MnKTtcbmV4cG9ydCBjb25zdCBETV9UQUJMRV9SRU5ERVJfQ09NUE9ORU5UX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48RG1UYWJsZVJlbmRlckNvbXBvbmVudERhdGE+KCdETV9UQUJMRV9SRU5ERVJfQ09NUE9ORU5UX0RBVEEnKTtcblxuZXhwb3J0IHR5cGUgRG1UYWJsZURhdGFTb3VyY2UgPSBzdHJpbmcgfCB7IFtjb2x1bW5JZDogc3RyaW5nXTogYW55IH1bXTtcbmV4cG9ydCB0eXBlIERtVGFibGVGaWx0ZXJzID0ge1tmaWx0ZXI6IHN0cmluZ106IGFueX0gfCBGb3JtR3JvdXA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG1UYWJsZURhdGFTZXJ2ZXJSZXNwb25zZSB7XG4gICAgdG90YWxSZXN1bHRzOiBudW1iZXI7XG4gICAgcm93czogRG1UYWJsZVJvd1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERtVGFibGVSZXF1ZXN0T3B0aW9ucyB7XG4gICAgYm9keT86IGFueTtcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgIG9ic2VydmU/OiAnYm9keSc7XG4gICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcbiAgICB9O1xuICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEbVRhYmxlQ29sdW1uVmlzaWJpbGl0eSB7XG4gICAgY29sdW1uSWQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgdmlzaWJpbGl0eSB3aWxsIGJlIHRvZ2dsZWRcbiAgICAgKi9cbiAgICB2aXNpYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIERtVGFibGVEYXRhU291cmNlQWRhcHRlciBleHRlbmRzIE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+IHtcbiAgICBwcml2YXRlIHRvdGFsUmVzdWx0cyA9IDA7XG4gICAgcHJpdmF0ZSBldmVudHNTdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGxvYWRpbmdEYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdG9yUmVmPzogTWF0UGFnaW5hdG9yO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc29ydFJlZj86IE1hdFNvcnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZXF1ZXN0TWV0aG9kOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBkYXRhU3JjOiBEbVRhYmxlRGF0YVNvdXJjZSxcbiAgICAgICAgc29ydDogTWF0U29ydCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBvbkJlZm9yZVJlcXVlc3Q6IChyZXF1ZXN0T3B0aW9uczogRG1UYWJsZVJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPERtVGFibGVSZXF1ZXN0T3B0aW9ucz4sXG4gICAgICAgIHBhZ2luYXRvcj86IE1hdFBhZ2luYXRvcixcbiAgICAgICAgcHJpdmF0ZSBtYXBSb3dzRm4/OiAocm93czogYW55W10pID0+IGFueVtdLFxuICAgICAgICBwcml2YXRlIGZpbHRlcnM/OiBEbVRhYmxlRmlsdGVycyxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLnNvcnRSZWYgPSBzb3J0O1xuICAgICAgICB0aGlzLnBhZ2luYXRvclJlZiA9IHBhZ2luYXRvcjtcblxuICAgICAgICBpZih0eXBlb2YgZGF0YVNyYyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydCA9IHNvcnQ7XG4gICAgICAgICAgICBpZihwYWdpbmF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvciA9IHBhZ2luYXRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzU3ViID0gKHBhZ2luYXRvcj8ucGFnZSA/IG1lcmdlKHNvcnQuc29ydENoYW5nZSwgcGFnaW5hdG9yLnBhZ2UpIDogc29ydC5zb3J0Q2hhbmdlKS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHRoaXMucmVmcmVzaChldmVudC5wYWdlSW5kZXggPT09IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaChmYWxzZSk7XG4gICAgICAgIHJldHVybiBzdXBlci5jb25uZWN0KCk7XG4gICAgfVxuXG4gICAgZ2V0VG90YWxSZXN1bHRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbFJlc3VsdHM7XG4gICAgfVxuXG4gICAgcmVmcmVzaChyZXNldFBhZ2UgPSB0cnVlKSB7XG4gICAgICAgIGlmKHRoaXMubG9hZGluZ0RhdGEkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yUmVmO1xuICAgICAgICBjb25zdCBkYXRhU3JjID0gdGhpcy5kYXRhU3JjO1xuXG4gICAgICAgIGlmIChyZXNldFBhZ2UgJiYgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBwYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVNyYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcnZlclNpZGVEYXRhU3JjKGRhdGFTcmMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFwUm93c0ZuID0gdGhpcy5tYXBSb3dzRm47XG4gICAgICAgIHRoaXMuZGF0YSA9IG1hcFJvd3NGbiA/IG1hcFJvd3NGbihkYXRhU3JjKSA6IGRhdGFTcmM7XG4gICAgICAgIHRoaXMudG90YWxSZXN1bHRzID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBvbkRhdGFMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nRGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTZXJ2ZXJTaWRlRGF0YVNyYyhkYXRhU291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nRGF0YSQubmV4dCh0cnVlKTtcblxuICAgICAgICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdGhpcy5yZXF1ZXN0TWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBEbVRhYmxlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwiYm9keVwiXG4gICAgICAgIH07XG5cblxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzO1xuXG4gICAgICAgIGxldCByZXF1ZXN0RGF0YTtcbiAgICAgICAgaWYoZmlsdGVycyBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgcmVxdWVzdERhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBmaWx0ZXJzLnZhbHVlIHx8IHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3REYXRhID0gZmlsdGVycyB8fCB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3REYXRhWydkbV9zb3J0X2NvbCddID0gdGhpcy5zb3J0UmVmPy5hY3RpdmUgfHwgJyc7XG4gICAgICAgIHJlcXVlc3REYXRhWydkbV9zb3J0X2RpciddID0gdGhpcy5zb3J0UmVmPy5kaXJlY3Rpb24gfHwgJyc7XG4gICAgICAgIHJlcXVlc3REYXRhWydkbV9wYWdlX2luZGV4J10gPSB0aGlzLnBhZ2luYXRvclJlZj8ucGFnZUluZGV4IHx8IDA7XG4gICAgICAgIHJlcXVlc3REYXRhWydkbV9wYWdlX2xlbiddID0gdGhpcy5wYWdpbmF0b3JSZWY/LnBhZ2VTaXplIHx8IDA7XG5cbiAgICAgICAgaWYocmVxdWVzdE1ldGhvZCA9PT0gJ0dFVCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLnBhcmFtcyA9IHJlcXVlc3REYXRhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IHJlcXVlc3REYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkJlZm9yZVJlcXVlc3QocmVxdWVzdE9wdGlvbnMpLnRoZW4ob3B0aW9ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmh0dHAucmVxdWVzdDxEbVRhYmxlRGF0YVNlcnZlclJlc3BvbnNlPihyZXF1ZXN0TWV0aG9kLCBkYXRhU291cmNlLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdEYXRhJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBUYWJsZSBkYXRhIHJlcXVlc3QgZnJvbSAke2RhdGFTb3VyY2V9IGZhaWxlZCEgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93bid9YCkpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3JSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvclJlZi5sZW5ndGggPSByZXNwb25zZS50b3RhbFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVzdWx0cyA9IHJlc3BvbnNlLnRvdGFsUmVzdWx0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5tYXBSb3dzRm4gPyB0aGlzLm1hcFJvd3NGbihyZXNwb25zZS5yb3dzKSA6IHJlc3BvbnNlLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nRGF0YSQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubG9hZGluZ0RhdGEkLmNvbXBsZXRlKCk7XG4gICAgICAgIHN1cGVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG59XG4iXX0=