{"version":3,"sources":["../src/loaders.ts","../src/utils.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ITimezone, ITimezoneInfo, ITimezoneAbbreviation } from './types';\n\n/**\n * Get all available timezones\n * Bundle impact: ~20KB\n * @returns Promise resolving to array of all timezones\n */\nexport async function getTimezones(): Promise<ITimezone[]> {\n  const { default: timezones } = await import('./data/timezones.json');\n  return timezones;\n}\n\n/**\n * Get timezones for a specific country\n * Bundle impact: ~2KB per country\n * @param countryCode - ISO 3166-1 alpha-2 country code (e.g., 'US', 'IN')\n * @returns Promise resolving to array of timezones for the country\n */\nexport async function getTimezonesByCountry(countryCode: string): Promise<ITimezone[]> {\n  try {\n    const { default: timezones } = await import(`./data/by-country/${countryCode}.json`);\n    return timezones;\n  } catch (error) {\n    console.error(`Timezones for country ${countryCode} not found`);\n    return [];\n  }\n}\n\n/**\n * Get timezone information including current time\n * @param timezoneName - IANA timezone name (e.g., 'America/New_York')\n * @returns Promise resolving to timezone info or null if not found\n */\nexport async function getTimezoneInfo(timezoneName: string): Promise<ITimezoneInfo | null> {\n  const timezones = await getTimezones();\n  const timezone = timezones.find(tz => tz.zoneName === timezoneName);\n\n  if (!timezone) {\n    return null;\n  }\n\n  const now = new Date();\n\n  // Check if DST is currently active by comparing offsets\n  const january = new Date(now.getFullYear(), 0, 1);\n  const july = new Date(now.getFullYear(), 6, 1);\n\n  const janStr = january.toLocaleString('en-US', { timeZone: timezoneName });\n  const julStr = july.toLocaleString('en-US', { timeZone: timezoneName });\n  const nowStr = now.toLocaleString('en-US', { timeZone: timezoneName });\n\n  const janOffset = new Date(janStr).getTimezoneOffset();\n  const julOffset = new Date(julStr).getTimezoneOffset();\n  const nowOffset = new Date(nowStr).getTimezoneOffset();\n\n  // Standard time is when offset is maximum (most positive)\n  const standardOffset = Math.max(janOffset, julOffset);\n  const isDST = nowOffset < standardOffset;\n\n  return {\n    timezone: timezone.zoneName,\n    currentTime: now.toISOString(),\n    utcOffset: timezone.gmtOffsetName,\n    isDST,\n    gmtOffset: timezone.gmtOffset\n  };\n}\n\n/**\n * Get all timezone abbreviations\n * Bundle impact: ~5KB\n * @returns Promise resolving to array of timezone abbreviations\n */\nexport async function getTimezoneAbbreviations(): Promise<ITimezoneAbbreviation[]> {\n  const { default: abbreviations } = await import('./data/abbreviations.json');\n  return abbreviations;\n}\n\n/**\n * Find timezone by abbreviation (e.g., 'EST', 'PST')\n * @param abbreviation - Timezone abbreviation\n * @returns Promise resolving to array of matching timezones\n */\nexport async function getTimezonesByAbbreviation(abbreviation: string): Promise<ITimezone[]> {\n  const abbrevs = await getTimezoneAbbreviations();\n  const match = abbrevs.find(a => a.abbreviation.toLowerCase() === abbreviation.toLowerCase());\n  \n  if (!match) {\n    return [];\n  }\n\n  const allTimezones = await getTimezones();\n  return allTimezones.filter(tz => match.timezones.includes(tz.zoneName));\n}\n","import type { ITimezone, IConvertedTime } from './types';\nimport { getTimezones, getTimezoneInfo } from './loaders';\n\n/**\n * Convert time from one timezone to another\n * @param time - Time to convert (ISO string or Date object)\n * @param fromTimezone - Source timezone (IANA name)\n * @param toTimezone - Target timezone (IANA name)\n * @returns Promise resolving to converted time information\n */\nexport async function convertTime(\n  time: string | Date,\n  fromTimezone: string,\n  toTimezone: string\n): Promise<IConvertedTime> {\n  const inputDate = typeof time === 'string' ? new Date(time) : time;\n\n  // Format a date as a local ISO-like string (YYYY-MM-DDTHH:mm:ss) in the given timezone\n  const formatInTZ = (date: Date, timezone: string): string => {\n    const parts = new Intl.DateTimeFormat('en-CA', {\n      timeZone: timezone,\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n      hour12: false,\n    }).formatToParts(date);\n    const get = (type: string) => parts.find((p) => p.type === type)?.value ?? '00';\n    return `${get('year')}-${get('month')}-${get('day')}T${get('hour')}:${get('minute')}:${get('second')}`;\n  };\n\n  // Wall-clock strings in each timezone for computing the offset difference.\n  // Parsing these locale strings as local time is wrong for absolute timestamps,\n  // but the *difference* between the two wall-clock times always equals the\n  // timezone-offset gap, regardless of the runtime's local timezone.\n  const fromWall = inputDate.toLocaleString('en-US', { timeZone: fromTimezone });\n  const toWall = inputDate.toLocaleString('en-US', { timeZone: toTimezone });\n  const timeDiff =\n    (new Date(toWall).getTime() - new Date(fromWall).getTime()) / (1000 * 60 * 60);\n\n  return {\n    originalTime: formatInTZ(inputDate, fromTimezone),\n    fromTimezone,\n    convertedTime: formatInTZ(inputDate, toTimezone),\n    toTimezone,\n    timeDifference: timeDiff,\n  };\n}\n\n/**\n * Get current time in a specific timezone\n * @param timezoneName - IANA timezone name\n * @returns Promise resolving to current time as ISO string\n */\nexport async function getCurrentTime(timezoneName: string): Promise<string> {\n  const info = await getTimezoneInfo(timezoneName);\n  if (!info) {\n    throw new Error(`Timezone ${timezoneName} not found`);\n  }\n  return info.currentTime;\n}\n\n/**\n * Check if daylight saving time is currently active in a timezone\n * @param timezoneName - IANA timezone name\n * @param date - Optional date to check (defaults to now)\n * @returns Promise resolving to true if DST is active\n */\nexport async function isDaylightSaving(\n  timezoneName: string,\n  date: Date = new Date()\n): Promise<boolean> {\n  // Get offsets for January and July to determine standard time\n  const year = date.getFullYear();\n  const january = new Date(year, 0, 1);\n  const july = new Date(year, 6, 1);\n  \n  const janStr = january.toLocaleString('en-US', { timeZone: timezoneName });\n  const julStr = july.toLocaleString('en-US', { timeZone: timezoneName });\n  const dateStr = date.toLocaleString('en-US', { timeZone: timezoneName });\n  \n  const janOffset = new Date(janStr).getTimezoneOffset();\n  const julOffset = new Date(julStr).getTimezoneOffset();\n  const dateOffset = new Date(dateStr).getTimezoneOffset();\n  \n  // Standard time is when offset is maximum (most positive)\n  const standardOffset = Math.max(janOffset, julOffset);\n  \n  // DST is active when current offset is less than standard offset\n  return dateOffset < standardOffset;\n}\n\n/**\n * Get GMT/UTC offset for a timezone in seconds\n * @param timezoneName - IANA timezone name\n * @returns Promise resolving to offset in seconds\n */\nexport async function getGMTOffset(timezoneName: string): Promise<number> {\n  const info = await getTimezoneInfo(timezoneName);\n  if (!info) {\n    throw new Error(`Timezone ${timezoneName} not found`);\n  }\n  return info.gmtOffset;\n}\n\n/**\n * Format GMT offset from seconds to string (e.g., \"UTC-05:00\")\n * @param offsetSeconds - Offset in seconds\n * @returns Formatted offset string\n */\nexport function formatGMTOffset(offsetSeconds: number): string {\n  const hours = Math.floor(Math.abs(offsetSeconds) / 3600);\n  const minutes = Math.floor((Math.abs(offsetSeconds) % 3600) / 60);\n  const sign = offsetSeconds >= 0 ? '+' : '-';\n  \n  return `UTC${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n}\n\n/**\n * Validate if a timezone name is valid IANA timezone\n * @param timezoneName - Timezone name to validate\n * @returns Promise resolving to true if valid\n */\nexport async function isValidTimezone(timezoneName: string): Promise<boolean> {\n  const timezones = await getTimezones();\n  return timezones.some(tz => tz.zoneName === timezoneName);\n}\n\n/**\n * Search timezones by name (partial match)\n * @param searchTerm - Search term\n * @returns Promise resolving to matching timezones\n */\nexport async function searchTimezones(searchTerm: string): Promise<ITimezone[]> {\n  const timezones = await getTimezones();\n  const lowerSearch = searchTerm.toLowerCase();\n  \n  return timezones.filter(tz => \n    tz.zoneName.toLowerCase().includes(lowerSearch) ||\n    tz.tzName.toLowerCase().includes(lowerSearch) ||\n    tz.abbreviation.toLowerCase().includes(lowerSearch)\n  );\n}\n\n/**\n * Get all unique timezone abbreviations\n * @returns Promise resolving to array of unique abbreviations\n */\nexport async function getUniqueAbbreviations(): Promise<string[]> {\n  const timezones = await getTimezones();\n  const abbreviations = new Set(timezones.map(tz => tz.abbreviation));\n  return Array.from(abbreviations).sort();\n}\n\n/**\n * Get timezones by GMT offset\n * @param offsetSeconds - GMT offset in seconds\n * @returns Promise resolving to timezones with matching offset\n */\nexport async function getTimezonesByOffset(offsetSeconds: number): Promise<ITimezone[]> {\n  const timezones = await getTimezones();\n  return timezones.filter(tz => tz.gmtOffset === offsetSeconds);\n}\n"]}