UNPKG

timezone-codes

Version:

[DEPRECATED] A comprehensive, typed dataset of IANA timezone identifiers with metadata.

1 lines 5.19 kB
{"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"]}