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 20.1 kB
import { inject } from '@angular/core'; import { ADC_DATE_ADAPTER, ADC_DATE_FORMATTER, ADC_LABELS, ADC_OPTIONS, DateChangeService } from '@asadi/angular-date-components/core'; import { Subject, takeUntil } from 'rxjs'; import { ADCResourceSchedulerSource } from '../../directives/adc-resource-scheduler-source.directive'; import { ADCResourceSchedulerTools } from '../../utils/resource-scheduler.tools'; /** * The `AdcResourceSchedulerBase` class provides the base functionality for resource schedulers. * It manages date navigation, event changes, and resource updates. Derived classes are expected to * implement specific handling for buttons, event changes, resource changes, and date range changes. */ export class AdcResourceSchedulerBase { constructor() { this.destory$ = new Subject(); this.dateChangeService = inject(DateChangeService); this.resourceSchedulerSource = inject(ADCResourceSchedulerSource); this.isViewReady = false; /** * The date adapter used for formatting and managing date operations in the resouce scheduler. */ this.dateAdapter = inject(ADC_DATE_ADAPTER); /** * The date formatter used to format dates in the resource scheduler. */ this.dateFormatter = inject(ADC_DATE_FORMATTER); /** * Utility tools for working with resource scheduler data. */ this.tools = new ADCResourceSchedulerTools(); /** * Optional labels used for localizing or customizing the text displayed in the resource scheduler. */ this.labels = inject(ADC_LABELS); /** * start of date provided in the scheduler component use it to set initial date range. */ this.startOf = this.resourceSchedulerSource.startOf; this.options = inject(ADC_OPTIONS); } /** * Initializes the resource scheduler by subscribing to date and resource changes, and setting up event handlers. */ init() { this.initViewHanlder(); this.dateChangeService.onNext().pipe(takeUntil(this.destory$)).subscribe(() => { this.isViewReady = false; this.nextButtonHandler(); ///this.dateChangesHandler(); //this.eventChangesHandler(undefined); }); this.dateChangeService.onPrevious().pipe(takeUntil(this.destory$)).subscribe(() => { this.isViewReady = false; this.previousButtonHandler(); //this.dateChangesHandler(); //this.eventChangesHandler(undefined); }); this.dateChangeService.onToday().pipe(takeUntil(this.destory$)).subscribe(() => { this.isViewReady = false; this.todayButtonHandler(); //this.dateChangesHandler(); //this.eventChangesHandler(undefined); }); this.resourceSchedulerSource.resourceChanges().pipe(takeUntil(this.destory$)).subscribe((value) => { this.isViewReady = false; this.resourceChangesHandler(value); //this.dateChangesHandler(); //this.eventChangesHandler(undefined); }); this.resourceSchedulerSource.eventChanges().pipe(takeUntil(this.destory$)).subscribe((events) => { if (!this.isViewReady) return; this.eventChangesHandler(events); }); this.resourceSchedulerSource.holidayChanges().pipe(takeUntil(this.destory$)).subscribe((value) => { this.holidaysChangesHandler(value); //this.dateChangesHandler(); }); this.resourceSchedulerSource.weekendChanges().pipe(takeUntil(this.destory$)).subscribe((value) => { this.weekendChangesHandler(value); //this.dateChangesHandler(); }); } /** * Handles date range change events and forwards them to the resource scheduler source. * * @param e - The date range change event. */ dateRangeChange(e) { this.resourceSchedulerSource.onDateRangeChange(e); } /** * Handles date range select events and forwards them to the resource scheduler source. * * @param e - The date range select event. */ dateRangeSelect(e) { this.resourceSchedulerSource.onDateRangeSelect(e); } /** * Handles event select events and forwards them to the resource scheduler source. * * @param e - The event select event. */ eventClick(e) { this.resourceSchedulerSource.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.resourceSchedulerSource.events); } /** * Destroys the resource scheduler instance and cleans up any active subscriptions. */ destory() { this.destory$.next(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjLXJlc291cmNlLXNjaGVkdWxlci1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNhZGkvYW5ndWxhci1kYXRlLWNvbXBvbmVudHMvcmVzb3VyY2Utc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXItYmFzZS9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQXlHLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5TyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVqRjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFnQix3QkFBd0I7SUFBOUM7UUFFbUIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0Isc0JBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLDRCQUF1QixHQUErQixNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNsRyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVuQzs7U0FFQztRQUNNLGdCQUFXLEdBQW9CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhFOztVQUVFO1FBQ00sa0JBQWEsR0FBc0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFckU7O1NBRUM7UUFDTSxVQUFLLEdBQThCLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUUxRTs7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ZUFBZSxDQUFDLENBQTJCO1FBRXpDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUM7Ozs7S0FJQztJQUNILGVBQWUsQ0FBQyxDQUFrQztRQUVoRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVDOzs7O0tBSUM7SUFDSCxVQUFVLENBQUMsQ0FBd0M7UUFFakQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBSUM7Ozs7Ozs7O0tBUUM7SUFDRCxlQUFlO1FBRWIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUY7O01BRUU7SUFDSCxPQUFPO1FBRUwsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQURDSURhdGVBZGFwdGVyLCBBRENJRGF0ZUZvcm1hdHRlciwgQURDSURhdGVSYW5nZUNoYW5nZUV2ZW50LCBBRENJTGFiZWxzLCBBRENJT3B0aW9ucywgQURDSVRhYmxlRXZlbnQsIEFEQ19EQVRFX0FEQVBURVIsIEFEQ19EQVRFX0ZPUk1BVFRFUiwgQURDX0xBQkVMUywgQURDX09QVElPTlMsIERhdGVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnQGFzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQURDUmVzb3VyY2VTY2hlZHVsZXJTb3VyY2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXItc291cmNlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFEQ0lSZXNvdXJjZVNjaGVkdWxlckV2ZW50LCBBRENJUmVzb3VyY2VTY2hlZHVsZXJFdmVudFNlbGVjdEV2ZW50LCBBRENJUmVzb3VyY2VTY2hlZHVsZXJSZXNvdXJjZSwgQURDSVJlc291cmNlU2NoZWR1bGVyVGFibGVFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS5nbG9iYWwnO1xyXG5pbXBvcnQgeyBBRENSZXNvdXJjZVNjaGVkdWxlclRvb2xzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzb3VyY2Utc2NoZWR1bGVyLnRvb2xzJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYEFkY1Jlc291cmNlU2NoZWR1bGVyQmFzZWAgY2xhc3MgcHJvdmlkZXMgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eSBmb3IgcmVzb3VyY2Ugc2NoZWR1bGVycy5cclxuICogSXQgbWFuYWdlcyBkYXRlIG5hdmlnYXRpb24sIGV2ZW50IGNoYW5nZXMsIGFuZCByZXNvdXJjZSB1cGRhdGVzLiBEZXJpdmVkIGNsYXNzZXMgYXJlIGV4cGVjdGVkIHRvXHJcbiAqIGltcGxlbWVudCBzcGVjaWZpYyBoYW5kbGluZyBmb3IgYnV0dG9ucywgZXZlbnQgY2hhbmdlcywgcmVzb3VyY2UgY2hhbmdlcywgYW5kIGRhdGUgcmFuZ2UgY2hhbmdlcy5cclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZGNSZXNvdXJjZVNjaGVkdWxlckJhc2Uge1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3RvcnkkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGVDaGFuZ2VTZXJ2aWNlOiBEYXRlQ2hhbmdlU2VydmljZSA9IGluamVjdChEYXRlQ2hhbmdlU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZVNjaGVkdWxlclNvdXJjZTogQURDUmVzb3VyY2VTY2hlZHVsZXJTb3VyY2UgPSBpbmplY3QoQURDUmVzb3VyY2VTY2hlZHVsZXJTb3VyY2UpO1xyXG4gIHByaXZhdGUgaXNWaWV3UmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgKiBUaGUgZGF0ZSBhZGFwdGVyIHVzZWQgZm9yIGZvcm1hdHRpbmcgYW5kIG1hbmFnaW5nIGRhdGUgb3BlcmF0aW9ucyBpbiB0aGUgcmVzb3VjZSBzY2hlZHVsZXIuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZGF0ZUFkYXB0ZXI6IEFEQ0lEYXRlQWRhcHRlciA9IGluamVjdChBRENfREFURV9BREFQVEVSKTtcclxuXHJcbiAgIC8qKlxyXG4gICAqIFRoZSBkYXRlIGZvcm1hdHRlciB1c2VkIHRvIGZvcm1hdCBkYXRlcyBpbiB0aGUgcmVzb3VyY2Ugc2NoZWR1bGVyLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRhdGVGb3JtYXR0ZXI6IEFEQ0lEYXRlRm9ybWF0dGVyID0gaW5qZWN0KEFEQ19EQVRFX0ZPUk1BVFRFUik7XHJcblxyXG4gICAgLyoqXHJcbiAgICogVXRpbGl0eSB0b29scyBmb3Igd29ya2luZyB3aXRoIHJlc291cmNlIHNjaGVkdWxlciBkYXRhLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHRvb2xzOiBBRENSZXNvdXJjZVNjaGVkdWxlclRvb2xzID0gbmV3IEFEQ1Jlc291cmNlU2NoZWR1bGVyVG9vbHMoKTtcclxuXHJcbiAgICAvKipcclxuICAgKiBPcHRpb25hbCBsYWJlbHMgdXNlZCBmb3IgbG9jYWxpemluZyBvciBjdXN0b21pemluZyB0aGUgdGV4dCBkaXNwbGF5ZWQgaW4gdGhlIHJlc291cmNlIHNjaGVkdWxlci5cclxuICAgKi9cclxuICByZWFkb25seSBsYWJlbHM/OiBBRENJTGFiZWxzID0gaW5qZWN0KEFEQ19MQUJFTFMpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBzdGFydCBvZiBkYXRlIHByb3ZpZGVkIGluIHRoZSBzY2hlZHVsZXIgY29tcG9uZW50IHVzZSBpdCB0byBzZXQgaW5pdGlhbCBkYXRlIHJhbmdlLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHN0YXJ0T2Y6IHN0cmluZyB8IG51bGwgPSB0aGlzLnJlc291cmNlU2NoZWR1bGVyU291cmNlLnN0YXJ0T2Y7XHJcblxyXG4gIHJlYWRvbmx5IG9wdGlvbnM6IEFEQ0lPcHRpb25zID0gaW5qZWN0KEFEQ19PUFRJT05TKTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHJlc291cmNlIHNjaGVkdWxlciBieSBzdWJzY3JpYmluZyB0byBkYXRlIGFuZCByZXNvdXJjZSBjaGFuZ2VzLCBhbmQgc2V0dGluZyB1cCBldmVudCBoYW5kbGVycy5cclxuICAgKi9cclxuICBpbml0KCk6IHZvaWQgXHJcbiAge1xyXG4gICAgdGhpcy5pbml0Vmlld0hhbmxkZXIoKTtcclxuXHJcbiAgICB0aGlzLmRhdGVDaGFuZ2VTZXJ2aWNlLm9uTmV4dCgpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdG9yeSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzVmlld1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubmV4dEJ1dHRvbkhhbmRsZXIoKTtcclxuICAgICAgLy8vdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICAgICAgLy90aGlzLmV2ZW50Q2hhbmdlc0hhbmRsZXIodW5kZWZpbmVkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2Uub25QcmV2aW91cygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdG9yeSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzVmlld1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlvdXNCdXR0b25IYW5kbGVyKCk7XHJcbiAgICAgIC8vdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICAgICAgLy90aGlzLmV2ZW50Q2hhbmdlc0hhbmRsZXIodW5kZWZpbmVkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2Uub25Ub2RheSgpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdG9yeSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzVmlld1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9kYXlCdXR0b25IYW5kbGVyKCk7XHJcbiAgICAgIC8vdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICAgICAgLy90aGlzLmV2ZW50Q2hhbmdlc0hhbmRsZXIodW5kZWZpbmVkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzb3VyY2VTY2hlZHVsZXJTb3VyY2UucmVzb3VyY2VDaGFuZ2VzKCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0b3J5JCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5pc1ZpZXdSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc291cmNlQ2hhbmdlc0hhbmRsZXIodmFsdWUpO1xyXG4gICAgICAvL3RoaXMuZGF0ZUNoYW5nZXNIYW5kbGVyKCk7XHJcbiAgICAgIC8vdGhpcy5ldmVudENoYW5nZXNIYW5kbGVyKHVuZGVmaW5lZCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc291cmNlU2NoZWR1bGVyU291cmNlLmV2ZW50Q2hhbmdlcygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdG9yeSQpKS5zdWJzY3JpYmUoKGV2ZW50cykgPT4ge1xyXG4gICAgICBpZighdGhpcy5pc1ZpZXdSZWFkeSkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5ldmVudENoYW5nZXNIYW5kbGVyKGV2ZW50cyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc291cmNlU2NoZWR1bGVyU291cmNlLmhvbGlkYXlDaGFuZ2VzKCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0b3J5JCkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgIHRoaXMuaG9saWRheXNDaGFuZ2VzSGFuZGxlcih2YWx1ZSk7XHJcbiAgICAgIC8vdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzb3VyY2VTY2hlZHVsZXJTb3VyY2Uud2Vla2VuZENoYW5nZXMoKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3RvcnkkKSkuc3Vic2NyaWJlKCh2YWx1ZTogbnVtYmVyW10pID0+IHtcclxuICAgICAgdGhpcy53ZWVrZW5kQ2hhbmdlc0hhbmRsZXIodmFsdWUpO1xyXG4gICAgICAvL3RoaXMuZGF0ZUNoYW5nZXNIYW5kbGVyKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogSGFuZGxlciBmb3IgdGhlIGluaXQgdmlldy4gVGhpcyBtZXRob2Qgc2hvdWxkIGltcGxlbWVudCBsb2dpYyBmb3Igc2V0dGluZyB0aGUgaW5pdGlhbCB2aWV3IGRhdGUuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gICAgYWJzdHJhY3QgaW5pdFZpZXdIYW5sZGVyKCk6IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICogQWJzdHJhY3QgbWV0aG9kIGZvciBoYW5kbGluZyB0aGUgXCJUb2RheVwiIGJ1dHRvbiBjbGljay5cclxuICAgKiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgdG9kYXlCdXR0b25IYW5kbGVyKCk6IHZvaWRcclxuXHJcbiAgICAvKipcclxuICAgKiBBYnN0cmFjdCBtZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBcIlByZXZpb3VzXCIgYnV0dG9uIGNsaWNrLlxyXG4gICAqIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy5cclxuICAgKi9cclxuICBhYnN0cmFjdCBwcmV2aW91c0J1dHRvbkhhbmRsZXIoKTogdm9pZFxyXG5cclxuICAgIC8qKlxyXG4gICAqIEFic3RyYWN0IG1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIFwiTmV4dFwiIGJ1dHRvbiBjbGljay5cclxuICAgKiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgbmV4dEJ1dHRvbkhhbmRsZXIoKTogdm9pZFxyXG5cclxuICAgIC8qKlxyXG4gICAqIEFic3RyYWN0IG1ldGhvZCBmb3IgaGFuZGxpbmcgY2hhbmdlcyB0byBldmVudHMuXHJcbiAgICogTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBldmVudHMgLSBUaGUgZXZlbnRzIHRoYXQgaGF2ZSBjaGFuZ2VkLCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIGV2ZW50cy5cclxuICAgKi9cclxuICBhYnN0cmFjdCBldmVudENoYW5nZXNIYW5kbGVyKGV2ZW50czogQURDSVJlc291cmNlU2NoZWR1bGVyRXZlbnRbXSk6IHZvaWRcclxuXHJcbiAgICAvKipcclxuICAgKiBBYnN0cmFjdCBtZXRob2QgZm9yIGhhbmRsaW5nIGNoYW5nZXMgdG8gcmVzb3VyY2VzLlxyXG4gICAqIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gcmVzb3VyY2VzIC0gVGhlIHJlc291cmNlcyB0aGF0IGhhdmUgY2hhbmdlZC5cclxuICAgKi9cclxuICBhYnN0cmFjdCByZXNvdXJjZUNoYW5nZXNIYW5kbGVyKHJlc291cmNlczogQURDSVJlc291cmNlU2NoZWR1bGVyUmVzb3VyY2VbXSk6IHZvaWRcclxuXHJcbiAgLy8gICAvKipcclxuICAvLyAgKiBBYnN0cmFjdCBtZXRob2QgZm9yIGhhbmRsaW5nIGRhdGUgY2hhbmdlcy5cclxuICAvLyAgKiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXHJcbiAgLy8gICovXHJcbiAgLy8gYWJzdHJhY3QgZGF0ZUNoYW5nZXNIYW5kbGVyKCk6IHZvaWRcclxuXHJcbiAgICAvKipcclxuICAgKiBBYnN0cmFjdCBtZXRob2QgZm9yIGhhbmRsaW5nIGNoYW5nZXMgdG8gaG9saWRheXMuXHJcbiAgICogTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBob2xpZGF5cyAtIFRoZSB1cGRhdGVkIGxpc3Qgb2YgaG9saWRheXMuXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgaG9saWRheXNDaGFuZ2VzSGFuZGxlcihob2xpZGF5czogc3RyaW5nW10pOiB2b2lkXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAqIEFic3RyYWN0IG1ldGhvZCBmb3IgaGFuZGxpbmcgY2hhbmdlcyB0byB3ZWVrZW5kcy5cclxuICAgKiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHdlZWtlbmRzIC0gVGhlIHVwZGF0ZWQgbGlzdCBvZiB3ZWVrZW5kcy5cclxuICAgKi9cclxuICBhYnN0cmFjdCB3ZWVrZW5kQ2hhbmdlc0hhbmRsZXIod2Vla2VuZHM6IG51bWJlcltdKTogdm9pZFxyXG5cclxuICAgIC8qKlxyXG4gICAqIEhhbmRsZXMgZGF0ZSByYW5nZSBjaGFuZ2UgZXZlbnRzIGFuZCBmb3J3YXJkcyB0aGVtIHRvIHRoZSByZXNvdXJjZSBzY2hlZHVsZXIgc291cmNlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBlIC0gVGhlIGRhdGUgcmFuZ2UgY2hhbmdlIGV2ZW50LlxyXG4gICAqL1xyXG4gIGRhdGVSYW5nZUNoYW5nZShlOiBBRENJRGF0ZVJhbmdlQ2hhbmdlRXZlbnQpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5yZXNvdXJjZVNjaGVkdWxlclNvdXJjZS5vbkRhdGVSYW5nZUNoYW5nZShlKTtcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogSGFuZGxlcyBkYXRlIHJhbmdlIHNlbGVjdCBldmVudHMgYW5kIGZvcndhcmRzIHRoZW0gdG8gdGhlIHJlc291cmNlIHNjaGVkdWxlciBzb3VyY2UuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGUgLSBUaGUgZGF0ZSByYW5nZSBzZWxlY3QgZXZlbnQuXHJcbiAgICovXHJcbiAgZGF0ZVJhbmdlU2VsZWN0KGU6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclRhYmxlRXZlbnQpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5yZXNvdXJjZVNjaGVkdWxlclNvdXJjZS5vbkRhdGVSYW5nZVNlbGVjdChlKTtcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogSGFuZGxlcyBldmVudCBzZWxlY3QgZXZlbnRzIGFuZCBmb3J3YXJkcyB0aGVtIHRvIHRoZSByZXNvdXJjZSBzY2hlZHVsZXIgc291cmNlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBlIC0gVGhlIGV2ZW50IHNlbGVjdCBldmVudC5cclxuICAgKi9cclxuICBldmVudENsaWNrKGU6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlckV2ZW50U2VsZWN0RXZlbnQpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5yZXNvdXJjZVNjaGVkdWxlclNvdXJjZS5vbkV2ZW50U2VsZWN0KGUpO1xyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3Qgb25FdmVudENsaWNrKGV2ZW50OiBBRENJVGFibGVFdmVudCwgZG9tOiBIVE1MRWxlbWVudCwganNFdmVudDogTW91c2VFdmVudCk6IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICogTWFya3MgdGhlIHZpZXcgYXMgcmVhZHkgdG8gcHJvY2VzcyBldmVudHMuXHJcbiAgICogXHJcbiAgICogT25jZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQ6XHJcbiAgICogLSBUaGUgYGV2ZW50Q2hhbmdlc0hhbmRsZXJgIHdpbGwgYmUgdHJpZ2dlcmVkIGltbWVkaWF0ZWx5IHdpdGggdGhlIGN1cnJlbnQgbGlzdCBvZiBldmVudHMuXHJcbiAgICogLSBTdWJzZXF1ZW50IHVwZGF0ZXMgdG8gZXZlbnRzIHdpbGwgYWxzbyBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgdW50aWwgdGhlIHZpZXcgaXMgbWFya2VkIGFzIHVucmVhZHkuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gICAgbWFya1ZpZXdBc1JlYWR5KCk6IHZvaWRcclxuICAgIHtcclxuICAgICAgdGhpcy5pc1ZpZXdSZWFkeSA9IHRydWU7XHJcbiAgICAgIHRoaXMuZXZlbnRDaGFuZ2VzSGFuZGxlcih0aGlzLnJlc291cmNlU2NoZWR1bGVyU291cmNlLmV2ZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAvKipcclxuICAgKiBEZXN0cm95cyB0aGUgcmVzb3VyY2Ugc2NoZWR1bGVyIGluc3RhbmNlIGFuZCBjbGVhbnMgdXAgYW55IGFjdGl2ZSBzdWJzY3JpcHRpb25zLlxyXG4gICAqL1xyXG4gIGRlc3RvcnkoKTogdm9pZCBcclxuICB7XHJcbiAgICB0aGlzLmRlc3RvcnkkLm5leHQoKTtcclxuICB9XHJcbn1cclxuIl19