{"version":3,"file":"timezones.cjs","sources":["../../../src/datetime/timezones.ts"],"sourcesContent":["import { memoize } from 'lodash';\nimport moment from 'moment-timezone';\n\nimport { TimeZone } from '../types/time';\n\nimport { getTimeZone } from './common';\n\nexport enum InternalTimeZones {\n  default = '',\n  localBrowserTime = 'browser',\n  utc = 'utc',\n}\n\nexport const timeZoneFormatUserFriendly = (timeZone: TimeZone | undefined) => {\n  switch (getTimeZone({ timeZone })) {\n    case 'browser':\n      return 'Local browser time';\n    case 'utc':\n      return 'UTC';\n    default:\n      return timeZone;\n  }\n};\n\nexport const getZone = (timeZone: string) => {\n  return moment.tz.zone(timeZone);\n};\n\nexport interface TimeZoneCountry {\n  code: string;\n  name: string;\n}\nexport interface TimeZoneInfo {\n  name: string;\n  zone: string;\n  countries: TimeZoneCountry[];\n  abbreviation: string;\n  offsetInMins: number;\n  ianaName: string;\n}\n\nexport interface GroupedTimeZones {\n  name: string;\n  zones: TimeZone[];\n}\n\nexport const getTimeZoneInfo = (zone: string, timestamp: number): TimeZoneInfo | undefined => {\n  const internal = mapInternal(zone, timestamp);\n\n  if (internal) {\n    return internal;\n  }\n\n  return mapToInfo(zone, timestamp);\n};\n\nexport const getTimeZones = memoize((includeInternal: boolean | InternalTimeZones[] = false): TimeZone[] => {\n  const initial: TimeZone[] = [];\n\n  if (includeInternal === true) {\n    initial.push(InternalTimeZones.default, InternalTimeZones.localBrowserTime, InternalTimeZones.utc);\n  } else if (includeInternal) {\n    initial.push(...includeInternal);\n  }\n\n  return moment.tz.names().reduce((zones: TimeZone[], zone: string) => {\n    const countriesForZone = countriesByTimeZone[zone];\n\n    if (!Array.isArray(countriesForZone) || countriesForZone.length === 0) {\n      return zones;\n    }\n\n    zones.push(zone);\n    return zones;\n  }, initial);\n});\n\nexport const getTimeZoneGroups = memoize(\n  (includeInternal: boolean | InternalTimeZones[] = false): GroupedTimeZones[] => {\n    const timeZones = getTimeZones(includeInternal);\n\n    const groups = timeZones.reduce((groups: Record<string, TimeZone[]>, zone: TimeZone) => {\n      const delimiter = zone.indexOf('/');\n\n      if (delimiter === -1) {\n        const group = '';\n        groups[group] = groups[group] ?? [];\n        groups[group].push(zone);\n\n        return groups;\n      }\n\n      const group = zone.slice(0, delimiter);\n      groups[group] = groups[group] ?? [];\n      groups[group].push(zone);\n\n      return groups;\n    }, {});\n\n    return Object.keys(groups).map((name) => ({\n      name,\n      zones: groups[name],\n    }));\n  }\n);\n\nconst mapInternal = (zone: string, timestamp: number): TimeZoneInfo | undefined => {\n  switch (zone) {\n    case InternalTimeZones.utc: {\n      return {\n        name: 'Coordinated Universal Time',\n        ianaName: 'UTC',\n        zone,\n        countries: [],\n        abbreviation: 'UTC, GMT',\n        offsetInMins: 0,\n      };\n    }\n\n    case InternalTimeZones.default: {\n      const tz = getTimeZone();\n      const isInternal = tz === 'browser' || tz === 'utc';\n      const info = isInternal ? mapInternal(tz, timestamp) : mapToInfo(tz, timestamp);\n\n      return {\n        countries: countriesByTimeZone[tz] ?? [],\n        abbreviation: '',\n        offsetInMins: 0,\n        ...info,\n        ianaName: info?.ianaName ?? '',\n        name: 'Default',\n        zone,\n      };\n    }\n\n    case InternalTimeZones.localBrowserTime: {\n      const tz = moment.tz.guess(true);\n      const info = mapToInfo(tz, timestamp);\n\n      return {\n        countries: countriesByTimeZone[tz] ?? [],\n        abbreviation: 'Your local time',\n        offsetInMins: new Date().getTimezoneOffset(),\n        ...info,\n        name: 'Browser Time',\n        ianaName: info?.ianaName ?? '',\n        zone,\n      };\n    }\n\n    default:\n      return undefined;\n  }\n};\n\nconst abbrevationWithoutOffset = (abbrevation: string): string => {\n  if (/^(\\+|\\-).+/.test(abbrevation)) {\n    return '';\n  }\n  return abbrevation;\n};\n\nconst mapToInfo = (timeZone: TimeZone, timestamp: number): TimeZoneInfo | undefined => {\n  const momentTz = moment.tz.zone(timeZone);\n  if (!momentTz) {\n    return undefined;\n  }\n\n  return {\n    name: timeZone,\n    ianaName: momentTz.name,\n    zone: timeZone,\n    countries: countriesByTimeZone[timeZone] ?? [],\n    abbreviation: abbrevationWithoutOffset(momentTz.abbr(timestamp)),\n    offsetInMins: momentTz.utcOffset(timestamp),\n  };\n};\n\n// Country names by ISO 3166-1-alpha-2 code\nconst countryByCode: Record<string, string> = {\n  AF: 'Afghanistan',\n  AX: 'Aland Islands',\n  AL: 'Albania',\n  DZ: 'Algeria',\n  AS: 'American Samoa',\n  AD: 'Andorra',\n  AO: 'Angola',\n  AI: 'Anguilla',\n  AQ: 'Antarctica',\n  AG: 'Antigua And Barbuda',\n  AR: 'Argentina',\n  AM: 'Armenia',\n  AW: 'Aruba',\n  AU: 'Australia',\n  AT: 'Austria',\n  AZ: 'Azerbaijan',\n  BS: 'Bahamas',\n  BH: 'Bahrain',\n  BD: 'Bangladesh',\n  BB: 'Barbados',\n  BY: 'Belarus',\n  BE: 'Belgium',\n  BZ: 'Belize',\n  BJ: 'Benin',\n  BM: 'Bermuda',\n  BT: 'Bhutan',\n  BO: 'Bolivia',\n  BA: 'Bosnia And Herzegovina',\n  BW: 'Botswana',\n  BV: 'Bouvet Island',\n  BR: 'Brazil',\n  IO: 'British Indian Ocean Territory',\n  BN: 'Brunei Darussalam',\n  BG: 'Bulgaria',\n  BF: 'Burkina Faso',\n  BI: 'Burundi',\n  KH: 'Cambodia',\n  CM: 'Cameroon',\n  CA: 'Canada',\n  CV: 'Cape Verde',\n  KY: 'Cayman Islands',\n  CF: 'Central African Republic',\n  TD: 'Chad',\n  CL: 'Chile',\n  CN: 'China',\n  CX: 'Christmas Island',\n  CC: 'Cocos (Keeling) Islands',\n  CO: 'Colombia',\n  KM: 'Comoros',\n  CG: 'Congo',\n  CD: 'Congo, Democratic Republic',\n  CK: 'Cook Islands',\n  CR: 'Costa Rica',\n  CI: \"Cote D'Ivoire\",\n  HR: 'Croatia',\n  CU: 'Cuba',\n  CY: 'Cyprus',\n  CZ: 'Czech Republic',\n  DK: 'Denmark',\n  DJ: 'Djibouti',\n  DM: 'Dominica',\n  DO: 'Dominican Republic',\n  EC: 'Ecuador',\n  EG: 'Egypt',\n  SV: 'El Salvador',\n  GQ: 'Equatorial Guinea',\n  ER: 'Eritrea',\n  EE: 'Estonia',\n  ET: 'Ethiopia',\n  FK: 'Falkland Islands (Malvinas)',\n  FO: 'Faroe Islands',\n  FJ: 'Fiji',\n  FI: 'Finland',\n  FR: 'France',\n  GF: 'French Guiana',\n  PF: 'French Polynesia',\n  TF: 'French Southern Territories',\n  GA: 'Gabon',\n  GM: 'Gambia',\n  GE: 'Georgia',\n  DE: 'Germany',\n  GH: 'Ghana',\n  GI: 'Gibraltar',\n  GR: 'Greece',\n  GL: 'Greenland',\n  GD: 'Grenada',\n  GP: 'Guadeloupe',\n  GU: 'Guam',\n  GT: 'Guatemala',\n  GG: 'Guernsey',\n  GN: 'Guinea',\n  GW: 'Guinea-Bissau',\n  GY: 'Guyana',\n  HT: 'Haiti',\n  HM: 'Heard Island & Mcdonald Islands',\n  VA: 'Holy See (Vatican City State)',\n  HN: 'Honduras',\n  HK: 'Hong Kong',\n  HU: 'Hungary',\n  IS: 'Iceland',\n  IN: 'India',\n  ID: 'Indonesia',\n  IR: 'Iran (Islamic Republic Of)',\n  IQ: 'Iraq',\n  IE: 'Ireland',\n  IM: 'Isle Of Man',\n  IL: 'Israel',\n  IT: 'Italy',\n  JM: 'Jamaica',\n  JP: 'Japan',\n  JE: 'Jersey',\n  JO: 'Jordan',\n  KZ: 'Kazakhstan',\n  KE: 'Kenya',\n  KI: 'Kiribati',\n  KR: 'Korea',\n  KW: 'Kuwait',\n  KG: 'Kyrgyzstan',\n  LA: \"Lao People's Democratic Republic\",\n  LV: 'Latvia',\n  LB: 'Lebanon',\n  LS: 'Lesotho',\n  LR: 'Liberia',\n  LY: 'Libyan Arab Jamahiriya',\n  LI: 'Liechtenstein',\n  LT: 'Lithuania',\n  LU: 'Luxembourg',\n  MO: 'Macao',\n  MK: 'Macedonia',\n  MG: 'Madagascar',\n  MW: 'Malawi',\n  MY: 'Malaysia',\n  MV: 'Maldives',\n  ML: 'Mali',\n  MT: 'Malta',\n  MH: 'Marshall Islands',\n  MQ: 'Martinique',\n  MR: 'Mauritania',\n  MU: 'Mauritius',\n  YT: 'Mayotte',\n  MX: 'Mexico',\n  FM: 'Micronesia (Federated States Of)',\n  MD: 'Moldova',\n  MC: 'Monaco',\n  MN: 'Mongolia',\n  ME: 'Montenegro',\n  MS: 'Montserrat',\n  MA: 'Morocco',\n  MZ: 'Mozambique',\n  MM: 'Myanmar',\n  NA: 'Namibia',\n  NR: 'Nauru',\n  NP: 'Nepal',\n  NL: 'Netherlands',\n  AN: 'Netherlands Antilles',\n  NC: 'New Caledonia',\n  NZ: 'New Zealand',\n  NI: 'Nicaragua',\n  NE: 'Niger',\n  NG: 'Nigeria',\n  NU: 'Niue',\n  NF: 'Norfolk Island',\n  MP: 'Northern Mariana Islands',\n  NO: 'Norway',\n  OM: 'Oman',\n  PK: 'Pakistan',\n  PW: 'Palau',\n  PS: 'Palestine, State of',\n  PA: 'Panama',\n  PG: 'Papua New Guinea',\n  PY: 'Paraguay',\n  PE: 'Peru',\n  PH: 'Philippines',\n  PN: 'Pitcairn',\n  PL: 'Poland',\n  PT: 'Portugal',\n  PR: 'Puerto Rico',\n  QA: 'Qatar',\n  RE: 'Reunion',\n  RO: 'Romania',\n  RU: 'Russian Federation',\n  RW: 'Rwanda',\n  BL: 'Saint Barthelemy',\n  SH: 'Saint Helena',\n  KN: 'Saint Kitts And Nevis',\n  LC: 'Saint Lucia',\n  MF: 'Saint Martin',\n  PM: 'Saint Pierre And Miquelon',\n  VC: 'Saint Vincent And Grenadines',\n  WS: 'Samoa',\n  SM: 'San Marino',\n  ST: 'Sao Tome And Principe',\n  SA: 'Saudi Arabia',\n  SN: 'Senegal',\n  RS: 'Serbia',\n  SC: 'Seychelles',\n  SL: 'Sierra Leone',\n  SG: 'Singapore',\n  SK: 'Slovakia',\n  SI: 'Slovenia',\n  SB: 'Solomon Islands',\n  SO: 'Somalia',\n  ZA: 'South Africa',\n  GS: 'South Georgia And Sandwich Isl.',\n  ES: 'Spain',\n  LK: 'Sri Lanka',\n  SD: 'Sudan',\n  SR: 'Suriname',\n  SJ: 'Svalbard And Jan Mayen',\n  SZ: 'Swaziland',\n  SE: 'Sweden',\n  CH: 'Switzerland',\n  SY: 'Syrian Arab Republic',\n  TW: 'Taiwan',\n  TJ: 'Tajikistan',\n  TZ: 'Tanzania',\n  TH: 'Thailand',\n  TL: 'Timor-Leste',\n  TG: 'Togo',\n  TK: 'Tokelau',\n  TO: 'Tonga',\n  TT: 'Trinidad And Tobago',\n  TN: 'Tunisia',\n  TR: 'Turkey',\n  TM: 'Turkmenistan',\n  TC: 'Turks And Caicos Islands',\n  TV: 'Tuvalu',\n  UG: 'Uganda',\n  UA: 'Ukraine',\n  AE: 'United Arab Emirates',\n  GB: 'United Kingdom',\n  US: 'United States',\n  UM: 'United States Outlying Islands',\n  UY: 'Uruguay',\n  UZ: 'Uzbekistan',\n  VU: 'Vanuatu',\n  VE: 'Venezuela',\n  VN: 'Viet Nam',\n  VG: 'Virgin Islands, British',\n  VI: 'Virgin Islands, U.S.',\n  WF: 'Wallis And Futuna',\n  EH: 'Western Sahara',\n  YE: 'Yemen',\n  ZM: 'Zambia',\n  ZW: 'Zimbabwe',\n};\n\nconst countriesByTimeZone = ((): Record<string, TimeZoneCountry[]> => {\n  return moment.tz.countries().reduce((all: Record<string, TimeZoneCountry[]>, code) => {\n    const timeZones = moment.tz.zonesForCountry(code);\n    return timeZones.reduce((all: Record<string, TimeZoneCountry[]>, timeZone) => {\n      if (!all[timeZone]) {\n        all[timeZone] = [];\n      }\n\n      const name = countryByCode[code];\n\n      if (!name) {\n        return all;\n      }\n\n      // Fix: Only include Antarctica if timezone starts with \"Antarctica/\"\n      // https://github.com/grafana/grafana/issues/104688\n      if (code === 'AQ' && !timeZone.startsWith('Antarctica/')) {\n        return all;\n      }\n\n      all[timeZone].push({ code, name });\n      return all;\n    }, all);\n  }, {});\n})();\n"],"names":["InternalTimeZones","getTimeZone","moment","memoize","groups","group","all"],"mappings":"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"}