{"version":3,"file":"relativeTime.mjs","names":[],"sources":["../../../src/formatters/relativeTime.ts"],"sourcesContent":["import { internationalization } from '@intlayer/config/built';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport { getCachedIntl } from '../utils/intl';\n\ntype RelativeTimeUnit = Intl.RelativeTimeFormatUnit;\n\n/**\n * Calculate the difference between 2 dates in the given unit.\n */\nconst diffInUnit = (from: Date, to: Date, unit: RelativeTimeUnit): number => {\n  const msDiff = to.getTime() - from.getTime();\n  const sec = msDiff / 1000;\n\n  switch (unit) {\n    case 'second':\n      return sec;\n    case 'minute':\n      return sec / 60;\n    case 'hour':\n      return sec / 3600;\n    case 'day':\n      return sec / 86400;\n    case 'month':\n      return sec / (30 * 86400); // approx\n    case 'quarter':\n      return sec / (3 * 30 * 86400); // 3 months approx\n    case 'year':\n      return sec / (365 * 86400); // approx\n    default:\n      return sec;\n  }\n};\n\n/**\n * Formats the difference between two dates as a localized relative time string.\n *\n * @example\n * relativeTime(new Date(Date.now() - 30000)); // \"30 seconds ago\"\n *\n * @example\n * relativeTime(\"2025-01-01\", new Date(), { locale: Locales.FRENCH, unit: \"day\" });\n * // \"il y a 443 jours\"\n */\nexport const relativeTime = (\n  from: Date | string | number,\n  to: Date | string | number = new Date(),\n  options?: Intl.RelativeTimeFormatOptions & {\n    locale?: LocalesValues;\n    unit?: RelativeTimeUnit;\n  }\n): string => {\n  const fromDate = new Date(from);\n  const toDate = new Date(to);\n  const unit = options?.unit ?? 'second';\n\n  const value = diffInUnit(fromDate, toDate, unit);\n\n  return getCachedIntl(\n    Intl.RelativeTimeFormat,\n    options?.locale ?? internationalization?.defaultLocale,\n\n    options\n  ).format(Math.round(value), unit);\n};\n"],"mappings":";;;;;;;AASA,MAAM,cAAc,MAAY,IAAU,SAAmC;CAE3E,MAAM,OADS,GAAG,SAAS,GAAG,KAAK,SAAS,IACvB;AAErB,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,SACH,QAAO,MAAM;EACf,KAAK,OACH,QAAO,MAAM;EACf,KAAK,MACH,QAAO,MAAM;EACf,KAAK,QACH,QAAO,OAAO,KAAK;EACrB,KAAK,UACH,QAAO,OAAO,KAAS;EACzB,KAAK,OACH,QAAO,OAAO,MAAM;EACtB,QACE,QAAO;;;;;;;;;;;;;AAcb,MAAa,gBACX,MACA,qBAA6B,IAAI,MAAM,EACvC,YAIW;CACX,MAAM,WAAW,IAAI,KAAK,KAAK;CAC/B,MAAM,SAAS,IAAI,KAAK,GAAG;CAC3B,MAAM,OAAO,SAAS,QAAQ;CAE9B,MAAM,QAAQ,WAAW,UAAU,QAAQ,KAAK;AAEhD,QAAO,cACL,KAAK,oBACL,SAAS,UAAU,sBAAsB,eAEzC,QACD,CAAC,OAAO,KAAK,MAAM,MAAM,EAAE,KAAK"}