UNPKG

@doku-dev/doku-fragment

Version:

A new Angular UI library that moving away from Bootstrap and built from scratch.

132 lines 24.5 kB
import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, ContentChild, HostBinding, Input, ViewEncapsulation, } from '@angular/core'; import { BehaviorSubject, Subject, combineLatest, distinctUntilChanged, filter, iif, map, merge, of, skip, startWith, takeUntil, tap, } from 'rxjs'; import { DokuEndDate } from './end-date.directive'; import { DokuStartDate } from './start-date.directive'; import * as i0 from "@angular/core"; export class DokuDateRangePickerInput { constructor() { this.class = 'd-date-range-picker-input'; this.destroy$ = new Subject(); this.dateChange$ = new BehaviorSubject({ start: null, end: null }); } ngOnInit() { if (this.rangePicker) { this.rangePicker['dateChangeHandler'] = (value) => this.dateChange$.next(value); } } ngAfterContentInit() { this.hideInputs(); this.listenToDateChange(); } ngOnDestroy() { this.destroy$.next(true); this.destroy$.complete(); } hideInputs() { if (this.startDate) { this.startDate['elementRef'].nativeElement.style.display = 'none'; } if (this.endDate) { this.endDate['elementRef'].nativeElement.style.display = 'none'; } } listenToDateChange() { const startDateControl = this.startDate?.['ngControl']?.control; const endDateControl = this.endDate?.['ngControl']?.control; const startDate$ = iif(() => !!startDateControl, startDateControl?.valueChanges.pipe(startWith(this.normalizeDate(startDateControl.getRawValue())), map(this.normalizeDate), distinctUntilChanged(this.distinct)) || of(), of(this.startDate?.['elementRef']).pipe(map((ref) => ref?.nativeElement), map((el) => this.normalizeDate(el.value)), startWith(this.normalizeDate(this.startDate?.['elementRef']?.nativeElement?.target?.value || null)))); const endDate$ = iif(() => !!endDateControl, endDateControl?.valueChanges.pipe(startWith(this.normalizeDate(endDateControl.getRawValue())), map(this.normalizeDate), distinctUntilChanged(this.distinct)) || of(), of(this.endDate?.['elementRef']).pipe(map((ref) => ref?.nativeElement), map((el) => this.normalizeDate(el.value)), startWith(this.normalizeDate(this.endDate?.['elementRef']?.nativeElement?.target?.value || null)))); const dateRange$ = combineLatest([startDate$, endDate$]).pipe(map(([start, end]) => ({ start, end })), distinctUntilChanged(this.distinct), filter((value) => { // Skip if start date is null but end date is exists. if (!value.start && !!value.end) return false; // Skip when choosing start date but end date value still there. if (this.dateChange$.value.start && !this.dateChange$.value.end && value.end) return false; // Skip when resetting value but end date value still the same. if (value.start && value.end && JSON.stringify(value.start) !== JSON.stringify(this.dateChange$.value.start) && JSON.stringify(value.end) === JSON.stringify(this.dateChange$.value.end)) { return false; } return true; })); merge(this.dateChange$.pipe(skip(1)), dateRange$) .pipe( // Set initial value to the date range picker distinctUntilChanged(this.distinct), tap((value) => { if (!this.rangePicker) return; this.rangePicker['value'] = value; this.rangePicker['_cdr'].detectChanges(); }), skip(1), takeUntil(this.destroy$)) .subscribe((value) => { this.emitDateChangeToViewOrControl(value); if (!this.rangePicker) return; this.rangePicker['valueChange'].emit({ start: value.start?.toISOString() || null, end: value.end?.toISOString() || null, }); }); } emitDateChangeToViewOrControl(value) { const startDate = value?.start?.toISOString() || null; const endDate = value?.end?.toISOString() || null; const startDateElement = this.startDate?.['elementRef'].nativeElement; const endDateElement = this.endDate?.['elementRef'].nativeElement; if (startDateElement.value !== startDate) { startDateElement.value = startDate || ''; startDateElement.dispatchEvent(new Event('change')); } if (endDateElement.value !== endDate) { endDateElement.value = endDate || ''; endDateElement.dispatchEvent(new Event('change')); } const startDateControl = this.startDate?.['ngControl']?.control; const endDateControl = this.endDate?.['ngControl']?.control; if (startDateControl && startDateControl.value !== startDate) { startDateControl?.setValue(startDate); } if (endDateControl && endDateControl.value !== endDate) { endDateControl?.setValue(endDate); } } normalizeDate(date) { if (!date) return null; if (!(date instanceof Date || typeof date === 'string')) return null; return date instanceof Date ? date : new Date(date); } distinct(prev, current) { return JSON.stringify(prev) === JSON.stringify(current); } } DokuDateRangePickerInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDateRangePickerInput, deps: [], target: i0.ɵɵFactoryTarget.Component }); DokuDateRangePickerInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DokuDateRangePickerInput, isStandalone: true, selector: "doku-date-range-picker-input", inputs: { rangePicker: "rangePicker" }, host: { properties: { "class": "this.class" } }, queries: [{ propertyName: "startDate", first: true, predicate: DokuStartDate, descendants: true }, { propertyName: "endDate", first: true, predicate: DokuEndDate, descendants: true }], exportAs: ["dokuDateRangePickerInput"], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDateRangePickerInput, decorators: [{ type: Component, args: [{ selector: 'doku-date-range-picker-input', exportAs: 'dokuDateRangePickerInput', standalone: true, imports: [CommonModule], template: `<ng-content></ng-content>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, }] }], propDecorators: { class: [{ type: HostBinding, args: ['class'] }], rangePicker: [{ type: Input }], startDate: [{ type: ContentChild, args: [DokuStartDate] }], endDate: [{ type: ContentChild, args: [DokuEndDate] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXItaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL2RhdGUtcGlja2VyL2NvbW1vbi9kYXRlLXJhbmdlLXBpY2tlci1pbnB1dC9kYXRlLXJhbmdlLXBpY2tlci1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBVyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLE9BQU8sRUFDUCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsR0FBRyxFQUNILEtBQUssRUFDTCxFQUFFLEVBQ0YsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFXdkQsTUFBTSxPQUFPLHdCQUF3QjtJQVRyQztRQVdxQixVQUFLLEdBQXVCLDJCQUEyQixDQUFDO1FBT25FLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXpCLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBa0psRjtJQWhKQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENB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SUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sUUFBUSxDQUFPLElBQU8sRUFBRSxPQUFVO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7O3FIQTVKVSx3QkFBd0I7eUdBQXhCLHdCQUF3Qix3TkFNckIsYUFBYSwwRUFDYixXQUFXLHdGQVhmLDJCQUEyQiwyREFEM0IsWUFBWTsyRkFLWCx3QkFBd0I7a0JBVHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFHb0IsS0FBSztzQkFEdkIsV0FBVzt1QkFBQyxPQUFPO2dCQUdYLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRXVCLFNBQVM7c0JBQXJDLFlBQVk7dUJBQUMsYUFBYTtnQkFDQSxPQUFPO3NCQUFqQyxZQUFZO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIFN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGlpZixcbiAgbWFwLFxuICBtZXJnZSxcbiAgb2YsXG4gIHNraXAsXG4gIHN0YXJ0V2l0aCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZVZhbHVlIH0gZnJvbSAnLi4vLi4vYmFzZS9kYXRlLXBpY2tlci1iYXNlLXByb3BzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb2t1RGF0ZVJhbmdlUGlja2VyIH0gZnJvbSAnLi4vLi4vZGF0ZS1yYW5nZS1waWNrZXItZmxvYXQvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERva3VEYXRlUmFuZ2VQaWNrZXJJbmxpbmUgfSBmcm9tICcuLi8uLi9kYXRlLXJhbmdlLXBpY2tlci1pbmxpbmUvZGF0ZS1yYW5nZS1waWNrZXItaW5saW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb2t1RW5kRGF0ZSB9IGZyb20gJy4vZW5kLWRhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERva3VTdGFydERhdGUgfSBmcm9tICcuL3N0YXJ0LWRhdGUuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZG9rdS1kYXRlLXJhbmdlLXBpY2tlci1pbnB1dCcsXG4gIGV4cG9ydEFzOiAnZG9rdURhdGVSYW5nZVBpY2tlcklucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEb2t1RGF0ZVJhbmdlUGlja2VySW5wdXQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xhc3M6IE5nQ2xhc3NbJ25nQ2xhc3MnXSA9ICdkLWRhdGUtcmFuZ2UtcGlja2VyLWlucHV0JztcblxuICBASW5wdXQoKSByYW5nZVBpY2tlcj86IERva3VEYXRlUmFuZ2VQaWNrZXIgfCBEb2t1RGF0ZVJhbmdlUGlja2VySW5saW5lO1xuXG4gIEBDb250ZW50Q2hpbGQoRG9rdVN0YXJ0RGF0ZSkgc3RhcnREYXRlPzogRG9rdVN0YXJ0RGF0ZTtcbiAgQENvbnRlbnRDaGlsZChEb2t1RW5kRGF0ZSkgZW5kRGF0ZT86IERva3VFbmREYXRlO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgZGF0ZUNoYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGVWYWx1ZT4oeyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJhbmdlUGlja2VyKSB7XG4gICAgICB0aGlzLnJhbmdlUGlja2VyWydkYXRlQ2hhbmdlSGFuZGxlciddID0gKHZhbHVlKSA9PiB0aGlzLmRhdGVDaGFuZ2UkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVJbnB1dHMoKTtcbiAgICB0aGlzLmxpc3RlblRvRGF0ZUNoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZUlucHV0cygpIHtcbiAgICBpZiAodGhpcy5zdGFydERhdGUpIHtcbiAgICAgICh0aGlzLnN0YXJ0RGF0ZVsnZWxlbWVudFJlZiddLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUpIHtcbiAgICAgICh0aGlzLmVuZERhdGVbJ2VsZW1lbnRSZWYnXS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuVG9EYXRlQ2hhbmdlKCkge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUNvbnRyb2wgPSB0aGlzLnN0YXJ0RGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcbiAgICBjb25zdCBlbmREYXRlQ29udHJvbCA9IHRoaXMuZW5kRGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSQgPSBpaWYoXG4gICAgICAoKSA9PiAhIXN0YXJ0RGF0ZUNvbnRyb2wsXG4gICAgICBzdGFydERhdGVDb250cm9sPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMubm9ybWFsaXplRGF0ZShzdGFydERhdGVDb250cm9sLmdldFJhd1ZhbHVlKCkpKSxcbiAgICAgICAgbWFwKHRoaXMubm9ybWFsaXplRGF0ZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHRoaXMuZGlzdGluY3QpXG4gICAgICApIHx8IG9mKCksXG4gICAgICBvZih0aGlzLnN0YXJ0RGF0ZT8uWydlbGVtZW50UmVmJ10pLnBpcGUoXG4gICAgICAgIG1hcCgocmVmKSA9PiByZWY/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCksXG4gICAgICAgIG1hcCgoZWwpID0+IHRoaXMubm9ybWFsaXplRGF0ZShlbC52YWx1ZSkpLFxuICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgdGhpcy5ub3JtYWxpemVEYXRlKHRoaXMuc3RhcnREYXRlPy5bJ2VsZW1lbnRSZWYnXT8ubmF0aXZlRWxlbWVudD8udGFyZ2V0Py52YWx1ZSB8fCBudWxsKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZERhdGUkID0gaWlmKFxuICAgICAgKCkgPT4gISFlbmREYXRlQ29udHJvbCxcbiAgICAgIGVuZERhdGVDb250cm9sPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMubm9ybWFsaXplRGF0ZShlbmREYXRlQ29udHJvbC5nZXRSYXdWYWx1ZSgpKSksXG4gICAgICAgIG1hcCh0aGlzLm5vcm1hbGl6ZURhdGUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLmRpc3RpbmN0KVxuICAgICAgKSB8fCBvZigpLFxuICAgICAgb2YodGhpcy5lbmREYXRlPy5bJ2VsZW1lbnRSZWYnXSkucGlwZShcbiAgICAgICAgbWFwKChyZWYpID0+IHJlZj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KSxcbiAgICAgICAgbWFwKChlbCkgPT4gdGhpcy5ub3JtYWxpemVEYXRlKGVsLnZhbHVlKSksXG4gICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICB0aGlzLm5vcm1hbGl6ZURhdGUodGhpcy5lbmREYXRlPy5bJ2VsZW1lbnRSZWYnXT8ubmF0aXZlRWxlbWVudD8udGFyZ2V0Py52YWx1ZSB8fCBudWxsKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGVSYW5nZSQgPSBjb21iaW5lTGF0ZXN0KFtzdGFydERhdGUkLCBlbmREYXRlJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzdGFydCwgZW5kXSkgPT4gPERhdGVWYWx1ZT57IHN0YXJ0LCBlbmQgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLmRpc3RpbmN0KSxcbiAgICAgIGZpbHRlcigodmFsdWUpID0+IHtcbiAgICAgICAgLy8gU2tpcCBpZiBzdGFydCBkYXRlIGlzIG51bGwgYnV0IGVuZCBkYXRlIGlzIGV4aXN0cy5cbiAgICAgICAgaWYgKCF2YWx1ZS5zdGFydCAmJiAhIXZhbHVlLmVuZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBTa2lwIHdoZW4gY2hvb3Npbmcgc3RhcnQgZGF0ZSBidXQgZW5kIGRhdGUgdmFsdWUgc3RpbGwgdGhlcmUuXG4gICAgICAgIGlmICh0aGlzLmRhdGVDaGFuZ2UkLnZhbHVlLnN0YXJ0ICYmICF0aGlzLmRhdGVDaGFuZ2UkLnZhbHVlLmVuZCAmJiB2YWx1ZS5lbmQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gU2tpcCB3aGVuIHJlc2V0dGluZyB2YWx1ZSBidXQgZW5kIGRhdGUgdmFsdWUgc3RpbGwgdGhlIHNhbWUuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZS5zdGFydCAmJlxuICAgICAgICAgIHZhbHVlLmVuZCAmJlxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlLnN0YXJ0KSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRlQ2hhbmdlJC52YWx1ZS5zdGFydCkgJiZcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZS5lbmQpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGVDaGFuZ2UkLnZhbHVlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBtZXJnZSh0aGlzLmRhdGVDaGFuZ2UkLnBpcGUoc2tpcCgxKSksIGRhdGVSYW5nZSQpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWUgdG8gdGhlIGRhdGUgcmFuZ2UgcGlja2VyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHRoaXMuZGlzdGluY3QpLFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnJhbmdlUGlja2VyKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5yYW5nZVBpY2tlclsndmFsdWUnXSA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMucmFuZ2VQaWNrZXJbJ19jZHInXS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdERhdGVDaGFuZ2VUb1ZpZXdPckNvbnRyb2wodmFsdWUpO1xuXG4gICAgICAgIGlmICghdGhpcy5yYW5nZVBpY2tlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLnJhbmdlUGlja2VyWyd2YWx1ZUNoYW5nZSddLmVtaXQoe1xuICAgICAgICAgIHN0YXJ0OiB2YWx1ZS5zdGFydD8udG9JU09TdHJpbmcoKSB8fCBudWxsLFxuICAgICAgICAgIGVuZDogdmFsdWUuZW5kPy50b0lTT1N0cmluZygpIHx8IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXREYXRlQ2hhbmdlVG9WaWV3T3JDb250cm9sKHZhbHVlOiBEYXRlVmFsdWUpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSB2YWx1ZT8uc3RhcnQ/LnRvSVNPU3RyaW5nKCkgfHwgbnVsbDtcbiAgICBjb25zdCBlbmREYXRlID0gdmFsdWU/LmVuZD8udG9JU09TdHJpbmcoKSB8fCBudWxsO1xuXG4gICAgY29uc3Qgc3RhcnREYXRlRWxlbWVudCA9IHRoaXMuc3RhcnREYXRlPy5bJ2VsZW1lbnRSZWYnXS5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZW5kRGF0ZUVsZW1lbnQgPSB0aGlzLmVuZERhdGU/LlsnZWxlbWVudFJlZiddLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIGlmIChzdGFydERhdGVFbGVtZW50LnZhbHVlICE9PSBzdGFydERhdGUpIHtcbiAgICAgIHN0YXJ0RGF0ZUVsZW1lbnQudmFsdWUgPSBzdGFydERhdGUgfHwgJyc7XG4gICAgICBzdGFydERhdGVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGVFbGVtZW50LnZhbHVlICE9PSBlbmREYXRlKSB7XG4gICAgICBlbmREYXRlRWxlbWVudC52YWx1ZSA9IGVuZERhdGUgfHwgJyc7XG4gICAgICBlbmREYXRlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZUNvbnRyb2wgPSB0aGlzLnN0YXJ0RGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcbiAgICBjb25zdCBlbmREYXRlQ29udHJvbCA9IHRoaXMuZW5kRGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcblxuICAgIGlmIChzdGFydERhdGVDb250cm9sICYmIHN0YXJ0RGF0ZUNvbnRyb2wudmFsdWUgIT09IHN0YXJ0RGF0ZSkge1xuICAgICAgc3RhcnREYXRlQ29udHJvbD8uc2V0VmFsdWUoc3RhcnREYXRlKTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZUNvbnRyb2wgJiYgZW5kRGF0ZUNvbnRyb2wudmFsdWUgIT09IGVuZERhdGUpIHtcbiAgICAgIGVuZERhdGVDb250cm9sPy5zZXRWYWx1ZShlbmREYXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZGF0ZT86IERhdGUgfCBzdHJpbmcgfCBudWxsKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IG5ldyBEYXRlKGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXN0aW5jdDxQLCBDPihwcmV2OiBQLCBjdXJyZW50OiBDKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50KTtcbiAgfVxufVxuIl19