@phonecheck/phone-number-validator-js 1.5.1

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 (459) hide show
  1. package/LICENSE.md +12 -0
  2. package/README.md +426 -0
  3. package/lib/index.d.ts +41 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.es.js +110 -0
  6. package/lib/index.js +123 -0
  7. package/lib/index.serverless.d.ts +18 -0
  8. package/lib/index.serverless.d.ts.map +1 -0
  9. package/lib/locales.d.ts +3 -0
  10. package/lib/locales.d.ts.map +1 -0
  11. package/lib/serverless.cjs.js +11614 -0
  12. package/lib/serverless.esm.js +11553 -0
  13. package/lib/serverless.esm.min.js +8 -0
  14. package/lib/serverless.umd.js +11620 -0
  15. package/lib/serverless.umd.min.js +8 -0
  16. package/package.json +104 -0
  17. package/resources/carrier/ar/965.bson +0 -0
  18. package/resources/carrier/be/375.bson +0 -0
  19. package/resources/carrier/en/1.bson +0 -0
  20. package/resources/carrier/en/20.bson +0 -0
  21. package/resources/carrier/en/211.bson +0 -0
  22. package/resources/carrier/en/212.bson +0 -0
  23. package/resources/carrier/en/213.bson +0 -0
  24. package/resources/carrier/en/216.bson +0 -0
  25. package/resources/carrier/en/218.bson +0 -0
  26. package/resources/carrier/en/220.bson +0 -0
  27. package/resources/carrier/en/221.bson +0 -0
  28. package/resources/carrier/en/222.bson +0 -0
  29. package/resources/carrier/en/223.bson +0 -0
  30. package/resources/carrier/en/224.bson +0 -0
  31. package/resources/carrier/en/225.bson +0 -0
  32. package/resources/carrier/en/226.bson +0 -0
  33. package/resources/carrier/en/227.bson +0 -0
  34. package/resources/carrier/en/228.bson +0 -0
  35. package/resources/carrier/en/229.bson +0 -0
  36. package/resources/carrier/en/230.bson +0 -0
  37. package/resources/carrier/en/231.bson +0 -0
  38. package/resources/carrier/en/232.bson +0 -0
  39. package/resources/carrier/en/233.bson +0 -0
  40. package/resources/carrier/en/234.bson +0 -0
  41. package/resources/carrier/en/235.bson +0 -0
  42. package/resources/carrier/en/236.bson +0 -0
  43. package/resources/carrier/en/237.bson +0 -0
  44. package/resources/carrier/en/238.bson +0 -0
  45. package/resources/carrier/en/239.bson +0 -0
  46. package/resources/carrier/en/240.bson +0 -0
  47. package/resources/carrier/en/241.bson +0 -0
  48. package/resources/carrier/en/242.bson +0 -0
  49. package/resources/carrier/en/243.bson +0 -0
  50. package/resources/carrier/en/244.bson +0 -0
  51. package/resources/carrier/en/245.bson +0 -0
  52. package/resources/carrier/en/246.bson +0 -0
  53. package/resources/carrier/en/247.bson +0 -0
  54. package/resources/carrier/en/248.bson +0 -0
  55. package/resources/carrier/en/249.bson +0 -0
  56. package/resources/carrier/en/250.bson +0 -0
  57. package/resources/carrier/en/251.bson +0 -0
  58. package/resources/carrier/en/252.bson +0 -0
  59. package/resources/carrier/en/253.bson +0 -0
  60. package/resources/carrier/en/254.bson +0 -0
  61. package/resources/carrier/en/255.bson +0 -0
  62. package/resources/carrier/en/256.bson +0 -0
  63. package/resources/carrier/en/257.bson +0 -0
  64. package/resources/carrier/en/258.bson +0 -0
  65. package/resources/carrier/en/260.bson +0 -0
  66. package/resources/carrier/en/261.bson +0 -0
  67. package/resources/carrier/en/262.bson +0 -0
  68. package/resources/carrier/en/263.bson +0 -0
  69. package/resources/carrier/en/264.bson +0 -0
  70. package/resources/carrier/en/265.bson +0 -0
  71. package/resources/carrier/en/266.bson +0 -0
  72. package/resources/carrier/en/267.bson +0 -0
  73. package/resources/carrier/en/268.bson +0 -0
  74. package/resources/carrier/en/269.bson +0 -0
  75. package/resources/carrier/en/27.bson +0 -0
  76. package/resources/carrier/en/290.bson +0 -0
  77. package/resources/carrier/en/291.bson +0 -0
  78. package/resources/carrier/en/297.bson +0 -0
  79. package/resources/carrier/en/298.bson +0 -0
  80. package/resources/carrier/en/299.bson +0 -0
  81. package/resources/carrier/en/30.bson +0 -0
  82. package/resources/carrier/en/31.bson +0 -0
  83. package/resources/carrier/en/32.bson +0 -0
  84. package/resources/carrier/en/33.bson +0 -0
  85. package/resources/carrier/en/34.bson +0 -0
  86. package/resources/carrier/en/350.bson +0 -0
  87. package/resources/carrier/en/351.bson +0 -0
  88. package/resources/carrier/en/352.bson +0 -0
  89. package/resources/carrier/en/353.bson +0 -0
  90. package/resources/carrier/en/354.bson +0 -0
  91. package/resources/carrier/en/355.bson +0 -0
  92. package/resources/carrier/en/356.bson +0 -0
  93. package/resources/carrier/en/357.bson +0 -0
  94. package/resources/carrier/en/358.bson +0 -0
  95. package/resources/carrier/en/359.bson +0 -0
  96. package/resources/carrier/en/36.bson +0 -0
  97. package/resources/carrier/en/370.bson +0 -0
  98. package/resources/carrier/en/371.bson +0 -0
  99. package/resources/carrier/en/372.bson +0 -0
  100. package/resources/carrier/en/373.bson +0 -0
  101. package/resources/carrier/en/374.bson +0 -0
  102. package/resources/carrier/en/375.bson +0 -0
  103. package/resources/carrier/en/376.bson +0 -0
  104. package/resources/carrier/en/377.bson +0 -0
  105. package/resources/carrier/en/378.bson +0 -0
  106. package/resources/carrier/en/380.bson +0 -0
  107. package/resources/carrier/en/381.bson +0 -0
  108. package/resources/carrier/en/382.bson +0 -0
  109. package/resources/carrier/en/383.bson +0 -0
  110. package/resources/carrier/en/385.bson +0 -0
  111. package/resources/carrier/en/386.bson +0 -0
  112. package/resources/carrier/en/387.bson +0 -0
  113. package/resources/carrier/en/389.bson +0 -0
  114. package/resources/carrier/en/39.bson +0 -0
  115. package/resources/carrier/en/40.bson +0 -0
  116. package/resources/carrier/en/41.bson +0 -0
  117. package/resources/carrier/en/420.bson +0 -0
  118. package/resources/carrier/en/421.bson +0 -0
  119. package/resources/carrier/en/423.bson +0 -0
  120. package/resources/carrier/en/43.bson +0 -0
  121. package/resources/carrier/en/44.bson +0 -0
  122. package/resources/carrier/en/45.bson +0 -0
  123. package/resources/carrier/en/46.bson +0 -0
  124. package/resources/carrier/en/47.bson +0 -0
  125. package/resources/carrier/en/48.bson +0 -0
  126. package/resources/carrier/en/49.bson +0 -0
  127. package/resources/carrier/en/500.bson +0 -0
  128. package/resources/carrier/en/501.bson +0 -0
  129. package/resources/carrier/en/502.bson +0 -0
  130. package/resources/carrier/en/503.bson +0 -0
  131. package/resources/carrier/en/504.bson +0 -0
  132. package/resources/carrier/en/505.bson +0 -0
  133. package/resources/carrier/en/506.bson +0 -0
  134. package/resources/carrier/en/507.bson +0 -0
  135. package/resources/carrier/en/508.bson +0 -0
  136. package/resources/carrier/en/509.bson +0 -0
  137. package/resources/carrier/en/51.bson +0 -0
  138. package/resources/carrier/en/53.bson +0 -0
  139. package/resources/carrier/en/55.bson +0 -0
  140. package/resources/carrier/en/56.bson +0 -0
  141. package/resources/carrier/en/57.bson +0 -0
  142. package/resources/carrier/en/58.bson +0 -0
  143. package/resources/carrier/en/590.bson +0 -0
  144. package/resources/carrier/en/591.bson +0 -0
  145. package/resources/carrier/en/592.bson +0 -0
  146. package/resources/carrier/en/593.bson +0 -0
  147. package/resources/carrier/en/594.bson +0 -0
  148. package/resources/carrier/en/595.bson +0 -0
  149. package/resources/carrier/en/596.bson +0 -0
  150. package/resources/carrier/en/597.bson +0 -0
  151. package/resources/carrier/en/598.bson +0 -0
  152. package/resources/carrier/en/599.bson +0 -0
  153. package/resources/carrier/en/60.bson +0 -0
  154. package/resources/carrier/en/61.bson +0 -0
  155. package/resources/carrier/en/62.bson +0 -0
  156. package/resources/carrier/en/63.bson +0 -0
  157. package/resources/carrier/en/64.bson +0 -0
  158. package/resources/carrier/en/65.bson +0 -0
  159. package/resources/carrier/en/66.bson +0 -0
  160. package/resources/carrier/en/670.bson +0 -0
  161. package/resources/carrier/en/672.bson +0 -0
  162. package/resources/carrier/en/673.bson +0 -0
  163. package/resources/carrier/en/674.bson +0 -0
  164. package/resources/carrier/en/675.bson +0 -0
  165. package/resources/carrier/en/676.bson +0 -0
  166. package/resources/carrier/en/677.bson +0 -0
  167. package/resources/carrier/en/678.bson +0 -0
  168. package/resources/carrier/en/679.bson +0 -0
  169. package/resources/carrier/en/680.bson +0 -0
  170. package/resources/carrier/en/681.bson +0 -0
  171. package/resources/carrier/en/682.bson +0 -0
  172. package/resources/carrier/en/683.bson +0 -0
  173. package/resources/carrier/en/685.bson +0 -0
  174. package/resources/carrier/en/686.bson +0 -0
  175. package/resources/carrier/en/687.bson +0 -0
  176. package/resources/carrier/en/688.bson +0 -0
  177. package/resources/carrier/en/689.bson +0 -0
  178. package/resources/carrier/en/690.bson +0 -0
  179. package/resources/carrier/en/691.bson +0 -0
  180. package/resources/carrier/en/692.bson +0 -0
  181. package/resources/carrier/en/7.bson +0 -0
  182. package/resources/carrier/en/81.bson +0 -0
  183. package/resources/carrier/en/82.bson +0 -0
  184. package/resources/carrier/en/84.bson +0 -0
  185. package/resources/carrier/en/850.bson +0 -0
  186. package/resources/carrier/en/852.bson +0 -0
  187. package/resources/carrier/en/853.bson +0 -0
  188. package/resources/carrier/en/855.bson +0 -0
  189. package/resources/carrier/en/856.bson +0 -0
  190. package/resources/carrier/en/86.bson +0 -0
  191. package/resources/carrier/en/880.bson +0 -0
  192. package/resources/carrier/en/881.bson +0 -0
  193. package/resources/carrier/en/882.bson +0 -0
  194. package/resources/carrier/en/886.bson +0 -0
  195. package/resources/carrier/en/90.bson +0 -0
  196. package/resources/carrier/en/91.bson +0 -0
  197. package/resources/carrier/en/92.bson +0 -0
  198. package/resources/carrier/en/93.bson +0 -0
  199. package/resources/carrier/en/94.bson +0 -0
  200. package/resources/carrier/en/95.bson +0 -0
  201. package/resources/carrier/en/960.bson +0 -0
  202. package/resources/carrier/en/961.bson +0 -0
  203. package/resources/carrier/en/962.bson +0 -0
  204. package/resources/carrier/en/963.bson +0 -0
  205. package/resources/carrier/en/964.bson +0 -0
  206. package/resources/carrier/en/965.bson +0 -0
  207. package/resources/carrier/en/966.bson +0 -0
  208. package/resources/carrier/en/967.bson +0 -0
  209. package/resources/carrier/en/968.bson +0 -0
  210. package/resources/carrier/en/970.bson +0 -0
  211. package/resources/carrier/en/971.bson +0 -0
  212. package/resources/carrier/en/972.bson +0 -0
  213. package/resources/carrier/en/973.bson +0 -0
  214. package/resources/carrier/en/974.bson +0 -0
  215. package/resources/carrier/en/975.bson +0 -0
  216. package/resources/carrier/en/976.bson +0 -0
  217. package/resources/carrier/en/977.bson +0 -0
  218. package/resources/carrier/en/98.bson +0 -0
  219. package/resources/carrier/en/992.bson +0 -0
  220. package/resources/carrier/en/993.bson +0 -0
  221. package/resources/carrier/en/994.bson +0 -0
  222. package/resources/carrier/en/995.bson +0 -0
  223. package/resources/carrier/en/996.bson +0 -0
  224. package/resources/carrier/en/998.bson +0 -0
  225. package/resources/carrier/fa/93.bson +0 -0
  226. package/resources/carrier/fa/98.bson +0 -0
  227. package/resources/carrier/ko/82.bson +0 -0
  228. package/resources/carrier/ru/374.bson +0 -0
  229. package/resources/carrier/ru/375.bson +0 -0
  230. package/resources/carrier/ru/7.bson +0 -0
  231. package/resources/carrier/uk/380.bson +0 -0
  232. package/resources/carrier/zh/852.bson +0 -0
  233. package/resources/carrier/zh/86.bson +0 -0
  234. package/resources/carrier/zh_Hant/852.bson +0 -0
  235. package/resources/carrier/zh_Hant/86.bson +0 -0
  236. package/resources/geocodes/ar/966.bson +0 -0
  237. package/resources/geocodes/be/375.bson +0 -0
  238. package/resources/geocodes/bg/359.bson +0 -0
  239. package/resources/geocodes/bs/387.bson +0 -0
  240. package/resources/geocodes/de/32.bson +0 -0
  241. package/resources/geocodes/de/352.bson +0 -0
  242. package/resources/geocodes/de/41.bson +0 -0
  243. package/resources/geocodes/de/43.bson +0 -0
  244. package/resources/geocodes/de/49.bson +0 -0
  245. package/resources/geocodes/el/30.bson +0 -0
  246. package/resources/geocodes/en/1.bson +0 -0
  247. package/resources/geocodes/en/20.bson +0 -0
  248. package/resources/geocodes/en/212.bson +0 -0
  249. package/resources/geocodes/en/213.bson +0 -0
  250. package/resources/geocodes/en/216.bson +0 -0
  251. package/resources/geocodes/en/218.bson +0 -0
  252. package/resources/geocodes/en/220.bson +0 -0
  253. package/resources/geocodes/en/221.bson +0 -0
  254. package/resources/geocodes/en/222.bson +0 -0
  255. package/resources/geocodes/en/223.bson +0 -0
  256. package/resources/geocodes/en/224.bson +0 -0
  257. package/resources/geocodes/en/225.bson +0 -0
  258. package/resources/geocodes/en/226.bson +0 -0
  259. package/resources/geocodes/en/227.bson +0 -0
  260. package/resources/geocodes/en/228.bson +0 -0
  261. package/resources/geocodes/en/229.bson +0 -0
  262. package/resources/geocodes/en/230.bson +0 -0
  263. package/resources/geocodes/en/232.bson +0 -0
  264. package/resources/geocodes/en/233.bson +0 -0
  265. package/resources/geocodes/en/234.bson +0 -0
  266. package/resources/geocodes/en/236.bson +0 -0
  267. package/resources/geocodes/en/237.bson +0 -0
  268. package/resources/geocodes/en/238.bson +0 -0
  269. package/resources/geocodes/en/239.bson +0 -0
  270. package/resources/geocodes/en/240.bson +0 -0
  271. package/resources/geocodes/en/241.bson +0 -0
  272. package/resources/geocodes/en/242.bson +0 -0
  273. package/resources/geocodes/en/243.bson +0 -0
  274. package/resources/geocodes/en/244.bson +0 -0
  275. package/resources/geocodes/en/245.bson +0 -0
  276. package/resources/geocodes/en/247.bson +0 -0
  277. package/resources/geocodes/en/249.bson +0 -0
  278. package/resources/geocodes/en/251.bson +0 -0
  279. package/resources/geocodes/en/252.bson +0 -0
  280. package/resources/geocodes/en/254.bson +0 -0
  281. package/resources/geocodes/en/255.bson +0 -0
  282. package/resources/geocodes/en/256.bson +0 -0
  283. package/resources/geocodes/en/257.bson +0 -0
  284. package/resources/geocodes/en/258.bson +0 -0
  285. package/resources/geocodes/en/260.bson +0 -0
  286. package/resources/geocodes/en/261.bson +0 -0
  287. package/resources/geocodes/en/263.bson +0 -0
  288. package/resources/geocodes/en/264.bson +0 -0
  289. package/resources/geocodes/en/266.bson +0 -0
  290. package/resources/geocodes/en/267.bson +0 -0
  291. package/resources/geocodes/en/268.bson +0 -0
  292. package/resources/geocodes/en/269.bson +0 -0
  293. package/resources/geocodes/en/27.bson +0 -0
  294. package/resources/geocodes/en/290.bson +0 -0
  295. package/resources/geocodes/en/299.bson +0 -0
  296. package/resources/geocodes/en/30.bson +0 -0
  297. package/resources/geocodes/en/31.bson +0 -0
  298. package/resources/geocodes/en/32.bson +0 -0
  299. package/resources/geocodes/en/34.bson +0 -0
  300. package/resources/geocodes/en/351.bson +0 -0
  301. package/resources/geocodes/en/352.bson +0 -0
  302. package/resources/geocodes/en/353.bson +0 -0
  303. package/resources/geocodes/en/354.bson +0 -0
  304. package/resources/geocodes/en/355.bson +0 -0
  305. package/resources/geocodes/en/358.bson +0 -0
  306. package/resources/geocodes/en/359.bson +0 -0
  307. package/resources/geocodes/en/36.bson +0 -0
  308. package/resources/geocodes/en/370.bson +0 -0
  309. package/resources/geocodes/en/373.bson +0 -0
  310. package/resources/geocodes/en/374.bson +0 -0
  311. package/resources/geocodes/en/375.bson +0 -0
  312. package/resources/geocodes/en/380.bson +0 -0
  313. package/resources/geocodes/en/381.bson +0 -0
  314. package/resources/geocodes/en/382.bson +0 -0
  315. package/resources/geocodes/en/383.bson +0 -0
  316. package/resources/geocodes/en/385.bson +0 -0
  317. package/resources/geocodes/en/386.bson +0 -0
  318. package/resources/geocodes/en/387.bson +0 -0
  319. package/resources/geocodes/en/389.bson +0 -0
  320. package/resources/geocodes/en/39.bson +0 -0
  321. package/resources/geocodes/en/40.bson +0 -0
  322. package/resources/geocodes/en/41.bson +0 -0
  323. package/resources/geocodes/en/420.bson +0 -0
  324. package/resources/geocodes/en/421.bson +0 -0
  325. package/resources/geocodes/en/43.bson +0 -0
  326. package/resources/geocodes/en/44.bson +0 -0
  327. package/resources/geocodes/en/46.bson +0 -0
  328. package/resources/geocodes/en/47.bson +0 -0
  329. package/resources/geocodes/en/48.bson +0 -0
  330. package/resources/geocodes/en/49.bson +0 -0
  331. package/resources/geocodes/en/501.bson +0 -0
  332. package/resources/geocodes/en/504.bson +0 -0
  333. package/resources/geocodes/en/51.bson +0 -0
  334. package/resources/geocodes/en/52.bson +0 -0
  335. package/resources/geocodes/en/53.bson +0 -0
  336. package/resources/geocodes/en/54.bson +0 -0
  337. package/resources/geocodes/en/55.bson +0 -0
  338. package/resources/geocodes/en/56.bson +0 -0
  339. package/resources/geocodes/en/57.bson +0 -0
  340. package/resources/geocodes/en/58.bson +0 -0
  341. package/resources/geocodes/en/592.bson +0 -0
  342. package/resources/geocodes/en/593.bson +0 -0
  343. package/resources/geocodes/en/595.bson +0 -0
  344. package/resources/geocodes/en/598.bson +0 -0
  345. package/resources/geocodes/en/599.bson +0 -0
  346. package/resources/geocodes/en/61.bson +0 -0
  347. package/resources/geocodes/en/62.bson +0 -0
  348. package/resources/geocodes/en/63.bson +0 -0
  349. package/resources/geocodes/en/64.bson +0 -0
  350. package/resources/geocodes/en/66.bson +0 -0
  351. package/resources/geocodes/en/670.bson +0 -0
  352. package/resources/geocodes/en/672.bson +0 -0
  353. package/resources/geocodes/en/673.bson +0 -0
  354. package/resources/geocodes/en/675.bson +0 -0
  355. package/resources/geocodes/en/676.bson +0 -0
  356. package/resources/geocodes/en/678.bson +0 -0
  357. package/resources/geocodes/en/679.bson +0 -0
  358. package/resources/geocodes/en/680.bson +0 -0
  359. package/resources/geocodes/en/682.bson +0 -0
  360. package/resources/geocodes/en/685.bson +0 -0
  361. package/resources/geocodes/en/686.bson +0 -0
  362. package/resources/geocodes/en/688.bson +0 -0
  363. package/resources/geocodes/en/689.bson +0 -0
  364. package/resources/geocodes/en/690.bson +0 -0
  365. package/resources/geocodes/en/7.bson +0 -0
  366. package/resources/geocodes/en/81.bson +0 -0
  367. package/resources/geocodes/en/82.bson +0 -0
  368. package/resources/geocodes/en/84.bson +0 -0
  369. package/resources/geocodes/en/850.bson +0 -0
  370. package/resources/geocodes/en/86.bson +0 -0
  371. package/resources/geocodes/en/880.bson +0 -0
  372. package/resources/geocodes/en/886.bson +0 -0
  373. package/resources/geocodes/en/90.bson +0 -0
  374. package/resources/geocodes/en/91.bson +0 -0
  375. package/resources/geocodes/en/92.bson +0 -0
  376. package/resources/geocodes/en/93.bson +0 -0
  377. package/resources/geocodes/en/94.bson +0 -0
  378. package/resources/geocodes/en/95.bson +0 -0
  379. package/resources/geocodes/en/960.bson +0 -0
  380. package/resources/geocodes/en/961.bson +0 -0
  381. package/resources/geocodes/en/962.bson +0 -0
  382. package/resources/geocodes/en/963.bson +0 -0
  383. package/resources/geocodes/en/966.bson +0 -0
  384. package/resources/geocodes/en/967.bson +0 -0
  385. package/resources/geocodes/en/968.bson +0 -0
  386. package/resources/geocodes/en/970.bson +0 -0
  387. package/resources/geocodes/en/971.bson +0 -0
  388. package/resources/geocodes/en/972.bson +0 -0
  389. package/resources/geocodes/en/975.bson +0 -0
  390. package/resources/geocodes/en/976.bson +0 -0
  391. package/resources/geocodes/en/98.bson +0 -0
  392. package/resources/geocodes/en/992.bson +0 -0
  393. package/resources/geocodes/en/993.bson +0 -0
  394. package/resources/geocodes/en/994.bson +0 -0
  395. package/resources/geocodes/en/995.bson +0 -0
  396. package/resources/geocodes/en/996.bson +0 -0
  397. package/resources/geocodes/es/228.bson +0 -0
  398. package/resources/geocodes/es/230.bson +0 -0
  399. package/resources/geocodes/es/34.bson +0 -0
  400. package/resources/geocodes/es/52.bson +0 -0
  401. package/resources/geocodes/es/54.bson +0 -0
  402. package/resources/geocodes/es/56.bson +0 -0
  403. package/resources/geocodes/es/57.bson +0 -0
  404. package/resources/geocodes/es/58.bson +0 -0
  405. package/resources/geocodes/fa/93.bson +0 -0
  406. package/resources/geocodes/fa/98.bson +0 -0
  407. package/resources/geocodes/fi/358.bson +0 -0
  408. package/resources/geocodes/fr/212.bson +0 -0
  409. package/resources/geocodes/fr/222.bson +0 -0
  410. package/resources/geocodes/fr/225.bson +0 -0
  411. package/resources/geocodes/fr/228.bson +0 -0
  412. package/resources/geocodes/fr/229.bson +0 -0
  413. package/resources/geocodes/fr/230.bson +0 -0
  414. package/resources/geocodes/fr/242.bson +0 -0
  415. package/resources/geocodes/fr/243.bson +0 -0
  416. package/resources/geocodes/fr/269.bson +0 -0
  417. package/resources/geocodes/fr/290.bson +0 -0
  418. package/resources/geocodes/fr/32.bson +0 -0
  419. package/resources/geocodes/fr/352.bson +0 -0
  420. package/resources/geocodes/fr/41.bson +0 -0
  421. package/resources/geocodes/hr/387.bson +0 -0
  422. package/resources/geocodes/hu/36.bson +0 -0
  423. package/resources/geocodes/hy/374.bson +0 -0
  424. package/resources/geocodes/id/62.bson +0 -0
  425. package/resources/geocodes/it/39.bson +0 -0
  426. package/resources/geocodes/it/41.bson +0 -0
  427. package/resources/geocodes/iw/972.bson +0 -0
  428. package/resources/geocodes/ja/81.bson +0 -0
  429. package/resources/geocodes/ko/82.bson +0 -0
  430. package/resources/geocodes/nl/31.bson +0 -0
  431. package/resources/geocodes/nl/32.bson +0 -0
  432. package/resources/geocodes/pl/48.bson +0 -0
  433. package/resources/geocodes/pt/238.bson +0 -0
  434. package/resources/geocodes/pt/239.bson +0 -0
  435. package/resources/geocodes/pt/244.bson +0 -0
  436. package/resources/geocodes/pt/245.bson +0 -0
  437. package/resources/geocodes/pt/258.bson +0 -0
  438. package/resources/geocodes/pt/351.bson +0 -0
  439. package/resources/geocodes/pt/55.bson +0 -0
  440. package/resources/geocodes/ro/373.bson +0 -0
  441. package/resources/geocodes/ro/40.bson +0 -0
  442. package/resources/geocodes/ru/373.bson +0 -0
  443. package/resources/geocodes/ru/374.bson +0 -0
  444. package/resources/geocodes/ru/375.bson +0 -0
  445. package/resources/geocodes/ru/7.bson +0 -0
  446. package/resources/geocodes/sq/383.bson +0 -0
  447. package/resources/geocodes/sr/381.bson +0 -0
  448. package/resources/geocodes/sr/383.bson +0 -0
  449. package/resources/geocodes/sr/387.bson +0 -0
  450. package/resources/geocodes/sv/358.bson +0 -0
  451. package/resources/geocodes/sv/46.bson +0 -0
  452. package/resources/geocodes/th/66.bson +0 -0
  453. package/resources/geocodes/tr/90.bson +0 -0
  454. package/resources/geocodes/uk/380.bson +0 -0
  455. package/resources/geocodes/vi/84.bson +0 -0
  456. package/resources/geocodes/zh/86.bson +0 -0
  457. package/resources/geocodes/zh/886.bson +0 -0
  458. package/resources/geocodes/zh_Hant/886.bson +0 -0
  459. package/resources/timezones.bson +0 -0
