@acorex/core 7.2.6 → 7.2.7

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.
@@ -4,6 +4,7 @@ export declare class JalaliCalendar implements AXCalendar {
4
4
  monthShortNames: string[];
5
5
  dayNames: string[];
6
6
  dayShortNames: string[];
7
+ breaks: number[];
7
8
  create(value: AXDateValue): AXDateTime;
8
9
  name(): string;
9
10
  dayOfMonth(date: Date): number;
@@ -16,20 +17,23 @@ export declare class JalaliCalendar implements AXCalendar {
16
17
  set(date: Date, unit: TimeUnit, value: number): AXDateTime;
17
18
  startOf(date: Date, unit: TimeUnit): AXDateTime;
18
19
  endOf(date: Date, unit: TimeUnit): AXDateTime;
19
- toJalali(date: Date): {
20
+ toJalaali(date: Date): {
20
21
  year: number;
21
22
  month: number;
22
23
  day: number;
23
24
  };
24
25
  toGregorian(jy: any, jm: any, jd: any): Date;
25
- isValid(jy: any, jm: any, jd: any): boolean;
26
- isLeapYear(jy: any): boolean;
27
- monthLength(jy: any, jm: any): 31 | 30 | 29;
26
+ isValidJalaaliDate(jy: any, jm: any, jd: any): boolean;
27
+ isLeapJalaaliYear(jy: any): boolean;
28
+ jalaaliMonthLength(jy: any, jm: any): 31 | 30 | 29;
29
+ private jalCalLeap;
28
30
  private jalCal;
29
31
  private j2d;
30
32
  private d2j;
31
33
  private g2d;
32
34
  private d2g;
35
+ private jalaaliWeek;
36
+ private jalaaliToDateObject;
33
37
  private div;
34
38
  private mod;
35
39
  }
@@ -5,6 +5,13 @@ export class JalaliCalendar {
5
5
  this.monthShortNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');
6
6
  this.dayNames = 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'.split('_');
7
7
  this.dayShortNames = 'ش_ی_د_س_چ_پ_ج'.split('_');
8
+ /*
9
+ Jalaali years starting the 33-year rule.
10
+ */
11
+ this.breaks = [
12
+ -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394,
13
+ 2456, 3178,
14
+ ];
8
15
  }
9
16
  create(value) {
10
17
  const a = this.toGregorian(value.year, value.month, value.date);
@@ -14,10 +21,10 @@ export class JalaliCalendar {
14
21
  return 'jalali';
15
22
  }
16
23
  dayOfMonth(date) {
17
- return this.toJalali(date).day;
24
+ return this.toJalaali(date).day;
18
25
  }
19
26
  dayOfYear(date) {
20
- const j = this.toJalali(date);
27
+ const j = this.toJalaali(date);
21
28
  return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;
22
29
  }
23
30
  dayOfWeek(date) {
@@ -29,10 +36,10 @@ export class JalaliCalendar {
29
36
  return Math.ceil(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);
30
37
  }
31
38
  year(date) {
32
- return this.toJalali(date).year;
39
+ return this.toJalaali(date).year;
33
40
  }
34
41
  monthOfYear(date) {
35
- return this.toJalali(date).month;
42
+ return this.toJalaali(date).month;
36
43
  }
37
44
  add(date, unit, amount) {
38
45
  let value = date.valueOf();
@@ -89,7 +96,7 @@ export class JalaliCalendar {
89
96
  }
90
97
  set(date, unit, value) {
91
98
  const clone = new Date(date.valueOf());
92
- const jDate = this.toJalali(clone);
99
+ const jDate = this.toJalaali(clone);
93
100
  switch (unit) {
94
101
  case 'second':
95
102
  clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
@@ -173,20 +180,23 @@ export class JalaliCalendar {
173
180
  case 'month': {
174
181
  const jy = this.year(date);
175
182
  const jm = this.monthOfYear(date);
176
- const jd = this.monthLength(jy, jm);
183
+ const jd = this.jalaaliMonthLength(jy, jm);
177
184
  const gDate = this.toGregorian(jy, jm, jd);
178
185
  return new AXDateTime(gDate, this.name()).endOf('day');
179
186
  }
180
187
  case 'year':
181
188
  let jy = this.year(date);
182
- const gDate = this.toGregorian(jy, 12, this.monthLength(jy, 12));
189
+ const gDate = this.toGregorian(jy, 12, this.jalaaliMonthLength(jy, 12));
183
190
  return new AXDateTime(gDate, this.name()).endOf('day');
184
191
  }
185
192
  }
186
- toJalali(date) {
187
- const gy = date.getFullYear();
188
- const gm = date.getMonth() + 1;
189
- const gd = date.getDate();
193
+ /*
194
+ Converts a Gregorian date to Jalaali.
195
+ */
196
+ toJalaali(date) {
197
+ let gd = date.getDate();
198
+ let gm = date.getMonth() + 1;
199
+ let gy = date.getFullYear();
190
200
  const r = this.d2j(this.g2d(gy, gm, gd));
191
201
  return {
192
202
  year: r.jy,
@@ -195,47 +205,75 @@ export class JalaliCalendar {
195
205
  };
196
206
  }
197
207
  /*
198
- Converts a Jalaali date to Gregorian.
199
- */
208
+ Converts a Jalaali date to Gregorian.
209
+ */
200
210
  toGregorian(jy, jm, jd) {
201
211
  const g = this.d2g(this.j2d(jy, jm, jd));
202
212
  return new Date(g.gy, g.gm - 1, g.gd);
203
213
  }
204
214
  /*
205
- Checks whether a Jalaali date is valid or not.
206
- */
207
- isValid(jy, jm, jd) {
208
- return (jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.monthLength(jy, jm));
215
+ Checks whether a Jalaali date is valid or not.
216
+ */
217
+ isValidJalaaliDate(jy, jm, jd) {
218
+ return (jy >= -61 &&
219
+ jy <= 3177 &&
220
+ jm >= 1 &&
221
+ jm <= 12 &&
222
+ jd >= 1 &&
223
+ jd <= this.jalaaliMonthLength(jy, jm));
209
224
  }
210
225
  /*
211
- Is this a leap year or not?
212
- */
213
- isLeapYear(jy) {
214
- return this.jalCal(jy).leap === 0;
226
+ Is this a leap year or not?
227
+ */
228
+ isLeapJalaaliYear(jy) {
229
+ return this.jalCalLeap(jy) === 0;
215
230
  }
216
231
  /*
217
- Number of days in a given month in a Jalaali year.
218
- */
219
- monthLength(jy, jm) {
232
+ Number of days in a given month in a Jalaali year.
233
+ */
234
+ jalaaliMonthLength(jy, jm) {
220
235
  if (jm <= 6)
221
236
  return 31;
222
237
  if (jm <= 11)
223
238
  return 30;
224
- if (this.isLeapYear(jy))
239
+ if (this.isLeapJalaaliYear(jy))
225
240
  return 30;
226
241
  return 29;
227
242
  }
228
- jalCal(jy) {
229
- // Jalaali years starting the 33-year rule.
230
- let breaks = [
231
- -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324,
232
- 2394, 2456, 3178,
233
- ], bl = breaks.length, gy = jy + 621, leapJ = -14, jp = breaks[0], jm, jump, leap, leapG, march, n, i;
234
- if (jy < jp || jy >= breaks[bl - 1])
243
+ /*
244
+ This determines if the Jalaali (Persian) year is
245
+ leap (366-day long) or is the common year (365 days)
246
+
247
+ @param jy Jalaali calendar year (-61 to 3177)
248
+ @returns number of years since the last leap year (0 to 4)
249
+ */
250
+ jalCalLeap(jy) {
251
+ let bl = this.breaks.length, jp = this.breaks[0], jm, jump, leap, n, i;
252
+ if (jy < jp || jy >= this.breaks[bl - 1])
253
+ throw new Error('Invalid Jalaali year ' + jy);
254
+ for (i = 1; i < bl; i += 1) {
255
+ jm = this.breaks[i];
256
+ jump = jm - jp;
257
+ if (jy < jm)
258
+ break;
259
+ jp = jm;
260
+ }
261
+ n = jy - jp;
262
+ if (jump - n < 6)
263
+ n = n - jump + this.div(jump + 4, 33) * 33;
264
+ leap = this.mod(this.mod(n + 1, 33) - 1, 4);
265
+ if (leap === -1) {
266
+ leap = 4;
267
+ }
268
+ return leap;
269
+ }
270
+ jalCal(jy, withoutLeap) {
271
+ let bl = this.breaks.length, gy = jy + 621, leapJ = -14, jp = this.breaks[0], jm, jump, leap, leapG, march, n, i;
272
+ if (jy < jp || jy >= this.breaks[bl - 1])
235
273
  throw new Error('Invalid Jalaali year ' + jy);
236
274
  // Find the limiting years for the Jalaali year jy.
237
275
  for (i = 1; i < bl; i += 1) {
238
- jm = breaks[i];
276
+ jm = this.breaks[i];
239
277
  jump = jm - jp;
240
278
  if (jy < jm)
241
279
  break;
@@ -252,6 +290,9 @@ export class JalaliCalendar {
252
290
  leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;
253
291
  // Determine the Gregorian date of Farvardin the 1st.
254
292
  march = 20 + leapJ - leapG;
293
+ // return with gy and march when we don't need leap
294
+ if (withoutLeap)
295
+ return { gy: gy, march: march };
255
296
  // Find how many years have passed since the last leap year.
256
297
  if (jump - n < 6)
257
298
  n = n - jump + this.div(jump + 4, 33) * 33;
@@ -265,28 +306,13 @@ export class JalaliCalendar {
265
306
  march: march,
266
307
  };
267
308
  }
268
- /*
269
- Converts a date of the Jalaali calendar to the Julian Day number.
270
- @param jy Jalaali year (1 to 3100)
271
- @param jm Jalaali month (1 to 12)
272
- @param jd Jalaali day (1 to 29/31)
273
- @return Julian Day number
274
- */
275
309
  j2d(jy, jm, jd) {
276
- let r = this.jalCal(jy);
310
+ let r = this.jalCal(jy, true);
277
311
  return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;
278
312
  }
279
- /*
280
- Converts the Julian Day number to a date in the Jalaali calendar.
281
- @param jdn Julian Day number
282
- @return
283
- jy: Jalaali year (1 to 3100)
284
- jm: Jalaali month (1 to 12)
285
- jd: Jalaali day (1 to 29/31)
286
- */
287
313
  d2j(jdn) {
288
314
  let gy = this.d2g(jdn).gy, // Calculate Gregorian year (gy).
289
- jy = gy - 621, r = this.jalCal(jy), jdn1f = this.g2d(gy, 3, r.march), jd, jm, k;
315
+ jy = gy - 621, r = this.jalCal(jy, false), jdn1f = this.g2d(gy, 3, r.march), jd, jm, k;
290
316
  // Find number of days that passed since 1 Farvardin.
291
317
  k = jdn - jdn1f;
292
318
  if (k >= 0) {
@@ -342,14 +368,27 @@ export class JalaliCalendar {
342
368
  gd: gd,
343
369
  };
344
370
  }
371
+ jalaaliWeek(jy, jm, jd) {
372
+ let dayOfWeek = this.jalaaliToDateObject(jy, jm, jd, 0, 0, 0, 0).getDay();
373
+ let startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);
374
+ let endDayDifference = 6 + startDayDifference;
375
+ return {
376
+ saturday: this.d2j(this.j2d(jy, jm, jd + startDayDifference)),
377
+ friday: this.d2j(this.j2d(jy, jm, jd + endDayDifference)),
378
+ };
379
+ }
380
+ jalaaliToDateObject(jy, jm, jd, h = 0, m = 0, s = 0, ms = 0) {
381
+ let gregorianCalenderDate = this.toGregorian(jy, jm, jd);
382
+ return new Date(gregorianCalenderDate.getFullYear(), gregorianCalenderDate.getMonth() - 1, gregorianCalenderDate.getDate(), h || 0, m || 0, s || 0, ms || 0);
383
+ }
345
384
  /*
346
- Utility helper functions.
347
- */
385
+ Utility helper functions.
386
+ */
348
387
  div(a, b) {
349
- return a / b;
388
+ return ~~(a / b);
350
389
  }
351
390
  mod(a, b) {
352
- return a - (a / b) * b;
391
+ return a - ~~(a / b) * b;
353
392
  }
354
393
  }
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFsYWxpLmNhbGVuZGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGVUaW1lL3NyYy9saWIvamFsYWxpLmNhbGVuZGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFFakYsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDRSxlQUFVLEdBQUcsb0VBQW9FLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdGLG9CQUFlLEdBQUcsb0VBQW9FLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxHLGFBQVEsR0FBRyxtREFBbUQsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUUsa0JBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBZ1o3QyxDQUFDO0lBOVlDLE1BQU0sQ0FBQyxLQUFrQjtRQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsSUFBSSxJQUFJLENBQ04sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUNmLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDWixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQ1gsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQ2hCLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUNsQixLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsRUFDbEIsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ2QsRUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIs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LENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENhbGVuZGFyLCBBWERhdGVUaW1lLCBBWERhdGVWYWx1ZSwgVGltZVVuaXQgfSBmcm9tICcuL2RhdGV0aW1lLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIEphbGFsaUNhbGVuZGFyIGltcGxlbWVudHMgQVhDYWxlbmRhciB7XG4gIG1vbnRoTmFtZXMgPSAn2YHYsdmI2LHYr9uM2YZf2KfYsdiv24zYqNmH2LTYql/Yrtix2K/Yp9ivX9iq24zYsV/Zhdix2K/Yp9ivX9i02YfYsduM2YjYsV/ZhdmH2LFf2KLYqNin2YZf2KLYsNixX9iv24xf2KjZh9mF2YZf2KfYs9mB2YbYrycuc3BsaXQoJ18nKTtcblxuICBtb250aFNob3J0TmFtZXMgPSAn2YHYsdmI2LHYr9uM2YZf2KfYsdiv24zYqNmH2LTYql/Yrtix2K/Yp9ivX9iq24zYsV/Zhdix2K/Yp9ivX9i02YfYsduM2YjYsV/ZhdmH2LFf2KLYqNin2YZf2KLYsNixX9iv24xf2KjZh9mF2YZf2KfYs9mB2YbYrycuc3BsaXQoJ18nKTtcblxuICBkYXlOYW1lcyA9ICfYtNmG2KjZh1/bjNqp2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2Ycg2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2Kwg2LTZhtio2Ydf2KzZhdi52YcnLnNwbGl0KCdfJyk7XG5cbiAgZGF5U2hvcnROYW1lcyA9ICfYtF/bjF/Yr1/Ys1/ahl/Zvl/YrCcuc3BsaXQoJ18nKTtcblxuICBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgYSA9IHRoaXMudG9HcmVnb3JpYW4odmFsdWUueWVhciwgdmFsdWUubW9udGgsIHZhbHVlLmRhdGUpO1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICBhLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGEuZ2V0TW9udGgoKSxcbiAgICAgICAgYS5nZXREYXRlKCksXG4gICAgICAgIHZhbHVlLmhvdXJzIHx8IDAsXG4gICAgICAgIHZhbHVlLm1pbnV0ZXMgfHwgMCxcbiAgICAgICAgdmFsdWUuc2Vjb25kcyB8fCAwLFxuICAgICAgICB2YWx1ZS5tcyB8fCAwXG4gICAgICApLFxuICAgICAgdGhpcy5uYW1lKClcbiAgICApO1xuICB9XG5cbiAgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnamFsYWxpJztcbiAgfVxuXG4gIGRheU9mTW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9KYWxhbGkoZGF0ZSkuZGF5O1xuICB9XG5cbiAgZGF5T2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIGNvbnN0IGogPSB0aGlzLnRvSmFsYWxpKGRhdGUpO1xuICAgIHJldHVybiAoai5tb250aCA8PSA2ID8gKGoubW9udGggLSAxKSAqIDMxIDogNiAqIDMxICsgKGoubW9udGggLSA3KSAqIDMwKSArIGouZGF5O1xuICB9XG5cbiAgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldERheSgpID09IDYgPyAxIDogZGF0ZS5nZXREYXkoKSArIDI7XG4gIH1cblxuICB3ZWVrT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIC8vVE9ETyA6IGFwcGx5IGphbGFsaVxuICAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IEFYRGF0ZVRpbWUoZGF0ZSkuc3RhcnRPZigneWVhcicpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoXG4gICAgICAoKGRhdGUuZ2V0VGltZSgpIC0gZmlyc3REYXkuZGF0ZS5nZXRUaW1lKCkpIC8gODY0MDAwMDAgKyBmaXJzdERheS5kYXRlLmdldERheSgpICsgMSkgLyA3XG4gICAgKTtcbiAgfVxuXG4gIHllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9KYWxhbGkoZGF0ZSkueWVhcjtcbiAgfVxuXG4gIG1vbnRoT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvSmFsYWxpKGRhdGUpLm1vbnRoO1xuICB9XG5cbiAgYWRkKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCBhbW91bnQ6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xuICAgIGxldCB2YWx1ZSA9IGRhdGUudmFsdWVPZigpO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgdmFsdWUgKz0gMTAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICB2YWx1ZSArPSA2MDAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgdmFsdWUgKz0gMzYwMDAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgdiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgbGV0IGpkID0gdGhpcy5kYXlPZk1vbnRoKGRhdGUpO1xuICAgICAgICBsZXQgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBsZXQgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IG5tID0gam0gKyBhbW91bnQ7XG4gICAgICAgIGNvbnN0IG55ID0gbm0gJSAxMiA/IE1hdGguZmxvb3Iobm0gLyAxMikgOiAwO1xuICAgICAgICBqeSArPSBueTtcbiAgICAgICAgam0gPSBubSAtIG55ICogMTI7XG4gICAgICAgIGNvbnN0IHZ2ID0gdGhpcy50b0dyZWdvcmlhbihqeSwgam0sIGpkKTtcbiAgICAgICAgdi5zZXRGdWxsWWVhcih2di5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgdi5zZXRNb250aCh2di5nZXRNb250aCgpKTtcbiAgICAgICAgdi5zZXREYXRlKHZ2LmdldERhdGUoKSk7XG4gICAgICAgIHZhbHVlID0gdi52YWx1ZU9mKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHZhbHVlICs9IDcgKiA4NjQwMDAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICAvLyBjb25zdCB2ID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAvLyB2LnNldEZ1bGxZZWFyKHYuZ2V0RnVsbFllYXIoKSArIGFtb3VudCk7XG4gICAgICAgIC8vIHZhbHVlID0gdi52YWx1ZU9mKCk7XG4gICAgICAgIC8vIGJyZWFrXG4gICAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGxldCBqZCA9IHRoaXMuZGF5T2ZNb250aChkYXRlKTtcbiAgICAgICAgbGV0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcbiAgICAgICAgbGV0IGp5ID0gdGhpcy55ZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCB2diA9IHRoaXMudG9HcmVnb3JpYW4oankgKyBhbW91bnQsIGptLCBqZCk7XG4gICAgICAgIHYuc2V0RnVsbFllYXIodnYuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHYuc2V0TW9udGgodnYuZ2V0TW9udGgoKSk7XG4gICAgICAgIHYuc2V0RGF0ZSh2di5nZXREYXRlKCkpO1xuICAgICAgICB2YWx1ZSA9IHYudmFsdWVPZigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YWx1ZSArPSA4NjQwMDAwMCAqIGFtb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKG5ldyBEYXRlKHZhbHVlKSwgdGhpcy5uYW1lKCkpO1xuICB9XG5cbiAgc2V0KGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgY29uc3QgakRhdGUgPSB0aGlzLnRvSmFsYWxpKGNsb25lKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgdmFsdWUsIGNsb25lLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCB2YWx1ZSwgY2xvbmUuZ2V0U2Vjb25kcygpLCBjbG9uZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKHZhbHVlLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgY2xvbmUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oakRhdGUueWVhciwgakRhdGUubW9udGgsIHZhbHVlKTtcbiAgICAgICAgY2xvbmUuc2V0RGF0ZShnRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgY29uc3QgZ0RhdGUyID0gdGhpcy50b0dyZWdvcmlhbihqRGF0ZS55ZWFyLCB2YWx1ZSwgakRhdGUuZGF5KTtcbiAgICAgICAgY2xvbmUuc2V0TW9udGgoZ0RhdGUyLmdldE1vbnRoKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjb25zdCBnRGF0ZTMgPSB0aGlzLnRvR3JlZ29yaWFuKHZhbHVlLCBqRGF0ZS5tb250aCwgakRhdGUuZGF5KTtcbiAgICAgICAgY2xvbmUuc2V0RnVsbFllYXIoZ0RhdGUzLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gIH1cblxuICBzdGFydE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKVxuICAgICAgICAgIC5hZGQoJ2RheScsIC10aGlzLmRheU9mV2VlayhjbG9uZSkgKyAxKVxuICAgICAgICAgIC5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3Qgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgZ0RhdGUgPSB0aGlzLnRvR3JlZ29yaWFuKGp5LCAxLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCA5OTkpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgNTksIDk5OSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKGRhdGUsICd3ZWVrJykuYWRkKCdkYXknLCA2KS5lbmRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgamQgPSB0aGlzLm1vbnRoTGVuZ3RoKGp5LCBqbSk7XG4gICAgICAgIGNvbnN0IGdEYXRlID0gdGhpcy50b0dyZWdvcmlhbihqeSwgam0sIGpkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuZW5kT2YoJ2RheScpO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIGxldCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgZ0RhdGUgPSB0aGlzLnRvR3JlZ29yaWFuKGp5LCAxMiwgdGhpcy5tb250aExlbmd0aChqeSwgMTIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuZW5kT2YoJ2RheScpO1xuICAgIH1cbiAgfVxuXG4gIHRvSmFsYWxpKGRhdGU6IERhdGUpOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gICAgY29uc3QgZ3kgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZ20gPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgIGNvbnN0IGdkID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgciA9IHRoaXMuZDJqKHRoaXMuZzJkKGd5LCBnbSwgZ2QpKTtcbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogci5qeSxcbiAgICAgIG1vbnRoOiByLmptLFxuICAgICAgZGF5OiByLmpkLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgICAgQ29udmVydHMgYSBKYWxhYWxpIGRhdGUgdG8gR3JlZ29yaWFuLlxuICAgICovXG4gIHRvR3JlZ29yaWFuKGp5LCBqbSwgamQpIHtcbiAgICBjb25zdCBnID0gdGhpcy5kMmcodGhpcy5qMmQoanksIGptLCBqZCkpO1xuICAgIHJldHVybiBuZXcgRGF0ZShnLmd5LCBnLmdtIC0gMSwgZy5nZCk7XG4gIH1cblxuICAvKlxuICAgICAgQ2hlY2tzIHdoZXRoZXIgYSBKYWxhYWxpIGRhdGUgaXMgdmFsaWQgb3Igbm90LlxuICAgICovXG4gIGlzVmFsaWQoanksIGptLCBqZCkge1xuICAgIHJldHVybiAoXG4gICAgICBqeSA+PSAtNjEgJiYgankgPD0gMzE3NyAmJiBqbSA+PSAxICYmIGptIDw9IDEyICYmIGpkID49IDEgJiYgamQgPD0gdGhpcy5tb250aExlbmd0aChqeSwgam0pXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgICBJcyB0aGlzIGEgbGVhcCB5ZWFyIG9yIG5vdD9cbiAgICAqL1xuICBpc0xlYXBZZWFyKGp5KSB7XG4gICAgcmV0dXJuIHRoaXMuamFsQ2FsKGp5KS5sZWFwID09PSAwO1xuICB9XG5cbiAgLypcbiAgICAgIE51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGggaW4gYSBKYWxhYWxpIHllYXIuXG4gICAgKi9cbiAgbW9udGhMZW5ndGgoanksIGptKSB7XG4gICAgaWYgKGptIDw9IDYpIHJldHVybiAzMTtcbiAgICBpZiAoam0gPD0gMTEpIHJldHVybiAzMDtcbiAgICBpZiAodGhpcy5pc0xlYXBZZWFyKGp5KSkgcmV0dXJuIDMwO1xuICAgIHJldHVybiAyOTtcbiAgfVxuXG4gIHByaXZhdGUgamFsQ2FsKGp5KSB7XG4gICAgLy8gSmFsYWFsaSB5ZWFycyBzdGFydGluZyB0aGUgMzMteWVhciBydWxlLlxuICAgIGxldCBicmVha3MgPSBbXG4gICAgICAgIC02MSwgOSwgMzgsIDE5OSwgNDI2LCA2ODYsIDc1NiwgODE4LCAxMTExLCAxMTgxLCAxMjEwLCAxNjM1LCAyMDYwLCAyMDk3LCAyMTkyLCAyMjYyLCAyMzI0LFxuICAgICAgICAyMzk0LCAyNDU2LCAzMTc4LFxuICAgICAgXSxcbiAgICAgIGJsID0gYnJlYWtzLmxlbmd0aCxcbiAgICAgIGd5ID0gankgKyA2MjEsXG4gICAgICBsZWFwSiA9IC0xNCxcbiAgICAgIGpwID0gYnJlYWtzWzBdLFxuICAgICAgam0sXG4gICAgICBqdW1wLFxuICAgICAgbGVhcCxcbiAgICAgIGxlYXBHLFxuICAgICAgbWFyY2gsXG4gICAgICBuLFxuICAgICAgaTtcblxuICAgIGlmIChqeSA8IGpwIHx8IGp5ID49IGJyZWFrc1tibCAtIDFdKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSmFsYWFsaSB5ZWFyICcgKyBqeSk7XG5cbiAgICAvLyBGaW5kIHRoZSBsaW1pdGluZyB5ZWFycyBmb3IgdGhlIEphbGFhbGkgeWVhciBqeS5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYmw7IGkgKz0gMSkge1xuICAgICAgam0gPSBicmVha3NbaV07XG4gICAgICBqdW1wID0gam0gLSBqcDtcbiAgICAgIGlmIChqeSA8IGptKSBicmVhaztcbiAgICAgIGxlYXBKID0gbGVhcEogKyB0aGlzLmRpdihqdW1wLCAzMykgKiA4ICsgdGhpcy5kaXYodGhpcy5tb2QoanVtcCwgMzMpLCA0KTtcbiAgICAgIGpwID0gam07XG4gICAgfVxuICAgIG4gPSBqeSAtIGpwO1xuXG4gICAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGxlYXAgeWVhcnMgZnJvbSBBRCA2MjEgdG8gdGhlIGJlZ2lubmluZ1xuICAgIC8vIG9mIHRoZSBjdXJyZW50IEphbGFhbGkgeWVhciBpbiB0aGUgUGVyc2lhbiBjYWxlbmRhci5cbiAgICBsZWFwSiA9IGxlYXBKICsgdGhpcy5kaXYobiwgMzMpICogOCArIHRoaXMuZGl2KHRoaXMubW9kKG4sIDMzKSArIDMsIDQpO1xuICAgIGlmICh0aGlzLm1vZChqdW1wLCAzMykgPT09IDQgJiYganVtcCAtIG4gPT09IDQpIGxlYXBKICs9IDE7XG5cbiAgICAvLyBBbmQgdGhlIHNhbWUgaW4gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciAodW50aWwgdGhlIHllYXIgZ3kpLlxuICAgIGxlYXBHID0gdGhpcy5kaXYoZ3ksIDQpIC0gdGhpcy5kaXYoKHRoaXMuZGl2KGd5LCAxMDApICsgMSkgKiAzLCA0KSAtIDE1MDtcblxuICAgIC8vIERldGVybWluZSB0aGUgR3JlZ29yaWFuIGRhdGUgb2YgRmFydmFyZGluIHRoZSAxc3QuXG4gICAgbWFyY2ggPSAyMCArIGxlYXBKIC0gbGVhcEc7XG5cbiAgICAvLyBGaW5kIGhvdyBtYW55IHllYXJzIGhhdmUgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGxlYXAgeWVhci5cbiAgICBpZiAoanVtcCAtIG4gPCA2KSBuID0gbiAtIGp1bXAgKyB0aGlzLmRpdihqdW1wICsgNCwgMzMpICogMzM7XG4gICAgbGVhcCA9IHRoaXMubW9kKHRoaXMubW9kKG4gKyAxLCAzMykgLSAxLCA0KTtcbiAgICBpZiAobGVhcCA9PT0gLTEpIHtcbiAgICAgIGxlYXAgPSA0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZWFwOiBsZWFwLFxuICAgICAgZ3k6IGd5LFxuICAgICAgbWFyY2g6IG1hcmNoLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgICAgQ29udmVydHMgYSBkYXRlIG9mIHRoZSBKYWxhYWxpIGNhbGVuZGFyIHRvIHRoZSBKdWxpYW4gRGF5IG51bWJlci5cbiAgICAgIEBwYXJhbSBqeSBKYWxhYWxpIHllYXIgKDEgdG8gMzEwMClcbiAgICAgIEBwYXJhbSBqbSBKYWxhYWxpIG1vbnRoICgxIHRvIDEyKVxuICAgICAgQHBhcmFtIGpkIEphbGFhbGkgZGF5ICgxIHRvIDI5LzMxKVxuICAgICAgQHJldHVybiBKdWxpYW4gRGF5IG51bWJlclxuICAgICovXG4gIHByaXZhdGUgajJkKGp5LCBqbSwgamQpIHtcbiAgICBsZXQgciA9IHRoaXMuamFsQ2FsKGp5KTtcbiAgICByZXR1cm4gdGhpcy5nMmQoci5neSwgMywgci5tYXJjaCkgKyAoam0gLSAxKSAqIDMxIC0gdGhpcy5kaXYoam0sIDcpICogKGptIC0gNykgKyBqZCAtIDE7XG4gIH1cblxuICAvKlxuICAgICAgQ29udmVydHMgdGhlIEp1bGlhbiBEYXkgbnVtYmVyIHRvIGEgZGF0ZSBpbiB0aGUgSmFsYWFsaSBjYWxlbmRhci5cbiAgICAgIEBwYXJhbSBqZG4gSnVsaWFuIERheSBudW1iZXJcbiAgICAgIEByZXR1cm5cbiAgICAgICAgank6IEphbGFhbGkgeWVhciAoMSB0byAzMTAwKVxuICAgICAgICBqbTogSmFsYWFsaSBtb250aCAoMSB0byAxMilcbiAgICAgICAgamQ6IEphbGFhbGkgZGF5ICgxIHRvIDI5LzMxKVxuICAgICovXG4gIHByaXZhdGUgZDJqKGpkbikge1xuICAgIGxldCBneSA9IHRoaXMuZDJnKGpkbikuZ3ksIC8vIENhbGN1bGF0ZSBHcmVnb3JpYW4geWVhciAoZ3kpLlxuICAgICAgankgPSBneSAtIDYyMSxcbiAgICAgIHIgPSB0aGlzLmphbENhbChqeSksXG4gICAgICBqZG4xZiA9IHRoaXMuZzJkKGd5LCAzLCByLm1hcmNoKSxcbiAgICAgIGpkLFxuICAgICAgam0sXG4gICAgICBrO1xuXG4gICAgLy8gRmluZCBudW1iZXIgb2YgZGF5cyB0aGF0IHBhc3NlZCBzaW5jZSAxIEZhcnZhcmRpbi5cbiAgICBrID0gamRuIC0gamRuMWY7XG4gICAgaWYgKGsgPj0gMCkge1xuICAgICAgaWYgKGsgPD0gMTg1KSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCA2IG1vbnRocy5cbiAgICAgICAgam0gPSAxICsgdGhpcy5kaXYoaywgMzEpO1xuICAgICAgICBqZCA9IHRoaXMubW9kKGssIDMxKSArIDE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgank6IGp5LFxuICAgICAgICAgIGptOiBqbSxcbiAgICAgICAgICBqZDogamQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgcmVtYWluaW5nIG1vbnRocy5cbiAgICAgICAgayAtPSAxODY7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFByZXZpb3VzIEphbGFhbGkgeWVhci5cbiAgICAgIGp5IC09IDE7XG4gICAgICBrICs9IDE3OTtcbiAgICAgIGlmIChyLmxlYXAgPT09IDEpIGsgKz0gMTtcbiAgICB9XG4gICAgam0gPSA3ICsgdGhpcy5kaXYoaywgMzApO1xuICAgIGpkID0gdGhpcy5tb2QoaywgMzApICsgMTtcbiAgICByZXR1cm4ge1xuICAgICAgank6IGp5LFxuICAgICAgam06IGptLFxuICAgICAgamQ6IGpkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGcyZChneSwgZ20sIGdkKSB7XG4gICAgbGV0IGQgPVxuICAgICAgdGhpcy5kaXYoKGd5ICsgdGhpcy5kaXYoZ20gLSA4LCA2KSArIDEwMDEwMCkgKiAxNDYxLCA0KSArXG4gICAgICB0aGlzLmRpdigxNTMgKiB0aGlzLm1vZChnbSArIDksIDEyKSArIDIsIDUpICtcbiAgICAgIGdkIC1cbiAgICAgIDM0ODQwNDA4O1xuICAgIGQgPSBkIC0gdGhpcy5kaXYodGhpcy5kaXYoZ3kgKyAxMDAxMDAgKyB0aGlzLmRpdihnbSAtIDgsIDYpLCAxMDApICogMywgNCkgKyA3NTI7XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBwcml2YXRlIGQyZyhqZG4pIHtcbiAgICBsZXQgaiwgaSwgZ2QsIGdtLCBneTtcbiAgICBqID0gNCAqIGpkbiArIDEzOTM2MTYzMTtcbiAgICBqID0gaiArIHRoaXMuZGl2KHRoaXMuZGl2KDQgKiBqZG4gKyAxODMxODc3MjAsIDE0NjA5NykgKiAzLCA0KSAqIDQgLSAzOTA4O1xuICAgIGkgPSB0aGlzLmRpdih0aGlzLm1vZChqLCAxNDYxKSwgNCkgKiA1ICsgMzA4O1xuICAgIGdkID0gdGhpcy5kaXYodGhpcy5tb2QoaSwgMTUzKSwgNSkgKyAxO1xuICAgIGdtID0gdGhpcy5tb2QodGhpcy5kaXYoaSwgMTUzKSwgMTIpICsgMTtcbiAgICBneSA9IHRoaXMuZGl2KGosIDE0NjEpIC0gMTAwMTAwICsgdGhpcy5kaXYoOCAtIGdtLCA2KTtcbiAgICByZXR1cm4ge1xuICAgICAgZ3k6IGd5LFxuICAgICAgZ206IGdtLFxuICAgICAgZ2Q6IGdkLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgICAgVXRpbGl0eSBoZWxwZXIgZnVuY3Rpb25zLlxuICAgICovXG4gIHByaXZhdGUgZGl2KGEsIGIpIHtcbiAgICByZXR1cm4gYSAvIGI7XG4gIH1cblxuICBwcml2YXRlIG1vZChhLCBiKSB7XG4gICAgcmV0dXJuIGEgLSAoYSAvIGIpICogYjtcbiAgfVxufVxuIl19
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFsYWxpLmNhbGVuZGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGVUaW1lL3NyYy9saWIvamFsYWxpLmNhbGVuZGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFFakYsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDRSxlQUFVLEdBQUcsb0VBQW9FLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdGLG9CQUFlLEdBQUcsb0VBQW9FLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxHLGFBQVEsR0FBRyxtREFBbUQsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUUsa0JBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDOztRQUVBO1FBQ0EsV0FBTSxHQUFHO1lBQ1AsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDL0YsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO0lBNmNKLENBQUM7SUEzY0MsTUFBTSxDQUFDLEtBQWtCO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksVUFBVSxDQUNuQixJQUFJLElBQUksQ0FDTixDQUFDLENBQUMsV0FBVyxFQUFFLEVBQ2YsQ0FBQyxDQUFDLFFB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QU8sSUFBSSxJQUFJLENBQ2IscUJBQXFCLENBQUMsV0FBVyxFQUFFLEVBQ25DLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDcEMscUJBQXFCLENBQUMsT0FBTyxFQUFFLEVBQy9CLENBQUMsSUFBSSxDQUFDLEVBQ04sQ0FBQyxJQUFJLENBQUMsRUFDTixDQUFDLElBQUksQ0FBQyxFQUNOLEVBQUUsSUFBSSxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7TUFFRTtJQUVNLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU8sR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDYWxlbmRhciwgQVhEYXRlVGltZSwgQVhEYXRlVmFsdWUsIFRpbWVVbml0IH0gZnJvbSAnLi9kYXRldGltZS5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBKYWxhbGlDYWxlbmRhciBpbXBsZW1lbnRzIEFYQ2FsZW5kYXIge1xuICBtb250aE5hbWVzID0gJ9mB2LHZiNix2K/bjNmGX9in2LHYr9uM2KjZh9i02Kpf2K7Ysdiv2KfYr1/YqtuM2LFf2YXYsdiv2KfYr1/YtNmH2LHbjNmI2LFf2YXZh9ixX9ii2KjYp9mGX9ii2LDYsV/Yr9uMX9io2YfZhdmGX9in2LPZgdmG2K8nLnNwbGl0KCdfJyk7XG5cbiAgbW9udGhTaG9ydE5hbWVzID0gJ9mB2LHZiNix2K/bjNmGX9in2LHYr9uM2KjZh9i02Kpf2K7Ysdiv2KfYr1/YqtuM2LFf2YXYsdiv2KfYr1/YtNmH2LHbjNmI2LFf2YXZh9ixX9ii2KjYp9mGX9ii2LDYsV/Yr9uMX9io2YfZhdmGX9in2LPZgdmG2K8nLnNwbGl0KCdfJyk7XG5cbiAgZGF5TmFtZXMgPSAn2LTZhtio2Ydf24zaqdi02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHINi02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisINi02YbYqNmHX9is2YXYudmHJy5zcGxpdCgnXycpO1xuXG4gIGRheVNob3J0TmFtZXMgPSAn2LRf24xf2K9f2LNf2oZf2b5f2KwnLnNwbGl0KCdfJyk7XG5cbiAgLypcbiAgSmFsYWFsaSB5ZWFycyBzdGFydGluZyB0aGUgMzMteWVhciBydWxlLlxuKi9cbiAgYnJlYWtzID0gW1xuICAgIC02MSwgOSwgMzgsIDE5OSwgNDI2LCA2ODYsIDc1NiwgODE4LCAxMTExLCAxMTgxLCAxMjEwLCAxNjM1LCAyMDYwLCAyMDk3LCAyMTkyLCAyMjYyLCAyMzI0LCAyMzk0LFxuICAgIDI0NTYsIDMxNzgsXG4gIF07XG5cbiAgY3JlYXRlKHZhbHVlOiBBWERhdGVWYWx1ZSk6IEFYRGF0ZVRpbWUge1xuICAgIGNvbnN0IGEgPSB0aGlzLnRvR3JlZ29yaWFuKHZhbHVlLnllYXIsIHZhbHVlLm1vbnRoLCB2YWx1ZS5kYXRlKTtcbiAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgYS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBhLmdldE1vbnRoKCksXG4gICAgICAgIGEuZ2V0RGF0ZSgpLFxuICAgICAgICB2YWx1ZS5ob3VycyB8fCAwLFxuICAgICAgICB2YWx1ZS5taW51dGVzIHx8IDAsXG4gICAgICAgIHZhbHVlLnNlY29uZHMgfHwgMCxcbiAgICAgICAgdmFsdWUubXMgfHwgMCxcbiAgICAgICksXG4gICAgICB0aGlzLm5hbWUoKSxcbiAgICApO1xuICB9XG5cbiAgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnamFsYWxpJztcbiAgfVxuXG4gIGRheU9mTW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9KYWxhYWxpKGRhdGUpLmRheTtcbiAgfVxuXG4gIGRheU9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICBjb25zdCBqID0gdGhpcy50b0phbGFhbGkoZGF0ZSk7XG4gICAgcmV0dXJuIChqLm1vbnRoIDw9IDYgPyAoai5tb250aCAtIDEpICogMzEgOiA2ICogMzEgKyAoai5tb250aCAtIDcpICogMzApICsgai5kYXk7XG4gIH1cblxuICBkYXlPZldlZWsoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF5KCkgPT0gNiA/IDEgOiBkYXRlLmdldERheSgpICsgMjtcbiAgfVxuXG4gIHdlZWtPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgLy9UT0RPIDogYXBwbHkgamFsYWxpXG4gICAgY29uc3QgZmlyc3REYXkgPSBuZXcgQVhEYXRlVGltZShkYXRlKS5zdGFydE9mKCd5ZWFyJyk7XG4gICAgcmV0dXJuIE1hdGguY2VpbChcbiAgICAgICgoZGF0ZS5nZXRUaW1lKCkgLSBmaXJzdERheS5kYXRlLmdldFRpbWUoKSkgLyA4NjQwMDAwMCArIGZpcnN0RGF5LmRhdGUuZ2V0RGF5KCkgKyAxKSAvIDcsXG4gICAgKTtcbiAgfVxuXG4gIHllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9KYWxhYWxpKGRhdGUpLnllYXI7XG4gIH1cblxuICBtb250aE9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b0phbGFhbGkoZGF0ZSkubW9udGg7XG4gIH1cblxuICBhZGQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgbGV0IHZhbHVlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICB2YWx1ZSArPSAxMDAwICogYW1vdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIHZhbHVlICs9IDYwMDAwICogYW1vdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICB2YWx1ZSArPSAzNjAwMDAwICogYW1vdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCB2ID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICBsZXQgamQgPSB0aGlzLmRheU9mTW9udGgoZGF0ZSk7XG4gICAgICAgIGxldCBqbSA9IHRoaXMubW9udGhPZlllYXIoZGF0ZSk7XG4gICAgICAgIGxldCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3Qgbm0gPSBqbSArIGFtb3VudDtcbiAgICAgICAgY29uc3QgbnkgPSBubSAlIDEyID8gTWF0aC5mbG9vcihubSAvIDEyKSA6IDA7XG4gICAgICAgIGp5ICs9IG55O1xuICAgICAgICBqbSA9IG5tIC0gbnkgKiAxMjtcbiAgICAgICAgY29uc3QgdnYgPSB0aGlzLnRvR3JlZ29yaWFuKGp5LCBqbSwgamQpO1xuICAgICAgICB2LnNldEZ1bGxZZWFyKHZ2LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB2LnNldE1vbnRoKHZ2LmdldE1vbnRoKCkpO1xuICAgICAgICB2LnNldERhdGUodnYuZ2V0RGF0ZSgpKTtcbiAgICAgICAgdmFsdWUgPSB2LnZhbHVlT2YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgdmFsdWUgKz0gNyAqIDg2NDAwMDAwICogYW1vdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgIC8vIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIC8vIHYuc2V0RnVsbFllYXIodi5nZXRGdWxsWWVhcigpICsgYW1vdW50KTtcbiAgICAgICAgLy8gdmFsdWUgPSB2LnZhbHVlT2YoKTtcbiAgICAgICAgLy8gYnJlYWtcbiAgICAgICAgY29uc3QgdiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgbGV0IGpkID0gdGhpcy5kYXlPZk1vbnRoKGRhdGUpO1xuICAgICAgICBsZXQgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBsZXQgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IHZ2ID0gdGhpcy50b0dyZWdvcmlhbihqeSArIGFtb3VudCwgam0sIGpkKTtcbiAgICAgICAgdi5zZXRGdWxsWWVhcih2di5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgdi5zZXRNb250aCh2di5nZXRNb250aCgpKTtcbiAgICAgICAgdi5zZXREYXRlKHZ2LmdldERhdGUoKSk7XG4gICAgICAgIHZhbHVlID0gdi52YWx1ZU9mKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhbHVlICs9IDg2NDAwMDAwICogYW1vdW50O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUodmFsdWUpLCB0aGlzLm5hbWUoKSk7XG4gIH1cblxuICBzZXQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIHZhbHVlOiBudW1iZXIpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBjb25zdCBqRGF0ZSA9IHRoaXMudG9KYWxhYWxpKGNsb25lKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgdmFsdWUsIGNsb25lLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCB2YWx1ZSwgY2xvbmUuZ2V0U2Vjb25kcygpLCBjbG9uZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKHZhbHVlLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgY2xvbmUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oakRhdGUueWVhciwgakRhdGUubW9udGgsIHZhbHVlKTtcbiAgICAgICAgY2xvbmUuc2V0RGF0ZShnRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgY29uc3QgZ0RhdGUyID0gdGhpcy50b0dyZWdvcmlhbihqRGF0ZS55ZWFyLCB2YWx1ZSwgakRhdGUuZGF5KTtcbiAgICAgICAgY2xvbmUuc2V0TW9udGgoZ0RhdGUyLmdldE1vbnRoKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjb25zdCBnRGF0ZTMgPSB0aGlzLnRvR3JlZ29yaWFuKHZhbHVlLCBqRGF0ZS5tb250aCwgakRhdGUuZGF5KTtcbiAgICAgICAgY2xvbmUuc2V0RnVsbFllYXIoZ0RhdGUzLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gIH1cblxuICBzdGFydE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKVxuICAgICAgICAgIC5hZGQoJ2RheScsIC10aGlzLmRheU9mV2VlayhjbG9uZSkgKyAxKVxuICAgICAgICAgIC5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3Qgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgZ0RhdGUgPSB0aGlzLnRvR3JlZ29yaWFuKGp5LCAxLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCA5OTkpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgNTksIDk5OSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKGRhdGUsICd3ZWVrJykuYWRkKCdkYXknLCA2KS5lbmRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgamQgPSB0aGlzLmphbGFhbGlNb250aExlbmd0aChqeSwgam0pO1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCBqZCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShnRGF0ZSwgdGhpcy5uYW1lKCkpLmVuZE9mKCdkYXknKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBsZXQgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGdEYXRlID0gdGhpcy50b0dyZWdvcmlhbihqeSwgMTIsIHRoaXMuamFsYWFsaU1vbnRoTGVuZ3RoKGp5LCAxMikpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoZ0RhdGUsIHRoaXMubmFtZSgpKS5lbmRPZignZGF5Jyk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgQ29udmVydHMgYSBHcmVnb3JpYW4gZGF0ZSB0byBKYWxhYWxpLlxuKi9cbiAgdG9KYWxhYWxpKGRhdGU6IERhdGUpOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gICAgbGV0IGdkID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgbGV0IGdtID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICBsZXQgZ3kgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgciA9IHRoaXMuZDJqKHRoaXMuZzJkKGd5LCBnbSwgZ2QpKTtcbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogci5qeSxcbiAgICAgIG1vbnRoOiByLmptLFxuICAgICAgZGF5OiByLmpkLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgIENvbnZlcnRzIGEgSmFsYWFsaSBkYXRlIHRvIEdyZWdvcmlhbi5cbiAgKi9cbiAgdG9HcmVnb3JpYW4oanksIGptLCBqZCk6IERhdGUge1xuICAgIGNvbnN0IGcgPSB0aGlzLmQyZyh0aGlzLmoyZChqeSwgam0sIGpkKSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGcuZ3ksIGcuZ20gLSAxLCBnLmdkKTtcbiAgfVxuXG4gIC8qXG4gICAgQ2hlY2tzIHdoZXRoZXIgYSBKYWxhYWxpIGRhdGUgaXMgdmFsaWQgb3Igbm90LlxuICAqL1xuICBpc1ZhbGlkSmFsYWFsaURhdGUoanksIGptLCBqZCkge1xuICAgIHJldHVybiAoXG4gICAgICBqeSA+PSAtNjEgJiZcbiAgICAgIGp5IDw9IDMxNzcgJiZcbiAgICAgIGptID49IDEgJiZcbiAgICAgIGptIDw9IDEyICYmXG4gICAgICBqZCA+PSAxICYmXG4gICAgICBqZCA8PSB0aGlzLmphbGFhbGlNb250aExlbmd0aChqeSwgam0pXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgSXMgdGhpcyBhIGxlYXAgeWVhciBvciBub3Q/XG4gICovXG4gIGlzTGVhcEphbGFhbGlZZWFyKGp5KSB7XG4gICAgcmV0dXJuIHRoaXMuamFsQ2FsTGVhcChqeSkgPT09IDA7XG4gIH1cblxuICAvKlxuICAgIE51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGggaW4gYSBKYWxhYWxpIHllYXIuXG4gICovXG4gIGphbGFhbGlNb250aExlbmd0aChqeSwgam0pIHtcbiAgICBpZiAoam0gPD0gNikgcmV0dXJuIDMxO1xuICAgIGlmIChqbSA8PSAxMSkgcmV0dXJuIDMwO1xuICAgIGlmICh0aGlzLmlzTGVhcEphbGFhbGlZZWFyKGp5KSkgcmV0dXJuIDMwO1xuICAgIHJldHVybiAyOTtcbiAgfVxuXG4gIC8qXG4gICAgICBUaGlzIGRldGVybWluZXMgaWYgdGhlIEphbGFhbGkgKFBlcnNpYW4pIHllYXIgaXNcbiAgICAgIGxlYXAgKDM2Ni1kYXkgbG9uZykgb3IgaXMgdGhlIGNvbW1vbiB5ZWFyICgzNjUgZGF5cylcbiAgXG4gICAgICBAcGFyYW0gankgSmFsYWFsaSBjYWxlbmRhciB5ZWFyICgtNjEgdG8gMzE3NylcbiAgICAgIEByZXR1cm5zIG51bWJlciBvZiB5ZWFycyBzaW5jZSB0aGUgbGFzdCBsZWFwIHllYXIgKDAgdG8gNClcbiAgICovXG4gIHByaXZhdGUgamFsQ2FsTGVhcChqeTogbnVtYmVyKSB7XG4gICAgbGV0IGJsID0gdGhpcy5icmVha3MubGVuZ3RoLFxuICAgICAganAgPSB0aGlzLmJyZWFrc1swXSxcbiAgICAgIGptLFxuICAgICAganVtcCxcbiAgICAgIGxlYXAsXG4gICAgICBuLFxuICAgICAgaTtcblxuICAgIGlmIChqeSA8IGpwIHx8IGp5ID49IHRoaXMuYnJlYWtzW2JsIC0gMV0pIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBKYWxhYWxpIHllYXIgJyArIGp5KTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBibDsgaSArPSAxKSB7XG4gICAgICBqbSA9IHRoaXMuYnJlYWtzW2ldO1xuICAgICAganVtcCA9IGptIC0ganA7XG4gICAgICBpZiAoankgPCBqbSkgYnJlYWs7XG4gICAgICBqcCA9IGptO1xuICAgIH1cbiAgICBuID0gankgLSBqcDtcblxuICAgIGlmIChqdW1wIC0gbiA8IDYpIG4gPSBuIC0ganVtcCArIHRoaXMuZGl2KGp1bXAgKyA0LCAzMykgKiAzMztcbiAgICBsZWFwID0gdGhpcy5tb2QodGhpcy5tb2QobiArIDEsIDMzKSAtIDEsIDQpO1xuICAgIGlmIChsZWFwID09PSAtMSkge1xuICAgICAgbGVhcCA9IDQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYXA7XG4gIH1cblxuICBwcml2YXRlIGphbENhbChqeTogbnVtYmVyLCB3aXRob3V0TGVhcDogYm9vbGVhbikge1xuICAgIGxldCBibCA9IHRoaXMuYnJlYWtzLmxlbmd0aCxcbiAgICAgIGd5ID0gankgKyA2MjEsXG4gICAgICBsZWFwSiA9IC0xNCxcbiAgICAgIGpwID0gdGhpcy5icmVha3NbMF0sXG4gICAgICBqbSxcbiAgICAgIGp1bXAsXG4gICAgICBsZWFwLFxuICAgICAgbGVhcEcsXG4gICAgICBtYXJjaCxcbiAgICAgIG4sXG4gICAgICBpO1xuXG4gICAgaWYgKGp5IDwganAgfHwgankgPj0gdGhpcy5icmVha3NbYmwgLSAxXSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEphbGFhbGkgeWVhciAnICsgankpO1xuXG4gICAgLy8gRmluZCB0aGUgbGltaXRpbmcgeWVhcnMgZm9yIHRoZSBKYWxhYWxpIHllYXIgankuXG4gICAgZm9yIChpID0gMTsgaSA8IGJsOyBpICs9IDEpIHtcbiAgICAgIGptID0gdGhpcy5icmVha3NbaV07XG4gICAgICBqdW1wID0gam0gLSBqcDtcbiAgICAgIGlmIChqeSA8IGptKSBicmVhaztcbiAgICAgIGxlYXBKID0gbGVhcEogKyB0aGlzLmRpdihqdW1wLCAzMykgKiA4ICsgdGhpcy5kaXYodGhpcy5tb2QoanVtcCwgMzMpLCA0KTtcbiAgICAgIGpwID0gam07XG4gICAgfVxuICAgIG4gPSBqeSAtIGpwO1xuXG4gICAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGxlYXAgeWVhcnMgZnJvbSBBRCA2MjEgdG8gdGhlIGJlZ2lubmluZ1xuICAgIC8vIG9mIHRoZSBjdXJyZW50IEphbGFhbGkgeWVhciBpbiB0aGUgUGVyc2lhbiBjYWxlbmRhci5cbiAgICBsZWFwSiA9IGxlYXBKICsgdGhpcy5kaXYobiwgMzMpICogOCArIHRoaXMuZGl2KHRoaXMubW9kKG4sIDMzKSArIDMsIDQpO1xuICAgIGlmICh0aGlzLm1vZChqdW1wLCAzMykgPT09IDQgJiYganVtcCAtIG4gPT09IDQpIGxlYXBKICs9IDE7XG5cbiAgICAvLyBBbmQgdGhlIHNhbWUgaW4gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciAodW50aWwgdGhlIHllYXIgZ3kpLlxuICAgIGxlYXBHID0gdGhpcy5kaXYoZ3ksIDQpIC0gdGhpcy5kaXYoKHRoaXMuZGl2KGd5LCAxMDApICsgMSkgKiAzLCA0KSAtIDE1MDtcblxuICAgIC8vIERldGVybWluZSB0aGUgR3JlZ29yaWFuIGRhdGUgb2YgRmFydmFyZGluIHRoZSAxc3QuXG4gICAgbWFyY2ggPSAyMCArIGxlYXBKIC0gbGVhcEc7XG5cbiAgICAvLyByZXR1cm4gd2l0aCBneSBhbmQgbWFyY2ggd2hlbiB3ZSBkb24ndCBuZWVkIGxlYXBcbiAgICBpZiAod2l0aG91dExlYXApIHJldHVybiB7IGd5OiBneSwgbWFyY2g6IG1hcmNoIH07XG5cbiAgICAvLyBGaW5kIGhvdyBtYW55IHllYXJzIGhhdmUgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGxlYXAgeWVhci5cbiAgICBpZiAoanVtcCAtIG4gPCA2KSBuID0gbiAtIGp1bXAgKyB0aGlzLmRpdihqdW1wICsgNCwgMzMpICogMzM7XG4gICAgbGVhcCA9IHRoaXMubW9kKHRoaXMubW9kKG4gKyAxLCAzMykgLSAxLCA0KTtcbiAgICBpZiAobGVhcCA9PT0gLTEpIHtcbiAgICAgIGxlYXAgPSA0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZWFwOiBsZWFwLFxuICAgICAgZ3k6IGd5LFxuICAgICAgbWFyY2g6IG1hcmNoLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGoyZChqeSwgam0sIGpkKTogbnVtYmVyIHtcbiAgICBsZXQgciA9IHRoaXMuamFsQ2FsKGp5LCB0cnVlKTtcbiAgICByZXR1cm4gdGhpcy5nMmQoci5neSwgMywgci5tYXJjaCkgKyAoam0gLSAxKSAqIDMxIC0gdGhpcy5kaXYoam0sIDcpICogKGptIC0gNykgKyBqZCAtIDE7XG4gIH1cblxuICBwcml2YXRlIGQyaihqZG46IG51bWJlcikge1xuICAgIGxldCBneSA9IHRoaXMuZDJnKGpkbikuZ3ksIC8vIENhbGN1bGF0ZSBHcmVnb3JpYW4geWVhciAoZ3kpLlxuICAgICAgankgPSBneSAtIDYyMSxcbiAgICAgIHIgPSB0aGlzLmphbENhbChqeSwgZmFsc2UpLFxuICAgICAgamRuMWYgPSB0aGlzLmcyZChneSwgMywgci5tYXJjaCksXG4gICAgICBqZCxcbiAgICAgIGptLFxuICAgICAgaztcblxuICAgIC8vIEZpbmQgbnVtYmVyIG9mIGRheXMgdGhhdCBwYXNzZWQgc2luY2UgMSBGYXJ2YXJkaW4uXG4gICAgayA9IGpkbiAtIGpkbjFmO1xuICAgIGlmIChrID49IDApIHtcbiAgICAgIGlmIChrIDw9IDE4NSkge1xuICAgICAgICAvLyBUaGUgZmlyc3QgNiBtb250aHMuXG4gICAgICAgIGptID0gMSArIHRoaXMuZGl2KGssIDMxKTtcbiAgICAgICAgamQgPSB0aGlzLm1vZChrLCAzMSkgKyAxO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGp5OiBqeSxcbiAgICAgICAgICBqbTogam0sXG4gICAgICAgICAgamQ6IGpkLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBtb250aHMuXG4gICAgICAgIGsgLT0gMTg2O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmV2aW91cyBKYWxhYWxpIHllYXIuXG4gICAgICBqeSAtPSAxO1xuICAgICAgayArPSAxNzk7XG4gICAgICBpZiAoci5sZWFwID09PSAxKSBrICs9IDE7XG4gICAgfVxuICAgIGptID0gNyArIHRoaXMuZGl2KGssIDMwKTtcbiAgICBqZCA9IHRoaXMubW9kKGssIDMwKSArIDE7XG4gICAgcmV0dXJuIHtcbiAgICAgIGp5OiBqeSxcbiAgICAgIGptOiBqbSxcbiAgICAgIGpkOiBqZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnMmQoZ3k6IG51bWJlciwgZ206IG51bWJlciwgZ2Q6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGQgPVxuICAgICAgdGhpcy5kaXYoKGd5ICsgdGhpcy5kaXYoZ20gLSA4LCA2KSArIDEwMDEwMCkgKiAxNDYxLCA0KSArXG4gICAgICB0aGlzLmRpdigxNTMgKiB0aGlzLm1vZChnbSArIDksIDEyKSArIDIsIDUpICtcbiAgICAgIGdkIC1cbiAgICAgIDM0ODQwNDA4O1xuICAgIGQgPSBkIC0gdGhpcy5kaXYodGhpcy5kaXYoZ3kgKyAxMDAxMDAgKyB0aGlzLmRpdihnbSAtIDgsIDYpLCAxMDApICogMywgNCkgKyA3NTI7XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBwcml2YXRlIGQyZyhqZG46IG51bWJlcikge1xuICAgIGxldCBqLCBpLCBnZCwgZ20sIGd5O1xuICAgIGogPSA0ICogamRuICsgMTM5MzYxNjMxO1xuICAgIGogPSBqICsgdGhpcy5kaXYodGhpcy5kaXYoNCAqIGpkbiArIDE4MzE4NzcyMCwgMTQ2MDk3KSAqIDMsIDQpICogNCAtIDM5MDg7XG4gICAgaSA9IHRoaXMuZGl2KHRoaXMubW9kKGosIDE0NjEpLCA0KSAqIDUgKyAzMDg7XG4gICAgZ2QgPSB0aGlzLmRpdih0aGlzLm1vZChpLCAxNTMpLCA1KSArIDE7XG4gICAgZ20gPSB0aGlzLm1vZCh0aGlzLmRpdihpLCAxNTMpLCAxMikgKyAxO1xuICAgIGd5ID0gdGhpcy5kaXYoaiwgMTQ2MSkgLSAxMDAxMDAgKyB0aGlzLmRpdig4IC0gZ20sIDYpO1xuICAgIHJldHVybiB7XG4gICAgICBneTogZ3ksXG4gICAgICBnbTogZ20sXG4gICAgICBnZDogZ2QsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgamFsYWFsaVdlZWsoank6IG51bWJlciwgam06IG51bWJlciwgamQ6IG51bWJlcik6IHsgc2F0dXJkYXk6IGFueTsgZnJpZGF5OiBhbnkgfSB7XG4gICAgbGV0IGRheU9mV2VlayA9IHRoaXMuamFsYWFsaVRvRGF0ZU9iamVjdChqeSwgam0sIGpkLCAwLCAwLCAwLCAwKS5nZXREYXkoKTtcblxuICAgIGxldCBzdGFydERheURpZmZlcmVuY2UgPSBkYXlPZldlZWsgPT0gNiA/IDAgOiAtKGRheU9mV2VlayArIDEpO1xuICAgIGxldCBlbmREYXlEaWZmZXJlbmNlID0gNiArIHN0YXJ0RGF5RGlmZmVyZW5jZTtcblxuICAgIHJldHVybiB7XG4gICAgICBzYXR1cmRheTogdGhpcy5kMmoodGhpcy5qMmQoanksIGptLCBqZCArIHN0YXJ0RGF5RGlmZmVyZW5jZSkpLFxuICAgICAgZnJpZGF5OiB0aGlzLmQyaih0aGlzLmoyZChqeSwgam0sIGpkICsgZW5kRGF5RGlmZmVyZW5jZSkpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGphbGFhbGlUb0RhdGVPYmplY3QoXG4gICAgank6IG51bWJlcixcbiAgICBqbTogbnVtYmVyLFxuICAgIGpkOiBudW1iZXIsXG4gICAgaDogbnVtYmVyID0gMCxcbiAgICBtOiBudW1iZXIgPSAwLFxuICAgIHM6IG51bWJlciA9IDAsXG4gICAgbXM6IG51bWJlciA9IDAsXG4gICkge1xuICAgIGxldCBncmVnb3JpYW5DYWxlbmRlckRhdGUgPSB0aGlzLnRvR3JlZ29yaWFuKGp5LCBqbSwgamQpO1xuXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxuICAgICAgZ3JlZ29yaWFuQ2FsZW5kZXJEYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBncmVnb3JpYW5DYWxlbmRlckRhdGUuZ2V0TW9udGgoKSAtIDEsXG4gICAgICBncmVnb3JpYW5DYWxlbmRlckRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgaCB8fCAwLFxuICAgICAgbSB8fCAwLFxuICAgICAgcyB8fCAwLFxuICAgICAgbXMgfHwgMCxcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICBVdGlsaXR5IGhlbHBlciBmdW5jdGlvbnMuXG4gICovXG5cbiAgcHJpdmF0ZSBkaXYoYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICByZXR1cm4gfn4oYSAvIGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb2QoYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYSAtIH5+KGEgLyBiKSAqIGI7XG4gIH1cbn1cbiJdfQ==
@@ -505,6 +505,13 @@ class JalaliCalendar {
505
505
  this.monthShortNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');
506
506
  this.dayNames = 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'.split('_');
507
507
  this.dayShortNames = 'ش_ی_د_س_چ_پ_ج'.split('_');
508
+ /*
509
+ Jalaali years starting the 33-year rule.
510
+ */
511
+ this.breaks = [
512
+ -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394,
513
+ 2456, 3178,
514
+ ];
508
515
  }
509
516
  create(value) {
510
517
  const a = this.toGregorian(value.year, value.month, value.date);
@@ -514,10 +521,10 @@ class JalaliCalendar {
514
521
  return 'jalali';
515
522
  }
516
523
  dayOfMonth(date) {
517
- return this.toJalali(date).day;
524
+ return this.toJalaali(date).day;
518
525
  }
519
526
  dayOfYear(date) {
520
- const j = this.toJalali(date);
527
+ const j = this.toJalaali(date);
521
528
  return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;
522
529
  }
523
530
  dayOfWeek(date) {
@@ -529,10 +536,10 @@ class JalaliCalendar {
529
536
  return Math.ceil(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);
530
537
  }
531
538
  year(date) {
532
- return this.toJalali(date).year;
539
+ return this.toJalaali(date).year;
533
540
  }
534
541
  monthOfYear(date) {
535
- return this.toJalali(date).month;
542
+ return this.toJalaali(date).month;
536
543
  }
537
544
  add(date, unit, amount) {
538
545
  let value = date.valueOf();
@@ -589,7 +596,7 @@ class JalaliCalendar {
589
596
  }
590
597
  set(date, unit, value) {
591
598
  const clone = new Date(date.valueOf());
592
- const jDate = this.toJalali(clone);
599
+ const jDate = this.toJalaali(clone);
593
600
  switch (unit) {
594
601
  case 'second':
595
602
  clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
@@ -673,20 +680,23 @@ class JalaliCalendar {
673
680
  case 'month': {
674
681
  const jy = this.year(date);
675
682
  const jm = this.monthOfYear(date);
676
- const jd = this.monthLength(jy, jm);
683
+ const jd = this.jalaaliMonthLength(jy, jm);
677
684
  const gDate = this.toGregorian(jy, jm, jd);
678
685
  return new AXDateTime(gDate, this.name()).endOf('day');
679
686
  }
680
687
  case 'year':
681
688
  let jy = this.year(date);
682
- const gDate = this.toGregorian(jy, 12, this.monthLength(jy, 12));
689
+ const gDate = this.toGregorian(jy, 12, this.jalaaliMonthLength(jy, 12));
683
690
  return new AXDateTime(gDate, this.name()).endOf('day');
684
691
  }
685
692
  }
686
- toJalali(date) {
687
- const gy = date.getFullYear();
688
- const gm = date.getMonth() + 1;
689
- const gd = date.getDate();
693
+ /*
694
+ Converts a Gregorian date to Jalaali.
695
+ */
696
+ toJalaali(date) {
697
+ let gd = date.getDate();
698
+ let gm = date.getMonth() + 1;
699
+ let gy = date.getFullYear();
690
700
  const r = this.d2j(this.g2d(gy, gm, gd));
691
701
  return {
692
702
  year: r.jy,
@@ -695,47 +705,75 @@ class JalaliCalendar {
695
705
  };
696
706
  }
697
707
  /*
698
- Converts a Jalaali date to Gregorian.
699
- */
708
+ Converts a Jalaali date to Gregorian.
709
+ */
700
710
  toGregorian(jy, jm, jd) {
701
711
  const g = this.d2g(this.j2d(jy, jm, jd));
702
712
  return new Date(g.gy, g.gm - 1, g.gd);
703
713
  }
704
714
  /*
705
- Checks whether a Jalaali date is valid or not.
706
- */
707
- isValid(jy, jm, jd) {
708
- return (jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.monthLength(jy, jm));
715
+ Checks whether a Jalaali date is valid or not.
716
+ */
717
+ isValidJalaaliDate(jy, jm, jd) {
718
+ return (jy >= -61 &&
719
+ jy <= 3177 &&
720
+ jm >= 1 &&
721
+ jm <= 12 &&
722
+ jd >= 1 &&
723
+ jd <= this.jalaaliMonthLength(jy, jm));
709
724
  }
710
725
  /*
711
- Is this a leap year or not?
712
- */
713
- isLeapYear(jy) {
714
- return this.jalCal(jy).leap === 0;
726
+ Is this a leap year or not?
727
+ */
728
+ isLeapJalaaliYear(jy) {
729
+ return this.jalCalLeap(jy) === 0;
715
730
  }
716
731
  /*
717
- Number of days in a given month in a Jalaali year.
718
- */
719
- monthLength(jy, jm) {
732
+ Number of days in a given month in a Jalaali year.
733
+ */
734
+ jalaaliMonthLength(jy, jm) {
720
735
  if (jm <= 6)
721
736
  return 31;
722
737
  if (jm <= 11)
723
738
  return 30;
724
- if (this.isLeapYear(jy))
739
+ if (this.isLeapJalaaliYear(jy))
725
740
  return 30;
726
741
  return 29;
727
742
  }
728
- jalCal(jy) {
729
- // Jalaali years starting the 33-year rule.
730
- let breaks = [
731
- -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324,
732
- 2394, 2456, 3178,
733
- ], bl = breaks.length, gy = jy + 621, leapJ = -14, jp = breaks[0], jm, jump, leap, leapG, march, n, i;
734
- if (jy < jp || jy >= breaks[bl - 1])
743
+ /*
744
+ This determines if the Jalaali (Persian) year is
745
+ leap (366-day long) or is the common year (365 days)
746
+
747
+ @param jy Jalaali calendar year (-61 to 3177)
748
+ @returns number of years since the last leap year (0 to 4)
749
+ */
750
+ jalCalLeap(jy) {
751
+ let bl = this.breaks.length, jp = this.breaks[0], jm, jump, leap, n, i;
752
+ if (jy < jp || jy >= this.breaks[bl - 1])
753
+ throw new Error('Invalid Jalaali year ' + jy);
754
+ for (i = 1; i < bl; i += 1) {
755
+ jm = this.breaks[i];
756
+ jump = jm - jp;
757
+ if (jy < jm)
758
+ break;
759
+ jp = jm;
760
+ }
761
+ n = jy - jp;
762
+ if (jump - n < 6)
763
+ n = n - jump + this.div(jump + 4, 33) * 33;
764
+ leap = this.mod(this.mod(n + 1, 33) - 1, 4);
765
+ if (leap === -1) {
766
+ leap = 4;
767
+ }
768
+ return leap;
769
+ }
770
+ jalCal(jy, withoutLeap) {
771
+ let bl = this.breaks.length, gy = jy + 621, leapJ = -14, jp = this.breaks[0], jm, jump, leap, leapG, march, n, i;
772
+ if (jy < jp || jy >= this.breaks[bl - 1])
735
773
  throw new Error('Invalid Jalaali year ' + jy);
736
774
  // Find the limiting years for the Jalaali year jy.
737
775
  for (i = 1; i < bl; i += 1) {
738
- jm = breaks[i];
776
+ jm = this.breaks[i];
739
777
  jump = jm - jp;
740
778
  if (jy < jm)
741
779
  break;
@@ -752,6 +790,9 @@ class JalaliCalendar {
752
790
  leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;
753
791
  // Determine the Gregorian date of Farvardin the 1st.
754
792
  march = 20 + leapJ - leapG;
793
+ // return with gy and march when we don't need leap
794
+ if (withoutLeap)
795
+ return { gy: gy, march: march };
755
796
  // Find how many years have passed since the last leap year.
756
797
  if (jump - n < 6)
757
798
  n = n - jump + this.div(jump + 4, 33) * 33;
@@ -765,28 +806,13 @@ class JalaliCalendar {
765
806
  march: march,
766
807
  };
767
808
  }
768
- /*
769
- Converts a date of the Jalaali calendar to the Julian Day number.
770
- @param jy Jalaali year (1 to 3100)
771
- @param jm Jalaali month (1 to 12)
772
- @param jd Jalaali day (1 to 29/31)
773
- @return Julian Day number
774
- */
775
809
  j2d(jy, jm, jd) {
776
- let r = this.jalCal(jy);
810
+ let r = this.jalCal(jy, true);
777
811
  return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;
778
812
  }
779
- /*
780
- Converts the Julian Day number to a date in the Jalaali calendar.
781
- @param jdn Julian Day number
782
- @return
783
- jy: Jalaali year (1 to 3100)
784
- jm: Jalaali month (1 to 12)
785
- jd: Jalaali day (1 to 29/31)
786
- */
787
813
  d2j(jdn) {
788
814
  let gy = this.d2g(jdn).gy, // Calculate Gregorian year (gy).
789
- jy = gy - 621, r = this.jalCal(jy), jdn1f = this.g2d(gy, 3, r.march), jd, jm, k;
815
+ jy = gy - 621, r = this.jalCal(jy, false), jdn1f = this.g2d(gy, 3, r.march), jd, jm, k;
790
816
  // Find number of days that passed since 1 Farvardin.
791
817
  k = jdn - jdn1f;
792
818
  if (k >= 0) {
@@ -842,14 +868,27 @@ class JalaliCalendar {
842
868
  gd: gd,
843
869
  };
844
870
  }
871
+ jalaaliWeek(jy, jm, jd) {
872
+ let dayOfWeek = this.jalaaliToDateObject(jy, jm, jd, 0, 0, 0, 0).getDay();
873
+ let startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);
874
+ let endDayDifference = 6 + startDayDifference;
875
+ return {
876
+ saturday: this.d2j(this.j2d(jy, jm, jd + startDayDifference)),
877
+ friday: this.d2j(this.j2d(jy, jm, jd + endDayDifference)),
878
+ };
879
+ }
880
+ jalaaliToDateObject(jy, jm, jd, h = 0, m = 0, s = 0, ms = 0) {
881
+ let gregorianCalenderDate = this.toGregorian(jy, jm, jd);
882
+ return new Date(gregorianCalenderDate.getFullYear(), gregorianCalenderDate.getMonth() - 1, gregorianCalenderDate.getDate(), h || 0, m || 0, s || 0, ms || 0);
883
+ }
845
884
  /*
846
- Utility helper functions.
847
- */
885
+ Utility helper functions.
886
+ */
848
887
  div(a, b) {
849
- return a / b;
888
+ return ~~(a / b);
850
889
  }
851
890
  mod(a, b) {
852
- return a - (a / b) * b;
891
+ return a - ~~(a / b) * b;
853
892
  }
854
893
  }
855
894
 
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-dateTime.mjs","sources":["../../../../libs/core/dateTime/src/lib/datetime.class.ts","../../../../libs/core/dateTime/src/lib/datetime.pipe.ts","../../../../libs/core/dateTime/src/lib/georgian.calendar.ts","../../../../libs/core/dateTime/src/lib/jalali.calendar.ts","../../../../libs/core/dateTime/src/lib/datetime.module.ts","../../../../libs/core/dateTime/src/acorex-core-dateTime.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport { AXConfig } from '@acorex/core/config';\n\nexport type TimeUnit = 'ms' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'week';\n\nexport interface AXDateValue {\n year: number;\n month: number;\n date: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n ms?: number;\n calendar: string;\n}\n\nexport interface AXCalendar {\n monthNames: string[];\n\n monthShortNames: string[];\n\n dayNames: string[];\n\n dayShortNames: string[];\n\n name(): string;\n\n dayOfMonth(date: Date): number;\n\n dayOfYear(date: Date): number;\n\n dayOfWeek(date: Date): number;\n\n monthOfYear(date: Date): number;\n\n weekOfYear(date: Date): number;\n\n year(date: Date): number;\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime;\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime;\n\n startOf(date: Date, unit: TimeUnit): AXDateTime;\n\n endOf(date: Date, unit: TimeUnit): AXDateTime;\n\n create(value: AXDateValue): AXDateTime;\n}\n\n// @dynamic\nexport class AXDateTime {\n static convert(\n value: Date | AXDateTime | string,\n calendar: string = AXConfig.get('dateTime.calendar')\n ): AXDateTime {\n let date: AXDateTime;\n if (typeof value === 'string' || value instanceof String) {\n date = new AXDateTime(value as string, calendar);\n } else if (value instanceof Date) {\n date = new AXDateTime(value as Date, calendar);\n } else if (value instanceof AXDateTime) {\n date = new AXDateTime(value.date, calendar);\n }\n return date!;\n }\n\n static from(\n value: AXDateValue = {\n calendar: AXConfig.get('dateTime.calendar'),\n year: 1,\n month: 1,\n date: 1,\n hours: 0,\n minutes: 0,\n seconds: 0,\n ms: 0,\n }\n ): AXDateTime {\n return AXDateTime.resolveCalendar(value.calendar).create(value);\n }\n\n static resolveCalendar(calendar: string | AXCalendar): AXCalendar {\n return typeof calendar == 'string'\n ? AXConfig.get(`dateTime.calendars.${calendar}.class`)\n : calendar;\n }\n\n private _date: Date;\n\n get date(): Date {\n return this._date;\n }\n\n private _calendar: AXCalendar;\n get calendar(): AXCalendar {\n return this._calendar;\n }\n\n constructor(\n value: Date | string = new Date(),\n calendar: string | AXCalendar = AXConfig.get(`dateTime.calendar`)\n ) {\n this._calendar = AXDateTime.resolveCalendar(calendar);\n if (value instanceof Date) {\n this._date = value as Date;\n } else {\n //TODO: parse jalali\n this._date = new Date(value);\n }\n }\n\n clone(): AXDateTime {\n return new AXDateTime(this.date, this.calendar);\n }\n\n get dayOfMonth(): number {\n return this._calendar.dayOfMonth(this.date);\n }\n\n get dayOfYear(): number {\n return this._calendar.dayOfYear(this.date);\n }\n\n get dayOfWeek(): number {\n return this._calendar.dayOfWeek(this.date);\n }\n\n get hour(): number {\n return this._date.getHours();\n }\n\n get minute(): number {\n return this._date.getMinutes();\n }\n\n get second(): number {\n return this._date.getSeconds();\n }\n\n get year(): number {\n return this._calendar.year(this.date);\n }\n\n get monthOfYear(): number {\n return this._calendar.monthOfYear(this.date);\n }\n\n get weekOfYear(): number {\n return this._calendar.weekOfYear(this.date);\n }\n\n get month(): AXCalendarMonth {\n return new AXCalendarMonth(this);\n }\n\n add(unit: TimeUnit, amount: number): AXDateTime {\n return this._calendar.add(this.date, unit, amount);\n }\n\n set(unit: TimeUnit = 'day', value: number): AXDateTime {\n return this._calendar.set(this.date, unit, value);\n }\n\n duration(end: Date | AXDateTime, unit: TimeUnit = 'day'): AXTimeSpan {\n const range = new AXDateTimeRange(this, AXDateTime.convert(end, this.calendar.name()));\n return range.duration();\n }\n\n startOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.startOf(this.date, unit);\n }\n\n endOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.endOf(this.date, unit);\n }\n\n private _formatKeys = {\n ss: () => this.pad(this.date.getSeconds(), 2),\n s: () => this.date.getSeconds().toString(),\n //\n dd: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n d: () => this.calendar.dayOfMonth(this.date).toString(),\n //\n mm: () => this.pad(this.date.getMinutes(), 2),\n m: () => this.date.getMinutes().toString(),\n //\n MMMM: () => this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1],\n MMM: () => this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1],\n MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),\n //\n DDDD: () => this.calendar.dayNames[this.calendar.dayOfWeek(this.date) - 1],\n DDD: () => this.calendar.dayShortNames[this.calendar.dayOfWeek(this.date) - 1],\n //\n yyyy: () => this.calendar.year(this.date).toString(),\n YYYY: () => this.calendar.year(this.date).toString(),\n yy: () => this.calendar.year(this.date).toString().substring(2),\n YY: () => this.calendar.year(this.date).toString().substring(2),\n //\n HH: () => this.pad(this.date.getHours(), 2),\n H: () => this.date.getHours().toString(),\n //\n hh: () => this.pad(this.date.getHours() % 12 || 12, 2),\n h: () => (this.date.getHours() % 12 || 12).toString(),\n //\n A: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n a: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n };\n\n format(format: string = AXConfig.get('dateTime.shortDateFormat')): string {\n const re = new RegExp(\n _.orderBy(Object.keys(this._formatKeys), (c) => c.length, ['desc']).join('|'),\n 'gi'\n );\n return format.replace(re, (matched) => {\n return this._formatKeys[matched]();\n });\n }\n\n private pad(n, width, z = '0') {\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n\n toString(format: string = AXConfig.get('dateTime.shortDateFormat')): string {\n return this.format(format);\n }\n\n equal(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n return this.compare(value, unit) == 0;\n }\n\n compare(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n const val = AXDateTime.convert(value, this.calendar.name());\n const func = (v1: number, v2: number) => {\n if (v1 == v2) {\n return 0;\n } else if (v1 > v2) {\n return 1;\n } else {\n return -1;\n }\n };\n let p = 0;\n switch (unit) {\n case 'year':\n return func(this.year, val.year);\n case 'week':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.weekOfYear, val.weekOfYear) : p;\n case 'month':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.monthOfYear, val.monthOfYear) : p;\n case 'day':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.dayOfYear, val.dayOfYear) : p;\n case 'hour':\n p = this.compare(val, 'day');\n return p == 0 ? func(this.hour, val.hour) : p;\n case 'minute':\n p = this.compare(val, 'hour');\n return p == 0 ? func(this.minute, val.minute) : p;\n case 'second':\n p = this.compare(val, 'minute');\n return p == 0 ? func(this.second, val.second) : p;\n default:\n return func(this.date.getTime(), val.date.getTime());\n }\n }\n\n convert(calendar: string) {\n return AXDateTime.convert(this, calendar);\n }\n}\n\nexport class AXCalendarMonth {\n private _range: AXDateTimeRange;\n public get range(): AXDateTimeRange {\n return this._range;\n }\n public set range(v: AXDateTimeRange) {\n this._range = v;\n }\n\n constructor(date: AXDateTime) {\n this.index = date.date.getMonth();\n this.name = date.format('MMMM');\n this.range = new AXDateTimeRange(\n new AXDateTime(date.startOf('month').date, date.calendar),\n new AXDateTime(date.endOf('month').date, date.calendar)\n );\n }\n\n private readonly index: number;\n private readonly name: string;\n}\n\nexport interface AXTimeSpanTotal {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n weeks: number;\n months: number;\n years: number;\n}\n\nexport interface AXTimeSpan {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n months: number;\n years: number;\n total: AXTimeSpanTotal;\n}\n\nexport class AXDateTimeRange {\n private _startTime: AXDateTime;\n private _endTime: AXDateTime;\n\n public get startTime(): AXDateTime {\n return this._startTime;\n }\n\n public get endTime(): AXDateTime {\n return this._endTime;\n }\n\n constructor(startTime: AXDateTime, endTime: AXDateTime) {\n this._startTime = startTime;\n this._endTime = endTime;\n }\n\n duration(): AXTimeSpan {\n const result: AXTimeSpan = {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n months: 0,\n years: 0,\n total: {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n weeks: 0,\n months: 0,\n years: 0,\n },\n };\n\n const one_second = 1000;\n const one_min = one_second * 60;\n const one_hour = one_min * 60;\n const one_day = one_hour * 24;\n const one_week = one_day * 7;\n const one_year = 365.25 * one_day;\n const one_month = one_year / 12;\n const startTime = this._startTime.date.getTime();\n const endTime = this._endTime.date.getTime();\n const diff = Math.abs(endTime - startTime);\n //\n result.total.miliseconds = diff;\n result.total.seconds = Number((diff / one_second).toFixed(2));\n result.total.minutes = Number((diff / one_min).toFixed(2));\n result.total.hours = Number((diff / one_hour).toFixed(2));\n result.total.days = Number((diff / one_day).toFixed(2));\n result.total.weeks = Number((diff / one_week).toFixed(2));\n //\n // let months = (this.endTime.year - this.startTime.year) * 12;\n // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;\n // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {\n // months--;\n // }\n // result.total.months = Math.abs(months);\n // TODO: review\n result.total.months = Number((diff / one_month).toFixed(2));\n result.total.years = Number((diff / one_year).toFixed(2));\n //\n result.miliseconds = result.total.miliseconds % 1000;\n result.seconds = Number((result.total.seconds % 60).toFixed(0));\n result.minutes = Number((result.total.minutes % 60).toFixed(0));\n result.hours = Number((result.total.hours % 24).toFixed(0));\n // TODO: review\n result.days = Number((result.total.days % 30.4).toFixed(0));\n result.months = Number((result.total.months % 12).toFixed(0));\n result.years = Number(result.total.years.toFixed(0));\n return result;\n }\n\n enumurate(unit: TimeUnit = 'day', amount: number = 1): AXDateTime[] {\n const result: AXDateTime[] = [];\n let item = this._startTime.clone();\n while (item.compare(this._endTime, unit) < 1) {\n if (!result.some((c) => c.equal(item, unit))) {\n result.push(item);\n }\n item = item.add(unit, amount);\n }\n return result;\n }\n\n includes(value: AXDateTime, unit: TimeUnit = 'day'): boolean {\n // TODO: ??\n return true;\n }\n\n // getViewCompaire(view) {\n // switch (view) {\n // case 'day':\n // return 'YMD';\n // case 'month':\n // return 'YM';\n // case 'year':\n // return 'Y';\n // }\n // }\n}\n","import { PipeTransform, Pipe } from '@angular/core';\nimport { AXConfig } from '@acorex/core/config';\nimport { AXDateTime } from './datetime.class';\n\n@Pipe({ name: 'axDate' })\nexport class AXDateTimePipe implements PipeTransform {\n constructor() { }\n\n transform(value: any, format?: string, calendar?: string): string {\n if (value == null) {\n return '';\n }\n const date: AXDateTime = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);\n if (!format) {\n return date.format(AXConfig.get('dateTime.shortDateFormat'));\n }\n else {\n return date.format(format);\n }\n }\n}","import { AXCalendar, AXDateTime, AXDateValue, TimeUnit } from \"./datetime.class\";\n\nexport class GeorgianCalendar implements AXCalendar {\n\n monthNames = [\n \"January\", \"February\", \"March\",\n \"April\", \"May\", \"June\", \"July\",\n \"August\", \"September\", \"October\",\n \"November\", \"December\"\n ];\n\n monthShortNames = [\n \"Jan\", \"Feb\", \"Mar\",\n \"Apr\", \"May\", \"Jun\", \"Jul\",\n \"Aug\", \"Sep\", \"Oct\",\n \"Nov\", \"Dec\"\n ];\n\n dayNames = [\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n \"Thursday\", \"Friday\", \"Saturday\"\n ];\n\n dayShortNames = [\n \"Sun\", \"Mon\", \"Tue\", \"Wed\",\n \"Thu\", \"Fri\", \"Sat\"\n ];\n\n\n create(value: AXDateValue): AXDateTime {\n return new AXDateTime(new Date(value.year, value.month - 1, value.date, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this.name());\n }\n\n name(): string {\n return 'gregorian'\n }\n\n dayOfMonth(date: Date): number {\n return date.getDate();\n }\n\n dayOfYear(date: Date): number {\n let result = 0;\n let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (this.isLeap(date)) {\n m[1] = 29;\n }\n for (let i = 0; i < date.getMonth(); i++) {\n result = result + m[i];\n }\n result += date.getDate();\n return result;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() + 1;\n }\n\n weekOfYear(date: Date): number {\n const firstDay = new AXDateTime(date).startOf('year');\n return Math.ceil((((date.getTime() - firstDay.date.getTime()) / 86400000) + firstDay.date.getDay() + 1) / 7);\n }\n\n year(date: Date): number {\n return date.getFullYear();\n }\n\n monthOfYear(date: Date): number {\n return date.getMonth() + 1;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break\n case 'minute':\n value += 60000 * amount;\n break\n case 'hour':\n value += 3600000 * amount;\n break\n case 'month':\n const v = new Date(value);\n var mo = date.getMonth();\n var yr = date.getFullYear();\n mo = (mo + amount) % 12;\n if (0 > mo) {\n yr += (date.getMonth() + amount - mo - 12) / 12;\n mo += 12;\n }\n else\n yr += ((date.getMonth() + amount - mo) / 12);\n v.setMonth(mo);\n v.setFullYear(yr);\n value = v.valueOf();\n break\n case 'week':\n value += 7 * 86400000 * amount;\n break\n case 'year':\n const yv = new Date(value);\n yv.setFullYear(yv.getFullYear() + amount);\n value = yv.valueOf();\n break\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this.name());\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day':\n clone.setDate(value);\n break;\n case \"week\":\n break;\n case \"month\":\n clone.setMonth(Math.max(0, value - 1));\n break;\n case \"year\":\n clone.setFullYear(value);\n break;\n }\n return new AXDateTime(clone, this.name());\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this.name());\n case \"week\":\n const index = 0;\n const start = index >= 0 ? index : 0;\n const day = clone.getDay();\n const diff = clone.getDate() - day + (start > day ? start - 7 : start);\n clone.setDate(diff);\n return new AXDateTime(clone, this.name()).startOf('day');\n case \"month\":\n clone.setDate(1)\n return new AXDateTime(clone, this.name()).startOf('day');\n case \"year\":\n clone.setMonth(0);\n clone.setDate(1);\n return new AXDateTime(clone, this.name()).startOf('day');\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this.name());\n case 'week':\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n case 'month':\n return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');\n case \"year\":\n clone.setMonth(11);\n return new AXDateTime(clone, this.name()).endOf('month');\n }\n }\n\n isLeap(date: Date) {\n let leapYear = new Date(date.getFullYear(), 1, 29);\n return leapYear.getDate() == 29;\n }\n}","import { AXCalendar, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';\n\nexport class JalaliCalendar implements AXCalendar {\n monthNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');\n\n monthShortNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');\n\n dayNames = 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'.split('_');\n\n dayShortNames = 'ش_ی_د_س_چ_پ_ج'.split('_');\n\n create(value: AXDateValue): AXDateTime {\n const a = this.toGregorian(value.year, value.month, value.date);\n return new AXDateTime(\n new Date(\n a.getFullYear(),\n a.getMonth(),\n a.getDate(),\n value.hours || 0,\n value.minutes || 0,\n value.seconds || 0,\n value.ms || 0\n ),\n this.name()\n );\n }\n\n name(): string {\n return 'jalali';\n }\n\n dayOfMonth(date: Date): number {\n return this.toJalali(date).day;\n }\n\n dayOfYear(date: Date): number {\n const j = this.toJalali(date);\n return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() == 6 ? 1 : date.getDay() + 2;\n }\n\n weekOfYear(date: Date): number {\n //TODO : apply jalali\n const firstDay = new AXDateTime(date).startOf('year');\n return Math.ceil(\n ((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7\n );\n }\n\n year(date: Date): number {\n return this.toJalali(date).year;\n }\n\n monthOfYear(date: Date): number {\n return this.toJalali(date).month;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break;\n case 'minute':\n value += 60000 * amount;\n break;\n case 'hour':\n value += 3600000 * amount;\n break;\n case 'month': {\n const v = new Date(value);\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n const nm = jm + amount;\n const ny = nm % 12 ? Math.floor(nm / 12) : 0;\n jy += ny;\n jm = nm - ny * 12;\n const vv = this.toGregorian(jy, jm, jd);\n v.setFullYear(vv.getFullYear());\n v.setMonth(vv.getMonth());\n v.setDate(vv.getDate());\n value = v.valueOf();\n break;\n }\n case 'week':\n value += 7 * 86400000 * amount;\n break;\n case 'year': {\n // const v = new Date(value);\n // v.setFullYear(v.getFullYear() + amount);\n // value = v.valueOf();\n // break\n const v = new Date(value);\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n const vv = this.toGregorian(jy + amount, jm, jd);\n v.setFullYear(vv.getFullYear());\n v.setMonth(vv.getMonth());\n v.setDate(vv.getDate());\n value = v.valueOf();\n break;\n }\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this.name());\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n const jDate = this.toJalali(clone);\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day':\n const gDate = this.toGregorian(jDate.year, jDate.month, value);\n clone.setDate(gDate.getDate());\n break;\n case 'week':\n break;\n case 'month':\n const gDate2 = this.toGregorian(jDate.year, value, jDate.day);\n clone.setMonth(gDate2.getMonth());\n break;\n case 'year':\n const gDate3 = this.toGregorian(value, jDate.month, jDate.day);\n clone.setFullYear(gDate3.getFullYear());\n break;\n }\n return new AXDateTime(clone, this.name());\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this.name());\n case 'week':\n return new AXDateTime(clone, this.name())\n .add('day', -this.dayOfWeek(clone) + 1)\n .startOf('day');\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const gDate = this.toGregorian(jy, jm, 1);\n return new AXDateTime(gDate, this.name()).startOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 1, 1);\n return new AXDateTime(gDate, this.name()).startOf('day');\n }\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this.name());\n case 'week': {\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n }\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const jd = this.monthLength(jy, jm);\n const gDate = this.toGregorian(jy, jm, jd);\n return new AXDateTime(gDate, this.name()).endOf('day');\n }\n case 'year':\n let jy = this.year(date);\n const gDate = this.toGregorian(jy, 12, this.monthLength(jy, 12));\n return new AXDateTime(gDate, this.name()).endOf('day');\n }\n }\n\n toJalali(date: Date): { year: number; month: number; day: number } {\n const gy = date.getFullYear();\n const gm = date.getMonth() + 1;\n const gd = date.getDate();\n const r = this.d2j(this.g2d(gy, gm, gd));\n return {\n year: r.jy,\n month: r.jm,\n day: r.jd,\n };\n }\n\n /*\n Converts a Jalaali date to Gregorian.\n */\n toGregorian(jy, jm, jd) {\n const g = this.d2g(this.j2d(jy, jm, jd));\n return new Date(g.gy, g.gm - 1, g.gd);\n }\n\n /*\n Checks whether a Jalaali date is valid or not.\n */\n isValid(jy, jm, jd) {\n return (\n jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.monthLength(jy, jm)\n );\n }\n\n /*\n Is this a leap year or not?\n */\n isLeapYear(jy) {\n return this.jalCal(jy).leap === 0;\n }\n\n /*\n Number of days in a given month in a Jalaali year.\n */\n monthLength(jy, jm) {\n if (jm <= 6) return 31;\n if (jm <= 11) return 30;\n if (this.isLeapYear(jy)) return 30;\n return 29;\n }\n\n private jalCal(jy) {\n // Jalaali years starting the 33-year rule.\n let breaks = [\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324,\n 2394, 2456, 3178,\n ],\n bl = breaks.length,\n gy = jy + 621,\n leapJ = -14,\n jp = breaks[0],\n jm,\n jump,\n leap,\n leapG,\n march,\n n,\n i;\n\n if (jy < jp || jy >= breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n // Find the limiting years for the Jalaali year jy.\n for (i = 1; i < bl; i += 1) {\n jm = breaks[i];\n jump = jm - jp;\n if (jy < jm) break;\n leapJ = leapJ + this.div(jump, 33) * 8 + this.div(this.mod(jump, 33), 4);\n jp = jm;\n }\n n = jy - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalaali year in the Persian calendar.\n leapJ = leapJ + this.div(n, 33) * 8 + this.div(this.mod(n, 33) + 3, 4);\n if (this.mod(jump, 33) === 4 && jump - n === 4) leapJ += 1;\n\n // And the same in the Gregorian calendar (until the year gy).\n leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n march = 20 + leapJ - leapG;\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) n = n - jump + this.div(jump + 4, 33) * 33;\n leap = this.mod(this.mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {\n leap: leap,\n gy: gy,\n march: march,\n };\n }\n\n /*\n Converts a date of the Jalaali calendar to the Julian Day number.\n @param jy Jalaali year (1 to 3100)\n @param jm Jalaali month (1 to 12)\n @param jd Jalaali day (1 to 29/31)\n @return Julian Day number\n */\n private j2d(jy, jm, jd) {\n let r = this.jalCal(jy);\n return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;\n }\n\n /*\n Converts the Julian Day number to a date in the Jalaali calendar.\n @param jdn Julian Day number\n @return\n jy: Jalaali year (1 to 3100)\n jm: Jalaali month (1 to 12)\n jd: Jalaali day (1 to 29/31)\n */\n private d2j(jdn) {\n let gy = this.d2g(jdn).gy, // Calculate Gregorian year (gy).\n jy = gy - 621,\n r = this.jalCal(jy),\n jdn1f = this.g2d(gy, 3, r.march),\n jd,\n jm,\n k;\n\n // Find number of days that passed since 1 Farvardin.\n k = jdn - jdn1f;\n if (k >= 0) {\n if (k <= 185) {\n // The first 6 months.\n jm = 1 + this.div(k, 31);\n jd = this.mod(k, 31) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n } else {\n // The remaining months.\n k -= 186;\n }\n } else {\n // Previous Jalaali year.\n jy -= 1;\n k += 179;\n if (r.leap === 1) k += 1;\n }\n jm = 7 + this.div(k, 30);\n jd = this.mod(k, 30) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n }\n\n private g2d(gy, gm, gd) {\n let d =\n this.div((gy + this.div(gm - 8, 6) + 100100) * 1461, 4) +\n this.div(153 * this.mod(gm + 9, 12) + 2, 5) +\n gd -\n 34840408;\n d = d - this.div(this.div(gy + 100100 + this.div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n }\n\n private d2g(jdn) {\n let j, i, gd, gm, gy;\n j = 4 * jdn + 139361631;\n j = j + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n i = this.div(this.mod(j, 1461), 4) * 5 + 308;\n gd = this.div(this.mod(i, 153), 5) + 1;\n gm = this.mod(this.div(i, 153), 12) + 1;\n gy = this.div(j, 1461) - 100100 + this.div(8 - gm, 6);\n return {\n gy: gy,\n gm: gm,\n gd: gd,\n };\n }\n\n /*\n Utility helper functions.\n */\n private div(a, b) {\n return a / b;\n }\n\n private mod(a, b) {\n return a - (a / b) * b;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXConfig } from '@acorex/core/config';\nimport { AXDateTimePipe } from './datetime.pipe';\nimport { GeorgianCalendar } from './georgian.calendar';\nimport { JalaliCalendar } from './jalali.calendar';\n\n\n@NgModule({\n imports: [],\n exports: [AXDateTimePipe],\n declarations: [AXDateTimePipe],\n providers: [],\n})\nexport class AXDateTimeModule {\n\n constructor() {\n AXConfig.set({\n dateTime: {\n calendars: {\n jalali: {\n \"class\": new JalaliCalendar(),\n weekend: [6, 7]\n },\n gregorian: {\n \"class\": new GeorgianCalendar(),\n weekend: [7, 1]\n }\n },\n calendar: 'gregorian',\n shortDateFormat: 'DDDD, d MMM yyyy'\n }\n });\n\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-core-dateTime.mjs","sources":["../../../../libs/core/dateTime/src/lib/datetime.class.ts","../../../../libs/core/dateTime/src/lib/datetime.pipe.ts","../../../../libs/core/dateTime/src/lib/georgian.calendar.ts","../../../../libs/core/dateTime/src/lib/jalali.calendar.ts","../../../../libs/core/dateTime/src/lib/datetime.module.ts","../../../../libs/core/dateTime/src/acorex-core-dateTime.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport { AXConfig } from '@acorex/core/config';\n\nexport type TimeUnit = 'ms' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'week';\n\nexport interface AXDateValue {\n year: number;\n month: number;\n date: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n ms?: number;\n calendar: string;\n}\n\nexport interface AXCalendar {\n monthNames: string[];\n\n monthShortNames: string[];\n\n dayNames: string[];\n\n dayShortNames: string[];\n\n name(): string;\n\n dayOfMonth(date: Date): number;\n\n dayOfYear(date: Date): number;\n\n dayOfWeek(date: Date): number;\n\n monthOfYear(date: Date): number;\n\n weekOfYear(date: Date): number;\n\n year(date: Date): number;\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime;\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime;\n\n startOf(date: Date, unit: TimeUnit): AXDateTime;\n\n endOf(date: Date, unit: TimeUnit): AXDateTime;\n\n create(value: AXDateValue): AXDateTime;\n}\n\n// @dynamic\nexport class AXDateTime {\n static convert(\n value: Date | AXDateTime | string,\n calendar: string = AXConfig.get('dateTime.calendar')\n ): AXDateTime {\n let date: AXDateTime;\n if (typeof value === 'string' || value instanceof String) {\n date = new AXDateTime(value as string, calendar);\n } else if (value instanceof Date) {\n date = new AXDateTime(value as Date, calendar);\n } else if (value instanceof AXDateTime) {\n date = new AXDateTime(value.date, calendar);\n }\n return date!;\n }\n\n static from(\n value: AXDateValue = {\n calendar: AXConfig.get('dateTime.calendar'),\n year: 1,\n month: 1,\n date: 1,\n hours: 0,\n minutes: 0,\n seconds: 0,\n ms: 0,\n }\n ): AXDateTime {\n return AXDateTime.resolveCalendar(value.calendar).create(value);\n }\n\n static resolveCalendar(calendar: string | AXCalendar): AXCalendar {\n return typeof calendar == 'string'\n ? AXConfig.get(`dateTime.calendars.${calendar}.class`)\n : calendar;\n }\n\n private _date: Date;\n\n get date(): Date {\n return this._date;\n }\n\n private _calendar: AXCalendar;\n get calendar(): AXCalendar {\n return this._calendar;\n }\n\n constructor(\n value: Date | string = new Date(),\n calendar: string | AXCalendar = AXConfig.get(`dateTime.calendar`)\n ) {\n this._calendar = AXDateTime.resolveCalendar(calendar);\n if (value instanceof Date) {\n this._date = value as Date;\n } else {\n //TODO: parse jalali\n this._date = new Date(value);\n }\n }\n\n clone(): AXDateTime {\n return new AXDateTime(this.date, this.calendar);\n }\n\n get dayOfMonth(): number {\n return this._calendar.dayOfMonth(this.date);\n }\n\n get dayOfYear(): number {\n return this._calendar.dayOfYear(this.date);\n }\n\n get dayOfWeek(): number {\n return this._calendar.dayOfWeek(this.date);\n }\n\n get hour(): number {\n return this._date.getHours();\n }\n\n get minute(): number {\n return this._date.getMinutes();\n }\n\n get second(): number {\n return this._date.getSeconds();\n }\n\n get year(): number {\n return this._calendar.year(this.date);\n }\n\n get monthOfYear(): number {\n return this._calendar.monthOfYear(this.date);\n }\n\n get weekOfYear(): number {\n return this._calendar.weekOfYear(this.date);\n }\n\n get month(): AXCalendarMonth {\n return new AXCalendarMonth(this);\n }\n\n add(unit: TimeUnit, amount: number): AXDateTime {\n return this._calendar.add(this.date, unit, amount);\n }\n\n set(unit: TimeUnit = 'day', value: number): AXDateTime {\n return this._calendar.set(this.date, unit, value);\n }\n\n duration(end: Date | AXDateTime, unit: TimeUnit = 'day'): AXTimeSpan {\n const range = new AXDateTimeRange(this, AXDateTime.convert(end, this.calendar.name()));\n return range.duration();\n }\n\n startOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.startOf(this.date, unit);\n }\n\n endOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.endOf(this.date, unit);\n }\n\n private _formatKeys = {\n ss: () => this.pad(this.date.getSeconds(), 2),\n s: () => this.date.getSeconds().toString(),\n //\n dd: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n d: () => this.calendar.dayOfMonth(this.date).toString(),\n //\n mm: () => this.pad(this.date.getMinutes(), 2),\n m: () => this.date.getMinutes().toString(),\n //\n MMMM: () => this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1],\n MMM: () => this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1],\n MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),\n //\n DDDD: () => this.calendar.dayNames[this.calendar.dayOfWeek(this.date) - 1],\n DDD: () => this.calendar.dayShortNames[this.calendar.dayOfWeek(this.date) - 1],\n //\n yyyy: () => this.calendar.year(this.date).toString(),\n YYYY: () => this.calendar.year(this.date).toString(),\n yy: () => this.calendar.year(this.date).toString().substring(2),\n YY: () => this.calendar.year(this.date).toString().substring(2),\n //\n HH: () => this.pad(this.date.getHours(), 2),\n H: () => this.date.getHours().toString(),\n //\n hh: () => this.pad(this.date.getHours() % 12 || 12, 2),\n h: () => (this.date.getHours() % 12 || 12).toString(),\n //\n A: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n a: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n };\n\n format(format: string = AXConfig.get('dateTime.shortDateFormat')): string {\n const re = new RegExp(\n _.orderBy(Object.keys(this._formatKeys), (c) => c.length, ['desc']).join('|'),\n 'gi'\n );\n return format.replace(re, (matched) => {\n return this._formatKeys[matched]();\n });\n }\n\n private pad(n, width, z = '0') {\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n\n toString(format: string = AXConfig.get('dateTime.shortDateFormat')): string {\n return this.format(format);\n }\n\n equal(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n return this.compare(value, unit) == 0;\n }\n\n compare(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n const val = AXDateTime.convert(value, this.calendar.name());\n const func = (v1: number, v2: number) => {\n if (v1 == v2) {\n return 0;\n } else if (v1 > v2) {\n return 1;\n } else {\n return -1;\n }\n };\n let p = 0;\n switch (unit) {\n case 'year':\n return func(this.year, val.year);\n case 'week':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.weekOfYear, val.weekOfYear) : p;\n case 'month':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.monthOfYear, val.monthOfYear) : p;\n case 'day':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.dayOfYear, val.dayOfYear) : p;\n case 'hour':\n p = this.compare(val, 'day');\n return p == 0 ? func(this.hour, val.hour) : p;\n case 'minute':\n p = this.compare(val, 'hour');\n return p == 0 ? func(this.minute, val.minute) : p;\n case 'second':\n p = this.compare(val, 'minute');\n return p == 0 ? func(this.second, val.second) : p;\n default:\n return func(this.date.getTime(), val.date.getTime());\n }\n }\n\n convert(calendar: string) {\n return AXDateTime.convert(this, calendar);\n }\n}\n\nexport class AXCalendarMonth {\n private _range: AXDateTimeRange;\n public get range(): AXDateTimeRange {\n return this._range;\n }\n public set range(v: AXDateTimeRange) {\n this._range = v;\n }\n\n constructor(date: AXDateTime) {\n this.index = date.date.getMonth();\n this.name = date.format('MMMM');\n this.range = new AXDateTimeRange(\n new AXDateTime(date.startOf('month').date, date.calendar),\n new AXDateTime(date.endOf('month').date, date.calendar)\n );\n }\n\n private readonly index: number;\n private readonly name: string;\n}\n\nexport interface AXTimeSpanTotal {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n weeks: number;\n months: number;\n years: number;\n}\n\nexport interface AXTimeSpan {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n months: number;\n years: number;\n total: AXTimeSpanTotal;\n}\n\nexport class AXDateTimeRange {\n private _startTime: AXDateTime;\n private _endTime: AXDateTime;\n\n public get startTime(): AXDateTime {\n return this._startTime;\n }\n\n public get endTime(): AXDateTime {\n return this._endTime;\n }\n\n constructor(startTime: AXDateTime, endTime: AXDateTime) {\n this._startTime = startTime;\n this._endTime = endTime;\n }\n\n duration(): AXTimeSpan {\n const result: AXTimeSpan = {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n months: 0,\n years: 0,\n total: {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n weeks: 0,\n months: 0,\n years: 0,\n },\n };\n\n const one_second = 1000;\n const one_min = one_second * 60;\n const one_hour = one_min * 60;\n const one_day = one_hour * 24;\n const one_week = one_day * 7;\n const one_year = 365.25 * one_day;\n const one_month = one_year / 12;\n const startTime = this._startTime.date.getTime();\n const endTime = this._endTime.date.getTime();\n const diff = Math.abs(endTime - startTime);\n //\n result.total.miliseconds = diff;\n result.total.seconds = Number((diff / one_second).toFixed(2));\n result.total.minutes = Number((diff / one_min).toFixed(2));\n result.total.hours = Number((diff / one_hour).toFixed(2));\n result.total.days = Number((diff / one_day).toFixed(2));\n result.total.weeks = Number((diff / one_week).toFixed(2));\n //\n // let months = (this.endTime.year - this.startTime.year) * 12;\n // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;\n // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {\n // months--;\n // }\n // result.total.months = Math.abs(months);\n // TODO: review\n result.total.months = Number((diff / one_month).toFixed(2));\n result.total.years = Number((diff / one_year).toFixed(2));\n //\n result.miliseconds = result.total.miliseconds % 1000;\n result.seconds = Number((result.total.seconds % 60).toFixed(0));\n result.minutes = Number((result.total.minutes % 60).toFixed(0));\n result.hours = Number((result.total.hours % 24).toFixed(0));\n // TODO: review\n result.days = Number((result.total.days % 30.4).toFixed(0));\n result.months = Number((result.total.months % 12).toFixed(0));\n result.years = Number(result.total.years.toFixed(0));\n return result;\n }\n\n enumurate(unit: TimeUnit = 'day', amount: number = 1): AXDateTime[] {\n const result: AXDateTime[] = [];\n let item = this._startTime.clone();\n while (item.compare(this._endTime, unit) < 1) {\n if (!result.some((c) => c.equal(item, unit))) {\n result.push(item);\n }\n item = item.add(unit, amount);\n }\n return result;\n }\n\n includes(value: AXDateTime, unit: TimeUnit = 'day'): boolean {\n // TODO: ??\n return true;\n }\n\n // getViewCompaire(view) {\n // switch (view) {\n // case 'day':\n // return 'YMD';\n // case 'month':\n // return 'YM';\n // case 'year':\n // return 'Y';\n // }\n // }\n}\n","import { PipeTransform, Pipe } from '@angular/core';\nimport { AXConfig } from '@acorex/core/config';\nimport { AXDateTime } from './datetime.class';\n\n@Pipe({ name: 'axDate' })\nexport class AXDateTimePipe implements PipeTransform {\n constructor() { }\n\n transform(value: any, format?: string, calendar?: string): string {\n if (value == null) {\n return '';\n }\n const date: AXDateTime = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);\n if (!format) {\n return date.format(AXConfig.get('dateTime.shortDateFormat'));\n }\n else {\n return date.format(format);\n }\n }\n}","import { AXCalendar, AXDateTime, AXDateValue, TimeUnit } from \"./datetime.class\";\n\nexport class GeorgianCalendar implements AXCalendar {\n\n monthNames = [\n \"January\", \"February\", \"March\",\n \"April\", \"May\", \"June\", \"July\",\n \"August\", \"September\", \"October\",\n \"November\", \"December\"\n ];\n\n monthShortNames = [\n \"Jan\", \"Feb\", \"Mar\",\n \"Apr\", \"May\", \"Jun\", \"Jul\",\n \"Aug\", \"Sep\", \"Oct\",\n \"Nov\", \"Dec\"\n ];\n\n dayNames = [\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n \"Thursday\", \"Friday\", \"Saturday\"\n ];\n\n dayShortNames = [\n \"Sun\", \"Mon\", \"Tue\", \"Wed\",\n \"Thu\", \"Fri\", \"Sat\"\n ];\n\n\n create(value: AXDateValue): AXDateTime {\n return new AXDateTime(new Date(value.year, value.month - 1, value.date, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this.name());\n }\n\n name(): string {\n return 'gregorian'\n }\n\n dayOfMonth(date: Date): number {\n return date.getDate();\n }\n\n dayOfYear(date: Date): number {\n let result = 0;\n let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (this.isLeap(date)) {\n m[1] = 29;\n }\n for (let i = 0; i < date.getMonth(); i++) {\n result = result + m[i];\n }\n result += date.getDate();\n return result;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() + 1;\n }\n\n weekOfYear(date: Date): number {\n const firstDay = new AXDateTime(date).startOf('year');\n return Math.ceil((((date.getTime() - firstDay.date.getTime()) / 86400000) + firstDay.date.getDay() + 1) / 7);\n }\n\n year(date: Date): number {\n return date.getFullYear();\n }\n\n monthOfYear(date: Date): number {\n return date.getMonth() + 1;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break\n case 'minute':\n value += 60000 * amount;\n break\n case 'hour':\n value += 3600000 * amount;\n break\n case 'month':\n const v = new Date(value);\n var mo = date.getMonth();\n var yr = date.getFullYear();\n mo = (mo + amount) % 12;\n if (0 > mo) {\n yr += (date.getMonth() + amount - mo - 12) / 12;\n mo += 12;\n }\n else\n yr += ((date.getMonth() + amount - mo) / 12);\n v.setMonth(mo);\n v.setFullYear(yr);\n value = v.valueOf();\n break\n case 'week':\n value += 7 * 86400000 * amount;\n break\n case 'year':\n const yv = new Date(value);\n yv.setFullYear(yv.getFullYear() + amount);\n value = yv.valueOf();\n break\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this.name());\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day':\n clone.setDate(value);\n break;\n case \"week\":\n break;\n case \"month\":\n clone.setMonth(Math.max(0, value - 1));\n break;\n case \"year\":\n clone.setFullYear(value);\n break;\n }\n return new AXDateTime(clone, this.name());\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this.name());\n case \"week\":\n const index = 0;\n const start = index >= 0 ? index : 0;\n const day = clone.getDay();\n const diff = clone.getDate() - day + (start > day ? start - 7 : start);\n clone.setDate(diff);\n return new AXDateTime(clone, this.name()).startOf('day');\n case \"month\":\n clone.setDate(1)\n return new AXDateTime(clone, this.name()).startOf('day');\n case \"year\":\n clone.setMonth(0);\n clone.setDate(1);\n return new AXDateTime(clone, this.name()).startOf('day');\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this.name());\n case 'week':\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n case 'month':\n return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');\n case \"year\":\n clone.setMonth(11);\n return new AXDateTime(clone, this.name()).endOf('month');\n }\n }\n\n isLeap(date: Date) {\n let leapYear = new Date(date.getFullYear(), 1, 29);\n return leapYear.getDate() == 29;\n }\n}","import { AXCalendar, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';\n\nexport class JalaliCalendar implements AXCalendar {\n monthNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');\n\n monthShortNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');\n\n dayNames = 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'.split('_');\n\n dayShortNames = 'ش_ی_د_س_چ_پ_ج'.split('_');\n\n /*\n Jalaali years starting the 33-year rule.\n*/\n breaks = [\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394,\n 2456, 3178,\n ];\n\n create(value: AXDateValue): AXDateTime {\n const a = this.toGregorian(value.year, value.month, value.date);\n return new AXDateTime(\n new Date(\n a.getFullYear(),\n a.getMonth(),\n a.getDate(),\n value.hours || 0,\n value.minutes || 0,\n value.seconds || 0,\n value.ms || 0,\n ),\n this.name(),\n );\n }\n\n name(): string {\n return 'jalali';\n }\n\n dayOfMonth(date: Date): number {\n return this.toJalaali(date).day;\n }\n\n dayOfYear(date: Date): number {\n const j = this.toJalaali(date);\n return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() == 6 ? 1 : date.getDay() + 2;\n }\n\n weekOfYear(date: Date): number {\n //TODO : apply jalali\n const firstDay = new AXDateTime(date).startOf('year');\n return Math.ceil(\n ((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7,\n );\n }\n\n year(date: Date): number {\n return this.toJalaali(date).year;\n }\n\n monthOfYear(date: Date): number {\n return this.toJalaali(date).month;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break;\n case 'minute':\n value += 60000 * amount;\n break;\n case 'hour':\n value += 3600000 * amount;\n break;\n case 'month': {\n const v = new Date(value);\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n const nm = jm + amount;\n const ny = nm % 12 ? Math.floor(nm / 12) : 0;\n jy += ny;\n jm = nm - ny * 12;\n const vv = this.toGregorian(jy, jm, jd);\n v.setFullYear(vv.getFullYear());\n v.setMonth(vv.getMonth());\n v.setDate(vv.getDate());\n value = v.valueOf();\n break;\n }\n case 'week':\n value += 7 * 86400000 * amount;\n break;\n case 'year': {\n // const v = new Date(value);\n // v.setFullYear(v.getFullYear() + amount);\n // value = v.valueOf();\n // break\n const v = new Date(value);\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n const vv = this.toGregorian(jy + amount, jm, jd);\n v.setFullYear(vv.getFullYear());\n v.setMonth(vv.getMonth());\n v.setDate(vv.getDate());\n value = v.valueOf();\n break;\n }\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this.name());\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n const jDate = this.toJalaali(clone);\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day':\n const gDate = this.toGregorian(jDate.year, jDate.month, value);\n clone.setDate(gDate.getDate());\n break;\n case 'week':\n break;\n case 'month':\n const gDate2 = this.toGregorian(jDate.year, value, jDate.day);\n clone.setMonth(gDate2.getMonth());\n break;\n case 'year':\n const gDate3 = this.toGregorian(value, jDate.month, jDate.day);\n clone.setFullYear(gDate3.getFullYear());\n break;\n }\n return new AXDateTime(clone, this.name());\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this.name());\n case 'week':\n return new AXDateTime(clone, this.name())\n .add('day', -this.dayOfWeek(clone) + 1)\n .startOf('day');\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const gDate = this.toGregorian(jy, jm, 1);\n return new AXDateTime(gDate, this.name()).startOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 1, 1);\n return new AXDateTime(gDate, this.name()).startOf('day');\n }\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this.name());\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this.name());\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this.name());\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this.name());\n case 'week': {\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n }\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const jd = this.jalaaliMonthLength(jy, jm);\n const gDate = this.toGregorian(jy, jm, jd);\n return new AXDateTime(gDate, this.name()).endOf('day');\n }\n case 'year':\n let jy = this.year(date);\n const gDate = this.toGregorian(jy, 12, this.jalaaliMonthLength(jy, 12));\n return new AXDateTime(gDate, this.name()).endOf('day');\n }\n }\n\n /*\n Converts a Gregorian date to Jalaali.\n*/\n toJalaali(date: Date): { year: number; month: number; day: number } {\n let gd = date.getDate();\n let gm = date.getMonth() + 1;\n let gy = date.getFullYear();\n const r = this.d2j(this.g2d(gy, gm, gd));\n return {\n year: r.jy,\n month: r.jm,\n day: r.jd,\n };\n }\n\n /*\n Converts a Jalaali date to Gregorian.\n */\n toGregorian(jy, jm, jd): Date {\n const g = this.d2g(this.j2d(jy, jm, jd));\n return new Date(g.gy, g.gm - 1, g.gd);\n }\n\n /*\n Checks whether a Jalaali date is valid or not.\n */\n isValidJalaaliDate(jy, jm, jd) {\n return (\n jy >= -61 &&\n jy <= 3177 &&\n jm >= 1 &&\n jm <= 12 &&\n jd >= 1 &&\n jd <= this.jalaaliMonthLength(jy, jm)\n );\n }\n\n /*\n Is this a leap year or not?\n */\n isLeapJalaaliYear(jy) {\n return this.jalCalLeap(jy) === 0;\n }\n\n /*\n Number of days in a given month in a Jalaali year.\n */\n jalaaliMonthLength(jy, jm) {\n if (jm <= 6) return 31;\n if (jm <= 11) return 30;\n if (this.isLeapJalaaliYear(jy)) return 30;\n return 29;\n }\n\n /*\n This determines if the Jalaali (Persian) year is\n leap (366-day long) or is the common year (365 days)\n \n @param jy Jalaali calendar year (-61 to 3177)\n @returns number of years since the last leap year (0 to 4)\n */\n private jalCalLeap(jy: number) {\n let bl = this.breaks.length,\n jp = this.breaks[0],\n jm,\n jump,\n leap,\n n,\n i;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm) break;\n jp = jm;\n }\n n = jy - jp;\n\n if (jump - n < 6) n = n - jump + this.div(jump + 4, 33) * 33;\n leap = this.mod(this.mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return leap;\n }\n\n private jalCal(jy: number, withoutLeap: boolean) {\n let bl = this.breaks.length,\n gy = jy + 621,\n leapJ = -14,\n jp = this.breaks[0],\n jm,\n jump,\n leap,\n leapG,\n march,\n n,\n i;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n // Find the limiting years for the Jalaali year jy.\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm) break;\n leapJ = leapJ + this.div(jump, 33) * 8 + this.div(this.mod(jump, 33), 4);\n jp = jm;\n }\n n = jy - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalaali year in the Persian calendar.\n leapJ = leapJ + this.div(n, 33) * 8 + this.div(this.mod(n, 33) + 3, 4);\n if (this.mod(jump, 33) === 4 && jump - n === 4) leapJ += 1;\n\n // And the same in the Gregorian calendar (until the year gy).\n leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n march = 20 + leapJ - leapG;\n\n // return with gy and march when we don't need leap\n if (withoutLeap) return { gy: gy, march: march };\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) n = n - jump + this.div(jump + 4, 33) * 33;\n leap = this.mod(this.mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {\n leap: leap,\n gy: gy,\n march: march,\n };\n }\n\n private j2d(jy, jm, jd): number {\n let r = this.jalCal(jy, true);\n return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;\n }\n\n private d2j(jdn: number) {\n let gy = this.d2g(jdn).gy, // Calculate Gregorian year (gy).\n jy = gy - 621,\n r = this.jalCal(jy, false),\n jdn1f = this.g2d(gy, 3, r.march),\n jd,\n jm,\n k;\n\n // Find number of days that passed since 1 Farvardin.\n k = jdn - jdn1f;\n if (k >= 0) {\n if (k <= 185) {\n // The first 6 months.\n jm = 1 + this.div(k, 31);\n jd = this.mod(k, 31) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n } else {\n // The remaining months.\n k -= 186;\n }\n } else {\n // Previous Jalaali year.\n jy -= 1;\n k += 179;\n if (r.leap === 1) k += 1;\n }\n jm = 7 + this.div(k, 30);\n jd = this.mod(k, 30) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n }\n\n private g2d(gy: number, gm: number, gd: number): number {\n let d =\n this.div((gy + this.div(gm - 8, 6) + 100100) * 1461, 4) +\n this.div(153 * this.mod(gm + 9, 12) + 2, 5) +\n gd -\n 34840408;\n d = d - this.div(this.div(gy + 100100 + this.div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n }\n\n private d2g(jdn: number) {\n let j, i, gd, gm, gy;\n j = 4 * jdn + 139361631;\n j = j + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n i = this.div(this.mod(j, 1461), 4) * 5 + 308;\n gd = this.div(this.mod(i, 153), 5) + 1;\n gm = this.mod(this.div(i, 153), 12) + 1;\n gy = this.div(j, 1461) - 100100 + this.div(8 - gm, 6);\n return {\n gy: gy,\n gm: gm,\n gd: gd,\n };\n }\n\n private jalaaliWeek(jy: number, jm: number, jd: number): { saturday: any; friday: any } {\n let dayOfWeek = this.jalaaliToDateObject(jy, jm, jd, 0, 0, 0, 0).getDay();\n\n let startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);\n let endDayDifference = 6 + startDayDifference;\n\n return {\n saturday: this.d2j(this.j2d(jy, jm, jd + startDayDifference)),\n friday: this.d2j(this.j2d(jy, jm, jd + endDayDifference)),\n };\n }\n\n private jalaaliToDateObject(\n jy: number,\n jm: number,\n jd: number,\n h: number = 0,\n m: number = 0,\n s: number = 0,\n ms: number = 0,\n ) {\n let gregorianCalenderDate = this.toGregorian(jy, jm, jd);\n\n return new Date(\n gregorianCalenderDate.getFullYear(),\n gregorianCalenderDate.getMonth() - 1,\n gregorianCalenderDate.getDate(),\n h || 0,\n m || 0,\n s || 0,\n ms || 0,\n );\n }\n\n /*\n Utility helper functions.\n */\n\n private div(a: number, b: number) {\n return ~~(a / b);\n }\n\n private mod(a: number, b: number) {\n return a - ~~(a / b) * b;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXConfig } from '@acorex/core/config';\nimport { AXDateTimePipe } from './datetime.pipe';\nimport { GeorgianCalendar } from './georgian.calendar';\nimport { JalaliCalendar } from './jalali.calendar';\n\n\n@NgModule({\n imports: [],\n exports: [AXDateTimePipe],\n declarations: [AXDateTimePipe],\n providers: [],\n})\nexport class AXDateTimeModule {\n\n constructor() {\n AXConfig.set({\n dateTime: {\n calendars: {\n jalali: {\n \"class\": new JalaliCalendar(),\n weekend: [6, 7]\n },\n gregorian: {\n \"class\": new GeorgianCalendar(),\n weekend: [7, 1]\n }\n },\n calendar: 'gregorian',\n shortDateFormat: 'DDDD, d MMM yyyy'\n }\n });\n\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/core",
3
- "version": "7.2.6",
3
+ "version": "7.2.7",
4
4
  "sideEffects": false,
5
5
  "module": "fesm2022/acorex-core.mjs",
6
6
  "typings": "index.d.ts",