n2words 3.0.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 (488) hide show
  1. package/CHANGELOG.md +59 -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/src/bn-BD.js +270 -0
  157. package/src/cs-CZ.d.ts +49 -0
  158. package/{lib/languages/cs.js → src/cs-CZ.js} +249 -40
  159. package/src/da-DK.d.ts +44 -0
  160. package/{lib/languages/da.js → src/da-DK.js} +136 -23
  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/src/en-NZ.js +375 -0
  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} +237 -47
  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/src/fi-FI.js +379 -0
  207. package/src/fil-PH.d.ts +37 -0
  208. package/{lib/languages/fil.js → src/fil-PH.js} +149 -24
  209. package/src/fr-BE.d.ts +49 -0
  210. package/src/fr-BE.js +453 -0
  211. package/src/fr-FR.d.ts +63 -0
  212. package/{lib/languages/fr.js → src/fr-FR.js} +200 -47
  213. package/src/gu-IN.d.ts +35 -0
  214. package/src/gu-IN.js +259 -0
  215. package/src/ha-NG.d.ts +37 -0
  216. package/{lib/languages/ha.js → src/ha-NG.js} +110 -16
  217. package/src/hbo-IL.d.ts +39 -0
  218. package/{lib/languages/hbo.js → src/hbo-IL.js} +217 -43
  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/src/hi-IN.js +280 -0
  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} +106 -20
  229. package/src/it-IT.d.ts +59 -0
  230. package/src/it-IT.js +506 -0
  231. package/src/ja-JP.d.ts +49 -0
  232. package/{lib/languages/ja.js → src/ja-JP.js} +119 -32
  233. package/src/ka-GE.d.ts +44 -0
  234. package/src/ka-GE.js +393 -0
  235. package/src/kn-IN.d.ts +35 -0
  236. package/{lib/languages/kn.js → src/kn-IN.js} +156 -34
  237. package/src/ko-KR.d.ts +45 -0
  238. package/{lib/languages/ko.js → src/ko-KR.js} +99 -24
  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/src/mr-IN.js +260 -0
  245. package/src/ms-MY.d.ts +37 -0
  246. package/{lib/languages/ms.js → src/ms-MY.js} +118 -20
  247. package/src/nb-NO.d.ts +44 -0
  248. package/{lib/languages/nb.js → src/nb-NO.js} +165 -33
  249. package/src/nl-NL.d.ts +54 -0
  250. package/{lib/languages/nl.js → src/nl-NL.js} +271 -47
  251. package/src/pa-IN.d.ts +36 -0
  252. package/src/pa-IN.js +268 -0
  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/src/pt-PT.js +514 -0
  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} +149 -34
  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} +163 -47
  271. package/src/te-IN.d.ts +35 -0
  272. package/{lib/languages/te.js → src/te-IN.js} +147 -46
  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/src/tr-TR.js +397 -0
  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/src/ur-PK.js +268 -0
  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} +124 -53
  291. package/src/yo-NG.d.ts +37 -0
  292. package/src/yo-NG.js +403 -0
  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/kn.js +0 -3
  350. package/dist/languages/kn.js.map +0 -1
  351. package/dist/languages/ko.js +0 -3
  352. package/dist/languages/ko.js.map +0 -1
  353. package/dist/languages/lt.js +0 -3
  354. package/dist/languages/lt.js.map +0 -1
  355. package/dist/languages/lv.js +0 -3
  356. package/dist/languages/lv.js.map +0 -1
  357. package/dist/languages/mr.js +0 -3
  358. package/dist/languages/mr.js.map +0 -1
  359. package/dist/languages/ms.js +0 -3
  360. package/dist/languages/ms.js.map +0 -1
  361. package/dist/languages/nb.js +0 -3
  362. package/dist/languages/nb.js.map +0 -1
  363. package/dist/languages/nl.js +0 -3
  364. package/dist/languages/nl.js.map +0 -1
  365. package/dist/languages/pa.js +0 -3
  366. package/dist/languages/pa.js.map +0 -1
  367. package/dist/languages/pl.js +0 -3
  368. package/dist/languages/pl.js.map +0 -1
  369. package/dist/languages/pt.js +0 -3
  370. package/dist/languages/pt.js.map +0 -1
  371. package/dist/languages/ro.js +0 -3
  372. package/dist/languages/ro.js.map +0 -1
  373. package/dist/languages/ru.js +0 -3
  374. package/dist/languages/ru.js.map +0 -1
  375. package/dist/languages/sr-Cyrl.js +0 -3
  376. package/dist/languages/sr-Cyrl.js.map +0 -1
  377. package/dist/languages/sr-Latn.js +0 -3
  378. package/dist/languages/sr-Latn.js.map +0 -1
  379. package/dist/languages/sv.js +0 -3
  380. package/dist/languages/sv.js.map +0 -1
  381. package/dist/languages/sw.js +0 -3
  382. package/dist/languages/sw.js.map +0 -1
  383. package/dist/languages/ta.js +0 -3
  384. package/dist/languages/ta.js.map +0 -1
  385. package/dist/languages/te.js +0 -3
  386. package/dist/languages/te.js.map +0 -1
  387. package/dist/languages/th.js +0 -3
  388. package/dist/languages/th.js.map +0 -1
  389. package/dist/languages/tr.js +0 -3
  390. package/dist/languages/tr.js.map +0 -1
  391. package/dist/languages/uk.js +0 -3
  392. package/dist/languages/uk.js.map +0 -1
  393. package/dist/languages/ur.js +0 -3
  394. package/dist/languages/ur.js.map +0 -1
  395. package/dist/languages/vi.js +0 -3
  396. package/dist/languages/vi.js.map +0 -1
  397. package/dist/languages/zh-Hans.js +0 -3
  398. package/dist/languages/zh-Hans.js.map +0 -1
  399. package/dist/languages/zh-Hant.js +0 -3
  400. package/dist/languages/zh-Hant.js.map +0 -1
  401. package/dist/n2words.js +0 -3
  402. package/dist/n2words.js.map +0 -1
  403. package/lib/languages/am-Latn.d.ts +0 -7
  404. package/lib/languages/am-Latn.js +0 -164
  405. package/lib/languages/am.d.ts +0 -7
  406. package/lib/languages/am.js +0 -164
  407. package/lib/languages/ar.d.ts +0 -17
  408. package/lib/languages/az.d.ts +0 -7
  409. package/lib/languages/az.js +0 -176
  410. package/lib/languages/bn.d.ts +0 -7
  411. package/lib/languages/bn.js +0 -145
  412. package/lib/languages/cs.d.ts +0 -18
  413. package/lib/languages/da.d.ts +0 -14
  414. package/lib/languages/de.d.ts +0 -17
  415. package/lib/languages/de.js +0 -332
  416. package/lib/languages/el.d.ts +0 -14
  417. package/lib/languages/el.js +0 -243
  418. package/lib/languages/en.d.ts +0 -17
  419. package/lib/languages/en.js +0 -256
  420. package/lib/languages/es.d.ts +0 -21
  421. package/lib/languages/fa.d.ts +0 -7
  422. package/lib/languages/fa.js +0 -134
  423. package/lib/languages/fi.d.ts +0 -14
  424. package/lib/languages/fi.js +0 -245
  425. package/lib/languages/fil.d.ts +0 -7
  426. package/lib/languages/fr-BE.d.ts +0 -11
  427. package/lib/languages/fr-BE.js +0 -300
  428. package/lib/languages/fr.d.ts +0 -21
  429. package/lib/languages/gu.d.ts +0 -7
  430. package/lib/languages/gu.js +0 -137
  431. package/lib/languages/ha.d.ts +0 -7
  432. package/lib/languages/hbo.d.ts +0 -13
  433. package/lib/languages/he.d.ts +0 -13
  434. package/lib/languages/he.js +0 -276
  435. package/lib/languages/hi.d.ts +0 -7
  436. package/lib/languages/hi.js +0 -145
  437. package/lib/languages/hr.d.ts +0 -11
  438. package/lib/languages/hr.js +0 -218
  439. package/lib/languages/hu.d.ts +0 -7
  440. package/lib/languages/id.d.ts +0 -7
  441. package/lib/languages/it.d.ts +0 -19
  442. package/lib/languages/it.js +0 -377
  443. package/lib/languages/ja.d.ts +0 -17
  444. package/lib/languages/kn.d.ts +0 -7
  445. package/lib/languages/ko.d.ts +0 -14
  446. package/lib/languages/lt.d.ts +0 -18
  447. package/lib/languages/lt.js +0 -310
  448. package/lib/languages/lv.d.ts +0 -18
  449. package/lib/languages/lv.js +0 -321
  450. package/lib/languages/mr.d.ts +0 -7
  451. package/lib/languages/mr.js +0 -137
  452. package/lib/languages/ms.d.ts +0 -7
  453. package/lib/languages/nb.d.ts +0 -14
  454. package/lib/languages/nl.d.ts +0 -26
  455. package/lib/languages/pa.d.ts +0 -7
  456. package/lib/languages/pa.js +0 -163
  457. package/lib/languages/pl.d.ts +0 -22
  458. package/lib/languages/pl.js +0 -330
  459. package/lib/languages/pt.d.ts +0 -17
  460. package/lib/languages/pt.js +0 -306
  461. package/lib/languages/ro.d.ts +0 -18
  462. package/lib/languages/ru.d.ts +0 -11
  463. package/lib/languages/ru.js +0 -240
  464. package/lib/languages/sr-Cyrl.d.ts +0 -11
  465. package/lib/languages/sr-Cyrl.js +0 -215
  466. package/lib/languages/sr-Latn.d.ts +0 -11
  467. package/lib/languages/sr-Latn.js +0 -215
  468. package/lib/languages/sv.d.ts +0 -14
  469. package/lib/languages/sw.d.ts +0 -7
  470. package/lib/languages/ta.d.ts +0 -7
  471. package/lib/languages/te.d.ts +0 -7
  472. package/lib/languages/th.d.ts +0 -7
  473. package/lib/languages/tr.d.ts +0 -18
  474. package/lib/languages/tr.js +0 -263
  475. package/lib/languages/uk.d.ts +0 -11
  476. package/lib/languages/uk.js +0 -218
  477. package/lib/languages/ur.d.ts +0 -7
  478. package/lib/languages/ur.js +0 -163
  479. package/lib/languages/vi.d.ts +0 -17
  480. package/lib/languages/zh-Hans.d.ts +0 -11
  481. package/lib/languages/zh-Hant.d.ts +0 -11
  482. package/lib/n2words.d.ts +0 -53
  483. package/lib/n2words.js +0 -122
  484. package/lib/utils/parse-numeric.d.ts +0 -17
  485. /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
  486. /package/{lib → src}/utils/is-plain-object.js +0 -0
  487. /package/{lib → src}/utils/validate-options.d.ts +0 -0
  488. /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;