Convert nationality codes

A utility for converting between nationality codes. We currently support 6 schemes:
'name'
Plaintext English
'icao'
International Civil Aviation Organization
'iso2'
ISO 3166-1 alpha-2 (link)
'iso3'
ISO 3166-1 alpha-3 (link)
'flag'
Emojis 🇦🇪 🇪🇸 🇸🇬 🇲🇵 🇳🇱
'phone'
Prefixes for international dialing (link)
Installation
npm install @opengovsg/convert-nationality-codes
Usage
convert-nationality-codes
provides a chained API:
import { convert } from '@opengovsg/convert-nationality-codes'
convert('SGP').from('icao').to('iso2')
Schemes don't always have 1-1 mappings. In such cases, we support many-to-one mappings as expected
convert('UM').from('iso2').to('icao')
convert('US').from('iso2').to('icao')
and choose a sensible default for one-to-many mappings. Where ambiguous, we choose the territory with a larger population. The full list of alternates can be seen here
convert('USA').from('icao').to('name')
Where a scheme has no representation for an option provided by another scheme, we throw an error.
convert('XXB').from('icao').to('iso2')
Additionally, if you require the full enums, e.g. to use in a validator / to iterate over with your own logic, you can access them as a de-duped, sorted list:
import { schemes } from '@opengovsg/convert-nationality-codes'
console.log(schemes.icao)
console.log(schemes.iso2)
Typings
Array items in schemes
and return type from convert()
are strongly-typed thanks to type-narrowing.
const possiblePhonePrefix: string = '+66'
const wellTypedIso3 = convert(possiblePhonePrefix).from('phone').to('iso3')
if (wellTypedIso3 === 'Thailand') // TS complains - wellTypedIso3 is known to be 'AFG' | 'ALB' | 'AZM' ...