{"_id":"@ariadng/countries","_rev":"2-0da24d94a930d8157354fb300128c4b9","name":"@ariadng/countries","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@ariadng/countries","version":"0.1.0","keywords":["country","countries","iso-3166","iso3166","alpha-2","alpha-3","country-code","country-name","calling-code","phone-code","dial-code","continent","flag","emoji","tree-shakeable","typescript","esm"],"author":{"name":"ariadng","email":"ariadng@gmail.com"},"license":"MIT","_id":"@ariadng/countries@0.1.0","maintainers":[{"name":"ariadng","email":"ariadng@gmail.com"}],"homepage":"https://github.com/ariadng/countries#readme","bugs":{"url":"https://github.com/ariadng/countries/issues"},"dist":{"shasum":"a8ab5bd00916777ff14407446e26f2f79ad0ac1c","tarball":"https://registry.npmjs.org/@ariadng/countries/-/countries-0.1.0.tgz","fileCount":143,"integrity":"sha512-bgyNzwMw9tP1FOZUs3mUDT7VMrHc///q01JOHUBpe53n05I6OWFGEmDISc4N64TNg+Y6ZLVKWFMTz4tETnDyTQ==","signatures":[{"sig":"MEUCIQCQqcUADF2FcfFBlOSvdAvuv7+9bvEI2bnX7UxIjofD8gIgE3b6tIP9CbFKVuM048HBX9X3FPk1Dwg6nQrpeIZ70pQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":347054},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"302026f50593107c75334d4bbeb611e3f2fe8f35","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","build:data":"node scripts/build-data.mjs","test:watch":"vitest","prepublishOnly":"npm run build && npm run test","check:treeshaking":"node scripts/check-treeshaking.mjs"},"_npmUser":{"name":"ariadng","email":"ariadng@gmail.com"},"repository":{"url":"git+https://github.com/ariadng/countries.git","type":"git"},"_npmVersion":"11.16.0","description":"Tiny, tree-shakeable country data & conversion utilities — ISO 3166-1 alpha-2/alpha-3/numeric codes, names, native names, calling codes, continents, capitals, currencies, languages, and flag emoji.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","esbuild":"^0.28.1","iso-3166":"^4.4.0","typescript":"^7.0.2","countries-list":"^3.4.1"},"_npmOperationalInternal":{"tmp":"tmp/countries_0.1.0_1784622608350_0.6310953943646169","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ariadng/countries","version":"0.2.0","description":"Tiny, tree-shakeable country data & conversion utilities — ISO 3166-1 alpha-2/alpha-3/numeric codes, names, native names, calling codes, continents, capitals, currencies, languages, flag emoji, and inline SVG flags.","keywords":["country","countries","iso-3166","iso3166","alpha-2","alpha-3","country-code","country-name","calling-code","phone-code","dial-code","continent","flag","flags","svg","flag-svg","emoji","tree-shakeable","typescript","esm"],"license":"MIT","author":{"name":"ariadng","email":"ariadng@gmail.com"},"type":"module","sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./flags":{"types":"./dist/flags.d.ts","default":"./dist/flags.js"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.build.json","build:data":"node scripts/build-data.mjs","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","check:treeshaking":"node scripts/check-treeshaking.mjs","prepublishOnly":"npm run build && npm run test"},"repository":{"type":"git","url":"git+https://github.com/ariadng/countries.git"},"homepage":"https://github.com/ariadng/countries#readme","bugs":{"url":"https://github.com/ariadng/countries/issues"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"devDependencies":{"countries-list":"^3.4.1","country-flag-icons":"^1.6.20","esbuild":"^0.28.1","iso-3166":"^4.4.0","typescript":"^7.0.2","vitest":"^4.1.10"},"gitHead":"f105e86829da0d3f15fe6772cd7dc21a46a985cf","_id":"@ariadng/countries@0.2.0","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-Mh10QExyqSGdEG864cJ32WDiQQdG5xJhTlL4p/YVZIfM4uDO/6e+IvTDr55+jNv+V2Wu3/aZhu9iv43FkApyqw==","shasum":"5c7e8ede1719dde7bcb994b4105ab6920bf832f3","tarball":"https://registry.npmjs.org/@ariadng/countries/-/countries-0.2.0.tgz","fileCount":153,"unpackedSize":784022,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDjyNCm1XnHcww8K273qVR1Fn9yeafPuMn1EpghR1kGngIhAItnUHz0eYU/FyCET+/OYvf1HRC6vp+/isXr0966wBRg"}]},"_npmUser":{"name":"ariadng","email":"ariadng@gmail.com"},"directories":{},"maintainers":[{"name":"ariadng","email":"ariadng@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/countries_0.2.0_1784768250869_0.5663245714316123"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-21T08:30:08.260Z","modified":"2026-07-23T00:57:31.225Z","0.1.0":"2026-07-21T08:30:08.489Z","0.2.0":"2026-07-23T00:57:31.067Z"},"bugs":{"url":"https://github.com/ariadng/countries/issues"},"author":{"name":"ariadng","email":"ariadng@gmail.com"},"license":"MIT","homepage":"https://github.com/ariadng/countries#readme","keywords":["country","countries","iso-3166","iso3166","alpha-2","alpha-3","country-code","country-name","calling-code","phone-code","dial-code","continent","flag","flags","svg","flag-svg","emoji","tree-shakeable","typescript","esm"],"repository":{"type":"git","url":"git+https://github.com/ariadng/countries.git"},"description":"Tiny, tree-shakeable country data & conversion utilities — ISO 3166-1 alpha-2/alpha-3/numeric codes, names, native names, calling codes, continents, capitals, currencies, languages, flag emoji, and inline SVG flags.","maintainers":[{"name":"ariadng","email":"ariadng@gmail.com"}],"readme":"# @ariadng/countries\n\n> Tiny, tree-shakeable country data & conversion utilities for TypeScript.\n\n**Typed · Tree-shakeable · Zero-dependency · ESM**\n\nConvert between ISO 3166-1 **alpha-2** (`\"CN\"`), **alpha-3** (`\"CHN\"`), **numeric** (`\"156\"`), and **names** (`\"China\"`) — and pull rich per-country data (native names, calling codes, continents, capitals, currencies, languages, flag emoji, inline SVG flags) for all **249** assigned countries. Import one helper and only its data slice ends up in your bundle.\n\n```ts\nimport { getCountryName, getFlagEmoji } from '@ariadng/countries';\n\ngetCountryName('CN'); // 'China'\ngetFlagEmoji('ID');   // '🇮🇩'\n```\n\n## Features\n\n- **Literal union types** — `CountryCode` is a union of all 249 alpha-2 codes, so your editor autocompletes `'ID'`, `'CN'`, `'US'`, … (same for `CountryCode3`, `ContinentCode`, `ContinentName`, `LanguageCode`).\n- **Forgiving inputs** — every code-accepting function takes alpha-2, alpha-3, or numeric (string *or* number), case-insensitive and whitespace-tolerant: `'ID'`, `'idn'`, `' IDN '`, `360`, and `'360'` all resolve to Indonesia.\n- **Never throws — even on garbage input** — single lookups return `undefined` on a miss, list lookups return `[]`. Passing `null`, `undefined`, an object, an array, or any other non-string/number value is treated as a miss, never an exception.\n- **Tree-shakeable by construction** — ESM-only, per-field data modules, `sideEffects: false`. Importing `getCountryName` does **not** drag phone / capital / currency data into your bundle.\n- **Zero runtime dependencies** — data is generated and committed; nothing is fetched or computed at import time.\n- **Frozen singletons** — `getCountry('ID')`, `getCountry('IDN')`, and `getCountry(360)` return the *same* frozen object reference.\n- **Inline SVG flags, opt-in** — `import { ID } from '@ariadng/countries/flags'` bundles exactly one flag (~0.2 KB); the main entry stays SVG-free.\n- **JSDoc `@example` on every export** — hover docs teach each function without leaving your editor.\n\n## Install\n\n```sh\nnpm i @ariadng/countries\n```\n\n## Quick start\n\n```ts\nimport {\n  getCountryName,\n  toAlpha3,\n  getCountry,\n  getFlagEmoji,\n} from '@ariadng/countries';\n\ngetCountryName('CN');   // 'China'\ntoAlpha3('ID');         // 'IDN'\ngetFlagEmoji('ID');     // '🇮🇩'\n\nconst id = getCountry('ID');\nid?.capital;            // 'Jakarta'\nid?.currencies;         // ['IDR']\nid?.continentName;      // 'Asia'\n```\n\n## API reference\n\nEvery function that takes a country identifier accepts **`CountryInput`** — alpha-2 (`'ID'`), alpha-3 (`'IDN'`), or numeric (`360` / `'360'`), case-insensitive and whitespace-tolerant. Single-value lookups return `undefined` on a miss; list lookups return `[]`. **Nothing ever throws** — even when a JS caller passes `null`, `undefined`, or another non-string/number value, every function returns its miss value instead of raising.\n\n### Lookup\n\n**`getCountry(code: CountryInput): Country | undefined`** — the full country record. Objects are lazily assembled **frozen singletons**: the same reference is returned for every identifier form of a country, and `Object.isFrozen(...)` is `true`.\n\n```ts\ngetCountry('ID');\n// {\n//   alpha2: 'ID',\n//   alpha3: 'IDN',\n//   numeric: '360',\n//   name: 'Indonesia',\n//   nativeName: 'Indonesia',\n//   phoneCodes: ['62'],\n//   continent: 'AS',\n//   continentName: 'Asia',\n//   capital: 'Jakarta',\n//   currencies: ['IDR'],\n//   languages: ['id'],\n//   flag: '🇮🇩',\n// }\n\ngetCountry('CHN') === getCountry('CN'); // true (same frozen singleton)\ngetCountry(360)   === getCountry('ID'); // true\ngetCountry('XX');                       // undefined\n```\n\n**`getAllCountries(): Country[]`** — all 249 countries in alpha-2 order. Returns a fresh array on each call, reusing the same frozen singleton objects.\n\n```ts\ngetAllCountries().length; // 249\n```\n\n### Codes & conversion\n\n**`toAlpha2(code: CountryInput): CountryCode | undefined`** — normalize any identifier to its alpha-2 code.\n\n```ts\ntoAlpha2('IDN'); // 'ID'\ntoAlpha2('id');  // 'ID'\ntoAlpha2(360);   // 'ID'\ntoAlpha2('XX');  // undefined\n```\n\n**`toAlpha3(code: CountryInput): CountryCode3 | undefined`** — normalize any identifier to its alpha-3 code.\n\n```ts\ntoAlpha3('ID'); // 'IDN'\ntoAlpha3('cn'); // 'CHN'\ntoAlpha3(840);  // 'USA'\n```\n\n**`toNumeric(code: CountryInput): string | undefined`** — normalize any identifier to its 3-digit numeric code (zero-padded string).\n\n```ts\ntoNumeric('ID');  // '360'\ntoNumeric('BRA'); // '076'\n```\n\n**`isCountryCode(value: unknown): value is CountryCode`** — **strict** type guard: exactly two uppercase letters that name an assigned country.\n\n```ts\nisCountryCode('US');  // true\nisCountryCode('us');  // false\nisCountryCode('USA'); // false\n```\n\n**`isAlpha3Code(value: unknown): value is CountryCode3`** — **strict** type guard: exactly three uppercase letters that name an assigned country.\n\n```ts\nisAlpha3Code('USA'); // true\nisAlpha3Code('US');  // false\n```\n\n**`isValidCountry(value: string | number): boolean`** — **loose** check: `true` for any resolvable code form (alpha-2/alpha-3/numeric, any case). Codes only — not names.\n\n```ts\nisValidCountry('us');  // true\nisValidCountry('USA'); // true\nisValidCountry('360'); // true\nisValidCountry(360);   // true\nisValidCountry('XX');  // false\n```\n\n**`resolveCountryCode(input: string | number): CountryCode | undefined`** — the \"accept anything\" resolver: tries code forms first, then exact (normalized) name, native name, and alias.\n\n```ts\nresolveCountryCode('CHN');               // 'CN'\nresolveCountryCode('china');             // 'CN'\nresolveCountryCode('Republic of Korea'); // 'KR'\nresolveCountryCode(360);                 // 'ID'\n```\n\n### Names & search\n\n**`getCountryName(code: CountryInput): string | undefined`** — the common English short name.\n\n```ts\ngetCountryName('CN'); // 'China'\n```\n\n**`getNativeName(code: CountryInput): string | undefined`** — the country's name in its own language.\n\n```ts\ngetNativeName('DE'); // 'Deutschland'\n```\n\n**`getCountryByName(name: string): Country | undefined`** — **exact** match (after normalization) against English names, native names, and curated aliases.\n\n```ts\ngetCountryByName('USA');          // Country { alpha2: 'US', … }\ngetCountryByName('uk');           // Country { alpha2: 'GB', … }\ngetCountryByName('Deutschland');  // Country { alpha2: 'DE', … }\ngetCountryByName(\"Côte d'Ivoire\"); // Country { alpha2: 'CI', … }\n```\n\n**`searchCountries(query: string): Country[]`** — ranked search across codes, names, native names, and aliases. Six ranks, best first: (1) exact code → (2) exact name/native/alias → (3) English-name prefix → (4) native-name/alias prefix → (5) English-name substring → (6) native-name/alias substring. English-name matches always rank above native/alias matches, and aliases participate in the prefix/substring scans. Deduped, sorted by name within each rank; empty/whitespace query returns `[]`.\n\n```ts\nsearchCountries('indo')[0].alpha2;  // 'ID'\nsearchCountries('india')[0].alpha2; // 'IN' (exact name beats substring matches)\nsearchCountries('burm')[0].alpha2;  // 'MM' — Myanmar, found via the 'burma' alias\nsearchCountries('united').map((c) => c.alpha2); // ['AE', 'GB', 'US', …] (English names first)\nsearchCountries('');                // []\n```\n\n### Phone\n\n**`getPhoneCode(code: CountryInput): string | undefined`** — the primary (first) calling code, digits only.\n\n```ts\ngetPhoneCode('ID'); // '62'\n```\n\n**`getPhoneCodes(code: CountryInput): readonly string[]`** — all calling codes for a country; `[]` if unknown.\n\n```ts\ngetPhoneCodes('DO'); // ['1809', '1829', '1849']\ngetPhoneCodes('XX'); // []\n```\n\n**`getCountriesByPhoneCode(code: string | number): Country[]`** — every country using a given calling code. Input is normalized to digits (`+`, spaces, `-`, `.`, `(`, `)` are stripped). Alpha-2 order.\n\n```ts\ngetCountriesByPhoneCode('+62');  // [Indonesia]\ngetCountriesByPhoneCode(62);     // [Indonesia]\ngetCountriesByPhoneCode('1');    // [ …, Canada, …, United States, … ]\n```\n\n**`getCountriesByPhoneNumber(phoneNumber: string): Country[]`** — match a full phone number: strips non-digits, drops one leading `00` international prefix, then finds the **longest** calling code that prefixes the number. `[]` if none.\n\n```ts\ngetCountriesByPhoneNumber('+6281234567890'); // [Indonesia]\ngetCountriesByPhoneNumber('006281234567890'); // [Indonesia]\ngetCountriesByPhoneNumber('+14155551212');   // NANP countries with code '1' (incl. US)\n```\n\n### Continent\n\n**`getContinent(code: CountryInput): ContinentName | undefined`** — the continent's English name.\n\n```ts\ngetContinent('ID'); // 'Asia'\n```\n\n**`getContinentCode(code: CountryInput): ContinentCode | undefined`** — the two-letter continent code.\n\n```ts\ngetContinentCode('ID'); // 'AS'\n```\n\n**`getCountriesByContinent(continent: ContinentCode | ContinentName | string): Country[]`** — every country on a continent. Accepts code or name, case-insensitive; sorted by English name.\n\n```ts\ngetCountriesByContinent('EU');     // [ …, Germany, …, France, … ]\ngetCountriesByContinent('Europe'); // same result\ngetCountriesByContinent('europe'); // same result\n```\n\n### Capital, currency, language\n\n**`getCapital(code: CountryInput): string | undefined`** — capital city; `''` for countries with no capital, `undefined` only for unknown codes.\n\n```ts\ngetCapital('ID'); // 'Jakarta'\ngetCapital('AQ'); // '' (Antarctica has no capital)\ngetCapital('XX'); // undefined\n```\n\n**`getCurrencies(code: CountryInput): readonly string[]`** — ISO 4217 currency codes; `[]` if unknown.\n\n```ts\ngetCurrencies('ID'); // ['IDR']\n```\n\n**`getCountriesByCurrency(currency: string): Country[]`** — every country using a currency; case-insensitive, sorted by English name.\n\n```ts\ngetCountriesByCurrency('EUR'); // [ …, Germany, …, France, …, Spain, … ]\n```\n\n**`getLanguages(code: CountryInput): readonly string[]`** — ISO 639-1 language codes; `[]` if unknown.\n\n```ts\ngetLanguages('ID'); // ['id']\n```\n\n**`getCountriesByLanguage(language: string): Country[]`** — every country using a language; case-insensitive, sorted by English name.\n\n```ts\ngetCountriesByLanguage('pt'); // [ …, Brazil, …, Portugal, … ]\n```\n\n**`getLanguageName(language: string): string | undefined`** — English name of a language code.\n\n```ts\ngetLanguageName('id'); // 'Indonesian'\n```\n\n**`getLanguageNativeName(language: string): string | undefined`** — native name of a language code.\n\n```ts\ngetLanguageNativeName('id'); // 'Bahasa Indonesia'\n```\n\n### Flags\n\n**`getFlagEmoji(code: CountryInput): string | undefined`** — the flag emoji, computed on the fly from the alpha-2 code via Unicode regional indicators (no flag data is stored). `undefined` unless the input resolves to an assigned code.\n\n```ts\ngetFlagEmoji('ID');  // '🇮🇩'\ngetFlagEmoji('IDN'); // '🇮🇩'\ngetFlagEmoji(360);   // '🇮🇩'\ngetFlagEmoji('XX');  // undefined\n```\n\n### SVG flags (`@ariadng/countries/flags`)\n\nReal flag artwork as inline SVG strings (3×2 aspect ratio, optimized artwork from [`country-flag-icons`](https://gitlab.com/catamphetamine/country-flag-icons)). Lives in its **own subpath entry** so the main entry stays SVG-free — importing `@ariadng/countries` never parses or bundles a single flag.\n\n**Per-country named exports** — the tree-shakeable way. Each country's flag is exported under its alpha-2 code; importing one bundles ~0.2 KB, not the whole set:\n\n```ts\nimport { ID, US, JP } from '@ariadng/countries/flags';\n\nID; // '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 513 342\">…</svg>'\n\n// React: render inline\n<span dangerouslySetInnerHTML={{ __html: ID }} />\n```\n\n**`getFlagSvg(code: CountryInput): string | undefined`** — dynamic lookup by any code form (alpha-2/alpha-3/numeric, case-insensitive). Because the code is only known at runtime, this pulls **all 249 flags** into your bundle (~174 KB min, ~49 KB gzip) — fine for a country picker, wasteful for a fixed handful of flags.\n\n```ts\nimport { getFlagSvg } from '@ariadng/countries/flags';\n\ngetFlagSvg('ID');  // '<svg …>…</svg>'\ngetFlagSvg('idn'); // same\ngetFlagSvg(360);   // same\ngetFlagSvg('XX');  // undefined\n```\n\n**`getFlagSvgDataUri(code: CountryInput): string | undefined`** — the same flag as a `data:image/svg+xml` URI, ready for `<img src>` or CSS `url()`. Same bundle caveat as `getFlagSvg`.\n\n```ts\nimport { getFlagSvgDataUri } from '@ariadng/countries/flags';\n\n<img src={getFlagSvgDataUri('ID')} alt=\"Flag of Indonesia\" width={30} height={20} />\n```\n\n**`flagSvgs`** — the raw frozen record, keyed by alpha-2 code: `flagSvgs.ID // '<svg …>'`.\n\n### Raw data access\n\nAdvanced: the underlying lookup tables are exported directly. Each is a deeply **frozen** singleton keyed by alpha-2 code (unless noted), with keys sorted alphabetically. The freeze is genuinely deep — nested array/object values are frozen too, so `Object.isFrozen(countryPhoneCodes.ID)` and `Object.isFrozen(languageNames.id)` are both `true`.\n\n```ts\nimport {\n  countryCodes,        // readonly ['AD', 'AE', …] — all 249 alpha-2 codes\n  countryAlpha3Codes,  // { AD: 'AND', … }\n  countryNumericCodes, // { AD: '020', … }\n  countryNames,        // { AD: 'Andorra', … }\n  countryNativeNames,  // { DE: 'Deutschland', JP: '日本', … }\n  countryPhoneCodes,   // { ID: ['62'], DO: ['1809','1829','1849'], … }\n  countryContinents,   // { ID: 'AS', … }\n  countryCapitals,     // { ID: 'Jakarta', AQ: '', … }\n  countryCurrencies,   // { ID: ['IDR'], … }\n  countryLanguages,    // { ID: ['id'], … }\n  continentNames,      // { AF: 'Africa', AS: 'Asia', … }\n  languageNames,       // { id: { name: 'Indonesian', native: 'Bahasa Indonesia' }, … }\n} from '@ariadng/countries';\n\ncountryNames.CN;      // 'China'\ncountryCodes.length;  // 249\n```\n\nExported **types**: `Country`, `CountryInput`, `CountryCode`, `CountryCode3`, `ContinentCode`, `ContinentName`, `LanguageCode`.\n\n## Bundle size & tree-shaking\n\nData is split into one module per field (names, native names, phone, capitals, currencies, languages, …), and the package is marked `sideEffects: false` with per-file ESM output. A bundler therefore keeps **only the data slices your imports actually touch** — `getFlagEmoji` pulls in no data at all, while `getCountryName` pulls in names but not phone/capital/currency/alias data.\n\nMeasured with the tree-shaking audit (`npm run check:treeshaking`), a single-function import bundles to:\n\n| Scenario | Imports | Minified | Gzipped |\n|---|---|---|---|\n| S1 | `getCountryName` | 10.4 KB | 5.5 KB |\n| S2 | `toAlpha3` | 6.4 KB | 3.3 KB |\n| S3 | `getFlagEmoji` | 6.5 KB | 3.4 KB |\n| S4 | `getPhoneCode` | 9.3 KB | 4.6 KB |\n| S5 | `getCountry` | 31.3 KB | 13.8 KB |\n| S7 | `ID` (one SVG flag, from `/flags`) | 0.18 KB | 0.16 KB |\n| S8 | `getFlagSvg` (all 249 SVG flags) | 173.9 KB | 48.9 KB |\n\n*(Byte figures are the measured `npm run check:treeshaking` output; KB = 1000 bytes.)*\n\n## Data\n\nCovers all **249** ISO 3166-1 **assigned** country codes — the canonical, unambiguous set. Kosovo (`XK`) is intentionally excluded because it is not an ISO-assigned code.\n\nData is generated and committed (no network or build steps for consumers), regenerable with:\n\n```sh\nnpm run build:data\n```\n\nSources, used at build time only and gratefully attributed:\n\n- [`countries-list`](https://github.com/annexare/Countries) — MIT © Annexare\n- [`iso-3166`](https://github.com/wooorm/iso-3166) — MIT © Titus Wormer\n- [`country-flag-icons`](https://gitlab.com/catamphetamine/country-flag-icons) — MIT © catamphetamine (flag SVG artwork)\n\n## ESM\n\nThis package is **ESM-only** (`\"type\": \"module\"`). Import it with `import` in ESM projects; on **Node ≥ 20.19** you can also `require()` it from CommonJS thanks to Node's built-in `require()` of ES modules. TypeScript declaration files (with declaration maps for \"go to definition\") are included.\n\n## License\n\nMIT © 2026 ariadng\n","readmeFilename":"README.md"}