// @flow export const countries = [ { name: 'Afghanistan', dialCode: '93', code: 'af' }, { name: 'Aland Islands', dialCode: '358', code: 'ax' }, { name: 'Albania', dialCode: '355', code: 'al' }, { name: 'Algeria', dialCode: '213', code: 'dz' }, { name: 'AmericanSamoa', dialCode: '1684', code: 'as' }, { name: 'Andorra', dialCode: '376', code: 'ad' }, { name: 'Angola', dialCode: '244', code: 'ao' }, { name: 'Anguilla', dialCode: '1264', code: 'ai' }, { name: 'Antarctica', dialCode: '672', code: 'aq' }, { name: 'Antigua and Barbuda', dialCode: '1268', code: 'ag' }, { name: 'Argentina', dialCode: '54', code: 'ar' }, { name: 'Armenia', dialCode: '374', code: 'am' }, { name: 'Aruba', dialCode: '297', code: 'aw' }, { name: 'Australia', dialCode: '61', code: 'au' }, { name: 'Austria', dialCode: '43', code: 'at' }, { name: 'Azerbaijan', dialCode: '994', code: 'az' }, { name: 'Bahamas', dialCode: '1242', code: 'bs' }, { name: 'Bahrain', dialCode: '973', code: 'bh' }, { name: 'Bangladesh', dialCode: '880', code: 'bd' }, { name: 'Barbados', dialCode: '1246', code: 'bb' }, { name: 'Belarus', dialCode: '375', code: 'by' }, { name: 'Belgium', dialCode: '32', code: 'be' }, { name: 'Belize', dialCode: '501', code: 'bz' }, { name: 'Benin', dialCode: '229', code: 'bj' }, { name: 'Bermuda', dialCode: '1441', code: 'bm' }, { name: 'Bhutan', dialCode: '975', code: 'bt' }, { name: 'Bolivia, Plurinational State of', dialCode: '591', code: 'bo' }, { name: 'Bosnia and Herzegovina', dialCode: '387', code: 'ba' }, { name: 'Botswana', dialCode: '267', code: 'bw' }, { name: 'Brazil', dialCode: '55', code: 'br' }, { name: 'British Indian Ocean Territory', dialCode: '246', code: 'io' }, { name: 'Brunei Darussalam', dialCode: '673', code: 'bn' }, { name: 'Bulgaria', dialCode: '359', code: 'bg' }, { name: 'Burkina Faso', dialCode: '226', code: 'bf' }, { name: 'Burundi', dialCode: '257', code: 'bi' }, { name: 'Cambodia', dialCode: '855', code: 'kh' }, { name: 'Cameroon', dialCode: '237', code: 'cm' }, { name: 'Canada', dialCode: '1', code: 'ca' }, { name: 'Cape Verde', dialCode: '238', code: 'cv' }, { name: 'Cayman Islands', dialCode: ' 345', code: 'ky' }, { name: 'Central African Republic', dialCode: '236', code: 'cf' }, { name: 'Chad', dialCode: '235', code: 'td' }, { name: 'Chile', dialCode: '56', code: 'cl' }, { name: 'China', dialCode: '86', code: 'cn' }, { name: 'Christmas Island', dialCode: '61', code: 'cx' }, { name: 'Cocos (Keeling) Islands', dialCode: '61', code: 'cc' }, { name: 'Colombia', dialCode: '57', code: 'co' }, { name: 'Comoros', dialCode: '269', code: 'km' }, { name: 'Congo', dialCode: '242', code: 'cg' }, { name: 'Congo, The Democratic Republic of the Congo', dialCode: '243', code: 'cd' }, { name: 'Cook Islands', dialCode: '682', code: 'ck' }, { name: 'Costa Rica', dialCode: '506', code: 'cr' }, { name: 'Cote d\'Ivoire', dialCode: '225', code: 'ci' }, { name: 'Croatia', dialCode: '385', code: 'hr' }, { name: 'Cuba', dialCode: '53', code: 'cu' }, { name: 'Cyprus', dialCode: '357', code: 'cy' }, { name: 'Czech Republic', dialCode: '420', code: 'cz' }, { name: 'Denmark', dialCode: '45', code: 'dk' }, { name: 'Djibouti', dialCode: '253', code: 'dj' }, { name: 'Dominica', dialCode: '1767', code: 'dm' }, { name: 'Dominican Republic', dialCode: '1849', code: 'do' }, { name: 'Ecuador', dialCode: '593', code: 'ec' }, { name: 'Egypt', dialCode: '20', code: 'eg' }, { name: 'El Salvador', dialCode: '503', code: 'sv' }, { name: 'Equatorial Guinea', dialCode: '240', code: 'gq' }, { name: 'Eritrea', dialCode: '291', code: 'er' }, { name: 'Estonia', dialCode: '372', code: 'ee' }, { name: 'Ethiopia', dialCode: '251', code: 'et' }, { name: 'Falkland Islands (Malvinas)', dialCode: '500', code: 'fk' }, { name: 'Faroe Islands', dialCode: '298', code: 'fo' }, { name: 'Fiji', dialCode: '679', code: 'fj' }, { name: 'Finland', dialCode: '358', code: 'fi' }, { name: 'France', dialCode: '33', code: 'fr' }, { name: 'French Guiana', dialCode: '594', code: 'gf' }, { name: 'French Polynesia', dialCode: '689', code: 'pf' }, { name: 'Gabon', dialCode: '241', code: 'ga' }, { name: 'Gambia', dialCode: '220', code: 'gm' }, { name: 'Georgia', dialCode: '995', code: 'ge' }, { name: 'Germany', dialCode: '49', code: 'de' }, { name: 'Ghana', dialCode: '233', code: 'gh' }, { name: 'Gibraltar', dialCode: '350', code: 'gi' }, { name: 'Greece', dialCode: '30', code: 'gr' }, { name: 'Greenland', dialCode: '299', code: 'gl' }, { name: 'Grenada', dialCode: '1473', code: 'gd' }, { name: 'Guadeloupe', dialCode: '590', code: 'gp' }, { name: 'Guam', dialCode: '1671', code: 'gu' }, { name: 'Guatemala', dialCode: '502', code: 'gt' }, { name: 'Guernsey', dialCode: '44', code: 'gg' }, { name: 'Guinea', dialCode: '224', code: 'gn' }, { name: 'Guinea-Bissau', dialCode: '245', code: 'gw' }, { name: 'Guyana', dialCode: '595', code: 'gy' }, { name: 'Haiti', dialCode: '509', code: 'ht' }, { name: 'Holy See (Vatican City State)', dialCode: '379', code: 'va' }, { name: 'Honduras', dialCode: '504', code: 'hn' }, { name: 'Hong Kong', dialCode: '852', code: 'hk' }, { name: 'Hungary', dialCode: '36', code: 'hu' }, { name: 'Iceland', dialCode: '354', code: 'is' }, { name: 'India', dialCode: '91', code: 'in' }, { name: 'Indonesia', dialCode: '62', code: 'id' }, { name: 'Iran, Islamic Republic of Persian Gulf', dialCode: '98', code: 'ir' }, { name: 'Iraq', dialCode: '964', code: 'iq' }, { name: 'Ireland', dialCode: '353', code: 'ie' }, { name: 'Isle of Man', dialCode: '44', code: 'im' }, { name: 'Israel', dialCode: '972', code: 'il' }, { name: 'Italy', dialCode: '39', code: 'it' }, { name: 'Jamaica', dialCode: '1876', code: 'jm' }, { name: 'Japan', dialCode: '81', code: 'jp' }, { name: 'Jersey', dialCode: '44', code: 'je' }, { name: 'Jordan', dialCode: '962', code: 'jo' }, { name: 'Kazakhstan', dialCode: '77', code: 'kz' }, { name: 'Kenya', dialCode: '254', code: 'ke' }, { name: 'Kiribati', dialCode: '686', code: 'ki' }, { name: 'Korea, Democratic People\'s Republic of Korea', dialCode: '850', code: 'kp' }, { name: 'Korea, Republic of South Korea', dialCode: '82', code: 'kr' }, { name: 'Kuwait', dialCode: '965', code: 'kw' }, { name: 'Kyrgyzstan', dialCode: '996', code: 'kg' }, { name: 'Laos', dialCode: '856', code: 'la' }, { name: 'Latvia', dialCode: '371', code: 'lv' }, { name: 'Lebanon', dialCode: '961', code: 'lb' }, { name: 'Lesotho', dialCode: '266', code: 'ls' }, { name: 'Liberia', dialCode: '231', code: 'lr' }, { name: 'Libyan Arab Jamahiriya', dialCode: '218', code: 'ly' }, { name: 'Liechtenstein', dialCode: '423', code: 'li' }, { name: 'Lithuania', dialCode: '370', code: 'lt' }, { name: 'Luxembourg', dialCode: '352', code: 'lu' }, { name: 'Macao', dialCode: '853', code: 'mo' }, { name: 'Macedonia', dialCode: '389', code: 'mk' }, { name: 'Madagascar', dialCode: '261', code: 'mg' }, { name: 'Malawi', dialCode: '265', code: 'mw' }, { name: 'Malaysia', dialCode: '60', code: 'my' }, { name: 'Maldives', dialCode: '960', code: 'mv' }, { name: 'Mali', dialCode: '223', code: 'ml' }, { name: 'Malta', dialCode: '356', code: 'mt' }, { name: 'Marshall Islands', dialCode: '692', code: 'mh' }, { name: 'Martinique', dialCode: '596', code: 'mq' }, { name: 'Mauritania', dialCode: '222', code: 'mr' }, { name: 'Mauritius', dialCode: '230', code: 'mu' }, { name: 'Mayotte', dialCode: '262', code: 'yt' }, { name: 'Mexico', dialCode: '52', code: 'mx' }, { name: 'Micronesia, Federated States of Micronesia', dialCode: '691', code: 'fm' }, { name: 'Moldova', dialCode: '373', code: 'md' }, { name: 'Monaco', dialCode: '377', code: 'mc' }, { name: 'Mongolia', dialCode: '976', code: 'mn' }, { name: 'Montenegro', dialCode: '382', code: 'me' }, { name: 'Montserrat', dialCode: '1664', code: 'ms' }, { name: 'Morocco', dialCode: '212', code: 'ma' }, { name: 'Mozambique', dialCode: '258', code: 'mz' }, { name: 'Myanmar', dialCode: '95', code: 'mm' }, { name: 'Namibia', dialCode: '264', code: 'na' }, { name: 'Nauru', dialCode: '674', code: 'nr' }, { name: 'Nepal', dialCode: '977', code: 'np' }, { name: 'Netherlands', dialCode: '31', code: 'nl' }, { name: 'Netherlands Antilles', dialCode: '599', code: 'an' }, { name: 'New Caledonia', dialCode: '687', code: 'nc' }, { name: 'New Zealand', dialCode: '64', code: 'nz' }, { name: 'Nicaragua', dialCode: '505', code: 'ni' }, { name: 'Niger', dialCode: '227', code: 'ne' }, { name: 'Nigeria', dialCode: '234', code: 'ng' }, { name: 'Niue', dialCode: '683', code: 'nu' }, { name: 'Norfolk Island', dialCode: '672', code: 'nf' }, { name: 'Northern Mariana Islands', dialCode: '1670', code: 'mp' }, { name: 'Norway', dialCode: '47', code: 'no' }, { name: 'Oman', dialCode: '968', code: 'om' }, { name: 'Pakistan', dialCode: '92', code: 'pk' }, { name: 'Palau', dialCode: '680', code: 'pw' }, { name: 'Palestinian Territory, Occupied', dialCode: '970', code: 'ps' }, { name: 'Panama', dialCode: '507', code: 'pa' }, { name: 'Papua New Guinea', dialCode: '675', code: 'pg' }, { name: 'Paraguay', dialCode: '595', code: 'py' }, { name: 'Peru', dialCode: '51', code: 'pe' }, { name: 'Philippines', dialCode: '63', code: 'ph' }, { name: 'Pitcairn', dialCode: '872', code: 'pn' }, { name: 'Poland', dialCode: '48', code: 'pl' }, { name: 'Portugal', dialCode: '351', code: 'pt' }, { name: 'Puerto Rico', dialCode: '1939', code: 'pr' }, { name: 'Qatar', dialCode: '974', code: 'qa' }, { name: 'Romania', dialCode: '40', code: 'ro' }, { name: 'Russia', dialCode: '7', code: 'ru' }, { name: 'Rwanda', dialCode: '250', code: 'rw' }, { name: 'Reunion', dialCode: '262', code: 're' }, { name: 'Saint Barthelemy', dialCode: '590', code: 'bl' }, { name: 'Saint Helena, Ascension and Tristan Da Cunha', dialCode: '290', code: 'sh' }, { name: 'Saint Kitts and Nevis', dialCode: '1869', code: 'kn' }, { name: 'Saint Lucia', dialCode: '1758', code: 'lc' }, { name: 'Saint Martin', dialCode: '590', code: 'mf' }, { name: 'Saint Pierre and Miquelon', dialCode: '508', code: 'pm' }, { name: 'Saint Vincent and the Grenadines', dialCode: '1784', code: 'vc' }, { name: 'Samoa', dialCode: '685', code: 'ws' }, { name: 'San Marino', dialCode: '378', code: 'sm' }, { name: 'Sao Tome and Principe', dialCode: '239', code: 'st' }, { name: 'Saudi Arabia', dialCode: '966', code: 'sa' }, { name: 'Senegal', dialCode: '221', code: 'sn' }, { name: 'Serbia', dialCode: '381', code: 'rs' }, { name: 'Seychelles', dialCode: '248', code: 'sc' }, { name: 'Sierra Leone', dialCode: '232', code: 'sl' }, { name: 'Singapore', dialCode: '65', code: 'sg' }, { name: 'Slovakia', dialCode: '421', code: 'sk' }, { name: 'Slovenia', dialCode: '386', code: 'si' }, { name: 'Solomon Islands', dialCode: '677', code: 'sb' }, { name: 'Somalia', dialCode: '252', code: 'so' }, { name: 'South Africa', dialCode: '27', code: 'za' }, { name: 'South Sudan', dialCode: '211', code: 'ss' }, { name: 'South Georgia and the South Sandwich Islands', dialCode: '500', code: 'gs' }, { name: 'Spain', dialCode: '34', code: 'es' }, { name: 'Sri Lanka', dialCode: '94', code: 'lk' }, { name: 'Sudan', dialCode: '249', code: 'sd' }, { name: 'Suriname', dialCode: '597', code: 'sr' }, { name: 'Svalbard and Jan Mayen', dialCode: '47', code: 'sj' }, { name: 'Swaziland', dialCode: '268', code: 'sz' }, { name: 'Sweden', dialCode: '46', code: 'se' }, { name: 'Switzerland', dialCode: '41', code: 'ch' }, { name: 'Syrian Arab Republic', dialCode: '963', code: 'sy' }, { name: 'Taiwan', dialCode: '886', code: 'tw' }, { name: 'Tajikistan', dialCode: '992', code: 'tj' }, { name: 'Tanzania, United Republic of Tanzania', dialCode: '255', code: 'tz' }, { name: 'Thailand', dialCode: '66', code: 'th' }, { name: 'Timor-Leste', dialCode: '670', code: 'tl' }, { name: 'Togo', dialCode: '228', code: 'tg' }, { name: 'Tokelau', dialCode: '690', code: 'tk' }, { name: 'Tonga', dialCode: '676', code: 'to' }, { name: 'Trinidad and Tobago', dialCode: '1868', code: 'tt' }, { name: 'Tunisia', dialCode: '216', code: 'tn' }, { name: 'Turkey', dialCode: '90', code: 'tr' }, { name: 'Turkmenistan', dialCode: '993', code: 'tm' }, { name: 'Turks and Caicos Islands', dialCode: '1649', code: 'tc' }, { name: 'Tuvalu', dialCode: '688', code: 'tv' }, { name: 'Uganda', dialCode: '256', code: 'ug' }, { name: 'Ukraine', dialCode: '380', code: 'ua' }, { name: 'United Arab Emirates', dialCode: '971', code: 'ae' }, { name: 'United Kingdom', dialCode: '44', code: 'gb' }, { name: 'United States', dialCode: '1', code: 'us' }, { name: 'Uruguay', dialCode: '598', code: 'uy' }, { name: 'Uzbekistan', dialCode: '998', code: 'uz' }, { name: 'Vanuatu', dialCode: '678', code: 'vu' }, { name: 'Venezuela, Bolivarian Republic of Venezuela', dialCode: '58', code: 've' }, { name: 'Vietnam', dialCode: '84', code: 'vn' }, { name: 'Virgin Islands, British', dialCode: '1284', code: 'vg' }, { name: 'Virgin Islands, U.S.', dialCode: '1340', code: 'vi' }, { name: 'Wallis and Futuna', dialCode: '681', code: 'wf' }, { name: 'Yemen', dialCode: '967', code: 'ye' }, { name: 'Zambia', dialCode: '260', code: 'zm' }, { name: 'Zimbabwe', dialCode: '263', code: 'zw' } ]; const countriesByCodeMap = countries.reduce((result, country) => { result[country.dialCode] = country; return result; }, {}); /** * Map between country dial codes and country objects. * */ const codesByNumbersMap = countries.reduce((result, country) => { result[country.dialCode] = country.code; return result; }, {}); /** * Returns the corresponding country code from a phone number. * * @param {string} phoneNumber - The phone number. * @returns {string} */ export function getCountryCodeFromPhone(phoneNumber: string): string { const number = phoneNumber.replace(/[+.\s]/g, ''); for (let i = 4; i > 0; i--) { const prefix = number.slice(0, i); if (codesByNumbersMap[prefix]) { return codesByNumbersMap[prefix]; } } return ''; } /** * Returns the corresponding country for a text starting with the dial code. * * @param {string} text - The text containing the dial code. * @returns {Object} */ export function getCountryFromDialCodeText(text: string): Object { return ( countriesByCodeMap[text.slice(0, 4)] || countriesByCodeMap[text.slice(0, 3)] || countriesByCodeMap[text.slice(0, 2)] || countriesByCodeMap[text.slice(0, 1)] || null ); }