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