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