n2words 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSE +1 -1
  3. package/README.md +64 -184
  4. package/dist/am-ET.js +2 -0
  5. package/dist/am-ET.umd.js +2 -0
  6. package/dist/am-Latn-ET.js +2 -0
  7. package/dist/am-Latn-ET.umd.js +2 -0
  8. package/dist/ar-SA.js +2 -0
  9. package/dist/ar-SA.umd.js +2 -0
  10. package/dist/az-AZ.js +2 -0
  11. package/dist/az-AZ.umd.js +2 -0
  12. package/dist/bn-BD.js +2 -0
  13. package/dist/bn-BD.umd.js +2 -0
  14. package/dist/cs-CZ.js +2 -0
  15. package/dist/cs-CZ.umd.js +2 -0
  16. package/dist/da-DK.js +2 -0
  17. package/dist/da-DK.umd.js +2 -0
  18. package/dist/de-DE.js +2 -0
  19. package/dist/de-DE.umd.js +2 -0
  20. package/dist/el-GR.js +2 -0
  21. package/dist/el-GR.umd.js +2 -0
  22. package/dist/en-AU.js +2 -0
  23. package/dist/en-AU.umd.js +2 -0
  24. package/dist/en-BD.js +2 -0
  25. package/dist/en-BD.umd.js +2 -0
  26. package/dist/en-CA.js +2 -0
  27. package/dist/en-CA.umd.js +2 -0
  28. package/dist/en-GB.js +2 -0
  29. package/dist/en-GB.umd.js +2 -0
  30. package/dist/en-GH.js +2 -0
  31. package/dist/en-GH.umd.js +2 -0
  32. package/dist/en-IE.js +2 -0
  33. package/dist/en-IE.umd.js +2 -0
  34. package/dist/en-IN.js +2 -0
  35. package/dist/en-IN.umd.js +2 -0
  36. package/dist/en-KE.js +2 -0
  37. package/dist/en-KE.umd.js +2 -0
  38. package/dist/en-MY.js +2 -0
  39. package/dist/en-MY.umd.js +2 -0
  40. package/dist/en-NG.js +2 -0
  41. package/dist/en-NG.umd.js +2 -0
  42. package/dist/en-NZ.js +2 -0
  43. package/dist/en-NZ.umd.js +2 -0
  44. package/dist/en-PH.js +2 -0
  45. package/dist/en-PH.umd.js +2 -0
  46. package/dist/en-PK.js +2 -0
  47. package/dist/en-PK.umd.js +2 -0
  48. package/dist/en-SG.js +2 -0
  49. package/dist/en-SG.umd.js +2 -0
  50. package/dist/en-US.js +2 -0
  51. package/dist/en-US.umd.js +2 -0
  52. package/dist/en-ZA.js +2 -0
  53. package/dist/en-ZA.umd.js +2 -0
  54. package/dist/es-ES.js +2 -0
  55. package/dist/es-ES.umd.js +2 -0
  56. package/dist/es-MX.js +2 -0
  57. package/dist/es-MX.umd.js +2 -0
  58. package/dist/es-US.js +2 -0
  59. package/dist/es-US.umd.js +2 -0
  60. package/dist/fa-IR.js +2 -0
  61. package/dist/fa-IR.umd.js +2 -0
  62. package/dist/fi-FI.js +2 -0
  63. package/dist/fi-FI.umd.js +2 -0
  64. package/dist/fil-PH.js +2 -0
  65. package/dist/fil-PH.umd.js +2 -0
  66. package/dist/fr-BE.js +2 -0
  67. package/dist/fr-BE.umd.js +2 -0
  68. package/dist/fr-FR.js +2 -0
  69. package/dist/fr-FR.umd.js +2 -0
  70. package/dist/gu-IN.js +2 -0
  71. package/dist/gu-IN.umd.js +2 -0
  72. package/dist/ha-NG.js +2 -0
  73. package/dist/ha-NG.umd.js +2 -0
  74. package/dist/hbo-IL.js +2 -0
  75. package/dist/hbo-IL.umd.js +2 -0
  76. package/dist/he-IL.js +2 -0
  77. package/dist/he-IL.umd.js +2 -0
  78. package/dist/hi-IN.js +2 -0
  79. package/dist/hi-IN.umd.js +2 -0
  80. package/dist/hr-HR.js +2 -0
  81. package/dist/hr-HR.umd.js +2 -0
  82. package/dist/hu-HU.js +2 -0
  83. package/dist/hu-HU.umd.js +2 -0
  84. package/dist/id-ID.js +2 -0
  85. package/dist/id-ID.umd.js +2 -0
  86. package/dist/it-IT.js +2 -0
  87. package/dist/it-IT.umd.js +2 -0
  88. package/dist/ja-JP.js +2 -0
  89. package/dist/ja-JP.umd.js +2 -0
  90. package/dist/ka-GE.js +2 -0
  91. package/dist/ka-GE.umd.js +2 -0
  92. package/dist/kn-IN.js +2 -0
  93. package/dist/kn-IN.umd.js +2 -0
  94. package/dist/ko-KR.js +2 -0
  95. package/dist/ko-KR.umd.js +2 -0
  96. package/dist/lt-LT.js +2 -0
  97. package/dist/lt-LT.umd.js +2 -0
  98. package/dist/lv-LV.js +2 -0
  99. package/dist/lv-LV.umd.js +2 -0
  100. package/dist/mr-IN.js +2 -0
  101. package/dist/mr-IN.umd.js +2 -0
  102. package/dist/ms-MY.js +2 -0
  103. package/dist/ms-MY.umd.js +2 -0
  104. package/dist/nb-NO.js +2 -0
  105. package/dist/nb-NO.umd.js +2 -0
  106. package/dist/nl-NL.js +2 -0
  107. package/dist/nl-NL.umd.js +2 -0
  108. package/dist/pa-IN.js +2 -0
  109. package/dist/pa-IN.umd.js +2 -0
  110. package/dist/pl-PL.js +2 -0
  111. package/dist/pl-PL.umd.js +2 -0
  112. package/dist/pt-PT.js +2 -0
  113. package/dist/pt-PT.umd.js +2 -0
  114. package/dist/ro-RO.js +2 -0
  115. package/dist/ro-RO.umd.js +2 -0
  116. package/dist/ru-RU.js +2 -0
  117. package/dist/ru-RU.umd.js +2 -0
  118. package/dist/sr-Cyrl-RS.js +2 -0
  119. package/dist/sr-Cyrl-RS.umd.js +2 -0
  120. package/dist/sr-Latn-RS.js +2 -0
  121. package/dist/sr-Latn-RS.umd.js +2 -0
  122. package/dist/sv-SE.js +2 -0
  123. package/dist/sv-SE.umd.js +2 -0
  124. package/dist/sw-KE.js +2 -0
  125. package/dist/sw-KE.umd.js +2 -0
  126. package/dist/ta-IN.js +2 -0
  127. package/dist/ta-IN.umd.js +2 -0
  128. package/dist/te-IN.js +2 -0
  129. package/dist/te-IN.umd.js +2 -0
  130. package/dist/th-TH.js +2 -0
  131. package/dist/th-TH.umd.js +2 -0
  132. package/dist/tr-TR.js +2 -0
  133. package/dist/tr-TR.umd.js +2 -0
  134. package/dist/uk-UA.js +2 -0
  135. package/dist/uk-UA.umd.js +2 -0
  136. package/dist/ur-PK.js +2 -0
  137. package/dist/ur-PK.umd.js +2 -0
  138. package/dist/vi-VN.js +2 -0
  139. package/dist/vi-VN.umd.js +2 -0
  140. package/dist/yo-NG.js +2 -0
  141. package/dist/yo-NG.umd.js +2 -0
  142. package/dist/zh-Hans-CN.js +2 -0
  143. package/dist/zh-Hans-CN.umd.js +2 -0
  144. package/dist/zh-Hant-TW.js +2 -0
  145. package/dist/zh-Hant-TW.umd.js +2 -0
  146. package/package.json +47 -82
  147. package/src/am-ET.d.ts +40 -0
  148. package/src/am-ET.js +269 -0
  149. package/src/am-Latn-ET.d.ts +35 -0
  150. package/src/am-Latn-ET.js +264 -0
  151. package/src/ar-SA.d.ts +49 -0
  152. package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
  153. package/src/az-AZ.d.ts +37 -0
  154. package/src/az-AZ.js +312 -0
  155. package/src/bn-BD.d.ts +36 -0
  156. package/{lib/languages/bn.js → src/bn-BD.js} +110 -6
  157. package/src/cs-CZ.d.ts +49 -0
  158. package/{lib/languages/cs.js → src/cs-CZ.js} +240 -14
  159. package/src/da-DK.d.ts +44 -0
  160. package/{lib/languages/da.js → src/da-DK.js} +131 -11
  161. package/src/de-DE.d.ts +57 -0
  162. package/src/de-DE.js +603 -0
  163. package/src/el-GR.d.ts +40 -0
  164. package/src/el-GR.js +418 -0
  165. package/src/en-AU.d.ts +47 -0
  166. package/src/en-AU.js +423 -0
  167. package/src/en-BD.d.ts +49 -0
  168. package/src/en-BD.js +415 -0
  169. package/src/en-CA.d.ts +63 -0
  170. package/src/en-CA.js +518 -0
  171. package/src/en-GB.d.ts +56 -0
  172. package/src/en-GB.js +469 -0
  173. package/src/en-GH.d.ts +11 -0
  174. package/src/en-GH.js +345 -0
  175. package/src/en-IE.d.ts +56 -0
  176. package/src/en-IE.js +479 -0
  177. package/src/en-IN.d.ts +49 -0
  178. package/src/en-IN.js +415 -0
  179. package/src/en-KE.d.ts +11 -0
  180. package/src/en-KE.js +345 -0
  181. package/src/en-MY.d.ts +11 -0
  182. package/src/en-MY.js +347 -0
  183. package/src/en-NG.d.ts +56 -0
  184. package/src/en-NG.js +479 -0
  185. package/src/en-NZ.d.ts +11 -0
  186. package/{lib/languages/en.js → src/en-NZ.js} +164 -31
  187. package/src/en-PH.d.ts +11 -0
  188. package/src/en-PH.js +345 -0
  189. package/src/en-PK.d.ts +49 -0
  190. package/src/en-PK.js +415 -0
  191. package/src/en-SG.d.ts +11 -0
  192. package/src/en-SG.js +345 -0
  193. package/src/en-US.d.ts +63 -0
  194. package/src/en-US.js +516 -0
  195. package/src/en-ZA.d.ts +56 -0
  196. package/src/en-ZA.js +478 -0
  197. package/src/es-ES.d.ts +65 -0
  198. package/src/es-ES.js +541 -0
  199. package/src/es-MX.d.ts +58 -0
  200. package/{lib/languages/es.js → src/es-MX.js} +228 -18
  201. package/src/es-US.d.ts +58 -0
  202. package/src/es-US.js +446 -0
  203. package/src/fa-IR.d.ts +38 -0
  204. package/src/fa-IR.js +246 -0
  205. package/src/fi-FI.d.ts +46 -0
  206. package/{lib/languages/fi.js → src/fi-FI.js} +152 -11
  207. package/src/fil-PH.d.ts +37 -0
  208. package/{lib/languages/fil.js → src/fil-PH.js} +144 -8
  209. package/src/fr-BE.d.ts +49 -0
  210. package/{lib/languages → src}/fr-BE.js +175 -13
  211. package/src/fr-FR.d.ts +63 -0
  212. package/{lib/languages/fr.js → src/fr-FR.js} +182 -16
  213. package/src/gu-IN.d.ts +35 -0
  214. package/{lib/languages/gu.js → src/gu-IN.js} +115 -6
  215. package/src/ha-NG.d.ts +37 -0
  216. package/{lib/languages/ha.js → src/ha-NG.js} +107 -8
  217. package/src/hbo-IL.d.ts +39 -0
  218. package/{lib/languages/hbo.js → src/hbo-IL.js} +211 -19
  219. package/src/he-IL.d.ts +37 -0
  220. package/src/he-IL.js +537 -0
  221. package/src/hi-IN.d.ts +36 -0
  222. package/{lib/languages/hi.js → src/hi-IN.js} +116 -6
  223. package/src/hr-HR.d.ts +42 -0
  224. package/src/hr-HR.js +463 -0
  225. package/src/hu-HU.d.ts +38 -0
  226. package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
  227. package/src/id-ID.d.ts +38 -0
  228. package/{lib/languages/id.js → src/id-ID.js} +99 -8
  229. package/src/it-IT.d.ts +59 -0
  230. package/{lib/languages/it.js → src/it-IT.js} +179 -15
  231. package/src/ja-JP.d.ts +49 -0
  232. package/{lib/languages/ja.js → src/ja-JP.js} +111 -12
  233. package/src/ka-GE.d.ts +44 -0
  234. package/{lib/languages/ka.js → src/ka-GE.js} +113 -11
  235. package/src/kn-IN.d.ts +35 -0
  236. package/{lib/languages/kn.js → src/kn-IN.js} +115 -6
  237. package/src/ko-KR.d.ts +45 -0
  238. package/{lib/languages/ko.js → src/ko-KR.js} +94 -12
  239. package/src/lt-LT.d.ts +49 -0
  240. package/src/lt-LT.js +543 -0
  241. package/src/lv-LV.d.ts +49 -0
  242. package/src/lv-LV.js +595 -0
  243. package/src/mr-IN.d.ts +36 -0
  244. package/{lib/languages/mr.js → src/mr-IN.js} +116 -6
  245. package/src/ms-MY.d.ts +37 -0
  246. package/{lib/languages/ms.js → src/ms-MY.js} +111 -8
  247. package/src/nb-NO.d.ts +44 -0
  248. package/{lib/languages/nb.js → src/nb-NO.js} +153 -11
  249. package/src/nl-NL.d.ts +54 -0
  250. package/{lib/languages/nl.js → src/nl-NL.js} +260 -18
  251. package/src/pa-IN.d.ts +36 -0
  252. package/{lib/languages/pa.js → src/pa-IN.js} +116 -6
  253. package/src/pl-PL.d.ts +55 -0
  254. package/src/pl-PL.js +585 -0
  255. package/src/pt-PT.d.ts +45 -0
  256. package/{lib/languages/pt.js → src/pt-PT.js} +234 -12
  257. package/src/ro-RO.d.ts +44 -0
  258. package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
  259. package/src/ru-RU.d.ts +50 -0
  260. package/src/ru-RU.js +535 -0
  261. package/src/sr-Cyrl-RS.d.ts +49 -0
  262. package/src/sr-Cyrl-RS.js +503 -0
  263. package/src/sr-Latn-RS.d.ts +49 -0
  264. package/src/sr-Latn-RS.js +503 -0
  265. package/src/sv-SE.d.ts +44 -0
  266. package/{lib/languages/sv.js → src/sv-SE.js} +136 -11
  267. package/src/sw-KE.d.ts +37 -0
  268. package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
  269. package/src/ta-IN.d.ts +35 -0
  270. package/{lib/languages/ta.js → src/ta-IN.js} +109 -6
  271. package/src/te-IN.d.ts +35 -0
  272. package/{lib/languages/te.js → src/te-IN.js} +115 -6
  273. package/src/th-TH.d.ts +38 -0
  274. package/{lib/languages/th.js → src/th-TH.js} +99 -6
  275. package/src/tr-TR.d.ts +48 -0
  276. package/{lib/languages/tr.js → src/tr-TR.js} +168 -23
  277. package/src/uk-UA.d.ts +42 -0
  278. package/src/uk-UA.js +463 -0
  279. package/src/ur-PK.d.ts +36 -0
  280. package/{lib/languages/ur.js → src/ur-PK.js} +116 -6
  281. package/src/utils/expand-scientific.d.ts +32 -0
  282. package/src/utils/expand-scientific.js +65 -0
  283. package/src/utils/parse-cardinal.d.ts +14 -0
  284. package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
  285. package/src/utils/parse-currency.d.ts +14 -0
  286. package/src/utils/parse-currency.js +91 -0
  287. package/src/utils/parse-ordinal.d.ts +10 -0
  288. package/src/utils/parse-ordinal.js +103 -0
  289. package/src/vi-VN.d.ts +48 -0
  290. package/{lib/languages/vi.js → src/vi-VN.js} +102 -11
  291. package/src/yo-NG.d.ts +37 -0
  292. package/{lib/languages/yo.js → src/yo-NG.js} +109 -9
  293. package/src/zh-Hans-CN.d.ts +48 -0
  294. package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
  295. package/src/zh-Hant-TW.d.ts +50 -0
  296. package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
  297. package/dist/languages/am-Latn.js +0 -3
  298. package/dist/languages/am-Latn.js.map +0 -1
  299. package/dist/languages/am.js +0 -3
  300. package/dist/languages/am.js.map +0 -1
  301. package/dist/languages/ar.js +0 -3
  302. package/dist/languages/ar.js.map +0 -1
  303. package/dist/languages/az.js +0 -3
  304. package/dist/languages/az.js.map +0 -1
  305. package/dist/languages/bn.js +0 -3
  306. package/dist/languages/bn.js.map +0 -1
  307. package/dist/languages/cs.js +0 -3
  308. package/dist/languages/cs.js.map +0 -1
  309. package/dist/languages/da.js +0 -3
  310. package/dist/languages/da.js.map +0 -1
  311. package/dist/languages/de.js +0 -3
  312. package/dist/languages/de.js.map +0 -1
  313. package/dist/languages/el.js +0 -3
  314. package/dist/languages/el.js.map +0 -1
  315. package/dist/languages/en.js +0 -3
  316. package/dist/languages/en.js.map +0 -1
  317. package/dist/languages/es.js +0 -3
  318. package/dist/languages/es.js.map +0 -1
  319. package/dist/languages/fa.js +0 -3
  320. package/dist/languages/fa.js.map +0 -1
  321. package/dist/languages/fi.js +0 -3
  322. package/dist/languages/fi.js.map +0 -1
  323. package/dist/languages/fil.js +0 -3
  324. package/dist/languages/fil.js.map +0 -1
  325. package/dist/languages/fr-BE.js +0 -3
  326. package/dist/languages/fr-BE.js.map +0 -1
  327. package/dist/languages/fr.js +0 -3
  328. package/dist/languages/fr.js.map +0 -1
  329. package/dist/languages/gu.js +0 -3
  330. package/dist/languages/gu.js.map +0 -1
  331. package/dist/languages/ha.js +0 -3
  332. package/dist/languages/ha.js.map +0 -1
  333. package/dist/languages/hbo.js +0 -3
  334. package/dist/languages/hbo.js.map +0 -1
  335. package/dist/languages/he.js +0 -3
  336. package/dist/languages/he.js.map +0 -1
  337. package/dist/languages/hi.js +0 -3
  338. package/dist/languages/hi.js.map +0 -1
  339. package/dist/languages/hr.js +0 -3
  340. package/dist/languages/hr.js.map +0 -1
  341. package/dist/languages/hu.js +0 -3
  342. package/dist/languages/hu.js.map +0 -1
  343. package/dist/languages/id.js +0 -3
  344. package/dist/languages/id.js.map +0 -1
  345. package/dist/languages/it.js +0 -3
  346. package/dist/languages/it.js.map +0 -1
  347. package/dist/languages/ja.js +0 -3
  348. package/dist/languages/ja.js.map +0 -1
  349. package/dist/languages/ka.js +0 -3
  350. package/dist/languages/ka.js.map +0 -1
  351. package/dist/languages/kn.js +0 -3
  352. package/dist/languages/kn.js.map +0 -1
  353. package/dist/languages/ko.js +0 -3
  354. package/dist/languages/ko.js.map +0 -1
  355. package/dist/languages/lt.js +0 -3
  356. package/dist/languages/lt.js.map +0 -1
  357. package/dist/languages/lv.js +0 -3
  358. package/dist/languages/lv.js.map +0 -1
  359. package/dist/languages/mr.js +0 -3
  360. package/dist/languages/mr.js.map +0 -1
  361. package/dist/languages/ms.js +0 -3
  362. package/dist/languages/ms.js.map +0 -1
  363. package/dist/languages/nb.js +0 -3
  364. package/dist/languages/nb.js.map +0 -1
  365. package/dist/languages/nl.js +0 -3
  366. package/dist/languages/nl.js.map +0 -1
  367. package/dist/languages/pa.js +0 -3
  368. package/dist/languages/pa.js.map +0 -1
  369. package/dist/languages/pl.js +0 -3
  370. package/dist/languages/pl.js.map +0 -1
  371. package/dist/languages/pt.js +0 -3
  372. package/dist/languages/pt.js.map +0 -1
  373. package/dist/languages/ro.js +0 -3
  374. package/dist/languages/ro.js.map +0 -1
  375. package/dist/languages/ru.js +0 -3
  376. package/dist/languages/ru.js.map +0 -1
  377. package/dist/languages/sr-Cyrl.js +0 -3
  378. package/dist/languages/sr-Cyrl.js.map +0 -1
  379. package/dist/languages/sr-Latn.js +0 -3
  380. package/dist/languages/sr-Latn.js.map +0 -1
  381. package/dist/languages/sv.js +0 -3
  382. package/dist/languages/sv.js.map +0 -1
  383. package/dist/languages/sw.js +0 -3
  384. package/dist/languages/sw.js.map +0 -1
  385. package/dist/languages/ta.js +0 -3
  386. package/dist/languages/ta.js.map +0 -1
  387. package/dist/languages/te.js +0 -3
  388. package/dist/languages/te.js.map +0 -1
  389. package/dist/languages/th.js +0 -3
  390. package/dist/languages/th.js.map +0 -1
  391. package/dist/languages/tr.js +0 -3
  392. package/dist/languages/tr.js.map +0 -1
  393. package/dist/languages/uk.js +0 -3
  394. package/dist/languages/uk.js.map +0 -1
  395. package/dist/languages/ur.js +0 -3
  396. package/dist/languages/ur.js.map +0 -1
  397. package/dist/languages/vi.js +0 -3
  398. package/dist/languages/vi.js.map +0 -1
  399. package/dist/languages/yo.js +0 -3
  400. package/dist/languages/yo.js.map +0 -1
  401. package/dist/languages/zh-Hans.js +0 -3
  402. package/dist/languages/zh-Hans.js.map +0 -1
  403. package/dist/languages/zh-Hant.js +0 -3
  404. package/dist/languages/zh-Hant.js.map +0 -1
  405. package/dist/n2words.js +0 -3
  406. package/dist/n2words.js.map +0 -1
  407. package/lib/languages/am-Latn.d.ts +0 -7
  408. package/lib/languages/am-Latn.js +0 -159
  409. package/lib/languages/am.d.ts +0 -7
  410. package/lib/languages/am.js +0 -159
  411. package/lib/languages/ar.d.ts +0 -17
  412. package/lib/languages/az.d.ts +0 -7
  413. package/lib/languages/az.js +0 -171
  414. package/lib/languages/bn.d.ts +0 -7
  415. package/lib/languages/cs.d.ts +0 -18
  416. package/lib/languages/da.d.ts +0 -14
  417. package/lib/languages/de.d.ts +0 -17
  418. package/lib/languages/de.js +0 -320
  419. package/lib/languages/el.d.ts +0 -14
  420. package/lib/languages/el.js +0 -236
  421. package/lib/languages/en.d.ts +0 -17
  422. package/lib/languages/es.d.ts +0 -21
  423. package/lib/languages/fa.d.ts +0 -7
  424. package/lib/languages/fa.js +0 -134
  425. package/lib/languages/fi.d.ts +0 -14
  426. package/lib/languages/fil.d.ts +0 -7
  427. package/lib/languages/fr-BE.d.ts +0 -11
  428. package/lib/languages/fr.d.ts +0 -21
  429. package/lib/languages/gu.d.ts +0 -7
  430. package/lib/languages/ha.d.ts +0 -7
  431. package/lib/languages/hbo.d.ts +0 -13
  432. package/lib/languages/he.d.ts +0 -13
  433. package/lib/languages/he.js +0 -265
  434. package/lib/languages/hi.d.ts +0 -7
  435. package/lib/languages/hr.d.ts +0 -11
  436. package/lib/languages/hr.js +0 -224
  437. package/lib/languages/hu.d.ts +0 -7
  438. package/lib/languages/id.d.ts +0 -7
  439. package/lib/languages/it.d.ts +0 -19
  440. package/lib/languages/ja.d.ts +0 -17
  441. package/lib/languages/ka.d.ts +0 -17
  442. package/lib/languages/kn.d.ts +0 -7
  443. package/lib/languages/ko.d.ts +0 -14
  444. package/lib/languages/lt.d.ts +0 -18
  445. package/lib/languages/lt.js +0 -301
  446. package/lib/languages/lv.d.ts +0 -18
  447. package/lib/languages/lv.js +0 -312
  448. package/lib/languages/mr.d.ts +0 -7
  449. package/lib/languages/ms.d.ts +0 -7
  450. package/lib/languages/nb.d.ts +0 -14
  451. package/lib/languages/nl.d.ts +0 -26
  452. package/lib/languages/pa.d.ts +0 -7
  453. package/lib/languages/pl.d.ts +0 -22
  454. package/lib/languages/pl.js +0 -317
  455. package/lib/languages/pt.d.ts +0 -17
  456. package/lib/languages/ro.d.ts +0 -18
  457. package/lib/languages/ru.d.ts +0 -11
  458. package/lib/languages/ru.js +0 -245
  459. package/lib/languages/sr-Cyrl.d.ts +0 -11
  460. package/lib/languages/sr-Cyrl.js +0 -221
  461. package/lib/languages/sr-Latn.d.ts +0 -11
  462. package/lib/languages/sr-Latn.js +0 -221
  463. package/lib/languages/sv.d.ts +0 -14
  464. package/lib/languages/sw.d.ts +0 -7
  465. package/lib/languages/ta.d.ts +0 -7
  466. package/lib/languages/te.d.ts +0 -7
  467. package/lib/languages/th.d.ts +0 -7
  468. package/lib/languages/tr.d.ts +0 -18
  469. package/lib/languages/uk.d.ts +0 -11
  470. package/lib/languages/uk.js +0 -224
  471. package/lib/languages/ur.d.ts +0 -7
  472. package/lib/languages/vi.d.ts +0 -17
  473. package/lib/languages/yo.d.ts +0 -7
  474. package/lib/languages/zh-Hans.d.ts +0 -11
  475. package/lib/languages/zh-Hant.d.ts +0 -11
  476. package/lib/n2words.d.ts +0 -55
  477. package/lib/n2words.js +0 -126
  478. package/lib/utils/parse-numeric.d.ts +0 -17
  479. /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
  480. /package/{lib → src}/utils/is-plain-object.js +0 -0
  481. /package/{lib → src}/utils/validate-options.d.ts +0 -0
  482. /package/{lib → src}/utils/validate-options.js +0 -0
