arevdata 0.1.17

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.
Files changed (289) hide show
  1. package/README.md +499 -0
  2. package/dist/arevdata.cjs +38955 -0
  3. package/dist/arevdata.cjs.map +1 -0
  4. package/dist/arevdata.js +38955 -0
  5. package/dist/arevdata.js.map +1 -0
  6. package/dist/assets/flags/LICENSE.flag-icons.txt +21 -0
  7. package/dist/assets/flags/README.md +11 -0
  8. package/dist/assets/flags/index.html +88 -0
  9. package/dist/assets/flags/overrides/xn.svg +6 -0
  10. package/dist/assets/flags/svg/ad.svg +150 -0
  11. package/dist/assets/flags/svg/ae.svg +6 -0
  12. package/dist/assets/flags/svg/af.svg +81 -0
  13. package/dist/assets/flags/svg/ag.svg +14 -0
  14. package/dist/assets/flags/svg/al.svg +5 -0
  15. package/dist/assets/flags/svg/am.svg +5 -0
  16. package/dist/assets/flags/svg/ao.svg +13 -0
  17. package/dist/assets/flags/svg/ar.svg +32 -0
  18. package/dist/assets/flags/svg/at.svg +4 -0
  19. package/dist/assets/flags/svg/au.svg +8 -0
  20. package/dist/assets/flags/svg/az.svg +8 -0
  21. package/dist/assets/flags/svg/ba.svg +12 -0
  22. package/dist/assets/flags/svg/bb.svg +6 -0
  23. package/dist/assets/flags/svg/bd.svg +4 -0
  24. package/dist/assets/flags/svg/be.svg +7 -0
  25. package/dist/assets/flags/svg/bf.svg +7 -0
  26. package/dist/assets/flags/svg/bg.svg +5 -0
  27. package/dist/assets/flags/svg/bh.svg +4 -0
  28. package/dist/assets/flags/svg/bi.svg +15 -0
  29. package/dist/assets/flags/svg/bj.svg +14 -0
  30. package/dist/assets/flags/svg/bn.svg +36 -0
  31. package/dist/assets/flags/svg/bo.svg +673 -0
  32. package/dist/assets/flags/svg/br.svg +45 -0
  33. package/dist/assets/flags/svg/bs.svg +13 -0
  34. package/dist/assets/flags/svg/bt.svg +89 -0
  35. package/dist/assets/flags/svg/bw.svg +7 -0
  36. package/dist/assets/flags/svg/by.svg +18 -0
  37. package/dist/assets/flags/svg/bz.svg +145 -0
  38. package/dist/assets/flags/svg/ca.svg +4 -0
  39. package/dist/assets/flags/svg/cd.svg +5 -0
  40. package/dist/assets/flags/svg/cf.svg +15 -0
  41. package/dist/assets/flags/svg/cg.svg +12 -0
  42. package/dist/assets/flags/svg/ch.svg +9 -0
  43. package/dist/assets/flags/svg/cl.svg +13 -0
  44. package/dist/assets/flags/svg/cm.svg +15 -0
  45. package/dist/assets/flags/svg/cn.svg +11 -0
  46. package/dist/assets/flags/svg/co.svg +7 -0
  47. package/dist/assets/flags/svg/cr.svg +7 -0
  48. package/dist/assets/flags/svg/cu.svg +13 -0
  49. package/dist/assets/flags/svg/cv.svg +13 -0
  50. package/dist/assets/flags/svg/cy.svg +6 -0
  51. package/dist/assets/flags/svg/cz.svg +5 -0
  52. package/dist/assets/flags/svg/de.svg +5 -0
  53. package/dist/assets/flags/svg/dj.svg +13 -0
  54. package/dist/assets/flags/svg/dk.svg +5 -0
  55. package/dist/assets/flags/svg/dm.svg +152 -0
  56. package/dist/assets/flags/svg/do.svg +121 -0
  57. package/dist/assets/flags/svg/dz.svg +5 -0
  58. package/dist/assets/flags/svg/ec.svg +138 -0
  59. package/dist/assets/flags/svg/ee.svg +5 -0
  60. package/dist/assets/flags/svg/eg.svg +38 -0
  61. package/dist/assets/flags/svg/er.svg +8 -0
  62. package/dist/assets/flags/svg/es.svg +544 -0
  63. package/dist/assets/flags/svg/et.svg +14 -0
  64. package/dist/assets/flags/svg/fi.svg +5 -0
  65. package/dist/assets/flags/svg/fj.svg +120 -0
  66. package/dist/assets/flags/svg/fm.svg +11 -0
  67. package/dist/assets/flags/svg/fr.svg +5 -0
  68. package/dist/assets/flags/svg/ga.svg +7 -0
  69. package/dist/assets/flags/svg/gb.svg +7 -0
  70. package/dist/assets/flags/svg/gd.svg +27 -0
  71. package/dist/assets/flags/svg/ge.svg +6 -0
  72. package/dist/assets/flags/svg/gh.svg +6 -0
  73. package/dist/assets/flags/svg/gm.svg +14 -0
  74. package/dist/assets/flags/svg/gn.svg +7 -0
  75. package/dist/assets/flags/svg/gq.svg +23 -0
  76. package/dist/assets/flags/svg/gr.svg +16 -0
  77. package/dist/assets/flags/svg/gt.svg +204 -0
  78. package/dist/assets/flags/svg/gw.svg +13 -0
  79. package/dist/assets/flags/svg/gy.svg +9 -0
  80. package/dist/assets/flags/svg/hn.svg +18 -0
  81. package/dist/assets/flags/svg/hr.svg +58 -0
  82. package/dist/assets/flags/svg/ht.svg +116 -0
  83. package/dist/assets/flags/svg/hu.svg +7 -0
  84. package/dist/assets/flags/svg/id.svg +4 -0
  85. package/dist/assets/flags/svg/ie.svg +7 -0
  86. package/dist/assets/flags/svg/il.svg +14 -0
  87. package/dist/assets/flags/svg/in.svg +25 -0
  88. package/dist/assets/flags/svg/iq.svg +10 -0
  89. package/dist/assets/flags/svg/ir.svg +219 -0
  90. package/dist/assets/flags/svg/is.svg +12 -0
  91. package/dist/assets/flags/svg/it.svg +7 -0
  92. package/dist/assets/flags/svg/jm.svg +8 -0
  93. package/dist/assets/flags/svg/jo.svg +16 -0
  94. package/dist/assets/flags/svg/jp.svg +11 -0
  95. package/dist/assets/flags/svg/ke.svg +23 -0
  96. package/dist/assets/flags/svg/kg.svg +4 -0
  97. package/dist/assets/flags/svg/kh.svg +61 -0
  98. package/dist/assets/flags/svg/ki.svg +36 -0
  99. package/dist/assets/flags/svg/km.svg +16 -0
  100. package/dist/assets/flags/svg/kn.svg +14 -0
  101. package/dist/assets/flags/svg/kp.svg +15 -0
  102. package/dist/assets/flags/svg/kr.svg +24 -0
  103. package/dist/assets/flags/svg/kw.svg +13 -0
  104. package/dist/assets/flags/svg/kz.svg +36 -0
  105. package/dist/assets/flags/svg/la.svg +12 -0
  106. package/dist/assets/flags/svg/lb.svg +15 -0
  107. package/dist/assets/flags/svg/lc.svg +8 -0
  108. package/dist/assets/flags/svg/li.svg +43 -0
  109. package/dist/assets/flags/svg/lk.svg +22 -0
  110. package/dist/assets/flags/svg/lr.svg +14 -0
  111. package/dist/assets/flags/svg/ls.svg +8 -0
  112. package/dist/assets/flags/svg/lt.svg +7 -0
  113. package/dist/assets/flags/svg/lu.svg +5 -0
  114. package/dist/assets/flags/svg/lv.svg +6 -0
  115. package/dist/assets/flags/svg/ly.svg +13 -0
  116. package/dist/assets/flags/svg/ma.svg +4 -0
  117. package/dist/assets/flags/svg/mc.svg +6 -0
  118. package/dist/assets/flags/svg/md.svg +70 -0
  119. package/dist/assets/flags/svg/me.svg +116 -0
  120. package/dist/assets/flags/svg/mg.svg +7 -0
  121. package/dist/assets/flags/svg/mh.svg +7 -0
  122. package/dist/assets/flags/svg/mk.svg +5 -0
  123. package/dist/assets/flags/svg/ml.svg +7 -0
  124. package/dist/assets/flags/svg/mm.svg +12 -0
  125. package/dist/assets/flags/svg/mn.svg +14 -0
  126. package/dist/assets/flags/svg/mr.svg +6 -0
  127. package/dist/assets/flags/svg/mt.svg +58 -0
  128. package/dist/assets/flags/svg/mu.svg +8 -0
  129. package/dist/assets/flags/svg/mv.svg +6 -0
  130. package/dist/assets/flags/svg/mw.svg +10 -0
  131. package/dist/assets/flags/svg/mx.svg +382 -0
  132. package/dist/assets/flags/svg/my.svg +26 -0
  133. package/dist/assets/flags/svg/mz.svg +21 -0
  134. package/dist/assets/flags/svg/na.svg +16 -0
  135. package/dist/assets/flags/svg/ne.svg +6 -0
  136. package/dist/assets/flags/svg/ng.svg +6 -0
  137. package/dist/assets/flags/svg/ni.svg +129 -0
  138. package/dist/assets/flags/svg/nl.svg +5 -0
  139. package/dist/assets/flags/svg/no.svg +7 -0
  140. package/dist/assets/flags/svg/np.svg +13 -0
  141. package/dist/assets/flags/svg/nr.svg +12 -0
  142. package/dist/assets/flags/svg/nz.svg +36 -0
  143. package/dist/assets/flags/svg/om.svg +115 -0
  144. package/dist/assets/flags/svg/pa.svg +14 -0
  145. package/dist/assets/flags/svg/pe.svg +4 -0
  146. package/dist/assets/flags/svg/pg.svg +9 -0
  147. package/dist/assets/flags/svg/ph.svg +6 -0
  148. package/dist/assets/flags/svg/pk.svg +15 -0
  149. package/dist/assets/flags/svg/pl.svg +6 -0
  150. package/dist/assets/flags/svg/ps.svg +6 -0
  151. package/dist/assets/flags/svg/pt.svg +57 -0
  152. package/dist/assets/flags/svg/pw.svg +11 -0
  153. package/dist/assets/flags/svg/py.svg +157 -0
  154. package/dist/assets/flags/svg/qa.svg +4 -0
  155. package/dist/assets/flags/svg/ro.svg +7 -0
  156. package/dist/assets/flags/svg/rs.svg +292 -0
  157. package/dist/assets/flags/svg/ru.svg +5 -0
  158. package/dist/assets/flags/svg/rw.svg +13 -0
  159. package/dist/assets/flags/svg/sa.svg +25 -0
  160. package/dist/assets/flags/svg/sb.svg +13 -0
  161. package/dist/assets/flags/svg/sc.svg +7 -0
  162. package/dist/assets/flags/svg/sd.svg +13 -0
  163. package/dist/assets/flags/svg/se.svg +4 -0
  164. package/dist/assets/flags/svg/sg.svg +13 -0
  165. package/dist/assets/flags/svg/si.svg +18 -0
  166. package/dist/assets/flags/svg/sk.svg +9 -0
  167. package/dist/assets/flags/svg/sl.svg +7 -0
  168. package/dist/assets/flags/svg/sm.svg +75 -0
  169. package/dist/assets/flags/svg/sn.svg +8 -0
  170. package/dist/assets/flags/svg/so.svg +11 -0
  171. package/dist/assets/flags/svg/sr.svg +6 -0
  172. package/dist/assets/flags/svg/ss.svg +8 -0
  173. package/dist/assets/flags/svg/st.svg +16 -0
  174. package/dist/assets/flags/svg/sv.svg +593 -0
  175. package/dist/assets/flags/svg/sy.svg +6 -0
  176. package/dist/assets/flags/svg/sz.svg +34 -0
  177. package/dist/assets/flags/svg/td.svg +7 -0
  178. package/dist/assets/flags/svg/tg.svg +14 -0
  179. package/dist/assets/flags/svg/th.svg +7 -0
  180. package/dist/assets/flags/svg/tj.svg +22 -0
  181. package/dist/assets/flags/svg/tl.svg +13 -0
  182. package/dist/assets/flags/svg/tm.svg +204 -0
  183. package/dist/assets/flags/svg/tn.svg +4 -0
  184. package/dist/assets/flags/svg/to.svg +10 -0
  185. package/dist/assets/flags/svg/tr.svg +8 -0
  186. package/dist/assets/flags/svg/tt.svg +5 -0
  187. package/dist/assets/flags/svg/tv.svg +9 -0
  188. package/dist/assets/flags/svg/tw.svg +34 -0
  189. package/dist/assets/flags/svg/tz.svg +13 -0
  190. package/dist/assets/flags/svg/ua.svg +6 -0
  191. package/dist/assets/flags/svg/ug.svg +30 -0
  192. package/dist/assets/flags/svg/us.svg +9 -0
  193. package/dist/assets/flags/svg/uy.svg +28 -0
  194. package/dist/assets/flags/svg/uz.svg +30 -0
  195. package/dist/assets/flags/svg/va.svg +190 -0
  196. package/dist/assets/flags/svg/vc.svg +8 -0
  197. package/dist/assets/flags/svg/ve.svg +26 -0
  198. package/dist/assets/flags/svg/vn.svg +11 -0
  199. package/dist/assets/flags/svg/vu.svg +21 -0
  200. package/dist/assets/flags/svg/ws.svg +7 -0
  201. package/dist/assets/flags/svg/xk.svg +5 -0
  202. package/dist/assets/flags/svg/xn.svg +6 -0
  203. package/dist/assets/flags/svg/ye.svg +7 -0
  204. package/dist/assets/flags/svg/za.svg +17 -0
  205. package/dist/assets/flags/svg/zm.svg +27 -0
  206. package/dist/assets/flags/svg/zw.svg +21 -0
  207. package/dist/data/languages/index.html +86 -0
  208. package/dist/docs/api-worker-plan/index.html +439 -0
  209. package/dist/docs/cities/index.html +193 -0
  210. package/dist/docs/continents-currencies/index.html +306 -0
  211. package/dist/docs/countries/index.html +274 -0
  212. package/dist/docs/country-maps/index.html +262 -0
  213. package/dist/docs/flags/index.html +300 -0
  214. package/dist/docs/geography/index.html +454 -0
  215. package/dist/docs/languages/index.html +304 -0
  216. package/dist/docs/phone-codes/index.html +152 -0
  217. package/dist/docs/states/index.html +334 -0
  218. package/dist/docs/world-map/index.html +345 -0
  219. package/dist/examples/vue-app/index.html +208 -0
  220. package/dist/index.html +784 -0
  221. package/dist/robots.txt +2 -0
  222. package/dist/style/app.css +1 -0
  223. package/dist/types/__tests__/cities.test.d.ts +1 -0
  224. package/dist/types/__tests__/continents.test.d.ts +1 -0
  225. package/dist/types/__tests__/countries.test.d.ts +1 -0
  226. package/dist/types/__tests__/countryMaps.test.d.ts +1 -0
  227. package/dist/types/__tests__/geography.test.d.ts +1 -0
  228. package/dist/types/__tests__/index.test.d.ts +1 -0
  229. package/dist/types/__tests__/phoneCodes.test.d.ts +1 -0
  230. package/dist/types/__tests__/states.test.d.ts +1 -0
  231. package/dist/types/__tests__/translations.test.d.ts +1 -0
  232. package/dist/types/api/index.d.ts +5 -0
  233. package/dist/types/api/index.test.d.ts +1 -0
  234. package/dist/types/api/query.d.ts +3 -0
  235. package/dist/types/api/response.d.ts +16 -0
  236. package/dist/types/api/router.d.ts +1 -0
  237. package/dist/types/api/routes/cities.d.ts +2 -0
  238. package/dist/types/api/routes/countries.d.ts +2 -0
  239. package/dist/types/api/routes/health.d.ts +1 -0
  240. package/dist/types/api/routes/maps.d.ts +1 -0
  241. package/dist/types/api/routes/meta.d.ts +1 -0
  242. package/dist/types/api/routes/phoneCodes.d.ts +1 -0
  243. package/dist/types/data/cities.d.ts +22 -0
  244. package/dist/types/data/continents.d.ts +9 -0
  245. package/dist/types/data/countries.d.ts +23 -0
  246. package/dist/types/data/countryMaps.d.ts +104 -0
  247. package/dist/types/data/currencies.d.ts +13 -0
  248. package/dist/types/data/flags.d.ts +37 -0
  249. package/dist/types/data/geography.d.ts +48 -0
  250. package/dist/types/data/languages/index.d.ts +2 -0
  251. package/dist/types/data/languages/language.test.d.ts +1 -0
  252. package/dist/types/data/languages/languageData.d.ts +6 -0
  253. package/dist/types/data/languages/languageFunctions.d.ts +43 -0
  254. package/dist/types/data/languages/translations/ar.d.ts +1189 -0
  255. package/dist/types/data/languages/translations/de.d.ts +1189 -0
  256. package/dist/types/data/languages/translations/es.d.ts +1189 -0
  257. package/dist/types/data/languages/translations/fr.d.ts +1189 -0
  258. package/dist/types/data/languages/translations/hi.d.ts +1189 -0
  259. package/dist/types/data/languages/translations/it.d.ts +1189 -0
  260. package/dist/types/data/languages/translations/ja.d.ts +1189 -0
  261. package/dist/types/data/languages/translations/ko.d.ts +1189 -0
  262. package/dist/types/data/languages/translations/nl.d.ts +1189 -0
  263. package/dist/types/data/languages/translations/pl.d.ts +1189 -0
  264. package/dist/types/data/languages/translations/pt.d.ts +1189 -0
  265. package/dist/types/data/languages/translations/ru.d.ts +1189 -0
  266. package/dist/types/data/languages/translations/tr.d.ts +1189 -0
  267. package/dist/types/data/languages/translations/zh.d.ts +1189 -0
  268. package/dist/types/data/phoneCodes.d.ts +16 -0
  269. package/dist/types/data/states.d.ts +18 -0
  270. package/dist/types/data/translations/ar.d.ts +1832 -0
  271. package/dist/types/data/translations/de.d.ts +2005 -0
  272. package/dist/types/data/translations/es.d.ts +1852 -0
  273. package/dist/types/data/translations/fr.d.ts +1860 -0
  274. package/dist/types/data/translations/hi.d.ts +1816 -0
  275. package/dist/types/data/translations/it.d.ts +1824 -0
  276. package/dist/types/data/translations/ja.d.ts +1833 -0
  277. package/dist/types/data/translations/ko.d.ts +1832 -0
  278. package/dist/types/data/translations/nl.d.ts +1826 -0
  279. package/dist/types/data/translations/pl.d.ts +1818 -0
  280. package/dist/types/data/translations/pt.d.ts +1829 -0
  281. package/dist/types/data/translations/ru.d.ts +1838 -0
  282. package/dist/types/data/translations/tr.d.ts +1818 -0
  283. package/dist/types/data/translations/zh.d.ts +1834 -0
  284. package/dist/types/data/translations.d.ts +73 -0
  285. package/dist/types/data/worldMap.d.ts +122 -0
  286. package/dist/types/index.d.ts +33 -0
  287. package/dist/types/types/index.d.ts +348 -0
  288. package/dist/types/utils/geo.d.ts +101 -0
  289. package/package.json +67 -0
