{"version":3,"sources":["../src/conversion.ts"],"names":["TimezoneCache","fromZonedTime","toZonedTime","memoize","formatInTimeZone"],"mappings":";;;;;;AAIA,IAAM,eAAA,GAAkB,IAAIA,iCAAA,EAAc;AAE1C,SAAS,OAAO,KAAA,EAAqC;AACnD,EAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,EAAA,OAAO,IAAI,KAAK,KAAK,CAAA;AACvB;AAGO,SAAS,KAAA,CAAM,MAA8B,cAAA,EAA8B;AAChF,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,OAAOC,uBAAA,CAAc,GAAG,cAAc,CAAA;AACxC;AAGO,SAAS,OAAA,CAAQ,MAA8B,cAAA,EAA8B;AAClF,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,OAAOC,qBAAA,CAAY,GAAG,cAAc,CAAA;AACtC;AAGO,SAAS,gBAAgB,OAAA,EAAuC;AACrE,EAAA,MAAM,EAAE,cAAA,EAAgB,cAAA,EAAgB,uBAAO,IAAI,IAAA,IAAO,GAAI,OAAA;AAC9D,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,EAAM,cAAc,CAAA;AAC1C,EAAA,OAAO,OAAA,CAAQ,SAAS,cAAc,CAAA;AACxC;AAEA,IAAM,eAAA,GAAkBC,2BAAA;AAAA,EACtB,CAAC,cAAA,EAAwB,cAAA,EAAwB,SAAA,KAC/C,eAAA,CAAgB,EAAE,cAAA,EAAgB,cAAA,EAAgB,IAAA,EAAM,IAAI,IAAA,CAAK,SAAS,GAAG,CAAA;AAAA,EAC/E,CAAC,QAAQ,MAAA,EAAQ,EAAA,KAAO,GAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACjD;AACF,CAAA;AAGO,SAAS,sBACd,cAAA,EACA,cAAA,EACA,IAAA,mBAA+B,IAAI,MAAK,EAClC;AACN,EAAA,OAAO,gBAAgB,cAAA,EAAgB,cAAA,EAAgB,OAAO,IAAI,CAAA,CAAE,SAAS,CAAA;AAC/E;AAGO,SAAS,SAAA,CAAU,QAAA,EAAkB,IAAA,mBAA+B,IAAI,MAAK,EAAY;AAC9F,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,MAAM,MAAM,IAAI,IAAA,CAAK,EAAE,WAAA,EAAY,EAAG,GAAG,CAAC,CAAA;AAC1C,EAAA,MAAM,MAAM,IAAI,IAAA,CAAK,EAAE,WAAA,EAAY,EAAG,GAAG,CAAC,CAAA;AAE1C,EAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,QAAA,EAAU,GAAG,CAAA;AACxD,EAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,QAAA,EAAU,GAAG,CAAA;AACxD,EAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,QAAA,EAAU,CAAC,CAAA;AAE1D,EAAA,IAAI,SAAA,KAAc,WAAW,OAAO,KAAA;AACpC,EAAA,OAAO,aAAA,KAAkB,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AACxD;AAGO,SAAS,YAAA,CAAa,QAAA,EAAkB,IAAA,mBAA+B,IAAI,MAAK,EAAW;AAChG,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,MAAM,SAAA,GAAYC,0BAAA,CAAiB,CAAA,EAAG,QAAA,EAAU,KAAK,CAAA;AACrD,EAAA,OAAO,SAAA;AACT;AAGO,SAAS,wBAAA,CACd,QAAA,EACA,IAAA,mBAA+B,IAAI,MAAK,EAChC;AACR,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACjC,EAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAQ,GAAI,CAAA,CAAE,SAAQ,IAAK,GAAA;AAC7C","file":"conversion.cjs","sourcesContent":["import { toZonedTime, fromZonedTime, formatInTimeZone } from \"date-fns-tz\";\nimport type { ConvertTimezoneOptions } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { memoize, TimezoneCache } from \"@multisystemsuite/timezone-engine-utils\";\n\nconst conversionCache = new TimezoneCache();\n\nfunction toDate(input: Date | string | number): Date {\n  if (input instanceof Date) return input;\n  return new Date(input);\n}\n\n/** Convert date to UTC */\nexport function toUTC(date: Date | string | number, sourceTimezone: string): Date {\n  const d = toDate(date);\n  return fromZonedTime(d, sourceTimezone);\n}\n\n/** Convert UTC date to target timezone representation */\nexport function fromUTC(date: Date | string | number, targetTimezone: string): Date {\n  const d = toDate(date);\n  return toZonedTime(d, targetTimezone);\n}\n\n/** Convert date between timezones */\nexport function convertTimezone(options: ConvertTimezoneOptions): Date {\n  const { sourceTimezone, targetTimezone, date = new Date() } = options;\n  const utcDate = toUTC(date, sourceTimezone);\n  return fromUTC(utcDate, targetTimezone);\n}\n\nconst memoizedConvert = memoize(\n  (sourceTimezone: string, targetTimezone: string, timestamp: number) =>\n    convertTimezone({ sourceTimezone, targetTimezone, date: new Date(timestamp) }),\n  (source, target, ts) => `${source}:${target}:${ts}`,\n  conversionCache,\n);\n\n/** Cached timezone conversion for high-performance scenarios */\nexport function convertTimezoneCached(\n  sourceTimezone: string,\n  targetTimezone: string,\n  date: Date | string | number = new Date(),\n): Date {\n  return memoizedConvert(sourceTimezone, targetTimezone, toDate(date).getTime());\n}\n\n/** Detect if DST is active for a timezone at a given date */\nexport function detectDST(timezone: string, date: Date | string | number = new Date()): boolean {\n  const d = toDate(date);\n  const jan = new Date(d.getFullYear(), 0, 1);\n  const jul = new Date(d.getFullYear(), 6, 1);\n\n  const janOffset = getTimezoneOffsetMinutes(timezone, jan);\n  const julOffset = getTimezoneOffsetMinutes(timezone, jul);\n  const currentOffset = getTimezoneOffsetMinutes(timezone, d);\n\n  if (janOffset === julOffset) return false;\n  return currentOffset !== Math.max(janOffset, julOffset);\n}\n\n/** Get UTC offset string for a timezone (e.g. \"+05:30\") */\nexport function getUtcOffset(timezone: string, date: Date | string | number = new Date()): string {\n  const d = toDate(date);\n  const formatted = formatInTimeZone(d, timezone, \"xxx\");\n  return formatted;\n}\n\n/** Get offset in minutes from UTC */\nexport function getTimezoneOffsetMinutes(\n  timezone: string,\n  date: Date | string | number = new Date(),\n): number {\n  const d = toDate(date);\n  const utcDate = toUTC(d, timezone);\n  return (utcDate.getTime() - d.getTime()) / 60_000;\n}\n"]}