@spartan-ng/brain 0.0.1-alpha.714 → 0.0.1-alpha.715

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.
@@ -263,9 +263,243 @@ function provideUtcDateAdapter() {
263
263
  return provideDateAdapter(BrnUtcDateAdapter);
264
264
  }
265
265
 
266
+ const PersianDate = {
267
+ gregorianDaysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
268
+ jalaliDaysInMonth: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29],
269
+ jalaliToGregorian: function (jalaliYear, jalaliMonth, jalaliDay) {
270
+ const jalaliYearDelta = jalaliYear - 979;
271
+ const jalaliMonthIdx = jalaliMonth - 1;
272
+ const jalaliDayIdx = jalaliDay - 1;
273
+ let jalaliDayNo = 365 * jalaliYearDelta + Math.floor(jalaliYearDelta / 33) * 8 + Math.floor(((jalaliYearDelta % 33) + 3) / 4);
274
+ for (let i = 0; i < jalaliMonthIdx; ++i)
275
+ jalaliDayNo += this.jalaliDaysInMonth[i];
276
+ jalaliDayNo += jalaliDayIdx;
277
+ let gregorianDayNo = jalaliDayNo + 79;
278
+ let gregorianYear = 1600 + 400 * Math.floor(gregorianDayNo / 146097);
279
+ gregorianDayNo = gregorianDayNo % 146097;
280
+ let leap = true;
281
+ if (gregorianDayNo >= 36525) {
282
+ gregorianDayNo--;
283
+ gregorianYear += 100 * Math.floor(gregorianDayNo / 36524);
284
+ gregorianDayNo = gregorianDayNo % 36524;
285
+ if (gregorianDayNo >= 365)
286
+ gregorianDayNo++;
287
+ else
288
+ leap = false;
289
+ }
290
+ gregorianYear += 4 * Math.floor(gregorianDayNo / 1461);
291
+ gregorianDayNo %= 1461;
292
+ if (gregorianDayNo >= 366) {
293
+ leap = false;
294
+ gregorianDayNo--;
295
+ gregorianYear += Math.floor(gregorianDayNo / 365);
296
+ gregorianDayNo = gregorianDayNo % 365;
297
+ }
298
+ let i = 0;
299
+ for (; gregorianDayNo >= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0); i++) {
300
+ gregorianDayNo -= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0);
301
+ }
302
+ const gregorianMonth = i + 1;
303
+ const gregorianDay = gregorianDayNo + 1;
304
+ return [gregorianYear, gregorianMonth, gregorianDay];
305
+ },
306
+ gregorianToJalali: function (gregorianYear, gregorianMonth, gregorianDay) {
307
+ const gregorianYearDelta = gregorianYear - 1600;
308
+ const gregorianMonthIdx = gregorianMonth - 1;
309
+ const gregorianDayIdx = gregorianDay - 1;
310
+ let gregorianDayNo = 365 * gregorianYearDelta +
311
+ Math.floor((gregorianYearDelta + 3) / 4) -
312
+ Math.floor((gregorianYearDelta + 99) / 100) +
313
+ Math.floor((gregorianYearDelta + 399) / 400);
314
+ for (let i = 0; i < gregorianMonthIdx; ++i)
315
+ gregorianDayNo += this.gregorianDaysInMonth[i];
316
+ if (gregorianMonthIdx > 1 &&
317
+ ((gregorianYearDelta % 4 === 0 && gregorianYearDelta % 100 !== 0) || gregorianYearDelta % 400 === 0))
318
+ gregorianDayNo++;
319
+ gregorianDayNo += gregorianDayIdx;
320
+ let jalaliDayNo = gregorianDayNo - 79;
321
+ const jalaliCycleCount = Math.floor(jalaliDayNo / 12053);
322
+ jalaliDayNo = jalaliDayNo % 12053;
323
+ let jalaliYear = 979 + 33 * jalaliCycleCount + 4 * Math.floor(jalaliDayNo / 1461);
324
+ jalaliDayNo %= 1461;
325
+ if (jalaliDayNo >= 366) {
326
+ jalaliYear += Math.floor((jalaliDayNo - 1) / 365);
327
+ jalaliDayNo = (jalaliDayNo - 1) % 365;
328
+ }
329
+ let i = 0;
330
+ for (; i < 11 && jalaliDayNo >= this.jalaliDaysInMonth[i]; ++i) {
331
+ jalaliDayNo -= this.jalaliDaysInMonth[i];
332
+ }
333
+ const jalaliMonth = i + 1;
334
+ const jalaliDay = jalaliDayNo + 1;
335
+ return [jalaliYear, jalaliMonth, jalaliDay];
336
+ },
337
+ isLeapJalaliYear: function (year) {
338
+ const breaks = [1, 5, 9, 13, 17, 22, 26, 30];
339
+ return breaks.includes(year % 33);
340
+ },
341
+ getDaysInMonth: function (year, month) {
342
+ if (month < 1 || month > 12)
343
+ return 0;
344
+ if (month <= 6)
345
+ return 31;
346
+ if (month <= 11)
347
+ return 30;
348
+ return this.isLeapJalaliYear(year) ? 30 : 29;
349
+ },
350
+ getDayOfWeek: function (jalaliYear, jalaliMonth, jalaliDay) {
351
+ const [gregorianYear, gregorianMonth, gregorianDay] = this.jalaliToGregorian(jalaliYear, jalaliMonth, jalaliDay);
352
+ const date = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);
353
+ return date.getDay();
354
+ },
355
+ getDaysInYear: function (year) {
356
+ return this.isLeapJalaliYear(year) ? 366 : 365;
357
+ },
358
+ isValidDate: function (year, month, day) {
359
+ if (year < 0 || month < 1 || month > 12 || day < 1)
360
+ return false;
361
+ return day <= this.getDaysInMonth(year, month);
362
+ },
363
+ };
364
+
365
+ class JalaliDate {
366
+ year;
367
+ month;
368
+ day;
369
+ constructor(year, month, day) {
370
+ this.year = year;
371
+ this.month = month;
372
+ this.day = day;
373
+ }
374
+ valueOf() {
375
+ const [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(this.year, this.month, this.day);
376
+ return new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getTime();
377
+ }
378
+ toString() {
379
+ return `${this.year}/${String(this.month).padStart(2, '0')}/${String(this.day).padStart(2, '0')}`;
380
+ }
381
+ }
382
+
383
+ class BrnJalaliDateAdapter {
384
+ create({ year, month, day }) {
385
+ const now = this.now();
386
+ const m = month !== undefined ? month + 1 : now.month;
387
+ return this._constrain(year ?? now.year, m, day ?? now.day);
388
+ }
389
+ now() {
390
+ const today = new Date();
391
+ const [jalaliYear, jalaliMonth, jalaliDay] = PersianDate.gregorianToJalali(today.getFullYear(), today.getMonth() + 1, today.getDate());
392
+ return this._constrain(jalaliYear, jalaliMonth, jalaliDay);
393
+ }
394
+ set(date, values) {
395
+ const year = values.year ?? date.year;
396
+ const month = values.month !== undefined ? values.month + 1 : date.month;
397
+ const day = values.day ?? date.day;
398
+ return this._constrain(year, month, day);
399
+ }
400
+ add(date, duration) {
401
+ let { year, month, day } = date;
402
+ if (duration.years) {
403
+ year += duration.years;
404
+ }
405
+ if (duration.months) {
406
+ month += duration.months;
407
+ if (month > 12) {
408
+ year += Math.floor((month - 1) / 12);
409
+ month = ((month - 1) % 12) + 1;
410
+ }
411
+ else if (month < 1) {
412
+ year += Math.floor((month - 1) / 12);
413
+ month = ((((month - 1) % 12) + 12) % 12) + 1;
414
+ }
415
+ day = Math.min(day, PersianDate.getDaysInMonth(year, month));
416
+ }
417
+ if (duration.days) {
418
+ const [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(year, month, day);
419
+ const jsDate = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);
420
+ jsDate.setDate(jsDate.getDate() + duration.days);
421
+ [year, month, day] = PersianDate.gregorianToJalali(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());
422
+ }
423
+ return this._constrain(year, month, day);
424
+ }
425
+ subtract(date, duration) {
426
+ return this.add(date, {
427
+ years: duration.years ? -duration.years : undefined,
428
+ months: duration.months ? -duration.months : undefined,
429
+ days: duration.days ? -duration.days : undefined,
430
+ });
431
+ }
432
+ compare(a, b) {
433
+ const diff = a.valueOf() - b.valueOf();
434
+ return diff === 0 ? 0 : diff > 0 ? 1 : -1;
435
+ }
436
+ isEqual(a, b) {
437
+ return a.valueOf() === b.valueOf();
438
+ }
439
+ isBefore(a, b) {
440
+ return a.valueOf() < b.valueOf();
441
+ }
442
+ isAfter(a, b) {
443
+ return a.valueOf() > b.valueOf();
444
+ }
445
+ isSameDay(a, b) {
446
+ return a.year === b.year && a.month === b.month && a.day === b.day;
447
+ }
448
+ isSameMonth(a, b) {
449
+ return a.year === b.year && a.month === b.month;
450
+ }
451
+ isSameYear(a, b) {
452
+ return a.year === b.year;
453
+ }
454
+ getYear(date) {
455
+ return date.year;
456
+ }
457
+ getMonth(date) {
458
+ return date.month - 1;
459
+ }
460
+ getDate(date) {
461
+ return date.day;
462
+ }
463
+ getDay(date) {
464
+ const [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(date.year, date.month, date.day);
465
+ return new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getDay();
466
+ }
467
+ getHours(_date) {
468
+ return 0;
469
+ }
470
+ getMinutes(_date) {
471
+ return 0;
472
+ }
473
+ getSeconds(_date) {
474
+ return 0;
475
+ }
476
+ getMilliseconds(_date) {
477
+ return 0;
478
+ }
479
+ getTime(date) {
480
+ return date.valueOf();
481
+ }
482
+ startOfMonth(date) {
483
+ return new JalaliDate(date.year, date.month, 1);
484
+ }
485
+ endOfMonth(date) {
486
+ return new JalaliDate(date.year, date.month, PersianDate.getDaysInMonth(date.year, date.month));
487
+ }
488
+ startOfDay(date) {
489
+ return date;
490
+ }
491
+ endOfDay(date) {
492
+ return date;
493
+ }
494
+ _constrain(year, month, day) {
495
+ const maxDay = PersianDate.getDaysInMonth(year, month);
496
+ return new JalaliDate(year, month, Math.min(day, maxDay));
497
+ }
498
+ }
499
+
266
500
  /**
267
501
  * Generated bundle index. Do not edit.
268
502
  */
269
503
 
270
- export { BrnDateAdapterToken, BrnNativeDateAdapter, BrnUtcDateAdapter, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
504
+ export { BrnDateAdapterToken, BrnJalaliDateAdapter, BrnNativeDateAdapter, BrnUtcDateAdapter, JalaliDate, PersianDate, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
271
505
  //# sourceMappingURL=spartan-ng-brain-date-time.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"spartan-ng-brain-date-time.mjs","sources":["../../../../libs/brain/date-time/src/lib/native-date-adapter.ts","../../../../libs/brain/date-time/src/lib/utc-date-adapter.ts","../../../../libs/brain/date-time/src/lib/date-adapter.ts","../../../../libs/brain/date-time/src/spartan-ng-brain-date-time.ts"],"sourcesContent":["import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnNativeDateAdapter implements BrnDateAdapter<Date> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\n\t\treturn new Date(\n\t\t\tyear ?? now.getFullYear(),\n\t\t\tmonth ?? now.getMonth(),\n\t\t\tday ?? now.getDate(),\n\t\t\thour ?? now.getHours(),\n\t\t\tminute ?? now.getMinutes(),\n\t\t\tsecond ?? now.getSeconds(),\n\t\t\tmillisecond ?? now.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): Date {\n\t\treturn new Date();\n\t}\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\treturn new Date(\n\t\t\tvalues.year ?? date.getFullYear(),\n\t\t\tvalues.month ?? date.getMonth(),\n\t\t\tvalues.day ?? date.getDate(),\n\t\t\tvalues.hour ?? date.getHours(),\n\t\t\tvalues.minute ?? date.getMinutes(),\n\t\t\tvalues.second ?? date.getSeconds(),\n\t\t\tvalues.millisecond ?? date.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() + (duration.years ?? 0),\n\t\t\tdate.getMonth() + (duration.months ?? 0),\n\t\t\tdate.getDate() + (duration.days ?? 0),\n\t\t\tdate.getHours() + (duration.hours ?? 0),\n\t\t\tdate.getMinutes() + (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() + (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() + (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Subtract a duration from the date time object\n\t */\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() - (duration.years ?? 0),\n\t\t\tdate.getMonth() - (duration.months ?? 0),\n\t\t\tdate.getDate() - (duration.days ?? 0),\n\t\t\tdate.getHours() - (duration.hours ?? 0),\n\t\t\tdate.getMinutes() - (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() - (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() - (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Compare two date time objects\n\t */\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getDate() === b.getDate();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getMonth() === b.getMonth();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getFullYear() === b.getFullYear();\n\t}\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: Date): number {\n\t\treturn date.getFullYear();\n\t}\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: Date): number {\n\t\treturn date.getMonth();\n\t}\n\n\t/**\n\t * Get the day.\n\t */\n\tgetDay(date: Date): number {\n\t\treturn date.getDay();\n\t}\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: Date): number {\n\t\treturn date.getDate();\n\t}\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: Date): number {\n\t\treturn date.getHours();\n\t}\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: Date): number {\n\t\treturn date.getMinutes();\n\t}\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: Date): number {\n\t\treturn date.getSeconds();\n\t}\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getMilliseconds();\n\t}\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), 1);\n\t}\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth() + 1, 0);\n\t}\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t}\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n\t}\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n}\n","import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnUtcDateAdapter implements BrnDateAdapter<Date> {\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\t\tconst utcTime = Date.UTC(\n\t\t\tyear ?? now.getUTCFullYear(),\n\t\t\tmonth ?? now.getUTCMonth(),\n\t\t\tday ?? now.getUTCDate(),\n\t\t\thour ?? now.getUTCHours(),\n\t\t\tminute ?? now.getUTCMinutes(),\n\t\t\tsecond ?? now.getUTCSeconds(),\n\t\t\tmillisecond ?? now.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tnow(): Date {\n\t\treturn new Date(Date.now());\n\t}\n\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\tconst utcTime = Date.UTC(\n\t\t\tvalues.year ?? date.getUTCFullYear(),\n\t\t\tvalues.month ?? date.getUTCMonth(),\n\t\t\tvalues.day ?? date.getUTCDate(),\n\t\t\tvalues.hour ?? date.getUTCHours(),\n\t\t\tvalues.minute ?? date.getUTCMinutes(),\n\t\t\tvalues.second ?? date.getUTCSeconds(),\n\t\t\tvalues.millisecond ?? date.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() + (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() + (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() + (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() + (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() + (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() + (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() + (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() - (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() - (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() - (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() - (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() - (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() - (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() - (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getUTCDate() === b.getUTCDate();\n\t}\n\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getUTCMonth() === b.getUTCMonth();\n\t}\n\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getUTCFullYear() === b.getUTCFullYear();\n\t}\n\n\tgetYear(date: Date): number {\n\t\treturn date.getUTCFullYear();\n\t}\n\n\tgetMonth(date: Date): number {\n\t\treturn date.getUTCMonth();\n\t}\n\n\tgetDay(date: Date): number {\n\t\treturn date.getUTCDay();\n\t}\n\n\tgetDate(date: Date): number {\n\t\treturn date.getUTCDate();\n\t}\n\n\tgetHours(date: Date): number {\n\t\treturn date.getUTCHours();\n\t}\n\n\tgetMinutes(date: Date): number {\n\t\treturn date.getUTCMinutes();\n\t}\n\n\tgetSeconds(date: Date): number {\n\t\treturn date.getUTCSeconds();\n\t}\n\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getUTCMilliseconds();\n\t}\n\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n\t}\n\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0, 23, 59, 59, 999));\n\t}\n\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n\t}\n\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 23, 59, 59, 999));\n\t}\n}\n","import { type ClassProvider, InjectionToken, type Type, inject } from '@angular/core';\nimport { BrnNativeDateAdapter } from './native-date-adapter';\nimport { BrnUtcDateAdapter } from './utc-date-adapter';\n\n/**\n * An abstraction that can be used to create and modify date time objects\n * immutably regardless of the underlying implementation.\n */\nexport interface BrnDateAdapter<T> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate(values: BrnDateUnits): T;\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): T;\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: T, values: BrnDateUnits): T;\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Subtract a duration from the date time object.\n\t */\n\tsubtract(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Compare two date time objects.\n\t */\n\tcompare(a: T, b: T): number;\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: T, b: T): boolean;\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: T): number;\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: T): number;\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: T): number;\n\n\t/**\n\t * Get the day of the week.\n\t *\n\t * Returns a value between 0 and 6 where 0 is Sunday\n\t */\n\tgetDay(date: T): number;\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: T): number;\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: T): number;\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: T): number;\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: T): number;\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: T): number;\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: T): T;\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: T): T;\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: T): T;\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: T): T;\n}\n\nexport interface BrnDateUnits {\n\t/**\n\t * The year.\n\t */\n\tyear?: number;\n\n\t/**\n\t * The month.\n\t */\n\tmonth?: number;\n\n\t/**\n\t * The day.\n\t */\n\tday?: number;\n\n\t/**\n\t * The hour.\n\t */\n\thour?: number;\n\n\t/**\n\t * The minute.\n\t */\n\tminute?: number;\n\n\t/**\n\t * The second.\n\t */\n\tsecond?: number;\n\n\t/**\n\t * The millisecond.\n\t */\n\tmillisecond?: number;\n}\n\nexport interface BrnDuration {\n\t/**\n\t * The years.\n\t */\n\tyears?: number;\n\n\t/**\n\t * The months.\n\t */\n\tmonths?: number;\n\n\t/**\n\t * The days.\n\t */\n\tdays?: number;\n\n\t/**\n\t * The hours.\n\t */\n\thours?: number;\n\n\t/**\n\t * The minutes.\n\t */\n\tminutes?: number;\n\n\t/**\n\t * The seconds.\n\t */\n\tseconds?: number;\n\n\t/**\n\t * The milliseconds.\n\t */\n\tmilliseconds?: number;\n}\n\nexport const BrnDateAdapterToken = new InjectionToken<BrnDateAdapter<unknown>>('BrnDateAdapterToken');\n\n/**\n * Inject the DateAdapter instance\n */\nexport function injectDateAdapter<T>(): BrnDateAdapter<T> {\n\treturn (inject(BrnDateAdapterToken, { optional: true }) as BrnDateAdapter<T>) ?? new BrnNativeDateAdapter();\n}\n\n/**\n * Provide the DateAdapter instance\n */\nexport function provideDateAdapter<T>(adapter: Type<BrnDateAdapter<T>>): ClassProvider {\n\treturn { provide: BrnDateAdapterToken, useClass: adapter };\n}\n\n/**\n * Provide the native date adapter\n */\nexport function provideNativeDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnNativeDateAdapter);\n}\n\n/**\n * Provide the UTC date adapter\n */\nexport function provideUtcDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnUtcDateAdapter);\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":"spartan-ng-brain-date-time.mjs","sources":["../../../../libs/brain/date-time/src/lib/native-date-adapter.ts","../../../../libs/brain/date-time/src/lib/utc-date-adapter.ts","../../../../libs/brain/date-time/src/lib/date-adapter.ts","../../../../libs/brain/date-time/src/lib/persian-date.ts","../../../../libs/brain/date-time/src/lib/jalali-date.ts","../../../../libs/brain/date-time/src/lib/jalali-date-adapter.ts","../../../../libs/brain/date-time/src/spartan-ng-brain-date-time.ts"],"sourcesContent":["import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnNativeDateAdapter implements BrnDateAdapter<Date> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\n\t\treturn new Date(\n\t\t\tyear ?? now.getFullYear(),\n\t\t\tmonth ?? now.getMonth(),\n\t\t\tday ?? now.getDate(),\n\t\t\thour ?? now.getHours(),\n\t\t\tminute ?? now.getMinutes(),\n\t\t\tsecond ?? now.getSeconds(),\n\t\t\tmillisecond ?? now.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): Date {\n\t\treturn new Date();\n\t}\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\treturn new Date(\n\t\t\tvalues.year ?? date.getFullYear(),\n\t\t\tvalues.month ?? date.getMonth(),\n\t\t\tvalues.day ?? date.getDate(),\n\t\t\tvalues.hour ?? date.getHours(),\n\t\t\tvalues.minute ?? date.getMinutes(),\n\t\t\tvalues.second ?? date.getSeconds(),\n\t\t\tvalues.millisecond ?? date.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() + (duration.years ?? 0),\n\t\t\tdate.getMonth() + (duration.months ?? 0),\n\t\t\tdate.getDate() + (duration.days ?? 0),\n\t\t\tdate.getHours() + (duration.hours ?? 0),\n\t\t\tdate.getMinutes() + (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() + (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() + (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Subtract a duration from the date time object\n\t */\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() - (duration.years ?? 0),\n\t\t\tdate.getMonth() - (duration.months ?? 0),\n\t\t\tdate.getDate() - (duration.days ?? 0),\n\t\t\tdate.getHours() - (duration.hours ?? 0),\n\t\t\tdate.getMinutes() - (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() - (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() - (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Compare two date time objects\n\t */\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getDate() === b.getDate();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getMonth() === b.getMonth();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getFullYear() === b.getFullYear();\n\t}\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: Date): number {\n\t\treturn date.getFullYear();\n\t}\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: Date): number {\n\t\treturn date.getMonth();\n\t}\n\n\t/**\n\t * Get the day.\n\t */\n\tgetDay(date: Date): number {\n\t\treturn date.getDay();\n\t}\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: Date): number {\n\t\treturn date.getDate();\n\t}\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: Date): number {\n\t\treturn date.getHours();\n\t}\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: Date): number {\n\t\treturn date.getMinutes();\n\t}\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: Date): number {\n\t\treturn date.getSeconds();\n\t}\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getMilliseconds();\n\t}\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), 1);\n\t}\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth() + 1, 0);\n\t}\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t}\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n\t}\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n}\n","import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnUtcDateAdapter implements BrnDateAdapter<Date> {\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\t\tconst utcTime = Date.UTC(\n\t\t\tyear ?? now.getUTCFullYear(),\n\t\t\tmonth ?? now.getUTCMonth(),\n\t\t\tday ?? now.getUTCDate(),\n\t\t\thour ?? now.getUTCHours(),\n\t\t\tminute ?? now.getUTCMinutes(),\n\t\t\tsecond ?? now.getUTCSeconds(),\n\t\t\tmillisecond ?? now.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tnow(): Date {\n\t\treturn new Date(Date.now());\n\t}\n\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\tconst utcTime = Date.UTC(\n\t\t\tvalues.year ?? date.getUTCFullYear(),\n\t\t\tvalues.month ?? date.getUTCMonth(),\n\t\t\tvalues.day ?? date.getUTCDate(),\n\t\t\tvalues.hour ?? date.getUTCHours(),\n\t\t\tvalues.minute ?? date.getUTCMinutes(),\n\t\t\tvalues.second ?? date.getUTCSeconds(),\n\t\t\tvalues.millisecond ?? date.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() + (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() + (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() + (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() + (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() + (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() + (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() + (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() - (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() - (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() - (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() - (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() - (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() - (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() - (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getUTCDate() === b.getUTCDate();\n\t}\n\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getUTCMonth() === b.getUTCMonth();\n\t}\n\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getUTCFullYear() === b.getUTCFullYear();\n\t}\n\n\tgetYear(date: Date): number {\n\t\treturn date.getUTCFullYear();\n\t}\n\n\tgetMonth(date: Date): number {\n\t\treturn date.getUTCMonth();\n\t}\n\n\tgetDay(date: Date): number {\n\t\treturn date.getUTCDay();\n\t}\n\n\tgetDate(date: Date): number {\n\t\treturn date.getUTCDate();\n\t}\n\n\tgetHours(date: Date): number {\n\t\treturn date.getUTCHours();\n\t}\n\n\tgetMinutes(date: Date): number {\n\t\treturn date.getUTCMinutes();\n\t}\n\n\tgetSeconds(date: Date): number {\n\t\treturn date.getUTCSeconds();\n\t}\n\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getUTCMilliseconds();\n\t}\n\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n\t}\n\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0, 23, 59, 59, 999));\n\t}\n\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n\t}\n\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 23, 59, 59, 999));\n\t}\n}\n","import { type ClassProvider, InjectionToken, type Type, inject } from '@angular/core';\nimport { BrnNativeDateAdapter } from './native-date-adapter';\nimport { BrnUtcDateAdapter } from './utc-date-adapter';\n\n/**\n * An abstraction that can be used to create and modify date time objects\n * immutably regardless of the underlying implementation.\n */\nexport interface BrnDateAdapter<T> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate(values: BrnDateUnits): T;\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): T;\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: T, values: BrnDateUnits): T;\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Subtract a duration from the date time object.\n\t */\n\tsubtract(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Compare two date time objects.\n\t */\n\tcompare(a: T, b: T): number;\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: T, b: T): boolean;\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: T): number;\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: T): number;\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: T): number;\n\n\t/**\n\t * Get the day of the week.\n\t *\n\t * Returns a value between 0 and 6 where 0 is Sunday\n\t */\n\tgetDay(date: T): number;\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: T): number;\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: T): number;\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: T): number;\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: T): number;\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: T): number;\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: T): T;\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: T): T;\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: T): T;\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: T): T;\n}\n\nexport interface BrnDateUnits {\n\t/**\n\t * The year.\n\t */\n\tyear?: number;\n\n\t/**\n\t * The month.\n\t */\n\tmonth?: number;\n\n\t/**\n\t * The day.\n\t */\n\tday?: number;\n\n\t/**\n\t * The hour.\n\t */\n\thour?: number;\n\n\t/**\n\t * The minute.\n\t */\n\tminute?: number;\n\n\t/**\n\t * The second.\n\t */\n\tsecond?: number;\n\n\t/**\n\t * The millisecond.\n\t */\n\tmillisecond?: number;\n}\n\nexport interface BrnDuration {\n\t/**\n\t * The years.\n\t */\n\tyears?: number;\n\n\t/**\n\t * The months.\n\t */\n\tmonths?: number;\n\n\t/**\n\t * The days.\n\t */\n\tdays?: number;\n\n\t/**\n\t * The hours.\n\t */\n\thours?: number;\n\n\t/**\n\t * The minutes.\n\t */\n\tminutes?: number;\n\n\t/**\n\t * The seconds.\n\t */\n\tseconds?: number;\n\n\t/**\n\t * The milliseconds.\n\t */\n\tmilliseconds?: number;\n}\n\nexport const BrnDateAdapterToken = new InjectionToken<BrnDateAdapter<unknown>>('BrnDateAdapterToken');\n\n/**\n * Inject the DateAdapter instance\n */\nexport function injectDateAdapter<T>(): BrnDateAdapter<T> {\n\treturn (inject(BrnDateAdapterToken, { optional: true }) as BrnDateAdapter<T>) ?? new BrnNativeDateAdapter();\n}\n\n/**\n * Provide the DateAdapter instance\n */\nexport function provideDateAdapter<T>(adapter: Type<BrnDateAdapter<T>>): ClassProvider {\n\treturn { provide: BrnDateAdapterToken, useClass: adapter };\n}\n\n/**\n * Provide the native date adapter\n */\nexport function provideNativeDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnNativeDateAdapter);\n}\n\n/**\n * Provide the UTC date adapter\n */\nexport function provideUtcDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnUtcDateAdapter);\n}\n","export const PersianDate = {\n\tgregorianDaysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n\tjalaliDaysInMonth: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29],\n\n\tjalaliToGregorian: function (jalaliYear: number, jalaliMonth: number, jalaliDay: number): [number, number, number] {\n\t\tconst jalaliYearDelta = jalaliYear - 979;\n\t\tconst jalaliMonthIdx = jalaliMonth - 1;\n\t\tconst jalaliDayIdx = jalaliDay - 1;\n\n\t\tlet jalaliDayNo =\n\t\t\t365 * jalaliYearDelta + Math.floor(jalaliYearDelta / 33) * 8 + Math.floor(((jalaliYearDelta % 33) + 3) / 4);\n\t\tfor (let i = 0; i < jalaliMonthIdx; ++i) jalaliDayNo += this.jalaliDaysInMonth[i];\n\n\t\tjalaliDayNo += jalaliDayIdx;\n\n\t\tlet gregorianDayNo = jalaliDayNo + 79;\n\n\t\tlet gregorianYear = 1600 + 400 * Math.floor(gregorianDayNo / 146097);\n\t\tgregorianDayNo = gregorianDayNo % 146097;\n\n\t\tlet leap = true;\n\t\tif (gregorianDayNo >= 36525) {\n\t\t\tgregorianDayNo--;\n\t\t\tgregorianYear += 100 * Math.floor(gregorianDayNo / 36524);\n\t\t\tgregorianDayNo = gregorianDayNo % 36524;\n\n\t\t\tif (gregorianDayNo >= 365) gregorianDayNo++;\n\t\t\telse leap = false;\n\t\t}\n\n\t\tgregorianYear += 4 * Math.floor(gregorianDayNo / 1461);\n\t\tgregorianDayNo %= 1461;\n\n\t\tif (gregorianDayNo >= 366) {\n\t\t\tleap = false;\n\t\t\tgregorianDayNo--;\n\t\t\tgregorianYear += Math.floor(gregorianDayNo / 365);\n\t\t\tgregorianDayNo = gregorianDayNo % 365;\n\t\t}\n\n\t\tlet i = 0;\n\t\tfor (; gregorianDayNo >= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0); i++) {\n\t\t\tgregorianDayNo -= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0);\n\t\t}\n\n\t\tconst gregorianMonth = i + 1;\n\t\tconst gregorianDay = gregorianDayNo + 1;\n\n\t\treturn [gregorianYear, gregorianMonth, gregorianDay];\n\t},\n\n\tgregorianToJalali: function (\n\t\tgregorianYear: number,\n\t\tgregorianMonth: number,\n\t\tgregorianDay: number,\n\t): [number, number, number] {\n\t\tconst gregorianYearDelta = gregorianYear - 1600;\n\t\tconst gregorianMonthIdx = gregorianMonth - 1;\n\t\tconst gregorianDayIdx = gregorianDay - 1;\n\n\t\tlet gregorianDayNo =\n\t\t\t365 * gregorianYearDelta +\n\t\t\tMath.floor((gregorianYearDelta + 3) / 4) -\n\t\t\tMath.floor((gregorianYearDelta + 99) / 100) +\n\t\t\tMath.floor((gregorianYearDelta + 399) / 400);\n\n\t\tfor (let i = 0; i < gregorianMonthIdx; ++i) gregorianDayNo += this.gregorianDaysInMonth[i];\n\n\t\tif (\n\t\t\tgregorianMonthIdx > 1 &&\n\t\t\t((gregorianYearDelta % 4 === 0 && gregorianYearDelta % 100 !== 0) || gregorianYearDelta % 400 === 0)\n\t\t)\n\t\t\tgregorianDayNo++;\n\n\t\tgregorianDayNo += gregorianDayIdx;\n\n\t\tlet jalaliDayNo = gregorianDayNo - 79;\n\t\tconst jalaliCycleCount = Math.floor(jalaliDayNo / 12053);\n\t\tjalaliDayNo = jalaliDayNo % 12053;\n\n\t\tlet jalaliYear = 979 + 33 * jalaliCycleCount + 4 * Math.floor(jalaliDayNo / 1461);\n\n\t\tjalaliDayNo %= 1461;\n\n\t\tif (jalaliDayNo >= 366) {\n\t\t\tjalaliYear += Math.floor((jalaliDayNo - 1) / 365);\n\t\t\tjalaliDayNo = (jalaliDayNo - 1) % 365;\n\t\t}\n\n\t\tlet i = 0;\n\t\tfor (; i < 11 && jalaliDayNo >= this.jalaliDaysInMonth[i]; ++i) {\n\t\t\tjalaliDayNo -= this.jalaliDaysInMonth[i];\n\t\t}\n\n\t\tconst jalaliMonth = i + 1;\n\t\tconst jalaliDay = jalaliDayNo + 1;\n\n\t\treturn [jalaliYear, jalaliMonth, jalaliDay];\n\t},\n\n\tisLeapJalaliYear: function (year: number): boolean {\n\t\tconst breaks = [1, 5, 9, 13, 17, 22, 26, 30];\n\t\treturn breaks.includes(year % 33);\n\t},\n\n\tgetDaysInMonth: function (year: number, month: number): number {\n\t\tif (month < 1 || month > 12) return 0;\n\t\tif (month <= 6) return 31;\n\t\tif (month <= 11) return 30;\n\t\treturn this.isLeapJalaliYear(year) ? 30 : 29;\n\t},\n\n\tgetDayOfWeek: function (jalaliYear: number, jalaliMonth: number, jalaliDay: number): number {\n\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = this.jalaliToGregorian(jalaliYear, jalaliMonth, jalaliDay);\n\t\tconst date = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);\n\t\treturn date.getDay();\n\t},\n\n\tgetDaysInYear: function (year: number): number {\n\t\treturn this.isLeapJalaliYear(year) ? 366 : 365;\n\t},\n\n\tisValidDate: function (year: number, month: number, day: number): boolean {\n\t\tif (year < 0 || month < 1 || month > 12 || day < 1) return false;\n\t\treturn day <= this.getDaysInMonth(year, month);\n\t},\n};\n","import { PersianDate } from './persian-date';\n\nexport class JalaliDate {\n\tconstructor(\n\t\tpublic readonly year: number,\n\t\tpublic readonly month: number,\n\t\tpublic readonly day: number,\n\t) {}\n\n\tvalueOf(): number {\n\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(\n\t\t\tthis.year,\n\t\t\tthis.month,\n\t\t\tthis.day,\n\t\t);\n\t\treturn new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getTime();\n\t}\n\n\ttoString(): string {\n\t\treturn `${this.year}/${String(this.month).padStart(2, '0')}/${String(this.day).padStart(2, '0')}`;\n\t}\n}\n","import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\nimport { JalaliDate } from './jalali-date';\nimport { PersianDate } from './persian-date';\n\nexport class BrnJalaliDateAdapter implements BrnDateAdapter<JalaliDate> {\n\tcreate({ year, month, day }: BrnDateUnits): JalaliDate {\n\t\tconst now = this.now();\n\t\tconst m = month !== undefined ? month + 1 : now.month;\n\t\treturn this._constrain(year ?? now.year, m, day ?? now.day);\n\t}\n\n\tnow(): JalaliDate {\n\t\tconst today = new Date();\n\t\tconst [jalaliYear, jalaliMonth, jalaliDay] = PersianDate.gregorianToJalali(\n\t\t\ttoday.getFullYear(),\n\t\t\ttoday.getMonth() + 1,\n\t\t\ttoday.getDate(),\n\t\t);\n\t\treturn this._constrain(jalaliYear, jalaliMonth, jalaliDay);\n\t}\n\n\tset(date: JalaliDate, values: BrnDateUnits): JalaliDate {\n\t\tconst year = values.year ?? date.year;\n\t\tconst month = values.month !== undefined ? values.month + 1 : date.month;\n\t\tconst day = values.day ?? date.day;\n\t\treturn this._constrain(year, month, day);\n\t}\n\n\tadd(date: JalaliDate, duration: BrnDuration): JalaliDate {\n\t\tlet { year, month, day } = date;\n\n\t\tif (duration.years) {\n\t\t\tyear += duration.years;\n\t\t}\n\n\t\tif (duration.months) {\n\t\t\tmonth += duration.months;\n\t\t\tif (month > 12) {\n\t\t\t\tyear += Math.floor((month - 1) / 12);\n\t\t\t\tmonth = ((month - 1) % 12) + 1;\n\t\t\t} else if (month < 1) {\n\t\t\t\tyear += Math.floor((month - 1) / 12);\n\t\t\t\tmonth = ((((month - 1) % 12) + 12) % 12) + 1;\n\t\t\t}\n\t\t\tday = Math.min(day, PersianDate.getDaysInMonth(year, month));\n\t\t}\n\n\t\tif (duration.days) {\n\t\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(year, month, day);\n\t\t\tconst jsDate = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);\n\t\t\tjsDate.setDate(jsDate.getDate() + duration.days);\n\t\t\t[year, month, day] = PersianDate.gregorianToJalali(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n\t\t}\n\n\t\treturn this._constrain(year, month, day);\n\t}\n\n\tsubtract(date: JalaliDate, duration: BrnDuration): JalaliDate {\n\t\treturn this.add(date, {\n\t\t\tyears: duration.years ? -duration.years : undefined,\n\t\t\tmonths: duration.months ? -duration.months : undefined,\n\t\t\tdays: duration.days ? -duration.days : undefined,\n\t\t});\n\t}\n\n\tcompare(a: JalaliDate, b: JalaliDate): number {\n\t\tconst diff = a.valueOf() - b.valueOf();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\tisEqual(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.valueOf() === b.valueOf();\n\t}\n\n\tisBefore(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.valueOf() < b.valueOf();\n\t}\n\n\tisAfter(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.valueOf() > b.valueOf();\n\t}\n\n\tisSameDay(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.year === b.year && a.month === b.month && a.day === b.day;\n\t}\n\n\tisSameMonth(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.year === b.year && a.month === b.month;\n\t}\n\n\tisSameYear(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.year === b.year;\n\t}\n\n\tgetYear(date: JalaliDate): number {\n\t\treturn date.year;\n\t}\n\n\tgetMonth(date: JalaliDate): number {\n\t\treturn date.month - 1;\n\t}\n\n\tgetDate(date: JalaliDate): number {\n\t\treturn date.day;\n\t}\n\n\tgetDay(date: JalaliDate): number {\n\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(\n\t\t\tdate.year,\n\t\t\tdate.month,\n\t\t\tdate.day,\n\t\t);\n\t\treturn new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getDay();\n\t}\n\n\tgetHours(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetMinutes(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetSeconds(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetMilliseconds(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetTime(date: JalaliDate): number {\n\t\treturn date.valueOf();\n\t}\n\n\tstartOfMonth(date: JalaliDate): JalaliDate {\n\t\treturn new JalaliDate(date.year, date.month, 1);\n\t}\n\n\tendOfMonth(date: JalaliDate): JalaliDate {\n\t\treturn new JalaliDate(date.year, date.month, PersianDate.getDaysInMonth(date.year, date.month));\n\t}\n\n\tstartOfDay(date: JalaliDate): JalaliDate {\n\t\treturn date;\n\t}\n\n\tendOfDay(date: JalaliDate): JalaliDate {\n\t\treturn date;\n\t}\n\n\tprivate _constrain(year: number, month: number, day: number): JalaliDate {\n\t\tconst maxDay = PersianDate.getDaysInMonth(year, month);\n\t\treturn new JalaliDate(year, month, Math.min(day, maxDay));\n\t}\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": "@spartan-ng/brain",
3
- "version": "0.0.1-alpha.714",
3
+ "version": "0.0.1-alpha.715",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/spartan-ng/spartan"
@@ -186,6 +186,44 @@ declare function provideNativeDateAdapter(): ClassProvider;
186
186
  */
187
187
  declare function provideUtcDateAdapter(): ClassProvider;
188
188
 
189
+ declare class JalaliDate {
190
+ readonly year: number;
191
+ readonly month: number;
192
+ readonly day: number;
193
+ constructor(year: number, month: number, day: number);
194
+ valueOf(): number;
195
+ toString(): string;
196
+ }
197
+
198
+ declare class BrnJalaliDateAdapter implements BrnDateAdapter<JalaliDate> {
199
+ create({ year, month, day }: BrnDateUnits): JalaliDate;
200
+ now(): JalaliDate;
201
+ set(date: JalaliDate, values: BrnDateUnits): JalaliDate;
202
+ add(date: JalaliDate, duration: BrnDuration): JalaliDate;
203
+ subtract(date: JalaliDate, duration: BrnDuration): JalaliDate;
204
+ compare(a: JalaliDate, b: JalaliDate): number;
205
+ isEqual(a: JalaliDate, b: JalaliDate): boolean;
206
+ isBefore(a: JalaliDate, b: JalaliDate): boolean;
207
+ isAfter(a: JalaliDate, b: JalaliDate): boolean;
208
+ isSameDay(a: JalaliDate, b: JalaliDate): boolean;
209
+ isSameMonth(a: JalaliDate, b: JalaliDate): boolean;
210
+ isSameYear(a: JalaliDate, b: JalaliDate): boolean;
211
+ getYear(date: JalaliDate): number;
212
+ getMonth(date: JalaliDate): number;
213
+ getDate(date: JalaliDate): number;
214
+ getDay(date: JalaliDate): number;
215
+ getHours(_date: JalaliDate): number;
216
+ getMinutes(_date: JalaliDate): number;
217
+ getSeconds(_date: JalaliDate): number;
218
+ getMilliseconds(_date: JalaliDate): number;
219
+ getTime(date: JalaliDate): number;
220
+ startOfMonth(date: JalaliDate): JalaliDate;
221
+ endOfMonth(date: JalaliDate): JalaliDate;
222
+ startOfDay(date: JalaliDate): JalaliDate;
223
+ endOfDay(date: JalaliDate): JalaliDate;
224
+ private _constrain;
225
+ }
226
+
189
227
  declare class BrnNativeDateAdapter implements BrnDateAdapter<Date> {
190
228
  /**
191
229
  * Create a new date time object.
@@ -289,6 +327,18 @@ declare class BrnNativeDateAdapter implements BrnDateAdapter<Date> {
289
327
  getTime(date: Date): number;
290
328
  }
291
329
 
330
+ declare const PersianDate: {
331
+ gregorianDaysInMonth: number[];
332
+ jalaliDaysInMonth: number[];
333
+ jalaliToGregorian: (jalaliYear: number, jalaliMonth: number, jalaliDay: number) => [number, number, number];
334
+ gregorianToJalali: (gregorianYear: number, gregorianMonth: number, gregorianDay: number) => [number, number, number];
335
+ isLeapJalaliYear: (year: number) => boolean;
336
+ getDaysInMonth: (year: number, month: number) => number;
337
+ getDayOfWeek: (jalaliYear: number, jalaliMonth: number, jalaliDay: number) => number;
338
+ getDaysInYear: (year: number) => number;
339
+ isValidDate: (year: number, month: number, day: number) => boolean;
340
+ };
341
+
292
342
  declare class BrnUtcDateAdapter implements BrnDateAdapter<Date> {
293
343
  create({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date;
294
344
  now(): Date;
@@ -317,5 +367,5 @@ declare class BrnUtcDateAdapter implements BrnDateAdapter<Date> {
317
367
  endOfDay(date: Date): Date;
318
368
  }
319
369
 
320
- export { BrnDateAdapterToken, BrnNativeDateAdapter, BrnUtcDateAdapter, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
370
+ export { BrnDateAdapterToken, BrnJalaliDateAdapter, BrnNativeDateAdapter, BrnUtcDateAdapter, JalaliDate, PersianDate, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
321
371
  export type { BrnDateAdapter, BrnDateUnits, BrnDuration };