{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAYA,IAAM,YAAY,aAAc,CAAA,IAAI,IAAI,GAAK,EAAA,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAC7D,IAAM,gBAAgB,IAAK,CAAA,KAAA;AAAA,EACzB,aAAa,IAAK,CAAA,SAAA,EAAW,MAAQ,EAAA,gBAAgB,GAAG,OAAO;AACjE,CAAA;AAMO,IAAM,SAAkC,GAAA,MAAA,CAAO,MAAO,CAAA,aAAA,CAAc,SAAS;AAO7E,SAAS,kBAAkB,IAAuD,EAAA;AACvF,EAAI,IAAA,CAAC,MAAa,OAAA,MAAA;AAClB,EAAA,OAAO,UAAU,IAAK,CAAA,CAAC,EAAO,KAAA,EAAA,CAAG,SAAS,IAAI,CAAA;AAChD;AAOO,SAAS,qBAAqB,MAA6C,EAAA;AAChF,EAAI,IAAA,CAAC,MAAQ,EAAA,OAAO,EAAC;AACrB,EAAM,MAAA,gBAAA,GAAmB,OAAO,WAAY,EAAA;AAC5C,EAAO,OAAA,SAAA,CAAU,OAAO,CAAC,EAAA,KAAO,GAAG,MAAO,CAAA,WAAA,OAAkB,gBAAgB,CAAA;AAC9E;AAOO,SAAS,qBAAqB,IAAwD,EAAA;AAC3F,EAAI,IAAA,CAAC,MAAa,OAAA,MAAA;AAClB,EAAO,OAAA,iBAAA,CAAkB,IAAI,CAAG,EAAA,iBAAA;AAClC;AAOO,SAAS,oBAAoB,IAAuB,EAAA;AACzD,EAAI,IAAA,CAAC,MAAa,OAAA,KAAA;AAClB,EAAA,OAAO,UAAU,IAAK,CAAA,CAAC,EAAO,KAAA,EAAA,CAAG,SAAS,IAAI,CAAA;AAChD;AAOA,eAAsB,0BACpB,IAC6C,EAAA;AAC7C,EAAA,IAAI,CAAC,IAAQ,IAAA,CAAC,mBAAoB,CAAA,IAAI,GAAU,OAAA,MAAA;AAEhD,EAAI,IAAA;AACF,IAAM,MAAA,IAAA,uBAAW,IAAK,EAAA;AACtB,IAAA,MAAM,SAAY,GAAA,IAAI,IAAK,CAAA,cAAA,CAAe,OAAS,EAAA;AAAA,MACjD,QAAU,EAAA,IAAA;AAAA,MACV,YAAc,EAAA;AAAA,KACf,CAAA;AAED,IAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,aAAA,CAAc,IAAI,CAAA;AAC1C,IAAA,MAAM,aAAa,KAAM,CAAA,IAAA,CAAK,CAAC,IAAS,KAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AACpE,IAAM,MAAA,MAAA,GAAS,YAAY,KAAS,IAAA,EAAA;AAEpC,IAAA,MAAM,cAAiB,GAAA,IAAI,IAAK,CAAA,cAAA,CAAe,OAAS,EAAA;AAAA,MACtD,QAAU,EAAA,IAAA;AAAA,MACV,YAAc,EAAA;AAAA,KACf,CAAA;AAED,IAAM,MAAA,UAAA,GAAa,cAAe,CAAA,aAAA,CAAc,IAAI,CAAA;AACpD,IAAA,MAAM,mBAAmB,UAAW,CAAA,IAAA,CAAK,CAAC,IAAS,KAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAC/E,IAAM,MAAA,YAAA,GAAe,kBAAkB,KAAS,IAAA,EAAA;AAEhD,IAAO,OAAA;AAAA,MACL,gBAAkB,EAAA,MAAA;AAAA,MAClB,mBAAqB,EAAA;AAAA,KACvB;AAAA,WACO,KAAO,EAAA;AACd,IAAO,OAAA,MAAA;AAAA;AAEX","file":"index.mjs","sourcesContent":["import { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { fileURLToPath } from 'url';\nimport type {\n  IANATimezoneName,\n  Timezone,\n  TimezoneRegion,\n  UTCOffset,\n  CurrentTimezoneDetails,\n} from './types';\n\n// Read and parse the timezones data\nconst __dirname = fileURLToPath(new URL('.', import.meta.url));\nconst timezonesData = JSON.parse(\n  readFileSync(join(__dirname, 'data', 'timezones.json'), 'utf-8')\n) as { timezones: Timezone[] };\n\n/**\n * The complete list of timezones with their metadata.\n * This is a readonly array to prevent accidental modifications.\n */\nexport const timezones: Readonly<Timezone[]> = Object.freeze(timezonesData.timezones);\n\n/**\n * Gets a timezone by its IANA name.\n * @param name - The IANA timezone name to look up\n * @returns The timezone object if found, undefined otherwise\n */\nexport function getTimezoneByName(name: IANATimezoneName | string): Timezone | undefined {\n  if (!name) return undefined;\n  return timezones.find((tz) => tz.name === name);\n}\n\n/**\n * Gets all timezones in a specific region.\n * @param region - The region to filter by (case-insensitive)\n * @returns Array of timezones in the specified region\n */\nexport function getTimezonesByRegion(region: TimezoneRegion | string): Timezone[] {\n  if (!region) return [];\n  const normalizedRegion = region.toLowerCase();\n  return timezones.filter((tz) => tz.region.toLowerCase() === normalizedRegion);\n}\n\n/**\n * Gets the standard UTC offset for a timezone.\n * @param name - The IANA timezone name\n * @returns The standard UTC offset if found, undefined otherwise\n */\nexport function getStandardUtcOffset(name: IANATimezoneName | string): UTCOffset | undefined {\n  if (!name) return undefined;\n  return getTimezoneByName(name)?.standardUtcOffset;\n}\n\n/**\n * Checks if a string is a valid IANA timezone name.\n * @param name - The string to check\n * @returns true if the string is a valid IANA timezone name\n */\nexport function isValidTimezoneName(name: string): boolean {\n  if (!name) return false;\n  return timezones.some((tz) => tz.name === name);\n}\n\n/**\n * Gets the current timezone details including DST information.\n * @param name - The IANA timezone name\n * @returns Promise resolving to current timezone details or undefined if not found\n */\nexport async function getCurrentTimezoneDetails(\n  name: IANATimezoneName\n): Promise<CurrentTimezoneDetails | undefined> {\n  if (!name || !isValidTimezoneName(name)) return undefined;\n\n  try {\n    const date = new Date();\n    const formatter = new Intl.DateTimeFormat('en-US', {\n      timeZone: name,\n      timeZoneName: 'shortOffset',\n    });\n\n    const parts = formatter.formatToParts(date);\n    const offsetPart = parts.find((part) => part.type === 'timeZoneName');\n    const offset = offsetPart?.value || '';\n\n    const shortFormatter = new Intl.DateTimeFormat('en-US', {\n      timeZone: name,\n      timeZoneName: 'short',\n    });\n\n    const shortParts = shortFormatter.formatToParts(date);\n    const abbreviationPart = shortParts.find((part) => part.type === 'timeZoneName');\n    const abbreviation = abbreviationPart?.value || '';\n\n    return {\n      currentUtcOffset: offset,\n      currentAbbreviation: abbreviation,\n    };\n  } catch (error) {\n    return undefined;\n  }\n}\n"]}