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
@@ -1,7 +1,12 @@
1
1
  /**
2
- * Spanish language converter - Functional Implementation
2
+ * Spanish (Mexico) language converter
3
3
  *
4
- * Self-contained module with its own input validation, ready for subpath exports.
4
+ * CLDR: es-MX | Spanish as used in Mexico
5
+ *
6
+ * Uses the European long scale numbering system (per RAE and Academia Mexicana):
7
+ * - 10⁶ = millón
8
+ * - 10⁹ = mil millones (thousand millions)
9
+ * - 10¹² = billón
5
10
  *
6
11
  * Spanish-specific rules:
7
12
  * - Gender agreement: uno/una, veintiuno/veintiuna, hundreds
@@ -9,12 +14,13 @@
9
14
  * - "y" conjunction: treinta y uno (only 30-99 with ones)
10
15
  * - "cien" for exact 100, "ciento/cienta" otherwise
11
16
  * - Irregular hundreds: quinientos, setecientos, novecientos
12
- * - Compound long scale: millón, mil millones, billón, mil billones
13
17
  * - "un" before millón (not "uno"), omit before mil
14
18
  */
15
19
 
16
- import { parseNumericValue } from '../utils/parse-numeric.js'
17
- import { validateOptions } from '../utils/validate-options.js'
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'
18
24
 
19
25
  // ============================================================================
20
26
  // Vocabulary (module-level constants)
@@ -40,10 +46,30 @@ const SCALES = ['millón', 'billón', 'trillón', 'cuatrillón']
40
46
  const SCALES_PLURAL = ['millones', 'billones', 'trillones', 'cuatrillones']
41
47
 
42
48
  const THOUSAND = 'mil'
49
+
43
50
  const ZERO = 'cero'
44
51
  const NEGATIVE = 'menos'
45
52
  const DECIMAL_SEP = 'punto'
46
53
 
54
+ // Ordinal vocabulary (identical to es-ES - ordinals don't vary by region)
55
+ const ORDINAL_ONES_MASC = ['', 'primero', 'segundo', 'tercero', 'cuarto', 'quinto', 'sexto', 'séptimo', 'octavo', 'noveno']
56
+ const ORDINAL_ONES_FEM = ['', 'primera', 'segunda', 'tercera', 'cuarta', 'quinta', 'sexta', 'séptima', 'octava', 'novena']
57
+ const ORDINAL_TENS_MASC = ['', 'décimo', 'vigésimo', 'trigésimo', 'cuadragésimo', 'quincuagésimo', 'sexagésimo', 'septuagésimo', 'octogésimo', 'nonagésimo']
58
+ const ORDINAL_TENS_FEM = ['', 'décima', 'vigésima', 'trigésima', 'cuadragésima', 'quincuagésima', 'sexagésima', 'septuagésima', 'octogésima', 'nonagésima']
59
+ const ORDINAL_HUNDRED_MASC = 'centésimo'
60
+ const ORDINAL_HUNDRED_FEM = 'centésima'
61
+ const ORDINAL_THOUSAND_MASC = 'milésimo'
62
+ const ORDINAL_THOUSAND_FEM = 'milésima'
63
+ const ORDINAL_MILLION_MASC = 'millonésimo'
64
+ const ORDINAL_MILLION_FEM = 'millonésima'
65
+
66
+ // Currency vocabulary (Mexican Peso - MXN)
67
+ const PESO = 'peso'
68
+ const PESOS = 'pesos'
69
+ const CENTAVO = 'centavo'
70
+ const CENTAVOS = 'centavos'
71
+ const CURRENCY_CONNECTOR = 'con'
72
+
47
73
  // ============================================================================
48
74
  // Segment Building
49
75
  // ============================================================================