package/src/en-GB.js ADDED
@@ -0,0 +1,469 @@
1
+ /**
2
+ * British English language converter
3
+ *
4
+ * CLDR: en-GB | English as used in the United Kingdom
5
+ *
6
+ * British English conventions:
7
+ * - "and" after hundreds: "one hundred and twenty-three"
8
+ * - "and" before final segment: "one million and one"
9
+ * - Hyphenated tens-ones: "twenty-one", "forty-two"
10
+ * - Western numbering system (short scale: billion = 10^9)
11
+ */
12
+
13
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
14
+ import { parseCurrencyValue } from './utils/parse-currency.js'
15
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
16
+ import { validateOptions } from './utils/validate-options.js'
17
+
18
+ // ============================================================================
19
+ // Vocabulary (module-level constants)
20
+ // ============================================================================
21
+
22
+ const ONES = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
23
+ const TEENS = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
24
+ const TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
25
+
26
+ const SCALES = [
27
+ 'thousand', 'million', 'billion', 'trillion', 'quadrillion',
28
+ 'quintillion', 'sextillion', 'septillion', 'octillion', 'nonillion',
29
+ 'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quattuordecillion',
30
+ 'quindecillion', 'sexdecillion', 'septendecillion', 'octodecillion', 'novemdecillion',
31
+ 'vigintillion'
32
+ ]
33
+
34
+ const HUNDRED = 'hundred'
35
+ const ZERO = 'zero'
36
+ const NEGATIVE = 'minus'
37
+ const DECIMAL_SEP = 'point'
38
+
39
+ // Ordinal vocabulary
40
+ const ORDINAL_ONES = ['', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth']
41
+ const ORDINAL_TEENS = ['tenth', 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth']
42
+ const ORDINAL_TENS = ['', '', 'twentieth', 'thirtieth', 'fortieth', 'fiftieth', 'sixtieth', 'seventieth', 'eightieth', 'ninetieth']
43
+
44
+ // Currency vocabulary
45
+ const POUND = 'pound'
46
+ const POUNDS = 'pounds'
47
+ const PENNY = 'penny'
48
+ const PENCE = 'pence'
49
+
50
+ // ============================================================================
51
+ // Segment Building
52
+ // ============================================================================
53
+
54
+ // Reusable result object to avoid allocation per call
55
+ const segmentResult = { word: '', hasHundred: false }
56
+
57
+ /**
58
+ * Builds words for a 0-999 segment.
59
+ *
60
+ * @param {number} n - Number 0-999
61
+ * @returns {{ word: string, hasHundred: boolean }}
62
+ */
63
+ function buildSegment (n) {
64
+ if (n === 0) {
65
+ segmentResult.word = ''
66
+ segmentResult.hasHundred = false
67
+ return segmentResult
68
+ }
69
+
70
+ const ones = n % 10
71
+ const tens = Math.trunc(n / 10) % 10
72
+ const hundreds = Math.trunc(n / 100)
73
+
74
+ // Build tens-ones part first
75
+ let tensOnes = ''
76
+ if (tens === 1) {
77
+ tensOnes = TEENS[ones]
78
+ } else if (tens >= 2) {
79
+ tensOnes = ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
80
+ } else if (ones > 0) {
81
+ tensOnes = ONES[ones]
82
+ }
83
+
84
+ // Hundreds place
85
+ if (hundreds > 0) {
86
+ if (tensOnes) {
87
+ segmentResult.word = ONES[hundreds] + ' ' + HUNDRED + ' and ' + tensOnes
88
+ } else {
89
+ segmentResult.word = ONES[hundreds] + ' ' + HUNDRED
90
+ }
91
+ segmentResult.hasHundred = true
92
+ } else {
93
+ segmentResult.word = tensOnes
94
+ segmentResult.hasHundred = false
95
+ }
96
+
97
+ return segmentResult
98
+ }
99
+
100
+ // ============================================================================
101
+ // Conversion Functions
102
+ // ============================================================================
103
+
104
+ /**
105
+ * Converts a non-negative integer to English words.
106
+ *
107
+ * @param {bigint} n - Non-negative integer to convert
108
+ * @returns {string} English words
109
+ */
110
+ function integerToWords (n) {
111
+ if (n === 0n) return ZERO
112
+
113
+ // Fast path: numbers < 1000
114
+ if (n < 1000n) {
115
+ return buildSegment(Number(n)).word
116
+ }
117
+
118
+ // Fast path: numbers < 1,000,000
119
+ if (n < 1_000_000n) {
120
+ const thousands = Number(n / 1000n)
121
+ const remainder = Number(n % 1000n)
122
+
123
+ const { word: thousandsWord } = buildSegment(thousands)
124
+ let result = thousandsWord + ' ' + SCALES[0]
125
+
126
+ if (remainder > 0) {
127
+ const { word: remainderWord, hasHundred } = buildSegment(remainder)
128
+ result += hasHundred ? ' ' + remainderWord : ' and ' + remainderWord
129
+ }
130
+
131
+ return result
132
+ }
133
+
134
+ // For numbers >= 1,000,000, use scale decomposition
135
+ return buildLargeNumberWords(n)
136
+ }
137
+
138
+ /**
139
+ * Builds words for numbers >= 1,000,000.
140
+ * Uses BigInt division for faster segment extraction.
141
+ *
142
+ * @param {bigint} n - Number >= 1,000,000
143
+ * @returns {string} English words
144
+ */
145
+ function buildLargeNumberWords (n) {
146
+ // Extract segments using BigInt division
147
+ // Segments are stored least-significant first (index 0 = ones, 1 = thousands, etc.)
148
+ const segments = []
149
+ let temp = n
150
+ while (temp > 0n) {
151
+ segments.push(Number(temp % 1000n))
152
+ temp = temp / 1000n
153
+ }
154
+
155
+ // Find the first (smallest index) non-zero segment - this is processed last
156
+ let firstNonZeroIdx = -1
157
+ for (let i = 0; i < segments.length; i++) {
158
+ if (segments[i] !== 0) {
159
+ firstNonZeroIdx = i
160
+ break
161
+ }
162
+ }
163
+
164
+ // Build result string (process from most-significant to least)
165
+ let result = ''
166
+ let prevWasScale = false
167
+
168
+ for (let i = segments.length - 1; i >= 0; i--) {
169
+ const segment = segments[i]
170
+ if (segment === 0) continue
171
+
172
+ const { word, hasHundred } = buildSegment(segment)
173
+ const isLastSegment = (i === firstNonZeroIdx)
174
+
175
+ // Add "and" only before FINAL segment if it follows scale and doesn't have hundred
176
+ if (result && isLastSegment && prevWasScale && !hasHundred) {
177
+ result += ' and'
178
+ }
179
+
180
+ // Add segment word
181
+ if (result) result += ' '
182
+ result += word
183
+
184
+ // Add scale word (i=0 is units, i=1 is thousands, etc.)
185
+ if (i > 0) {
186
+ result += ' ' + SCALES[i - 1]
187
+ prevWasScale = true
188
+ } else {
189
+ prevWasScale = false
190
+ }
191
+ }
192
+
193
+ return result
194
+ }
195
+
196
+ /**
197
+ * Converts decimal digits to English words.
198
+ *
199
+ * @param {string} decimalPart - Decimal digits (without the point)
200
+ * @returns {string} English words for decimal part
201
+ */
202
+ function decimalPartToWords (decimalPart) {
203
+ let result = ''
204
+
205
+ // Handle leading zeros
206
+ let i = 0
207
+ while (i < decimalPart.length && decimalPart[i] === '0') {
208
+ if (result) result += ' '
209
+ result += ZERO
210
+ i++
211
+ }
212
+
213
+ // Convert remainder as a single number
214
+ const remainder = decimalPart.slice(i)
215
+ if (remainder) {
216
+ if (result) result += ' '
217
+ result += integerToWords(BigInt(remainder))
218
+ }
219
+
220
+ return result
221
+ }
222
+
223
+ /**
224
+ * Converts a numeric value to English words.
225
+ *
226
+ * This is the main public API. It accepts any valid numeric input
227
+ * (number, string, or bigint) and handles parsing internally.
228
+ *
229
+ * @param {number | string | bigint} value - The numeric value to convert
230
+ * @returns {string} The number in English words
231
+ * @throws {TypeError} If value is not a valid numeric type
232
+ * @throws {Error} If value is not a valid number format
233
+ *
234
+ * @example
235
+ * toCardinal(42) // 'forty-two'
236
+ * toCardinal(-3.14) // 'minus three point fourteen'
237
+ * toCardinal('1000000') // 'one million'
238
+ */
239
+ function toCardinal (value) {
240
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
241
+
242
+ let result = ''
243
+
244
+ if (isNegative) {
245
+ result = NEGATIVE + ' '
246
+ }
247
+
248
+ result += integerToWords(integerPart)
249
+
250
+ if (decimalPart) {
251
+ result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
252
+ }
253
+
254
+ return result
255
+ }
256
+
257
+ // ============================================================================
258
+ // ORDINAL: toOrdinal(value)
259
+ // ============================================================================
260
+
261
+ /**
262
+ * Builds ordinal words for a 0-999 segment (final segment only).
263
+ * Returns ordinal form: "first", "twenty-third", "one hundred forty-fifth"
264
+ *
265
+ * @param {number} n - Number 0-999
266
+ * @returns {string} Ordinal words for this segment
267
+ */
268
+ function buildOrdinalSegment (n) {
269
+ const ones = n % 10
270
+ const tens = Math.trunc(n / 10) % 10
271
+ const hundreds = Math.trunc(n / 100)
272
+
273
+ // Build ordinal for tens-ones portion
274
+ let tensOnesOrdinal = ''
275
+ if (tens === 1) {
276
+ // Teens: 10-19 → "tenth" through "nineteenth"
277
+ tensOnesOrdinal = ORDINAL_TEENS[ones]
278
+ } else if (tens >= 2) {
279
+ if (ones > 0) {
280
+ // Compound: "twenty-first", "thirty-second", etc.
281
+ tensOnesOrdinal = TENS[tens] + '-' + ORDINAL_ONES[ones]
282
+ } else {
283
+ // Round tens: "twentieth", "thirtieth", etc.
284
+ tensOnesOrdinal = ORDINAL_TENS[tens]
285
+ }
286
+ } else if (ones > 0) {
287
+ // Single digit: "first", "second", etc.
288
+ tensOnesOrdinal = ORDINAL_ONES[ones]
289
+ }
290
+
291
+ // Hundreds place
292
+ if (hundreds > 0) {
293
+ if (tensOnesOrdinal) {
294
+ // "one hundred twenty-first"
295
+ return ONES[hundreds] + ' ' + HUNDRED + ' ' + tensOnesOrdinal
296
+ } else {
297
+ // "one hundredth", "two hundredth", etc.
298
+ return ONES[hundreds] + ' hundredth'
299
+ }
300
+ }
301
+
302
+ return tensOnesOrdinal
303
+ }
304
+
305
+ /**
306
+ * Converts a positive integer to ordinal words.
307
+ * Generates ordinals directly without string manipulation.
308
+ *
309
+ * @param {bigint} n - Positive integer to convert
310
+ * @returns {string} Ordinal English words
311
+ */
312
+ function integerToOrdinal (n) {
313
+ // Fast path: numbers < 1000
314
+ if (n < 1000n) {
315
+ return buildOrdinalSegment(Number(n))
316
+ }
317
+
318
+ // Fast path: numbers < 1,000,000
319
+ if (n < 1_000_000n) {
320
+ const thousands = Number(n / 1000n)
321
+ const remainder = Number(n % 1000n)
322
+
323
+ if (remainder === 0) {
324
+ // Exact thousands: "one thousandth", "five thousandth"
325
+ return buildSegment(thousands).word + ' ' + SCALES[0] + 'th'
326
+ }
327
+
328
+ // Has remainder: cardinal thousands + ordinal remainder
329
+ const { word: thousandsWord } = buildSegment(thousands)
330
+ return thousandsWord + ' ' + SCALES[0] + ' ' + buildOrdinalSegment(remainder)
331
+ }
332
+
333
+ // For numbers >= 1,000,000, use scale decomposition
334
+ return buildLargeOrdinal(n)
335
+ }
336
+
337
+ /**
338
+ * Builds ordinal words for numbers >= 1,000,000.
339
+ * All segments except the final one are cardinal; final segment is ordinal.
340
+ *
341
+ * @param {bigint} n - Number >= 1,000,000
342
+ * @returns {string} Ordinal English words
343
+ */
344
+ function buildLargeOrdinal (n) {
345
+ // Extract segments (least-significant first)
346
+ const segments = []
347
+ let temp = n
348
+ while (temp > 0n) {
349
+ segments.push(Number(temp % 1000n))
350
+ temp = temp / 1000n
351
+ }
352
+
353
+ // Find the lowest non-zero segment (this gets ordinal treatment)
354
+ let lowestNonZeroIdx = 0
355
+ for (let i = 0; i < segments.length; i++) {
356
+ if (segments[i] !== 0) {
357
+ lowestNonZeroIdx = i
358
+ break
359
+ }
360
+ }
361
+
362
+ // Build result (most-significant to least)
363
+ let result = ''
364
+
365
+ for (let i = segments.length - 1; i >= 0; i--) {
366
+ const segment = segments[i]
367
+ if (segment === 0) continue
368
+
369
+ const isLowestSegment = (i === lowestNonZeroIdx)
370
+
371
+ if (result) result += ' '
372
+
373
+ if (isLowestSegment) {
374
+ // Final non-zero segment gets ordinal treatment
375
+ if (i === 0) {
376
+ // Units position: use ordinal segment
377
+ result += buildOrdinalSegment(segment)
378
+ } else {
379
+ // Scale position with no remainder below: "one millionth"
380
+ result += buildSegment(segment).word + ' ' + SCALES[i - 1] + 'th'
381
+ }
382
+ } else {
383
+ // Non-final segments are cardinal
384
+ result += buildSegment(segment).word
385
+ if (i > 0) {
386
+ result += ' ' + SCALES[i - 1]
387
+ }
388
+ }
389
+ }
390
+
391
+ return result
392
+ }
393
+
394
+ /**
395
+ * Converts a numeric value to British English ordinal words.
396
+ *
397
+ * @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
398
+ * @returns {string} The number as ordinal words (e.g., "first", "forty-second")
399
+ * @throws {TypeError} If value is not a valid numeric type
400
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
401
+ *
402
+ * @example
403
+ * toOrdinal(1) // 'first'
404
+ * toOrdinal(2) // 'second'
405
+ * toOrdinal(3) // 'third'
406
+ * toOrdinal(21) // 'twenty-first'
407
+ * toOrdinal(42) // 'forty-second'
408
+ * toOrdinal(100) // 'one hundredth'
409
+ * toOrdinal(101) // 'one hundred first'
410
+ * toOrdinal(1000) // 'one thousandth'
411
+ */
412
+ function toOrdinal (value) {
413
+ const integerPart = parseOrdinalValue(value)
414
+ return integerToOrdinal(integerPart)
415
+ }
416
+
417
+ // ============================================================================
418
+ // CURRENCY: toCurrency(value, options?)
419
+ // ============================================================================
420
+
421
+ /**
422
+ * Converts a numeric value to British English currency words.
423
+ *
424
+ * @param {number | string | bigint} value - The currency amount to convert
425
+ * @param {Object} [options] - Optional configuration
426
+ * @param {boolean} [options.and=true] - Use "and" between pounds and pence (e.g., "one pound and fifty pence")
427
+ * @returns {string} The amount in British English currency words
428
+ * @throws {TypeError} If value is not a valid numeric type
429
+ * @throws {Error} If value is not a valid number format
430
+ *
431
+ * @example
432
+ * toCurrency(42.50) // 'forty-two pounds and fifty pence'
433
+ * toCurrency(1) // 'one pound'
434
+ * toCurrency(0.99) // 'ninety-nine pence'
435
+ * toCurrency(0.01) // 'one penny'
436
+ * toCurrency(42.50, { and: false }) // 'forty-two pounds fifty pence'
437
+ */
438
+ function toCurrency (value, options) {
439
+ options = validateOptions(options)
440
+ const { isNegative, dollars: pounds, cents: pence } = parseCurrencyValue(value)
441
+ const { and: useAnd = true } = options
442
+
443
+ // Build result
444
+ let result = ''
445
+ if (isNegative) result = NEGATIVE + ' '
446
+
447
+ // Pounds part (show if non-zero, or if no pence)
448
+ if (pounds > 0n || pence === 0n) {
449
+ result += integerToWords(pounds)
450
+ result += ' ' + (pounds === 1n ? POUND : POUNDS)
451
+ }
452
+
453
+ // Pence part
454
+ if (pence > 0n) {
455
+ if (pounds > 0n) {
456
+ result += useAnd ? ' and ' : ' '
457
+ }
458
+ result += integerToWords(pence)
459
+ result += ' ' + (pence === 1n ? PENNY : PENCE)
460
+ }
461
+
462
+ return result
463
+ }
464
+
465
+ // ============================================================================
466
+ // Public API
467
+ // ============================================================================
468
+
469
+ export { toCardinal, toOrdinal, toCurrency }
package/src/en-GH.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Converts a numeric value to Ghanaian English words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @returns {string} The number in English words
6
+ * @throws {TypeError} If value is not a valid numeric type
7
+ * @throws {Error} If value is not a valid number format
8
+ */
9
+ export function toCardinal(value: number | string | bigint): string;
10
+ export function toOrdinal(value: any): string;
11
+ export function toCurrency(value: any, options: any): string;