ng19-date-picker
Version:
https://github.com/vlio20/angular-datepicker
126 lines • 18.5 kB
JavaScript
import { EventEmitter, Injectable } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../common/services/utils/utils.service";
import * as i2 from "../time-select/time-select.service";
import * as i3 from "../day-time-calendar/day-time-calendar.service";
export class DatePickerService {
constructor(utilsService, timeSelectService, daytimeCalendarService) {
this.utilsService = utilsService;
this.timeSelectService = timeSelectService;
this.daytimeCalendarService = daytimeCalendarService;
this.onPickerClosed = new EventEmitter();
this.defaultConfig = {
closeOnSelect: true,
closeOnSelectDelay: 100,
closeOnEnter: true,
format: 'DD-MM-YYYY',
openOnFocus: true,
openOnClick: true,
onOpenDelay: 0,
disableKeypress: false,
showNearMonthDays: true,
showWeekNumbers: false,
enableMonthSelector: true,
showGoToCurrent: true,
hideOnOutsideClick: true,
};
}
// todo:: add unit tests
getConfig(config, mode = 'daytime') {
const _config = {
...this.defaultConfig,
format: DatePickerService.getDefaultFormatByMode(mode),
...this.utilsService.clearUndefined(config)
};
this.utilsService.convertPropsToDayjs(_config, _config.format, ['min', 'max']);
if (config && config.allowMultiSelect && config.closeOnSelect === undefined) {
_config.closeOnSelect = false;
}
return _config;
}
getDayConfigService(pickerConfig) {
return {
min: pickerConfig.min,
max: pickerConfig.max,
isDayDisabledCallback: pickerConfig.isDayDisabledCallback,
weekDayFormat: pickerConfig.weekDayFormat,
weekDayFormatter: pickerConfig.weekDayFormatter,
showNearMonthDays: pickerConfig.showNearMonthDays,
showWeekNumbers: pickerConfig.showWeekNumbers,
firstDayOfWeek: pickerConfig.firstDayOfWeek,
format: pickerConfig.format,
allowMultiSelect: pickerConfig.allowMultiSelect,
monthFormat: pickerConfig.monthFormat,
monthFormatter: pickerConfig.monthFormatter,
enableMonthSelector: pickerConfig.enableMonthSelector,
yearFormat: pickerConfig.yearFormat,
yearFormatter: pickerConfig.yearFormatter,
dayBtnFormat: pickerConfig.dayBtnFormat,
dayBtnFormatter: pickerConfig.dayBtnFormatter,
dayBtnCssClassCallback: pickerConfig.dayBtnCssClassCallback,
monthBtnFormat: pickerConfig.monthBtnFormat,
monthBtnFormatter: pickerConfig.monthBtnFormatter,
monthBtnCssClassCallback: pickerConfig.monthBtnCssClassCallback,
isMonthDisabledCallback: pickerConfig.isMonthDisabledCallback,
multipleYearsNavigateBy: pickerConfig.multipleYearsNavigateBy,
showMultipleYearsNavigation: pickerConfig.showMultipleYearsNavigation,
returnedValueType: pickerConfig.returnedValueType,
showGoToCurrent: pickerConfig.showGoToCurrent,
unSelectOnClick: pickerConfig.unSelectOnClick,
numOfMonthRows: pickerConfig.numOfMonthRows
};
}
getDayTimeConfig(pickerConfig) {
return this.daytimeCalendarService.getConfig(pickerConfig);
}
getTimeConfig(pickerConfig) {
return this.timeSelectService.getConfig(pickerConfig);
}
pickerClosed() {
this.onPickerClosed.emit();
}
// todo:: add unit tests
isValidInputDateValue(value, config) {
value = value ? value : '';
const datesStrArr = this.utilsService.datesStringToStringArray(value);
return datesStrArr.every(date => this.utilsService.isDateValid(date, config.format));
}
// todo:: add unit tests
convertInputValueToDayjsArray(value, config) {
value = value ? value : '';
const datesStrArr = this.utilsService.datesStringToStringArray(value);
return this.utilsService.convertToDayjsArray(datesStrArr, config);
}
getOverlayPosition({ drops, opens }) {
if (!drops && !opens) {
return undefined;
}
return [{
originX: opens ? opens === 'left' ? 'start' : 'end' : 'start',
originY: drops ? drops === 'up' ? 'top' : 'bottom' : 'bottom',
overlayX: opens ? opens === 'left' ? 'start' : 'end' : 'start',
overlayY: drops ? drops === 'up' ? 'bottom' : 'top' : 'top',
}];
}
static getDefaultFormatByMode(mode) {
switch (mode) {
case 'day':
return 'DD-MM-YYYY';
case 'daytime':
return 'DD-MM-YYYY HH:mm:ss';
case 'time':
return 'HH:mm:ss';
case 'month':
return 'MMM, YYYY';
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DatePickerService, deps: [{ token: i1.UtilsService }, { token: i2.TimeSelectService }, { token: i3.DayTimeCalendarService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DatePickerService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DatePickerService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.UtilsService }, { type: i2.TimeSelectService }, { type: i3.DayTimeCalendarService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1kYXRlLXBpY2tlci9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7O0FBZ0J2RCxNQUFNLE9BQU8saUJBQWlCO0lBa0I1QixZQUE2QixZQUEwQixFQUMxQixpQkFBb0MsRUFDcEMsc0JBQThDO1FBRjlDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQW5CbEUsbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6RCxrQkFBYSxHQUE4QjtZQUNqRCxhQUFhLEVBQUUsSUFBSTtZQUNuQixrQkFBa0IsRUFBRSxHQUFHO1lBQ3ZCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsZUFBZSxFQUFFLEtBQUs7WUFDdEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixlQUFlLEVBQUUsS0FBSztZQUN0QixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGtCQUFrQixFQUFFLElBQUk7U0FDekIsQ0FBQztJQUtGLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsU0FBUyxDQUFDLE1BQXlCLEVBQUUsT0FBcUIsU0FBUztRQUNqRSxNQUFNLE9BQU8sR0FBOEI7WUFDekMsR0FBRyxJQUFJLENBQUMsYUFBYTtZQUNyQixNQUFNLEVBQUUsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFD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QUFNLENBQUMsc0JBQXNCLENBQUMsSUFBa0I7UUFDdEQsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8scUJBQXFCLENBQUM7WUFDL0IsS0FBSyxNQUFNO2dCQUNULE9BQU8sVUFBVSxDQUFDO1lBQ3BCLEtBQUssT0FBTztnQkFDVixPQUFPLFdBQVcsQ0FBQztTQUN0QjtJQUNILENBQUM7OEdBN0hVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0lEYXRlUGlja2VyQ29uZmlnLCBJRGF0ZVBpY2tlckNvbmZpZ0ludGVybmFsfSBmcm9tICcuL2RhdGUtcGlja2VyLWNvbmZpZy5tb2RlbCc7XG5cbmltcG9ydCB7VXRpbHNTZXJ2aWNlfSBmcm9tICcuLi9jb21tb24vc2VydmljZXMvdXRpbHMvdXRpbHMuc2VydmljZSc7XG5pbXBvcnQge0lEYXlDYWxlbmRhckNvbmZpZ30gZnJvbSAnLi4vZGF5LWNhbGVuZGFyL2RheS1jYWxlbmRhci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHtUaW1lU2VsZWN0U2VydmljZX0gZnJvbSAnLi4vdGltZS1zZWxlY3QvdGltZS1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQge0RheVRpbWVDYWxlbmRhclNlcnZpY2V9IGZyb20gJy4uL2RheS10aW1lLWNhbGVuZGFyL2RheS10aW1lLWNhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHtJVGltZVNlbGVjdENvbmZpZ30gZnJvbSAnLi4vdGltZS1zZWxlY3QvdGltZS1zZWxlY3QtY29uZmlnLm1vZGVsJztcbmltcG9ydCB7Q2FsZW5kYXJNb2RlfSBmcm9tICcuLi9jb21tb24vdHlwZXMvY2FsZW5kYXItbW9kZSc7XG5pbXBvcnQge0RheWpzfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQge0lEYXlUaW1lQ2FsZW5kYXJDb25maWd9IGZyb20gJy4uL2RheS10aW1lLWNhbGVuZGFyL2RheS10aW1lLWNhbGVuZGFyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQge0Nvbm5lY3Rpb25Qb3NpdGlvblBhaXJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlclNlcnZpY2Uge1xuICByZWFkb25seSBvblBpY2tlckNsb3NlZDogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIGRlZmF1bHRDb25maWc6IElEYXRlUGlja2VyQ29uZmlnSW50ZXJuYWwgPSB7XG4gICAgY2xvc2VPblNlbGVjdDogdHJ1ZSxcbiAgICBjbG9zZU9uU2VsZWN0RGVsYXk6IDEwMCxcbiAgICBjbG9zZU9uRW50ZXI6IHRydWUsXG4gICAgZm9ybWF0OiAnREQtTU0tWVlZWScsXG4gICAgb3Blbk9uRm9jdXM6IHRydWUsXG4gICAgb3Blbk9uQ2xpY2s6IHRydWUsXG4gICAgb25PcGVuRGVsYXk6IDAsXG4gICAgZGlzYWJsZUtleXByZXNzOiBmYWxzZSxcbiAgICBzaG93TmVhck1vbnRoRGF5czogdHJ1ZSxcbiAgICBzaG93V2Vla051bWJlcnM6IGZhbHNlLFxuICAgIGVuYWJsZU1vbnRoU2VsZWN0b3I6IHRydWUsXG4gICAgc2hvd0dvVG9DdXJyZW50OiB0cnVlLFxuICAgIGhpZGVPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHV0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRpbWVTZWxlY3RTZXJ2aWNlOiBUaW1lU2VsZWN0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkYXl0aW1lQ2FsZW5kYXJTZXJ2aWNlOiBEYXlUaW1lQ2FsZW5kYXJTZXJ2aWNlKSB7XG4gIH1cblxuICAvLyB0b2RvOjogYWRkIHVuaXQgdGVzdHNcbiAgZ2V0Q29uZmlnKGNvbmZpZzogSURhdGVQaWNrZXJDb25maWcsIG1vZGU6IENhbGVuZGFyTW9kZSA9ICdkYXl0aW1lJyk6IElEYXRlUGlja2VyQ29uZmlnSW50ZXJuYWwge1xuICAgIGNvbnN0IF9jb25maWcgPSA8SURhdGVQaWNrZXJDb25maWdJbnRlcm5hbD57XG4gICAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXG4gICAgICBmb3JtYXQ6IERhdGVQaWNrZXJTZXJ2aWNlLmdldERlZmF1bHRGb3JtYXRCeU1vZGUobW9kZSksXG4gICAgICAuLi50aGlzLnV0aWxzU2VydmljZS5jbGVhclVuZGVmaW5lZChjb25maWcpXG4gICAgfTtcblxuICAgIHRoaXMudXRpbHNTZXJ2aWNlLmNvbnZlcnRQcm9wc1RvRGF5anMoX2NvbmZpZywgX2NvbmZpZy5mb3JtYXQsIFsnbWluJywgJ21heCddKTtcblxuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93TXVsdGlTZWxlY3QgJiYgY29uZmlnLmNsb3NlT25TZWxlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX2NvbmZpZy5jbG9zZU9uU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9jb25maWc7XG4gIH1cblxuICBnZXREYXlDb25maWdTZXJ2aWNlKHBpY2tlckNvbmZpZzogSURhdGVQaWNrZXJDb25maWcpOiBJRGF5Q2FsZW5kYXJDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IHBpY2tlckNvbmZpZy5taW4sXG4gICAgICBtYXg6IHBpY2tlckNvbmZpZy5tYXgsXG4gICAgICBpc0RheURpc2FibGVkQ2FsbGJhY2s6IHBpY2tlckNvbmZpZy5pc0RheURpc2FibGVkQ2FsbGJhY2ssXG4gICAgICB3ZWVrRGF5Rm9ybWF0OiBwaWNrZXJDb25maWcud2Vla0RheUZvcm1hdCxcbiAgICAgIHdlZWtEYXlGb3JtYXR0ZXI6IHBpY2tlckNvbmZpZy53ZWVrRGF5Rm9ybWF0dGVyLFxuICAgICAgc2hvd05lYXJNb250aERheXM6IHBpY2tlckNvbmZpZy5zaG93TmVhck1vbnRoRGF5cyxcbiAgICAgIHNob3dXZWVrTnVtYmVyczogcGlja2VyQ29uZmlnLnNob3dXZWVrTnVtYmVycyxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiBwaWNrZXJDb25maWcuZmlyc3REYXlPZldlZWssXG4gICAgICBmb3JtYXQ6IHBpY2tlckNvbmZpZy5mb3JtYXQsXG4gICAgICBhbGxvd011bHRpU2VsZWN0OiBwaWNrZXJDb25maWcuYWxsb3dNdWx0aVNlbGVjdCxcbiAgICAgIG1vbnRoRm9ybWF0OiBwaWNrZXJDb25maWcubW9udGhGb3JtYXQsXG4gICAgICBtb250aEZvcm1hdHRlcjogcGlja2VyQ29uZmlnLm1vbnRoRm9ybWF0dGVyLFxuICAgICAgZW5hYmxlTW9udGhTZWxlY3RvcjogcGlja2VyQ29uZmlnLmVuYWJsZU1vbnRoU2VsZWN0b3IsXG4gICAgICB5ZWFyRm9ybWF0OiBwaWNrZXJDb25maWcueWVhckZvcm1hdCxcbiAgICAgIHllYXJGb3JtYXR0ZXI6IHBpY2tlckNvbmZpZy55ZWFyRm9ybWF0dGVyLFxuICAgICAgZGF5QnRuRm9ybWF0OiBwaWNrZXJDb25maWcuZGF5QnRuRm9ybWF0LFxuICAgICAgZGF5QnRuRm9ybWF0dGVyOiBwaWNrZXJDb25maWcuZGF5QnRuRm9ybWF0dGVyLFxuICAgICAgZGF5QnRuQ3NzQ2xhc3NDYWxsYmFjazogcGlja2VyQ29uZmlnLmRheUJ0bkNzc0NsYXNzQ2FsbGJhY2ssXG4gICAgICBtb250aEJ0bkZvcm1hdDogcGlja2VyQ29uZmlnLm1vbnRoQnRuRm9ybWF0LFxuICAgICAgbW9udGhCdG5Gb3JtYXR0ZXI6IHBpY2tlckNvbmZpZy5tb250aEJ0bkZvcm1hdHRlcixcbiAgICAgIG1vbnRoQnRuQ3NzQ2xhc3NDYWxsYmFjazogcGlja2VyQ29uZmlnLm1vbnRoQnRuQ3NzQ2xhc3NDYWxsYmFjayxcbiAgICAgIGlzTW9udGhEaXNhYmxlZENhbGxiYWNrOiBwaWNrZXJDb25maWcuaXNNb250aERpc2FibGVkQ2FsbGJhY2ssXG4gICAgICBtdWx0aXBsZVllYXJzTmF2aWdhdGVCeTogcGlja2VyQ29uZmlnLm11bHRpcGxlWWVhcnNOYXZpZ2F0ZUJ5LFxuICAgICAgc2hvd011bHRpcGxlWWVhcnNOYXZpZ2F0aW9uOiBwaWNrZXJDb25maWcuc2hvd011bHRpcGxlWWVhcnNOYXZpZ2F0aW9uLFxuICAgICAgcmV0dXJuZWRWYWx1ZVR5cGU6IHBpY2tlckNvbmZpZy5yZXR1cm5lZFZhbHVlVHlwZSxcbiAgICAgIHNob3dHb1RvQ3VycmVudDogcGlja2VyQ29uZmlnLnNob3dHb1RvQ3VycmVudCxcbiAgICAgIHVuU2VsZWN0T25DbGljazogcGlja2VyQ29uZmlnLnVuU2VsZWN0T25DbGljayxcbiAgICAgIG51bU9mTW9udGhSb3dzOiBwaWNrZXJDb25maWcubnVtT2ZNb250aFJvd3NcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF5VGltZUNvbmZpZyhwaWNrZXJDb25maWc6IElEYXRlUGlja2VyQ29uZmlnKTogSURheVRpbWVDYWxlbmRhckNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF5dGltZUNhbGVuZGFyU2VydmljZS5nZXRDb25maWcocGlja2VyQ29uZmlnKTtcbiAgfVxuXG4gIGdldFRpbWVDb25maWcocGlja2VyQ29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyk6IElUaW1lU2VsZWN0Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy50aW1lU2VsZWN0U2VydmljZS5nZXRDb25maWcocGlja2VyQ29uZmlnKTtcbiAgfVxuXG4gIHBpY2tlckNsb3NlZCgpIHtcbiAgICB0aGlzLm9uUGlja2VyQ2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIC8vIHRvZG86OiBhZGQgdW5pdCB0ZXN0c1xuICBpc1ZhbGlkSW5wdXREYXRlVmFsdWUodmFsdWU6IHN0cmluZywgY29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6ICcnO1xuICAgIGNvbnN0IGRhdGVzU3RyQXJyOiBzdHJpbmdbXSA9IHRoaXMudXRpbHNTZXJ2aWNlLmRhdGVzU3RyaW5nVG9TdHJpbmdBcnJheSh2YWx1ZSk7XG5cbiAgICByZXR1cm4gZGF0ZXNTdHJBcnIuZXZlcnkoZGF0ZSA9PiB0aGlzLnV0aWxzU2VydmljZS5pc0RhdGVWYWxpZChkYXRlLCBjb25maWcuZm9ybWF0KSk7XG4gIH1cblxuICAvLyB0b2RvOjogYWRkIHVuaXQgdGVzdHNcbiAgY29udmVydElucHV0VmFsdWVUb0RheWpzQXJyYXkodmFsdWU6IHN0cmluZywgY29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyk6IERheWpzW10ge1xuICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6ICcnO1xuICAgIGNvbnN0IGRhdGVzU3RyQXJyOiBzdHJpbmdbXSA9IHRoaXMudXRpbHNTZXJ2aWNlLmRhdGVzU3RyaW5nVG9TdHJpbmdBcnJheSh2YWx1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy51dGlsc1NlcnZpY2UuY29udmVydFRvRGF5anNBcnJheShkYXRlc1N0ckFyciwgY29uZmlnKTtcbiAgfVxuXG4gIGdldE92ZXJsYXlQb3NpdGlvbih7ZHJvcHMsIG9wZW5zfTogSURhdGVQaWNrZXJDb25maWcpOiAgQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWRyb3BzICYmICFvcGVucykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3tcbiAgICAgIG9yaWdpblg6IG9wZW5zID8gb3BlbnMgPT09ICdsZWZ0JyA/ICdzdGFydCcgOiAnZW5kJyA6ICdzdGFydCcsXG4gICAgICBvcmlnaW5ZOiAgZHJvcHMgPyBkcm9wcyA9PT0gJ3VwJyA/ICd0b3AnIDogJ2JvdHRvbScgOiAnYm90dG9tJyxcbiAgICAgIG92ZXJsYXlYOiBvcGVucyA/IG9wZW5zID09PSAnbGVmdCcgPyAnc3RhcnQnIDogJ2VuZCcgOiAnc3RhcnQnLFxuICAgICAgb3ZlcmxheVk6IGRyb3BzID8gZHJvcHMgPT09ICd1cCcgPyAnYm90dG9tJyA6ICd0b3AnIDogJ3RvcCcsXG4gICAgfV07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREZWZhdWx0Rm9ybWF0QnlNb2RlKG1vZGU6IENhbGVuZGFyTW9kZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICByZXR1cm4gJ0RELU1NLVlZWVknO1xuICAgICAgY2FzZSAnZGF5dGltZSc6XG4gICAgICAgIHJldHVybiAnREQtTU0tWVlZWSBISDptbTpzcyc7XG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgcmV0dXJuICdISDptbTpzcyc7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiAnTU1NLCBZWVlZJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==