urdu-text-utils 0.1.5 → 0.1.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.
package/dist/index.js CHANGED
@@ -3506,6 +3506,201 @@ function urduSlug(input, options = {}) {
3506
3506
  return slug;
3507
3507
  }
3508
3508
 
3509
- export { URDU_STOP_WORDS, analyzeUrdu, compareUrdu, convertNumbers, countSentences, countWords, editDistance, filterStopWords, foldUrdu, hasUrduSpecificLetters, highlightUrdu, isStopWord, isUrdu, normalizeUrdu, numberToUrduWords, parseUrduNumber, removeDiacritics, removeStopWords, romanToUrdu, romanize, searchUrdu, searchUrduRanked, sortUrdu, splitSentences, splitWords, toArabicIndicDigits, toEnglishDigits, toUrduDigits, urduRatio, urduSlug };
3509
+ // src/date.ts
3510
+ var URDU_MONTHS_GREGORIAN = [
3511
+ "\u062C\u0646\u0648\u0631\u06CC",
3512
+ "\u0641\u0631\u0648\u0631\u06CC",
3513
+ "\u0645\u0627\u0631\u0686",
3514
+ "\u0627\u067E\u0631\u06CC\u0644",
3515
+ "\u0645\u0626\u06CC",
3516
+ "\u062C\u0648\u0646",
3517
+ "\u062C\u0648\u0644\u0627\u0626\u06CC",
3518
+ "\u0627\u06AF\u0633\u062A",
3519
+ "\u0633\u062A\u0645\u0628\u0631",
3520
+ "\u0627\u06A9\u062A\u0648\u0628\u0631",
3521
+ "\u0646\u0648\u0645\u0628\u0631",
3522
+ "\u062F\u0633\u0645\u0628\u0631"
3523
+ ];
3524
+ var URDU_MONTHS_HIJRI = [
3525
+ "\u0645\u062D\u0631\u0645",
3526
+ "\u0635\u0641\u0631",
3527
+ "\u0631\u0628\u06CC\u0639 \u0627\u0644\u0627\u0648\u0644",
3528
+ "\u0631\u0628\u06CC\u0639 \u0627\u0644\u062B\u0627\u0646\u06CC",
3529
+ "\u062C\u0645\u0627\u062F\u06CC \u0627\u0644\u0627\u0648\u0644",
3530
+ "\u062C\u0645\u0627\u062F\u06CC \u0627\u0644\u062B\u0627\u0646\u06CC",
3531
+ "\u0631\u062C\u0628",
3532
+ "\u0634\u0639\u0628\u0627\u0646",
3533
+ "\u0631\u0645\u0636\u0627\u0646 \u0627\u0644\u0645\u0628\u0627\u0631\u06A9",
3534
+ "\u0634\u0648\u0627\u0644",
3535
+ "\u0630\u06CC \u0627\u0644\u0642\u0639\u062F\u06C1",
3536
+ "\u0630\u06CC \u0627\u0644\u062D\u062C\u06C1"
3537
+ ];
3538
+ var URDU_WEEKDAYS = [
3539
+ "\u0627\u062A\u0648\u0627\u0631",
3540
+ "\u067E\u06CC\u0631",
3541
+ "\u0645\u0646\u06AF\u0644",
3542
+ "\u0628\u062F\u06BE",
3543
+ "\u062C\u0645\u0639\u0631\u0627\u062A",
3544
+ "\u062C\u0645\u0639\u06C1",
3545
+ "\u06C1\u0641\u062A\u06C1"
3546
+ ];
3547
+ function parseDateInput(input) {
3548
+ if (input instanceof Date) {
3549
+ return isNaN(input.getTime()) ? null : input;
3550
+ }
3551
+ const date = new Date(input);
3552
+ return isNaN(date.getTime()) ? null : date;
3553
+ }
3554
+ function getUrduMonthName(monthIndex, calendar = "gregorian") {
3555
+ const normalizedIndex = Math.floor(monthIndex) % 12;
3556
+ const idx = normalizedIndex < 0 ? normalizedIndex + 12 : normalizedIndex;
3557
+ return calendar === "hijri" ? URDU_MONTHS_HIJRI[idx] : URDU_MONTHS_GREGORIAN[idx];
3558
+ }
3559
+ function getUrduWeekdayName(dayIndex) {
3560
+ const normalizedIndex = Math.floor(dayIndex) % 7;
3561
+ const idx = normalizedIndex < 0 ? normalizedIndex + 7 : normalizedIndex;
3562
+ return URDU_WEEKDAYS[idx];
3563
+ }
3564
+ function formatUrduDate(date, pattern = "DD MMMM YYYY", options = {}) {
3565
+ const d = parseDateInput(date);
3566
+ if (!d) return "";
3567
+ const digits = options.digits ?? "urdu";
3568
+ const calendar = options.calendar ?? "gregorian";
3569
+ const year = d.getFullYear();
3570
+ const month = d.getMonth();
3571
+ const dayOfMonth = d.getDate();
3572
+ const dayOfWeek = d.getDay();
3573
+ const hours24 = d.getHours();
3574
+ const hours12 = hours24 % 12 || 12;
3575
+ const minutes = d.getMinutes();
3576
+ const seconds = d.getSeconds();
3577
+ const pad = (n) => n < 10 ? `0${n}` : `${n}`;
3578
+ let periodDetailed;
3579
+ let periodSimple;
3580
+ if (hours24 >= 4 && hours24 < 12) {
3581
+ periodDetailed = "\u0635\u0628\u062D";
3582
+ periodSimple = "\u0635\u0628\u062D";
3583
+ } else if (hours24 >= 12 && hours24 < 16) {
3584
+ periodDetailed = "\u062F\u0648\u067E\u06C1\u0631";
3585
+ periodSimple = "\u0634\u0627\u0645";
3586
+ } else if (hours24 >= 16 && hours24 < 20) {
3587
+ periodDetailed = "\u0634\u0627\u0645";
3588
+ periodSimple = "\u0634\u0627\u0645";
3589
+ } else {
3590
+ periodDetailed = "\u0631\u0627\u062A";
3591
+ periodSimple = "\u0631\u0627\u062A";
3592
+ }
3593
+ const tokenValues = {
3594
+ YYYY: `${year}`,
3595
+ YY: `${year}`.slice(-2),
3596
+ MMMM: getUrduMonthName(month, calendar),
3597
+ MMM: getUrduMonthName(month, calendar),
3598
+ MM: pad(month + 1),
3599
+ M: `${month + 1}`,
3600
+ DD: pad(dayOfMonth),
3601
+ D: `${dayOfMonth}`,
3602
+ dddd: getUrduWeekdayName(dayOfWeek),
3603
+ ddd: getUrduWeekdayName(dayOfWeek),
3604
+ HH: pad(hours24),
3605
+ H: `${hours24}`,
3606
+ hh: pad(hours12),
3607
+ h: `${hours12}`,
3608
+ mm: pad(minutes),
3609
+ m: `${minutes}`,
3610
+ ss: pad(seconds),
3611
+ s: `${seconds}`,
3612
+ A: periodDetailed,
3613
+ a: periodSimple
3614
+ };
3615
+ const regex = /YYYY|YY|MMMM|MMM|MM|M|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;
3616
+ const result = pattern.replace(regex, (match) => {
3617
+ const val = tokenValues[match];
3618
+ if (val === void 0) return match;
3619
+ if (digits === "urdu" && /^\d+$/.test(val)) {
3620
+ return toUrduDigits(val);
3621
+ }
3622
+ return val;
3623
+ });
3624
+ return result;
3625
+ }
3626
+ function timeAgoUrdu(date, relativeTo = /* @__PURE__ */ new Date(), options = {}) {
3627
+ const d = parseDateInput(date);
3628
+ const now = parseDateInput(relativeTo);
3629
+ if (!d || !now) return "";
3630
+ const digits = options.digits ?? "urdu";
3631
+ const addSuffix = options.addSuffix ?? true;
3632
+ const formatNum = (num) => {
3633
+ const s = `${num}`;
3634
+ return digits === "urdu" ? toUrduDigits(s) : s;
3635
+ };
3636
+ const diffMs = now.getTime() - d.getTime();
3637
+ const isPast = diffMs >= 0;
3638
+ const absDiffSeconds = Math.round(Math.abs(diffMs) / 1e3);
3639
+ if (absDiffSeconds < 45) {
3640
+ return isPast ? "\u0627\u0628\u06BE\u06CC" : "\u0686\u0646\u062F \u0644\u0645\u062D\u06D2 \u0628\u0639\u062F";
3641
+ }
3642
+ const minutes = Math.round(absDiffSeconds / 60);
3643
+ if (minutes <= 45) {
3644
+ if (minutes === 1) {
3645
+ if (!addSuffix) return "\u0627\u06CC\u06A9 \u0645\u0646\u0679";
3646
+ return isPast ? "\u0627\u06CC\u06A9 \u0645\u0646\u0679 \u067E\u06C1\u0644\u06D2" : "\u0627\u06CC\u06A9 \u0645\u0646\u0679 \u0628\u0639\u062F";
3647
+ }
3648
+ const count2 = formatNum(minutes);
3649
+ if (!addSuffix) return `${count2} \u0645\u0646\u0679`;
3650
+ return isPast ? `${count2} \u0645\u0646\u0679 \u067E\u06C1\u0644\u06D2` : `${count2} \u0645\u0646\u0679 \u0628\u0639\u062F`;
3651
+ }
3652
+ const hours = Math.round(minutes / 60);
3653
+ if (hours <= 22) {
3654
+ if (hours === 1) {
3655
+ if (!addSuffix) return "\u0627\u06CC\u06A9 \u06AF\u06BE\u0646\u0679\u06C1";
3656
+ return isPast ? "\u0627\u06CC\u06A9 \u06AF\u06BE\u0646\u0679\u06C1 \u067E\u06C1\u0644\u06D2" : "\u0627\u06CC\u06A9 \u06AF\u06BE\u0646\u0679\u06C1 \u0628\u0639\u062F";
3657
+ }
3658
+ const count2 = formatNum(hours);
3659
+ if (!addSuffix) return `${count2} \u06AF\u06BE\u0646\u0679\u06D2`;
3660
+ return isPast ? `${count2} \u06AF\u06BE\u0646\u0679\u06D2 \u067E\u06C1\u0644\u06D2` : `${count2} \u06AF\u06BE\u0646\u0679\u06D2 \u0628\u0639\u062F`;
3661
+ }
3662
+ const days = Math.round(hours / 24);
3663
+ if (days === 1) {
3664
+ return isPast ? "\u06A9\u0644" : "\u06A9\u0644";
3665
+ }
3666
+ if (days === 2) {
3667
+ return isPast ? "\u067E\u0631\u0633\u0648\u06BA" : "\u067E\u0631\u0633\u0648\u06BA";
3668
+ }
3669
+ if (days <= 6) {
3670
+ const count2 = formatNum(days);
3671
+ if (!addSuffix) return `${count2} \u062F\u0646`;
3672
+ return isPast ? `${count2} \u062F\u0646 \u067E\u06C1\u0644\u06D2` : `${count2} \u062F\u0646 \u0628\u0639\u062F`;
3673
+ }
3674
+ const weeks = Math.round(days / 7);
3675
+ if (days <= 28) {
3676
+ if (weeks === 1) {
3677
+ if (!addSuffix) return "\u0627\u06CC\u06A9 \u06C1\u0641\u062A\u06C1";
3678
+ return isPast ? "\u0627\u06CC\u06A9 \u06C1\u0641\u062A\u06C1 \u067E\u06C1\u0644\u06D2" : "\u0627\u06CC\u06A9 \u06C1\u0641\u062A\u06C1 \u0628\u0639\u062F";
3679
+ }
3680
+ const count2 = formatNum(weeks);
3681
+ if (!addSuffix) return `${count2} \u06C1\u0641\u062A\u06D2`;
3682
+ return isPast ? `${count2} \u06C1\u0641\u062A\u06D2 \u067E\u06C1\u0644\u06D2` : `${count2} \u06C1\u0641\u062A\u06D2 \u0628\u0639\u062F`;
3683
+ }
3684
+ const months = Math.round(days / 30.44);
3685
+ if (days <= 320) {
3686
+ if (months <= 1) {
3687
+ if (!addSuffix) return "\u0627\u06CC\u06A9 \u0645\u0627\u06C1";
3688
+ return isPast ? "\u0627\u06CC\u06A9 \u0645\u0627\u06C1 \u067E\u06C1\u0644\u06D2" : "\u0627\u06CC\u06A9 \u0645\u0627\u06C1 \u0628\u0639\u062F";
3689
+ }
3690
+ const count2 = formatNum(months);
3691
+ if (!addSuffix) return `${count2} \u0645\u0627\u06C1`;
3692
+ return isPast ? `${count2} \u0645\u0627\u06C1 \u067E\u06C1\u0644\u06D2` : `${count2} \u0645\u0627\u06C1 \u0628\u0639\u062F`;
3693
+ }
3694
+ const years = Math.round(days / 365.25);
3695
+ if (years <= 1) {
3696
+ if (!addSuffix) return "\u0627\u06CC\u06A9 \u0633\u0627\u0644";
3697
+ return isPast ? "\u0627\u06CC\u06A9 \u0633\u0627\u0644 \u067E\u06C1\u0644\u06D2" : "\u0627\u06CC\u06A9 \u0633\u0627\u0644 \u0628\u0639\u062F";
3698
+ }
3699
+ const count = formatNum(years);
3700
+ if (!addSuffix) return `${count} \u0633\u0627\u0644`;
3701
+ return isPast ? `${count} \u0633\u0627\u0644 \u067E\u06C1\u0644\u06D2` : `${count} \u0633\u0627\u0644 \u0628\u0639\u062F`;
3702
+ }
3703
+
3704
+ export { URDU_MONTHS_GREGORIAN, URDU_MONTHS_HIJRI, URDU_STOP_WORDS, URDU_WEEKDAYS, analyzeUrdu, compareUrdu, convertNumbers, countSentences, countWords, editDistance, filterStopWords, foldUrdu, formatUrduDate, getUrduMonthName, getUrduWeekdayName, hasUrduSpecificLetters, highlightUrdu, isStopWord, isUrdu, normalizeUrdu, numberToUrduWords, parseUrduNumber, removeDiacritics, removeStopWords, romanToUrdu, romanize, searchUrdu, searchUrduRanked, sortUrdu, splitSentences, splitWords, timeAgoUrdu, toArabicIndicDigits, toEnglishDigits, toUrduDigits, urduRatio, urduSlug };
3510
3705
  //# sourceMappingURL=index.js.map
3511
3706
  //# sourceMappingURL=index.js.map