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/es-US.js ADDED
@@ -0,0 +1,446 @@
1
+ /**
2
+ * Spanish (United States) language converter
3
+ *
4
+ * CLDR: es-US | Spanish as used in the United States
5
+ *
6
+ * Uses the short scale numbering system (like US English):
7
+ * - 10⁶ = millón
8
+ * - 10⁹ = billón (billion)
9
+ * - 10¹² = trillón (trillion)
10
+ *
11
+ * Spanish-specific rules:
12
+ * - Gender agreement: uno/una, veintiuno/veintiuna, hundreds
13
+ * - Special twenties: veinte, veintiuno, veintidós, ... veintinueve
14
+ * - "y" conjunction: treinta y uno (only 30-99 with ones)
15
+ * - "cien" for exact 100, "ciento/cienta" otherwise
16
+ * - Irregular hundreds: quinientos, setecientos, novecientos
17
+ * - "un" before millón (not "uno"), omit before mil
18
+ */
19
+
20
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
21
+ import { parseCurrencyValue } from './utils/parse-currency.js'
22
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
23
+ import { validateOptions } from './utils/validate-options.js'
24
+
25
+ // ============================================================================
26
+ // Vocabulary (module-level constants)
27
+ // ============================================================================
28
+
29
+ const ONES_MASC = ['', 'uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve']
30
+ const ONES_FEM = ['', 'una', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve']
31
+
32
+ const TEENS = ['diez', 'once', 'doce', 'trece', 'catorce', 'quince', 'dieciseis', 'diecisiete', 'dieciocho', 'diecinueve']
33
+
34
+ // 20-29 have special compound forms
35
+ const TWENTIES_MASC = ['veinte', 'veintiuno', 'veintidós', 'veintitrés', 'veinticuatro', 'veinticinco', 'veintiséis', 'veintisiete', 'veintiocho', 'veintinueve']
36
+ const TWENTIES_FEM = ['veinte', 'veintiuna', 'veintidós', 'veintitrés', 'veinticuatro', 'veinticinco', 'veintiséis', 'veintisiete', 'veintiocho', 'veintinueve']
37
+
38
+ const TENS = ['', '', '', 'treinta', 'cuarenta', 'cincuenta', 'sesenta', 'setenta', 'ochenta', 'noventa']
39
+
40
+ // Irregular hundreds
41
+ const HUNDREDS_MASC = ['', 'ciento', 'doscientos', 'trescientos', 'cuatrocientos', 'quinientos', 'seiscientos', 'setecientos', 'ochocientos', 'novecientos']
42
+ const HUNDREDS_FEM = ['', 'cienta', 'doscientas', 'trescientas', 'cuatrocientas', 'quinientas', 'seiscientas', 'setecientas', 'ochocientas', 'novecientas']
43
+
44
+ // Scale words (short scale - each scale is 10^3 apart)
45
+ const SCALES = ['mil', 'millón', 'billón', 'trillón', 'cuatrillón', 'quintillón']
46
+ const SCALES_PLURAL = ['mil', 'millones', 'billones', 'trillones', 'cuatrillones', 'quintillones']
47
+
48
+ const ZERO = 'cero'
49
+ const NEGATIVE = 'menos'
50
+ const DECIMAL_SEP = 'punto'
51
+
52
+ // Ordinal vocabulary (identical across Spanish regions)
53
+ const ORDINAL_ONES_MASC = ['', 'primero', 'segundo', 'tercero', 'cuarto', 'quinto', 'sexto', 'séptimo', 'octavo', 'noveno']
54
+ const ORDINAL_ONES_FEM = ['', 'primera', 'segunda', 'tercera', 'cuarta', 'quinta', 'sexta', 'séptima', 'octava', 'novena']
55
+ const ORDINAL_TENS_MASC = ['', 'décimo', 'vigésimo', 'trigésimo', 'cuadragésimo', 'quincuagésimo', 'sexagésimo', 'septuagésimo', 'octogésimo', 'nonagésimo']
56
+ const ORDINAL_TENS_FEM = ['', 'décima', 'vigésima', 'trigésima', 'cuadragésima', 'quincuagésima', 'sexagésima', 'septuagésima', 'octogésima', 'nonagésima']
57
+ const ORDINAL_HUNDRED_MASC = 'centésimo'
58
+ const ORDINAL_HUNDRED_FEM = 'centésima'
59
+ const ORDINAL_THOUSAND_MASC = 'milésimo'
60
+ const ORDINAL_THOUSAND_FEM = 'milésima'
61
+ const ORDINAL_MILLION_MASC = 'millonésimo'
62
+ const ORDINAL_MILLION_FEM = 'millonésima'
63
+
64
+ // Currency vocabulary (US Dollar - USD)
65
+ const DOLAR = 'dólar'
66
+ const DOLARES = 'dólares'
67
+ const CENTAVO = 'centavo'
68
+ const CENTAVOS = 'centavos'
69
+ const CURRENCY_CONNECTOR = 'con'
70
+
71
+ // ============================================================================
72
+ // Segment Building
73
+ // ============================================================================
74
+
75
+ /**
76
+ * Builds segment word for 0-999.
77
+ * @param {number} n - Segment value
78
+ * @param {boolean} feminine - Use feminine forms
79
+ * @returns {string} Spanish word
80
+ */
81
+ function buildSegment (n, feminine) {
82
+ if (n === 0) return ''
83
+
84
+ // Special case: exact 100 is "cien" (no gender)
85
+ if (n === 100) return 'cien'
86
+
87
+ const ones = n % 10
88
+ const tens = Math.trunc(n / 10) % 10
89
+ const hundreds = Math.trunc(n / 100)
90
+ const tensOnes = n % 100
91
+
92
+ const parts = []
93
+
94
+ // Hundreds
95
+ if (hundreds > 0) {
96
+ const hundredsArr = feminine ? HUNDREDS_FEM : HUNDREDS_MASC
97
+ parts.push(hundredsArr[hundreds])
98
+ }
99
+
100
+ // Tens and ones
101
+ if (tensOnes === 0) {
102
+ // Just hundreds
103
+ } else if (tensOnes < 10) {
104
+ // Single digit
105
+ const onesArr = feminine ? ONES_FEM : ONES_MASC
106
+ parts.push(onesArr[tensOnes])
107
+ } else if (tensOnes < 20) {
108
+ // 10-19: teens
109
+ parts.push(TEENS[ones])
110
+ } else if (tensOnes < 30) {
111
+ // 20-29: special twenties
112
+ const twentiesArr = feminine ? TWENTIES_FEM : TWENTIES_MASC
113
+ parts.push(twentiesArr[ones])
114
+ } else {
115
+ // 30-99: tens y ones
116
+ if (ones === 0) {
117
+ parts.push(TENS[tens])
118
+ } else {
119
+ const onesArr = feminine ? ONES_FEM : ONES_MASC
120
+ parts.push(TENS[tens] + ' y ' + onesArr[ones])
121
+ }
122
+ }
123
+
124
+ return parts.join(' ')
125
+ }
126
+
127
+ // ============================================================================
128
+ // Conversion Functions
129
+ // ============================================================================
130
+
131
+ /**
132
+ * Converts a non-negative integer to Spanish words (short scale).
133
+ *
134
+ * @param {bigint} n - Non-negative integer to convert
135
+ * @param {boolean} feminine - Use feminine forms
136
+ * @returns {string} Spanish words
137
+ */
138
+ function integerToWords (n, feminine) {
139
+ if (n === 0n) return ZERO
140
+
141
+ // Fast path: numbers < 1000
142
+ if (n < 1000n) {
143
+ return buildSegment(Number(n), feminine)
144
+ }
145
+
146
+ // Extract segments using BigInt division
147
+ // Each segment is 3 digits, short scale increments by 10^3
148
+ const segmentValues = []
149
+ let temp = n
150
+ while (temp > 0n) {
151
+ segmentValues.push(temp % 1000n)
152
+ temp = temp / 1000n
153
+ }
154
+
155
+ // Build result string
156
+ let result = ''
157
+
158
+ for (let i = segmentValues.length - 1; i >= 0; i--) {
159
+ const segment = segmentValues[i]
160
+ if (segment === 0n) continue
161
+
162
+ if (result) result += ' '
163
+
164
+ if (i === 0) {
165
+ // Units segment - use requested gender
166
+ result += buildSegment(Number(segment), feminine)
167
+ } else if (i === 1) {
168
+ // Thousands: "mil" not "uno mil"
169
+ if (segment === 1n) {
170
+ result += SCALES[0]
171
+ } else {
172
+ result += buildSegment(Number(segment), false) + ' ' + SCALES[0]
173
+ }
174
+ } else {
175
+ // Millions and above: "un millón", "dos millones", etc.
176
+ const scaleIndex = i - 1 // SCALES[1] = millón, SCALES[2] = billón, etc.
177
+ if (scaleIndex >= SCALES.length) {
178
+ // Beyond our scale vocabulary
179
+ result += buildSegment(Number(segment), false)
180
+ } else if (segment === 1n) {
181
+ // "un millón" not "uno millón"
182
+ result += 'un ' + SCALES[scaleIndex]
183
+ } else {
184
+ result += buildSegment(Number(segment), false) + ' ' + SCALES_PLURAL[scaleIndex]
185
+ }
186
+ }
187
+ }
188
+
189
+ return result
190
+ }
191
+
192
+ /**
193
+ * Converts decimal digits to Spanish words.
194
+ *
195
+ * @param {string} decimalPart - Decimal digits (without the point)
196
+ * @param {boolean} feminine - Use feminine forms
197
+ * @returns {string} Spanish words for decimal part
198
+ */
199
+ function decimalPartToWords (decimalPart, feminine) {
200
+ let result = ''
201
+
202
+ // Handle leading zeros
203
+ let i = 0
204
+ while (i < decimalPart.length && decimalPart[i] === '0') {
205
+ if (result) result += ' '
206
+ result += ZERO
207
+ i++
208
+ }
209
+
210
+ // Convert remainder as a single number
211
+ const remainder = decimalPart.slice(i)
212
+ if (remainder) {
213
+ if (result) result += ' '
214
+ result += integerToWords(BigInt(remainder), feminine)
215
+ }
216
+
217
+ return result
218
+ }
219
+
220
+ /**
221
+ * Converts a numeric value to Spanish words (US short scale).
222
+ *
223
+ * @param {number | string | bigint} value - The numeric value to convert
224
+ * @param {Object} [options] - Optional configuration
225
+ * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
226
+ * @returns {string} The number in Spanish words
227
+ * @throws {TypeError} If value is not a valid numeric type
228
+ * @throws {Error} If value is not a valid number format
229
+ *
230
+ * @example
231
+ * toCardinal(21) // 'veintiuno'
232
+ * toCardinal(21, {gender: 'feminine'}) // 'veintiuna'
233
+ * toCardinal(1000000000) // 'un billón'
234
+ */
235
+ function toCardinal (value, options) {
236
+ options = validateOptions(options)
237
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
238
+
239
+ // Apply option defaults
240
+ const { gender = 'masculine' } = options
241
+ const feminine = gender === 'feminine'
242
+
243
+ let result = ''
244
+
245
+ if (isNegative) {
246
+ result = NEGATIVE + ' '
247
+ }
248
+
249
+ result += integerToWords(integerPart, feminine)
250
+
251
+ if (decimalPart) {
252
+ result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, feminine)
253
+ }
254
+
255
+ return result
256
+ }
257
+
258
+ // ============================================================================
259
+ // ORDINAL: toOrdinal(value, options?)
260
+ // ============================================================================
261
+
262
+ /**
263
+ * Builds ordinal word for a 0-999 segment.
264
+ *
265
+ * @param {number} n - Segment value 0-999
266
+ * @param {boolean} feminine - Use feminine forms
267
+ * @returns {string} Spanish ordinal word
268
+ */
269
+ function buildOrdinalSegment (n, feminine) {
270
+ if (n === 0) return ''
271
+
272
+ const ones = n % 10
273
+ const tens = Math.trunc(n / 10) % 10
274
+ const hundreds = Math.trunc(n / 100)
275
+
276
+ const onesArr = feminine ? ORDINAL_ONES_FEM : ORDINAL_ONES_MASC
277
+ const tensArr = feminine ? ORDINAL_TENS_FEM : ORDINAL_TENS_MASC
278
+ const hundredWord = feminine ? ORDINAL_HUNDRED_FEM : ORDINAL_HUNDRED_MASC
279
+
280
+ const parts = []
281
+
282
+ // Hundreds
283
+ if (hundreds > 0) {
284
+ if (hundreds === 1) {
285
+ parts.push(hundredWord)
286
+ } else {
287
+ const prefixes = ['', '', 'du', 'tri', 'cuadri', 'quin', 'sex', 'septi', 'octi', 'noni']
288
+ parts.push(prefixes[hundreds] + hundredWord)
289
+ }
290
+ }
291
+
292
+ // Tens
293
+ if (tens > 0) {
294
+ parts.push(tensArr[tens])
295
+ }
296
+
297
+ // Ones
298
+ if (ones > 0) {
299
+ parts.push(onesArr[ones])
300
+ }
301
+
302
+ return parts.join(' ')
303
+ }
304
+
305
+ /**
306
+ * Converts a positive integer to Spanish ordinal words.
307
+ *
308
+ * @param {bigint} n - Positive integer to convert
309
+ * @param {boolean} feminine - Use feminine forms
310
+ * @returns {string} Spanish ordinal words
311
+ */
312
+ function integerToOrdinal (n, feminine) {
313
+ const thousandWord = feminine ? ORDINAL_THOUSAND_FEM : ORDINAL_THOUSAND_MASC
314
+ const millionWord = feminine ? ORDINAL_MILLION_FEM : ORDINAL_MILLION_MASC
315
+
316
+ // Fast path: numbers < 1000
317
+ if (n < 1000n) {
318
+ return buildOrdinalSegment(Number(n), feminine)
319
+ }
320
+
321
+ // Numbers 1000-999999
322
+ if (n < 1_000_000n) {
323
+ const thousands = Number(n / 1000n)
324
+ const remainder = Number(n % 1000n)
325
+
326
+ let result = ''
327
+
328
+ if (thousands === 1) {
329
+ result = thousandWord
330
+ } else {
331
+ result = buildOrdinalSegment(thousands, feminine) + ' ' + thousandWord
332
+ }
333
+
334
+ if (remainder > 0) {
335
+ result += ' ' + buildOrdinalSegment(remainder, feminine)
336
+ }
337
+
338
+ return result
339
+ }
340
+
341
+ // Numbers >= 1,000,000
342
+ const millions = Number(n / 1_000_000n)
343
+ const remainder = n % 1_000_000n
344
+
345
+ let result = ''
346
+
347
+ if (millions === 1) {
348
+ result = millionWord
349
+ } else {
350
+ result = buildOrdinalSegment(millions, feminine) + ' ' + millionWord
351
+ }
352
+
353
+ if (remainder > 0n) {
354
+ result += ' ' + integerToOrdinal(remainder, feminine)
355
+ }
356
+
357
+ return result
358
+ }
359
+
360
+ /**
361
+ * Converts a numeric value to Spanish ordinal words.
362
+ *
363
+ * @param {number | string | bigint} value - The positive integer to convert
364
+ * @param {Object} [options] - Optional configuration
365
+ * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
366
+ * @returns {string} The number in Spanish ordinal words
367
+ * @throws {TypeError} If value is not a valid numeric type
368
+ * @throws {Error} If value is not a positive integer
369
+ *
370
+ * @example
371
+ * toOrdinal(1) // 'primero'
372
+ * toOrdinal(1, { gender: 'feminine' }) // 'primera'
373
+ * toOrdinal(21) // 'vigésimo primero'
374
+ */
375
+ function toOrdinal (value, options) {
376
+ options = validateOptions(options)
377
+ const integerPart = parseOrdinalValue(value)
378
+
379
+ const { gender = 'masculine' } = options
380
+ const feminine = gender === 'feminine'
381
+
382
+ return integerToOrdinal(integerPart, feminine)
383
+ }
384
+
385
+ // ============================================================================
386
+ // CURRENCY: toCurrency(value, options?)
387
+ // ============================================================================
388
+
389
+ /**
390
+ * Converts a numeric value to US Dollar currency words in Spanish.
391
+ *
392
+ * US Dollar uses masculine gender for dólares (el dólar)
393
+ * and masculine for centavos (el centavo).
394
+ *
395
+ * @param {number | string | bigint} value - The currency amount to convert
396
+ * @param {Object} [options] - Optional configuration
397
+ * @param {boolean} [options.and=true] - Use "con" between dollars and cents
398
+ * @returns {string} The amount in Spanish US Dollar currency words
399
+ * @throws {TypeError} If value is not a valid numeric type
400
+ * @throws {Error} If value is not a valid number format
401
+ *
402
+ * @example
403
+ * toCurrency(42.50) // 'cuarenta y dos dólares con cincuenta centavos'
404
+ * toCurrency(1) // 'un dólar'
405
+ * toCurrency(0.99) // 'noventa y nueve centavos'
406
+ * toCurrency(42.50, { and: false }) // 'cuarenta y dos dólares cincuenta centavos'
407
+ */
408
+ function toCurrency (value, options) {
409
+ options = validateOptions(options)
410
+ const { isNegative, dollars, cents: centavos } = parseCurrencyValue(value)
411
+ const { and: useAnd = true } = options
412
+
413
+ let result = ''
414
+ if (isNegative) result = NEGATIVE + ' '
415
+
416
+ // Dollars part (show if non-zero, or if no centavos)
417
+ if (dollars > 0n || centavos === 0n) {
418
+ // Use masculine for dollars, but "un dólar" not "uno dólar"
419
+ if (dollars === 1n) {
420
+ result += 'un ' + DOLAR
421
+ } else {
422
+ result += integerToWords(dollars, false) + ' ' + DOLARES
423
+ }
424
+ }
425
+
426
+ // Centavos part
427
+ if (centavos > 0n) {
428
+ if (dollars > 0n) {
429
+ result += useAnd ? ' ' + CURRENCY_CONNECTOR + ' ' : ' '
430
+ }
431
+ // Use masculine for centavos, but "un centavo" not "uno centavo"
432
+ if (centavos === 1n) {
433
+ result += 'un ' + CENTAVO
434
+ } else {
435
+ result += integerToWords(centavos, false) + ' ' + CENTAVOS
436
+ }
437
+ }
438
+
439
+ return result
440
+ }
441
+
442
+ // ============================================================================
443
+ // Public API
444
+ // ============================================================================
445
+
446
+ export { toCardinal, toOrdinal, toCurrency }
package/src/fa-IR.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Converts a numeric value to Persian words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @returns {string} The number in Persian words
6
+ */
7
+ export function toCardinal(value: number | string | bigint): string;
8
+ /**
9
+ * Converts a numeric value to Persian ordinal words.
10
+ *
11
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
12
+ * @returns {string} The number as ordinal words
13
+ * @throws {TypeError} If value is not a valid numeric type
14
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
15
+ *
16
+ * @example
17
+ * toOrdinal(1) // 'اول'
18
+ * toOrdinal(2) // 'دوم'
19
+ * toOrdinal(10) // 'دهم'
20
+ */
21
+ export function toOrdinal(value: number | string | bigint): string;
22
+ /**
23
+ * Converts a numeric value to Persian currency words (Rial).
24
+ *
25
+ * Iranian Rial has no subunit in modern usage.
26
+ * (Historically dinar was 1/100 rial, but not used today)
27
+ *
28
+ * @param {number | string | bigint} value - The currency amount to convert
29
+ * @returns {string} The amount in Persian currency words
30
+ * @throws {TypeError} If value is not a valid numeric type
31
+ * @throws {Error} If value is not a valid number format
32
+ *
33
+ * @example
34
+ * toCurrency(42) // 'چهل و دو ریال'
35
+ * toCurrency(1000) // 'هزار ریال'
36
+ * toCurrency(-5) // 'منفى پنج ریال'
37
+ */
38
+ export function toCurrency(value: number | string | bigint): string;