angular-hijri-gregorian-date-time-picker 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +249 -236
- package/{fesm2020 → fesm2022}/angular-hijri-gregorian-date-time-picker.mjs +1438 -1438
- package/fesm2022/angular-hijri-gregorian-date-time-picker.mjs.map +1 -0
- package/index.d.ts +347 -5
- package/package.json +7 -15
- package/_interfaces/calendar-model.d.ts +0 -28
- package/_interfaces/styles-config.model.d.ts +0 -13
- package/_services/date-utilities.service.d.ts +0 -49
- package/esm2020/_data/dictionary.json +0 -1
- package/esm2020/_interfaces/calendar-model.mjs +0 -2
- package/esm2020/_interfaces/styles-config.model.mjs +0 -2
- package/esm2020/_services/date-utilities.service.mjs +0 -375
- package/esm2020/angular-hijri-gregorian-date-time-picker.mjs +0 -5
- package/esm2020/lib/hijri-gregorian-datepicker.component.mjs +0 -1058
- package/esm2020/lib/hijri-gregorian-datepicker.module.mjs +0 -19
- package/esm2020/public-api.mjs +0 -8
- package/esm2020/themes/themes.json +0 -152
- package/fesm2015/angular-hijri-gregorian-date-time-picker.mjs +0 -28995
- package/fesm2015/angular-hijri-gregorian-date-time-picker.mjs.map +0 -1
- package/fesm2020/angular-hijri-gregorian-date-time-picker.mjs.map +0 -1
- package/lib/hijri-gregorian-datepicker.component.d.ts +0 -238
- package/lib/hijri-gregorian-datepicker.module.d.ts +0 -9
- package/public-api.d.ts +0 -4
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9zcmMvX2ludGVyZmFjZXMvY2FsZW5kYXItbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTW9udGhJbmZvIHtcbiAgZkQ6IERheUluZm87IC8vIEZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbEQ6IERheUluZm87IC8vIExhc3QgZGF5IG9mIHRoZSBtb250aFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFllYXJEYXRhIHtcbiAgW21vbnRoOiBzdHJpbmddOiBNb250aEluZm87XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIFt5ZWFyOiBzdHJpbmddOiBZZWFyRGF0YTtcbn1cblxuLy8gVGltZSB2YWx1ZSBzdHJ1Y3R1cmUgZm9yIHRpbWUgcGlja2VyXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVWYWx1ZSB7XG4gIGhvdXI6IG51bWJlcjsgICAvLyAwLTIzIGZvciAyNC1ob3VyIGZvcm1hdFxuICBtaW51dGU6IG51bWJlcjsgLy8gMC01OVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERheUluZm8ge1xuICBnRDogc3RyaW5nOyAvLyBHcmVnb3JpYW4gZGF0ZVxuICB1RDogc3RyaW5nOyAvLyBVbSBhbC1RdXJyYSBkYXRlXG4gIGROOiBzdHJpbmc7IC8vIERheSBuYW1lIHNob3J0aGFuZFxuICB1QzogbnVtYmVyOyAvLyBQbGFjZWhvbGRlciBzaW5jZSB3ZSBhcmUgbm90IHVzaW5nIGl0IGluIHRoZSBvdXRwdXRcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47IC8vIE5ldzogaW5kaWNhdGVzIGlmIGRheSBpcyBkaXNhYmxlZCAob3V0IG9mIG1pbi9tYXggcmFuZ2UpXG4gIHRpbWU/OiBUaW1lVmFsdWU7ICAgLy8gTmV3OiBvcHRpb25hbCB0aW1lIGluZm9ybWF0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9kYXlEYXRlIHtcbiAgZ3JlZ29yaWFuPzogc3RyaW5nO1xuICB1bW1BbFF1cmE/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vbnRoRGF5cyA9IERheUluZm9bXTtcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL3NyYy9faW50ZXJmYWNlcy9zdHlsZXMtY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIHN0eWxlc0NvbmZpZyB7XG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICBzZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgdG9kYXlzRGF0ZUJnQ29sb3I/OiBzdHJpbmc7XG4gIHRvZGF5c0RhdGVUZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGNvbmZpcm1CdG5UZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGRpc2FibGVkRGF5Q29sb3I/OiBzdHJpbmc7XG4gIGRheU5hbWVDb2xvcj86IHN0cmluZztcbiAgZGF5Q29sb3I/OiBzdHJpbmc7XG4gIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as datesDictionary from '../_data/dictionary.json';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class DateUtilitiesService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.calendarData = datesDictionary['default']; //prod
|
|
7
|
-
// this.calendarData = datesDictionary; //debug
|
|
8
|
-
}
|
|
9
|
-
parseDate(dateStr) {
|
|
10
|
-
if (!dateStr) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
const parts = dateStr?.split('/');
|
|
14
|
-
if (parts.length !== 3) {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
const [day, month, year] = parts.map(Number);
|
|
18
|
-
if (isNaN(day) ||
|
|
19
|
-
isNaN(month) ||
|
|
20
|
-
isNaN(year) ||
|
|
21
|
-
day < 1 ||
|
|
22
|
-
day > 31 ||
|
|
23
|
-
month < 1 ||
|
|
24
|
-
month > 12 ||
|
|
25
|
-
year < 1) {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
return new Date(year, month - 1, day);
|
|
29
|
-
}
|
|
30
|
-
formatDate(date) {
|
|
31
|
-
const day = String(date.getDate()).padStart(2, '0');
|
|
32
|
-
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
33
|
-
const year = date.getFullYear();
|
|
34
|
-
return `${day}/${month}/${year}`;
|
|
35
|
-
}
|
|
36
|
-
getDayShortHand(date) {
|
|
37
|
-
return date.toLocaleString('en-US', { weekday: 'short' });
|
|
38
|
-
}
|
|
39
|
-
generateDates(fD, lD, uC) {
|
|
40
|
-
const startDate = this.parseDate(fD?.gD);
|
|
41
|
-
const endDate = this.parseDate(lD?.gD);
|
|
42
|
-
const daysInMonth = [];
|
|
43
|
-
let currentGregorianDate = new Date(startDate);
|
|
44
|
-
let currentUmmAlQuraDay = parseInt(fD?.uD?.split('/')[0]);
|
|
45
|
-
let currentUmmAlQuraMonth = parseInt(fD?.uD?.split('/')[1]);
|
|
46
|
-
let currentUmmAlQuraYear = parseInt(fD?.uD?.split('/')[2]);
|
|
47
|
-
let daysInCurrentUmmAlQuraMonth = uC;
|
|
48
|
-
while (currentGregorianDate <= endDate) {
|
|
49
|
-
const ummAlQuraDate = `${currentUmmAlQuraDay
|
|
50
|
-
.toString()
|
|
51
|
-
.padStart(2, '0')}/${currentUmmAlQuraMonth
|
|
52
|
-
.toString()
|
|
53
|
-
.padStart(2, '0')}/${currentUmmAlQuraYear}`;
|
|
54
|
-
daysInMonth.push({
|
|
55
|
-
gD: this.formatDate(currentGregorianDate),
|
|
56
|
-
uD: ummAlQuraDate,
|
|
57
|
-
dN: this.getDayShortHand(currentGregorianDate),
|
|
58
|
-
uC: 0,
|
|
59
|
-
});
|
|
60
|
-
currentGregorianDate.setDate(currentGregorianDate.getDate() + 1);
|
|
61
|
-
currentUmmAlQuraDay += 1;
|
|
62
|
-
if (currentUmmAlQuraDay > daysInCurrentUmmAlQuraMonth) {
|
|
63
|
-
currentUmmAlQuraDay = 1;
|
|
64
|
-
currentUmmAlQuraMonth += 1;
|
|
65
|
-
if (currentUmmAlQuraMonth > 12) {
|
|
66
|
-
currentUmmAlQuraMonth = 1;
|
|
67
|
-
currentUmmAlQuraYear += 1;
|
|
68
|
-
}
|
|
69
|
-
const nextMonthData = this.calendarData[currentUmmAlQuraYear.toString()]?.[currentUmmAlQuraMonth.toString()];
|
|
70
|
-
daysInCurrentUmmAlQuraMonth = nextMonthData ? nextMonthData.fD.uC : 30;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return daysInMonth;
|
|
74
|
-
}
|
|
75
|
-
convertDate(dateStr, isGregorian) {
|
|
76
|
-
if (!dateStr)
|
|
77
|
-
return null;
|
|
78
|
-
if (isGregorian) {
|
|
79
|
-
// Preprocess Gregorian date
|
|
80
|
-
const gregorianDate = this.parseDate(dateStr);
|
|
81
|
-
if (!gregorianDate)
|
|
82
|
-
return null;
|
|
83
|
-
const formattedDate = this.formatDate(gregorianDate);
|
|
84
|
-
for (const yearKey in this.calendarData) {
|
|
85
|
-
for (const monthKey in this.calendarData[yearKey]) {
|
|
86
|
-
const monthData = this.calendarData[yearKey][monthKey];
|
|
87
|
-
if (this.isDateInMonthRange(formattedDate, monthData.fD?.gD, monthData.lD?.gD)) {
|
|
88
|
-
const daysInMonth = this.generateDates(monthData.fD, monthData.lD, monthData.fD?.uC);
|
|
89
|
-
const dayMatch = daysInMonth.find((d) => d.gD === formattedDate);
|
|
90
|
-
if (dayMatch)
|
|
91
|
-
return dayMatch;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
const [day, month, year] = dateStr.split('/').map(Number);
|
|
98
|
-
if (isNaN(day) || isNaN(month) || isNaN(year))
|
|
99
|
-
return null;
|
|
100
|
-
for (const yearKey in this.calendarData) {
|
|
101
|
-
for (const monthKey in this.calendarData[yearKey]) {
|
|
102
|
-
const monthData = this.calendarData[yearKey][monthKey];
|
|
103
|
-
if (this.isDateInMonthRange(`${day}/${month}/${year}`, monthData.fD?.uD, monthData.lD?.uD)) {
|
|
104
|
-
const daysInMonth = this.generateDates(monthData.fD, monthData.lD, monthData.fD?.uC);
|
|
105
|
-
const dayMatch = daysInMonth.find((d) => {
|
|
106
|
-
const [uDay, uMonth, uYear] = d?.uD?.split('/').map(Number);
|
|
107
|
-
return uDay === day && uMonth === month && uYear === year;
|
|
108
|
-
});
|
|
109
|
-
if (dayMatch)
|
|
110
|
-
return dayMatch;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
isDateInMonthRange(dateToCheck, monthStartDate, monthEndDate) {
|
|
118
|
-
if (!monthStartDate || !monthEndDate)
|
|
119
|
-
return false;
|
|
120
|
-
const checkDate = this.parseDate(dateToCheck);
|
|
121
|
-
const startDate = this.parseDate(monthStartDate);
|
|
122
|
-
const endDate = this.parseDate(monthEndDate);
|
|
123
|
-
if (!checkDate || !startDate || !endDate)
|
|
124
|
-
return false;
|
|
125
|
-
return checkDate >= startDate && checkDate <= endDate;
|
|
126
|
-
}
|
|
127
|
-
getMonthData(inputDate, type) {
|
|
128
|
-
const [day, month, year] = inputDate?.split('/').map(Number);
|
|
129
|
-
let isGregorian;
|
|
130
|
-
if (type == 'greg') {
|
|
131
|
-
isGregorian = true;
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
isGregorian = false;
|
|
135
|
-
}
|
|
136
|
-
if (isGregorian) {
|
|
137
|
-
return this.getGregorianMonthData(day, month, year);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
return this.getUmAlQurraMonthData(day, month, year);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
getGregorianMonthData(day, month, year) {
|
|
144
|
-
const yearData = this.calendarData[year];
|
|
145
|
-
if (!yearData)
|
|
146
|
-
return null;
|
|
147
|
-
const monthData = yearData[month];
|
|
148
|
-
if (!monthData)
|
|
149
|
-
return null;
|
|
150
|
-
const monthArray = [];
|
|
151
|
-
const endDate = new Date(year, month, 0);
|
|
152
|
-
for (let d = 1; d <= endDate.getDate(); d++) {
|
|
153
|
-
const offset = d - 1;
|
|
154
|
-
monthArray.push({
|
|
155
|
-
gD: `${d.toString().padStart(2, '0')}/${month
|
|
156
|
-
.toString()
|
|
157
|
-
.padStart(2, '0')}/${year}`,
|
|
158
|
-
uD: this.calculateUmAlQurraDate(monthData.fD.uD, offset, monthData.fD.uC),
|
|
159
|
-
dN: this.getDayName(new Date(year, month - 1, d).getDay()),
|
|
160
|
-
uC: monthData.fD.uC,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
return monthArray;
|
|
164
|
-
}
|
|
165
|
-
getUmAlQurraMonthData(day, month, year) {
|
|
166
|
-
for (const gregorianYear in this.calendarData) {
|
|
167
|
-
const yearData = this.calendarData[parseInt(gregorianYear)];
|
|
168
|
-
for (const monthIndex in yearData) {
|
|
169
|
-
const monthData = yearData[parseInt(monthIndex)];
|
|
170
|
-
const [fDay, fMonth, fYear] = monthData?.fD?.uD?.split('/').map(Number);
|
|
171
|
-
if (fYear === year && fMonth === month) {
|
|
172
|
-
const totalDays = monthData.fD.uC;
|
|
173
|
-
const monthArray = [];
|
|
174
|
-
const umAlQurraStartDate = `01/${month
|
|
175
|
-
.toString()
|
|
176
|
-
.padStart(2, '0')}/${year}`;
|
|
177
|
-
const dayDifference = fDay - 1;
|
|
178
|
-
const startGregorianDate = this.calculateGregorianDate(monthData.fD.gD, -dayDifference);
|
|
179
|
-
for (let i = 0; i < totalDays; i++) {
|
|
180
|
-
const uDate = this.calculateUmAlQurraDate(umAlQurraStartDate, i, totalDays);
|
|
181
|
-
const gDate = this.calculateGregorianDate(startGregorianDate, i);
|
|
182
|
-
const [gDay, gMonth, gYear] = gDate?.split('/').map(Number);
|
|
183
|
-
const dayName = this.getDayName(new Date(gYear, gMonth - 1, gDay).getDay());
|
|
184
|
-
monthArray.push({
|
|
185
|
-
gD: gDate,
|
|
186
|
-
uD: uDate,
|
|
187
|
-
dN: dayName,
|
|
188
|
-
uC: totalDays,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
return monthArray;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return null;
|
|
196
|
-
}
|
|
197
|
-
calculateGregorianDate(startGDate, offset) {
|
|
198
|
-
const [day, month, year] = startGDate?.split('/').map(Number);
|
|
199
|
-
const newDate = new Date(year, month - 1, day + offset);
|
|
200
|
-
return `${newDate.getDate().toString().padStart(2, '0')}/${(newDate.getMonth() + 1)
|
|
201
|
-
.toString()
|
|
202
|
-
.padStart(2, '0')}/${newDate.getFullYear()}`;
|
|
203
|
-
}
|
|
204
|
-
calculateUmAlQurraDate(startUDate, offset, uC) {
|
|
205
|
-
const [day, month, year] = startUDate?.split('/').map(Number);
|
|
206
|
-
let newDay = day + offset;
|
|
207
|
-
let newMonth = month;
|
|
208
|
-
let newYear = year;
|
|
209
|
-
while (newDay > uC) {
|
|
210
|
-
newDay -= uC;
|
|
211
|
-
newMonth += 1;
|
|
212
|
-
}
|
|
213
|
-
while (newMonth > 12) {
|
|
214
|
-
newMonth = 1;
|
|
215
|
-
newYear += 1;
|
|
216
|
-
}
|
|
217
|
-
return `${newDay.toString().padStart(2, '0')}/${newMonth
|
|
218
|
-
.toString()
|
|
219
|
-
.padStart(2, '0')}/${newYear}`;
|
|
220
|
-
}
|
|
221
|
-
getDayName(dayIndex) {
|
|
222
|
-
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
223
|
-
return days[dayIndex];
|
|
224
|
-
}
|
|
225
|
-
/// Check date is it in past or future
|
|
226
|
-
checkPastOrFuture(inputDate, targetDate) {
|
|
227
|
-
if (inputDate) {
|
|
228
|
-
const [day, month, year] = inputDate?.split('/').map(Number);
|
|
229
|
-
const dateToCheck = new Date(year, month - 1, day);
|
|
230
|
-
const today = targetDate;
|
|
231
|
-
today.setHours(0, 0, 0, 0);
|
|
232
|
-
if (dateToCheck > today) {
|
|
233
|
-
return 'Future';
|
|
234
|
-
}
|
|
235
|
-
else if (dateToCheck < today) {
|
|
236
|
-
return 'Past';
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
return 'Today';
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
/// Convert english numbers to arabic equivalent
|
|
244
|
-
parseEnglish(englishNum) {
|
|
245
|
-
if (!englishNum)
|
|
246
|
-
return englishNum;
|
|
247
|
-
const numStr = String(englishNum);
|
|
248
|
-
const arabicNumbers = [
|
|
249
|
-
'\u0660',
|
|
250
|
-
'\u0661',
|
|
251
|
-
'\u0662',
|
|
252
|
-
'\u0663',
|
|
253
|
-
'\u0664',
|
|
254
|
-
'\u0665',
|
|
255
|
-
'\u0666',
|
|
256
|
-
'\u0667',
|
|
257
|
-
'\u0668',
|
|
258
|
-
'\u0669',
|
|
259
|
-
];
|
|
260
|
-
return numStr.replace(/[0-9]/g, (digit) => {
|
|
261
|
-
return arabicNumbers[Number(digit)] || digit;
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
/// Convert arabic numbers to english equivalent
|
|
265
|
-
parseArabic(arabicNum) {
|
|
266
|
-
return arabicNum.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) {
|
|
267
|
-
return d.charCodeAt(0) - 1632;
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
///
|
|
271
|
-
convertDateNumerals(date, targetLang) {
|
|
272
|
-
const arabicNumbers = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
|
|
273
|
-
const englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
|
|
274
|
-
const toArabic = (value) => value
|
|
275
|
-
.split('')
|
|
276
|
-
.map((char) => (/\d/.test(char) ? arabicNumbers[+char] : char))
|
|
277
|
-
.join('');
|
|
278
|
-
const toEnglish = (value) => value
|
|
279
|
-
.split('')
|
|
280
|
-
.map((char) => {
|
|
281
|
-
const index = arabicNumbers.indexOf(char);
|
|
282
|
-
return index > -1 ? englishNumbers[index] : char;
|
|
283
|
-
})
|
|
284
|
-
.join('');
|
|
285
|
-
if (targetLang === 'ar') {
|
|
286
|
-
const [day, month, year] = date.split('/');
|
|
287
|
-
return `${toArabic(year)}/${toArabic(month)}/${toArabic(day)}`;
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
const [year, month, day] = date.split('/');
|
|
291
|
-
return `${toEnglish(day)}/${toEnglish(month)}/${toEnglish(year)}`;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Normalize input date to DD/MM/YYYY string format (Gregorian)
|
|
296
|
-
* Accepts Date object or DD/MM/YYYY string
|
|
297
|
-
*/
|
|
298
|
-
normalizeDateToString(date) {
|
|
299
|
-
if (!date)
|
|
300
|
-
return null;
|
|
301
|
-
if (date instanceof Date) {
|
|
302
|
-
return this.formatDate(date);
|
|
303
|
-
}
|
|
304
|
-
// Already a string - validate format
|
|
305
|
-
const parsed = this.parseDate(date);
|
|
306
|
-
return parsed ? this.formatDate(parsed) : null;
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Compare two dates (Gregorian format DD/MM/YYYY)
|
|
310
|
-
* Returns: -1 if date1 < date2, 0 if equal, 1 if date1 > date2
|
|
311
|
-
*/
|
|
312
|
-
compareDates(date1Str, date2Str) {
|
|
313
|
-
const d1 = this.parseDate(date1Str);
|
|
314
|
-
const d2 = this.parseDate(date2Str);
|
|
315
|
-
if (!d1 || !d2)
|
|
316
|
-
return 0;
|
|
317
|
-
if (d1 < d2)
|
|
318
|
-
return -1;
|
|
319
|
-
if (d1 > d2)
|
|
320
|
-
return 1;
|
|
321
|
-
return 0;
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Compare two Hijri dates (UM format DD/MM/YYYY)
|
|
325
|
-
* Converts to Gregorian for comparison
|
|
326
|
-
*/
|
|
327
|
-
compareHijriDates(hijri1, hijri2) {
|
|
328
|
-
const day1 = this.convertDate(hijri1, false);
|
|
329
|
-
const day2 = this.convertDate(hijri2, false);
|
|
330
|
-
if (!day1?.gD || !day2?.gD)
|
|
331
|
-
return 0;
|
|
332
|
-
return this.compareDates(day1.gD, day2.gD);
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* Check if a date is within the specified range (inclusive)
|
|
336
|
-
* All dates in Gregorian DD/MM/YYYY format
|
|
337
|
-
*/
|
|
338
|
-
isDateInRange(dateStr, minDateStr, maxDateStr) {
|
|
339
|
-
if (!dateStr)
|
|
340
|
-
return false;
|
|
341
|
-
// If no constraints, date is valid
|
|
342
|
-
if (!minDateStr && !maxDateStr)
|
|
343
|
-
return true;
|
|
344
|
-
// Check minimum constraint
|
|
345
|
-
if (minDateStr && this.compareDates(dateStr, minDateStr) < 0) {
|
|
346
|
-
return false;
|
|
347
|
-
}
|
|
348
|
-
// Check maximum constraint
|
|
349
|
-
if (maxDateStr && this.compareDates(dateStr, maxDateStr) > 0) {
|
|
350
|
-
return false;
|
|
351
|
-
}
|
|
352
|
-
return true;
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Check if a Hijri date is within the specified range
|
|
356
|
-
* Converts to Gregorian for comparison
|
|
357
|
-
*/
|
|
358
|
-
isHijriDateInRange(hijriDateStr, minDateStr, maxDateStr) {
|
|
359
|
-
if (!hijriDateStr)
|
|
360
|
-
return false;
|
|
361
|
-
const dayInfo = this.convertDate(hijriDateStr, false);
|
|
362
|
-
if (!dayInfo?.gD)
|
|
363
|
-
return false;
|
|
364
|
-
return this.isDateInRange(dayInfo.gD, minDateStr, maxDateStr);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
DateUtilitiesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DateUtilitiesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
368
|
-
DateUtilitiesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DateUtilitiesService, providedIn: 'root' });
|
|
369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DateUtilitiesService, decorators: [{
|
|
370
|
-
type: Injectable,
|
|
371
|
-
args: [{
|
|
372
|
-
providedIn: 'root',
|
|
373
|
-
}]
|
|
374
|
-
}], ctorParameters: function () { return []; } });
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlsaXRpZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL3NyYy9fc2VydmljZXMvZGF0ZS11dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxlQUFlLE1BQU0sMEJBQTBCLENBQUM7O0FBTTVELE1BQU0sT0FBTyxvQkFBb0I7SUFHL0I7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFJLGVBQXVCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQy9ELCtDQUErQztJQUNqRCxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWU7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFDRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ1YsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNaLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDWCxHQUFHLEdBQUcsQ0FBQztZQUNQLEdBQUcsR0FBRyxFQUFFO1lBQ1IsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsRUFBRTtZQUNWLElBQUksR0FBRyxDQUFDLEVBQ1I7WUFDQSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJ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SUFDSCxhQUFhLENBQ1gsT0FBZSxFQUNmLFVBQXlCLEVBQ3pCLFVBQXlCO1FBRXpCLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFM0IsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFNUMsMkJBQTJCO1FBQzNCLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1RCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1RCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCLENBQ2hCLFlBQW9CLEVBQ3BCLFVBQXlCLEVBQ3pCLFVBQXlCO1FBRXpCLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7O2lIQW5kVSxvQkFBb0I7cUhBQXBCLG9CQUFvQixjQUZuQixNQUFNOzJGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkYXRlc0RpY3Rpb25hcnkgZnJvbSAnLi4vX2RhdGEvZGljdGlvbmFyeS5qc29uJztcbmltcG9ydCB7IERhdGEsIERheUluZm8sIE1vbnRoRGF5cyB9IGZyb20gJy4uL19pbnRlcmZhY2VzL2NhbGVuZGFyLW1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVVdGlsaXRpZXNTZXJ2aWNlIHtcbiAgcHVibGljIGNhbGVuZGFyRGF0YTogRGF0YTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNhbGVuZGFyRGF0YSA9IChkYXRlc0RpY3Rpb25hcnkgYXMgYW55KVsnZGVmYXVsdCddOyAvL3Byb2RcbiAgICAvLyB0aGlzLmNhbGVuZGFyRGF0YSA9IGRhdGVzRGljdGlvbmFyeTsgLy9kZWJ1Z1xuICB9XG5cbiAgcGFyc2VEYXRlKGRhdGVTdHI6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IGRhdGVTdHI/LnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHBhcnRzLm1hcChOdW1iZXIpO1xuICAgIGlmIChcbiAgICAgIGlzTmFOKGRheSkgfHxcbiAgICAgIGlzTmFOKG1vbnRoKSB8fFxuICAgICAgaXNOYU4oeWVhcikgfHxcbiAgICAgIGRheSA8IDEgfHxcbiAgICAgIGRheSA+IDMxIHx8XG4gICAgICBtb250aCA8IDEgfHxcbiAgICAgIG1vbnRoID4gMTIgfHxcbiAgICAgIHllYXIgPCAxXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgfVxuXG4gIGdldERheVNob3J0SGFuZChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSk7XG4gIH1cblxuICBnZW5lcmF0ZURhdGVzKGZEOiBEYXlJbmZvLCBsRDogRGF5SW5mbywgdUM6IG51bWJlcik6IE1vbnRoRGF5cyB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5wYXJzZURhdGUoZkQ/LmdEKTtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5wYXJzZURhdGUobEQ/LmdEKTtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogTW9udGhEYXlzID0gW107XG4gICAgbGV0IGN1cnJlbnRHcmVnb3JpYW5EYXRlID0gbmV3IERhdGUoc3RhcnREYXRlKTtcbiAgICBsZXQgY3VycmVudFVtbUFsUXVyYURheSA9IHBhcnNlSW50KGZEPy51RD8uc3BsaXQoJy8nKVswXSk7XG4gICAgbGV0IGN1cnJlbnRVbW1BbFF1cmFNb250aCA9IHBhcnNlSW50KGZEPy51RD8uc3BsaXQoJy8nKVsxXSk7XG4gICAgbGV0IGN1cnJlbnRVbW1BbFF1cmFZZWFyID0gcGFyc2VJbnQoZkQ/LnVEPy5zcGxpdCgnLycpWzJdKTtcbiAgICBsZXQgZGF5c0luQ3VycmVudFVtbUFsUXVyYU1vbnRoID0gdUM7XG4gICAgd2hpbGUgKGN1cnJlbnRHcmVnb3JpYW5EYXRlIDw9IGVuZERhdGUpIHtcbiAgICAgIGNvbnN0IHVtbUFsUXVyYURhdGUgPSBgJHtjdXJyZW50VW1tQWxRdXJhRGF5XG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5wYWRTdGFydCgyLCAnMCcpfS8ke2N1cnJlbnRVbW1BbFF1cmFNb250aFxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAucGFkU3RhcnQoMiwgJzAnKX0vJHtjdXJyZW50VW1tQWxRdXJhWWVhcn1gO1xuICAgICAgZGF5c0luTW9udGgucHVzaCh7XG4gICAgICAgIGdEOiB0aGlzLmZvcm1hdERhdGUoY3VycmVudEdyZWdvcmlhbkRhdGUpLFxuICAgICAgICB1RDogdW1tQWxRdXJhRGF0ZSxcbiAgICAgICAgZE46IHRoaXMuZ2V0RGF5U2hvcnRIYW5kKGN1cnJlbnRHcmVnb3JpYW5EYXRlKSxcbiAgICAgICAgdUM6IDAsXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnRHcmVnb3JpYW5EYXRlLnNldERhdGUoY3VycmVudEdyZWdvcmlhbkRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICBjdXJyZW50VW1tQWxRdXJhRGF5ICs9IDE7XG4gICAgICBpZiAoY3VycmVudFVtbUFsUXVyYURheSA+IGRheXNJbkN1cnJlbnRVbW1BbFF1cmFNb250aCkge1xuICAgICAgICBjdXJyZW50VW1tQWxRdXJhRGF5ID0gMTtcbiAgICAgICAgY3VycmVudFVtbUFsUXVyYU1vbnRoICs9IDE7XG4gICAgICAgIGlmIChjdXJyZW50VW1tQWxRdXJhTW9udGggPiAxMikge1xuICAgICAgICAgIGN1cnJlbnRVbW1BbFF1cmFNb250aCA9IDE7XG4gICAgICAgICAgY3VycmVudFVtbUFsUXVyYVllYXIgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0TW9udGhEYXRhID1cbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRGF0YVtjdXJyZW50VW1tQWxRdXJhWWVhci50b1N0cmluZygpXT8uW1xuICAgICAgICAgICAgY3VycmVudFVtbUFsUXVyYU1vbnRoLnRvU3RyaW5nKClcbiAgICAgICAgICBdO1xuICAgICAgICBkYXlzSW5DdXJyZW50VW1tQWxRdXJhTW9udGggPSBuZXh0TW9udGhEYXRhID8gbmV4dE1vbnRoRGF0YS5mRC51QyA6IDMwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF5c0luTW9udGg7XG4gIH1cblxuICBjb252ZXJ0RGF0ZShkYXRlU3RyOiBzdHJpbmcsIGlzR3JlZ29yaWFuOiBib29sZWFuKTogRGF5SW5mbyB8IG51bGwge1xuICAgIGlmICghZGF0ZVN0cikgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoaXNHcmVnb3JpYW4pIHtcbiAgICAgIC8vIFByZXByb2Nlc3MgR3JlZ29yaWFuIGRhdGVcbiAgICAgIGNvbnN0IGdyZWdvcmlhbkRhdGUgPSB0aGlzLnBhcnNlRGF0ZShkYXRlU3RyKTtcbiAgICAgIGlmICghZ3JlZ29yaWFuRGF0ZSkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy5mb3JtYXREYXRlKGdyZWdvcmlhbkRhdGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IHllYXJLZXkgaW4gdGhpcy5jYWxlbmRhckRhdGEpIHtcbiAgICAgICAgZm9yIChjb25zdCBtb250aEtleSBpbiB0aGlzLmNhbGVuZGFyRGF0YVt5ZWFyS2V5XSkge1xuICAgICAgICAgIGNvbnN0IG1vbnRoRGF0YSA9IHRoaXMuY2FsZW5kYXJEYXRhW3llYXJLZXldW21vbnRoS2V5XTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlSW5Nb250aFJhbmdlKFxuICAgICAgICAgICAgICBmb3JtYXR0ZWREYXRlLFxuICAgICAgICAgICAgICBtb250aERhdGEuZkQ/LmdELFxuICAgICAgICAgICAgICBtb250aERhdGEubEQ/LmdEXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRoaXMuZ2VuZXJhdGVEYXRlcyhcbiAgICAgICAgICAgICAgbW9udGhEYXRhLmZELFxuICAgICAgICAgICAgICBtb250aERhdGEubEQsXG4gICAgICAgICAgICAgIG1vbnRoRGF0YS5mRD8udUNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRheU1hdGNoID0gZGF5c0luTW9udGguZmluZCgoZCkgPT4gZC5nRCA9PT0gZm9ybWF0dGVkRGF0ZSk7XG4gICAgICAgICAgICBpZiAoZGF5TWF0Y2gpIHJldHVybiBkYXlNYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gZGF0ZVN0ci5zcGxpdCgnLycpLm1hcChOdW1iZXIpO1xuXG4gICAgICBpZiAoaXNOYU4oZGF5KSB8fCBpc05hTihtb250aCkgfHwgaXNOYU4oeWVhcikpIHJldHVybiBudWxsO1xuXG4gICAgICBmb3IgKGNvbnN0IHllYXJLZXkgaW4gdGhpcy5jYWxlbmRhckRhdGEpIHtcbiAgICAgICAgZm9yIChjb25zdCBtb250aEtleSBpbiB0aGlzLmNhbGVuZGFyRGF0YVt5ZWFyS2V5XSkge1xuICAgICAgICAgIGNvbnN0IG1vbnRoRGF0YSA9IHRoaXMuY2FsZW5kYXJEYXRhW3llYXJLZXldW21vbnRoS2V5XTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlSW5Nb250aFJhbmdlKFxuICAgICAgICAgICAgICBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gLFxuICAgICAgICAgICAgICBtb250aERhdGEuZkQ/LnVELFxuICAgICAgICAgICAgICBtb250aERhdGEubEQ/LnVEXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRoaXMuZ2VuZXJhdGVEYXRlcyhcbiAgICAgICAgICAgICAgbW9udGhEYXRhLmZELFxuICAgICAgICAgICAgICBtb250aERhdGEubEQsXG4gICAgICAgICAgICAgIG1vbnRoRGF0YS5mRD8udUNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRheU1hdGNoID0gZGF5c0luTW9udGguZmluZCgoZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbdURheSwgdU1vbnRoLCB1WWVhcl0gPSBkPy51RD8uc3BsaXQoJy8nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHVEYXkgPT09IGRheSAmJiB1TW9udGggPT09IG1vbnRoICYmIHVZZWFyID09PSB5ZWFyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXlNYXRjaCkgcmV0dXJuIGRheU1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RhdGVJbk1vbnRoUmFuZ2UoXG4gICAgZGF0ZVRvQ2hlY2s6IHN0cmluZyxcbiAgICBtb250aFN0YXJ0RGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG1vbnRoRW5kRGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghbW9udGhTdGFydERhdGUgfHwgIW1vbnRoRW5kRGF0ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgY2hlY2tEYXRlID0gdGhpcy5wYXJzZURhdGUoZGF0ZVRvQ2hlY2spO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMucGFyc2VEYXRlKG1vbnRoU3RhcnREYXRlKTtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5wYXJzZURhdGUobW9udGhFbmREYXRlKTtcblxuICAgIGlmICghY2hlY2tEYXRlIHx8ICFzdGFydERhdGUgfHwgIWVuZERhdGUpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBjaGVja0RhdGUgPj0gc3RhcnREYXRlICYmIGNoZWNrRGF0ZSA8PSBlbmREYXRlO1xuICB9XG5cbiAgZ2V0TW9udGhEYXRhKGlucHV0RGF0ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBEYXlJbmZvW10gfCBudWxsIHtcbiAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBpbnB1dERhdGU/LnNwbGl0KCcvJykubWFwKE51bWJlcik7XG4gICAgbGV0IGlzR3JlZ29yaWFuOiBib29sZWFuO1xuICAgIGlmICh0eXBlID09ICdncmVnJykge1xuICAgICAgaXNHcmVnb3JpYW4gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0dyZWdvcmlhbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNHcmVnb3JpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEdyZWdvcmlhbk1vbnRoRGF0YShkYXksIG1vbnRoLCB5ZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VW1BbFF1cnJhTW9udGhEYXRhKGRheSwgbW9udGgsIHllYXIpO1xuICAgIH1cbiAgfVxuXG4gIGdldEdyZWdvcmlhbk1vbnRoRGF0YShcbiAgICBkYXk6IG51bWJlcixcbiAgICBtb250aDogbnVtYmVyLFxuICAgIHllYXI6IG51bWJlclxuICApOiBEYXlJbmZvW10gfCBudWxsIHtcbiAgICBjb25zdCB5ZWFyRGF0YSA9IHRoaXMuY2FsZW5kYXJEYXRhW3llYXJdO1xuICAgIGlmICgheWVhckRhdGEpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG1vbnRoRGF0YSA9IHllYXJEYXRhW21vbnRoXTtcbiAgICBpZiAoIW1vbnRoRGF0YSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbW9udGhBcnJheTogRGF5SW5mb1tdID0gW107XG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKTtcbiAgICBmb3IgKGxldCBkID0gMTsgZCA8PSBlbmREYXRlLmdldERhdGUoKTsgZCsrKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBkIC0gMTtcblxuICAgICAgbW9udGhBcnJheS5wdXNoKHtcbiAgICAgICAgZ0Q6IGAke2QudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS8ke21vbnRoXG4gICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKX0vJHt5ZWFyfWAsXG4gICAgICAgIHVEOiB0aGlzLmNhbGN1bGF0ZVVtQWxRdXJyYURhdGUoXG4gICAgICAgICAgbW9udGhEYXRhLmZELnVELFxuICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICBtb250aERhdGEuZkQudUNcbiAgICAgICAgKSxcbiAgICAgICAgZE46IHRoaXMuZ2V0RGF5TmFtZShuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGQpLmdldERheSgpKSxcbiAgICAgICAgdUM6IG1vbnRoRGF0YS5mRC51QyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtb250aEFycmF5O1xuICB9XG5cbiAgZ2V0VW1BbFF1cnJhTW9udGhEYXRhKFxuICAgIGRheTogbnVtYmVyLFxuICAgIG1vbnRoOiBudW1iZXIsXG4gICAgeWVhcjogbnVtYmVyXG4gICk6IERheUluZm9bXSB8IG51bGwge1xuICAgIGZvciAoY29uc3QgZ3JlZ29yaWFuWWVhciBpbiB0aGlzLmNhbGVuZGFyRGF0YSkge1xuICAgICAgY29uc3QgeWVhckRhdGEgPSB0aGlzLmNhbGVuZGFyRGF0YVtwYXJzZUludChncmVnb3JpYW5ZZWFyKV07XG5cbiAgICAgIGZvciAoY29uc3QgbW9udGhJbmRleCBpbiB5ZWFyRGF0YSkge1xuICAgICAgICBjb25zdCBtb250aERhdGEgPSB5ZWFyRGF0YVtwYXJzZUludChtb250aEluZGV4KV07XG4gICAgICAgIGNvbnN0IFtmRGF5LCBmTW9udGgsIGZZZWFyXSA9IG1vbnRoRGF0YT8uZkQ/LnVEPy5zcGxpdCgnLycpLm1hcChOdW1iZXIpO1xuXG4gICAgICAgIGlmIChmWWVhciA9PT0geWVhciAmJiBmTW9udGggPT09IG1vbnRoKSB7XG4gICAgICAgICAgY29uc3QgdG90YWxEYXlzID0gbW9udGhEYXRhLmZELnVDO1xuICAgICAgICAgIGNvbnN0IG1vbnRoQXJyYXk6IERheUluZm9bXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHVtQWxRdXJyYVN0YXJ0RGF0ZSA9IGAwMS8ke21vbnRoXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJyl9LyR7eWVhcn1gO1xuICAgICAgICAgIGNvbnN0IGRheURpZmZlcmVuY2UgPSBmRGF5IC0gMTtcblxuICAgICAgICAgIGNvbnN0IHN0YXJ0R3JlZ29yaWFuRGF0ZSA9IHRoaXMuY2FsY3VsYXRlR3JlZ29yaWFuRGF0ZShcbiAgICAgICAgICAgIG1vbnRoRGF0YS5mRC5nRCxcbiAgICAgICAgICAgIC1kYXlEaWZmZXJlbmNlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxEYXlzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVEYXRlID0gdGhpcy5jYWxjdWxhdGVVbUFsUXVycmFEYXRlKFxuICAgICAgICAgICAgICB1bUFsUXVycmFTdGFydERhdGUsXG4gICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgIHRvdGFsRGF5c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGdEYXRlID0gdGhpcy5jYWxjdWxhdGVHcmVnb3JpYW5EYXRlKHN0YXJ0R3JlZ29yaWFuRGF0ZSwgaSk7XG4gICAgICAgICAgICBjb25zdCBbZ0RheSwgZ01vbnRoLCBnWWVhcl0gPSBnRGF0ZT8uc3BsaXQoJy8nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGRheU5hbWUgPSB0aGlzLmdldERheU5hbWUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKGdZZWFyLCBnTW9udGggLSAxLCBnRGF5KS5nZXREYXkoKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbW9udGhBcnJheS5wdXNoKHtcbiAgICAgICAgICAgICAgZ0Q6IGdEYXRlLFxuICAgICAgICAgICAgICB1RDogdURhdGUsXG4gICAgICAgICAgICAgIGROOiBkYXlOYW1lLFxuICAgICAgICAgICAgICB1QzogdG90YWxEYXlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1vbnRoQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNhbGN1bGF0ZUdyZWdvcmlhbkRhdGUoc3RhcnRHRGF0ZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gc3RhcnRHRGF0ZT8uc3BsaXQoJy8nKS5tYXAoTnVtYmVyKTtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkgKyBvZmZzZXQpO1xuXG4gICAgcmV0dXJuIGAke25ld0RhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0vJHsoXG4gICAgICBuZXdEYXRlLmdldE1vbnRoKCkgKyAxXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5wYWRTdGFydCgyLCAnMCcpfS8ke25ld0RhdGUuZ2V0RnVsbFllYXIoKX1gO1xuICB9XG5cbiAgY2FsY3VsYXRlVW1BbFF1cnJhRGF0ZShcbiAgICBzdGFydFVEYXRlOiBzdHJpbmcsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdUM6IG51bWJlclxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHN0YXJ0VURhdGU/LnNwbGl0KCcvJykubWFwKE51bWJlcik7XG5cbiAgICBsZXQgbmV3RGF5ID0gZGF5ICsgb2Zmc2V0O1xuICAgIGxldCBuZXdNb250aCA9IG1vbnRoO1xuICAgIGxldCBuZXdZZWFyID0geWVhcjtcblxuICAgIHdoaWxlIChuZXdEYXkgPiB1Qykge1xuICAgICAgbmV3RGF5IC09IHVDO1xuICAgICAgbmV3TW9udGggKz0gMTtcbiAgICB9XG5cbiAgICB3aGlsZSAobmV3TW9udGggPiAxMikge1xuICAgICAgbmV3TW9udGggPSAxO1xuICAgICAgbmV3WWVhciArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtuZXdEYXkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS8ke25ld01vbnRoXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnBhZFN0YXJ0KDIsICcwJyl9LyR7bmV3WWVhcn1gO1xuICB9XG5cbiAgZ2V0RGF5TmFtZShkYXlJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXTtcbiAgICByZXR1cm4gZGF5c1tkYXlJbmRleF07XG4gIH1cblxuICAvLy8gQ2hlY2sgZGF0ZSBpcyBpdCBpbiBwYXN0IG9yIGZ1dHVyZVxuICBjaGVja1Bhc3RPckZ1dHVyZShpbnB1dERhdGU6IGFueSwgdGFyZ2V0RGF0ZTogYW55KSB7XG4gICAgaWYgKGlucHV0RGF0ZSkge1xuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gaW5wdXREYXRlPy5zcGxpdCgnLycpLm1hcChOdW1iZXIpO1xuICAgICAgY29uc3QgZGF0ZVRvQ2hlY2sgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgICBjb25zdCB0b2RheSA9IHRhcmdldERhdGU7XG4gICAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIGlmIChkYXRlVG9DaGVjayA+IHRvZGF5KSB7XG4gICAgICAgIHJldHVybiAnRnV0dXJlJztcbiAgICAgIH0gZWxzZSBpZiAoZGF0ZVRvQ2hlY2sgPCB0b2RheSkge1xuICAgICAgICByZXR1cm4gJ1Bhc3QnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdUb2RheSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8vIENvbnZlcnQgZW5nbGlzaCBudW1iZXJzIHRvIGFyYWJpYyBlcXVpdmFsZW50XG4gIHBhcnNlRW5nbGlzaChlbmdsaXNoTnVtOiBhbnkpIHtcbiAgICBpZiAoIWVuZ2xpc2hOdW0pIHJldHVybiBlbmdsaXNoTnVtO1xuICAgIGNvbnN0IG51bVN0ciA9IFN0cmluZyhlbmdsaXNoTnVtKTtcbiAgICBjb25zdCBhcmFiaWNOdW1iZXJzID0gW1xuICAgICAgJ1xcdTA2NjAnLFxuICAgICAgJ1xcdTA2NjEnLFxuICAgICAgJ1xcdTA2NjInLFxuICAgICAgJ1xcdTA2NjMnLFxuICAgICAgJ1xcdTA2NjQnLFxuICAgICAgJ1xcdTA2NjUnLFxuICAgICAgJ1xcdTA2NjYnLFxuICAgICAgJ1xcdTA2NjcnLFxuICAgICAgJ1xcdTA2NjgnLFxuICAgICAgJ1xcdTA2NjknLFxuICAgIF07XG4gICAgcmV0dXJuIG51bVN0ci5yZXBsYWNlKC9bMC05XS9nLCAoZGlnaXQpID0+IHtcbiAgICAgIHJldHVybiBhcmFiaWNOdW1iZXJzW051bWJlcihkaWdpdCldIHx8IGRpZ2l0O1xuICAgIH0pO1xuICB9XG5cbiAgLy8vIENvbnZlcnQgYXJhYmljIG51bWJlcnMgdG8gZW5nbGlzaCBlcXVpdmFsZW50XG4gIHBhcnNlQXJhYmljKGFyYWJpY051bTogYW55KSB7XG4gICAgcmV0dXJuIGFyYWJpY051bS5yZXBsYWNlKC9b2aDZodmi2aPZpNml2abZp9mo2aldL2csIGZ1bmN0aW9uIChkOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBkLmNoYXJDb2RlQXQoMCkgLSAxNjMyO1xuICAgIH0pO1xuICB9XG5cbiAgLy8vXG4gIGNvbnZlcnREYXRlTnVtZXJhbHMoZGF0ZTogc3RyaW5nLCB0YXJnZXRMYW5nOiAnZW4nIHwgJ2FyJyk6IHN0cmluZyB7XG4gICAgY29uc3QgYXJhYmljTnVtYmVycyA9IFsn2aAnLCAn2aEnLCAn2aInLCAn2aMnLCAn2aQnLCAn2aUnLCAn2aYnLCAn2acnLCAn2agnLCAn2aknXTtcbiAgICBjb25zdCBlbmdsaXNoTnVtYmVycyA9IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOSddO1xuXG4gICAgY29uc3QgdG9BcmFiaWMgPSAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIHZhbHVlXG4gICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgLm1hcCgoY2hhcikgPT4gKC9cXGQvLnRlc3QoY2hhcikgPyBhcmFiaWNOdW1iZXJzWytjaGFyXSA6IGNoYXIpKVxuICAgICAgICAuam9pbignJyk7XG5cbiAgICBjb25zdCB0b0VuZ2xpc2ggPSAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIHZhbHVlXG4gICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgLm1hcCgoY2hhcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJhYmljTnVtYmVycy5pbmRleE9mKGNoYXIpO1xuICAgICAgICAgIHJldHVybiBpbmRleCA+IC0xID8gZW5nbGlzaE51bWJlcnNbaW5kZXhdIDogY2hhcjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgaWYgKHRhcmdldExhbmcgPT09ICdhcicpIHtcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IGRhdGUuc3BsaXQoJy8nKTtcbiAgICAgIHJldHVybiBgJHt0b0FyYWJpYyh5ZWFyKX0vJHt0b0FyYWJpYyhtb250aCl9LyR7dG9BcmFiaWMoZGF5KX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBkYXRlLnNwbGl0KCcvJyk7XG4gICAgICByZXR1cm4gYCR7dG9FbmdsaXNoKGRheSl9LyR7dG9FbmdsaXNoKG1vbnRoKX0vJHt0b0VuZ2xpc2goeWVhcil9YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGlucHV0IGRhdGUgdG8gREQvTU0vWVlZWSBzdHJpbmcgZm9ybWF0IChHcmVnb3JpYW4pXG4gICAqIEFjY2VwdHMgRGF0ZSBvYmplY3Qgb3IgREQvTU0vWVlZWSBzdHJpbmdcbiAgICovXG4gIG5vcm1hbGl6ZURhdGVUb1N0cmluZyhkYXRlOiBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZShkYXRlKTtcbiAgICB9XG5cbiAgICAvLyBBbHJlYWR5IGEgc3RyaW5nIC0gdmFsaWRhdGUgZm9ybWF0XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZURhdGUoZGF0ZSk7XG4gICAgcmV0dXJuIHBhcnNlZCA/IHRoaXMuZm9ybWF0RGF0ZShwYXJzZWQpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBkYXRlcyAoR3JlZ29yaWFuIGZvcm1hdCBERC9NTS9ZWVlZKVxuICAgKiBSZXR1cm5zOiAtMSBpZiBkYXRlMSA8IGRhdGUyLCAwIGlmIGVxdWFsLCAxIGlmIGRhdGUxID4gZGF0ZTJcbiAgICovXG4gIGNvbXBhcmVEYXRlcyhkYXRlMVN0cjogc3RyaW5nLCBkYXRlMlN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBkMSA9IHRoaXMucGFyc2VEYXRlKGRhdGUxU3RyKTtcbiAgICBjb25zdCBkMiA9IHRoaXMucGFyc2VEYXRlKGRhdGUyU3RyKTtcblxuICAgIGlmICghZDEgfHwgIWQyKSByZXR1cm4gMDtcblxuICAgIGlmIChkMSA8IGQyKSByZXR1cm4gLTE7XG4gICAgaWYgKGQxID4gZDIpIHJldHVybiAxO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIEhpanJpIGRhdGVzIChVTSBmb3JtYXQgREQvTU0vWVlZWSlcbiAgICogQ29udmVydHMgdG8gR3JlZ29yaWFuIGZvciBjb21wYXJpc29uXG4gICAqL1xuICBjb21wYXJlSGlqcmlEYXRlcyhoaWpyaTE6IHN0cmluZywgaGlqcmkyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGRheTEgPSB0aGlzLmNvbnZlcnREYXRlKGhpanJpMSwgZmFsc2UpO1xuICAgIGNvbnN0IGRheTIgPSB0aGlzLmNvbnZlcnREYXRlKGhpanJpMiwgZmFsc2UpO1xuXG4gICAgaWYgKCFkYXkxPy5nRCB8fCAhZGF5Mj8uZ0QpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGVzKGRheTEuZ0QsIGRheTIuZ0QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZGF0ZSBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSAoaW5jbHVzaXZlKVxuICAgKiBBbGwgZGF0ZXMgaW4gR3JlZ29yaWFuIEREL01NL1lZWVkgZm9ybWF0XG4gICAqL1xuICBpc0RhdGVJblJhbmdlKFxuICAgIGRhdGVTdHI6IHN0cmluZyxcbiAgICBtaW5EYXRlU3RyOiBzdHJpbmcgfCBudWxsLFxuICAgIG1heERhdGVTdHI6IHN0cmluZyB8IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBJZiBubyBjb25zdHJhaW50cywgZGF0ZSBpcyB2YWxpZFxuICAgIGlmICghbWluRGF0ZVN0ciAmJiAhbWF4RGF0ZVN0cikgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBDaGVjayBtaW5pbXVtIGNvbnN0cmFpbnRcbiAgICBpZiAobWluRGF0ZVN0ciAmJiB0aGlzLmNvbXBhcmVEYXRlcyhkYXRlU3RyLCBtaW5EYXRlU3RyKSA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBtYXhpbXVtIGNvbnN0cmFpbnRcbiAgICBpZiAobWF4RGF0ZVN0ciAmJiB0aGlzLmNvbXBhcmVEYXRlcyhkYXRlU3RyLCBtYXhEYXRlU3RyKSA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIEhpanJpIGRhdGUgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2VcbiAgICogQ29udmVydHMgdG8gR3JlZ29yaWFuIGZvciBjb21wYXJpc29uXG4gICAqL1xuICBpc0hpanJpRGF0ZUluUmFuZ2UoXG4gICAgaGlqcmlEYXRlU3RyOiBzdHJpbmcsXG4gICAgbWluRGF0ZVN0cjogc3RyaW5nIHwgbnVsbCxcbiAgICBtYXhEYXRlU3RyOiBzdHJpbmcgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghaGlqcmlEYXRlU3RyKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBkYXlJbmZvID0gdGhpcy5jb252ZXJ0RGF0ZShoaWpyaURhdGVTdHIsIGZhbHNlKTtcbiAgICBpZiAoIWRheUluZm8/LmdEKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5pc0RhdGVJblJhbmdlKGRheUluZm8uZ0QsIG1pbkRhdGVTdHIsIG1heERhdGVTdHIpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1oaWpyaS1ncmVnb3JpYW4tZGF0ZS10aW1lLXBpY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL3NyYy9hbmd1bGFyLWhpanJpLWdyZWdvcmlhbi1kYXRlLXRpbWUtcGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|