{"version":3,"sources":["../src/formatting.ts"],"names":["TimezoneCache","getRegionalPattern","formatInTimeZone","memoize","formatDistanceToNow","formatRelative","getLocaleMetadata"],"mappings":";;;;;;;;AAYA,IAAM,WAAA,GAAc,IAAIA,iCAAA,EAAc;AAEtC,IAAM,eAAA,GAAkD;AAAA,EACtD,GAAA,EAAK,8BAAA;AAAA,EACL,GAAA,EAAK,0BAAA;AAAA,EACL,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,GAAA;AAAA,EACP,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,IAAA;AAAA,EACV,SAAA,EAAW,GAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAA;AAEA,SAAS,OAAO,KAAA,EAAqC;AACnD,EAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,EAAA,OAAO,IAAI,KAAK,KAAK,CAAA;AACvB;AAEA,SAAS,eAAe,OAAA,EAAoC;AAC1D,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,IAAU,KAAA;AAErC,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,IAAA,MAAM,QAAA,GAAWC,0CAAA,CAAmB,OAAA,CAAQ,cAAc,CAAA;AAC1D,IAAA,IAAI,UAAA,KAAe,aAAa,OAAO,GAAA;AACvC,IAAA,IAAI,UAAA,KAAe,WAAA,IAAe,UAAA,KAAe,OAAA,EAAS,OAAO,QAAA;AACjE,IAAA,OAAO,GAAG,QAAQ,CAAA,MAAA,CAAA;AAAA,EACpB;AAEA,EAAA,OAAO,gBAAgB,UAAU,CAAA;AACnC;AAEA,SAAS,cAAc,OAAA,EAAoC;AACzD,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAO,OAAA,CAAQ,MAAA;AACnC,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,GAAA,EAAK;AAAA,KACP;AACA,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,cAAc,CAAA,IAAK,OAAA;AAAA,EAC5C;AACA,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,UAAA,CAAW,IAAA,EAA8B,OAAA,GAA6B,EAAC,EAAW;AAChG,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,KAAA;AACrC,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AAEtC,EAAA,IAAI,OAAA,CAAQ,WAAW,KAAA,EAAO;AAC5B,IAAA,OAAOC,0BAAA,CAAiB,CAAA,EAAG,KAAA,EAAO,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAOA,0BAAA,CAAiB,CAAA,EAAG,QAAA,EAAU,OAAO,CAAA;AAC9C;AAEA,IAAM,cAAA,GAAiBC,2BAAA;AAAA,EACrB,CAAC,SAAA,EAAmB,QAAA,EAAkB,MAAA,EAAgB,OAAA,KACpDD,0BAAA,CAAiB,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AAAA,EACxD,CAAC,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,GAAA,KAAQ,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAAA,EAC/C;AACF,CAAA;AAGO,SAAS,gBAAA,CACd,IAAA,EACA,OAAA,GAA6B,EAAC,EACtB;AACR,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,KAAA;AACrC,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,EAAA,OAAO,eAAe,CAAA,CAAE,OAAA,EAAQ,EAAG,QAAA,EAAU,SAAS,MAAM,CAAA;AAC9D;AAGO,SAAS,kBAAA,CACd,IAAA,EACA,SAAA,mBAAoC,IAAI,MAAK,EACrC;AACR,EAAA,OAAOE,4BAAoB,MAAA,CAAO,IAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9D;AAGO,SAAS,kBAAA,CACd,IAAA,EACA,QAAA,mBAAmC,IAAI,MAAK,EACpC;AACR,EAAA,OAAOC,uBAAe,MAAA,CAAO,IAAI,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAC,CAAA;AACtD;AAGO,SAAS,WACd,IAAA,EACA,QAAA,EACA,KAAA,GAAuB,KAAA,EACvB,UAAU,OAAA,EACF;AACR,EAAA,MAAM,OAAA,GAAU,KAAA,KAAU,KAAA,GAAQ,QAAA,GAAW,OAAA;AAC7C,EAAA,OAAOH,0BAAA,CAAiB,MAAA,CAAO,IAAI,CAAA,EAAG,UAAU,OAAO,CAAA;AACzD;AAGO,SAAS,oBAAoB,MAAA,EAAwB;AAC1D,EAAA,MAAM,IAAA,GAAOI,0CAAkB,MAAM,CAAA;AACrC,EAAA,IAAI,IAAA,EAAM,OAAOL,0CAAA,CAAmB,IAAA,CAAK,UAAU,CAAA;AACnD,EAAA,OAAOA,2CAAmB,KAAK,CAAA;AACjC;AAGO,SAAS,oBAAoB,MAAA,EAA+B;AACjE,EAAA,MAAM,IAAA,GAAOK,0CAAkB,MAAM,CAAA;AACrC,EAAA,OAAO,MAAM,UAAA,IAAc,KAAA;AAC7B","file":"formatting.cjs","sourcesContent":["import { formatInTimeZone } from \"date-fns-tz\";\nimport { formatDistanceToNow, formatRelative } from \"date-fns\";\nimport type {\n  FormatDateOptions,\n  DateFormatType,\n} from \"@multisystemsuite/timezone-engine-shared-types\";\nimport {\n  getLocaleMetadata,\n  getRegionalPattern,\n} from \"@multisystemsuite/timezone-engine-world-data\";\nimport { memoize, TimezoneCache } from \"@multisystemsuite/timezone-engine-utils\";\n\nconst formatCache = new TimezoneCache();\n\nconst FORMAT_PATTERNS: Record<DateFormatType, string> = {\n  ISO: \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\",\n  UTC: \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n  LOCAL: \"Pp\",\n  SHORT: \"P\",\n  LONG: \"PPP\",\n  FULL: \"PPPP\",\n  DATETIME: \"Pp\",\n  TIME_ONLY: \"p\",\n  DATE_ONLY: \"P\",\n};\n\nfunction toDate(input: Date | string | number): Date {\n  if (input instanceof Date) return input;\n  return new Date(input);\n}\n\nfunction resolvePattern(options: FormatDateOptions): string {\n  const formatType = options.format ?? \"ISO\";\n\n  if (options.regionalFormat) {\n    const regional = getRegionalPattern(options.regionalFormat);\n    if (formatType === \"TIME_ONLY\") return \"p\";\n    if (formatType === \"DATE_ONLY\" || formatType === \"SHORT\") return regional;\n    return `${regional} HH:mm`;\n  }\n\n  return FORMAT_PATTERNS[formatType];\n}\n\nfunction resolveLocale(options: FormatDateOptions): string {\n  if (options.locale) return options.locale;\n  if (options.regionalFormat) {\n    const mapping: Record<string, string> = {\n      IN: \"en-IN\",\n      US: \"en-US\",\n      EU: \"de-DE\",\n      UK: \"en-GB\",\n      JP: \"ja-JP\",\n      AR: \"ar-AE\",\n      CN: \"zh-CN\",\n      ISO: \"en-GB\",\n    };\n    return mapping[options.regionalFormat] ?? \"en-US\";\n  }\n  return \"en-US\";\n}\n\n/** Format date with locale and timezone awareness */\nexport function formatDate(date: Date | string | number, options: FormatDateOptions = {}): string {\n  const d = toDate(date);\n  const timezone = options.timezone ?? \"UTC\";\n  const pattern = resolvePattern(options);\n\n  if (options.format === \"UTC\") {\n    return formatInTimeZone(d, \"UTC\", pattern);\n  }\n\n  return formatInTimeZone(d, timezone, pattern);\n}\n\nconst memoizedFormat = memoize(\n  (timestamp: number, timezone: string, format: string, _locale: string) =>\n    formatInTimeZone(new Date(timestamp), timezone, format),\n  (ts, tz, fmt, loc) => `${ts}:${tz}:${fmt}:${loc}`,\n  formatCache,\n);\n\n/** Cached date formatting for high-performance scenarios */\nexport function formatDateCached(\n  date: Date | string | number,\n  options: FormatDateOptions = {},\n): string {\n  const d = toDate(date);\n  const timezone = options.timezone ?? \"UTC\";\n  const pattern = resolvePattern(options);\n  const locale = resolveLocale(options);\n  return memoizedFormat(d.getTime(), timezone, pattern, locale);\n}\n\n/** Format relative time (e.g. \"2 hours ago\") */\nexport function formatRelativeTime(\n  date: Date | string | number,\n  _baseDate: Date | string | number = new Date(),\n): string {\n  return formatDistanceToNow(toDate(date), { addSuffix: true });\n}\n\n/** Format relative date with timezone context */\nexport function formatRelativeDate(\n  date: Date | string | number,\n  baseDate: Date | string | number = new Date(),\n): string {\n  return formatRelative(toDate(date), toDate(baseDate));\n}\n\n/** Format time in 12h or 24h style */\nexport function formatTime(\n  date: Date | string | number,\n  timezone: string,\n  style: \"12h\" | \"24h\" = \"24h\",\n  _locale = \"en-US\",\n): string {\n  const pattern = style === \"12h\" ? \"h:mm a\" : \"HH:mm\";\n  return formatInTimeZone(toDate(date), timezone, pattern);\n}\n\n/** Get locale-aware date format for a locale string */\nexport function getLocaleDateFormat(locale: string): string {\n  const meta = getLocaleMetadata(locale);\n  if (meta) return getRegionalPattern(meta.dateFormat);\n  return getRegionalPattern(\"ISO\");\n}\n\n/** Get locale time format preference */\nexport function getLocaleTimeFormat(locale: string): \"12h\" | \"24h\" {\n  const meta = getLocaleMetadata(locale);\n  return meta?.timeFormat ?? \"24h\";\n}\n"]}