{"version":3,"sources":["../src/index.ts","../src/cli.ts"],"names":[],"mappings":"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","file":"cli.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","#!/usr/bin/env node\n\nimport { getTimezoneByName, getCurrentTimezoneDetails } from './index';\n\nasync function main() {\n  const args = process.argv.slice(2);\n\n  if (args.length === 0) {\n    console.log('Usage: npx timezone-codes <timezone-name>');\n    console.log('Example: npx timezone-codes Asia/Tokyo');\n    process.exit(0);\n  }\n\n  const timezoneName = args[0];\n  const timezone = getTimezoneByName(timezoneName);\n\n  if (!timezone) {\n    console.error(`Error: \"${timezoneName}\" is not a valid IANA timezone name.`);\n    process.exit(1);\n  }\n\n  console.log(`Timezone: ${timezone.name}`);\n  console.log(`Region: ${timezone.region}`);\n  console.log(`Standard UTC Offset: ${timezone.standardUtcOffset}`);\n  console.log(`Standard Abbreviation: ${timezone.standardAbbreviation}`);\n\n  try {\n    const currentDetails = await getCurrentTimezoneDetails(timezoneName);\n    if (currentDetails) {\n      console.log(`Current UTC Offset: ${currentDetails.currentUtcOffset}`);\n      console.log(`Current Abbreviation: ${currentDetails.currentAbbreviation}`);\n    }\n  } catch (error) {\n    console.error('Error getting current timezone details:', error);\n  }\n}\n\nmain().catch(console.error);\n"]}