@taiga-ui/addon-table
Version:
A library to display tabled data with filters, search, group actions, etc.
136 lines • 19 kB
JavaScript
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, EventEmitter, inject, Input, Output, signal, ViewEncapsulation, } from '@angular/core';
import { WA_INTERSECTION_ROOT_MARGIN } from '@ng-web-apis/intersection-observer';
import { tuiProvide, tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous';
import { tuiButtonOptionsProvider } from '@taiga-ui/core/components/button';
import { TUI_TEXTFIELD_OPTIONS } from '@taiga-ui/core/components/textfield';
import { tuiBadgeOptionsProvider } from '@taiga-ui/kit/components/badge';
import { tuiChipOptionsProvider } from '@taiga-ui/kit/components/chip';
import { tuiProgressOptionsProvider } from '@taiga-ui/kit/components/progress';
import { combineLatest, debounceTime, map, Subject } from 'rxjs';
import { TUI_TABLE_OPTIONS, TuiSortDirection } from '../table.options';
import { TuiStuck } from './stuck.directive';
import * as i0 from "@angular/core";
import * as i1 from "./stuck.directive";
class TuiTableStyles {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableStyles, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiTableStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-table" }, ngImport: i0, template: '', isInline: true, styles: ["table[tuiTable]{border-collapse:separate;border-spacing:0}table[tuiTable] [tuiCell]{padding:0}table[tuiTable] [tuiTitle]{white-space:nowrap}table[tuiTable] [tuiTitle] tui-icon{font-size:1rem}table[tuiTable] [tuiSubtitle]{color:var(--tui-text-secondary)}table[tuiTable] [tuiTh] [tuiCell],table[tuiTable] [tuiTh] [tuiTitle]{font:inherit;color:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableStyles, decorators: [{
type: Component,
args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
class: 'tui-table',
}, styles: ["table[tuiTable]{border-collapse:separate;border-spacing:0}table[tuiTable] [tuiCell]{padding:0}table[tuiTable] [tuiTitle]{white-space:nowrap}table[tuiTable] [tuiTitle] tui-icon{font-size:1rem}table[tuiTable] [tuiSubtitle]{color:var(--tui-text-secondary)}table[tuiTable] [tuiTh] [tuiCell],table[tuiTable] [tuiTh] [tuiTitle]{font:inherit;color:inherit}\n"] }]
}] });
class TuiTableDirective {
constructor() {
this.options = inject(TUI_TABLE_OPTIONS);
this.cdr = inject(ChangeDetectorRef);
this.nothing = tuiWithStyles(TuiTableStyles);
this.columns = [];
this.direction = this.options.direction;
/**
* @deprecated: use sortChange
*/
this.directionChange = new EventEmitter();
/**
* @deprecated: use sortChange
*/
this.sorterChange = new EventEmitter();
this.sortChange = combineLatest([
this.sorterChange,
this.directionChange,
]).pipe(debounceTime(0), map(([sortComparator, sortDirection]) => ({
sortBy: sortComparator,
orderBy: sortDirection,
sortComparator,
sortDirection,
})));
this.appearance = signal('table');
this.size = signal(this.options.size);
this.cleaner = signal(false);
// TODO: refactor to signal inputs after Angular update
this.change$ = new Subject();
this.sorter = () => 0;
}
set sizeSetter(size) {
this.size.set(size);
}
updateSorterAndDirection(sorter) {
if (this.sorter === sorter) {
this.updateDirection(this.direction === TuiSortDirection.Asc
? TuiSortDirection.Desc
: TuiSortDirection.Asc);
}
else {
this.updateDirection(1);
}
this.updateSorter(sorter);
}
ngOnChanges() {
this.change$.next();
}
ngAfterViewInit() {
this.cdr.detectChanges();
}
updateSorter(sorter) {
this.sorter = sorter || (() => 0);
this.sorterChange.emit(this.sorter);
this.change$.next();
}
updateDirection(direction) {
this.direction = direction;
this.directionChange.emit(this.direction);
this.change$.next();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTableDirective, isStandalone: true, selector: "table[tuiTable]", inputs: { columns: "columns", direction: "direction", sizeSetter: ["size", "sizeSetter"], sorter: "sorter" }, outputs: { directionChange: "directionChange", sorterChange: "sorterChange", sortChange: "sortChange" }, host: { properties: { "attr.data-size": "size()" } }, providers: [
{
provide: WA_INTERSECTION_ROOT_MARGIN,
useValue: '10000px 10000px 10000px 0px',
},
tuiProvide(TUI_TEXTFIELD_OPTIONS, TuiTableDirective),
tuiButtonOptionsProvider({ size: 's' }),
tuiBadgeOptionsProvider({ size: 'm', appearance: 'neutral' }),
tuiChipOptionsProvider({ size: 'xxs', appearance: 'neutral' }),
tuiProgressOptionsProvider({ size: 's', color: 'var(--tui-text-action)' }),
], usesOnChanges: true, hostDirectives: [{ directive: i1.TuiStuck }], ngImport: i0 }); }
}
export { TuiTableDirective };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: 'table[tuiTable]',
providers: [
{
provide: WA_INTERSECTION_ROOT_MARGIN,
useValue: '10000px 10000px 10000px 0px',
},
tuiProvide(TUI_TEXTFIELD_OPTIONS, TuiTableDirective),
tuiButtonOptionsProvider({ size: 's' }),
tuiBadgeOptionsProvider({ size: 'm', appearance: 'neutral' }),
tuiChipOptionsProvider({ size: 'xxs', appearance: 'neutral' }),
tuiProgressOptionsProvider({ size: 's', color: 'var(--tui-text-action)' }),
],
hostDirectives: [TuiStuck],
host: {
'[attr.data-size]': 'size()',
},
}]
}], propDecorators: { columns: [{
type: Input
}], direction: [{
type: Input
}], directionChange: [{
type: Output
}], sorterChange: [{
type: Output
}], sortChange: [{
type: Output
}], sizeSetter: [{
type: Input,
args: ['size']
}], sorter: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tdGFibGUvY29tcG9uZW50cy90YWJsZS9kaXJlY3RpdmVzL3RhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04saUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRS9FLE9BQU8sRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDNUUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFMUUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFMUUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFN0UsT0FBTyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUcvRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQyxNQVVNLGNBQWM7K0dBQWQsY0FBYzttR0FBZCxjQUFjLCtHQVJOLEVBQUU7OzRGQVFWLGNBQWM7a0JBVm5CLFNBQVM7aUNBQ00sSUFBSSxZ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LFFBQVEsQ0FBQztvQkFDMUIsSUFBSSxFQUFFO3dCQUNGLGtCQUFrQixFQUFFLFFBQVE7cUJBQy9CO2lCQUNKOzhCQVVVLE9BQU87c0JBRGIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBT1UsZUFBZTtzQkFEOUIsTUFBTTtnQkFPUyxZQUFZO3NCQUQzQixNQUFNO2dCQUlTLFVBQVU7c0JBRHpCLE1BQU07Z0JBc0JJLFVBQVU7c0JBRHBCLEtBQUs7dUJBQUMsTUFBTTtnQkFNTixNQUFNO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7QWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXQV9JTlRFUlNFQ1RJT05fUk9PVF9NQVJHSU59IGZyb20gJ0BuZy13ZWItYXBpcy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInO1xuaW1wb3J0IHR5cGUge1R1aUNvbXBhcmF0b3J9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi10YWJsZS90eXBlcyc7XG5pbXBvcnQge3R1aVByb3ZpZGUsIHR1aVdpdGhTdHlsZXN9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge3R1aUJ1dHRvbk9wdGlvbnNQcm92aWRlcn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHR5cGUge1R1aVRleHRmaWVsZE9wdGlvbnN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvdGV4dGZpZWxkJztcbmltcG9ydCB7VFVJX1RFWFRGSUVMRF9PUFRJT05TfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL3RleHRmaWVsZCc7XG5pbXBvcnQgdHlwZSB7VHVpU2l6ZUwsIFR1aVNpemVTfSBmcm9tICdAdGFpZ2EtdWkvY29yZS90eXBlcyc7XG5pbXBvcnQge3R1aUJhZGdlT3B0aW9uc1Byb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHt0dWlDaGlwT3B0aW9uc1Byb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvY2hpcCc7XG5pbXBvcnQge3R1aVByb2dyZXNzT3B0aW9uc1Byb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvcHJvZ3Jlc3MnO1xuaW1wb3J0IHR5cGUge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIG1hcCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB0eXBlIHtUdWlUYWJsZVNvcnRDaGFuZ2V9IGZyb20gJy4uL3RhYmxlLm9wdGlvbnMnO1xuaW1wb3J0IHtUVUlfVEFCTEVfT1BUSU9OUywgVHVpU29ydERpcmVjdGlvbn0gZnJvbSAnLi4vdGFibGUub3B0aW9ucyc7XG5pbXBvcnQge1R1aVN0dWNrfSBmcm9tICcuL3N0dWNrLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLnN0eWxlLmxlc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0dWktdGFibGUnLFxuICAgIH0sXG59KVxuY2xhc3MgVHVpVGFibGVTdHlsZXMge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3RhYmxlW3R1aVRhYmxlXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFdBX0lOVEVSU0VDVElPTl9ST09UX01BUkdJTixcbiAgICAgICAgICAgIHVzZVZhbHVlOiAnMTAwMDBweCAxMDAwMHB4IDEwMDAwcHggMHB4JyxcbiAgICAgICAgfSxcbiAgICAgICAgdHVpUHJvdmlkZShUVUlfVEVYVEZJRUxEX09QVElPTlMsIFR1aVRhYmxlRGlyZWN0aXZlKSxcbiAgICAgICAgdHVpQnV0dG9uT3B0aW9uc1Byb3ZpZGVyKHtzaXplOiAncyd9KSxcbiAgICAgICAgdHVpQmFkZ2VPcHRpb25zUHJvdmlkZXIoe3NpemU6ICdtJywgYXBwZWFyYW5jZTogJ25ldXRyYWwnfSksXG4gICAgICAgIHR1aUNoaXBPcHRpb25zUHJvdmlkZXIoe3NpemU6ICd4eHMnLCBhcHBlYXJhbmNlOiAnbmV1dHJhbCd9KSxcbiAgICAgICAgdHVpUHJvZ3Jlc3NPcHRpb25zUHJvdmlkZXIoe3NpemU6ICdzJywgY29sb3I6ICd2YXIoLS10dWktdGV4dC1hY3Rpb24pJ30pLFxuICAgIF0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtUdWlTdHVja10sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuZGF0YS1zaXplXSc6ICdzaXplKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVRhYmxlRGlyZWN0aXZlPFQgZXh0ZW5kcyBQYXJ0aWFsPFJlY29yZDxrZXlvZiBULCBhbnk+Pj5cbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIFR1aVRleHRmaWVsZE9wdGlvbnMsIE9uQ2hhbmdlc1xue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucyA9IGluamVjdChUVUlfVEFCTEVfT1BUSU9OUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vdGhpbmcgPSB0dWlXaXRoU3R5bGVzKFR1aVRhYmxlU3R5bGVzKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbnM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwga2V5b2YgVD4gPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZDogdXNlIHNvcnRDaGFuZ2VcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlyZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUdWlTb3J0RGlyZWN0aW9uPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQ6IHVzZSBzb3J0Q2hhbmdlXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IHNvcnRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VHVpQ29tcGFyYXRvcjxUPiB8IG51bGw+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgc29ydENoYW5nZTogT2JzZXJ2YWJsZTxUdWlUYWJsZVNvcnRDaGFuZ2U8VD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuc29ydGVyQ2hhbmdlLFxuICAgICAgICB0aGlzLmRpcmVjdGlvbkNoYW5nZSxcbiAgICBdKS5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICAgIG1hcCgoW3NvcnRDb21wYXJhdG9yLCBzb3J0RGlyZWN0aW9uXSkgPT4gKHtcbiAgICAgICAgICAgIHNvcnRCeTogc29ydENvbXBhcmF0b3IsXG4gICAgICAgICAgICBvcmRlckJ5OiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgc29ydENvbXBhcmF0b3IsXG4gICAgICAgICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgICB9KSksXG4gICAgKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBhcHBlYXJhbmNlID0gc2lnbmFsKCd0YWJsZScpO1xuICAgIHB1YmxpYyByZWFkb25seSBzaXplID0gc2lnbmFsKHRoaXMub3B0aW9ucy5zaXplKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xlYW5lciA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvLyBUT0RPOiByZWZhY3RvciB0byBzaWduYWwgaW5wdXRzIGFmdGVyIEFuZ3VsYXIgdXBkYXRlXG4gICAgcHVibGljIHJlYWRvbmx5IGNoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgQElucHV0KCdzaXplJylcbiAgICBwdWJsaWMgc2V0IHNpemVTZXR0ZXIoc2l6ZTogVHVpU2l6ZUwgfCBUdWlTaXplUykge1xuICAgICAgICB0aGlzLnNpemUuc2V0KHNpemUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNvcnRlcjogVHVpQ29tcGFyYXRvcjxUPiA9ICgpID0+IDA7XG5cbiAgICBwdWJsaWMgdXBkYXRlU29ydGVyQW5kRGlyZWN0aW9uKHNvcnRlcjogVHVpQ29tcGFyYXRvcjxUPiB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc29ydGVyID09PSBzb3J0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlyZWN0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID09PSBUdWlTb3J0RGlyZWN0aW9uLkFzY1xuICAgICAgICAgICAgICAgICAgICA/IFR1aVNvcnREaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgICAgICAgICA6IFR1aVNvcnREaXJlY3Rpb24uQXNjLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlyZWN0aW9uKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVTb3J0ZXIoc29ydGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTb3J0ZXIoc29ydGVyOiBUdWlDb21wYXJhdG9yPFQ+IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNvcnRlciA9IHNvcnRlciB8fCAoKCkgPT4gMCk7XG4gICAgICAgIHRoaXMuc29ydGVyQ2hhbmdlLmVtaXQodGhpcy5zb3J0ZXIpO1xuICAgICAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRGlyZWN0aW9uKGRpcmVjdGlvbjogVHVpU29ydERpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmRpcmVjdGlvbik7XG4gICAgICAgIHRoaXMuY2hhbmdlJC5uZXh0KCk7XG4gICAgfVxufVxuIl19