SPB Git forge
28commits 1branches 0releases
7.7 MBsize
maindefault branch
10 days agolast push
Python 66.3% TypeScript 22.7% JavaScript 8.6% HTML 1.4% CSS 0.7%
7.5 KB · 55 lines typescript
Raw Blame History
1/**2 * ISO 3166-1 lookup used by the map (world-atlas ids are ISO numeric) and by country chips when the API row is not at3 * hand. Names are short English forms. The API's `/countries` remains the source of truth for coverage numbers.4 */5export const COUNTRIES: Record<string, { name: string; num: string }> = {6  AD: { name: 'Andorra', num: '020' }, AE: { name: 'United Arab Emirates', num: '784' }, AF: { name: 'Afghanistan', num: '004' }, AG: { name: 'Antigua and Barbuda', num: '028' },7  AL: { name: 'Albania', num: '008' }, AM: { name: 'Armenia', num: '051' }, AO: { name: 'Angola', num: '024' }, AR: { name: 'Argentina', num: '032' }, AT: { name: 'Austria', num: '040' },8  AU: { name: 'Australia', num: '036' }, AZ: { name: 'Azerbaijan', num: '031' }, BA: { name: 'Bosnia and Herzegovina', num: '070' }, BB: { name: 'Barbados', num: '052' }, BD: { name: 'Bangladesh', num: '050' },9  BE: { name: 'Belgium', num: '056' }, BF: { name: 'Burkina Faso', num: '854' }, BG: { name: 'Bulgaria', num: '100' }, BH: { name: 'Bahrain', num: '048' }, BI: { name: 'Burundi', num: '108' },10  BJ: { name: 'Benin', num: '204' }, BN: { name: 'Brunei', num: '096' }, BO: { name: 'Bolivia', num: '068' }, BR: { name: 'Brazil', num: '076' }, BS: { name: 'Bahamas', num: '044' },11  BT: { name: 'Bhutan', num: '064' }, BW: { name: 'Botswana', num: '072' }, BY: { name: 'Belarus', num: '112' }, BZ: { name: 'Belize', num: '084' }, CA: { name: 'Canada', num: '124' },12  CD: { name: 'DR Congo', num: '180' }, CF: { name: 'Central African Republic', num: '140' }, CG: { name: 'Congo', num: '178' }, CH: { name: 'Switzerland', num: '756' }, CI: { name: "Côte d'Ivoire", num: '384' },13  CL: { name: 'Chile', num: '152' }, CM: { name: 'Cameroon', num: '120' }, CN: { name: 'China', num: '156' }, CO: { name: 'Colombia', num: '170' }, CR: { name: 'Costa Rica', num: '188' },14  CU: { name: 'Cuba', num: '192' }, CY: { name: 'Cyprus', num: '196' }, CZ: { name: 'Czechia', num: '203' }, DE: { name: 'Germany', num: '276' }, DJ: { name: 'Djibouti', num: '262' },15  DK: { name: 'Denmark', num: '208' }, DO: { name: 'Dominican Republic', num: '214' }, DZ: { name: 'Algeria', num: '012' }, EC: { name: 'Ecuador', num: '218' }, EE: { name: 'Estonia', num: '233' },16  EG: { name: 'Egypt', num: '818' }, ER: { name: 'Eritrea', num: '232' }, ES: { name: 'Spain', num: '724' }, ET: { name: 'Ethiopia', num: '231' }, FI: { name: 'Finland', num: '246' },17  FJ: { name: 'Fiji', num: '242' }, FR: { name: 'France', num: '250' }, GA: { name: 'Gabon', num: '266' }, GB: { name: 'United Kingdom', num: '826' }, GE: { name: 'Georgia', num: '268' },18  GH: { name: 'Ghana', num: '288' }, GL: { name: 'Greenland', num: '304' }, GM: { name: 'Gambia', num: '270' }, GN: { name: 'Guinea', num: '324' }, GQ: { name: 'Equatorial Guinea', num: '226' },19  GR: { name: 'Greece', num: '300' }, GT: { name: 'Guatemala', num: '320' }, GW: { name: 'Guinea-Bissau', num: '624' }, GY: { name: 'Guyana', num: '328' }, HK: { name: 'Hong Kong', num: '344' },20  HN: { name: 'Honduras', num: '340' }, HR: { name: 'Croatia', num: '191' }, HT: { name: 'Haiti', num: '332' }, HU: { name: 'Hungary', num: '348' }, ID: { name: 'Indonesia', num: '360' },21  IE: { name: 'Ireland', num: '372' }, IL: { name: 'Israel', num: '376' }, IN: { name: 'India', num: '356' }, IQ: { name: 'Iraq', num: '368' }, IR: { name: 'Iran', num: '364' },22  IS: { name: 'Iceland', num: '352' }, IT: { name: 'Italy', num: '380' }, JM: { name: 'Jamaica', num: '388' }, JO: { name: 'Jordan', num: '400' }, JP: { name: 'Japan', num: '392' },23  KE: { name: 'Kenya', num: '404' }, KG: { name: 'Kyrgyzstan', num: '417' }, KH: { name: 'Cambodia', num: '116' }, KP: { name: 'North Korea', num: '408' }, KR: { name: 'South Korea', num: '410' },24  KW: { name: 'Kuwait', num: '414' }, KZ: { name: 'Kazakhstan', num: '398' }, LA: { name: 'Laos', num: '418' }, LB: { name: 'Lebanon', num: '422' }, LK: { name: 'Sri Lanka', num: '144' },25  LR: { name: 'Liberia', num: '430' }, LS: { name: 'Lesotho', num: '426' }, LT: { name: 'Lithuania', num: '440' }, LU: { name: 'Luxembourg', num: '442' }, LV: { name: 'Latvia', num: '428' },26  LY: { name: 'Libya', num: '434' }, MA: { name: 'Morocco', num: '504' }, MD: { name: 'Moldova', num: '498' }, ME: { name: 'Montenegro', num: '499' }, MG: { name: 'Madagascar', num: '450' },27  MK: { name: 'North Macedonia', num: '807' }, ML: { name: 'Mali', num: '466' }, MM: { name: 'Myanmar', num: '104' }, MN: { name: 'Mongolia', num: '496' }, MR: { name: 'Mauritania', num: '478' },28  MT: { name: 'Malta', num: '470' }, MU: { name: 'Mauritius', num: '480' }, MW: { name: 'Malawi', num: '454' }, MX: { name: 'Mexico', num: '484' }, MY: { name: 'Malaysia', num: '458' },29  MZ: { name: 'Mozambique', num: '508' }, NA: { name: 'Namibia', num: '516' }, NE: { name: 'Niger', num: '562' }, NG: { name: 'Nigeria', num: '566' }, NI: { name: 'Nicaragua', num: '558' },30  NL: { name: 'Netherlands', num: '528' }, NO: { name: 'Norway', num: '578' }, NP: { name: 'Nepal', num: '524' }, NZ: { name: 'New Zealand', num: '554' }, OM: { name: 'Oman', num: '512' },31  PA: { name: 'Panama', num: '591' }, PE: { name: 'Peru', num: '604' }, PG: { name: 'Papua New Guinea', num: '598' }, PH: { name: 'Philippines', num: '608' }, PK: { name: 'Pakistan', num: '586' },32  PL: { name: 'Poland', num: '616' }, PR: { name: 'Puerto Rico', num: '630' }, PS: { name: 'Palestine', num: '275' }, PT: { name: 'Portugal', num: '620' }, PY: { name: 'Paraguay', num: '600' },33  QA: { name: 'Qatar', num: '634' }, RO: { name: 'Romania', num: '642' }, RS: { name: 'Serbia', num: '688' }, RU: { name: 'Russia', num: '643' }, RW: { name: 'Rwanda', num: '646' },34  SA: { name: 'Saudi Arabia', num: '682' }, SB: { name: 'Solomon Islands', num: '090' }, SD: { name: 'Sudan', num: '729' }, SE: { name: 'Sweden', num: '752' }, SG: { name: 'Singapore', num: '702' },35  SI: { name: 'Slovenia', num: '705' }, SK: { name: 'Slovakia', num: '703' }, SL: { name: 'Sierra Leone', num: '694' }, SN: { name: 'Senegal', num: '686' }, SO: { name: 'Somalia', num: '706' },36  SR: { name: 'Suriname', num: '740' }, SS: { name: 'South Sudan', num: '728' }, SV: { name: 'El Salvador', num: '222' }, SY: { name: 'Syria', num: '760' }, SZ: { name: 'Eswatini', num: '748' },37  TD: { name: 'Chad', num: '148' }, TG: { name: 'Togo', num: '768' }, TH: { name: 'Thailand', num: '764' }, TJ: { name: 'Tajikistan', num: '762' }, TL: { name: 'Timor-Leste', num: '626' },38  TM: { name: 'Turkmenistan', num: '795' }, TN: { name: 'Tunisia', num: '788' }, TR: { name: 'Türkiye', num: '792' }, TT: { name: 'Trinidad and Tobago', num: '780' }, TW: { name: 'Taiwan', num: '158' },39  TZ: { name: 'Tanzania', num: '834' }, UA: { name: 'Ukraine', num: '804' }, UG: { name: 'Uganda', num: '800' }, US: { name: 'United States', num: '840' }, UY: { name: 'Uruguay', num: '858' },40  UZ: { name: 'Uzbekistan', num: '860' }, VE: { name: 'Venezuela', num: '862' }, VN: { name: 'Vietnam', num: '704' }, VU: { name: 'Vanuatu', num: '548' }, YE: { name: 'Yemen', num: '887' },41  ZA: { name: 'South Africa', num: '710' }, ZM: { name: 'Zambia', num: '894' }, ZW: { name: 'Zimbabwe', num: '716' },42};4344const BY_NUM: Record<string, string> = Object.fromEntries(Object.entries(COUNTRIES).map(([a2, v]) => [v.num, a2]));4546export function countryName(code: string | null | undefined): string {47  if (!code) return '—';48  return COUNTRIES[code.toUpperCase()]?.name ?? code.toUpperCase();49}50export function alpha2FromNumeric(num: string | number | null | undefined): string | null {51  if (num === null || num === undefined) return null;52  const k = String(num).padStart(3, '0');53  return BY_NUM[k] ?? null;54}55