@@ -0,0 +1,304 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
+ <meta name="type" content="content">
6
+ <title>Languages</title>
7
+ <link href="/style/app.css" rel="stylesheet" type="text/css">
8
+ </head>
9
+ <body class="page--languages">
10
+ <div class="page-container">
11
+ <header class="header">
12
+ <div class="header__container">
13
+ </div>
14
+ </header>
15
+ <main class="main">
16
+ <section class="section">
17
+ <div class="container">
18
+ <div class="content"><h1 id="languages" tabindex="-1">Languages</h1>
19
+ <p><a href="../README.md">← Back to README</a></p>
20
+ <p>The language dataset adds three things that were missing from the core country data:</p>
21
+ <ol>
22
+ <li>A full base-language catalog with canonical codes such as <code>en</code>, <code>fr</code>, <code>zh</code>, <code>gsw</code>, and <code>zza</code></li>
23
+ <li>Locale variants such as <code>en-GB</code>, <code>es-419</code>, <code>sr-Latn</code>, and <code>ca-ES-valencia</code></li>
24
+ <li>Estimated speaker counts plus official-language country mappings so projects can rank, filter, and group languages without maintaining their own lists</li>
25
+ </ol>
26
+ <h2 id="import" tabindex="-1">Import</h2>
27
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span>
28
+ languages<span class="token punctuation">,</span>
29
+ languageVariants<span class="token punctuation">,</span>
30
+ allLanguages<span class="token punctuation">,</span>
31
+ officialLanguagesByCountry<span class="token punctuation">,</span>
32
+ canonicalizeLanguageCode<span class="token punctuation">,</span>
33
+ getLanguageByCode<span class="token punctuation">,</span>
34
+ getLanguageName<span class="token punctuation">,</span>
35
+ getLanguageVariants<span class="token punctuation">,</span>
36
+ searchLanguages<span class="token punctuation">,</span>
37
+ getLanguagesBySpeakerCount<span class="token punctuation">,</span>
38
+ getOfficialLanguagesByCountry<span class="token punctuation">,</span>
39
+ getOfficialLanguageCountries<span class="token punctuation">,</span>
40
+ <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
41
+ <span class="token keyword">import</span> <span class="token keyword">type</span> <span class="token punctuation">{</span>
42
+ Language<span class="token punctuation">,</span>
43
+ LanguageNameLocale<span class="token punctuation">,</span>
44
+ LanguageOfficialCountry<span class="token punctuation">,</span>
45
+ LanguageOfficialStatus<span class="token punctuation">,</span>
46
+ <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
47
+ </code></pre>
48
+ <h2 id="data-shape" tabindex="-1">Data shape</h2>
49
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">type</span> <span class="token class-name">LanguageNameLocale</span> <span class="token operator">=</span>
50
+ <span class="token operator">|</span> <span class="token string">"en"</span> <span class="token operator">|</span> <span class="token string">"ar"</span> <span class="token operator">|</span> <span class="token string">"de"</span> <span class="token operator">|</span> <span class="token string">"es"</span> <span class="token operator">|</span> <span class="token string">"fr"</span>
51
+ <span class="token operator">|</span> <span class="token string">"hi"</span> <span class="token operator">|</span> <span class="token string">"it"</span> <span class="token operator">|</span> <span class="token string">"ja"</span> <span class="token operator">|</span> <span class="token string">"ko"</span> <span class="token operator">|</span> <span class="token string">"nl"</span>
52
+ <span class="token operator">|</span> <span class="token string">"pl"</span> <span class="token operator">|</span> <span class="token string">"pt"</span> <span class="token operator">|</span> <span class="token string">"ru"</span> <span class="token operator">|</span> <span class="token string">"tr"</span> <span class="token operator">|</span> <span class="token string">"zh"</span><span class="token punctuation">;</span>
53
+
54
+ <span class="token keyword">type</span> <span class="token class-name">LanguageOfficialStatus</span> <span class="token operator">=</span>
55
+ <span class="token operator">|</span> <span class="token string">"official"</span>
56
+ <span class="token operator">|</span> <span class="token string">"de_facto_official"</span>
57
+ <span class="token operator">|</span> <span class="token string">"official_regional"</span><span class="token punctuation">;</span>
58
+
59
+ <span class="token keyword">interface</span> <span class="token class-name">LanguageOfficialCountry</span> <span class="token punctuation">{</span>
60
+ countryCode<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// ISO 3166-1 alpha-2</span>
61
+ officialStatus<span class="token operator">:</span> LanguageOfficialStatus<span class="token punctuation">;</span>
62
+ populationPercent<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span> <span class="token comment">// approximate share of speakers in that country</span>
63
+ <span class="token punctuation">}</span>
64
+
65
+ <span class="token keyword">interface</span> <span class="token class-name">Language</span> <span class="token punctuation">{</span>
66
+ code<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// "en", "en-GB", "sr-Latn", "ca-ES-valencia"</span>
67
+ baseCode<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// "en", "en", "sr", "ca"</span>
68
+ type<span class="token operator">:</span> <span class="token string">"language"</span> <span class="token operator">|</span> <span class="token string">"variant"</span><span class="token punctuation">;</span>
69
+ name<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// English display name</span>
70
+ estimatedSpeakers<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span> <span class="token comment">// CLDR-derived estimate, useful for ranking/filtering</span>
71
+ officialCountries<span class="token operator">:</span> LanguageOfficialCountry<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
72
+ script<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span>
73
+ region<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span>
74
+ variants<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
75
+ <span class="token punctuation">}</span>
76
+ </code></pre>
77
+ <h2 id="exports" tabindex="-1">Exports</h2>
78
+ <table>
79
+ <thead>
80
+ <tr>
81
+ <th>Export</th>
82
+ <th>Type</th>
83
+ <th>Description</th>
84
+ </tr>
85
+ </thead>
86
+ <tbody>
87
+ <tr>
88
+ <td><code>languages</code></td>
89
+ <td><code>Language[]</code></td>
90
+ <td>Base-language catalog</td>
91
+ </tr>
92
+ <tr>
93
+ <td><code>languageVariants</code></td>
94
+ <td><code>Language[]</code></td>
95
+ <td>Locale variants / regional or script-specific forms</td>
96
+ </tr>
97
+ <tr>
98
+ <td><code>allLanguages</code></td>
99
+ <td><code>Language[]</code></td>
100
+ <td>Combined catalog</td>
101
+ </tr>
102
+ <tr>
103
+ <td><code>officialLanguagesByCountry</code></td>
104
+ <td><code>Record&lt;string, Language[]&gt;</code></td>
105
+ <td>Base-language official-language list keyed by country code</td>
106
+ </tr>
107
+ </tbody>
108
+ </table>
109
+ <h2 id="examples" tabindex="-1">Examples</h2>
110
+ <h3 id="build-a-language-selector" tabindex="-1">Build a language selector</h3>
111
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> languages <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
112
+
113
+ <span class="token keyword">const</span> options <span class="token operator">=</span> languages
114
+ <span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token punctuation">(</span>language<span class="token punctuation">)</span> <span class="token operator">=></span> language<span class="token punctuation">.</span>estimatedSpeakers <span class="token operator">>=</span> <span class="token number">1_000_000</span><span class="token punctuation">)</span>
115
+ <span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>language<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span>
116
+ value<span class="token operator">:</span> language<span class="token punctuation">.</span>code<span class="token punctuation">,</span>
117
+ label<span class="token operator">:</span> language<span class="token punctuation">.</span>name<span class="token punctuation">,</span>
118
+ <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
119
+ </code></pre>
120
+ <h3 id="render-labels-in-the-user%E2%80%99s-ui-language" tabindex="-1">Render labels in the user’s UI language</h3>
121
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> getLanguageName <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
122
+
123
+ <span class="token function">getLanguageName</span><span class="token punctuation">(</span><span class="token string">"en"</span><span class="token punctuation">,</span> <span class="token string">"de"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "Englisch"</span>
124
+ <span class="token function">getLanguageName</span><span class="token punctuation">(</span><span class="token string">"en-GB"</span><span class="token punctuation">,</span> <span class="token string">"fr"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "anglais britannique"</span>
125
+ <span class="token function">getLanguageName</span><span class="token punctuation">(</span><span class="token string">"sr-Latn"</span><span class="token punctuation">,</span> <span class="token string">"ja"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "セルビア語 (ラテン文字)"</span>
126
+ </code></pre>
127
+ <h3 id="resolve-aliases-and-normalize-stored-values" tabindex="-1">Resolve aliases and normalize stored values</h3>
128
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> canonicalizeLanguageCode <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
129
+
130
+ <span class="token function">canonicalizeLanguageCode</span><span class="token punctuation">(</span><span class="token string">"iw"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "he"</span>
131
+ <span class="token function">canonicalizeLanguageCode</span><span class="token punctuation">(</span><span class="token string">"EN_gb"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "en-GB"</span>
132
+ <span class="token function">canonicalizeLanguageCode</span><span class="token punctuation">(</span><span class="token string">"sh"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "sr-Latn"</span>
133
+ </code></pre>
134
+ <h3 id="show-all-locale-variants-of-a-base-language" tabindex="-1">Show all locale variants of a base language</h3>
135
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> getLanguageVariants <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
136
+
137
+ <span class="token keyword">const</span> englishVariants <span class="token operator">=</span> <span class="token function">getLanguageVariants</span><span class="token punctuation">(</span><span class="token string">"en"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
138
+ englishVariants<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>language<span class="token punctuation">)</span> <span class="token operator">=></span> language<span class="token punctuation">.</span>code<span class="token punctuation">)</span><span class="token punctuation">;</span>
139
+ <span class="token comment">// ["en-AU", "en-GB", "en-CA", ...]</span>
140
+ </code></pre>
141
+ <h3 id="filter-out-obscure-languages" tabindex="-1">Filter out obscure languages</h3>
142
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> getLanguagesBySpeakerCount <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
143
+
144
+ <span class="token keyword">const</span> majorLanguages <span class="token operator">=</span> <span class="token function">getLanguagesBySpeakerCount</span><span class="token punctuation">(</span><span class="token number">10_000_000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
145
+ </code></pre>
146
+ <h3 id="search-by-translated-label-or-code" tabindex="-1">Search by translated label or code</h3>
147
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> searchLanguages <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
148
+
149
+ <span class="token function">searchLanguages</span><span class="token punctuation">(</span><span class="token string">"anglais"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> locale<span class="token operator">:</span> <span class="token string">"fr"</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
150
+ <span class="token function">searchLanguages</span><span class="token punctuation">(</span><span class="token string">"british english"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> includeVariants<span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
151
+ <span class="token function">searchLanguages</span><span class="token punctuation">(</span><span class="token string">"spanish"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> minSpeakers<span class="token operator">:</span> <span class="token number">50_000_000</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
152
+ </code></pre>
153
+ <h3 id="map-countries-to-official-languages" tabindex="-1">Map countries to official languages</h3>
154
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> getOfficialLanguagesByCountry <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
155
+
156
+ <span class="token function">getOfficialLanguagesByCountry</span><span class="token punctuation">(</span><span class="token string">"BE"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>language<span class="token punctuation">)</span> <span class="token operator">=></span> language<span class="token punctuation">.</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span>
157
+ <span class="token comment">// ["Dutch", "French", "German"]</span>
158
+ </code></pre>
159
+ <h3 id="map-a-language-back-to-countries-where-it-is-official" tabindex="-1">Map a language back to countries where it is official</h3>
160
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> getOfficialLanguageCountries <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
161
+
162
+ <span class="token function">getOfficialLanguageCountries</span><span class="token punctuation">(</span><span class="token string">"ca"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
163
+ <span class="token comment">// [</span>
164
+ <span class="token comment">// { countryCode: "AD", officialStatus: "official", populationPercent: 51 },</span>
165
+ <span class="token comment">// { countryCode: "ES", officialStatus: "official_regional", populationPercent: 19 },</span>
166
+ <span class="token comment">// ]</span>
167
+ </code></pre>
168
+ <h2 id="notes" tabindex="-1">Notes</h2>
169
+ <ul>
170
+ <li><code>estimatedSpeakers</code> is meant for ranking and filtering, not precise census reporting.</li>
171
+ <li>Base-language estimates are aggregated from CLDR territory population percentages.</li>
172
+ <li>Variant estimates are locale-scoped when that can be inferred, for example <code>en-GB</code> or <code>es-419</code>.</li>
173
+ <li><code>officialCountries</code> on raw language entries can include territories from CLDR.</li>
174
+ <li><code>getOfficialLanguagesByCountry()</code> and <code>getOfficialLanguageCountries()</code> are filtered to countries present in this package’s main <code>countries</code> dataset.</li>
175
+ <li>Localized language labels live in the shared translation files, while the language data itself stays English-only.</li>
176
+ <li>If a translated display name is unavailable for a very obscure code, the API falls back to the English label instead of omitting the language.</li>
177
+ </ul>
178
+ <h2 id="data-provenance" tabindex="-1">Data provenance</h2>
179
+ <p>The static data in this repo was generated from:</p>
180
+ <ul>
181
+ <li>IANA Language Subtag Registry for canonical language identifiers and aliases</li>
182
+ <li>Unicode CLDR territory population data for official-language and speaker estimates</li>
183
+ <li>CLDR locale lists for named locale variants</li>
184
+ </ul>
185
+ <h2 id="module-layout" tabindex="-1">Module layout</h2>
186
+ <p>The language feature lives in <a href="../srcarev/languages"><code>srcarev/languages</code></a>:</p>
187
+ <ul>
188
+ <li><code>languageData.ts</code> for the committed English dataset</li>
189
+ <li><code>languageFunctions.ts</code> for runtime helpers</li>
190
+ <li><code>translations/</code> for localized language labels used by <code>getLanguageName()</code></li>
191
+ <li><code>language.test.ts</code> for module coverage</li>
192
+ </ul>
193
+ <h2 id="related" tabindex="-1">Related</h2>
194
+ <ul>
195
+ <li><a href="countries.md">Countries</a> — country alpha-2 codes used by the official-language mappings</li>
196
+ <li><a href="cities.md">Cities</a> — useful when building locale-aware selectors with capital-city defaults</li>
197
+ <li><a href="continents-currencies.md">Continents &amp; currencies</a> — often paired with country and language selectors</li>
198
+ </ul>
199
+
200
+ </div>
201
+ </div>
202
+ </section>
203
+ </main>
204
+ </div>
205
+ <footer class="footer">
206
+ <div class="footer__container">
207
+ <div class="footer__controls">
208
+ <div class="footer__control"><span class="footer__label">Theme</span>
209
+ <button class="color-mode-toggle" type="button" data-color-mode-toggle aria-label="Toggle color mode"><span class="color-mode-toggle__value"></span></button>
210
+ </div>
211
+ </div>
212
+ </div>
213
+ </footer>
214
+ </body>
215
+ <script>const isDarkMode = window.matchMedia("prefers-color-scheme: dark").matches;
216
+ let localMode = isDarkMode ? "dark" : "light";
217
+
218
+ const updateColorModeToggle = () => {
219
+ const toggle = document.querySelector("[data-color-mode-toggle]");
220
+ if (!toggle) return;
221
+
222
+ const value = toggle.querySelector(".color-mode-toggle__value");
223
+ if (!value) return;
224
+
225
+ value.textContent = localMode === "dark" ? "Dark" : "Light";
226
+ };
227
+
228
+ const initColorMode = () => {
229
+ localMode = localStorage.getItem("colorMode");
230
+ setCurrentMode(localMode ? localMode : isDarkMode ? "dark" : "light");
231
+ };
232
+
233
+ const setCurrentMode = (mode) => {
234
+ localMode = mode;
235
+ localStorage.setItem("colorMode", localMode);
236
+ document.body.setAttribute("color-mode", mode);
237
+ updateColorModeToggle();
238
+ };
239
+
240
+ const switchMode = () => {
241
+ if (localMode == "dark") setCurrentMode("light");
242
+ else setCurrentMode("dark");
243
+ };
244
+
245
+ const bindColorModeToggle = () => {
246
+ const toggle = document.querySelector("[data-color-mode-toggle]");
247
+ if (!toggle) return;
248
+
249
+ toggle.addEventListener("click", () => {
250
+ switchMode();
251
+ });
252
+ };
253
+
254
+ initColorMode();
255
+ bindColorModeToggle();
256
+ const tables = document.querySelectorAll("table");
257
+ let initTableWrap = false;
258
+
259
+ const wrapTables = (tables) => {
260
+ tables &&
261
+ tables.forEach((table) => {
262
+ if (table.getBoundingClientRect().width > window.screen.width) {
263
+ table.classList.add("wrap");
264
+ initTableWrap = true;
265
+ }
266
+ });
267
+ };
268
+
269
+ const labelTables = (tables) => {
270
+ tables &&
271
+ tables.forEach((table) => {
272
+ // Set all headers as attributes to td's
273
+ const headerElements = table.querySelectorAll("thead th");
274
+ const bodyElementRows = table.querySelectorAll("tbody tr");
275
+ const heads = [];
276
+
277
+ if (headerElements && bodyElementRows) {
278
+ // Get TH heads
279
+ headerElements.forEach((th) => {
280
+ heads.push(th.textContent);
281
+ });
282
+ }
283
+
284
+ if (heads.length) {
285
+ bodyElementRows.forEach((tr) => {
286
+ const tds = tr.querySelectorAll("td");
287
+
288
+ tds.forEach((td, i) => {
289
+ td.setAttribute("data-label", heads[i]);
290
+ });
291
+ });
292
+ }
293
+ });
294
+ };
295
+
296
+ wrapTables(tables);
297
+ labelTables(tables);
298
+
299
+ window.addEventListener("resize", () => {
300
+ if (!initTableWrap) wrapTables(tables);
301
+ });
302
+
303
+ </script>
304
+ </html>
@@ -0,0 +1,152 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
+ <meta name="type" content="content">
6
+ <title>Phone Country Codes</title>
7
+ <link href="/style/app.css" rel="stylesheet" type="text/css">
8
+ </head>
9
+ <body class="page--phone-codes">
10
+ <div class="page-container">
11
+ <header class="header">
12
+ <div class="header__container">
13
+ </div>
14
+ </header>
15
+ <main class="main">
16
+ <section class="section">
17
+ <div class="container">
18
+ <div class="content"><h1 id="phone-country-codes" tabindex="-1">Phone Country Codes</h1>
19
+ <p><a href="../README.md">← Back to README</a></p>
20
+ <p>The <code>phoneCountryCodes</code> array is ready-to-use data for international phone number inputs (like WhatsApp, Stripe, or any contact form). It combines all sovereign countries with additional territories and special regions that have their own dialling codes.</p>
21
+ <h2 id="import" tabindex="-1">Import</h2>
22
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span>
23
+ phoneCountryCodes<span class="token punctuation">,</span>
24
+ getPhoneCodeByCountry<span class="token punctuation">,</span>
25
+ getCountriesByPhoneCode<span class="token punctuation">,</span>
26
+ <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
27
+ <span class="token keyword">import</span> <span class="token keyword">type</span> <span class="token punctuation">{</span> PhoneCountryCode <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
28
+ </code></pre>
29
+ <h2 id="data-shape" tabindex="-1">Data shape</h2>
30
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">interface</span> <span class="token class-name">PhoneCountryCode</span> <span class="token punctuation">{</span>
31
+ country<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// "Netherlands"</span>
32
+ code<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// "NL" — ISO 3166-1 alpha-2</span>
33
+ phoneCode<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// "+31" — always starts with "+"</span>
34
+ flag<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// "🇳🇱" — Unicode emoji flag</span>
35
+ example<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span> <span class="token comment">// Example local number format (where available)</span>
36
+ <span class="token punctuation">}</span>
37
+ </code></pre>
38
+ <h2 id="examples" tabindex="-1">Examples</h2>
39
+ <h3 id="phone-number-country-selector-(full-list)" tabindex="-1">Phone number country selector (full list)</h3>
40
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> phoneCountryCodes <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
41
+
42
+ <span class="token keyword">const</span> selectOptions <span class="token operator">=</span> phoneCountryCodes<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span>
43
+ label<span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>p<span class="token punctuation">.</span>flag<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>p<span class="token punctuation">.</span>country<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>p<span class="token punctuation">.</span>phoneCode<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">)</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span>
44
+ value<span class="token operator">:</span> p<span class="token punctuation">.</span>code<span class="token punctuation">,</span>
45
+ <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
46
+ <span class="token comment">// [{ label: "🇦🇫 Afghanistan (+93)", value: "AF" }, ...]</span>
47
+ </code></pre>
48
+ <h3 id="look-up-a-specific-country%E2%80%99s-phone-code" tabindex="-1">Look up a specific country’s phone code</h3>
49
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> getPhoneCodeByCountry <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
50
+
51
+ <span class="token keyword">const</span> nl <span class="token operator">=</span> <span class="token function">getPhoneCodeByCountry</span><span class="token punctuation">(</span><span class="token string">"NL"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
52
+ <span class="token comment">// { country: "Netherlands", code: "NL", phoneCode: "+31", flag: "🇳🇱" }</span>
53
+
54
+ <span class="token comment">// Returns undefined for unknown codes</span>
55
+ <span class="token function">getPhoneCodeByCountry</span><span class="token punctuation">(</span><span class="token string">"ZZ"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// undefined</span>
56
+ </code></pre>
57
+ <h3 id="find-all-entries-for-a-shared-dialling-code" tabindex="-1">Find all entries for a shared dialling code</h3>
58
+ <p>Some dialling codes are shared between a country and its territories. For example <code>+1</code> covers the US, Canada, and ~25 Caribbean/Pacific territories.</p>
59
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> getCountriesByPhoneCode <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
60
+
61
+ <span class="token keyword">const</span> plusOne <span class="token operator">=</span> <span class="token function">getCountriesByPhoneCode</span><span class="token punctuation">(</span><span class="token string">"+1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
62
+ <span class="token builtin">console</span><span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>plusOne<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>p <span class="token operator">=></span> p<span class="token punctuation">.</span>code<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
63
+ <span class="token comment">// ["US", "CA", "AG", "AI", "AS", "BB", "BM", ...]</span>
64
+
65
+ <span class="token keyword">const</span> plusFortyFour <span class="token operator">=</span> <span class="token function">getCountriesByPhoneCode</span><span class="token punctuation">(</span><span class="token string">"+44"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
66
+ <span class="token builtin">console</span><span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>plusFortyFour<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>p <span class="token operator">=></span> p<span class="token punctuation">.</span>code<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
67
+ <span class="token comment">// ["GB", "GG", "IM", "JE"]</span>
68
+ </code></pre>
69
+ <h3 id="validate-a-phone-code-prefix" tabindex="-1">Validate a phone code prefix</h3>
70
+ <pre class="language-ts"><code class="language-ts"><span class="token keyword">import</span> <span class="token punctuation">{</span> phoneCountryCodes <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"arev"</span><span class="token punctuation">;</span>
71
+
72
+ <span class="token keyword">const</span> knownCodes <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>phoneCountryCodes<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>p <span class="token operator">=></span> p<span class="token punctuation">.</span>phoneCode<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
73
+ knownCodes<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span><span class="token string">"+31"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span>
74
+ knownCodes<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span><span class="token string">"+999"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span>
75
+ </code></pre>
76
+ <h2 id="coverage" tabindex="-1">Coverage</h2>
77
+ <p><code>phoneCountryCodes</code> includes every entry from <code>countries</code> plus additional territories:</p>
78
+ <ul>
79
+ <li>American Samoa, Anguilla, Bermuda, British Virgin Islands, Cayman Islands</li>
80
+ <li>Christmas Island, Cocos Islands, Cook Islands, Falkland Islands, Faroe Islands</li>
81
+ <li>French Guiana, French Polynesia, Gibraltar, Greenland, Guadeloupe, Guam</li>
82
+ <li>Guernsey, Hong Kong, Isle of Man, Jersey, Macao, Martinique</li>
83
+ <li>Mayotte, Montserrat, New Caledonia, Norfolk Island, Northern Mariana Islands</li>
84
+ <li>Puerto Rico, Réunion, Saint Barthélemy, Saint Helena, Saint Martin</li>
85
+ <li>Saint Pierre and Miquelon, Turks and Caicos Islands, US Virgin Islands</li>
86
+ <li>Wallis and Futuna, Western Sahara</li>
87
+ </ul>
88
+ <p>Total: <strong>~250 entries</strong>.</p>
89
+ <h2 id="related" tabindex="-1">Related</h2>
90
+ <ul>
91
+ <li><a href="countries.md">Countries</a> — the base <code>countries</code> array that <code>phoneCountryCodes</code> extends</li>
92
+ </ul>
93
+
94
+ </div>
95
+ </div>
96
+ </section>
97
+ </main>
98
+ </div>
99
+ <footer class="footer">
100
+ <div class="footer__container">
101
+ <div class="footer__controls">
102
+ <div class="footer__control"><span class="footer__label">Theme</span>
103
+ <button class="color-mode-toggle" type="button" data-color-mode-toggle aria-label="Toggle color mode"><span class="color-mode-toggle__value"></span></button>
104
+ </div>
105
+ </div>
106
+ </div>
107
+ </footer>
108
+ </body>
109
+ <script>const isDarkMode = window.matchMedia("prefers-color-scheme: dark").matches;
110
+ let localMode = isDarkMode ? "dark" : "light";
111
+
112
+ const updateColorModeToggle = () => {
113
+ const toggle = document.querySelector("[data-color-mode-toggle]");
114
+ if (!toggle) return;
115
+
116
+ const value = toggle.querySelector(".color-mode-toggle__value");
117
+ if (!value) return;
118
+
119
+ value.textContent = localMode === "dark" ? "Dark" : "Light";
120
+ };
121
+
122
+ const initColorMode = () => {
123
+ localMode = localStorage.getItem("colorMode");
124
+ setCurrentMode(localMode ? localMode : isDarkMode ? "dark" : "light");
125
+ };
126
+
127
+ const setCurrentMode = (mode) => {
128
+ localMode = mode;
129
+ localStorage.setItem("colorMode", localMode);
130
+ document.body.setAttribute("color-mode", mode);
131
+ updateColorModeToggle();
132
+ };
133
+
134
+ const switchMode = () => {
135
+ if (localMode == "dark") setCurrentMode("light");
136
+ else setCurrentMode("dark");
137
+ };
138
+
139
+ const bindColorModeToggle = () => {
140
+ const toggle = document.querySelector("[data-color-mode-toggle]");
141
+ if (!toggle) return;
142
+
143
+ toggle.addEventListener("click", () => {
144
+ switchMode();
145
+ });
146
+ };
147
+
148
+ initColorMode();
149
+ bindColorModeToggle();
150
+
151
+ </script>
152
+ </html>