UNPKG

country-phone-codes

Version:

[DEPRECATED] A modern, TypeScript-first library providing ISO 3166-1 alpha-2 country codes to international calling codes mapping

1 lines 18.2 kB
{"version":3,"sources":["../src/data.ts","../src/utils.ts"],"names":["countryPhoneCodesMap","reversePhoneCodeMap","acc","countryCode","phoneCode","normalizePhoneCode","code","normalized","hasPlus","getPhoneCode","upperCountryCode","getCountriesByPhoneCode","getAllPhoneCodes","isValidPhoneCode"],"mappings":"aAMO,IAAMA,CAA0D,CAAA,CAErE,EAAM,CAAA,IAAA,CACN,GAAM,IACN,CAAA,EAAA,CAAM,IACN,CAAA,EAAA,CAAM,KACN,EAAM,CAAA,IAAA,CACN,EAAM,CAAA,IAAA,CACN,GAAM,IACN,CAAA,EAAA,CAAM,IACN,CAAA,EAAA,CAAM,IACN,CAAA,EAAA,CAAM,IACN,CAAA,EAAA,CAAM,KACN,EAAM,CAAA,IAAA,CACN,EAAM,CAAA,IAAA,CACN,GAAM,IACN,CAAA,EAAA,CAAM,IACN,CAAA,EAAA,CAAM,KACN,EAAM,CAAA,IAAA,CACN,EAAM,CAAA,IAAA,CACN,EAAM,CAAA,IAAA,CACN,EAAM,CAAA,IAAA,CACN,GAAM,IACN,CAAA,EAAA,CAAM,IACN,CAAA,EAAA,CAAM,KACN,EAAM,CAAA,IAAA,CACN,EAAM,CAAA,IAAA,CAGN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,KACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,KACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,IAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,MAGN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,IACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,KACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,MAAA,CAGN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CAGN,GAAM,KACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,KAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,KAGN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,KACN,CAAA,EAAA,CAAM,MACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,KAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MAAA,CACN,EAAM,CAAA,MAAA,CACN,GAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,MACN,CAAA,EAAA,CAAM,OACN,EAAM,CAAA,MACR,CAMaC,CAAAA,CAAAA,CAA2C,OAAO,OAAQD,CAAAA,CAAoB,CAAE,CAAA,MAAA,CAC3F,CAACE,CAAK,CAAA,CAACC,CAAaC,CAAAA,CAAS,CACtBF,IAAAA,CAAAA,CAAIE,CAAS,CAAA,GAChBF,EAAIE,CAAS,CAAA,CAAI,EAAC,CAAA,CAEpBF,EAAIE,CAAS,CAAA,CAAE,IAAKD,CAAAA,CAA4B,EACzCD,CAET,CAAA,CAAA,EACF,ECjOO,SAASG,CAAAA,CAAmBC,CAAkD,CAAA,CACnF,GAAI,CAACA,CAAAA,EAAQ,OAAOA,CAAAA,EAAS,SAC3B,OAIF,IAAIC,CAAaD,CAAAA,CAAAA,CAAK,MAChBE,CAAAA,CAAAA,CAAUD,CAAW,CAAA,UAAA,CAAW,GAAG,CAAA,CAmBzC,GAhBAA,CAAAA,CAAaA,EAAW,OAAQ,CAAA,SAAA,CAAW,EAAE,CAAA,CAGzCA,EAAW,UAAW,CAAA,IAAI,CAC5BA,CAAAA,CAAAA,CAAaA,EAAW,SAAU,CAAA,CAAC,CAC1B,CAAA,CAACC,CAAWD,EAAAA,CAAAA,CAAW,UAAW,CAAA,GAAG,IAE9CA,CAAaA,CAAAA,CAAAA,CAAW,OAAQ,CAAA,KAAA,CAAO,EAAE,CAItCA,CAAAA,CAAAA,CAAAA,CAAW,UAAW,CAAA,GAAG,IAC5BA,CAAa,CAAA,GAAA,CAAMA,CAIjB,CAAA,CAAA,EAAAA,CAAW,CAAA,MAAA,CAAS,CAAKA,EAAAA,CAAAA,GAAe,KAI5C,OAAOA,CACT,CAaO,SAASE,EAAaN,CAAyD,CAAA,CACpF,GAAI,CAACA,GAAe,OAAOA,CAAAA,EAAgB,QACzC,CAAA,OAGF,IAAMO,CAAAA,CAAmBP,CAAY,CAAA,WAAA,GACrC,OAAOH,CAAAA,CAAqBU,CAAgB,CAC9C,CAaO,SAASC,CAAAA,CAAwBP,CAAoC,CAAA,CAC1E,GAAI,CAACA,CAAAA,EAAa,OAAOA,CAAAA,EAAc,QACrC,CAAA,OAAO,EAAC,CAGV,IAAMG,CAAaF,CAAAA,CAAAA,CAAmBD,CAAS,CAAA,CAC/C,OAAKG,CAIEN,CAAAA,CAAAA,CAAoBM,CAAU,CAAA,EAAK,EAHjC,CAAA,EAIX,CAUO,SAASK,CAAAA,EAA6C,CAC3D,OAAO,OAAO,IAAKX,CAAAA,CAAmB,CACxC,CAaO,SAASY,CAAiBT,CAAAA,CAAAA,CAA4B,CAC3D,GAAI,CAACA,CAAa,EAAA,OAAOA,CAAc,EAAA,QAAA,CACrC,OAAO,MAGT,CAAA,IAAMG,CAAaF,CAAAA,CAAAA,CAAmBD,CAAS,CAC/C,CAAA,OAAKG,CAIE,CAAA,MAAA,CAAO,UAAU,cAAe,CAAA,IAAA,CAAKN,CAAqBM,CAAAA,CAAU,EAHlE,KAIX","file":"index.cjs","sourcesContent":["import { CountryPhoneCodeMapData, InternationalPhoneCode, CountryCodeA2, ReversePhoneCodeMap } from './types';\n\n/**\n * Map of ISO 3166-1 alpha-2 country codes to their international phone codes.\n * This dataset is based on ITU-T E.164 assignments.\n */\nexport const countryPhoneCodesMap: Readonly<CountryPhoneCodeMapData> = {\n // North America (NANP countries)\n \"US\": \"+1\", // United States\n \"CA\": \"+1\", // Canada\n \"AG\": \"+1\", // Antigua and Barbuda \n \"AI\": \"+1\", // Anguilla\n \"AS\": \"+1\", // American Samoa\n \"BB\": \"+1\", // Barbados\n \"BM\": \"+1\", // Bermuda\n \"BS\": \"+1\", // Bahamas\n \"DM\": \"+1\", // Dominica\n \"DO\": \"+1\", // Dominican Republic\n \"GD\": \"+1\", // Grenada\n \"GU\": \"+1\", // Guam\n \"JM\": \"+1\", // Jamaica\n \"KN\": \"+1\", // Saint Kitts and Nevis\n \"KY\": \"+1\", // Cayman Islands\n \"LC\": \"+1\", // Saint Lucia\n \"MP\": \"+1\", // Northern Mariana Islands\n \"MS\": \"+1\", // Montserrat\n \"PR\": \"+1\", // Puerto Rico\n \"SX\": \"+1\", // Sint Maarten\n \"TC\": \"+1\", // Turks and Caicos Islands\n \"TT\": \"+1\", // Trinidad and Tobago\n \"VC\": \"+1\", // Saint Vincent and the Grenadines\n \"VG\": \"+1\", // British Virgin Islands\n \"VI\": \"+1\", // U.S. Virgin Islands\n\n // Europe\n \"AL\": \"+355\", // Albania\n \"AD\": \"+376\", // Andorra\n \"AT\": \"+43\", // Austria\n \"BY\": \"+375\", // Belarus\n \"BE\": \"+32\", // Belgium\n \"BA\": \"+387\", // Bosnia and Herzegovina\n \"BG\": \"+359\", // Bulgaria\n \"HR\": \"+385\", // Croatia\n \"CY\": \"+357\", // Cyprus\n \"CZ\": \"+420\", // Czech Republic\n \"DK\": \"+45\", // Denmark\n \"EE\": \"+372\", // Estonia\n \"FO\": \"+298\", // Faroe Islands\n \"FI\": \"+358\", // Finland\n \"FR\": \"+33\", // France\n \"DE\": \"+49\", // Germany\n \"GI\": \"+350\", // Gibraltar\n \"GR\": \"+30\", // Greece\n \"HU\": \"+36\", // Hungary\n \"IS\": \"+354\", // Iceland\n \"IE\": \"+353\", // Ireland\n \"IM\": \"+44\", // Isle of Man\n \"IT\": \"+39\", // Italy\n \"LV\": \"+371\", // Latvia\n \"LI\": \"+423\", // Liechtenstein\n \"LT\": \"+370\", // Lithuania\n \"LU\": \"+352\", // Luxembourg\n \"MT\": \"+356\", // Malta\n \"MD\": \"+373\", // Moldova\n \"MC\": \"+377\", // Monaco\n \"ME\": \"+382\", // Montenegro\n \"NL\": \"+31\", // Netherlands\n \"MK\": \"+389\", // North Macedonia\n \"NO\": \"+47\", // Norway\n \"PL\": \"+48\", // Poland\n \"PT\": \"+351\", // Portugal\n \"RO\": \"+40\", // Romania\n \"RU\": \"+7\", // Russia\n \"SM\": \"+378\", // San Marino\n \"RS\": \"+381\", // Serbia\n \"SK\": \"+421\", // Slovakia\n \"SI\": \"+386\", // Slovenia\n \"ES\": \"+34\", // Spain\n \"SE\": \"+46\", // Sweden\n \"CH\": \"+41\", // Switzerland\n \"UA\": \"+380\", // Ukraine\n \"GB\": \"+44\", // United Kingdom\n \"VA\": \"+39\", // Vatican City (Holy See)\n\n // Asia\n \"AF\": \"+93\", // Afghanistan\n \"AM\": \"+374\", // Armenia\n \"AZ\": \"+994\", // Azerbaijan\n \"BH\": \"+973\", // Bahrain\n \"BD\": \"+880\", // Bangladesh\n \"BT\": \"+975\", // Bhutan\n \"BN\": \"+673\", // Brunei\n \"KH\": \"+855\", // Cambodia\n \"CN\": \"+86\", // China\n \"GE\": \"+995\", // Georgia\n \"IN\": \"+91\", // India\n \"ID\": \"+62\", // Indonesia\n \"IR\": \"+98\", // Iran\n \"IQ\": \"+964\", // Iraq\n \"IL\": \"+972\", // Israel\n \"JP\": \"+81\", // Japan\n \"JO\": \"+962\", // Jordan\n \"KZ\": \"+7\", // Kazakhstan\n \"KW\": \"+965\", // Kuwait\n \"KG\": \"+996\", // Kyrgyzstan\n \"LA\": \"+856\", // Laos\n \"LB\": \"+961\", // Lebanon\n \"MY\": \"+60\", // Malaysia\n \"MV\": \"+960\", // Maldives\n \"MN\": \"+976\", // Mongolia\n \"MM\": \"+95\", // Myanmar (Burma)\n \"NP\": \"+977\", // Nepal\n \"KP\": \"+850\", // North Korea\n \"OM\": \"+968\", // Oman\n \"PK\": \"+92\", // Pakistan\n \"PS\": \"+970\", // Palestine\n \"PH\": \"+63\", // Philippines\n \"QA\": \"+974\", // Qatar\n \"SA\": \"+966\", // Saudi Arabia\n \"SG\": \"+65\", // Singapore\n \"KR\": \"+82\", // South Korea\n \"LK\": \"+94\", // Sri Lanka\n \"SY\": \"+963\", // Syria\n \"TW\": \"+886\", // Taiwan\n \"TJ\": \"+992\", // Tajikistan\n \"TH\": \"+66\", // Thailand\n \"TR\": \"+90\", // Turkey\n \"TM\": \"+993\", // Turkmenistan\n \"AE\": \"+971\", // United Arab Emirates\n \"UZ\": \"+998\", // Uzbekistan\n \"VN\": \"+84\", // Vietnam\n \"YE\": \"+967\", // Yemen\n\n // Africa\n \"DZ\": \"+213\", // Algeria\n \"AO\": \"+244\", // Angola\n \"BJ\": \"+229\", // Benin\n \"BW\": \"+267\", // Botswana\n \"BF\": \"+226\", // Burkina Faso\n \"BI\": \"+257\", // Burundi\n \"CM\": \"+237\", // Cameroon\n \"CV\": \"+238\", // Cape Verde\n \"CF\": \"+236\", // Central African Republic\n \"TD\": \"+235\", // Chad\n \"KM\": \"+269\", // Comoros\n \"CD\": \"+243\", // Democratic Republic of the Congo\n \"DJ\": \"+253\", // Djibouti\n \"EG\": \"+20\", // Egypt\n \"GQ\": \"+240\", // Equatorial Guinea\n \"ER\": \"+291\", // Eritrea\n \"SZ\": \"+268\", // Eswatini (Swaziland)\n \"ET\": \"+251\", // Ethiopia\n \"GA\": \"+241\", // Gabon\n \"GM\": \"+220\", // Gambia\n \"GH\": \"+233\", // Ghana\n \"GN\": \"+224\", // Guinea\n \"GW\": \"+245\", // Guinea-Bissau\n \"CI\": \"+225\", // Ivory Coast\n \"KE\": \"+254\", // Kenya\n \"LS\": \"+266\", // Lesotho\n \"LR\": \"+231\", // Liberia\n \"LY\": \"+218\", // Libya\n \"MG\": \"+261\", // Madagascar\n \"MW\": \"+265\", // Malawi\n \"ML\": \"+223\", // Mali\n \"MR\": \"+222\", // Mauritania\n \"MU\": \"+230\", // Mauritius\n \"MA\": \"+212\", // Morocco\n \"MZ\": \"+258\", // Mozambique\n \"NA\": \"+264\", // Namibia\n \"NE\": \"+227\", // Niger\n \"NG\": \"+234\", // Nigeria\n \"CG\": \"+242\", // Republic of the Congo\n \"RW\": \"+250\", // Rwanda\n \"ST\": \"+239\", // São Tomé and Príncipe\n \"SN\": \"+221\", // Senegal\n \"SC\": \"+248\", // Seychelles\n \"SL\": \"+232\", // Sierra Leone\n \"SO\": \"+252\", // Somalia\n \"ZA\": \"+27\", // South Africa\n \"SS\": \"+211\", // South Sudan\n \"SD\": \"+249\", // Sudan\n \"TZ\": \"+255\", // Tanzania\n \"TG\": \"+228\", // Togo\n \"TN\": \"+216\", // Tunisia\n \"UG\": \"+256\", // Uganda\n \"EH\": \"+212\", // Western Sahara\n \"ZM\": \"+260\", // Zambia\n \"ZW\": \"+263\", // Zimbabwe\n\n // South America\n \"AR\": \"+54\", // Argentina\n \"BO\": \"+591\", // Bolivia\n \"BR\": \"+55\", // Brazil\n \"CL\": \"+56\", // Chile\n \"CO\": \"+57\", // Colombia\n \"EC\": \"+593\", // Ecuador\n \"FK\": \"+500\", // Falkland Islands\n \"GF\": \"+594\", // French Guiana\n \"GY\": \"+592\", // Guyana\n \"PY\": \"+595\", // Paraguay\n \"PE\": \"+51\", // Peru\n \"SR\": \"+597\", // Suriname\n \"UY\": \"+598\", // Uruguay\n \"VE\": \"+58\", // Venezuela\n\n // Oceania\n \"AU\": \"+61\", // Australia\n \"CX\": \"+61\", // Christmas Island\n \"CC\": \"+61\", // Cocos Islands\n \"CK\": \"+682\", // Cook Islands\n \"FJ\": \"+679\", // Fiji\n \"PF\": \"+689\", // French Polynesia\n \"KI\": \"+686\", // Kiribati\n \"MH\": \"+692\", // Marshall Islands\n \"FM\": \"+691\", // Micronesia\n \"NR\": \"+674\", // Nauru\n \"NC\": \"+687\", // New Caledonia\n \"NZ\": \"+64\", // New Zealand\n \"NU\": \"+683\", // Niue\n \"NF\": \"+672\", // Norfolk Island\n \"PW\": \"+680\", // Palau\n \"PG\": \"+675\", // Papua New Guinea\n \"WS\": \"+685\", // Samoa\n \"SB\": \"+677\", // Solomon Islands\n \"TL\": \"+670\", // Timor-Leste\n \"TO\": \"+676\", // Tonga\n \"TV\": \"+688\", // Tuvalu\n \"VU\": \"+678\", // Vanuatu\n \"WF\": \"+681\", // Wallis and Futuna\n};\n\n/**\n * Internal reverse map for finding countries by phone code.\n * This is computed once at initialization for efficiency.\n */\nexport const reversePhoneCodeMap: ReversePhoneCodeMap = Object.entries(countryPhoneCodesMap).reduce(\n (acc, [countryCode, phoneCode]) => {\n if (!acc[phoneCode]) {\n acc[phoneCode] = [];\n }\n acc[phoneCode].push(countryCode as CountryCodeA2);\n return acc;\n },\n {} as Record<InternationalPhoneCode, CountryCodeA2[]>\n); ","import { CountryCodeA2, InternationalPhoneCode } from './types';\nimport { countryPhoneCodesMap, reversePhoneCodeMap } from './data';\n\n/**\n * Normalizes a phone code to ensure it has the proper format.\n * \n * This function attempts to clean the input by removing common non-digit\n * characters (spaces, hyphens, parentheses), ensuring it starts with a '+',\n * and contains only digits after the '+'.\n * \n * @param code The phone code string to normalize\n * @returns The normalized phone code or undefined if it can't be reasonably normalized\n * \n * @example\n * normalizePhoneCode('1') // returns '+1'\n * normalizePhoneCode('+44') // returns '+44'\n * normalizePhoneCode('(0049) 123') // returns '+49123'\n * normalizePhoneCode('49 123-456') // returns '+49123456'\n * normalizePhoneCode('abc') // returns undefined\n */\nexport function normalizePhoneCode(code: string): InternationalPhoneCode | undefined {\n if (!code || typeof code !== 'string') {\n return undefined;\n }\n\n // First, remove all non-digit characters, except for a leading '+'\n let normalized = code.trim();\n const hasPlus = normalized.startsWith('+');\n \n // Remove all non-digit characters\n normalized = normalized.replace(/[^\\d+]/g, '');\n \n // Check for international prefix '00' and remove it\n if (normalized.startsWith('00')) {\n normalized = normalized.substring(2);\n } else if (!hasPlus && normalized.startsWith('0')) {\n // Remove leading zeros if there was no '+' initially\n normalized = normalized.replace(/^0+/, '');\n }\n \n // Add '+' if not present\n if (!normalized.startsWith('+')) {\n normalized = '+' + normalized;\n }\n \n // Check if we have at least one digit after the '+'\n if (normalized.length < 2 || normalized === '+') {\n return undefined;\n }\n \n return normalized;\n}\n\n/**\n * Gets the international phone code for a given country code.\n * \n * @param countryCode ISO 3166-1 alpha-2 country code (case-insensitive)\n * @returns The international phone code or undefined if the country code is not found\n * \n * @example\n * getPhoneCode('US') // returns '+1'\n * getPhoneCode('in') // returns '+91'\n * getPhoneCode('XX') // returns undefined\n */\nexport function getPhoneCode(countryCode: string): InternationalPhoneCode | undefined {\n if (!countryCode || typeof countryCode !== 'string') {\n return undefined;\n }\n \n const upperCountryCode = countryCode.toUpperCase();\n return countryPhoneCodesMap[upperCountryCode];\n}\n\n/**\n * Gets all countries that use a specific phone code.\n * \n * @param phoneCode The international phone code to look up\n * @returns An array of country codes that use this phone code, or an empty array if none\n * \n * @example\n * getCountriesByPhoneCode('+1') // returns ['US', 'CA', 'AG', ...]\n * getCountriesByPhoneCode('44') // returns ['GB', 'IM']\n * getCountriesByPhoneCode('+999') // returns []\n */\nexport function getCountriesByPhoneCode(phoneCode: string): CountryCodeA2[] {\n if (!phoneCode || typeof phoneCode !== 'string') {\n return [];\n }\n \n const normalized = normalizePhoneCode(phoneCode);\n if (!normalized) {\n return [];\n }\n \n return reversePhoneCodeMap[normalized] || [];\n}\n\n/**\n * Gets an array of all unique international phone codes.\n * \n * @returns Array of all unique phone codes in the dataset\n * \n * @example\n * getAllPhoneCodes() // returns ['+1', '+7', '+20', '+27', ...]\n */\nexport function getAllPhoneCodes(): InternationalPhoneCode[] {\n return Object.keys(reversePhoneCodeMap);\n}\n\n/**\n * Checks if the provided string is a valid international phone code.\n * \n * @param phoneCode The phone code to validate\n * @returns True if the phone code is valid, false otherwise\n * \n * @example\n * isValidPhoneCode('+1') // returns true\n * isValidPhoneCode('44') // returns true (normalized to '+44')\n * isValidPhoneCode('+999') // returns false\n */\nexport function isValidPhoneCode(phoneCode: string): boolean {\n if (!phoneCode || typeof phoneCode !== 'string') {\n return false;\n }\n \n const normalized = normalizePhoneCode(phoneCode);\n if (!normalized) {\n return false;\n }\n \n return Object.prototype.hasOwnProperty.call(reversePhoneCodeMap, normalized);\n} "]}