UNPKG

@jakguru/phone-object

Version:

An immutable data structure representing a specific phone number and accompanying methods. It contains class and instance methods of creating, parsing, validating, and formatting phone numbers. Based on google-libphonenumber, which is in turn based on Goo

575 lines 17.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCountriesWithSpecificTime = exports.isos = exports.timezones = exports.countries = void 0; /** * Imports the `DateObjectUnits` and `DateTime` types from the `luxon` library. */ const luxon_1 = require("luxon"); /** * An immutable map of all of the names of the countries recognized by the library in English using ISO 3166-1 alpha-2 country codes as keys. */ exports.countries = Object.freeze(new Map([ ['AD', 'Andorra'], ['AE', 'United Arab Emirates'], ['AF', 'Afghanistan'], ['AG', 'Antigua and Barbuda'], ['AI', 'Anguilla'], ['AL', 'Albania'], ['AM', 'Armenia'], ['AO', 'Angola'], ['AQ', 'Antarctica'], ['AR', 'Argentina'], ['AS', 'American Samoa'], ['AT', 'Austria'], ['AU', 'Australia'], ['AW', 'Aruba'], ['AX', 'Aland Islands'], ['AZ', 'Azerbaijan'], ['BA', 'Bosnia and Herzegovina'], ['BB', 'Barbados'], ['BD', 'Bangladesh'], ['BE', 'Belgium'], ['BF', 'Burkina Faso'], ['BG', 'Bulgaria'], ['BH', 'Bahrain'], ['BI', 'Burundi'], ['BJ', 'Benin'], ['BL', 'Saint Barthelemy'], ['BM', 'Bermuda'], ['BN', 'Brunei'], ['BO', 'Bolivia'], ['BQ', 'Bonaire, Saint Eustatius and Saba'], ['BR', 'Brazil'], ['BS', 'Bahamas'], ['BT', 'Bhutan'], ['BV', 'Bouvet Island'], ['BW', 'Botswana'], ['BY', 'Belarus'], ['BZ', 'Belize'], ['CA', 'Canada'], ['CC', 'Cocos Islands'], ['CD', 'Democratic Republic of the Congo'], ['CF', 'Central African Republic'], ['CG', 'Republic of the Congo'], ['CH', 'Switzerland'], ['CI', 'Ivory Coast'], ['CK', 'Cook Islands'], ['CL', 'Chile'], ['CM', 'Cameroon'], ['CN', 'China'], ['CO', 'Colombia'], ['CR', 'Costa Rica'], ['CU', 'Cuba'], ['CV', 'Cape Verde'], ['CW', 'Curacao'], ['CX', 'Christmas Island'], ['CY', 'Cyprus'], ['CZ', 'Czech Republic'], ['DE', 'Germany'], ['DJ', 'Djibouti'], ['DK', 'Denmark'], ['DM', 'Dominica'], ['DO', 'Dominican Republic'], ['DZ', 'Algeria'], ['EC', 'Ecuador'], ['EE', 'Estonia'], ['EG', 'Egypt'], ['EH', 'Western Sahara'], ['ER', 'Eritrea'], ['ES', 'Spain'], ['ET', 'Ethiopia'], ['FI', 'Finland'], ['FJ', 'Fiji'], ['FK', 'Falkland Islands'], ['FM', 'Micronesia'], ['FO', 'Faroe Islands'], ['FR', 'France'], ['GA', 'Gabon'], ['GB', 'United Kingdom'], ['GD', 'Grenada'], ['GE', 'Georgia'], ['GF', 'French Guiana'], ['GG', 'Guernsey'], ['GH', 'Ghana'], ['GI', 'Gibraltar'], ['GL', 'Greenland'], ['GM', 'Gambia'], ['GN', 'Guinea'], ['GP', 'Guadeloupe'], ['GQ', 'Equatorial Guinea'], ['GR', 'Greece'], ['GS', 'South Georgia and the South Sandwich Islands'], ['GT', 'Guatemala'], ['GU', 'Guam'], ['GW', 'Guinea-Bissau'], ['GY', 'Guyana'], ['HK', 'Hong Kong'], ['HM', 'Heard Island and McDonald Islands'], ['HN', 'Honduras'], ['HR', 'Croatia'], ['HT', 'Haiti'], ['HU', 'Hungary'], ['ID', 'Indonesia'], ['IE', 'Ireland'], ['IL', 'Israel'], ['IM', 'Isle of Man'], ['IN', 'India'], ['IO', 'British Indian Ocean Territory'], ['IQ', 'Iraq'], ['IR', 'Iran'], ['IS', 'Iceland'], ['IT', 'Italy'], ['JE', 'Jersey'], ['JM', 'Jamaica'], ['JO', 'Jordan'], ['JP', 'Japan'], ['KE', 'Kenya'], ['KG', 'Kyrgyzstan'], ['KH', 'Cambodia'], ['KI', 'Kiribati'], ['KM', 'Comoros'], ['KN', 'Saint Kitts and Nevis'], ['KP', 'North Korea'], ['KR', 'South Korea'], ['KW', 'Kuwait'], ['KY', 'Cayman Islands'], ['KZ', 'Kazakhstan'], ['LA', 'Laos'], ['LB', 'Lebanon'], ['LC', 'Saint Lucia'], ['LI', 'Liechtenstein'], ['LK', 'Sri Lanka'], ['LR', 'Liberia'], ['LS', 'Lesotho'], ['LT', 'Lithuania'], ['LU', 'Luxembourg'], ['LV', 'Latvia'], ['LY', 'Libya'], ['MA', 'Morocco'], ['MC', 'Monaco'], ['MD', 'Moldova'], ['ME', 'Montenegro'], ['MF', 'Saint Martin'], ['MG', 'Madagascar'], ['MH', 'Marshall Islands'], ['MK', 'Macedonia'], ['ML', 'Mali'], ['MM', 'Myanmar'], ['MN', 'Mongolia'], ['MO', 'Macao'], ['MP', 'Northern Mariana Islands'], ['MQ', 'Martinique'], ['MR', 'Mauritania'], ['MS', 'Montserrat'], ['MT', 'Malta'], ['MU', 'Mauritius'], ['MV', 'Maldives'], ['MW', 'Malawi'], ['MX', 'Mexico'], ['MY', 'Malaysia'], ['MZ', 'Mozambique'], ['NA', 'Namibia'], ['NC', 'New Caledonia'], ['NE', 'Niger'], ['NF', 'Norfolk Island'], ['NG', 'Nigeria'], ['NI', 'Nicaragua'], ['NL', 'Netherlands'], ['NO', 'Norway'], ['NP', 'Nepal'], ['NR', 'Nauru'], ['NU', 'Niue'], ['NZ', 'New Zealand'], ['OM', 'Oman'], ['PA', 'Panama'], ['PE', 'Peru'], ['PF', 'French Polynesia'], ['PG', 'Papua New Guinea'], ['PH', 'Philippines'], ['PK', 'Pakistan'], ['PL', 'Poland'], ['PM', 'Saint Pierre and Miquelon'], ['PN', 'Pitcairn'], ['PR', 'Puerto Rico'], ['PS', 'Palestinian Territory'], ['PT', 'Portugal'], ['PW', 'Palau'], ['PY', 'Paraguay'], ['QA', 'Qatar'], ['RE', 'Reunion'], ['RO', 'Romania'], ['RS', 'Serbia'], ['RU', 'Russia'], ['RW', 'Rwanda'], ['SA', 'Saudi Arabia'], ['SB', 'Solomon Islands'], ['SC', 'Seychelles'], ['SD', 'Sudan'], ['SE', 'Sweden'], ['SG', 'Singapore'], ['SH', 'Saint Helena'], ['SI', 'Slovenia'], ['SJ', 'Svalbard and Jan Mayen'], ['SK', 'Slovakia'], ['SL', 'Sierra Leone'], ['SM', 'San Marino'], ['SN', 'Senegal'], ['SO', 'Somalia'], ['SR', 'Suriname'], ['SS', 'South Sudan'], ['ST', 'Sao Tome and Principe'], ['SV', 'El Salvador'], ['SX', 'Sint Maarten'], ['SY', 'Syria'], ['SZ', 'Swaziland'], ['TC', 'Turks and Caicos Islands'], ['TD', 'Chad'], ['TF', 'French Southern Territories'], ['TG', 'Togo'], ['TH', 'Thailand'], ['TJ', 'Tajikistan'], ['TK', 'Tokelau'], ['TL', 'East Timor'], ['TM', 'Turkmenistan'], ['TN', 'Tunisia'], ['TO', 'Tonga'], ['TR', 'Turkey'], ['TT', 'Trinidad and Tobago'], ['TV', 'Tuvalu'], ['TW', 'Taiwan'], ['TZ', 'Tanzania'], ['UA', 'Ukraine'], ['UG', 'Uganda'], ['UM', 'United States Minor Outlying Islands'], ['US', 'United States'], ['UY', 'Uruguay'], ['UZ', 'Uzbekistan'], ['VA', 'Vatican'], ['VC', 'Saint Vincent and the Grenadines'], ['VE', 'Venezuela'], ['VG', 'British Virgin Islands'], ['VI', 'U.S. Virgin Islands'], ['VN', 'Vietnam'], ['VU', 'Vanuatu'], ['WF', 'Wallis and Futuna'], ['WS', 'Samoa'], ['XK', 'Kosovo'], ['YE', 'Yemen'], ['YT', 'Mayotte'], ['ZA', 'South Africa'], ['ZM', 'Zambia'], ['ZW', 'Zimbabwe'], ])); /** * An immutable map of all of the timezones of the countries recognized by the library using ISO 3166-1 alpha-2 country codes as keys. */ exports.timezones = Object.freeze(new Map([ ['AD', 'Europe/Andorra'], ['AE', 'Asia/Dubai'], ['AF', 'Asia/Kabul'], ['AG', 'America/Antigua'], ['AI', 'America/Anguilla'], ['AL', 'Europe/Tirane'], ['AM', 'Asia/Yerevan'], ['AO', 'Africa/Luanda'], ['AQ', 'Antarctica/Casey'], ['AR', 'America/Argentina/Buenos_Aires'], ['AS', 'Pacific/Pago_Pago'], ['AT', 'Europe/Vienna'], ['AU', 'Australia/Sydney'], ['AW', 'America/Aruba'], ['AX', 'Europe/Mariehamn'], ['AZ', 'Asia/Baku'], ['BA', 'Europe/Sarajevo'], ['BB', 'America/Barbados'], ['BD', 'Asia/Dhaka'], ['BE', 'Europe/Brussels'], ['BF', 'Africa/Ouagadougou'], ['BG', 'Europe/Sofia'], ['BH', 'Asia/Bahrain'], ['BI', 'Africa/Bujumbura'], ['BJ', 'Africa/Porto-Novo'], ['BL', 'America/St_Barthelemy'], ['BM', 'Atlantic/Bermuda'], ['BN', 'Asia/Brunei'], ['BO', 'America/La_Paz'], ['BQ', 'America/Kralendijk'], ['BR', 'America/Sao_Paulo'], ['BS', 'America/Nassau'], ['BT', 'Asia/Thimphu'], ['BW', 'Africa/Gaborone'], ['BY', 'Europe/Minsk'], ['BZ', 'America/Belize'], ['CA', 'America/Toronto'], ['CC', 'Indian/Cocos'], ['CD', 'Africa/Kinshasa'], ['CF', 'Africa/Bangui'], ['CG', 'Africa/Brazzaville'], ['CH', 'Europe/Zurich'], ['CI', 'Africa/Abidjan'], ['CK', 'Pacific/Rarotonga'], ['CL', 'America/Santiago'], ['CM', 'Africa/Douala'], ['CN', 'Asia/Shanghai'], ['CO', 'America/Bogota'], ['CR', 'America/Costa_Rica'], ['CU', 'America/Havana'], ['CV', 'Atlantic/Cape_Verde'], ['CW', 'America/Curacao'], ['CX', 'Indian/Christmas'], ['CY', 'Asia/Nicosia'], ['CZ', 'Europe/Prague'], ['DE', 'Europe/Berlin'], ['DJ', 'Africa/Djibouti'], ['DK', 'Europe/Copenhagen'], ['DM', 'America/Dominica'], ['DO', 'America/Santo_Domingo'], ['DZ', 'Africa/Algiers'], ['EC', 'America/Guayaquil'], ['EE', 'Europe/Tallinn'], ['EG', 'Africa/Cairo'], ['EH', 'Africa/El_Aaiun'], ['ER', 'Africa/Asmara'], ['ES', 'Europe/Madrid'], ['ET', 'Africa/Addis_Ababa'], ['FI', 'Europe/Helsinki'], ['FJ', 'Pacific/Fiji'], ['FK', 'Atlantic/Stanley'], ['FM', 'Pacific/Pohnpei'], ['FO', 'Atlantic/Faroe'], ['FR', 'Europe/Paris'], ['GA', 'Africa/Libreville'], ['GB', 'Europe/London'], ['GD', 'America/Grenada'], ['GE', 'Asia/Tbilisi'], ['GF', 'America/Cayenne'], ['GG', 'Europe/Guernsey'], ['GH', 'Africa/Accra'], ['GI', 'Europe/Gibraltar'], ['GL', 'America/Godthab'], ['GM', 'Africa/Banjul'], ['GN', 'Africa/Conakry'], ['GP', 'America/Guadeloupe'], ['GQ', 'Africa/Malabo'], ['GR', 'Europe/Athens'], ['GS', 'Atlantic/South_Georgia'], ['GT', 'America/Guatemala'], ['GU', 'Pacific/Guam'], ['GW', 'Africa/Bissau'], ['GY', 'America/Guyana'], ['HK', 'Asia/Hong_Kong'], ['HN', 'America/Tegucigalpa'], ['HR', 'Europe/Zagreb'], ['HT', 'America/Port-au-Prince'], ['HU', 'Europe/Budapest'], ['ID', 'Asia/Jakarta'], ['IE', 'Europe/Dublin'], ['IL', 'Asia/Jerusalem'], ['IM', 'Europe/Isle_of_Man'], ['IN', 'Asia/Kolkata'], ['IO', 'Indian/Chagos'], ['IQ', 'Asia/Baghdad'], ['IR', 'Asia/Tehran'], ['IS', 'Atlantic/Reykjavik'], ['IT', 'Europe/Rome'], ['JE', 'Europe/Jersey'], ['JM', 'America/Jamaica'], ['JO', 'Asia/Amman'], ['JP', 'Asia/Tokyo'], ['KE', 'Africa/Nairobi'], ['KG', 'Asia/Bishkek'], ['KH', 'Asia/Phnom_Penh'], ['KI', 'Pacific/Tarawa'], ['KM', 'Indian/Comoro'], ['KN', 'America/St_Kitts'], ['KP', 'Asia/Pyongyang'], ['KR', 'Asia/Seoul'], ['KW', 'Asia/Kuwait'], ['KY', 'America/Cayman'], ['KZ', 'Asia/Almaty'], ['LA', 'Asia/Vientiane'], ['LB', 'Asia/Beirut'], ['LC', 'America/St_Lucia'], ['LI', 'Europe/Vaduz'], ['LK', 'Asia/Colombo'], ['LR', 'Africa/Monrovia'], ['LS', 'Africa/Maseru'], ['LT', 'Europe/Vilnius'], ['LU', 'Europe/Luxembourg'], ['LV', 'Europe/Riga'], ['LY', 'Africa/Tripoli'], ['MA', 'Africa/Casablanca'], ['MC', 'Europe/Monaco'], ['MD', 'Europe/Chisinau'], ['ME', 'Europe/Podgorica'], ['MF', 'America/Marigot'], ['MG', 'Indian/Antananarivo'], ['MH', 'Pacific/Majuro'], ['MK', 'Europe/Skopje'], ['ML', 'Africa/Bamako'], ['MM', 'Asia/Yangon'], ['MN', 'Asia/Ulaanbaatar'], ['MO', 'Asia/Macau'], ['MP', 'Pacific/Saipan'], ['MQ', 'America/Martinique'], ['MR', 'Africa/Nouakchott'], ['MS', 'America/Montserrat'], ['MT', 'Europe/Malta'], ['MU', 'Indian/Mauritius'], ['MV', 'Indian/Maldives'], ['MW', 'Africa/Blantyre'], ['MX', 'America/Mexico_City'], ['MY', 'Asia/Kuala_Lumpur'], ['MZ', 'Africa/Maputo'], ['NA', 'Africa/Windhoek'], ['NC', 'Pacific/Noumea'], ['NE', 'Africa/Niamey'], ['NF', 'Pacific/Norfolk'], ['NG', 'Africa/Lagos'], ['NI', 'America/Managua'], ['NL', 'Europe/Amsterdam'], ['NO', 'Europe/Oslo'], ['NP', 'Asia/Kathmandu'], ['NR', 'Pacific/Nauru'], ['NU', 'Pacific/Niue'], ['NZ', 'Pacific/Auckland'], ['OM', 'Asia/Muscat'], ['PA', 'America/Panama'], ['PE', 'America/Lima'], ['PF', 'Pacific/Tahiti'], ['PG', 'Pacific/Port_Moresby'], ['PH', 'Asia/Manila'], ['PK', 'Asia/Karachi'], ['PL', 'Europe/Warsaw'], ['PM', 'America/Miquelon'], ['PN', 'Pacific/Pitcairn'], ['PR', 'America/Puerto_Rico'], ['PS', 'Asia/Gaza'], ['PT', 'Europe/Lisbon'], ['PW', 'Pacific/Palau'], ['PY', 'America/Asuncion'], ['QA', 'Asia/Qatar'], ['RE', 'Indian/Reunion'], ['RO', 'Europe/Bucharest'], ['RS', 'Europe/Belgrade'], ['RU', 'Europe/Moscow'], ['RW', 'Africa/Kigali'], ['SA', 'Asia/Riyadh'], ['SB', 'Pacific/Guadalcanal'], ['SC', 'Indian/Mahe'], ['SD', 'Africa/Khartoum'], ['SE', 'Europe/Stockholm'], ['SG', 'Asia/Singapore'], ['SH', 'Atlantic/St_Helena'], ['SI', 'Europe/Ljubljana'], ['SJ', 'Arctic/Longyearbyen'], ['SK', 'Europe/Bratislava'], ['SL', 'Africa/Freetown'], ['SM', 'Europe/San_Marino'], ['SN', 'Africa/Dakar'], ['SO', 'Africa/Mogadishu'], ['SR', 'America/Paramaribo'], ['SS', 'Africa/Juba'], ['ST', 'Africa/Sao_Tome'], ['SV', 'America/El_Salvador'], ['SX', 'America/Lower_Princes'], ['SY', 'Asia/Damascus'], ['SZ', 'Africa/Mbabane'], ['TC', 'America/Grand_Turk'], ['TD', 'Africa/Ndjamena'], ['TF', 'Indian/Kerguelen'], ['TG', 'Africa/Lome'], ['TH', 'Asia/Bangkok'], ['TJ', 'Asia/Dushanbe'], ['TK', 'Pacific/Fakaofo'], ['TL', 'Asia/Dili'], ['TM', 'Asia/Ashgabat'], ['TN', 'Africa/Tunis'], ['TO', 'Pacific/Tongatapu'], ['TR', 'Europe/Istanbul'], ['TT', 'America/Port_of_Spain'], ['TV', 'Pacific/Funafuti'], ['TW', 'Asia/Taipei'], ['TZ', 'Africa/Dar_es_Salaam'], ['UA', 'Europe/Kiev'], ['UG', 'Africa/Kampala'], ['UM', 'Pacific/Wake'], ['US', 'America/New_York'], ['UY', 'America/Montevideo'], ['UZ', 'Asia/Tashkent'], ['VA', 'Europe/Vatican'], ['VC', 'America/St_Vincent'], ['VE', 'America/Caracas'], ['VG', 'America/Tortola'], ['VI', 'America/St_Thomas'], ['VN', 'Asia/Ho_Chi_Minh'], ['VU', 'Pacific/Efate'], ['WF', 'Pacific/Wallis'], ['WS', 'Pacific/Apia'], ['YE', 'Asia/Aden'], ['YT', 'Indian/Mayotte'], ['ZA', 'Africa/Johannesburg'], ['ZM', 'Africa/Lusaka'], ['ZW', 'Africa/Harare'], ])); /** * An immutable set of all of the ISO 3166-1 alpha-2 country codes recognized by the library. */ exports.isos = Object.freeze(new Set([...exports.countries.keys()])); /** * Returns an array of ISO 3166-1 alpha-2 country codes that have the same specific time as the given options. * @param minute - The minute of the specific time. * @param hour - The hour of the specific time. Can be a number or an object of advanced options. * @param advanced - An object of advanced options for the specific time. * @returns An array of ISO 3166-1 alpha-2 country codes that have the same specific time as the given options. */ function getCountriesWithSpecificTime(minute, hour, advanced) { let options = { minute, }; if (typeof hour === 'object') { options = hour; } else if (hour !== undefined) { options.hourOfDay = hour; if (advanced) { options = { ...options, ...advanced }; } } options = { ...options }; const getNumberOrUndefined = (value) => { if (value === undefined) { return undefined; } const number = Number(value); if (isNaN(number)) { return undefined; } return number; }; const dateObjectUnits = { year: getNumberOrUndefined(options.year), month: getNumberOrUndefined(options.monthOfYear), day: getNumberOrUndefined(options.dayOfMonth), hour: getNumberOrUndefined(options.hourOfDay), minute: getNumberOrUndefined(options.minute), // Luxon's DateObjectUnits also includes seconds and milliseconds, which we'll set to 0 second: 0, millisecond: 0, }; const targetDateTime = luxon_1.DateTime.fromObject(dateObjectUnits); const ret = []; const keysToCompare = Object.keys(dateObjectUnits).filter((key) => 'undefined' !== typeof dateObjectUnits[key] && !['second', 'millisecond'].includes(key)); exports.timezones.forEach((zone, iso2) => { const currentDateTimeInZone = luxon_1.DateTime.now().setZone(zone); const matches = keysToCompare.filter((key) => { return targetDateTime.toObject()[key] === currentDateTimeInZone.toObject()[key]; }); if (matches.length === keysToCompare.length) { ret.push(iso2); } }); return ret; } exports.getCountriesWithSpecificTime = getCountriesWithSpecificTime; //# sourceMappingURL=countries.js.map