UNPKG

@asadi/angular-date-components

Version:

`Angular Date Components` is a comprehensive angular library of date-related components designed to meet the needs of applications that require localization based on various calendar systems. While the package currently includes two powerful components (S

126 lines 18.6 kB
import { inject } from '@angular/core'; import { ADC_DATE_ADAPTER, ADC_DATE_FORMATTER, ADC_LABELS, ADC_OPTIONS } from '@asadi/angular-date-components/core'; import { Subject, takeUntil } from 'rxjs'; import { DateChangeService } from '@asadi/angular-date-components/core'; import { ADCSchedulerSource } from '../../directives/adc-scheduler-source.directive'; import { ADCSchedulerTools } from '../../utils/scheduler.tools'; /** * Base class for the ADC scheduler. This class provides fundamental functionality for managing date changes, * event handling, and interacting with the scheduler source. It handles the event subscription and delegates * specific logic to abstract methods for customization. */ export class AdcSchedulerBase { constructor() { // Private members this.destroy$ = new Subject(); this.dateChangeService = inject(DateChangeService); this.schedulerSource = inject(ADCSchedulerSource); this.isViewReady = false; /** * The date adapter used for managing date-related operations. */ this.dateAdapter = inject(ADC_DATE_ADAPTER); /** * The date formatter used for formatting dates. */ this.dateFormatter = inject(ADC_DATE_FORMATTER); /** * A utility toolset for the scheduler, offering additional methods for scheduling operations. */ this.tools = new ADCSchedulerTools(); /** * The optional set of labels used for UI display. */ this.labels = inject(ADC_LABELS); this.options = inject(ADC_OPTIONS); /** * start of date provided in the scheduler component use it to set initial date range. */ this.startOf = this.schedulerSource.startOf; } /** * Initializes the scheduler by setting up event subscriptions and handlers. * Subscribes to date change and event change notifications from the date change service and scheduler source. * * @returns void */ init() { this.initViewHanlder(); // Subscribe to date change events this.dateChangeService.onNext().pipe(takeUntil(this.destroy$)).subscribe(() => { this.isViewReady = false; this.nextButtonHandler(); }); this.dateChangeService.onPrevious().pipe(takeUntil(this.destroy$)).subscribe(() => { this.isViewReady = false; this.previousButtonHandler(); }); this.dateChangeService.onToday().pipe(takeUntil(this.destroy$)).subscribe(() => { this.isViewReady = false; this.todayButtonHandler(); }); // Subscribe to event changes from the scheduler source this.schedulerSource.eventChanges().pipe(takeUntil(this.destroy$)).subscribe((e) => { if (!this.isViewReady) return; this.eventChangesHandler(e); }); // Subscribe to holiday changes this.schedulerSource.holidayChanges().pipe(takeUntil(this.destroy$)).subscribe((value) => { this.holidaysChangesHandler(value); }); // Subscribe to weekend changes this.schedulerSource.weekendChanges().pipe(takeUntil(this.destroy$)).subscribe((value) => { this.weekendsChangesHandler(value); }); } /** * Sends a date range change event to the scheduler source. * * @param e - The date range change event to be emitted. * @returns void */ dateRangeChange(e) { this.schedulerSource.onDateRangeChange(e); } /** * Sends a date range selection event to the scheduler source. * * @param e - The date range selection event to be emitted. * @returns void */ dateRangeSelect(e) { this.schedulerSource.onDateRangeSelect(e); } /** * Sends an event selection event to the scheduler source. * * @param e - The event selection event to be emitted. * @returns void */ eventClick(e) { this.schedulerSource.onEventSelect(e); } /** * Marks the view as ready to process events. * * Once this method is called: * - The `eventChangesHandler` will be triggered immediately with the current list of events. * - Subsequent updates to events will also be handled automatically until the view is marked as unready. * * @returns void */ markViewAsReady() { this.isViewReady = true; this.eventChangesHandler(this.schedulerSource.events); } /** * Cleans up subscriptions when the component or service is destroyed. * * @returns void */ destroy() { this.destroy$.next(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjLXNjaGVkdWxlci1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNhZGkvYW5ndWxhci1kYXRlLWNvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL2FkYy1zY2hlZHVsZXItYmFzZS9hZGMtc2NoZWR1bGVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQXlHLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzTixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdoRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUFFRSxrQkFBa0I7UUFDRCxhQUFRLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDeEMsc0JBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLG9CQUFlLEdBQXVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXJDOztXQUVHO1FBQ00sZ0JBQVcsR0FBb0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFakU7O1dBRUc7UUFDTSxrQkFBYSxHQUFzQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV2RTs7V0FFRztRQUNNLFVBQUssR0FBc0IsSUFBSSxpQkFBaUIsRUFBRSxDQUFD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LGVBQWU7UUFFYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBRENJRGF0ZUFkYXB0ZXIsIEFEQ0lEYXRlRm9ybWF0dGVyLCBBRENJRGF0ZVJhbmdlQ2hhbmdlRXZlbnQsIEFEQ0lMYWJlbHMsIEFEQ0lPcHRpb25zLCBBRENJVGFibGVFdmVudCwgQURDX0RBVEVfQURBUFRFUiwgQURDX0RBVEVfRk9STUFUVEVSLCBBRENfTEFCRUxTLCBBRENfT1BUSU9OUyB9IGZyb20gJ0Bhc2FkaS9hbmd1bGFyLWRhdGUtY29tcG9uZW50cy9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERhdGVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnQGFzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUnO1xyXG5pbXBvcnQgeyBBRENTY2hlZHVsZXJTb3VyY2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2FkYy1zY2hlZHVsZXItc291cmNlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFEQ0lTY2hlZHVsZXJEYXRlUmFuZ2VTZWxlY3RFdmVudCwgQURDSVNjaGVkdWxlckV2ZW50LCBBRENJU2NoZWR1bGVyRXZlbnRTZWxlY3RFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS5nbG9iYWwnO1xyXG5pbXBvcnQgeyBBRENTY2hlZHVsZXJUb29scyB9IGZyb20gJy4uLy4uL3V0aWxzL3NjaGVkdWxlci50b29scyc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIHRoZSBBREMgc2NoZWR1bGVyLiBUaGlzIGNsYXNzIHByb3ZpZGVzIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgZm9yIG1hbmFnaW5nIGRhdGUgY2hhbmdlcyxcclxuICogZXZlbnQgaGFuZGxpbmcsIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSBzY2hlZHVsZXIgc291cmNlLiBJdCBoYW5kbGVzIHRoZSBldmVudCBzdWJzY3JpcHRpb24gYW5kIGRlbGVnYXRlcyBcclxuICogc3BlY2lmaWMgbG9naWMgdG8gYWJzdHJhY3QgbWV0aG9kcyBmb3IgY3VzdG9taXphdGlvbi5cclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZGNTY2hlZHVsZXJCYXNlIHtcclxuXHJcbiAgLy8gUHJpdmF0ZSBtZW1iZXJzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRlQ2hhbmdlU2VydmljZTogRGF0ZUNoYW5nZVNlcnZpY2UgPSBpbmplY3QoRGF0ZUNoYW5nZVNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVyU291cmNlOiBBRENTY2hlZHVsZXJTb3VyY2UgPSBpbmplY3QoQURDU2NoZWR1bGVyU291cmNlKTtcclxuICBwcml2YXRlIGlzVmlld1JlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkYXRlIGFkYXB0ZXIgdXNlZCBmb3IgbWFuYWdpbmcgZGF0ZS1yZWxhdGVkIG9wZXJhdGlvbnMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZGF0ZUFkYXB0ZXI6IEFEQ0lEYXRlQWRhcHRlciA9IGluamVjdChBRENfREFURV9BREFQVEVSKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRhdGUgZm9ybWF0dGVyIHVzZWQgZm9yIGZvcm1hdHRpbmcgZGF0ZXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZGF0ZUZvcm1hdHRlcjogQURDSURhdGVGb3JtYXR0ZXIgPSBpbmplY3QoQURDX0RBVEVfRk9STUFUVEVSKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSB1dGlsaXR5IHRvb2xzZXQgZm9yIHRoZSBzY2hlZHVsZXIsIG9mZmVyaW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2NoZWR1bGluZyBvcGVyYXRpb25zLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHRvb2xzOiBBRENTY2hlZHVsZXJUb29scyA9IG5ldyBBRENTY2hlZHVsZXJUb29scygpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgb3B0aW9uYWwgc2V0IG9mIGxhYmVscyB1c2VkIGZvciBVSSBkaXNwbGF5LlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGxhYmVscz86IEFEQ0lMYWJlbHMgPSBpbmplY3QoQURDX0xBQkVMUyk7XHJcblxyXG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3Q8QURDSU9wdGlvbnM+KEFEQ19PUFRJT05TKTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICogc3RhcnQgb2YgZGF0ZSBwcm92aWRlZCBpbiB0aGUgc2NoZWR1bGVyIGNvbXBvbmVudCB1c2UgaXQgdG8gc2V0IGluaXRpYWwgZGF0ZSByYW5nZS5cclxuICAgKi9cclxuICByZWFkb25seSBzdGFydE9mOiBzdHJpbmcgfCBudWxsID0gdGhpcy5zY2hlZHVsZXJTb3VyY2Uuc3RhcnRPZjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHNjaGVkdWxlciBieSBzZXR0aW5nIHVwIGV2ZW50IHN1YnNjcmlwdGlvbnMgYW5kIGhhbmRsZXJzLlxyXG4gICAqIFN1YnNjcmliZXMgdG8gZGF0ZSBjaGFuZ2UgYW5kIGV2ZW50IGNoYW5nZSBub3RpZmljYXRpb25zIGZyb20gdGhlIGRhdGUgY2hhbmdlIHNlcnZpY2UgYW5kIHNjaGVkdWxlciBzb3VyY2UuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gIGluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRWaWV3SGFubGRlcigpO1xyXG5cclxuICAgIC8vIFN1YnNjcmliZSB0byBkYXRlIGNoYW5nZSBldmVudHNcclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2Uub25OZXh0KCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNWaWV3UmVhZHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5uZXh0QnV0dG9uSGFuZGxlcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kYXRlQ2hhbmdlU2VydmljZS5vblByZXZpb3VzKCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNWaWV3UmVhZHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcmV2aW91c0J1dHRvbkhhbmRsZXIoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2Uub25Ub2RheSgpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzVmlld1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9kYXlCdXR0b25IYW5kbGVyKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gZXZlbnQgY2hhbmdlcyBmcm9tIHRoZSBzY2hlZHVsZXIgc291cmNlXHJcbiAgICB0aGlzLnNjaGVkdWxlclNvdXJjZS5ldmVudENoYW5nZXMoKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmlzVmlld1JlYWR5KSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLmV2ZW50Q2hhbmdlc0hhbmRsZXIoZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gaG9saWRheSBjaGFuZ2VzXHJcbiAgICB0aGlzLnNjaGVkdWxlclNvdXJjZS5ob2xpZGF5Q2hhbmdlcygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICB0aGlzLmhvbGlkYXlzQ2hhbmdlc0hhbmRsZXIodmFsdWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIHdlZWtlbmQgY2hhbmdlc1xyXG4gICAgdGhpcy5zY2hlZHVsZXJTb3VyY2Uud2Vla2VuZENoYW5nZXMoKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZTogbnVtYmVyW10pID0+IHtcclxuICAgICAgdGhpcy53ZWVrZW5kc0NoYW5nZXNIYW5kbGVyKHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlciBmb3IgdGhlIGluaXQgdmlldy4gVGhpcyBtZXRob2Qgc2hvdWxkIGltcGxlbWVudCBsb2dpYyBmb3Igc2V0dGluZyB0aGUgaW5pdGlhbCB2aWV3IGRhdGUuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gIGFic3RyYWN0IGluaXRWaWV3SGFubGRlcigpOiB2b2lkO1xyXG5cclxuICAvLyBBYnN0cmFjdCBtZXRob2RzIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlciBmb3IgdGhlICdUb2RheScgYnV0dG9uLiBUaGlzIG1ldGhvZCBzaG91bGQgaW1wbGVtZW50IGxvZ2ljIGZvciByZXNldHRpbmcgdG8gdG9kYXkncyBkYXRlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHZvaWRcclxuICAgKi9cclxuICBhYnN0cmFjdCB0b2RheUJ1dHRvbkhhbmRsZXIoKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlciBmb3IgdGhlICdQcmV2aW91cycgYnV0dG9uLiBUaGlzIG1ldGhvZCBzaG91bGQgaW1wbGVtZW50IGxvZ2ljIGZvciBuYXZpZ2F0aW5nIHRvIHRoZSBwcmV2aW91cyBkYXRlIHJhbmdlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHZvaWRcclxuICAgKi9cclxuICBhYnN0cmFjdCBwcmV2aW91c0J1dHRvbkhhbmRsZXIoKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlciBmb3IgdGhlICdOZXh0JyBidXR0b24uIFRoaXMgbWV0aG9kIHNob3VsZCBpbXBsZW1lbnQgbG9naWMgZm9yIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgZGF0ZSByYW5nZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB2b2lkXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgbmV4dEJ1dHRvbkhhbmRsZXIoKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlciBmb3IgZXZlbnQgY2hhbmdlcy4gVGhpcyBtZXRob2Qgc2hvdWxkIGltcGxlbWVudCBsb2dpYyBmb3IgcHJvY2Vzc2luZyB1cGRhdGVkIHNjaGVkdWxlciBldmVudHMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHNjaGVkdWxlckV2ZW50cyAtIFRoZSB1cGRhdGVkIGxpc3Qgb2Ygc2NoZWR1bGVyIGV2ZW50cy5cclxuICAgKiBAcmV0dXJucyB2b2lkXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgZXZlbnRDaGFuZ2VzSGFuZGxlcihzY2hlZHVsZXJFdmVudHM6IEFEQ0lTY2hlZHVsZXJFdmVudFtdIHwgdW5kZWZpbmVkKTogdm9pZDtcclxuXHJcbiAgLy8gLyoqXHJcbiAgLy8gICogSGFuZGxlciBmb3IgZGF0ZSBjaGFuZ2VzLiBUaGlzIG1ldGhvZCBzaG91bGQgaW1wbGVtZW50IGxvZ2ljIGZvciBwcm9jZXNzaW5nIHVwZGF0ZWQgZGF0ZSByYW5nZXMuXHJcbiAgLy8gICogXHJcbiAgLy8gICogQHJldHVybnMgdm9pZFxyXG4gIC8vICAqL1xyXG4gIC8vIGFic3RyYWN0IGRhdGVDaGFuZ2VzSGFuZGxlcigpOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVyIGZvciBjaGFuZ2VzIHRvIHdlZWtlbmRzLiBUaGlzIG1ldGhvZCBzaG91bGQgaW1wbGVtZW50IGxvZ2ljIGZvciBwcm9jZXNzaW5nIHVwZGF0ZWQgd2Vla2VuZCBpbmZvcm1hdGlvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gd2Vla2VuZHMgLSBUaGUgdXBkYXRlZCBsaXN0IG9mIHdlZWtlbmQgZGF5cy5cclxuICAgKiBAcmV0dXJucyB2b2lkXHJcbiAgICovXHJcbiAgYWJzdHJhY3Qgd2Vla2VuZHNDaGFuZ2VzSGFuZGxlcih3ZWVrZW5kczogbnVtYmVyW10pOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVyIGZvciBjaGFuZ2VzIHRvIGhvbGlkYXlzLiBUaGlzIG1ldGhvZCBzaG91bGQgaW1wbGVtZW50IGxvZ2ljIGZvciBwcm9jZXNzaW5nIHVwZGF0ZWQgaG9saWRheSBpbmZvcm1hdGlvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gaG9saWRheXMgLSBUaGUgdXBkYXRlZCBsaXN0IG9mIGhvbGlkYXkgZGF0ZXMuXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gIGFic3RyYWN0IGhvbGlkYXlzQ2hhbmdlc0hhbmRsZXIoaG9saWRheXM6IHN0cmluZ1tdKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBkYXRlIHJhbmdlIGNoYW5nZSBldmVudCB0byB0aGUgc2NoZWR1bGVyIHNvdXJjZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gZSAtIFRoZSBkYXRlIHJhbmdlIGNoYW5nZSBldmVudCB0byBiZSBlbWl0dGVkLlxyXG4gICAqIEByZXR1cm5zIHZvaWRcclxuICAgKi9cclxuICBkYXRlUmFuZ2VDaGFuZ2UoZTogQURDSURhdGVSYW5nZUNoYW5nZUV2ZW50KSB7XHJcbiAgICB0aGlzLnNjaGVkdWxlclNvdXJjZS5vbkRhdGVSYW5nZUNoYW5nZShlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgZGF0ZSByYW5nZSBzZWxlY3Rpb24gZXZlbnQgdG8gdGhlIHNjaGVkdWxlciBzb3VyY2UuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGUgLSBUaGUgZGF0ZSByYW5nZSBzZWxlY3Rpb24gZXZlbnQgdG8gYmUgZW1pdHRlZC5cclxuICAgKiBAcmV0dXJucyB2b2lkXHJcbiAgICovXHJcbiAgZGF0ZVJhbmdlU2VsZWN0KGU6IEFEQ0lTY2hlZHVsZXJEYXRlUmFuZ2VTZWxlY3RFdmVudCkge1xyXG4gICAgdGhpcy5zY2hlZHVsZXJTb3VyY2Uub25EYXRlUmFuZ2VTZWxlY3QoZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhbiBldmVudCBzZWxlY3Rpb24gZXZlbnQgdG8gdGhlIHNjaGVkdWxlciBzb3VyY2UuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGUgLSBUaGUgZXZlbnQgc2VsZWN0aW9uIGV2ZW50IHRvIGJlIGVtaXR0ZWQuXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gIGV2ZW50Q2xpY2soZTogQURDSVNjaGVkdWxlckV2ZW50U2VsZWN0RXZlbnQpIHtcclxuICAgIHRoaXMuc2NoZWR1bGVyU291cmNlLm9uRXZlbnRTZWxlY3QoZSk7XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBvbkV2ZW50Q2xpY2soZXZlbnQ6IEFEQ0lUYWJsZUV2ZW50LCBkb206IEhUTUxFbGVtZW50LCBqc0V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTWFya3MgdGhlIHZpZXcgYXMgcmVhZHkgdG8gcHJvY2VzcyBldmVudHMuXHJcbiAgICogXHJcbiAgICogT25jZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQ6XHJcbiAgICogLSBUaGUgYGV2ZW50Q2hhbmdlc0hhbmRsZXJgIHdpbGwgYmUgdHJpZ2dlcmVkIGltbWVkaWF0ZWx5IHdpdGggdGhlIGN1cnJlbnQgbGlzdCBvZiBldmVudHMuXHJcbiAgICogLSBTdWJzZXF1ZW50IHVwZGF0ZXMgdG8gZXZlbnRzIHdpbGwgYWxzbyBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgdW50aWwgdGhlIHZpZXcgaXMgbWFya2VkIGFzIHVucmVhZHkuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gIG1hcmtWaWV3QXNSZWFkeSgpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5pc1ZpZXdSZWFkeSA9IHRydWU7XHJcbiAgICB0aGlzLmV2ZW50Q2hhbmdlc0hhbmRsZXIodGhpcy5zY2hlZHVsZXJTb3VyY2UuZXZlbnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFucyB1cCBzdWJzY3JpcHRpb25zIHdoZW4gdGhlIGNvbXBvbmVudCBvciBzZXJ2aWNlIGlzIGRlc3Ryb3llZC5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB2b2lkXHJcbiAgICovXHJcbiAgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gIH1cclxufVxyXG4iXX0=