@eristack/iso-3166
Version:
ISO 3166-1 country codes and ISO 3166-2 subdivision normalization — assigned alpha-2/alpha-3 registry
649 lines (642 loc) • 9.72 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
CountryCodeError: () => CountryCodeError,
ISO_3166_1_ALPHA2_CODES: () => ISO_3166_1_ALPHA2_CODES,
ISO_3166_1_ALPHA2_SET: () => ISO_3166_1_ALPHA2_SET,
alpha2ToAlpha3: () => alpha2ToAlpha32,
alpha3ToAlpha2: () => alpha3ToAlpha2,
compareAlpha2: () => compareAlpha2,
isAssignedAlpha2: () => isAssignedAlpha2,
listAssignedAlpha2: () => listAssignedAlpha2,
normalizeAlpha2: () => normalizeAlpha2,
normalizeSubdivisionCode: () => normalizeSubdivisionCode
});
module.exports = __toCommonJS(index_exports);
// src/core/errors.ts
var CountryCodeError = class extends Error {
constructor(message) {
super(message);
this.name = "CountryCodeError";
}
};
// src/core/alpha2-codes.ts
var ISO_3166_1_ALPHA2_CODES = [
"AD",
"AE",
"AF",
"AG",
"AI",
"AL",
"AM",
"AO",
"AQ",
"AR",
"AS",
"AT",
"AU",
"AW",
"AX",
"AZ",
"BA",
"BB",
"BD",
"BE",
"BF",
"BG",
"BH",
"BI",
"BJ",
"BL",
"BM",
"BN",
"BO",
"BQ",
"BR",
"BS",
"BT",
"BV",
"BW",
"BY",
"BZ",
"CA",
"CC",
"CD",
"CF",
"CG",
"CH",
"CI",
"CK",
"CL",
"CM",
"CN",
"CO",
"CR",
"CU",
"CV",
"CW",
"CX",
"CY",
"CZ",
"DE",
"DJ",
"DK",
"DM",
"DO",
"DZ",
"EC",
"EE",
"EG",
"EH",
"ER",
"ES",
"ET",
"FI",
"FJ",
"FK",
"FM",
"FO",
"FR",
"GA",
"GB",
"GD",
"GE",
"GF",
"GG",
"GH",
"GI",
"GL",
"GM",
"GN",
"GP",
"GQ",
"GR",
"GS",
"GT",
"GU",
"GW",
"GY",
"HK",
"HM",
"HN",
"HR",
"HT",
"HU",
"ID",
"IE",
"IL",
"IM",
"IN",
"IO",
"IQ",
"IR",
"IS",
"IT",
"JE",
"JM",
"JO",
"JP",
"KE",
"KG",
"KH",
"KI",
"KM",
"KN",
"KP",
"KR",
"KW",
"KY",
"KZ",
"LA",
"LB",
"LC",
"LI",
"LK",
"LR",
"LS",
"LT",
"LU",
"LV",
"LY",
"MA",
"MC",
"MD",
"ME",
"MF",
"MG",
"MH",
"MK",
"ML",
"MM",
"MN",
"MO",
"MP",
"MQ",
"MR",
"MS",
"MT",
"MU",
"MV",
"MW",
"MX",
"MY",
"MZ",
"NA",
"NC",
"NE",
"NF",
"NG",
"NI",
"NL",
"NO",
"NP",
"NR",
"NU",
"NZ",
"OM",
"PA",
"PE",
"PF",
"PG",
"PH",
"PK",
"PL",
"PM",
"PN",
"PR",
"PS",
"PT",
"PW",
"PY",
"QA",
"RE",
"RO",
"RS",
"RU",
"RW",
"SA",
"SB",
"SC",
"SD",
"SE",
"SG",
"SH",
"SI",
"SJ",
"SK",
"SL",
"SM",
"SN",
"SO",
"SR",
"SS",
"ST",
"SV",
"SX",
"SY",
"SZ",
"TC",
"TD",
"TF",
"TG",
"TH",
"TJ",
"TK",
"TL",
"TM",
"TN",
"TO",
"TR",
"TT",
"TV",
"TW",
"TZ",
"UA",
"UG",
"UM",
"US",
"UY",
"UZ",
"VA",
"VC",
"VE",
"VG",
"VI",
"VN",
"VU",
"WF",
"WS",
"XK",
"YE",
"YT",
"ZA",
"ZM",
"ZW"
];
var ISO_3166_1_ALPHA2_SET = new Set(
ISO_3166_1_ALPHA2_CODES
);
// src/core/alpha2.ts
var ALPHA2_FORMAT = /^[A-Z]{2}$/;
function isAssignedAlpha2(code) {
const upper = code.trim().toUpperCase();
return ALPHA2_FORMAT.test(upper) && ISO_3166_1_ALPHA2_SET.has(upper);
}
function normalizeAlpha2(code) {
const upper = code.trim().toUpperCase();
if (!ALPHA2_FORMAT.test(upper)) {
throw new CountryCodeError(
`Invalid country code "${code}" \u2014 expected ISO 3166-1 alpha-2 (two letters)`
);
}
if (!ISO_3166_1_ALPHA2_SET.has(upper)) {
throw new CountryCodeError(
`Country code "${upper}" is not an assigned ISO 3166-1 alpha-2 code`
);
}
return upper;
}
function listAssignedAlpha2() {
return ISO_3166_1_ALPHA2_CODES;
}
function compareAlpha2(a, b) {
return normalizeAlpha2(a).localeCompare(normalizeAlpha2(b));
}
// src/core/alpha3-map.ts
var ISO_3166_1_ALPHA3_TO_ALPHA2 = {
AFG: "AF",
ALA: "AX",
ALB: "AL",
DZA: "DZ",
ASM: "AS",
AND: "AD",
AGO: "AO",
AIA: "AI",
ATA: "AQ",
ATG: "AG",
ARG: "AR",
ARM: "AM",
ABW: "AW",
AUS: "AU",
AUT: "AT",
AZE: "AZ",
BHS: "BS",
BHR: "BH",
BGD: "BD",
BRB: "BB",
BLR: "BY",
BEL: "BE",
BLZ: "BZ",
BEN: "BJ",
BMU: "BM",
BTN: "BT",
BOL: "BO",
BES: "BQ",
BIH: "BA",
BWA: "BW",
BVT: "BV",
BRA: "BR",
IOT: "IO",
BRN: "BN",
BGR: "BG",
BFA: "BF",
BDI: "BI",
CPV: "CV",
KHM: "KH",
CMR: "CM",
CAN: "CA",
CYM: "KY",
CAF: "CF",
TCD: "TD",
CHL: "CL",
CHN: "CN",
CXR: "CX",
CCK: "CC",
COL: "CO",
COM: "KM",
COD: "CD",
COG: "CG",
COK: "CK",
CRI: "CR",
CIV: "CI",
HRV: "HR",
CUB: "CU",
CUW: "CW",
CYP: "CY",
CZE: "CZ",
DNK: "DK",
DJI: "DJ",
DMA: "DM",
DOM: "DO",
ECU: "EC",
EGY: "EG",
SLV: "SV",
GNQ: "GQ",
ERI: "ER",
EST: "EE",
SWZ: "SZ",
ETH: "ET",
FLK: "FK",
FRO: "FO",
FJI: "FJ",
FIN: "FI",
FRA: "FR",
GUF: "GF",
PYF: "PF",
ATF: "TF",
GAB: "GA",
GMB: "GM",
GEO: "GE",
DEU: "DE",
GHA: "GH",
GIB: "GI",
GRC: "GR",
GRL: "GL",
GRD: "GD",
GLP: "GP",
GUM: "GU",
GTM: "GT",
GGY: "GG",
GIN: "GN",
GNB: "GW",
GUY: "GY",
HTI: "HT",
HMD: "HM",
VAT: "VA",
HND: "HN",
HKG: "HK",
HUN: "HU",
ISL: "IS",
IND: "IN",
IDN: "ID",
IRN: "IR",
IRQ: "IQ",
IRL: "IE",
IMN: "IM",
ISR: "IL",
ITA: "IT",
JAM: "JM",
JPN: "JP",
JEY: "JE",
JOR: "JO",
KAZ: "KZ",
KEN: "KE",
KIR: "KI",
PRK: "KP",
KOR: "KR",
KWT: "KW",
KGZ: "KG",
LAO: "LA",
LVA: "LV",
LBN: "LB",
LSO: "LS",
LBR: "LR",
LBY: "LY",
LIE: "LI",
LTU: "LT",
LUX: "LU",
MAC: "MO",
MDG: "MG",
MWI: "MW",
MYS: "MY",
MDV: "MV",
MLI: "ML",
MLT: "MT",
MHL: "MH",
MTQ: "MQ",
MRT: "MR",
MUS: "MU",
MYT: "YT",
MEX: "MX",
FSM: "FM",
MDA: "MD",
MCO: "MC",
MNG: "MN",
MNE: "ME",
MSR: "MS",
MAR: "MA",
MOZ: "MZ",
MMR: "MM",
NAM: "NA",
NRU: "NR",
NPL: "NP",
NLD: "NL",
NCL: "NC",
NZL: "NZ",
NIC: "NI",
NER: "NE",
NGA: "NG",
NIU: "NU",
NFK: "NF",
MKD: "MK",
MNP: "MP",
NOR: "NO",
OMN: "OM",
PAK: "PK",
PLW: "PW",
PSE: "PS",
PAN: "PA",
PNG: "PG",
PRY: "PY",
PER: "PE",
PHL: "PH",
PCN: "PN",
POL: "PL",
PRT: "PT",
PRI: "PR",
QAT: "QA",
REU: "RE",
ROU: "RO",
RUS: "RU",
RWA: "RW",
BLM: "BL",
SHN: "SH",
KNA: "KN",
LCA: "LC",
MAF: "MF",
SPM: "PM",
VCT: "VC",
WSM: "WS",
SMR: "SM",
STP: "ST",
SAU: "SA",
SEN: "SN",
SRB: "RS",
SYC: "SC",
SLE: "SL",
SGP: "SG",
SXM: "SX",
SVK: "SK",
SVN: "SI",
SLB: "SB",
SOM: "SO",
ZAF: "ZA",
SGS: "GS",
SSD: "SS",
ESP: "ES",
LKA: "LK",
SDN: "SD",
SUR: "SR",
SJM: "SJ",
SWE: "SE",
CHE: "CH",
SYR: "SY",
TWN: "TW",
TJK: "TJ",
TZA: "TZ",
THA: "TH",
TLS: "TL",
TGO: "TG",
TKL: "TK",
TON: "TO",
TTO: "TT",
TUN: "TN",
TUR: "TR",
TKM: "TM",
TCA: "TC",
TUV: "TV",
UGA: "UG",
UKR: "UA",
ARE: "AE",
GBR: "GB",
USA: "US",
UMI: "UM",
URY: "UY",
UZB: "UZ",
VUT: "VU",
VEN: "VE",
VNM: "VN",
VGB: "VG",
VIR: "VI",
WLF: "WF",
ESH: "EH",
YEM: "YE",
ZMB: "ZM",
ZWE: "ZW",
XKX: "XK"
};
var alpha2ToAlpha3 = /* @__PURE__ */ new Map();
for (const [a3, a2] of Object.entries(ISO_3166_1_ALPHA3_TO_ALPHA2)) {
if (!alpha2ToAlpha3.has(a2)) {
alpha2ToAlpha3.set(a2, a3);
}
}
var ISO_3166_1_ALPHA2_TO_ALPHA3 = alpha2ToAlpha3;
// src/core/alpha3.ts
var ALPHA3_FORMAT = /^[A-Z]{3}$/;
function alpha3ToAlpha2(code) {
const upper = code.trim().toUpperCase();
if (!ALPHA3_FORMAT.test(upper)) {
throw new CountryCodeError(
`Invalid alpha-3 country code "${code}" \u2014 expected three letters`
);
}
const a2 = ISO_3166_1_ALPHA3_TO_ALPHA2[upper];
if (!a2) {
throw new CountryCodeError(
`Alpha-3 code "${upper}" is not an assigned ISO 3166-1 alpha-3 code`
);
}
return normalizeAlpha2(a2);
}
function alpha2ToAlpha32(code) {
const a2 = normalizeAlpha2(code);
const a3 = ISO_3166_1_ALPHA2_TO_ALPHA3.get(a2);
if (!a3) {
throw new CountryCodeError(`No alpha-3 mapping registered for "${a2}"`);
}
return a3;
}
// src/core/subdivision.ts
var SUBDIVISION = /^[A-Z]{2}-[\dA-Z]{1,8}$/;
function normalizeSubdivisionCode(countryAlpha2, subdivision) {
const country = normalizeAlpha2(countryAlpha2);
let raw = subdivision.trim().toUpperCase();
if (!raw.includes("-")) {
raw = `${country}-${raw}`;
}
if (!SUBDIVISION.test(raw)) {
throw new CountryCodeError(
`Invalid subdivision "${subdivision}" \u2014 expected ISO 3166-2 form CC-XXX`
);
}
const prefix = raw.slice(0, 2);
if (prefix !== country) {
throw new CountryCodeError(
`Subdivision "${raw}" does not match country "${country}"`
);
}
return raw;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
CountryCodeError,
ISO_3166_1_ALPHA2_CODES,
ISO_3166_1_ALPHA2_SET,
alpha2ToAlpha3,
alpha3ToAlpha2,
compareAlpha2,
isAssignedAlpha2,
listAssignedAlpha2,
normalizeAlpha2,
normalizeSubdivisionCode
});
//# sourceMappingURL=index.cjs.map