@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
JavaScript
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=