import { isly } from "isly" import { CountryCode } from "../CountryCode" export type CallingCode = typeof CallingCode.values[number] export namespace CallingCode { export const values = [ "+93", "+358", "+355", "+213", "+1684", "+376", "+244", "+1264", "+672", "+1268", "+54", "+374", "+297", "+61", "+43", "+994", "+1242", "+973", "+880", "+1246", "+375", "+32", "+501", "+229", "+1441", "+975", "+591", "+387", "+267", "+55", "+246", "+673", "+359", "+226", "+257", "+855", "+237", "+1", "+238", "+345", "+236", "+235", "+56", "+86", "+61", "+61", "+57", "+269", "+242", "+243", "+682", "+506", "+225", "+385", "+53", "+357", "+420", "+45", "+253", "+1767", "+1849", "+593", "+20", "+503", "+240", "+291", "+372", "+251", "+500", "+298", "+679", "+358", "+33", "+594", "+689", "+241", "+220", "+995", "+49", "+233", "+350", "+30", "+299", "+1473", "+590", "+1671", "+502", "+44", "+224", "+245", "+592", "+509", "+379", "+504", "+852", "+36", "+354", "+91", "+62", "+98", "+964", "+353", "+44", "+972", "+39", "+1876", "+81", "+44", "+962", "+77", "+254", "+686", "+850", "+82", "+965", "+996", "+856", "+371", "+961", "+266", "+231", "+218", "+423", "+370", "+352", "+853", "+389", "+261", "+265", "+60", "+960", "+223", "+356", "+692", "+596", "+222", "+230", "+262", "+52", "+691", "+373", "+377", "+976", "+382", "+1664", "+212", "+258", "+95", "+264", "+674", "+977", "+31", "+599", "+687", "+64", "+505", "+227", "+234", "+683", "+672", "+1670", "+47", "+968", "+92", "+680", "+970", "+507", "+675", "+595", "+51", "+63", "+872", "+48", "+351", "+1939", "+974", "+40", "+7", "+250", "+262", "+590", "+290", "+1869", "+1758", "+590", "+508", "+1784", "+685", "+378", "+239", "+966", "+221", "+381", "+248", "+232", "+65", "+421", "+386", "+677", "+252", "+27", "+211", "+500", "+34", "+94", "+249", "+597", "+47", "+268", "+46", "+41", "+963", "+886", "+992", "+255", "+66", "+670", "+228", "+690", "+676", "+1868", "+216", "+90", "+993", "+1649", "+688", "+256", "+380", "+971", "+44", "+1", "+598", "+998", "+678", "+58", "+84", "+1284", "+1340", "+681", "+967", "+260", "+263", ] as const export const { type, is, flawed } = isly .string("value", ...values) .rename("isoly.CallingCode") .bind() export function from(country: CountryCode.Alpha2): CallingCode | undefined { return alpha2toCallingCode[country] } export function to(callingCode: CallingCode): CountryCode.Alpha2 | CountryCode.Alpha2[] { return callingCodeToAlpha2[callingCode] } export function separate(phoneNumber: string): [CallingCode | undefined, string] { let result: [CallingCode | undefined, string] = [undefined, phoneNumber] if (phoneNumber.substring(0, 1) == "+") { for (let end = 5; end > 1; end--) { const callingCode = phoneNumber.substring(0, end) if (CallingCode.is(callingCode)) { result = [callingCode, phoneNumber.substring(end)] break } } } return result } } const callingCodeToAlpha2: { [key in CallingCode]: CountryCode.Alpha2 | CountryCode.Alpha2[] } = { "+93": "AF", "+358": ["FI", "AX"], "+355": "AL", "+213": "DZ", "+1684": "AS", "+376": "AD", "+244": "AO", "+1264": "AI", "+672": ["NF", "AQ"], "+1268": "AG", "+54": "AR", "+374": "AM", "+297": "AW", "+61": ["AU", "CX", "CC"], "+43": "AT", "+994": "AZ", "+1242": "BS", "+973": "BH", "+880": "BD", "+1246": "BB", "+375": "BY", "+32": "BE", "+501": "BZ", "+229": "BJ", "+1441": "BM", "+975": "BT", "+591": "BO", "+599": "BQ", "+387": "BA", "+267": "BW", "+55": "BR", "+246": "IO", "+673": "BN", "+359": "BG", "+226": "BF", "+257": "BI", "+855": "KH", "+237": "CM", "+1": ["US", "CA"], "+238": "CV", "+345": "KY", "+236": "CF", "+235": "TD", "+56": "CL", "+86": "CN", "+57": "CO", "+269": "KM", "+242": "CG", "+243": "CD", "+682": "CK", "+506": "CR", "+225": "CI", "+385": "HR", "+53": "CU", "+357": "CY", "+420": "CZ", "+45": "DK", "+253": "DJ", "+1767": "DM", "+1849": "DO", "+593": "EC", "+20": "EG", "+503": "SV", "+240": "GQ", "+291": "ER", "+372": "EE", "+251": "ET", "+500": ["FK", "GS"], "+298": "FO", "+679": "FJ", "+33": "FR", "+594": "GF", "+689": "PF", "+241": "GA", "+220": "GM", "+995": "GE", "+49": "DE", "+233": "GH", "+350": "GI", "+30": "GR", "+299": "GL", "+1473": "GD", "+590": ["GP", "BL", "MF"], "+1671": "GU", "+502": "GT", "+44": ["GB", "JE", "IM", "GG"], "+224": "GN", "+245": "GW", "+592": "GY", "+595": "PY", "+509": "HT", "+379": "VA", "+504": "HN", "+852": "HK", "+36": "HU", "+354": "IS", "+91": "IN", "+62": "ID", "+98": "IR", "+964": "IQ", "+353": "IE", "+972": "IL", "+39": "IT", "+1876": "JM", "+81": "JP", "+962": "JO", "+77": "KZ", "+254": "KE", "+686": "KI", "+850": "KP", "+82": "KR", "+965": "KW", "+996": "KG", "+856": "LA", "+371": "LV", "+961": "LB", "+266": "LS", "+231": "LR", "+218": "LY", "+423": "LI", "+370": "LT", "+352": "LU", "+853": "MO", "+389": "MK", "+261": "MG", "+265": "MW", "+60": "MY", "+960": "MV", "+223": "ML", "+356": "MT", "+692": "MH", "+596": "MQ", "+222": "MR", "+230": "MU", "+262": ["RE", "YT"], "+52": "MX", "+691": "FM", "+373": "MD", "+377": "MC", "+976": "MN", "+382": "ME", "+1664": "MS", "+212": "MA", "+258": "MZ", "+95": "MM", "+264": "NA", "+674": "NR", "+977": "NP", "+31": "NL", "+687": "NC", "+64": "NZ", "+505": "NI", "+227": "NE", "+234": "NG", "+683": "NU", "+1670": "MP", "+47": ["NO", "SJ"], "+968": "OM", "+92": "PK", "+680": "PW", "+970": "PS", "+507": "PA", "+675": "PG", "+51": "PE", "+63": "PH", "+872": "PN", "+48": "PL", "+351": "PT", "+1939": "PR", "+974": "QA", "+40": "RO", "+7": "RU", "+250": "RW", "+290": "SH", "+1869": "KN", "+1758": "LC", "+508": "PM", "+1784": "VC", "+685": "WS", "+378": "SM", "+239": "ST", "+966": "SA", "+221": "SN", "+381": "RS", "+248": "SC", "+232": "SL", "+65": "SG", "+421": "SK", "+386": "SI", "+677": "SB", "+252": "SO", "+27": "ZA", "+211": "SS", "+34": "ES", "+94": "LK", "+249": "SD", "+597": "SR", "+268": "SZ", "+46": "SE", "+41": "CH", "+963": "SY", "+886": "TW", "+992": "TJ", "+255": "TZ", "+66": "TH", "+670": "TL", "+228": "TG", "+690": "TK", "+676": "TO", "+1868": "TT", "+216": "TN", "+90": "TR", "+993": "TM", "+1649": "TC", "+688": "TV", "+256": "UG", "+380": "UA", "+971": "AE", "+598": "UY", "+998": "UZ", "+678": "VU", "+58": "VE", "+84": "VN", "+1284": "VG", "+1340": "VI", "+681": "WF", "+967": "YE", "+260": "ZM", "+263": "ZW", } const alpha2toCallingCode: { [country in CountryCode.Alpha2]?: CallingCode | undefined } = { AF: "+93", AX: "+358", AL: "+355", DZ: "+213", AS: "+1684", AD: "+376", AO: "+244", AI: "+1264", AQ: "+672", AG: "+1268", AR: "+54", AM: "+374", AW: "+297", AU: "+61", AT: "+43", AZ: "+994", BS: "+1242", BH: "+973", BD: "+880", BB: "+1246", BY: "+375", BE: "+32", BZ: "+501", BJ: "+229", BM: "+1441", BT: "+975", BO: "+591", BQ: "+599", BA: "+387", BW: "+267", BR: "+55", IO: "+246", BN: "+673", BG: "+359", BF: "+226", BI: "+257", KH: "+855", CM: "+237", CA: "+1", CV: "+238", KY: "+345", CF: "+236", TD: "+235", CL: "+56", CN: "+86", CX: "+61", CC: "+61", CO: "+57", KM: "+269", CG: "+242", CD: "+243", CK: "+682", CR: "+506", CI: "+225", HR: "+385", CU: "+53", CY: "+357", CZ: "+420", DK: "+45", DJ: "+253", DM: "+1767", DO: "+1849", EC: "+593", EG: "+20", SV: "+503", GQ: "+240", ER: "+291", EE: "+372", ET: "+251", FK: "+500", FO: "+298", FJ: "+679", FI: "+358", FR: "+33", GF: "+594", PF: "+689", GA: "+241", GM: "+220", GE: "+995", DE: "+49", GH: "+233", GI: "+350", GR: "+30", GL: "+299", GD: "+1473", GP: "+590", GU: "+1671", GT: "+502", GG: "+44", GN: "+224", GW: "+245", GY: "+592", HT: "+509", VA: "+379", HN: "+504", HK: "+852", HU: "+36", IS: "+354", IN: "+91", ID: "+62", IR: "+98", IQ: "+964", IE: "+353", IM: "+44", IL: "+972", IT: "+39", JM: "+1876", JP: "+81", JE: "+44", JO: "+962", KZ: "+77", KE: "+254", KI: "+686", KP: "+850", KR: "+82", KW: "+965", KG: "+996", LA: "+856", LV: "+371", LB: "+961", LS: "+266", LR: "+231", LY: "+218", LI: "+423", LT: "+370", LU: "+352", MO: "+853", MK: "+389", MG: "+261", MW: "+265", MY: "+60", MV: "+960", ML: "+223", MT: "+356", MH: "+692", MQ: "+596", MR: "+222", MU: "+230", YT: "+262", MX: "+52", FM: "+691", MD: "+373", MC: "+377", MN: "+976", ME: "+382", MS: "+1664", MA: "+212", MZ: "+258", MM: "+95", NA: "+264", NR: "+674", NP: "+977", NL: "+31", NC: "+687", NZ: "+64", NI: "+505", NE: "+227", NG: "+234", NU: "+683", NF: "+672", MP: "+1670", NO: "+47", OM: "+968", PK: "+92", PW: "+680", PS: "+970", PA: "+507", PG: "+675", PY: "+595", PE: "+51", PH: "+63", PN: "+872", PL: "+48", PT: "+351", PR: "+1939", QA: "+974", RO: "+40", RU: "+7", RW: "+250", RE: "+262", BL: "+590", SH: "+290", KN: "+1869", LC: "+1758", MF: "+590", PM: "+508", VC: "+1784", WS: "+685", SM: "+378", ST: "+239", SA: "+966", SN: "+221", RS: "+381", SC: "+248", SL: "+232", SG: "+65", SK: "+421", SI: "+386", SB: "+677", SO: "+252", ZA: "+27", SS: "+211", GS: "+500", ES: "+34", LK: "+94", SD: "+249", SR: "+597", SJ: "+47", SZ: "+268", SE: "+46", CH: "+41", SY: "+963", TW: "+886", TJ: "+992", TZ: "+255", TH: "+66", TL: "+670", TG: "+228", TK: "+690", TO: "+676", TT: "+1868", TN: "+216", TR: "+90", TM: "+993", TC: "+1649", TV: "+688", UG: "+256", UA: "+380", AE: "+971", GB: "+44", US: "+1", UY: "+598", UZ: "+998", VU: "+678", VE: "+58", VN: "+84", VG: "+1284", VI: "+1340", WF: "+681", YE: "+967", ZM: "+260", ZW: "+263", }