{"version":3,"sources":["../src/language.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n\nexport const KNOWN_LANGUAGE_CODES = [\n  'af',\n  'am',\n  'ar',\n  'as',\n  'az',\n  'be',\n  'bg',\n  'bn',\n  'bs',\n  'ca',\n  'cs',\n  'cy',\n  'da',\n  'de',\n  'el',\n  'en',\n  'es',\n  'et',\n  'eu',\n  'fa',\n  'ff',\n  'fi',\n  'fr',\n  'ga',\n  'gl',\n  'gu',\n  'ha',\n  'he',\n  'hi',\n  'hr',\n  'hu',\n  'hy',\n  'id',\n  'ig',\n  'is',\n  'it',\n  'ja',\n  'jv',\n  'ka',\n  'kk',\n  'km',\n  'kn',\n  'ko',\n  'ku',\n  'ky',\n  'lb',\n  'lg',\n  'ln',\n  'lo',\n  'lt',\n  'lv',\n  'mi',\n  'mk',\n  'ml',\n  'mn',\n  'mr',\n  'ms',\n  'mt',\n  'my',\n  'ne',\n  'nl',\n  'no',\n  'ny',\n  'oc',\n  'or',\n  'pa',\n  'pl',\n  'ps',\n  'pt',\n  'ro',\n  'ru',\n  'sd',\n  'sk',\n  'sl',\n  'sn',\n  'so',\n  'sq',\n  'sr',\n  'sv',\n  'sw',\n  'ta',\n  'te',\n  'tg',\n  'th',\n  'tl',\n  'tr',\n  'uk',\n  'ur',\n  'uz',\n  'vi',\n  'wo',\n  'xh',\n  'yo',\n  'zh',\n  'zu',\n] as const;\n\nexport type KnownLanguageCode = (typeof KNOWN_LANGUAGE_CODES)[number];\n\ndeclare const languageCodeBrand: unique symbol;\n\nexport type LanguageCode = string & { readonly [languageCodeBrand]: 'LanguageCode' };\n\nexport function asLanguageCode(language: string): LanguageCode {\n  return language as LanguageCode;\n}\n\nconst ISO_639_3_TO_1: Record<string, string | undefined> = {\n  afr: 'af',\n  amh: 'am',\n  ara: 'ar',\n  hye: 'hy',\n  asm: 'as',\n  ast: undefined,\n  aze: 'az',\n  bel: 'be',\n  ben: 'bn',\n  bos: 'bs',\n  bul: 'bg',\n  mya: 'my',\n  yue: undefined,\n  cat: 'ca',\n  ceb: undefined,\n  cmn: 'zh',\n  nya: 'ny',\n  hrv: 'hr',\n  ces: 'cs',\n  dan: 'da',\n  nld: 'nl',\n  eng: 'en',\n  est: 'et',\n  fil: undefined,\n  fin: 'fi',\n  fra: 'fr',\n  ful: 'ff',\n  glg: 'gl',\n  lug: 'lg',\n  kat: 'ka',\n  deu: 'de',\n  ell: 'el',\n  guj: 'gu',\n  hau: 'ha',\n  heb: 'he',\n  hin: 'hi',\n  hun: 'hu',\n  isl: 'is',\n  ibo: 'ig',\n  ind: 'id',\n  gle: 'ga',\n  ita: 'it',\n  jpn: 'ja',\n  jav: 'jv',\n  kea: undefined,\n  kan: 'kn',\n  kaz: 'kk',\n  khm: 'km',\n  kor: 'ko',\n  kur: 'ku',\n  kir: 'ky',\n  lao: 'lo',\n  lav: 'lv',\n  lin: 'ln',\n  lit: 'lt',\n  luo: undefined,\n  ltz: 'lb',\n  mkd: 'mk',\n  msa: 'ms',\n  mal: 'ml',\n  mlt: 'mt',\n  zho: 'zh',\n  mri: 'mi',\n  mar: 'mr',\n  mon: 'mn',\n  nep: 'ne',\n  nso: undefined,\n  nor: 'no',\n  oci: 'oc',\n  ori: 'or',\n  pus: 'ps',\n  fas: 'fa',\n  pol: 'pl',\n  por: 'pt',\n  pan: 'pa',\n  ron: 'ro',\n  rus: 'ru',\n  srp: 'sr',\n  sna: 'sn',\n  snd: 'sd',\n  slk: 'sk',\n  slv: 'sl',\n  som: 'so',\n  spa: 'es',\n  swa: 'sw',\n  swe: 'sv',\n  tam: 'ta',\n  tgk: 'tg',\n  tel: 'te',\n  tha: 'th',\n  tur: 'tr',\n  ukr: 'uk',\n  umb: undefined,\n  urd: 'ur',\n  uzb: 'uz',\n  vie: 'vi',\n  cym: 'cy',\n  wol: 'wo',\n  xho: 'xh',\n  zul: 'zu',\n};\n\nconst LANGUAGE_NAMES_TO_CODE: Record<string, string> = {\n  afrikaans: 'af',\n  albanian: 'sq',\n  amharic: 'am',\n  arabic: 'ar',\n  armenian: 'hy',\n  azerbaijani: 'az',\n  basque: 'eu',\n  belarusian: 'be',\n  bengali: 'bn',\n  bosnian: 'bs',\n  bulgarian: 'bg',\n  burmese: 'my',\n  catalan: 'ca',\n  chinese: 'zh',\n  croatian: 'hr',\n  czech: 'cs',\n  danish: 'da',\n  dutch: 'nl',\n  english: 'en',\n  estonian: 'et',\n  finnish: 'fi',\n  french: 'fr',\n  galician: 'gl',\n  georgian: 'ka',\n  german: 'de',\n  greek: 'el',\n  gujarati: 'gu',\n  hausa: 'ha',\n  hebrew: 'he',\n  hindi: 'hi',\n  hungarian: 'hu',\n  icelandic: 'is',\n  indonesian: 'id',\n  irish: 'ga',\n  italian: 'it',\n  japanese: 'ja',\n  javanese: 'jv',\n  kannada: 'kn',\n  kazakh: 'kk',\n  khmer: 'km',\n  korean: 'ko',\n  kurdish: 'ku',\n  kyrgyz: 'ky',\n  lao: 'lo',\n  latvian: 'lv',\n  lingala: 'ln',\n  lithuanian: 'lt',\n  luxembourgish: 'lb',\n  macedonian: 'mk',\n  malay: 'ms',\n  malayalam: 'ml',\n  maltese: 'mt',\n  maori: 'mi',\n  marathi: 'mr',\n  mongolian: 'mn',\n  nepali: 'ne',\n  norwegian: 'no',\n  occitan: 'oc',\n  oriya: 'or',\n  pashto: 'ps',\n  persian: 'fa',\n  polish: 'pl',\n  portuguese: 'pt',\n  punjabi: 'pa',\n  romanian: 'ro',\n  russian: 'ru',\n  serbian: 'sr',\n  shona: 'sn',\n  sindhi: 'sd',\n  slovak: 'sk',\n  slovene: 'sl',\n  slovenian: 'sl',\n  somali: 'so',\n  spanish: 'es',\n  swahili: 'sw',\n  swedish: 'sv',\n  tagalog: 'tl',\n  tamil: 'ta',\n  tajik: 'tg',\n  telugu: 'te',\n  thai: 'th',\n  turkish: 'tr',\n  ukrainian: 'uk',\n  urdu: 'ur',\n  uzbek: 'uz',\n  vietnamese: 'vi',\n  welsh: 'cy',\n  wolof: 'wo',\n  xhosa: 'xh',\n  yoruba: 'yo',\n  zulu: 'zu',\n};\n\nconst CODE_TO_LANGUAGE_NAME: Record<string, string> = Object.fromEntries(\n  Object.entries(LANGUAGE_NAMES_TO_CODE).map(([name, code]) => [code, name]),\n);\n\nCODE_TO_LANGUAGE_NAME.sl = 'slovene';\n\nexport function normalizeLanguage(language: string): LanguageCode {\n  const lowered = language.trim().toLowerCase();\n  if (lowered === '') {\n    return asLanguageCode('');\n  }\n\n  if (lowered in LANGUAGE_NAMES_TO_CODE) {\n    return asLanguageCode(LANGUAGE_NAMES_TO_CODE[lowered]!);\n  }\n\n  if (lowered in ISO_639_3_TO_1) {\n    return asLanguageCode(ISO_639_3_TO_1[lowered] ?? lowered);\n  }\n\n  const parts = lowered.replaceAll('_', '-').split('-');\n  if (parts.length >= 2) {\n    const [base, ...rest] = parts;\n    return asLanguageCode(\n      [\n        base,\n        ...rest.map((part) => {\n          if (part.length === 4) {\n            return part.charAt(0).toUpperCase() + part.slice(1);\n          }\n          return part.toUpperCase();\n        }),\n      ].join('-'),\n    );\n  }\n\n  return asLanguageCode(lowered);\n}\n\nexport function getBaseLanguage(language: string): string {\n  const normalized = normalizeLanguage(language);\n  const [base = ''] = normalized.split('-');\n  return ISO_639_3_TO_1[base] ?? base;\n}\n\nexport function getIsoLanguage(language: string): string {\n  const normalized = normalizeLanguage(language);\n  const region = getLanguageRegion(normalized);\n  const baseLanguage = getBaseLanguage(normalized);\n  return region ? `${baseLanguage}-${region}` : baseLanguage;\n}\n\nexport function getLanguageRegion(language: string): string | undefined {\n  const normalized = normalizeLanguage(language);\n  const [, ...parts] = normalized.split('-');\n  return parts.find((part) => part.length === 2);\n}\n\nexport function toLanguageName(language: string): string | undefined {\n  return CODE_TO_LANGUAGE_NAME[getBaseLanguage(language)];\n}\n\nexport function areLanguagesEquivalent(\n  left: string | null | undefined,\n  right: string | null | undefined,\n): boolean {\n  if (left == null || right == null) {\n    return left === right;\n  }\n  return normalizeLanguage(left) === normalizeLanguage(right);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,eAAe,UAAgC;AAC7D,SAAO;AACT;AAEA,MAAM,iBAAqD;AAAA,EACzD,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA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","names":[]}