angular-hijri-gregorian-date-time-picker 1.5.0
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 +236 -0
- package/_interfaces/calendar-model.d.ts +28 -0
- package/_interfaces/styles-config.model.d.ts +13 -0
- package/_services/date-utilities.service.d.ts +49 -0
- package/esm2020/_data/dictionary.json +1 -0
- package/esm2020/_interfaces/calendar-model.mjs +2 -0
- package/esm2020/_interfaces/styles-config.model.mjs +2 -0
- package/esm2020/_services/date-utilities.service.mjs +375 -0
- package/esm2020/angular-hijri-gregorian-date-time-picker.mjs +5 -0
- package/esm2020/lib/hijri-gregorian-datepicker.component.mjs +1058 -0
- package/esm2020/lib/hijri-gregorian-datepicker.module.mjs +19 -0
- package/esm2020/public-api.mjs +8 -0
- package/esm2020/themes/themes.json +152 -0
- package/fesm2015/angular-hijri-gregorian-date-time-picker.mjs +28995 -0
- package/fesm2015/angular-hijri-gregorian-date-time-picker.mjs.map +1 -0
- package/fesm2020/angular-hijri-gregorian-date-time-picker.mjs +28986 -0
- package/fesm2020/angular-hijri-gregorian-date-time-picker.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/hijri-gregorian-datepicker.component.d.ts +238 -0
- package/lib/hijri-gregorian-datepicker.module.d.ts +9 -0
- package/package.json +98 -0
- package/public-api.d.ts +4 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9zcmMvX2ludGVyZmFjZXMvY2FsZW5kYXItbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTW9udGhJbmZvIHtcbiAgZkQ6IERheUluZm87IC8vIEZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbEQ6IERheUluZm87IC8vIExhc3QgZGF5IG9mIHRoZSBtb250aFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFllYXJEYXRhIHtcbiAgW21vbnRoOiBzdHJpbmddOiBNb250aEluZm87XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIFt5ZWFyOiBzdHJpbmddOiBZZWFyRGF0YTtcbn1cblxuLy8gVGltZSB2YWx1ZSBzdHJ1Y3R1cmUgZm9yIHRpbWUgcGlja2VyXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVWYWx1ZSB7XG4gIGhvdXI6IG51bWJlcjsgICAvLyAwLTIzIGZvciAyNC1ob3VyIGZvcm1hdFxuICBtaW51dGU6IG51bWJlcjsgLy8gMC01OVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERheUluZm8ge1xuICBnRDogc3RyaW5nOyAvLyBHcmVnb3JpYW4gZGF0ZVxuICB1RDogc3RyaW5nOyAvLyBVbSBhbC1RdXJyYSBkYXRlXG4gIGROOiBzdHJpbmc7IC8vIERheSBuYW1lIHNob3J0aGFuZFxuICB1QzogbnVtYmVyOyAvLyBQbGFjZWhvbGRlciBzaW5jZSB3ZSBhcmUgbm90IHVzaW5nIGl0IGluIHRoZSBvdXRwdXRcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47IC8vIE5ldzogaW5kaWNhdGVzIGlmIGRheSBpcyBkaXNhYmxlZCAob3V0IG9mIG1pbi9tYXggcmFuZ2UpXG4gIHRpbWU/OiBUaW1lVmFsdWU7ICAgLy8gTmV3OiBvcHRpb25hbCB0aW1lIGluZm9ybWF0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9kYXlEYXRlIHtcbiAgZ3JlZ29yaWFuPzogc3RyaW5nO1xuICB1bW1BbFF1cmE/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vbnRoRGF5cyA9IERheUluZm9bXTtcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL3NyYy9faW50ZXJmYWNlcy9zdHlsZXMtY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIHN0eWxlc0NvbmZpZyB7XG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICBzZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgdG9kYXlzRGF0ZUJnQ29sb3I/OiBzdHJpbmc7XG4gIHRvZGF5c0RhdGVUZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGNvbmZpcm1CdG5UZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGRpc2FibGVkRGF5Q29sb3I/OiBzdHJpbmc7XG4gIGRheU5hbWVDb2xvcj86IHN0cmluZztcbiAgZGF5Q29sb3I/OiBzdHJpbmc7XG4gIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,375 @@
|
|
|
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=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1oaWpyaS1ncmVnb3JpYW4tZGF0ZS10aW1lLXBpY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL3NyYy9hbmd1bGFyLWhpanJpLWdyZWdvcmlhbi1kYXRlLXRpbWUtcGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|