systelab-translate
Version:
The internationalization (i18n) library for Systelab
205 lines • 26 kB
JavaScript
import { format, setHours, setMilliseconds, setMinutes, setSeconds } from 'date-fns';
import { ca, de, enGB, enUS, es, fr, gl, it, ja, ko, lt, nl, pl, pt, ru, sk, th, zhCN } from 'date-fns/locale';
export class DateUtil {
constructor(locale) {
this.locale = locale;
}
setLocale(lang) {
this.locale = lang;
}
formatDate(date) {
if (!date) {
return undefined;
}
return format(date, this.getDateFormat());
}
formatDateFullYear(date) {
if (!date) {
return undefined;
}
return format(date, this.getDateFormat(true));
}
formatTime(date, withSeconds) {
if (!date) {
return undefined;
}
return format(date, this.getTimeFormat(withSeconds));
}
formatDateTime(date, fullYear, withSeconds) {
if (!date) {
return undefined;
}
const formattedDate = (fullYear) ? this.formatDateFullYear(date) : this.formatDate(date);
const formattedHour = this.formatTime(date, withSeconds);
return formattedDate + ' ' + formattedHour;
}
formatMonthAndYear(date) {
if (!date) {
return undefined;
}
return format(date, 'MMMM, yyyy', { locale: this.convertSystelabLocaleToDateFnsLocale(this.locale) });
}
formatDateAndShortMonth(date) {
if (!date) {
return undefined;
}
return format(date, 'd MMM', { locale: this.convertSystelabLocaleToDateFnsLocale(this.locale) });
}
getDateFrom(date) {
let d = setHours(date, 0);
d = setMinutes(d, 0);
d = setSeconds(d, 0);
d = setMilliseconds(d, 0);
return d;
}
getDateTo(date) {
let d = setHours(date, 23);
d = setMinutes(d, 59);
d = setSeconds(d, 59);
d = setMilliseconds(d, 999);
return d;
}
getDateMidDay(date) {
let d = setHours(date, 12);
d = setMinutes(d, 0);
d = setSeconds(d, 0);
d = setMilliseconds(d, 0);
return d;
}
getTimeFormat(withSeconds = false) {
if (withSeconds) {
return this.locale === 'en-US' ? 'hh:mm:ss a' : 'HH:mm:ss';
}
else {
return this.locale === 'en-US' ? 'hh:mm a' : 'HH:mm';
}
}
getDateFormat(fullDateFormat = false) {
return this.getLocalizedStringDateFormat(this.locale, fullDateFormat);
}
getDateFormatForDatePicker(fullDateFormat = false) {
return this.getLocalizedDateFormatForDatePicker(this.locale, fullDateFormat);
}
getFirstDayOfWeek() {
switch (this.locale) {
case 'en-US':
case 'zh-CN':
case 'th-TH':
case 'ja-JA':
return 0; // Sunday
default:
return 1; // Monday
}
}
getSeparator(locale) {
switch (locale) {
case 'pl-PL':
case 'lt-LT':
case 'pt-PT':
case 'pt-BR':
case 'nl-NL':
return '-';
case 'sk-SK':
case 'ru-RU':
case 'de-DE':
return '.';
default:
return '/';
}
}
parseDate(currentDateValue, locale) {
if (!locale) {
locale = this.locale;
}
if (!currentDateValue) {
return undefined;
}
const auxArray = currentDateValue.split(this.getSeparator(locale));
if (auxArray.indexOf('') > -1) {
return undefined;
}
switch (locale) {
case 'pl-PL':
case 'lt-LT':
return new Date(auxArray.join('/'));
case 'zh-CN':
case 'ja-JA':
case 'en-US':
return new Date(currentDateValue);
default:
return new Date(auxArray[1] + '/' + auxArray[0] + '/' + auxArray[2]);
}
}
convertSystelabLocaleToDateFnsLocale(localeString) {
const localeForSystelabLocale = new Map([
['es', es], ['es-ES', es], ['es-CL', es], ['es-MX', es], ['es-UY', es], ['es-AR', es], ['es-BO', es],
['es-CO', es], ['es-CR', es], ['es-DO', es], ['es-EC', es], ['es-SV', es], ['es-GT', es], ['es-HN', es],
['es-NI', es], ['es-PA', es], ['es-PY', es], ['es-PE', es], ['es-PR', es], ['es-VE', es], ['fr', fr],
['fr-FR', fr], ['it', it], ['it-IT', it], ['en', enUS], ['en-US', enUS], ['en-GB', enGB], ['pt', pt],
['pt-BR', pt], ['ca', ca], ['gl', gl], ['lt', lt], ['lt-LT', lt], ['pl', pl], ['pl-PL', pl], ['sk', sk],
['sk-SK', sk], ['ru', ru], ['ru-RU', ru], ['zh', zhCN], ['zh-CN', zhCN], ['de', de], ['de-DE', de],
['th', th], ['th-TH', th], ['ja', ja], ['ja-JA', ja], ['ko', ko], ['ko-KR', ko], ['nl', nl], ['nl-NL', nl],
]);
const locale = localeForSystelabLocale.get(localeString);
return locale ? locale : enUS;
}
getLocalizedStringDateFormat(locale, fullDateFormat = false) {
const year = fullDateFormat ? 'yyyy' : 'yy';
switch (locale) {
case 'en-US':
return fullDateFormat ? `MM/dd/${year}` : `M/d/${year}`;
case 'ko-KO':
return `${year}. M. d`;
case 'pl-PL':
case 'lt-LT':
return `${year}-MM-dd`;
case 'pt-PT':
case 'pt-BR':
case 'nl-NL':
return `dd-MM-${year}`;
case 'sk-SK':
case 'ru-RU':
return `d.M.${year}`;
case 'zh-ZH':
return `${year}-M-d`;
case 'de-DE':
return `dd.MM.${year}`;
case 'th-TH':
return `d/M/${year}`;
case 'ja-JA':
return `${year}/MM/dd`;
default:
return `dd/MM/${year}`;
}
}
getLocalizedDateFormatForDatePicker(locale, fullDateFormat = false) {
const year = fullDateFormat ? 'yy' : 'y';
switch (locale) {
case 'en-US':
return fullDateFormat ? `mm/dd/${year}` : `m/d/${year}`;
case 'ko-KO':
return `${year}. m. d`;
case 'pl-PL':
case 'lt-LT':
return `${year}-mm-dd`;
case 'pt-PT':
case 'pt-BR':
case 'nl-NL':
return `dd-mm-${year}`;
case 'sk-SK':
case 'ru-RU':
return `d.m.${year}`;
case 'zh-CN':
return `${year}-m-d`;
case 'de-DE':
return `dd.mm.${year}`;
case 'th-TH':
return `d/m/${year}`;
case 'ja-JA':
return `${year}/mm/dd`;
default:
return `dd/mm/${year}`;
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3lzdGVsYWItdHJhbnNsYXRlL3NyYy9saWIvZGF0ZS11dGlsL2RhdGUtdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyRixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRyxNQUFNLE9BQU8sUUFBUTtJQUVwQixZQUFzQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNwQyxDQUFDO0lBRU0sU0FBUyxDQUFDLElBQVk7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFVO1FBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNYLE9BQU8sU0FBUyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLGtCQUFrQixDQUFDLElBQVU7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1gsT0FBTyxTQUFTLENBQUM7UUFDbEIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENB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QUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3BHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN2RyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDcEcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FB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T0FBTyxDQUFDO1lBQ2IsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLE9BQU87Z0JBQ1gsT0FBTyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ3hCLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxPQUFPO2dCQUNYLE9BQU8sT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN0QixLQUFLLE9BQU87Z0JBQ1gsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDO1lBQ3RCLEtBQUssT0FBTztnQkFDWCxPQUFPLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDeEIsS0FBSyxPQUFPO2dCQUNYLE9BQU8sT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN0QixLQUFLLE9BQU87Z0JBQ1gsT0FBTyxHQUFHLElBQUksUUFBUSxDQUFDO1lBQ3hCO2dCQUNDLE9BQU8sU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0YsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0LCBzZXRIb3Vycywgc2V0TWlsbGlzZWNvbmRzLCBzZXRNaW51dGVzLCBzZXRTZWNvbmRzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgY2EsIGRlLCBlbkdCLCBlblVTLCBlcywgZnIsIGdsLCBpdCwgamEsIGtvLCBsdCwgbmwsIHBsLCBwdCwgcnUsIHNrLCB0aCwgemhDTiB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XG5cbmV4cG9ydCBjbGFzcyBEYXRlVXRpbCB7XG5cblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIGxvY2FsZTogc3RyaW5nKSB7XG5cdH1cblxuXHRwdWJsaWMgc2V0TG9jYWxlKGxhbmc6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubG9jYWxlID0gbGFuZztcblx0fVxuXG5cdHB1YmxpYyBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCB0aGlzLmdldERhdGVGb3JtYXQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0RGF0ZUZ1bGxZZWFyKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCB0aGlzLmdldERhdGVGb3JtYXQodHJ1ZSkpO1xuXHR9XG5cblx0cHVibGljIGZvcm1hdFRpbWUoZGF0ZTogRGF0ZSwgd2l0aFNlY29uZHM/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRpZiAoIWRhdGUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXQoZGF0ZSwgdGhpcy5nZXRUaW1lRm9ybWF0KHdpdGhTZWNvbmRzKSk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSwgZnVsbFllYXI/OiBib29sZWFuLCB3aXRoU2Vjb25kcz86IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IChmdWxsWWVhcikgPyB0aGlzLmZvcm1hdERhdGVGdWxsWWVhcihkYXRlKSA6IHRoaXMuZm9ybWF0RGF0ZShkYXRlKTtcblx0XHRjb25zdCBmb3JtYXR0ZWRIb3VyID0gdGhpcy5mb3JtYXRUaW1lKGRhdGUsIHdpdGhTZWNvbmRzKTtcblx0XHRyZXR1cm4gZm9ybWF0dGVkRGF0ZSArICcgJyArIGZvcm1hdHRlZEhvdXI7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0TW9udGhBbmRZZWFyKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCAnTU1NTSwgeXl5eScsIHtsb2NhbGU6IHRoaXMuY29udmVydFN5c3RlbGFiTG9jYWxlVG9EYXRlRm5zTG9jYWxlKHRoaXMubG9jYWxlKX0pO1xuXHR9XG5cblx0cHVibGljIGZvcm1hdERhdGVBbmRTaG9ydE1vbnRoKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCAnZCBNTU0nLCB7bG9jYWxlOiB0aGlzLmNvbnZlcnRTeXN0ZWxhYkxvY2FsZVRvRGF0ZUZuc0xvY2FsZSh0aGlzLmxvY2FsZSl9KTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRlRnJvbShkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0bGV0IGQ6IERhdGUgPSBzZXRIb3VycyhkYXRlLCAwKTtcblx0XHRkID0gc2V0TWludXRlcyhkLCAwKTtcblx0XHRkID0gc2V0U2Vjb25kcyhkLCAwKTtcblx0XHRkID0gc2V0TWlsbGlzZWNvbmRzKGQsIDApO1xuXHRcdHJldHVybiBkO1xuXHR9XG5cblx0cHVibGljIGdldERhdGVUbyhkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0bGV0IGQ6IERhdGUgPSBzZXRIb3VycyhkYXRlLCAyMyk7XG5cdFx0ZCA9IHNldE1pbnV0ZXMoZCwgNTkpO1xuXHRcdGQgPSBzZXRTZWNvbmRzKGQsIDU5KTtcblx0XHRkID0gc2V0TWlsbGlzZWNvbmRzKGQsIDk5OSk7XG5cdFx0cmV0dXJuIGQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZU1pZERheShkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0bGV0IGQ6IERhdGUgPSBzZXRIb3VycyhkYXRlLCAxMik7XG5cdFx0ZCA9IHNldE1pbnV0ZXMoZCwgMCk7XG5cdFx0ZCA9IHNldFNlY29uZHMoZCwgMCk7XG5cdFx0ZCA9IHNldE1pbGxpc2Vjb25kcyhkLCAwKTtcblx0XHRyZXR1cm4gZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lRm9ybWF0KHdpdGhTZWNvbmRzID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGlmICh3aXRoU2Vjb25kcykge1xuXHRcdFx0cmV0dXJuIHRoaXMubG9jYWxlID09PSAnZW4tVVMnID8gJ2hoOm1tOnNzIGEnIDogJ0hIOm1tOnNzJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMubG9jYWxlID09PSAnZW4tVVMnID8gJ2hoOm1tIGEnIDogJ0hIOm1tJztcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZUZvcm1hdChmdWxsRGF0ZUZvcm1hdCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbGl6ZWRTdHJpbmdEYXRlRm9ybWF0KHRoaXMubG9jYWxlLCBmdWxsRGF0ZUZvcm1hdCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZUZvcm1hdEZvckRhdGVQaWNrZXIoZnVsbERhdGVGb3JtYXQgPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkRGF0ZUZvcm1hdEZvckRhdGVQaWNrZXIodGhpcy5sb2NhbGUsIGZ1bGxEYXRlRm9ybWF0KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRGaXJzdERheU9mV2VlaygpOiBudW1iZXIge1xuXHRcdHN3aXRjaCAodGhpcy5sb2NhbGUpIHtcblx0XHRcdGNhc2UgJ2VuLVVTJzpcblx0XHRcdGNhc2UgJ3poLUNOJzpcblx0XHRcdGNhc2UgJ3RoLVRIJzpcblx0XHRcdGNhc2UgJ2phLUpBJzpcblx0XHRcdFx0cmV0dXJuIDA7IC8vIFN1bmRheVxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDE7IC8vIE1vbmRheVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRTZXBhcmF0b3IobG9jYWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHN3aXRjaCAobG9jYWxlKSB7XG5cdFx0XHRjYXNlICdwbC1QTCc6XG5cdFx0XHRjYXNlICdsdC1MVCc6XG5cdFx0XHRjYXNlICdwdC1QVCc6XG5cdFx0XHRjYXNlICdwdC1CUic6XG5cdFx0XHRjYXNlICdubC1OTCc6XG5cdFx0XHRcdHJldHVybiAnLSc7XG5cdFx0XHRjYXNlICdzay1TSyc6XG5cdFx0XHRjYXNlICdydS1SVSc6XG5cdFx0XHRjYXNlICdkZS1ERSc6XG5cdFx0XHRcdHJldHVybiAnLic7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJy8nO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBwYXJzZURhdGUoY3VycmVudERhdGVWYWx1ZTogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBEYXRlIHtcblx0XHRpZiAoIWxvY2FsZSkge1xuXHRcdFx0bG9jYWxlID0gdGhpcy5sb2NhbGU7XG5cdFx0fVxuXG5cdFx0aWYgKCFjdXJyZW50RGF0ZVZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGF1eEFycmF5ID0gY3VycmVudERhdGVWYWx1ZS5zcGxpdCh0aGlzLmdldFNlcGFyYXRvcihsb2NhbGUpKTtcblx0XHRpZiAoYXV4QXJyYXkuaW5kZXhPZignJykgPiAtMSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKGxvY2FsZSkge1xuXHRcdFx0Y2FzZSAncGwtUEwnOlxuXHRcdFx0Y2FzZSAnbHQtTFQnOlxuXHRcdFx0XHRyZXR1cm4gbmV3IERhdGUoYXV4QXJyYXkuam9pbignLycpKTtcblx0XHRcdGNhc2UgJ3poLUNOJzpcblx0XHRcdGNhc2UgJ2phLUpBJzpcblx0XHRcdGNhc2UgJ2VuLVVTJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBEYXRlKGN1cnJlbnREYXRlVmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIG5ldyBEYXRlKGF1eEFycmF5WzFdICsgJy8nICsgYXV4QXJyYXlbMF0gKyAnLycgKyBhdXhBcnJheVsyXSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjb252ZXJ0U3lzdGVsYWJMb2NhbGVUb0RhdGVGbnNMb2NhbGUobG9jYWxlU3RyaW5nOiBzdHJpbmcpOiBMb2NhbGUge1xuXHRcdGNvbnN0IGxvY2FsZUZvclN5c3RlbGFiTG9jYWxlID0gbmV3IE1hcDxzdHJpbmcsIExvY2FsZT4oW1xuXHRcdFx0WydlcycsIGVzXSwgWydlcy1FUycsIGVzXSwgWydlcy1DTCcsIGVzXSwgWydlcy1NWCcsIGVzXSwgWydlcy1VWScsIGVzXSwgWydlcy1BUicsIGVzXSwgWydlcy1CTycsIGVzXSxcblx0XHRcdFsnZXMtQ08nLCBlc10sIFsnZXMtQ1InLCBlc10sIFsnZXMtRE8nLCBlc10sIFsnZXMtRUMnLCBlc10sIFsnZXMtU1YnLCBlc10sIFsnZXMtR1QnLCBlc10sIFsnZXMtSE4nLCBlc10sXG5cdFx0XHRbJ2VzLU5JJywgZXNdLCBbJ2VzLVBBJywgZXNdLCBbJ2VzLVBZJywgZXNdLCBbJ2VzLVBFJywgZXNdLCBbJ2VzLVBSJywgZXNdLCBbJ2VzLVZFJywgZXNdLCBbJ2ZyJywgZnJdLFxuXHRcdFx0Wydmci1GUicsIGZyXSwgWydpdCcsIGl0XSwgWydpdC1JVCcsIGl0XSwgWydlbicsIGVuVVNdLCBbJ2VuLVVTJywgZW5VU10sIFsnZW4tR0InLCBlbkdCXSwgWydwdCcsIHB0XSxcblx0XHRcdFsncHQtQlInLCBwdF0sIFsnY2EnLCBjYV0sIFsnZ2wnLCBnbF0sIFsnbHQnLCBsdF0sIFsnbHQtTFQnLCBsdF0sIFsncGwnLCBwbF0sIFsncGwtUEwnLCBwbF0sIFsnc2snLCBza10sXG5cdFx0XHRbJ3NrLVNLJywgc2tdLCBbJ3J1JywgcnVdLCBbJ3J1LVJVJywgcnVdLCBbJ3poJywgemhDTl0sIFsnemgtQ04nLCB6aENOXSwgWydkZScsIGRlXSwgWydkZS1ERScsIGRlXSxcblx0XHRcdFsndGgnLCB0aF0sIFsndGgtVEgnLCB0aF0sIFsnamEnLCBqYV0sIFsnamEtSkEnLCBqYV0sIFsna28nLCBrb10sIFsna28tS1InLCBrb10sIFsnbmwnLCBubF0sIFsnbmwtTkwnLCBubF0sXG5cdFx0XSk7XG5cdFx0Y29uc3QgbG9jYWxlOiBMb2NhbGUgPSBsb2NhbGVGb3JTeXN0ZWxhYkxvY2FsZS5nZXQobG9jYWxlU3RyaW5nKTtcblx0XHRyZXR1cm4gbG9jYWxlID8gbG9jYWxlIDogZW5VUztcblx0fVxuXG5cdHByaXZhdGUgZ2V0TG9jYWxpemVkU3RyaW5nRGF0ZUZvcm1hdChsb2NhbGU6IHN0cmluZywgZnVsbERhdGVGb3JtYXQgPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgeWVhciA9IGZ1bGxEYXRlRm9ybWF0ID8gJ3l5eXknIDogJ3l5Jztcblx0XHRzd2l0Y2ggKGxvY2FsZSkge1xuXHRcdFx0Y2FzZSAnZW4tVVMnOlxuXHRcdFx0XHRyZXR1cm4gZnVsbERhdGVGb3JtYXQgPyBgTU0vZGQvJHt5ZWFyfWAgOiBgTS9kLyR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAna28tS08nOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0uIE0uIGRgO1xuXHRcdFx0Y2FzZSAncGwtUEwnOlxuXHRcdFx0Y2FzZSAnbHQtTFQnOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0tTU0tZGRgO1xuXHRcdFx0Y2FzZSAncHQtUFQnOlxuXHRcdFx0Y2FzZSAncHQtQlInOlxuXHRcdFx0Y2FzZSAnbmwtTkwnOlxuXHRcdFx0XHRyZXR1cm4gYGRkLU1NLSR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAnc2stU0snOlxuXHRcdFx0Y2FzZSAncnUtUlUnOlxuXHRcdFx0XHRyZXR1cm4gYGQuTS4ke3llYXJ9YDtcblx0XHRcdGNhc2UgJ3poLVpIJzpcblx0XHRcdFx0cmV0dXJuIGAke3llYXJ9LU0tZGA7XG5cdFx0XHRjYXNlICdkZS1ERSc6XG5cdFx0XHRcdHJldHVybiBgZGQuTU0uJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICd0aC1USCc6XG5cdFx0XHRcdHJldHVybiBgZC9NLyR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAnamEtSkEnOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0vTU0vZGRgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGBkZC9NTS8ke3llYXJ9YDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldExvY2FsaXplZERhdGVGb3JtYXRGb3JEYXRlUGlja2VyKGxvY2FsZTogc3RyaW5nLCBmdWxsRGF0ZUZvcm1hdCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRjb25zdCB5ZWFyID0gZnVsbERhdGVGb3JtYXQgPyAneXknIDogJ3knO1xuXHRcdHN3aXRjaCAobG9jYWxlKSB7XG5cdFx0XHRjYXNlICdlbi1VUyc6XG5cdFx0XHRcdHJldHVybiBmdWxsRGF0ZUZvcm1hdCA/IGBtbS9kZC8ke3llYXJ9YCA6IGBtL2QvJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICdrby1LTyc6XG5cdFx0XHRcdHJldHVybiBgJHt5ZWFyfS4gbS4gZGA7XG5cdFx0XHRjYXNlICdwbC1QTCc6XG5cdFx0XHRjYXNlICdsdC1MVCc6XG5cdFx0XHRcdHJldHVybiBgJHt5ZWFyfS1tbS1kZGA7XG5cdFx0XHRjYXNlICdwdC1QVCc6XG5cdFx0XHRjYXNlICdwdC1CUic6XG5cdFx0XHRjYXNlICdubC1OTCc6XG5cdFx0XHRcdHJldHVybiBgZGQtbW0tJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICdzay1TSyc6XG5cdFx0XHRjYXNlICdydS1SVSc6XG5cdFx0XHRcdHJldHVybiBgZC5tLiR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAnemgtQ04nOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0tbS1kYDtcblx0XHRcdGNhc2UgJ2RlLURFJzpcblx0XHRcdFx0cmV0dXJuIGBkZC5tbS4ke3llYXJ9YDtcblx0XHRcdGNhc2UgJ3RoLVRIJzpcblx0XHRcdFx0cmV0dXJuIGBkL20vJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICdqYS1KQSc6XG5cdFx0XHRcdHJldHVybiBgJHt5ZWFyfS9tbS9kZGA7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gYGRkL21tLyR7eWVhcn1gO1xuXHRcdH1cblx0fVxufVxuIl19