ngx-mat-cdk
Version:
Extra Components for Angular Material including Filters,Drag Drop File, MatSelect Mobile Version
142 lines • 17.4 kB
JavaScript
import * as jalaliMoment from 'jalali-moment';
import { DateAdapter } from "@angular/material/core";
export const PERSIAN_DATE_FORMATS = {
parse: {
dateInput: 'jYYYY/jMM/jDD'
},
display: {
dateInput: 'jYYYY/jMM/jDD',
monthYearLabel: 'jYYYY jMMMM',
dateA11yLabel: 'jYYYY/jMM/jDD',
monthYearA11yLabel: 'jYYYY jMMMM'
}
};
export class MaterialPersianDateAdapter extends DateAdapter {
constructor() {
super();
super.setLocale('fa');
}
getYear(date) {
return this.clone(date).jYear();
}
getMonth(date) {
return this.clone(date).jMonth();
}
getDate(date) {
return this.clone(date).jDate();
}
getDayOfWeek(date) {
return this.clone(date).day();
}
getMonthNames(style) {
switch (style) {
case 'long':
case 'short':
return jalaliMoment.localeData('fa').jMonths().slice(0);
case 'narrow':
return jalaliMoment.localeData('fa').jMonthsShort().slice(0);
}
}
getDateNames() {
const valuesArray = Array(31);
for (let i = 0; i < 31; i++) {
valuesArray[i] = String(i + 1);
}
return valuesArray;
}
getDayOfWeekNames(style) {
switch (style) {
case 'long':
return jalaliMoment.localeData('fa').weekdays().slice(0);
case 'short':
return jalaliMoment.localeData('fa').weekdaysShort().slice(0);
case 'narrow':
return ['ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش'];
}
}
getYearName(date) {
return this.clone(date).jYear().toString();
}
getFirstDayOfWeek() {
return jalaliMoment.localeData('fa').firstDayOfWeek();
}
getNumDaysInMonth(date) {
return this.clone(date).jDaysInMonth();
}
clone(date) {
return date.clone().locale('fa');
}
createDate(year, month, date) {
if (month < 0 || month > 11) {
throw Error(`Invalid month index "${month}". Month index has to be between 0 and 11.`);
}
if (date < 1) {
throw Error(`Invalid date "${date}". Date has to be greater than 0.`);
}
const result = jalaliMoment()
.jYear(year).jMonth(month).jDate(date)
.hours(0).minutes(0).seconds(0).milliseconds(0)
.locale('fa');
if (this.getMonth(result) !== month) {
throw Error(`Invalid date ${date} for month with index ${month}.`);
}
if (!result.isValid()) {
throw Error(`Invalid date "${date}" for month with index "${month}".`);
}
return result;
}
today() {
return jalaliMoment().locale('fa');
}
parse(value, parseFormat) {
if (value && typeof value === 'string') {
return jalaliMoment(value, parseFormat, 'fa');
}
return value ? jalaliMoment(value).locale('fa') : null;
}
format(date, displayFormat) {
date = this.clone(date);
if (!this.isValid(date)) {
throw Error('JalaliMomentDateAdapter: Cannot format invalid date.');
}
return date.format(displayFormat);
}
addCalendarYears(date, years) {
return this.clone(date).add(years, 'jYear');
}
addCalendarMonths(date, months) {
return this.clone(date).add(months, 'jmonth');
}
addCalendarDays(date, days) {
return this.clone(date).add(days, 'jDay');
}
toIso8601(date) {
return this.clone(date).format();
}
isDateInstance(obj) {
return jalaliMoment.isMoment(obj);
}
isValid(date) {
return this.clone(date).isValid();
}
invalid() {
return jalaliMoment.invalid();
}
deserialize(value) {
let date;
if (value instanceof Date) {
date = jalaliMoment(value);
}
if (typeof value === 'string') {
if (!value) {
return null;
}
date = jalaliMoment(value).locale('fa');
}
if (date && this.isValid(date)) {
return date;
}
return super.deserialize(value);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwucGVyc2lhbi1kYXRlLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvQWxpcmV6YSBNb2hhbW1hZGkvc291cmNlL3JlcG9zL015TGlicmFyeS9Bbmd1bGFyLkxpYnJhcnkvbGlicy9wcm9qZWN0cy9uZ3gtbWF0LWNkay9zcmMvIiwic291cmNlcyI6WyJsaWIvc2hhcmVkL21hdGVyaWFsLnBlcnNpYW4tZGF0ZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsZUFBZTtLQUMzQjtJQUNELE9BQU8sRUFBRTtRQUNQLFNBQVMsRUFBRSxlQUFlO1FBQzFCLGNBQWMsRUFBRSxhQUFhO1FBQzdCLGFBQWEsRUFBRSxlQUFlO1FBQzlCLGtCQUFrQixFQUFFLGFBQWE7S0FDbEM7Q0FDRixDQUFDO0FBRUYsTUFBTSxPQUFPLDBCQUEyQixTQUFRLFdBQWdDO0lBRTlFO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBeUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBeUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBa0M7UUFDOUMsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssT0FBTztnQkFDVixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFELEtBQUssUUFBUTtnQkFDWCxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFrQztRQUNsRCxRQUFRLEtBQUssRUFBRTtZQUNiLEtBQUssTUFBTTtnQkFDVCxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELEtBQUssT0FBTztnQkFDVixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssUUFBUTtnQkFDWCxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXlCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUF5QjtRQUN6QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUF5QjtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLElBQVk7UUFDbEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7WUFDM0IsTUFBTSxLQUFLLENBQ1Qsd0JBQXdCLEtBQUssNENBQTRDLENBQzFFLENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNaLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixJQUFJLG1DQUFtQyxDQUFDLENBQUM7U0FDdkU7UUFDRCxNQUFNLE1BQU0sR0FBRyxZQUFZLEVBQUU7YUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ3JDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUU7WUFDbkMsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLElBQUkseUJBQXlCLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDcEU7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixJQUFJLDJCQUEyQixLQUFLLElBQUksQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQVUsRUFBRSxXQUE4QjtRQUM5QyxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDdEMsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvQztRQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUF5QixFQUFFLGFBQXFCO1FBQ3JELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDckU7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQXlCLEVBQUUsS0FBYTtRQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBeUIsRUFBRSxNQUFjO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBeUIsRUFBRSxJQUFZO1FBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBeUI7UUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBUTtRQUNyQixPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUF5QjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUU7WUFDekIsSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGphbGFsaU1vbWVudCBmcm9tICdqYWxhbGktbW9tZW50JztcclxuaW1wb3J0IHtEYXRlQWRhcHRlcn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBQRVJTSUFOX0RBVEVfRk9STUFUUyA9IHtcclxuICBwYXJzZToge1xyXG4gICAgZGF0ZUlucHV0OiAnallZWVkvak1NL2pERCdcclxuICB9LFxyXG4gIGRpc3BsYXk6IHtcclxuICAgIGRhdGVJbnB1dDogJ2pZWVlZL2pNTS9qREQnLFxyXG4gICAgbW9udGhZZWFyTGFiZWw6ICdqWVlZWSBqTU1NTScsXHJcbiAgICBkYXRlQTExeUxhYmVsOiAnallZWVkvak1NL2pERCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdqWVlZWSBqTU1NTSdcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxQZXJzaWFuRGF0ZUFkYXB0ZXIgZXh0ZW5kcyBEYXRlQWRhcHRlcjxqYWxhbGlNb21lbnQuTW9tZW50PiB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHN1cGVyLnNldExvY2FsZSgnZmEnKTtcclxuICB9XHJcblxyXG4gIGdldFllYXIoZGF0ZTogamFsYWxpTW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jbG9uZShkYXRlKS5qWWVhcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9udGgoZGF0ZTogamFsYWxpTW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jbG9uZShkYXRlKS5qTW9udGgoKTtcclxuICB9XHJcblxyXG4gIGdldERhdGUoZGF0ZTogamFsYWxpTW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jbG9uZShkYXRlKS5qRGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF5T2ZXZWVrKGRhdGU6IGphbGFsaU1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoZGF0ZSkuZGF5KCk7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aE5hbWVzKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnIHwgJ25hcnJvdycpOiBzdHJpbmdbXSB7XHJcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XHJcbiAgICAgIGNhc2UgJ2xvbmcnOlxyXG4gICAgICBjYXNlICdzaG9ydCc6XHJcbiAgICAgICAgcmV0dXJuIGphbGFsaU1vbWVudC5sb2NhbGVEYXRhKCdmYScpLmpNb250aHMoKS5zbGljZSgwKTtcclxuICAgICAgY2FzZSAnbmFycm93JzpcclxuICAgICAgICByZXR1cm4gamFsYWxpTW9tZW50LmxvY2FsZURhdGEoJ2ZhJykuak1vbnRoc1Nob3J0KCkuc2xpY2UoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREYXRlTmFtZXMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgdmFsdWVzQXJyYXkgPSBBcnJheSgzMSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDMxOyBpKyspIHtcclxuICAgICAgdmFsdWVzQXJyYXlbaV0gPSBTdHJpbmcoaSArIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF5T2ZXZWVrTmFtZXMoc3R5bGU6ICdsb25nJyB8ICdzaG9ydCcgfCAnbmFycm93Jyk6IHN0cmluZ1tdIHtcclxuICAgIHN3aXRjaCAoc3R5bGUpIHtcclxuICAgICAgY2FzZSAnbG9uZyc6XHJcbiAgICAgICAgcmV0dXJuIGphbGFsaU1vbWVudC5sb2NhbGVEYXRhKCdmYScpLndlZWtkYXlzKCkuc2xpY2UoMCk7XHJcbiAgICAgIGNhc2UgJ3Nob3J0JzpcclxuICAgICAgICByZXR1cm4gamFsYWxpTW9tZW50LmxvY2FsZURhdGEoJ2ZhJykud2Vla2RheXNTaG9ydCgpLnNsaWNlKDApO1xyXG4gICAgICBjYXNlICduYXJyb3cnOlxyXG4gICAgICAgIHJldHVybiBbJ9uMJywgJ9ivJywgJ9izJywgJ9qGJywgJ9m+JywgJ9isJywgJ9i0J107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRZZWFyTmFtZShkYXRlOiBqYWxhbGlNb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNsb25lKGRhdGUpLmpZZWFyKCkudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldEZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gamFsYWxpTW9tZW50LmxvY2FsZURhdGEoJ2ZhJykuZmlyc3REYXlPZldlZWsoKTtcclxuICB9XHJcblxyXG4gIGdldE51bURheXNJbk1vbnRoKGRhdGU6IGphbGFsaU1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoZGF0ZSkuakRheXNJbk1vbnRoKCk7XHJcbiAgfVxyXG5cclxuICBjbG9uZShkYXRlOiBqYWxhbGlNb21lbnQuTW9tZW50KTogamFsYWxpTW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gZGF0ZS5jbG9uZSgpLmxvY2FsZSgnZmEnKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZURhdGUoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXRlOiBudW1iZXIpOiBqYWxhbGlNb21lbnQuTW9tZW50IHtcclxuICAgIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xyXG4gICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICBgSW52YWxpZCBtb250aCBpbmRleCBcIiR7bW9udGh9XCIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChkYXRlIDwgMSkge1xyXG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBkYXRlIFwiJHtkYXRlfVwiLiBEYXRlIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC5gKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdCA9IGphbGFsaU1vbWVudCgpXHJcbiAgICAgIC5qWWVhcih5ZWFyKS5qTW9udGgobW9udGgpLmpEYXRlKGRhdGUpXHJcbiAgICAgIC5ob3VycygwKS5taW51dGVzKDApLnNlY29uZHMoMCkubWlsbGlzZWNvbmRzKDApXHJcbiAgICAgIC5sb2NhbGUoJ2ZhJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0TW9udGgocmVzdWx0KSAhPT0gbW9udGgpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZGF0ZSAke2RhdGV9IGZvciBtb250aCB3aXRoIGluZGV4ICR7bW9udGh9LmApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFyZXN1bHQuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGRhdGUgXCIke2RhdGV9XCIgZm9yIG1vbnRoIHdpdGggaW5kZXggXCIke21vbnRofVwiLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHRvZGF5KCk6IGphbGFsaU1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIGphbGFsaU1vbWVudCgpLmxvY2FsZSgnZmEnKTtcclxuICB9XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBhbnksIHBhcnNlRm9ybWF0OiBzdHJpbmcgfCBzdHJpbmdbXSk6IGphbGFsaU1vbWVudC5Nb21lbnQgfCBudWxsIHtcclxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBqYWxhbGlNb21lbnQodmFsdWUsIHBhcnNlRm9ybWF0LCAnZmEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSA/IGphbGFsaU1vbWVudCh2YWx1ZSkubG9jYWxlKCdmYScpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGZvcm1hdChkYXRlOiBqYWxhbGlNb21lbnQuTW9tZW50LCBkaXNwbGF5Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IHRoaXMuY2xvbmUoZGF0ZSk7XHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZChkYXRlKSkge1xyXG4gICAgICB0aHJvdyBFcnJvcignSmFsYWxpTW9tZW50RGF0ZUFkYXB0ZXI6IENhbm5vdCBmb3JtYXQgaW52YWxpZCBkYXRlLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KGRpc3BsYXlGb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FsZW5kYXJZZWFycyhkYXRlOiBqYWxhbGlNb21lbnQuTW9tZW50LCB5ZWFyczogbnVtYmVyKTogamFsYWxpTW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5jbG9uZShkYXRlKS5hZGQoeWVhcnMsICdqWWVhcicpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FsZW5kYXJNb250aHMoZGF0ZTogamFsYWxpTW9tZW50Lk1vbWVudCwgbW9udGhzOiBudW1iZXIpOiBqYWxhbGlNb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLmNsb25lKGRhdGUpLmFkZChtb250aHMsICdqbW9udGgnKTtcclxuICB9XHJcblxyXG4gIGFkZENhbGVuZGFyRGF5cyhkYXRlOiBqYWxhbGlNb21lbnQuTW9tZW50LCBkYXlzOiBudW1iZXIpOiBqYWxhbGlNb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLmNsb25lKGRhdGUpLmFkZChkYXlzLCAnakRheScpO1xyXG4gIH1cclxuXHJcbiAgdG9Jc284NjAxKGRhdGU6IGphbGFsaU1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoZGF0ZSkuZm9ybWF0KCk7XHJcbiAgfVxyXG5cclxuICBpc0RhdGVJbnN0YW5jZShvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGphbGFsaU1vbWVudC5pc01vbWVudChvYmopO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZChkYXRlOiBqYWxhbGlNb21lbnQuTW9tZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbG9uZShkYXRlKS5pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBpbnZhbGlkKCk6IGphbGFsaU1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIGphbGFsaU1vbWVudC5pbnZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBkZXNlcmlhbGl6ZSh2YWx1ZTogYW55KTogamFsYWxpTW9tZW50Lk1vbWVudCB8IG51bGwge1xyXG4gICAgbGV0IGRhdGU7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGRhdGUgPSBqYWxhbGlNb21lbnQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGUgPSBqYWxhbGlNb21lbnQodmFsdWUpLmxvY2FsZSgnZmEnKTtcclxuICAgIH1cclxuICAgIGlmIChkYXRlICYmIHRoaXMuaXNWYWxpZChkYXRlKSkge1xyXG4gICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdXBlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==