@@ -61,8 +87,8 @@ function buildSegment (n, feminine) {
61
87
  if (n === 100) return 'cien'
62
88
 
63
89
  const ones = n % 10
64
- const tens = Math.floor(n / 10) % 10
65
- const hundreds = Math.floor(n / 100)
90
+ const tens = Math.trunc(n / 10) % 10
91
+ const hundreds = Math.trunc(n / 100)
66
92
  const tensOnes = n % 100
67
93
 
68
94
  const parts = []
@@ -271,10 +297,7 @@ function decimalPartToWords (decimalPart, feminine) {
271
297
  }
272
298
 
273
299
  /**
274
- * Converts a numeric value to Spanish words.
275
- *
276
- * This is the main public API. It accepts any valid numeric input
277
- * (number, string, or bigint) and handles parsing internally.
300
+ * Converts a numeric value to Spanish words (long scale).
278
301
  *
279
302
  * @param {number | string | bigint} value - The numeric value to convert
280
303
  * @param {Object} [options] - Optional configuration
@@ -284,14 +307,17 @@ function decimalPartToWords (decimalPart, feminine) {
284
307
  * @throws {Error} If value is not a valid number format
285
308
  *
286
309
  * @example
287
- * toWords(21) // 'veintiuno'
288
- * toWords(21, {gender: 'feminine'}) // 'veintiuna'
289
- * toWords(1000000) // 'un millón'
310
+ * toCardinal(21) // 'veintiuno'
311
+ * toCardinal(21, {gender: 'feminine'}) // 'veintiuna'
312
+ * toCardinal(1000000000) // 'mil millones'
290
313
  */
291
- function toWords (value, options) {
314
+ function toCardinal (value, options) {
292
315
  options = validateOptions(options)
293
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
294
- const feminine = options.gender === 'feminine'
316
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
317
+
318
+ // Apply option defaults
319
+ const { gender = 'masculine' } = options
320
+ const feminine = gender === 'feminine'
295
321
 
296
322
  let result = ''
297
323
 
@@ -308,8 +334,192 @@ function toWords (value, options) {
308
334
  return result
309
335
  }
310
336
 
337
+ // ============================================================================
338
+ // ORDINAL: toOrdinal(value, options?)
339
+ // ============================================================================
340
+
341
+ /**
342
+ * Builds ordinal word for a 0-999 segment.
343
+ *
344
+ * @param {number} n - Segment value 0-999
345
+ * @param {boolean} feminine - Use feminine forms
346
+ * @returns {string} Spanish ordinal word
347
+ */
348
+ function buildOrdinalSegment (n, feminine) {
349
+ if (n === 0) return ''
350
+
351
+ const ones = n % 10
352
+ const tens = Math.trunc(n / 10) % 10
353
+ const hundreds = Math.trunc(n / 100)
354
+
355
+ const onesArr = feminine ? ORDINAL_ONES_FEM : ORDINAL_ONES_MASC
356
+ const tensArr = feminine ? ORDINAL_TENS_FEM : ORDINAL_TENS_MASC
357
+ const hundredWord = feminine ? ORDINAL_HUNDRED_FEM : ORDINAL_HUNDRED_MASC
358
+
359
+ const parts = []
360
+
361
+ // Hundreds
362
+ if (hundreds > 0) {
363
+ if (hundreds === 1) {
364
+ parts.push(hundredWord)
365
+ } else {
366
+ const prefixes = ['', '', 'du', 'tri', 'cuadri', 'quin', 'sex', 'septi', 'octi', 'noni']
367
+ parts.push(prefixes[hundreds] + hundredWord)
368
+ }
369
+ }
370
+
371
+ // Tens
372
+ if (tens > 0) {
373
+ parts.push(tensArr[tens])
374
+ }
375
+
376
+ // Ones
377
+ if (ones > 0) {
378
+ parts.push(onesArr[ones])
379
+ }
380
+
381
+ return parts.join(' ')
382
+ }
383
+
384
+ /**
385
+ * Converts a positive integer to Spanish ordinal words.
386
+ *
387
+ * @param {bigint} n - Positive integer to convert
388
+ * @param {boolean} feminine - Use feminine forms
389
+ * @returns {string} Spanish ordinal words
390
+ */
391
+ function integerToOrdinal (n, feminine) {
392
+ const thousandWord = feminine ? ORDINAL_THOUSAND_FEM : ORDINAL_THOUSAND_MASC
393
+ const millionWord = feminine ? ORDINAL_MILLION_FEM : ORDINAL_MILLION_MASC
394
+
395
+ // Fast path: numbers < 1000
396
+ if (n < 1000n) {
397
+ return buildOrdinalSegment(Number(n), feminine)
398
+ }
399
+
400
+ // Numbers 1000-999999
401
+ if (n < 1_000_000n) {
402
+ const thousands = Number(n / 1000n)
403
+ const remainder = Number(n % 1000n)
404
+
405
+ let result = ''
406
+
407
+ if (thousands === 1) {
408
+ result = thousandWord
409
+ } else {
410
+ result = buildOrdinalSegment(thousands, feminine) + ' ' + thousandWord
411
+ }
412
+
413
+ if (remainder > 0) {
414
+ result += ' ' + buildOrdinalSegment(remainder, feminine)
415
+ }
416
+
417
+ return result
418
+ }
419
+
420
+ // Numbers >= 1,000,000
421
+ const millions = Number(n / 1_000_000n)
422
+ const remainder = n % 1_000_000n
423
+
424
+ let result = ''
425
+
426
+ if (millions === 1) {
427
+ result = millionWord
428
+ } else {
429
+ result = buildOrdinalSegment(millions, feminine) + ' ' + millionWord
430
+ }
431
+
432
+ if (remainder > 0n) {
433
+ result += ' ' + integerToOrdinal(remainder, feminine)
434
+ }
435
+
436
+ return result
437
+ }
438
+
439
+ /**
440
+ * Converts a numeric value to Spanish ordinal words.
441
+ *
442
+ * @param {number | string | bigint} value - The positive integer to convert
443
+ * @param {Object} [options] - Optional configuration
444
+ * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
445
+ * @returns {string} The number in Spanish ordinal words
446
+ * @throws {TypeError} If value is not a valid numeric type
447
+ * @throws {Error} If value is not a positive integer
448
+ *
449
+ * @example
450
+ * toOrdinal(1) // 'primero'
451
+ * toOrdinal(1, { gender: 'feminine' }) // 'primera'
452
+ * toOrdinal(21) // 'vigésimo primero'
453
+ */
454
+ function toOrdinal (value, options) {
455
+ options = validateOptions(options)
456
+ const integerPart = parseOrdinalValue(value)
457
+
458
+ const { gender = 'masculine' } = options
459
+ const feminine = gender === 'feminine'
460
+
461
+ return integerToOrdinal(integerPart, feminine)
462
+ }
463
+
464
+ // ============================================================================
465
+ // CURRENCY: toCurrency(value, options?)
466
+ // ============================================================================
467
+
468
+ /**
469
+ * Converts a numeric value to Mexican Peso currency words.
470
+ *
471
+ * Mexican currency uses masculine gender for pesos (el peso)
472
+ * and masculine for centavos (el centavo).
473
+ *
474
+ * @param {number | string | bigint} value - The currency amount to convert
475
+ * @param {Object} [options] - Optional configuration
476
+ * @param {boolean} [options.and=true] - Use "con" between pesos and centavos
477
+ * @returns {string} The amount in Mexican currency words
478
+ * @throws {TypeError} If value is not a valid numeric type
479
+ * @throws {Error} If value is not a valid number format
480
+ *
481
+ * @example
482
+ * toCurrency(42.50) // 'cuarenta y dos pesos con cincuenta centavos'
483
+ * toCurrency(1) // 'un peso'
484
+ * toCurrency(0.99) // 'noventa y nueve centavos'
485
+ * toCurrency(42.50, { and: false }) // 'cuarenta y dos pesos cincuenta centavos'
486
+ */
487
+ function toCurrency (value, options) {
488
+ options = validateOptions(options)
489
+ const { isNegative, dollars: pesos, cents: centavos } = parseCurrencyValue(value)
490
+ const { and: useAnd = true } = options
491
+
492
+ let result = ''
493
+ if (isNegative) result = NEGATIVE + ' '
494
+
495
+ // Pesos part (show if non-zero, or if no centavos)
496
+ if (pesos > 0n || centavos === 0n) {
497
+ // Use masculine for pesos, but "un peso" not "uno peso"
498
+ if (pesos === 1n) {
499
+ result += 'un ' + PESO
500
+ } else {
501
+ result += integerToWords(pesos, false) + ' ' + PESOS
502
+ }
503
+ }
504
+
505
+ // Centavos part
506
+ if (centavos > 0n) {
507
+ if (pesos > 0n) {
508
+ result += useAnd ? ' ' + CURRENCY_CONNECTOR + ' ' : ' '
509
+ }
510
+ // Use masculine for centavos, but "un centavo" not "uno centavo"
511
+ if (centavos === 1n) {
512
+ result += 'un ' + CENTAVO
513
+ } else {
514
+ result += integerToWords(centavos, false) + ' ' + CENTAVOS
515
+ }
516
+ }
517
+
518
+ return result
519
+ }
520
+
311
521
  // ============================================================================
312
522
  // Public API
313
523
  // ============================================================================
314
524
 
315
- export { toWords }
525
+ export { toCardinal, toOrdinal, toCurrency }
package/src/es-US.d.ts ADDED
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Converts a numeric value to Spanish words (US short scale).
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @param {Object} [options] - Optional configuration
6
+ * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
7
+ * @returns {string} The number in Spanish words
8
+ * @throws {TypeError} If value is not a valid numeric type
9
+ * @throws {Error} If value is not a valid number format
10
+ *
11
+ * @example
12
+ * toCardinal(21) // 'veintiuno'
13
+ * toCardinal(21, {gender: 'feminine'}) // 'veintiuna'
14
+ * toCardinal(1000000000) // 'un billón'
15
+ */
16
+ export function toCardinal(value: number | string | bigint, options?: {
17
+ gender?: "masculine" | "feminine" | undefined;
18
+ }): string;
19
+ /**
20
+ * Converts a numeric value to Spanish ordinal words.
21
+ *
22
+ * @param {number | string | bigint} value - The positive integer to convert
23
+ * @param {Object} [options] - Optional configuration
24
+ * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
25
+ * @returns {string} The number in Spanish ordinal words
26
+ * @throws {TypeError} If value is not a valid numeric type
27
+ * @throws {Error} If value is not a positive integer
28
+ *
29
+ * @example
30
+ * toOrdinal(1) // 'primero'
31
+ * toOrdinal(1, { gender: 'feminine' }) // 'primera'
32
+ * toOrdinal(21) // 'vigésimo primero'
33
+ */
34
+ export function toOrdinal(value: number | string | bigint, options?: {
35
+ gender?: "masculine" | "feminine" | undefined;
36
+ }): string;
37
+ /**
38
+ * Converts a numeric value to US Dollar currency words in Spanish.
39
+ *
40
+ * US Dollar uses masculine gender for dólares (el dólar)
41
+ * and masculine for centavos (el centavo).
42
+ *
43
+ * @param {number | string | bigint} value - The currency amount to convert
44
+ * @param {Object} [options] - Optional configuration
45
+ * @param {boolean} [options.and=true] - Use "con" between dollars and cents
46
+ * @returns {string} The amount in Spanish US Dollar currency words
47
+ * @throws {TypeError} If value is not a valid numeric type
48
+ * @throws {Error} If value is not a valid number format
49
+ *
50
+ * @example
51
+ * toCurrency(42.50) // 'cuarenta y dos dólares con cincuenta centavos'
52
+ * toCurrency(1) // 'un dólar'
53
+ * toCurrency(0.99) // 'noventa y nueve centavos'
54
+ * toCurrency(42.50, { and: false }) // 'cuarenta y dos dólares cincuenta centavos'
55
+ */
56
+ export function toCurrency(value: number | string | bigint, options?: {
57
+ and?: boolean | undefined;
58
+ }): string;