country-code-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # country-kit
2
+
3
+ Zero-dependency TypeScript package with all **249 ISO 3166-1 countries** โ€” alpha-2 code, English name, and flag emoji โ€” plus fast lookup and search helpers. Ships dual ESM + CJS builds with full type declarations. Works in Node and browsers, tree-shakeable, ~10 KB.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install country-kit
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import {
15
+ countries,
16
+ getCountryByCode,
17
+ getCountryByName,
18
+ getCountryByFlag,
19
+ getFlag,
20
+ getName,
21
+ isValidCode,
22
+ searchCountries,
23
+ codeToFlag,
24
+ flagToCode,
25
+ } from "country-kit";
26
+
27
+ countries.length; // 249
28
+ getCountryByCode("in"); // { code: "IN", name: "India", flag: "๐Ÿ‡ฎ๐Ÿ‡ณ" }
29
+ getCountryByName("Japan"); // { code: "JP", name: "Japan", flag: "๐Ÿ‡ฏ๐Ÿ‡ต" }
30
+ getCountryByFlag("๐Ÿ‡ฉ๐Ÿ‡ช"); // { code: "DE", name: "Germany", flag: "๐Ÿ‡ฉ๐Ÿ‡ช" }
31
+
32
+ getFlag("BD"); // "๐Ÿ‡ง๐Ÿ‡ฉ"
33
+ getName("FR"); // "France"
34
+ isValidCode("zz"); // false
35
+
36
+ searchCountries("uni");
37
+ // [United Arab Emirates, United Kingdom, United States, ...]
38
+ // ranked: exact match โ†’ prefix match โ†’ substring match
39
+
40
+ codeToFlag("NP"); // "๐Ÿ‡ณ๐Ÿ‡ต" (no lookup table needed)
41
+ flagToCode("๐Ÿ‡ณ๐Ÿ‡ต"); // "NP"
42
+ ```
43
+
44
+ CommonJS works too:
45
+
46
+ ```js
47
+ const { getName } = require("country-kit");
48
+ ```
49
+
50
+ ## API
51
+
52
+ | Function | Returns |
53
+ |---|---|
54
+ | `countries` | `readonly Country[]` โ€” all 249 entries |
55
+ | `getCountryByCode(code)` | `Country \| undefined` (case-insensitive) |
56
+ | `getCountryByName(name)` | `Country \| undefined` (case-insensitive) |
57
+ | `getCountryByFlag(flag)` | `Country \| undefined` |
58
+ | `getFlag(code)` / `getName(code)` | `string \| undefined` |
59
+ | `isValidCode(code)` | `boolean` |
60
+ | `searchCountries(query)` | `Country[]` ranked by match quality |
61
+ | `codeToFlag(code)` | `string` (throws on invalid input) |
62
+ | `flagToCode(flag)` | `string \| undefined` |
63
+
64
+ ```ts
65
+ interface Country {
66
+ code: string; // ISO 3166-1 alpha-2, e.g. "IN"
67
+ name: string; // English short name, e.g. "India"
68
+ flag: string; // Flag emoji, e.g. "๐Ÿ‡ฎ๐Ÿ‡ณ"
69
+ }
70
+ ```
71
+
72
+ ## Scripts
73
+
74
+ ```bash
75
+ npm run build # compile ESM + CJS to dist/
76
+ npm test # run Node's built-in test runner
77
+ ```
78
+
79
+ ## Publishing
80
+
81
+ 1. Pick a unique name in `package.json` (check `npm view <name>` first โ€” `country-kit` may be taken).
82
+ 2. `npm login`
83
+ 3. `npm publish` (runs build + tests automatically via `prepublishOnly`)
84
+
85
+ ## License
86
+
87
+ MIT
@@ -0,0 +1,2 @@
1
+ import type { Country } from "./types.js";
2
+ export declare const countries: readonly Country[];
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.countries = void 0;
4
+ exports.countries = [
5
+ { code: "AD", name: "Andorra", flag: "๐Ÿ‡ฆ๐Ÿ‡ฉ" },
6
+ { code: "AE", name: "United Arab Emirates", flag: "๐Ÿ‡ฆ๐Ÿ‡ช" },
7
+ { code: "AF", name: "Afghanistan", flag: "๐Ÿ‡ฆ๐Ÿ‡ซ" },
8
+ { code: "AG", name: "Antigua & Barbuda", flag: "๐Ÿ‡ฆ๐Ÿ‡ฌ" },
9
+ { code: "AI", name: "Anguilla", flag: "๐Ÿ‡ฆ๐Ÿ‡ฎ" },
10
+ { code: "AL", name: "Albania", flag: "๐Ÿ‡ฆ๐Ÿ‡ฑ" },
11
+ { code: "AM", name: "Armenia", flag: "๐Ÿ‡ฆ๐Ÿ‡ฒ" },
12
+ { code: "AO", name: "Angola", flag: "๐Ÿ‡ฆ๐Ÿ‡ด" },
13
+ { code: "AQ", name: "Antarctica", flag: "๐Ÿ‡ฆ๐Ÿ‡ถ" },
14
+ { code: "AR", name: "Argentina", flag: "๐Ÿ‡ฆ๐Ÿ‡ท" },
15
+ { code: "AS", name: "American Samoa", flag: "๐Ÿ‡ฆ๐Ÿ‡ธ" },
16
+ { code: "AT", name: "Austria", flag: "๐Ÿ‡ฆ๐Ÿ‡น" },
17
+ { code: "AU", name: "Australia", flag: "๐Ÿ‡ฆ๐Ÿ‡บ" },
18
+ { code: "AW", name: "Aruba", flag: "๐Ÿ‡ฆ๐Ÿ‡ผ" },
19
+ { code: "AX", name: "ร…land Islands", flag: "๐Ÿ‡ฆ๐Ÿ‡ฝ" },
20
+ { code: "AZ", name: "Azerbaijan", flag: "๐Ÿ‡ฆ๐Ÿ‡ฟ" },
21
+ { code: "BA", name: "Bosnia & Herzegovina", flag: "๐Ÿ‡ง๐Ÿ‡ฆ" },
22
+ { code: "BB", name: "Barbados", flag: "๐Ÿ‡ง๐Ÿ‡ง" },
23
+ { code: "BD", name: "Bangladesh", flag: "๐Ÿ‡ง๐Ÿ‡ฉ" },
24
+ { code: "BE", name: "Belgium", flag: "๐Ÿ‡ง๐Ÿ‡ช" },
25
+ { code: "BF", name: "Burkina Faso", flag: "๐Ÿ‡ง๐Ÿ‡ซ" },
26
+ { code: "BG", name: "Bulgaria", flag: "๐Ÿ‡ง๐Ÿ‡ฌ" },
27
+ { code: "BH", name: "Bahrain", flag: "๐Ÿ‡ง๐Ÿ‡ญ" },
28
+ { code: "BI", name: "Burundi", flag: "๐Ÿ‡ง๐Ÿ‡ฎ" },
29
+ { code: "BJ", name: "Benin", flag: "๐Ÿ‡ง๐Ÿ‡ฏ" },
30
+ { code: "BL", name: "St. Barthรฉlemy", flag: "๐Ÿ‡ง๐Ÿ‡ฑ" },
31
+ { code: "BM", name: "Bermuda", flag: "๐Ÿ‡ง๐Ÿ‡ฒ" },
32
+ { code: "BN", name: "Brunei", flag: "๐Ÿ‡ง๐Ÿ‡ณ" },
33
+ { code: "BO", name: "Bolivia", flag: "๐Ÿ‡ง๐Ÿ‡ด" },
34
+ { code: "BQ", name: "Caribbean Netherlands", flag: "๐Ÿ‡ง๐Ÿ‡ถ" },
35
+ { code: "BR", name: "Brazil", flag: "๐Ÿ‡ง๐Ÿ‡ท" },
36
+ { code: "BS", name: "Bahamas", flag: "๐Ÿ‡ง๐Ÿ‡ธ" },
37
+ { code: "BT", name: "Bhutan", flag: "๐Ÿ‡ง๐Ÿ‡น" },
38
+ { code: "BV", name: "Bouvet Island", flag: "๐Ÿ‡ง๐Ÿ‡ป" },
39
+ { code: "BW", name: "Botswana", flag: "๐Ÿ‡ง๐Ÿ‡ผ" },
40
+ { code: "BY", name: "Belarus", flag: "๐Ÿ‡ง๐Ÿ‡พ" },
41
+ { code: "BZ", name: "Belize", flag: "๐Ÿ‡ง๐Ÿ‡ฟ" },
42
+ { code: "CA", name: "Canada", flag: "๐Ÿ‡จ๐Ÿ‡ฆ" },
43
+ { code: "CC", name: "Cocos (Keeling) Islands", flag: "๐Ÿ‡จ๐Ÿ‡จ" },
44
+ { code: "CD", name: "Congo - Kinshasa", flag: "๐Ÿ‡จ๐Ÿ‡ฉ" },
45
+ { code: "CF", name: "Central African Republic", flag: "๐Ÿ‡จ๐Ÿ‡ซ" },
46
+ { code: "CG", name: "Congo - Brazzaville", flag: "๐Ÿ‡จ๐Ÿ‡ฌ" },
47
+ { code: "CH", name: "Switzerland", flag: "๐Ÿ‡จ๐Ÿ‡ญ" },
48
+ { code: "CI", name: "Cรดte dโ€™Ivoire", flag: "๐Ÿ‡จ๐Ÿ‡ฎ" },
49
+ { code: "CK", name: "Cook Islands", flag: "๐Ÿ‡จ๐Ÿ‡ฐ" },
50
+ { code: "CL", name: "Chile", flag: "๐Ÿ‡จ๐Ÿ‡ฑ" },
51
+ { code: "CM", name: "Cameroon", flag: "๐Ÿ‡จ๐Ÿ‡ฒ" },
52
+ { code: "CN", name: "China", flag: "๐Ÿ‡จ๐Ÿ‡ณ" },
53
+ { code: "CO", name: "Colombia", flag: "๐Ÿ‡จ๐Ÿ‡ด" },
54
+ { code: "CR", name: "Costa Rica", flag: "๐Ÿ‡จ๐Ÿ‡ท" },
55
+ { code: "CU", name: "Cuba", flag: "๐Ÿ‡จ๐Ÿ‡บ" },
56
+ { code: "CV", name: "Cape Verde", flag: "๐Ÿ‡จ๐Ÿ‡ป" },
57
+ { code: "CW", name: "Curaรงao", flag: "๐Ÿ‡จ๐Ÿ‡ผ" },
58
+ { code: "CX", name: "Christmas Island", flag: "๐Ÿ‡จ๐Ÿ‡ฝ" },
59
+ { code: "CY", name: "Cyprus", flag: "๐Ÿ‡จ๐Ÿ‡พ" },
60
+ { code: "CZ", name: "Czechia", flag: "๐Ÿ‡จ๐Ÿ‡ฟ" },
61
+ { code: "DE", name: "Germany", flag: "๐Ÿ‡ฉ๐Ÿ‡ช" },
62
+ { code: "DJ", name: "Djibouti", flag: "๐Ÿ‡ฉ๐Ÿ‡ฏ" },
63
+ { code: "DK", name: "Denmark", flag: "๐Ÿ‡ฉ๐Ÿ‡ฐ" },
64
+ { code: "DM", name: "Dominica", flag: "๐Ÿ‡ฉ๐Ÿ‡ฒ" },
65
+ { code: "DO", name: "Dominican Republic", flag: "๐Ÿ‡ฉ๐Ÿ‡ด" },
66
+ { code: "DZ", name: "Algeria", flag: "๐Ÿ‡ฉ๐Ÿ‡ฟ" },
67
+ { code: "EC", name: "Ecuador", flag: "๐Ÿ‡ช๐Ÿ‡จ" },
68
+ { code: "EE", name: "Estonia", flag: "๐Ÿ‡ช๐Ÿ‡ช" },
69
+ { code: "EG", name: "Egypt", flag: "๐Ÿ‡ช๐Ÿ‡ฌ" },
70
+ { code: "EH", name: "Western Sahara", flag: "๐Ÿ‡ช๐Ÿ‡ญ" },
71
+ { code: "ER", name: "Eritrea", flag: "๐Ÿ‡ช๐Ÿ‡ท" },
72
+ { code: "ES", name: "Spain", flag: "๐Ÿ‡ช๐Ÿ‡ธ" },
73
+ { code: "ET", name: "Ethiopia", flag: "๐Ÿ‡ช๐Ÿ‡น" },
74
+ { code: "FI", name: "Finland", flag: "๐Ÿ‡ซ๐Ÿ‡ฎ" },
75
+ { code: "FJ", name: "Fiji", flag: "๐Ÿ‡ซ๐Ÿ‡ฏ" },
76
+ { code: "FK", name: "Falkland Islands", flag: "๐Ÿ‡ซ๐Ÿ‡ฐ" },
77
+ { code: "FM", name: "Micronesia", flag: "๐Ÿ‡ซ๐Ÿ‡ฒ" },
78
+ { code: "FO", name: "Faroe Islands", flag: "๐Ÿ‡ซ๐Ÿ‡ด" },
79
+ { code: "FR", name: "France", flag: "๐Ÿ‡ซ๐Ÿ‡ท" },
80
+ { code: "GA", name: "Gabon", flag: "๐Ÿ‡ฌ๐Ÿ‡ฆ" },
81
+ { code: "GB", name: "United Kingdom", flag: "๐Ÿ‡ฌ๐Ÿ‡ง" },
82
+ { code: "GD", name: "Grenada", flag: "๐Ÿ‡ฌ๐Ÿ‡ฉ" },
83
+ { code: "GE", name: "Georgia", flag: "๐Ÿ‡ฌ๐Ÿ‡ช" },
84
+ { code: "GF", name: "French Guiana", flag: "๐Ÿ‡ฌ๐Ÿ‡ซ" },
85
+ { code: "GG", name: "Guernsey", flag: "๐Ÿ‡ฌ๐Ÿ‡ฌ" },
86
+ { code: "GH", name: "Ghana", flag: "๐Ÿ‡ฌ๐Ÿ‡ญ" },
87
+ { code: "GI", name: "Gibraltar", flag: "๐Ÿ‡ฌ๐Ÿ‡ฎ" },
88
+ { code: "GL", name: "Greenland", flag: "๐Ÿ‡ฌ๐Ÿ‡ฑ" },
89
+ { code: "GM", name: "Gambia", flag: "๐Ÿ‡ฌ๐Ÿ‡ฒ" },
90
+ { code: "GN", name: "Guinea", flag: "๐Ÿ‡ฌ๐Ÿ‡ณ" },
91
+ { code: "GP", name: "Guadeloupe", flag: "๐Ÿ‡ฌ๐Ÿ‡ต" },
92
+ { code: "GQ", name: "Equatorial Guinea", flag: "๐Ÿ‡ฌ๐Ÿ‡ถ" },
93
+ { code: "GR", name: "Greece", flag: "๐Ÿ‡ฌ๐Ÿ‡ท" },
94
+ { code: "GS", name: "South Georgia & South Sandwich Islands", flag: "๐Ÿ‡ฌ๐Ÿ‡ธ" },
95
+ { code: "GT", name: "Guatemala", flag: "๐Ÿ‡ฌ๐Ÿ‡น" },
96
+ { code: "GU", name: "Guam", flag: "๐Ÿ‡ฌ๐Ÿ‡บ" },
97
+ { code: "GW", name: "Guinea-Bissau", flag: "๐Ÿ‡ฌ๐Ÿ‡ผ" },
98
+ { code: "GY", name: "Guyana", flag: "๐Ÿ‡ฌ๐Ÿ‡พ" },
99
+ { code: "HK", name: "Hong Kong SAR China", flag: "๐Ÿ‡ญ๐Ÿ‡ฐ" },
100
+ { code: "HM", name: "Heard & McDonald Islands", flag: "๐Ÿ‡ญ๐Ÿ‡ฒ" },
101
+ { code: "HN", name: "Honduras", flag: "๐Ÿ‡ญ๐Ÿ‡ณ" },
102
+ { code: "HR", name: "Croatia", flag: "๐Ÿ‡ญ๐Ÿ‡ท" },
103
+ { code: "HT", name: "Haiti", flag: "๐Ÿ‡ญ๐Ÿ‡น" },
104
+ { code: "HU", name: "Hungary", flag: "๐Ÿ‡ญ๐Ÿ‡บ" },
105
+ { code: "ID", name: "Indonesia", flag: "๐Ÿ‡ฎ๐Ÿ‡ฉ" },
106
+ { code: "IE", name: "Ireland", flag: "๐Ÿ‡ฎ๐Ÿ‡ช" },
107
+ { code: "IL", name: "Israel", flag: "๐Ÿ‡ฎ๐Ÿ‡ฑ" },
108
+ { code: "IM", name: "Isle of Man", flag: "๐Ÿ‡ฎ๐Ÿ‡ฒ" },
109
+ { code: "IN", name: "India", flag: "๐Ÿ‡ฎ๐Ÿ‡ณ" },
110
+ { code: "IO", name: "British Indian Ocean Territory", flag: "๐Ÿ‡ฎ๐Ÿ‡ด" },
111
+ { code: "IQ", name: "Iraq", flag: "๐Ÿ‡ฎ๐Ÿ‡ถ" },
112
+ { code: "IR", name: "Iran", flag: "๐Ÿ‡ฎ๐Ÿ‡ท" },
113
+ { code: "IS", name: "Iceland", flag: "๐Ÿ‡ฎ๐Ÿ‡ธ" },
114
+ { code: "IT", name: "Italy", flag: "๐Ÿ‡ฎ๐Ÿ‡น" },
115
+ { code: "JE", name: "Jersey", flag: "๐Ÿ‡ฏ๐Ÿ‡ช" },
116
+ { code: "JM", name: "Jamaica", flag: "๐Ÿ‡ฏ๐Ÿ‡ฒ" },
117
+ { code: "JO", name: "Jordan", flag: "๐Ÿ‡ฏ๐Ÿ‡ด" },
118
+ { code: "JP", name: "Japan", flag: "๐Ÿ‡ฏ๐Ÿ‡ต" },
119
+ { code: "KE", name: "Kenya", flag: "๐Ÿ‡ฐ๐Ÿ‡ช" },
120
+ { code: "KG", name: "Kyrgyzstan", flag: "๐Ÿ‡ฐ๐Ÿ‡ฌ" },
121
+ { code: "KH", name: "Cambodia", flag: "๐Ÿ‡ฐ๐Ÿ‡ญ" },
122
+ { code: "KI", name: "Kiribati", flag: "๐Ÿ‡ฐ๐Ÿ‡ฎ" },
123
+ { code: "KM", name: "Comoros", flag: "๐Ÿ‡ฐ๐Ÿ‡ฒ" },
124
+ { code: "KN", name: "St. Kitts & Nevis", flag: "๐Ÿ‡ฐ๐Ÿ‡ณ" },
125
+ { code: "KP", name: "North Korea", flag: "๐Ÿ‡ฐ๐Ÿ‡ต" },
126
+ { code: "KR", name: "South Korea", flag: "๐Ÿ‡ฐ๐Ÿ‡ท" },
127
+ { code: "KW", name: "Kuwait", flag: "๐Ÿ‡ฐ๐Ÿ‡ผ" },
128
+ { code: "KY", name: "Cayman Islands", flag: "๐Ÿ‡ฐ๐Ÿ‡พ" },
129
+ { code: "KZ", name: "Kazakhstan", flag: "๐Ÿ‡ฐ๐Ÿ‡ฟ" },
130
+ { code: "LA", name: "Laos", flag: "๐Ÿ‡ฑ๐Ÿ‡ฆ" },
131
+ { code: "LB", name: "Lebanon", flag: "๐Ÿ‡ฑ๐Ÿ‡ง" },
132
+ { code: "LC", name: "St. Lucia", flag: "๐Ÿ‡ฑ๐Ÿ‡จ" },
133
+ { code: "LI", name: "Liechtenstein", flag: "๐Ÿ‡ฑ๐Ÿ‡ฎ" },
134
+ { code: "LK", name: "Sri Lanka", flag: "๐Ÿ‡ฑ๐Ÿ‡ฐ" },
135
+ { code: "LR", name: "Liberia", flag: "๐Ÿ‡ฑ๐Ÿ‡ท" },
136
+ { code: "LS", name: "Lesotho", flag: "๐Ÿ‡ฑ๐Ÿ‡ธ" },
137
+ { code: "LT", name: "Lithuania", flag: "๐Ÿ‡ฑ๐Ÿ‡น" },
138
+ { code: "LU", name: "Luxembourg", flag: "๐Ÿ‡ฑ๐Ÿ‡บ" },
139
+ { code: "LV", name: "Latvia", flag: "๐Ÿ‡ฑ๐Ÿ‡ป" },
140
+ { code: "LY", name: "Libya", flag: "๐Ÿ‡ฑ๐Ÿ‡พ" },
141
+ { code: "MA", name: "Morocco", flag: "๐Ÿ‡ฒ๐Ÿ‡ฆ" },
142
+ { code: "MC", name: "Monaco", flag: "๐Ÿ‡ฒ๐Ÿ‡จ" },
143
+ { code: "MD", name: "Moldova", flag: "๐Ÿ‡ฒ๐Ÿ‡ฉ" },
144
+ { code: "ME", name: "Montenegro", flag: "๐Ÿ‡ฒ๐Ÿ‡ช" },
145
+ { code: "MF", name: "St. Martin", flag: "๐Ÿ‡ฒ๐Ÿ‡ซ" },
146
+ { code: "MG", name: "Madagascar", flag: "๐Ÿ‡ฒ๐Ÿ‡ฌ" },
147
+ { code: "MH", name: "Marshall Islands", flag: "๐Ÿ‡ฒ๐Ÿ‡ญ" },
148
+ { code: "MK", name: "North Macedonia", flag: "๐Ÿ‡ฒ๐Ÿ‡ฐ" },
149
+ { code: "ML", name: "Mali", flag: "๐Ÿ‡ฒ๐Ÿ‡ฑ" },
150
+ { code: "MM", name: "Myanmar (Burma)", flag: "๐Ÿ‡ฒ๐Ÿ‡ฒ" },
151
+ { code: "MN", name: "Mongolia", flag: "๐Ÿ‡ฒ๐Ÿ‡ณ" },
152
+ { code: "MO", name: "Macao SAR China", flag: "๐Ÿ‡ฒ๐Ÿ‡ด" },
153
+ { code: "MP", name: "Northern Mariana Islands", flag: "๐Ÿ‡ฒ๐Ÿ‡ต" },
154
+ { code: "MQ", name: "Martinique", flag: "๐Ÿ‡ฒ๐Ÿ‡ถ" },
155
+ { code: "MR", name: "Mauritania", flag: "๐Ÿ‡ฒ๐Ÿ‡ท" },
156
+ { code: "MS", name: "Montserrat", flag: "๐Ÿ‡ฒ๐Ÿ‡ธ" },
157
+ { code: "MT", name: "Malta", flag: "๐Ÿ‡ฒ๐Ÿ‡น" },
158
+ { code: "MU", name: "Mauritius", flag: "๐Ÿ‡ฒ๐Ÿ‡บ" },
159
+ { code: "MV", name: "Maldives", flag: "๐Ÿ‡ฒ๐Ÿ‡ป" },
160
+ { code: "MW", name: "Malawi", flag: "๐Ÿ‡ฒ๐Ÿ‡ผ" },
161
+ { code: "MX", name: "Mexico", flag: "๐Ÿ‡ฒ๐Ÿ‡ฝ" },
162
+ { code: "MY", name: "Malaysia", flag: "๐Ÿ‡ฒ๐Ÿ‡พ" },
163
+ { code: "MZ", name: "Mozambique", flag: "๐Ÿ‡ฒ๐Ÿ‡ฟ" },
164
+ { code: "NA", name: "Namibia", flag: "๐Ÿ‡ณ๐Ÿ‡ฆ" },
165
+ { code: "NC", name: "New Caledonia", flag: "๐Ÿ‡ณ๐Ÿ‡จ" },
166
+ { code: "NE", name: "Niger", flag: "๐Ÿ‡ณ๐Ÿ‡ช" },
167
+ { code: "NF", name: "Norfolk Island", flag: "๐Ÿ‡ณ๐Ÿ‡ซ" },
168
+ { code: "NG", name: "Nigeria", flag: "๐Ÿ‡ณ๐Ÿ‡ฌ" },
169
+ { code: "NI", name: "Nicaragua", flag: "๐Ÿ‡ณ๐Ÿ‡ฎ" },
170
+ { code: "NL", name: "Netherlands", flag: "๐Ÿ‡ณ๐Ÿ‡ฑ" },
171
+ { code: "NO", name: "Norway", flag: "๐Ÿ‡ณ๐Ÿ‡ด" },
172
+ { code: "NP", name: "Nepal", flag: "๐Ÿ‡ณ๐Ÿ‡ต" },
173
+ { code: "NR", name: "Nauru", flag: "๐Ÿ‡ณ๐Ÿ‡ท" },
174
+ { code: "NU", name: "Niue", flag: "๐Ÿ‡ณ๐Ÿ‡บ" },
175
+ { code: "NZ", name: "New Zealand", flag: "๐Ÿ‡ณ๐Ÿ‡ฟ" },
176
+ { code: "OM", name: "Oman", flag: "๐Ÿ‡ด๐Ÿ‡ฒ" },
177
+ { code: "PA", name: "Panama", flag: "๐Ÿ‡ต๐Ÿ‡ฆ" },
178
+ { code: "PE", name: "Peru", flag: "๐Ÿ‡ต๐Ÿ‡ช" },
179
+ { code: "PF", name: "French Polynesia", flag: "๐Ÿ‡ต๐Ÿ‡ซ" },
180
+ { code: "PG", name: "Papua New Guinea", flag: "๐Ÿ‡ต๐Ÿ‡ฌ" },
181
+ { code: "PH", name: "Philippines", flag: "๐Ÿ‡ต๐Ÿ‡ญ" },
182
+ { code: "PK", name: "Pakistan", flag: "๐Ÿ‡ต๐Ÿ‡ฐ" },
183
+ { code: "PL", name: "Poland", flag: "๐Ÿ‡ต๐Ÿ‡ฑ" },
184
+ { code: "PM", name: "St. Pierre & Miquelon", flag: "๐Ÿ‡ต๐Ÿ‡ฒ" },
185
+ { code: "PN", name: "Pitcairn Islands", flag: "๐Ÿ‡ต๐Ÿ‡ณ" },
186
+ { code: "PR", name: "Puerto Rico", flag: "๐Ÿ‡ต๐Ÿ‡ท" },
187
+ { code: "PS", name: "Palestinian Territories", flag: "๐Ÿ‡ต๐Ÿ‡ธ" },
188
+ { code: "PT", name: "Portugal", flag: "๐Ÿ‡ต๐Ÿ‡น" },
189
+ { code: "PW", name: "Palau", flag: "๐Ÿ‡ต๐Ÿ‡ผ" },
190
+ { code: "PY", name: "Paraguay", flag: "๐Ÿ‡ต๐Ÿ‡พ" },
191
+ { code: "QA", name: "Qatar", flag: "๐Ÿ‡ถ๐Ÿ‡ฆ" },
192
+ { code: "RE", name: "Rรฉunion", flag: "๐Ÿ‡ท๐Ÿ‡ช" },
193
+ { code: "RO", name: "Romania", flag: "๐Ÿ‡ท๐Ÿ‡ด" },
194
+ { code: "RS", name: "Serbia", flag: "๐Ÿ‡ท๐Ÿ‡ธ" },
195
+ { code: "RU", name: "Russia", flag: "๐Ÿ‡ท๐Ÿ‡บ" },
196
+ { code: "RW", name: "Rwanda", flag: "๐Ÿ‡ท๐Ÿ‡ผ" },
197
+ { code: "SA", name: "Saudi Arabia", flag: "๐Ÿ‡ธ๐Ÿ‡ฆ" },
198
+ { code: "SB", name: "Solomon Islands", flag: "๐Ÿ‡ธ๐Ÿ‡ง" },
199
+ { code: "SC", name: "Seychelles", flag: "๐Ÿ‡ธ๐Ÿ‡จ" },
200
+ { code: "SD", name: "Sudan", flag: "๐Ÿ‡ธ๐Ÿ‡ฉ" },
201
+ { code: "SE", name: "Sweden", flag: "๐Ÿ‡ธ๐Ÿ‡ช" },
202
+ { code: "SG", name: "Singapore", flag: "๐Ÿ‡ธ๐Ÿ‡ฌ" },
203
+ { code: "SH", name: "St. Helena", flag: "๐Ÿ‡ธ๐Ÿ‡ญ" },
204
+ { code: "SI", name: "Slovenia", flag: "๐Ÿ‡ธ๐Ÿ‡ฎ" },
205
+ { code: "SJ", name: "Svalbard & Jan Mayen", flag: "๐Ÿ‡ธ๐Ÿ‡ฏ" },
206
+ { code: "SK", name: "Slovakia", flag: "๐Ÿ‡ธ๐Ÿ‡ฐ" },
207
+ { code: "SL", name: "Sierra Leone", flag: "๐Ÿ‡ธ๐Ÿ‡ฑ" },
208
+ { code: "SM", name: "San Marino", flag: "๐Ÿ‡ธ๐Ÿ‡ฒ" },
209
+ { code: "SN", name: "Senegal", flag: "๐Ÿ‡ธ๐Ÿ‡ณ" },
210
+ { code: "SO", name: "Somalia", flag: "๐Ÿ‡ธ๐Ÿ‡ด" },
211
+ { code: "SR", name: "Suriname", flag: "๐Ÿ‡ธ๐Ÿ‡ท" },
212
+ { code: "SS", name: "South Sudan", flag: "๐Ÿ‡ธ๐Ÿ‡ธ" },
213
+ { code: "ST", name: "Sรฃo Tomรฉ & Prรญncipe", flag: "๐Ÿ‡ธ๐Ÿ‡น" },
214
+ { code: "SV", name: "El Salvador", flag: "๐Ÿ‡ธ๐Ÿ‡ป" },
215
+ { code: "SX", name: "Sint Maarten", flag: "๐Ÿ‡ธ๐Ÿ‡ฝ" },
216
+ { code: "SY", name: "Syria", flag: "๐Ÿ‡ธ๐Ÿ‡พ" },
217
+ { code: "SZ", name: "Eswatini", flag: "๐Ÿ‡ธ๐Ÿ‡ฟ" },
218
+ { code: "TC", name: "Turks & Caicos Islands", flag: "๐Ÿ‡น๐Ÿ‡จ" },
219
+ { code: "TD", name: "Chad", flag: "๐Ÿ‡น๐Ÿ‡ฉ" },
220
+ { code: "TF", name: "French Southern Territories", flag: "๐Ÿ‡น๐Ÿ‡ซ" },
221
+ { code: "TG", name: "Togo", flag: "๐Ÿ‡น๐Ÿ‡ฌ" },
222
+ { code: "TH", name: "Thailand", flag: "๐Ÿ‡น๐Ÿ‡ญ" },
223
+ { code: "TJ", name: "Tajikistan", flag: "๐Ÿ‡น๐Ÿ‡ฏ" },
224
+ { code: "TK", name: "Tokelau", flag: "๐Ÿ‡น๐Ÿ‡ฐ" },
225
+ { code: "TL", name: "Timor-Leste", flag: "๐Ÿ‡น๐Ÿ‡ฑ" },
226
+ { code: "TM", name: "Turkmenistan", flag: "๐Ÿ‡น๐Ÿ‡ฒ" },
227
+ { code: "TN", name: "Tunisia", flag: "๐Ÿ‡น๐Ÿ‡ณ" },
228
+ { code: "TO", name: "Tonga", flag: "๐Ÿ‡น๐Ÿ‡ด" },
229
+ { code: "TR", name: "Tรผrkiye", flag: "๐Ÿ‡น๐Ÿ‡ท" },
230
+ { code: "TT", name: "Trinidad & Tobago", flag: "๐Ÿ‡น๐Ÿ‡น" },
231
+ { code: "TV", name: "Tuvalu", flag: "๐Ÿ‡น๐Ÿ‡ป" },
232
+ { code: "TW", name: "Taiwan", flag: "๐Ÿ‡น๐Ÿ‡ผ" },
233
+ { code: "TZ", name: "Tanzania", flag: "๐Ÿ‡น๐Ÿ‡ฟ" },
234
+ { code: "UA", name: "Ukraine", flag: "๐Ÿ‡บ๐Ÿ‡ฆ" },
235
+ { code: "UG", name: "Uganda", flag: "๐Ÿ‡บ๐Ÿ‡ฌ" },
236
+ { code: "UM", name: "U.S. Outlying Islands", flag: "๐Ÿ‡บ๐Ÿ‡ฒ" },
237
+ { code: "US", name: "United States", flag: "๐Ÿ‡บ๐Ÿ‡ธ" },
238
+ { code: "UY", name: "Uruguay", flag: "๐Ÿ‡บ๐Ÿ‡พ" },
239
+ { code: "UZ", name: "Uzbekistan", flag: "๐Ÿ‡บ๐Ÿ‡ฟ" },
240
+ { code: "VA", name: "Vatican City", flag: "๐Ÿ‡ป๐Ÿ‡ฆ" },
241
+ { code: "VC", name: "St. Vincent & Grenadines", flag: "๐Ÿ‡ป๐Ÿ‡จ" },
242
+ { code: "VE", name: "Venezuela", flag: "๐Ÿ‡ป๐Ÿ‡ช" },
243
+ { code: "VG", name: "British Virgin Islands", flag: "๐Ÿ‡ป๐Ÿ‡ฌ" },
244
+ { code: "VI", name: "U.S. Virgin Islands", flag: "๐Ÿ‡ป๐Ÿ‡ฎ" },
245
+ { code: "VN", name: "Vietnam", flag: "๐Ÿ‡ป๐Ÿ‡ณ" },
246
+ { code: "VU", name: "Vanuatu", flag: "๐Ÿ‡ป๐Ÿ‡บ" },
247
+ { code: "WF", name: "Wallis & Futuna", flag: "๐Ÿ‡ผ๐Ÿ‡ซ" },
248
+ { code: "WS", name: "Samoa", flag: "๐Ÿ‡ผ๐Ÿ‡ธ" },
249
+ { code: "YE", name: "Yemen", flag: "๐Ÿ‡พ๐Ÿ‡ช" },
250
+ { code: "YT", name: "Mayotte", flag: "๐Ÿ‡พ๐Ÿ‡น" },
251
+ { code: "ZA", name: "South Africa", flag: "๐Ÿ‡ฟ๐Ÿ‡ฆ" },
252
+ { code: "ZM", name: "Zambia", flag: "๐Ÿ‡ฟ๐Ÿ‡ฒ" },
253
+ { code: "ZW", name: "Zimbabwe", flag: "๐Ÿ‡ฟ๐Ÿ‡ผ" },
254
+ ];
@@ -0,0 +1,26 @@
1
+ import { countries } from "./data.js";
2
+ import type { Country } from "./types.js";
3
+ export type { Country };
4
+ export { countries };
5
+ /** Get a country by its ISO 3166-1 alpha-2 code (case-insensitive). */
6
+ export declare function getCountryByCode(code: string): Country | undefined;
7
+ /** Get a country by its exact English name (case-insensitive). */
8
+ export declare function getCountryByName(name: string): Country | undefined;
9
+ /** Get a country by its flag emoji, e.g. "๐Ÿ‡ฎ๐Ÿ‡ณ" โ†’ India. */
10
+ export declare function getCountryByFlag(flag: string): Country | undefined;
11
+ /** Get just the flag emoji for a code. Returns undefined for unknown codes. */
12
+ export declare function getFlag(code: string): string | undefined;
13
+ /** Get just the English name for a code. Returns undefined for unknown codes. */
14
+ export declare function getName(code: string): string | undefined;
15
+ /** Check whether a string is a valid ISO 3166-1 alpha-2 code. */
16
+ export declare function isValidCode(code: string): boolean;
17
+ /**
18
+ * Search countries by partial, case-insensitive match on name or code.
19
+ * Results are ranked: exact code/name match first, then prefix matches,
20
+ * then substring matches.
21
+ */
22
+ export declare function searchCountries(query: string): Country[];
23
+ /** Convert an alpha-2 code to its flag emoji without a lookup, e.g. "JP" โ†’ "๐Ÿ‡ฏ๐Ÿ‡ต". */
24
+ export declare function codeToFlag(code: string): string;
25
+ /** Convert a flag emoji back to its alpha-2 code, e.g. "๐Ÿ‡ฏ๐Ÿ‡ต" โ†’ "JP". */
26
+ export declare function flagToCode(flag: string): string | undefined;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.countries = void 0;
4
+ exports.getCountryByCode = getCountryByCode;
5
+ exports.getCountryByName = getCountryByName;
6
+ exports.getCountryByFlag = getCountryByFlag;
7
+ exports.getFlag = getFlag;
8
+ exports.getName = getName;
9
+ exports.isValidCode = isValidCode;
10
+ exports.searchCountries = searchCountries;
11
+ exports.codeToFlag = codeToFlag;
12
+ exports.flagToCode = flagToCode;
13
+ const data_js_1 = require("./data.js");
14
+ Object.defineProperty(exports, "countries", { enumerable: true, get: function () { return data_js_1.countries; } });
15
+ const byCode = new Map(data_js_1.countries.map((c) => [c.code, c]));
16
+ const byName = new Map(data_js_1.countries.map((c) => [c.name.toLowerCase(), c]));
17
+ /** Get a country by its ISO 3166-1 alpha-2 code (case-insensitive). */
18
+ function getCountryByCode(code) {
19
+ return byCode.get(code.trim().toUpperCase());
20
+ }
21
+ /** Get a country by its exact English name (case-insensitive). */
22
+ function getCountryByName(name) {
23
+ return byName.get(name.trim().toLowerCase());
24
+ }
25
+ /** Get a country by its flag emoji, e.g. "๐Ÿ‡ฎ๐Ÿ‡ณ" โ†’ India. */
26
+ function getCountryByFlag(flag) {
27
+ const code = flagToCode(flag.trim());
28
+ return code ? byCode.get(code) : undefined;
29
+ }
30
+ /** Get just the flag emoji for a code. Returns undefined for unknown codes. */
31
+ function getFlag(code) {
32
+ return getCountryByCode(code)?.flag;
33
+ }
34
+ /** Get just the English name for a code. Returns undefined for unknown codes. */
35
+ function getName(code) {
36
+ return getCountryByCode(code)?.name;
37
+ }
38
+ /** Check whether a string is a valid ISO 3166-1 alpha-2 code. */
39
+ function isValidCode(code) {
40
+ return byCode.has(code.trim().toUpperCase());
41
+ }
42
+ /**
43
+ * Search countries by partial, case-insensitive match on name or code.
44
+ * Results are ranked: exact code/name match first, then prefix matches,
45
+ * then substring matches.
46
+ */
47
+ function searchCountries(query) {
48
+ const q = query.trim().toLowerCase();
49
+ if (!q)
50
+ return [];
51
+ const exact = [];
52
+ const prefix = [];
53
+ const partial = [];
54
+ for (const c of data_js_1.countries) {
55
+ const name = c.name.toLowerCase();
56
+ const code = c.code.toLowerCase();
57
+ if (name === q || code === q)
58
+ exact.push(c);
59
+ else if (name.startsWith(q) || code.startsWith(q))
60
+ prefix.push(c);
61
+ else if (name.includes(q))
62
+ partial.push(c);
63
+ }
64
+ return [...exact, ...prefix, ...partial];
65
+ }
66
+ /** Convert an alpha-2 code to its flag emoji without a lookup, e.g. "JP" โ†’ "๐Ÿ‡ฏ๐Ÿ‡ต". */
67
+ function codeToFlag(code) {
68
+ const c = code.trim().toUpperCase();
69
+ if (!/^[A-Z]{2}$/.test(c)) {
70
+ throw new Error(`Invalid alpha-2 code: "${code}"`);
71
+ }
72
+ return String.fromCodePoint(...[...c].map((ch) => 0x1f1e6 + ch.charCodeAt(0) - 65));
73
+ }
74
+ /** Convert a flag emoji back to its alpha-2 code, e.g. "๐Ÿ‡ฏ๐Ÿ‡ต" โ†’ "JP". */
75
+ function flagToCode(flag) {
76
+ const points = [...flag].map((ch) => ch.codePointAt(0));
77
+ if (points.length !== 2 ||
78
+ points.some((p) => p < 0x1f1e6 || p > 0x1f1ff)) {
79
+ return undefined;
80
+ }
81
+ return points.map((p) => String.fromCharCode(p - 0x1f1e6 + 65)).join("");
82
+ }
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,9 @@
1
+ /** A single country entry. */
2
+ export interface Country {
3
+ /** ISO 3166-1 alpha-2 code, e.g. "IN" */
4
+ code: string;
5
+ /** English short name, e.g. "India" */
6
+ name: string;
7
+ /** Flag emoji, e.g. "๐Ÿ‡ฎ๐Ÿ‡ณ" */
8
+ flag: string;
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import type { Country } from "./types.js";
2
+ export declare const countries: readonly Country[];
@@ -0,0 +1,251 @@
1
+ export const countries = [
2
+ { code: "AD", name: "Andorra", flag: "๐Ÿ‡ฆ๐Ÿ‡ฉ" },
3
+ { code: "AE", name: "United Arab Emirates", flag: "๐Ÿ‡ฆ๐Ÿ‡ช" },
4
+ { code: "AF", name: "Afghanistan", flag: "๐Ÿ‡ฆ๐Ÿ‡ซ" },
5
+ { code: "AG", name: "Antigua & Barbuda", flag: "๐Ÿ‡ฆ๐Ÿ‡ฌ" },
6
+ { code: "AI", name: "Anguilla", flag: "๐Ÿ‡ฆ๐Ÿ‡ฎ" },
7
+ { code: "AL", name: "Albania", flag: "๐Ÿ‡ฆ๐Ÿ‡ฑ" },
8
+ { code: "AM", name: "Armenia", flag: "๐Ÿ‡ฆ๐Ÿ‡ฒ" },
9
+ { code: "AO", name: "Angola", flag: "๐Ÿ‡ฆ๐Ÿ‡ด" },
10
+ { code: "AQ", name: "Antarctica", flag: "๐Ÿ‡ฆ๐Ÿ‡ถ" },
11
+ { code: "AR", name: "Argentina", flag: "๐Ÿ‡ฆ๐Ÿ‡ท" },
12
+ { code: "AS", name: "American Samoa", flag: "๐Ÿ‡ฆ๐Ÿ‡ธ" },
13
+ { code: "AT", name: "Austria", flag: "๐Ÿ‡ฆ๐Ÿ‡น" },
14
+ { code: "AU", name: "Australia", flag: "๐Ÿ‡ฆ๐Ÿ‡บ" },
15
+ { code: "AW", name: "Aruba", flag: "๐Ÿ‡ฆ๐Ÿ‡ผ" },
16
+ { code: "AX", name: "ร…land Islands", flag: "๐Ÿ‡ฆ๐Ÿ‡ฝ" },
17
+ { code: "AZ", name: "Azerbaijan", flag: "๐Ÿ‡ฆ๐Ÿ‡ฟ" },
18
+ { code: "BA", name: "Bosnia & Herzegovina", flag: "๐Ÿ‡ง๐Ÿ‡ฆ" },
19
+ { code: "BB", name: "Barbados", flag: "๐Ÿ‡ง๐Ÿ‡ง" },
20
+ { code: "BD", name: "Bangladesh", flag: "๐Ÿ‡ง๐Ÿ‡ฉ" },
21
+ { code: "BE", name: "Belgium", flag: "๐Ÿ‡ง๐Ÿ‡ช" },
22
+ { code: "BF", name: "Burkina Faso", flag: "๐Ÿ‡ง๐Ÿ‡ซ" },
23
+ { code: "BG", name: "Bulgaria", flag: "๐Ÿ‡ง๐Ÿ‡ฌ" },
24
+ { code: "BH", name: "Bahrain", flag: "๐Ÿ‡ง๐Ÿ‡ญ" },
25
+ { code: "BI", name: "Burundi", flag: "๐Ÿ‡ง๐Ÿ‡ฎ" },
26
+ { code: "BJ", name: "Benin", flag: "๐Ÿ‡ง๐Ÿ‡ฏ" },
27
+ { code: "BL", name: "St. Barthรฉlemy", flag: "๐Ÿ‡ง๐Ÿ‡ฑ" },
28
+ { code: "BM", name: "Bermuda", flag: "๐Ÿ‡ง๐Ÿ‡ฒ" },
29
+ { code: "BN", name: "Brunei", flag: "๐Ÿ‡ง๐Ÿ‡ณ" },
30
+ { code: "BO", name: "Bolivia", flag: "๐Ÿ‡ง๐Ÿ‡ด" },
31
+ { code: "BQ", name: "Caribbean Netherlands", flag: "๐Ÿ‡ง๐Ÿ‡ถ" },
32
+ { code: "BR", name: "Brazil", flag: "๐Ÿ‡ง๐Ÿ‡ท" },
33
+ { code: "BS", name: "Bahamas", flag: "๐Ÿ‡ง๐Ÿ‡ธ" },
34
+ { code: "BT", name: "Bhutan", flag: "๐Ÿ‡ง๐Ÿ‡น" },
35
+ { code: "BV", name: "Bouvet Island", flag: "๐Ÿ‡ง๐Ÿ‡ป" },
36
+ { code: "BW", name: "Botswana", flag: "๐Ÿ‡ง๐Ÿ‡ผ" },
37
+ { code: "BY", name: "Belarus", flag: "๐Ÿ‡ง๐Ÿ‡พ" },
38
+ { code: "BZ", name: "Belize", flag: "๐Ÿ‡ง๐Ÿ‡ฟ" },
39
+ { code: "CA", name: "Canada", flag: "๐Ÿ‡จ๐Ÿ‡ฆ" },
40
+ { code: "CC", name: "Cocos (Keeling) Islands", flag: "๐Ÿ‡จ๐Ÿ‡จ" },
41
+ { code: "CD", name: "Congo - Kinshasa", flag: "๐Ÿ‡จ๐Ÿ‡ฉ" },
42
+ { code: "CF", name: "Central African Republic", flag: "๐Ÿ‡จ๐Ÿ‡ซ" },
43
+ { code: "CG", name: "Congo - Brazzaville", flag: "๐Ÿ‡จ๐Ÿ‡ฌ" },
44
+ { code: "CH", name: "Switzerland", flag: "๐Ÿ‡จ๐Ÿ‡ญ" },
45
+ { code: "CI", name: "Cรดte dโ€™Ivoire", flag: "๐Ÿ‡จ๐Ÿ‡ฎ" },
46
+ { code: "CK", name: "Cook Islands", flag: "๐Ÿ‡จ๐Ÿ‡ฐ" },
47
+ { code: "CL", name: "Chile", flag: "๐Ÿ‡จ๐Ÿ‡ฑ" },
48
+ { code: "CM", name: "Cameroon", flag: "๐Ÿ‡จ๐Ÿ‡ฒ" },
49
+ { code: "CN", name: "China", flag: "๐Ÿ‡จ๐Ÿ‡ณ" },
50
+ { code: "CO", name: "Colombia", flag: "๐Ÿ‡จ๐Ÿ‡ด" },
51
+ { code: "CR", name: "Costa Rica", flag: "๐Ÿ‡จ๐Ÿ‡ท" },
52
+ { code: "CU", name: "Cuba", flag: "๐Ÿ‡จ๐Ÿ‡บ" },
53
+ { code: "CV", name: "Cape Verde", flag: "๐Ÿ‡จ๐Ÿ‡ป" },
54
+ { code: "CW", name: "Curaรงao", flag: "๐Ÿ‡จ๐Ÿ‡ผ" },
55
+ { code: "CX", name: "Christmas Island", flag: "๐Ÿ‡จ๐Ÿ‡ฝ" },
56
+ { code: "CY", name: "Cyprus", flag: "๐Ÿ‡จ๐Ÿ‡พ" },
57
+ { code: "CZ", name: "Czechia", flag: "๐Ÿ‡จ๐Ÿ‡ฟ" },
58
+ { code: "DE", name: "Germany", flag: "๐Ÿ‡ฉ๐Ÿ‡ช" },
59
+ { code: "DJ", name: "Djibouti", flag: "๐Ÿ‡ฉ๐Ÿ‡ฏ" },
60
+ { code: "DK", name: "Denmark", flag: "๐Ÿ‡ฉ๐Ÿ‡ฐ" },
61
+ { code: "DM", name: "Dominica", flag: "๐Ÿ‡ฉ๐Ÿ‡ฒ" },
62
+ { code: "DO", name: "Dominican Republic", flag: "๐Ÿ‡ฉ๐Ÿ‡ด" },
63
+ { code: "DZ", name: "Algeria", flag: "๐Ÿ‡ฉ๐Ÿ‡ฟ" },
64
+ { code: "EC", name: "Ecuador", flag: "๐Ÿ‡ช๐Ÿ‡จ" },
65
+ { code: "EE", name: "Estonia", flag: "๐Ÿ‡ช๐Ÿ‡ช" },
66
+ { code: "EG", name: "Egypt", flag: "๐Ÿ‡ช๐Ÿ‡ฌ" },
67
+ { code: "EH", name: "Western Sahara", flag: "๐Ÿ‡ช๐Ÿ‡ญ" },
68
+ { code: "ER", name: "Eritrea", flag: "๐Ÿ‡ช๐Ÿ‡ท" },
69
+ { code: "ES", name: "Spain", flag: "๐Ÿ‡ช๐Ÿ‡ธ" },
70
+ { code: "ET", name: "Ethiopia", flag: "๐Ÿ‡ช๐Ÿ‡น" },
71
+ { code: "FI", name: "Finland", flag: "๐Ÿ‡ซ๐Ÿ‡ฎ" },
72
+ { code: "FJ", name: "Fiji", flag: "๐Ÿ‡ซ๐Ÿ‡ฏ" },
73
+ { code: "FK", name: "Falkland Islands", flag: "๐Ÿ‡ซ๐Ÿ‡ฐ" },
74
+ { code: "FM", name: "Micronesia", flag: "๐Ÿ‡ซ๐Ÿ‡ฒ" },
75
+ { code: "FO", name: "Faroe Islands", flag: "๐Ÿ‡ซ๐Ÿ‡ด" },
76
+ { code: "FR", name: "France", flag: "๐Ÿ‡ซ๐Ÿ‡ท" },
77
+ { code: "GA", name: "Gabon", flag: "๐Ÿ‡ฌ๐Ÿ‡ฆ" },
78
+ { code: "GB", name: "United Kingdom", flag: "๐Ÿ‡ฌ๐Ÿ‡ง" },
79
+ { code: "GD", name: "Grenada", flag: "๐Ÿ‡ฌ๐Ÿ‡ฉ" },
80
+ { code: "GE", name: "Georgia", flag: "๐Ÿ‡ฌ๐Ÿ‡ช" },
81
+ { code: "GF", name: "French Guiana", flag: "๐Ÿ‡ฌ๐Ÿ‡ซ" },
82
+ { code: "GG", name: "Guernsey", flag: "๐Ÿ‡ฌ๐Ÿ‡ฌ" },
83
+ { code: "GH", name: "Ghana", flag: "๐Ÿ‡ฌ๐Ÿ‡ญ" },
84
+ { code: "GI", name: "Gibraltar", flag: "๐Ÿ‡ฌ๐Ÿ‡ฎ" },
85
+ { code: "GL", name: "Greenland", flag: "๐Ÿ‡ฌ๐Ÿ‡ฑ" },
86
+ { code: "GM", name: "Gambia", flag: "๐Ÿ‡ฌ๐Ÿ‡ฒ" },
87
+ { code: "GN", name: "Guinea", flag: "๐Ÿ‡ฌ๐Ÿ‡ณ" },
88
+ { code: "GP", name: "Guadeloupe", flag: "๐Ÿ‡ฌ๐Ÿ‡ต" },
89
+ { code: "GQ", name: "Equatorial Guinea", flag: "๐Ÿ‡ฌ๐Ÿ‡ถ" },
90
+ { code: "GR", name: "Greece", flag: "๐Ÿ‡ฌ๐Ÿ‡ท" },
91
+ { code: "GS", name: "South Georgia & South Sandwich Islands", flag: "๐Ÿ‡ฌ๐Ÿ‡ธ" },
92
+ { code: "GT", name: "Guatemala", flag: "๐Ÿ‡ฌ๐Ÿ‡น" },
93
+ { code: "GU", name: "Guam", flag: "๐Ÿ‡ฌ๐Ÿ‡บ" },
94
+ { code: "GW", name: "Guinea-Bissau", flag: "๐Ÿ‡ฌ๐Ÿ‡ผ" },
95
+ { code: "GY", name: "Guyana", flag: "๐Ÿ‡ฌ๐Ÿ‡พ" },
96
+ { code: "HK", name: "Hong Kong SAR China", flag: "๐Ÿ‡ญ๐Ÿ‡ฐ" },
97
+ { code: "HM", name: "Heard & McDonald Islands", flag: "๐Ÿ‡ญ๐Ÿ‡ฒ" },
98
+ { code: "HN", name: "Honduras", flag: "๐Ÿ‡ญ๐Ÿ‡ณ" },
99
+ { code: "HR", name: "Croatia", flag: "๐Ÿ‡ญ๐Ÿ‡ท" },
100
+ { code: "HT", name: "Haiti", flag: "๐Ÿ‡ญ๐Ÿ‡น" },
101
+ { code: "HU", name: "Hungary", flag: "๐Ÿ‡ญ๐Ÿ‡บ" },
102
+ { code: "ID", name: "Indonesia", flag: "๐Ÿ‡ฎ๐Ÿ‡ฉ" },
103
+ { code: "IE", name: "Ireland", flag: "๐Ÿ‡ฎ๐Ÿ‡ช" },
104
+ { code: "IL", name: "Israel", flag: "๐Ÿ‡ฎ๐Ÿ‡ฑ" },
105
+ { code: "IM", name: "Isle of Man", flag: "๐Ÿ‡ฎ๐Ÿ‡ฒ" },
106
+ { code: "IN", name: "India", flag: "๐Ÿ‡ฎ๐Ÿ‡ณ" },
107
+ { code: "IO", name: "British Indian Ocean Territory", flag: "๐Ÿ‡ฎ๐Ÿ‡ด" },
108
+ { code: "IQ", name: "Iraq", flag: "๐Ÿ‡ฎ๐Ÿ‡ถ" },
109
+ { code: "IR", name: "Iran", flag: "๐Ÿ‡ฎ๐Ÿ‡ท" },
110
+ { code: "IS", name: "Iceland", flag: "๐Ÿ‡ฎ๐Ÿ‡ธ" },
111
+ { code: "IT", name: "Italy", flag: "๐Ÿ‡ฎ๐Ÿ‡น" },
112
+ { code: "JE", name: "Jersey", flag: "๐Ÿ‡ฏ๐Ÿ‡ช" },
113
+ { code: "JM", name: "Jamaica", flag: "๐Ÿ‡ฏ๐Ÿ‡ฒ" },
114
+ { code: "JO", name: "Jordan", flag: "๐Ÿ‡ฏ๐Ÿ‡ด" },
115
+ { code: "JP", name: "Japan", flag: "๐Ÿ‡ฏ๐Ÿ‡ต" },
116
+ { code: "KE", name: "Kenya", flag: "๐Ÿ‡ฐ๐Ÿ‡ช" },
117
+ { code: "KG", name: "Kyrgyzstan", flag: "๐Ÿ‡ฐ๐Ÿ‡ฌ" },
118
+ { code: "KH", name: "Cambodia", flag: "๐Ÿ‡ฐ๐Ÿ‡ญ" },
119
+ { code: "KI", name: "Kiribati", flag: "๐Ÿ‡ฐ๐Ÿ‡ฎ" },
120
+ { code: "KM", name: "Comoros", flag: "๐Ÿ‡ฐ๐Ÿ‡ฒ" },
121
+ { code: "KN", name: "St. Kitts & Nevis", flag: "๐Ÿ‡ฐ๐Ÿ‡ณ" },
122
+ { code: "KP", name: "North Korea", flag: "๐Ÿ‡ฐ๐Ÿ‡ต" },
123
+ { code: "KR", name: "South Korea", flag: "๐Ÿ‡ฐ๐Ÿ‡ท" },
124
+ { code: "KW", name: "Kuwait", flag: "๐Ÿ‡ฐ๐Ÿ‡ผ" },
125
+ { code: "KY", name: "Cayman Islands", flag: "๐Ÿ‡ฐ๐Ÿ‡พ" },
126
+ { code: "KZ", name: "Kazakhstan", flag: "๐Ÿ‡ฐ๐Ÿ‡ฟ" },
127
+ { code: "LA", name: "Laos", flag: "๐Ÿ‡ฑ๐Ÿ‡ฆ" },
128
+ { code: "LB", name: "Lebanon", flag: "๐Ÿ‡ฑ๐Ÿ‡ง" },
129
+ { code: "LC", name: "St. Lucia", flag: "๐Ÿ‡ฑ๐Ÿ‡จ" },
130
+ { code: "LI", name: "Liechtenstein", flag: "๐Ÿ‡ฑ๐Ÿ‡ฎ" },
131
+ { code: "LK", name: "Sri Lanka", flag: "๐Ÿ‡ฑ๐Ÿ‡ฐ" },
132
+ { code: "LR", name: "Liberia", flag: "๐Ÿ‡ฑ๐Ÿ‡ท" },
133
+ { code: "LS", name: "Lesotho", flag: "๐Ÿ‡ฑ๐Ÿ‡ธ" },
134
+ { code: "LT", name: "Lithuania", flag: "๐Ÿ‡ฑ๐Ÿ‡น" },
135
+ { code: "LU", name: "Luxembourg", flag: "๐Ÿ‡ฑ๐Ÿ‡บ" },
136
+ { code: "LV", name: "Latvia", flag: "๐Ÿ‡ฑ๐Ÿ‡ป" },
137
+ { code: "LY", name: "Libya", flag: "๐Ÿ‡ฑ๐Ÿ‡พ" },
138
+ { code: "MA", name: "Morocco", flag: "๐Ÿ‡ฒ๐Ÿ‡ฆ" },
139
+ { code: "MC", name: "Monaco", flag: "๐Ÿ‡ฒ๐Ÿ‡จ" },
140
+ { code: "MD", name: "Moldova", flag: "๐Ÿ‡ฒ๐Ÿ‡ฉ" },
141
+ { code: "ME", name: "Montenegro", flag: "๐Ÿ‡ฒ๐Ÿ‡ช" },
142
+ { code: "MF", name: "St. Martin", flag: "๐Ÿ‡ฒ๐Ÿ‡ซ" },
143
+ { code: "MG", name: "Madagascar", flag: "๐Ÿ‡ฒ๐Ÿ‡ฌ" },
144
+ { code: "MH", name: "Marshall Islands", flag: "๐Ÿ‡ฒ๐Ÿ‡ญ" },
145
+ { code: "MK", name: "North Macedonia", flag: "๐Ÿ‡ฒ๐Ÿ‡ฐ" },
146
+ { code: "ML", name: "Mali", flag: "๐Ÿ‡ฒ๐Ÿ‡ฑ" },
147
+ { code: "MM", name: "Myanmar (Burma)", flag: "๐Ÿ‡ฒ๐Ÿ‡ฒ" },
148
+ { code: "MN", name: "Mongolia", flag: "๐Ÿ‡ฒ๐Ÿ‡ณ" },
149
+ { code: "MO", name: "Macao SAR China", flag: "๐Ÿ‡ฒ๐Ÿ‡ด" },
150
+ { code: "MP", name: "Northern Mariana Islands", flag: "๐Ÿ‡ฒ๐Ÿ‡ต" },
151
+ { code: "MQ", name: "Martinique", flag: "๐Ÿ‡ฒ๐Ÿ‡ถ" },
152
+ { code: "MR", name: "Mauritania", flag: "๐Ÿ‡ฒ๐Ÿ‡ท" },
153
+ { code: "MS", name: "Montserrat", flag: "๐Ÿ‡ฒ๐Ÿ‡ธ" },
154
+ { code: "MT", name: "Malta", flag: "๐Ÿ‡ฒ๐Ÿ‡น" },
155
+ { code: "MU", name: "Mauritius", flag: "๐Ÿ‡ฒ๐Ÿ‡บ" },
156
+ { code: "MV", name: "Maldives", flag: "๐Ÿ‡ฒ๐Ÿ‡ป" },
157
+ { code: "MW", name: "Malawi", flag: "๐Ÿ‡ฒ๐Ÿ‡ผ" },
158
+ { code: "MX", name: "Mexico", flag: "๐Ÿ‡ฒ๐Ÿ‡ฝ" },
159
+ { code: "MY", name: "Malaysia", flag: "๐Ÿ‡ฒ๐Ÿ‡พ" },
160
+ { code: "MZ", name: "Mozambique", flag: "๐Ÿ‡ฒ๐Ÿ‡ฟ" },
161
+ { code: "NA", name: "Namibia", flag: "๐Ÿ‡ณ๐Ÿ‡ฆ" },
162
+ { code: "NC", name: "New Caledonia", flag: "๐Ÿ‡ณ๐Ÿ‡จ" },
163
+ { code: "NE", name: "Niger", flag: "๐Ÿ‡ณ๐Ÿ‡ช" },
164
+ { code: "NF", name: "Norfolk Island", flag: "๐Ÿ‡ณ๐Ÿ‡ซ" },
165
+ { code: "NG", name: "Nigeria", flag: "๐Ÿ‡ณ๐Ÿ‡ฌ" },
166
+ { code: "NI", name: "Nicaragua", flag: "๐Ÿ‡ณ๐Ÿ‡ฎ" },
167
+ { code: "NL", name: "Netherlands", flag: "๐Ÿ‡ณ๐Ÿ‡ฑ" },
168
+ { code: "NO", name: "Norway", flag: "๐Ÿ‡ณ๐Ÿ‡ด" },
169
+ { code: "NP", name: "Nepal", flag: "๐Ÿ‡ณ๐Ÿ‡ต" },
170
+ { code: "NR", name: "Nauru", flag: "๐Ÿ‡ณ๐Ÿ‡ท" },
171
+ { code: "NU", name: "Niue", flag: "๐Ÿ‡ณ๐Ÿ‡บ" },
172
+ { code: "NZ", name: "New Zealand", flag: "๐Ÿ‡ณ๐Ÿ‡ฟ" },
173
+ { code: "OM", name: "Oman", flag: "๐Ÿ‡ด๐Ÿ‡ฒ" },
174
+ { code: "PA", name: "Panama", flag: "๐Ÿ‡ต๐Ÿ‡ฆ" },
175
+ { code: "PE", name: "Peru", flag: "๐Ÿ‡ต๐Ÿ‡ช" },
176
+ { code: "PF", name: "French Polynesia", flag: "๐Ÿ‡ต๐Ÿ‡ซ" },
177
+ { code: "PG", name: "Papua New Guinea", flag: "๐Ÿ‡ต๐Ÿ‡ฌ" },
178
+ { code: "PH", name: "Philippines", flag: "๐Ÿ‡ต๐Ÿ‡ญ" },
179
+ { code: "PK", name: "Pakistan", flag: "๐Ÿ‡ต๐Ÿ‡ฐ" },
180
+ { code: "PL", name: "Poland", flag: "๐Ÿ‡ต๐Ÿ‡ฑ" },
181
+ { code: "PM", name: "St. Pierre & Miquelon", flag: "๐Ÿ‡ต๐Ÿ‡ฒ" },
182
+ { code: "PN", name: "Pitcairn Islands", flag: "๐Ÿ‡ต๐Ÿ‡ณ" },
183
+ { code: "PR", name: "Puerto Rico", flag: "๐Ÿ‡ต๐Ÿ‡ท" },
184
+ { code: "PS", name: "Palestinian Territories", flag: "๐Ÿ‡ต๐Ÿ‡ธ" },
185
+ { code: "PT", name: "Portugal", flag: "๐Ÿ‡ต๐Ÿ‡น" },
186
+ { code: "PW", name: "Palau", flag: "๐Ÿ‡ต๐Ÿ‡ผ" },
187
+ { code: "PY", name: "Paraguay", flag: "๐Ÿ‡ต๐Ÿ‡พ" },
188
+ { code: "QA", name: "Qatar", flag: "๐Ÿ‡ถ๐Ÿ‡ฆ" },
189
+ { code: "RE", name: "Rรฉunion", flag: "๐Ÿ‡ท๐Ÿ‡ช" },
190
+ { code: "RO", name: "Romania", flag: "๐Ÿ‡ท๐Ÿ‡ด" },
191
+ { code: "RS", name: "Serbia", flag: "๐Ÿ‡ท๐Ÿ‡ธ" },
192
+ { code: "RU", name: "Russia", flag: "๐Ÿ‡ท๐Ÿ‡บ" },
193
+ { code: "RW", name: "Rwanda", flag: "๐Ÿ‡ท๐Ÿ‡ผ" },
194
+ { code: "SA", name: "Saudi Arabia", flag: "๐Ÿ‡ธ๐Ÿ‡ฆ" },
195
+ { code: "SB", name: "Solomon Islands", flag: "๐Ÿ‡ธ๐Ÿ‡ง" },
196
+ { code: "SC", name: "Seychelles", flag: "๐Ÿ‡ธ๐Ÿ‡จ" },
197
+ { code: "SD", name: "Sudan", flag: "๐Ÿ‡ธ๐Ÿ‡ฉ" },
198
+ { code: "SE", name: "Sweden", flag: "๐Ÿ‡ธ๐Ÿ‡ช" },
199
+ { code: "SG", name: "Singapore", flag: "๐Ÿ‡ธ๐Ÿ‡ฌ" },
200
+ { code: "SH", name: "St. Helena", flag: "๐Ÿ‡ธ๐Ÿ‡ญ" },
201
+ { code: "SI", name: "Slovenia", flag: "๐Ÿ‡ธ๐Ÿ‡ฎ" },
202
+ { code: "SJ", name: "Svalbard & Jan Mayen", flag: "๐Ÿ‡ธ๐Ÿ‡ฏ" },
203
+ { code: "SK", name: "Slovakia", flag: "๐Ÿ‡ธ๐Ÿ‡ฐ" },
204
+ { code: "SL", name: "Sierra Leone", flag: "๐Ÿ‡ธ๐Ÿ‡ฑ" },
205
+ { code: "SM", name: "San Marino", flag: "๐Ÿ‡ธ๐Ÿ‡ฒ" },
206
+ { code: "SN", name: "Senegal", flag: "๐Ÿ‡ธ๐Ÿ‡ณ" },
207
+ { code: "SO", name: "Somalia", flag: "๐Ÿ‡ธ๐Ÿ‡ด" },
208
+ { code: "SR", name: "Suriname", flag: "๐Ÿ‡ธ๐Ÿ‡ท" },
209
+ { code: "SS", name: "South Sudan", flag: "๐Ÿ‡ธ๐Ÿ‡ธ" },
210
+ { code: "ST", name: "Sรฃo Tomรฉ & Prรญncipe", flag: "๐Ÿ‡ธ๐Ÿ‡น" },
211
+ { code: "SV", name: "El Salvador", flag: "๐Ÿ‡ธ๐Ÿ‡ป" },
212
+ { code: "SX", name: "Sint Maarten", flag: "๐Ÿ‡ธ๐Ÿ‡ฝ" },
213
+ { code: "SY", name: "Syria", flag: "๐Ÿ‡ธ๐Ÿ‡พ" },
214
+ { code: "SZ", name: "Eswatini", flag: "๐Ÿ‡ธ๐Ÿ‡ฟ" },
215
+ { code: "TC", name: "Turks & Caicos Islands", flag: "๐Ÿ‡น๐Ÿ‡จ" },
216
+ { code: "TD", name: "Chad", flag: "๐Ÿ‡น๐Ÿ‡ฉ" },
217
+ { code: "TF", name: "French Southern Territories", flag: "๐Ÿ‡น๐Ÿ‡ซ" },
218
+ { code: "TG", name: "Togo", flag: "๐Ÿ‡น๐Ÿ‡ฌ" },
219
+ { code: "TH", name: "Thailand", flag: "๐Ÿ‡น๐Ÿ‡ญ" },
220
+ { code: "TJ", name: "Tajikistan", flag: "๐Ÿ‡น๐Ÿ‡ฏ" },
221
+ { code: "TK", name: "Tokelau", flag: "๐Ÿ‡น๐Ÿ‡ฐ" },
222
+ { code: "TL", name: "Timor-Leste", flag: "๐Ÿ‡น๐Ÿ‡ฑ" },
223
+ { code: "TM", name: "Turkmenistan", flag: "๐Ÿ‡น๐Ÿ‡ฒ" },
224
+ { code: "TN", name: "Tunisia", flag: "๐Ÿ‡น๐Ÿ‡ณ" },
225
+ { code: "TO", name: "Tonga", flag: "๐Ÿ‡น๐Ÿ‡ด" },
226
+ { code: "TR", name: "Tรผrkiye", flag: "๐Ÿ‡น๐Ÿ‡ท" },
227
+ { code: "TT", name: "Trinidad & Tobago", flag: "๐Ÿ‡น๐Ÿ‡น" },
228
+ { code: "TV", name: "Tuvalu", flag: "๐Ÿ‡น๐Ÿ‡ป" },
229
+ { code: "TW", name: "Taiwan", flag: "๐Ÿ‡น๐Ÿ‡ผ" },
230
+ { code: "TZ", name: "Tanzania", flag: "๐Ÿ‡น๐Ÿ‡ฟ" },
231
+ { code: "UA", name: "Ukraine", flag: "๐Ÿ‡บ๐Ÿ‡ฆ" },
232
+ { code: "UG", name: "Uganda", flag: "๐Ÿ‡บ๐Ÿ‡ฌ" },
233
+ { code: "UM", name: "U.S. Outlying Islands", flag: "๐Ÿ‡บ๐Ÿ‡ฒ" },
234
+ { code: "US", name: "United States", flag: "๐Ÿ‡บ๐Ÿ‡ธ" },
235
+ { code: "UY", name: "Uruguay", flag: "๐Ÿ‡บ๐Ÿ‡พ" },
236
+ { code: "UZ", name: "Uzbekistan", flag: "๐Ÿ‡บ๐Ÿ‡ฟ" },
237
+ { code: "VA", name: "Vatican City", flag: "๐Ÿ‡ป๐Ÿ‡ฆ" },
238
+ { code: "VC", name: "St. Vincent & Grenadines", flag: "๐Ÿ‡ป๐Ÿ‡จ" },
239
+ { code: "VE", name: "Venezuela", flag: "๐Ÿ‡ป๐Ÿ‡ช" },
240
+ { code: "VG", name: "British Virgin Islands", flag: "๐Ÿ‡ป๐Ÿ‡ฌ" },
241
+ { code: "VI", name: "U.S. Virgin Islands", flag: "๐Ÿ‡ป๐Ÿ‡ฎ" },
242
+ { code: "VN", name: "Vietnam", flag: "๐Ÿ‡ป๐Ÿ‡ณ" },
243
+ { code: "VU", name: "Vanuatu", flag: "๐Ÿ‡ป๐Ÿ‡บ" },
244
+ { code: "WF", name: "Wallis & Futuna", flag: "๐Ÿ‡ผ๐Ÿ‡ซ" },
245
+ { code: "WS", name: "Samoa", flag: "๐Ÿ‡ผ๐Ÿ‡ธ" },
246
+ { code: "YE", name: "Yemen", flag: "๐Ÿ‡พ๐Ÿ‡ช" },
247
+ { code: "YT", name: "Mayotte", flag: "๐Ÿ‡พ๐Ÿ‡น" },
248
+ { code: "ZA", name: "South Africa", flag: "๐Ÿ‡ฟ๐Ÿ‡ฆ" },
249
+ { code: "ZM", name: "Zambia", flag: "๐Ÿ‡ฟ๐Ÿ‡ฒ" },
250
+ { code: "ZW", name: "Zimbabwe", flag: "๐Ÿ‡ฟ๐Ÿ‡ผ" },
251
+ ];
@@ -0,0 +1,26 @@
1
+ import { countries } from "./data.js";
2
+ import type { Country } from "./types.js";
3
+ export type { Country };
4
+ export { countries };
5
+ /** Get a country by its ISO 3166-1 alpha-2 code (case-insensitive). */
6
+ export declare function getCountryByCode(code: string): Country | undefined;
7
+ /** Get a country by its exact English name (case-insensitive). */
8
+ export declare function getCountryByName(name: string): Country | undefined;
9
+ /** Get a country by its flag emoji, e.g. "๐Ÿ‡ฎ๐Ÿ‡ณ" โ†’ India. */
10
+ export declare function getCountryByFlag(flag: string): Country | undefined;
11
+ /** Get just the flag emoji for a code. Returns undefined for unknown codes. */
12
+ export declare function getFlag(code: string): string | undefined;
13
+ /** Get just the English name for a code. Returns undefined for unknown codes. */
14
+ export declare function getName(code: string): string | undefined;
15
+ /** Check whether a string is a valid ISO 3166-1 alpha-2 code. */
16
+ export declare function isValidCode(code: string): boolean;
17
+ /**
18
+ * Search countries by partial, case-insensitive match on name or code.
19
+ * Results are ranked: exact code/name match first, then prefix matches,
20
+ * then substring matches.
21
+ */
22
+ export declare function searchCountries(query: string): Country[];
23
+ /** Convert an alpha-2 code to its flag emoji without a lookup, e.g. "JP" โ†’ "๐Ÿ‡ฏ๐Ÿ‡ต". */
24
+ export declare function codeToFlag(code: string): string;
25
+ /** Convert a flag emoji back to its alpha-2 code, e.g. "๐Ÿ‡ฏ๐Ÿ‡ต" โ†’ "JP". */
26
+ export declare function flagToCode(flag: string): string | undefined;
@@ -0,0 +1,70 @@
1
+ import { countries } from "./data.js";
2
+ export { countries };
3
+ const byCode = new Map(countries.map((c) => [c.code, c]));
4
+ const byName = new Map(countries.map((c) => [c.name.toLowerCase(), c]));
5
+ /** Get a country by its ISO 3166-1 alpha-2 code (case-insensitive). */
6
+ export function getCountryByCode(code) {
7
+ return byCode.get(code.trim().toUpperCase());
8
+ }
9
+ /** Get a country by its exact English name (case-insensitive). */
10
+ export function getCountryByName(name) {
11
+ return byName.get(name.trim().toLowerCase());
12
+ }
13
+ /** Get a country by its flag emoji, e.g. "๐Ÿ‡ฎ๐Ÿ‡ณ" โ†’ India. */
14
+ export function getCountryByFlag(flag) {
15
+ const code = flagToCode(flag.trim());
16
+ return code ? byCode.get(code) : undefined;
17
+ }
18
+ /** Get just the flag emoji for a code. Returns undefined for unknown codes. */
19
+ export function getFlag(code) {
20
+ return getCountryByCode(code)?.flag;
21
+ }
22
+ /** Get just the English name for a code. Returns undefined for unknown codes. */
23
+ export function getName(code) {
24
+ return getCountryByCode(code)?.name;
25
+ }
26
+ /** Check whether a string is a valid ISO 3166-1 alpha-2 code. */
27
+ export function isValidCode(code) {
28
+ return byCode.has(code.trim().toUpperCase());
29
+ }
30
+ /**
31
+ * Search countries by partial, case-insensitive match on name or code.
32
+ * Results are ranked: exact code/name match first, then prefix matches,
33
+ * then substring matches.
34
+ */
35
+ export function searchCountries(query) {
36
+ const q = query.trim().toLowerCase();
37
+ if (!q)
38
+ return [];
39
+ const exact = [];
40
+ const prefix = [];
41
+ const partial = [];
42
+ for (const c of countries) {
43
+ const name = c.name.toLowerCase();
44
+ const code = c.code.toLowerCase();
45
+ if (name === q || code === q)
46
+ exact.push(c);
47
+ else if (name.startsWith(q) || code.startsWith(q))
48
+ prefix.push(c);
49
+ else if (name.includes(q))
50
+ partial.push(c);
51
+ }
52
+ return [...exact, ...prefix, ...partial];
53
+ }
54
+ /** Convert an alpha-2 code to its flag emoji without a lookup, e.g. "JP" โ†’ "๐Ÿ‡ฏ๐Ÿ‡ต". */
55
+ export function codeToFlag(code) {
56
+ const c = code.trim().toUpperCase();
57
+ if (!/^[A-Z]{2}$/.test(c)) {
58
+ throw new Error(`Invalid alpha-2 code: "${code}"`);
59
+ }
60
+ return String.fromCodePoint(...[...c].map((ch) => 0x1f1e6 + ch.charCodeAt(0) - 65));
61
+ }
62
+ /** Convert a flag emoji back to its alpha-2 code, e.g. "๐Ÿ‡ฏ๐Ÿ‡ต" โ†’ "JP". */
63
+ export function flagToCode(flag) {
64
+ const points = [...flag].map((ch) => ch.codePointAt(0));
65
+ if (points.length !== 2 ||
66
+ points.some((p) => p < 0x1f1e6 || p > 0x1f1ff)) {
67
+ return undefined;
68
+ }
69
+ return points.map((p) => String.fromCharCode(p - 0x1f1e6 + 65)).join("");
70
+ }
@@ -0,0 +1,9 @@
1
+ /** A single country entry. */
2
+ export interface Country {
3
+ /** ISO 3166-1 alpha-2 code, e.g. "IN" */
4
+ code: string;
5
+ /** English short name, e.g. "India" */
6
+ name: string;
7
+ /** Flag emoji, e.g. "๐Ÿ‡ฎ๐Ÿ‡ณ" */
8
+ flag: string;
9
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "country-code-kit",
3
+ "version": "1.0.0",
4
+ "description": "Zero-dependency list of all 249 ISO 3166-1 countries with code, name, and flag emoji. Lookup and search helpers included. Tree-shakeable, works in Node and browsers.",
5
+ "keywords": [
6
+ "country",
7
+ "countries",
8
+ "iso-3166",
9
+ "country-code",
10
+ "flag",
11
+ "emoji",
12
+ "country-name",
13
+ "typescript"
14
+ ],
15
+ "license": "MIT",
16
+ "type": "module",
17
+ "main": "./dist/cjs/index.js",
18
+ "module": "./dist/esm/index.js",
19
+ "types": "./dist/esm/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/esm/index.d.ts",
23
+ "import": "./dist/esm/index.js",
24
+ "require": "./dist/cjs/index.js"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "sideEffects": false,
31
+ "scripts": {
32
+ "build": "rm -rf dist && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
33
+ "test": "node --test test/*.test.js",
34
+ "prepublishOnly": "npm run build && npm test"
35
+ },
36
+ "devDependencies": {
37
+ "typescript": "^5.5.0"
38
+ }
39
+ }