package/LICENSE.md ADDED
@@ -0,0 +1,12 @@
1
+ Business Source License 1.1
2
+ =====================
3
+ Business Source License 1.1 https://mariadb.com/bsl11/
4
+
5
+ Licensor: PHONE-CHECK.APP, Ltd.
6
+
7
+ Licensed Work: Phone Number Validator
8
+
9
+ Additional Use Grant: None
10
+
11
+ Copyright 2015-present PHONE-CHECK.APP, Ltd.
12
+
package/README.md ADDED
@@ -0,0 +1,426 @@
1
+ # Phone Number information lookup, validation, carrier name, geo and timezone infos
2
+
3
+ [![NPM version](https://badgen.net/npm/v/@phonecheck/phone-number-validator-js)](https://npm.im/@phonecheck/phone-number-validator-js)
4
+ [![Build Status](https://github.com/phone-check-app/phone-number-validator-js/workflows/CI/badge.svg)](https://github.com/phone-check-app/phone-number-validator-js/actions)
5
+ [![Downloads](https://img.shields.io/npm/dm/@phonecheck/phone-number-validator-js.svg)](https://www.npmjs.com/package/@phonecheck/phone-number-validator-js)
6
+ [![UNPKG](https://img.shields.io/badge/UNPKG-OK-179BD7.svg)](https://unpkg.com/browse/@phonecheck/phone-number-validator-js@latest/)
7
+
8
+ ### Verify phone number, validate format, checking carrier name, geo and timezone infos.
9
+
10
+ > This library includes phone number lookup and validation, and the geocoding, carrier mapping and timezone mapping functionalities that are available in some of googles [libphonenumber](https://github.com/google/libphonenumber) libraries.
11
+ >
12
+ > To reduce the amount of data that needs to be loaded to geocode / carrier map a phone-number for each mapping only the relevant number prefixes are loaded from a binary json file (BSON).
13
+ When the prefix could not be found in the provided locale the library tries to fall back to `en` as locale.
14
+ >
15
+ > The library supports Node.js only at the moment.
16
+
17
+
18
+ ## Features
19
+ ✅ Check phone number validity
20
+
21
+ ✅ Check phone number format
22
+
23
+ ✅ Check phone number carrier name
24
+
25
+ ✅ Check phone number geolocation (city)
26
+
27
+ ✅ Check phone number timezone
28
+
29
+ ✅ Check phone number country code
30
+
31
+ ✅ High-performance LRU caching with configurable size
32
+
33
+ ✅ Comprehensive error handling and input validation
34
+
35
+ ✅ TypeScript support with strict type safety
36
+
37
+ ✅ Serverless architecture support (AWS Lambda, Cloudflare Workers, Vercel Edge, Deno)
38
+
39
+
40
+ ## Use cases
41
+ - Increase delivery rate of SMS campaigns by removing invalid phone numbers
42
+ - Increase SMS open rate and your marketing IPs reputation
43
+ - Protect your website from spam, bots and fake phone numbers
44
+ - Protect your product signup form from fake phone numbers
45
+ - Protect your website forms from fake phone numbers
46
+ - Protect your self from fraud orders and accounts using fake phone numbers
47
+ - Integrate phone number verification into your website forms
48
+ - Integrate phone number verification into your backoffice administration and order processing
49
+ - Integrate phone number verification into your mobile apps
50
+
51
+ ## API / Cloud Hosted Service
52
+ We offer this `phone verification and validation and more advanced features` in our Scalable Cloud API Service Offering - You could try it here [Phone Number Verification](https://phone-check.app/products/phone)
53
+
54
+ ---
55
+
56
+ ## installation and usage instructions
57
+
58
+ ## Installation
59
+
60
+ ```sh
61
+ npm install @phonecheck/phone-number-validator-js
62
+ ```
63
+
64
+ or
65
+
66
+ ```sh
67
+ yarn add @phonecheck/phone-number-validator-js
68
+ ```
69
+
70
+ ## Usage
71
+
72
+ ### Core Methods
73
+
74
+ - `geocoder(phonenumber: PhoneNumber, locale?: GeocoderLocale = 'en'): string | null` - Resolved to the geocode or null if no geocode could be found (e.g. for mobile numbers)
75
+ - `carrier(phonenumber: PhoneNumber, locale?: CarrierLocale = 'en'): string | null` - Resolves to the carrier or null if non could be found (e.g. for fixed line numbers)
76
+ - `timezones(phonenumber: PhoneNumber): Array<string> | null` - Resolved to an array of timezones or null if non where found.
77
+
78
+ ### Cache Management Methods
79
+
80
+ - `clearCache(): void` - Clear all cached data
81
+ - `getCacheSize(): number` - Get current cache size
82
+ - `setCacheSize(size: number): void` - Set maximum cache size (default: 100)
83
+
84
+ ## Examples
85
+
86
+ ### Basic Usage
87
+
88
+ ```js
89
+ import { geocoder, carrier, timezones, parsePhoneNumberFromString } from '@phonecheck/phone-number-validator-js'
90
+
91
+ const fixedLineNumber = parsePhoneNumberFromString('+41431234567')
92
+ const locationEN = geocoder(fixedLineNumber) // Zurich
93
+ const locationDE = geocoder(fixedLineNumber, 'de') // Zürich
94
+ const locationIT = geocoder(fixedLineNumber, 'it') // Zurigo
95
+
96
+ const mobileNumber = parsePhoneNumberFromString('+8619912345678')
97
+ const carrierEN = carrier(mobileNumber) // China Telecom
98
+ const carrierZH = carrier(mobileNumber, 'zh') // 中国电信
99
+
100
+ const fixedLineNumber2 = parsePhoneNumberFromString('+49301234567')
101
+ const tzones = timezones(fixedLineNumber2) // ['Europe/Berlin']
102
+ ```
103
+
104
+ ### Cache Management
105
+
106
+ ```js
107
+ import {
108
+ clearCache,
109
+ getCacheSize,
110
+ setCacheSize,
111
+ geocoder,
112
+ parsePhoneNumberFromString
113
+ } from '@phonecheck/phone-number-validator-js'
114
+
115
+ // Adjust cache size based on your needs
116
+ setCacheSize(50) // Limit to 50 entries
117
+
118
+ // Monitor cache usage
119
+ console.log(`Cache size: ${getCacheSize()}`)
120
+
121
+ // Perform lookups
122
+ const phoneNumber = parsePhoneNumberFromString('+41431234567')
123
+ const location = geocoder(phoneNumber)
124
+
125
+ // Clear cache when needed
126
+ if (getCacheSize() > 40) {
127
+ clearCache()
128
+ }
129
+
130
+ // For long-running processes, you might want to clear cache periodically
131
+ setInterval(() => {
132
+ clearCache()
133
+ }, 3600000) // Clear every hour
134
+ ```
135
+
136
+ ### Error Handling
137
+
138
+ ```js
139
+ import { geocoder, parsePhoneNumberFromString } from '@phonecheck/phone-number-validator-js'
140
+
141
+ // Invalid phone numbers return null
142
+ const invalid = parsePhoneNumberFromString('invalid')
143
+ const result = geocoder(invalid) // null
144
+
145
+ // Undefined/null inputs are handled gracefully
146
+ const result2 = geocoder(undefined) // null
147
+ const result3 = geocoder(null) // null
148
+ ```
149
+
150
+ ### TypeScript Usage
151
+
152
+ ```typescript
153
+ import {
154
+ geocoder,
155
+ carrier,
156
+ timezones,
157
+ parsePhoneNumberFromString,
158
+ PhoneNumber,
159
+ GeocoderLocale,
160
+ CarrierLocale
161
+ } from '@phonecheck/phone-number-validator-js'
162
+
163
+ // Type-safe locale usage
164
+ const phoneNumber: PhoneNumber | undefined = parsePhoneNumberFromString('+41431234567')
165
+ const locale: GeocoderLocale = 'de'
166
+
167
+ const location: string | null = geocoder(phoneNumber, locale)
168
+ const carrierInfo: string | null = carrier(phoneNumber)
169
+ const tzs: string[] | null = timezones(phoneNumber)
170
+
171
+ // Cache management with types
172
+ import { setCacheSize, getCacheSize, clearCache } from '@phonecheck/phone-number-validator-js'
173
+
174
+ const size: number = getCacheSize()
175
+ setCacheSize(50)
176
+ clearCache()
177
+ ```
178
+
179
+ ## Serverless Support
180
+
181
+ The library provides a lightweight serverless version that's optimized for edge environments like AWS Lambda, Cloudflare Workers, Vercel Edge Functions, and Deno Deploy.
182
+
183
+ ### Features
184
+ - **244KB bundle size** (minified) - fits well under most size limits
185
+ - **No Node.js dependencies** - runs in any JavaScript environment
186
+ - **Resource loader pattern** - load data from your preferred storage (S3, R2, KV, etc.)
187
+ - **Same API** - drop-in replacement for the standard version
188
+
189
+ ### Installation for Serverless
190
+
191
+ ```js
192
+ // Use the serverless entry point
193
+ import {
194
+ setResourceLoader,
195
+ parsePhoneNumber,
196
+ geocoder,
197
+ carrier,
198
+ timezones
199
+ } from '@phonecheck/phone-number-validator-js/serverless'
200
+ ```
201
+
202
+ ### Serverless Examples
203
+
204
+ #### AWS Lambda
205
+ ```js
206
+ import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3'
207
+ import { setResourceLoader, geocoder, parsePhoneNumber } from '@phonecheck/phone-number-validator-js/serverless'
208
+
209
+ const s3 = new S3Client()
210
+
211
+ // Set up resource loader
212
+ setResourceLoader({
213
+ async loadResource(path) {
214
+ try {
215
+ const command = new GetObjectCommand({
216
+ Bucket: process.env.RESOURCES_BUCKET,
217
+ Key: `phone-validator/${path}`
218
+ })
219
+ const response = await s3.send(command)
220
+ return new Uint8Array(await response.Body.transformToByteArray())
221
+ } catch {
222
+ return null
223
+ }
224
+ }
225
+ })
226
+
227
+ // Lambda handler
228
+ export async function handler(event) {
229
+ const phoneNumber = parsePhoneNumber(event.phone, event.country)
230
+ const location = await geocoder(phoneNumber)
231
+
232
+ return {
233
+ statusCode: 200,
234
+ body: JSON.stringify({ location })
235
+ }
236
+ }
237
+ ```
238
+
239
+ #### Cloudflare Workers
240
+ ```js
241
+ import { setResourceLoader, carrier, parsePhoneNumber } from '@phonecheck/phone-number-validator-js/serverless'
242
+
243
+ // Use R2 storage for resources
244
+ setResourceLoader({
245
+ async loadResource(path) {
246
+ const object = await env.RESOURCES_BUCKET.get(`phone-validator/${path}`)
247
+ if (!object) return null
248
+ const buffer = await object.arrayBuffer()
249
+ return new Uint8Array(buffer)
250
+ }
251
+ })
252
+
253
+ export default {
254
+ async fetch(request, env) {
255
+ const url = new URL(request.url)
256
+ const phone = url.searchParams.get('phone')
257
+
258
+ const phoneNumber = parsePhoneNumber(phone)
259
+ const carrierInfo = await carrier(phoneNumber)
260
+
261
+ return Response.json({ carrier: carrierInfo })
262
+ }
263
+ }
264
+ ```
265
+
266
+ #### Vercel Edge Functions
267
+ ```js
268
+ import { setResourceLoader, timezones, parsePhoneNumber } from '@phonecheck/phone-number-validator-js/serverless'
269
+
270
+ // Use Vercel Blob storage
271
+ setResourceLoader({
272
+ async loadResource(path) {
273
+ const response = await fetch(`${process.env.BLOB_URL}/phone-validator/${path}`)
274
+ if (!response.ok) return null
275
+ const buffer = await response.arrayBuffer()
276
+ return new Uint8Array(buffer)
277
+ }
278
+ })
279
+
280
+ export const config = { runtime: 'edge' }
281
+
282
+ export default async function handler(req) {
283
+ const { phone } = await req.json()
284
+ const phoneNumber = parsePhoneNumber(phone)
285
+ const tzs = await timezones(phoneNumber)
286
+
287
+ return Response.json({ timezones: tzs })
288
+ }
289
+ ```
290
+
291
+ ### Resource Files
292
+
293
+ The serverless version requires resource files to be deployed separately. Download them from the npm package:
294
+
295
+ ```bash
296
+ # Extract resource files from the npm package
297
+ npm pack @phonecheck/phone-number-validator-js
298
+ tar -xf phonecheck-phone-number-validator-js-*.tgz
299
+ cp -r package/resources/* your-storage-location/
300
+ ```
301
+
302
+ Then upload to your preferred storage (S3, R2, Blob storage, etc.) and configure the resource loader accordingly.
303
+
304
+ ### Performance Tips
305
+
306
+ 1. **Use caching**: The library includes built-in LRU caching
307
+ 2. **Deploy resources to the same region** as your functions for lower latency
308
+ 3. **Consider using CDN** for resource files if serving globally
309
+ 4. **Use sync loader** when possible for better performance:
310
+
311
+ ```js
312
+ // Sync loader for environments that support it
313
+ setResourceLoader({
314
+ loadResourceSync(path) {
315
+ // Synchronous loading implementation
316
+ return loadFromCacheSync(path)
317
+ },
318
+ async loadResource(path) {
319
+ // Async fallback
320
+ return loadFromCacheAsync(path)
321
+ }
322
+ })
323
+ ```
324
+
325
+ For detailed serverless deployment guides, see [SERVERLESS.md](./SERVERLESS.md).
326
+
327
+
328
+ ## Performance
329
+
330
+ The library uses [tiny-lru](https://www.npmjs.com/package/tiny-lru) for high-performance caching:
331
+
332
+ - **O(1) complexity** for cache operations (get, set, delete)
333
+ - **LRU eviction** when cache reaches the size limit
334
+ - **Configurable cache size** to balance memory usage and performance
335
+ - **<1ms lookups** after initial data load
336
+
337
+ ## Building
338
+
339
+ Build the library for both standard and serverless environments:
340
+
341
+ ```bash
342
+ yarn build
343
+ ```
344
+
345
+ This command:
346
+ - Creates optimized bundles for CommonJS and ES modules
347
+ - Generates TypeScript declaration files
348
+ - Builds both standard and serverless versions
349
+
350
+ ## Testing
351
+
352
+ ```bash
353
+ yarn test
354
+ ```
355
+
356
+ Run tests in production mode (suppresses debug logs):
357
+
358
+ ```bash
359
+ NODE_ENV=production yarn test
360
+ ```
361
+
362
+ ## Contributing
363
+ Please feel free to open an issue or create a pull request and fix bugs or add features, All contributions are welcome. Thank you!
364
+
365
+ ## Support
366
+
367
+ For issues, questions, or commercial licensing:
368
+
369
+ 🐛 [Open an Issue](https://github.com/phone-check-app/phone-number-validator-js/issues)
370
+ 📧 [Email Support](mailto:support@phone-check.app)
371
+ 📄 [Commercial License](https://phone-check.app/license/phone-number-validator)
372
+ 🌐 [Visit phone-check.app](https://phone-check.app)
373
+
374
+ ## LICENSE
375
+ Business Source License 1.1 - see [LICENSE](LICENSE.md) file for details.
376
+
377
+ ### 📝 When Do You Need a Commercial License?
378
+
379
+ The BSL allows use only for non-production purposes. Here's a comprehensive guide to help you understand when you need a commercial license:
380
+
381
+ | Use Case | Commercial License Required? | Details |
382
+ |----------|-----------|---------|
383
+ | **Personal & Learning** | | |
384
+ | 🔬 Exploring phone-number-validator-js for research or learning | ✅ **No** | Use freely for educational purposes |
385
+ | 🎨 Personal hobby projects (non-commercial) | ✅ **No** | Build personal tools and experiments |
386
+ | 🧪 Testing and evaluation in development environment | ✅ **No** | Test all features before purchasing |
387
+ | **Development & Prototyping** | | |
388
+ | 💡 Building proof-of-concept applications | ✅ **No** | Create demos and prototypes |
389
+ | 🛠️ Internal tools (not customer-facing) | ✅ **No** | Use for internal development tools |
390
+ | 📚 Open source projects (non-commercial) | ✅ **No** | Contribute to the community |
391
+ | **Commercial & Production Use** | | |
392
+ | 💰 Revenue-generating applications | ❌ **Yes** | Any app that generates income |
393
+ | ☁️ Software as a Service (SaaS) products | ❌ **Yes** | Cloud-based service offerings |
394
+ | 📦 Distributed commercial software | ❌ **Yes** | Software sold to customers |
395
+ | 🏢 Enterprise production systems | ❌ **Yes** | Business-critical applications |
396
+ | 🔄 Forking for commercial purposes | ❌ **Yes** | Creating derivative commercial products |
397
+ | 🏭 Production use in any form | ❌ **Yes** | Live systems serving real users |
398
+ | **Specific Scenarios** | | |
399
+ | 🎓 Student projects and coursework | ✅ **No** | Academic use is encouraged |
400
+ | 🏗️ CI/CD pipelines (for commercial products) | ❌ **Yes** | Part of commercial development |
401
+ | 📱 Phone validation in production APIs | ❌ **Yes** | Production service usage |
402
+ | 🛒 E-commerce checkout validation | ❌ **Yes** | Revenue-related validation |
403
+ | 📱 Mobile apps (free with ads or paid) | ❌ **Yes** | Monetized applications |
404
+
405
+ ### 💡 Quick Decision Guide
406
+
407
+ Ask yourself these questions:
408
+ 1. **Will real users interact with this in production?** → You need a license
409
+ 2. **Will this help generate revenue?** → You need a license
410
+ 3. **Is this for learning or testing only?** → No license needed
411
+ 4. **Is this an internal prototype or POC?** → No license needed
412
+
413
+ ### 🎯 Why Choose Our Commercial License?
414
+
415
+ ✨ **Unlimited Usage** - Use in all your production applications
416
+ 🚀 **Priority Support** - Direct support from our engineering team
417
+ 🔄 **Regular Updates** - Get the latest features and improvements
418
+ 🛡️ **Legal Protection** - Full commercial rights and warranty
419
+ 🏢 **Enterprise Ready** - Suitable for large-scale deployments
420
+
421
+ ### 📄 Get Your Commercial License
422
+
423
+ Ready to use phone-number-validator-js in production?
424
+
425
+ 🛍️ **[Purchase a License](https://phone-check.app/license/phone-number-validator)** - Simple pricing, instant activation
426
+ 📧 **[Contact Sales](mailto:sales@phone-check.app?subject=Interested%20in%20phone-number-validator-js%20commercial%20license)** - For enterprise or custom needs
package/lib/index.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ export * from 'libphonenumber-js';
2
+ import type { PhoneNumber } from 'libphonenumber-js';
3
+ import type { CarrierLocale, GeocoderLocale } from './locales';
4
+ /**
5
+ * Provides geographical information related to the phone number
6
+ *
7
+ * @param phonenumber The phone number
8
+ * @param locale The preferred locale to use (falls back to `en` if there are no localized carrier infos for the given locale)
9
+ */
10
+ export declare function geocoder(phonenumber: PhoneNumber | undefined, locale?: GeocoderLocale): string | null;
11
+ /**
12
+ * Maps the phone number to the original carrier
13
+ *
14
+ * **Note:** This method cannot provide data about the current carrier of the phone number,
15
+ * only the original carrier who is assigned to the corresponding range.
16
+ * @see https://github.com/google/libphonenumber#mapping-phone-numbers-to-original-carriers
17
+ *
18
+ * @param phonenumber The phone number
19
+ * @param locale The preferred locale to use (falls back to `en` if there are no localized carrier infos for the given locale)
20
+ */
21
+ export declare function carrier(phonenumber: PhoneNumber | undefined, locale?: CarrierLocale): string | null;
22
+ /**
23
+ * Provides all timezones related to the phone number
24
+ * @param phonenumber The phone number
25
+ */
26
+ export declare function timezones(phonenumber: PhoneNumber | undefined): string[] | null;
27
+ /**
28
+ * Clear the internal cache
29
+ * Useful for memory management in long-running processes
30
+ */
31
+ export declare function clearCache(): void;
32
+ /**
33
+ * Get current cache size
34
+ */
35
+ export declare function getCacheSize(): number;
36
+ /**
37
+ * Set cache max size
38
+ * @param size New maximum cache size
39
+ */
40
+ export declare function setCacheSize(size: number): void;
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAKjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAgG9D;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,GAAE,cAAqB,iBAE3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,GAAE,aAAoB,iBAEzF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,mBAmB7D;AAED;;;GAGG;AACH,wBAAgB,UAAU,SAEzB;AAED;;GAEG;AACH,wBAAgB,YAAY,WAE3B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,QAexC"}
@@ -0,0 +1,110 @@
1
+ export * from 'libphonenumber-js';
2
+ import { readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { deserialize } from 'bson';
5
+ import { lru } from 'tiny-lru';
6
+
7
+ const DEFAULT_CACHE_SIZE = 100;
8
+ let codeDataCache = lru(DEFAULT_CACHE_SIZE);
9
+ function getCode(dataPath, nationalNumber) {
10
+ if (!dataPath || !nationalNumber) {
11
+ return null;
12
+ }
13
+ try {
14
+ let data = codeDataCache.get(dataPath);
15
+ if (!data) {
16
+ const bData = readFileSync(dataPath);
17
+ data = deserialize(bData);
18
+ codeDataCache.set(dataPath, data);
19
+ }
20
+ let prefix = nationalNumber;
21
+ while (prefix.length > 0) {
22
+ const description = data[prefix];
23
+ if (description) {
24
+ return description;
25
+ }
26
+ prefix = prefix.substring(0, prefix.length - 1);
27
+ }
28
+ } catch (err) {
29
+ if (process.env.NODE_ENV !== "production") {
30
+ console.error(`Error loading data from ${dataPath}:`, err);
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ function getLocalizedData(resourceType, phonenumber, locale, fallbackLocale = "en") {
36
+ var _a, _b;
37
+ if (!phonenumber) {
38
+ return null;
39
+ }
40
+ const nationalNumber = (_a = phonenumber.nationalNumber) == null ? void 0 : _a.toString();
41
+ const countryCallingCode = (_b = phonenumber.countryCallingCode) == null ? void 0 : _b.toString();
42
+ if (!nationalNumber || !countryCallingCode) {
43
+ return null;
44
+ }
45
+ let dataPath = join(
46
+ __dirname,
47
+ "../resources/",
48
+ resourceType,
49
+ locale,
50
+ `${countryCallingCode}.bson`
51
+ );
52
+ const code = getCode(dataPath, nationalNumber);
53
+ if (code) {
54
+ return code;
55
+ }
56
+ if (locale !== fallbackLocale) {
57
+ dataPath = join(
58
+ __dirname,
59
+ "../resources/",
60
+ resourceType,
61
+ fallbackLocale,
62
+ `${countryCallingCode}.bson`
63
+ );
64
+ return getCode(dataPath, nationalNumber);
65
+ }
66
+ return null;
67
+ }
68
+ function geocoder(phonenumber, locale = "en") {
69
+ return getLocalizedData("geocodes", phonenumber, locale, "en");
70
+ }
71
+ function carrier(phonenumber, locale = "en") {
72
+ return getLocalizedData("carrier", phonenumber, locale, "en");
73
+ }
74
+ function timezones(phonenumber) {
75
+ if (!phonenumber || !phonenumber.number) {
76
+ return null;
77
+ }
78
+ let nr = phonenumber.number.toString();
79
+ if (!nr) {
80
+ return null;
81
+ }
82
+ nr = nr.replace(/^\+/, "");
83
+ const dataPath = join(__dirname, "../resources/timezones.bson");
84
+ const zones = getCode(dataPath, nr);
85
+ if (typeof zones === "string" && zones.length > 0) {
86
+ return zones.split("&").filter((zone) => zone.length > 0);
87
+ }
88
+ return null;
89
+ }
90
+ function clearCache() {
91
+ codeDataCache.clear();
92
+ }
93
+ function getCacheSize() {
94
+ return codeDataCache.size;
95
+ }
96
+ function setCacheSize(size) {
97
+ const oldCache = codeDataCache;
98
+ codeDataCache = lru(size);
99
+ const entries = oldCache.entries();
100
+ entries.reverse();
101
+ for (const [key, value] of entries) {
102
+ if (codeDataCache.size < size) {
103
+ codeDataCache.set(key, value);
104
+ } else {
105
+ break;
106
+ }
107
+ }
108
+ }
109
+
110
+ export { carrier, clearCache, geocoder, getCacheSize, setCacheSize, timezones };