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/pt-BR.js ADDED
@@ -0,0 +1,534 @@
1
+ /**
2
+ * Portuguese (Brazil) language converter
3
+ *
4
+ * CLDR: pt-BR | Brazilian Portuguese as used in Brazil
5
+ *
6
+ * Portuguese-specific rules:
7
+ * - "e" conjunction between units, tens and hundreds: vinte e um, cento e um
8
+ * - "cem" for exact 100, "cento" for 100+ remainder
9
+ * - Irregular hundreds: duzentos, trezentos, quatrocentos, etc.
10
+ * - Short scale: milhão (10^6), bilhão (10^9), trilhão (10^12)
11
+ * - Omit "um" before "mil"
12
+ */
13
+
14
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
15
+ import { parseCurrencyValue } from './utils/parse-currency.js'
16
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
17
+ import { validateOptions } from './utils/validate-options.js'
18
+
19
+ // ============================================================================
20
+ // Vocabulary (module-level constants)
21
+ // ============================================================================
22
+
23
+ const ONES = ['', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove']
24
+ const TEENS = ['dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove']
25
+ const TENS = ['', '', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa']
26
+
27
+ // Irregular hundreds
28
+ const HUNDREDS = ['', 'cento', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos']
29
+
30
+ const THOUSAND = 'mil'
31
+ const ZERO = 'zero'
32
+ const NEGATIVE = 'menos'
33
+ const DECIMAL_SEP = 'vírgula'
34
+
35
+ // Ordinal vocabulary
36
+ const ORDINAL_ONES = ['', 'primeiro', 'segundo', 'terceiro', 'quarto', 'quinto', 'sexto', 'sétimo', 'oitavo', 'nono']
37
+ const ORDINAL_TEENS = ['décimo', 'décimo primeiro', 'décimo segundo', 'décimo terceiro', 'décimo quarto', 'décimo quinto', 'décimo sexto', 'décimo sétimo', 'décimo oitavo', 'décimo nono']
38
+ const ORDINAL_TENS = ['', '', 'vigésimo', 'trigésimo', 'quadragésimo', 'quinquagésimo', 'sexagésimo', 'septuagésimo', 'octogésimo', 'nonagésimo']
39
+ const ORDINAL_HUNDREDS = ['', 'centésimo', 'ducentésimo', 'tricentésimo', 'quadringentésimo', 'quingentésimo', 'sexcentésimo', 'septingentésimo', 'octingentésimo', 'nongentésimo']
40
+
41
+ // ============================================================================
42
+ // Currency vocabulary
43
+ // ============================================================================
44
+
45
+ // Dicionário focado no uso no Brasil (centavos para dólar e euro em vez de cêntimos)
46
+ const CURRENCIES = {
47
+ BRL: { major: ['real', 'reais'], minor: ['centavo', 'centavos'] },
48
+ USD: { major: ['dólar', 'dólares'], minor: ['centavo', 'centavos'] },
49
+ EUR: { major: ['euro', 'euros'], minor: ['centavo', 'centavos'] }, // No Brasil é comum falar "centavos de euro"
50
+ GBP: { major: ['libra', 'libras'], minor: ['pêni', 'pence'] },
51
+ JPY: { major: ['iene', 'ienes'], minor: ['sen', 'sen'] } // Iene não tem subdivisão usada no dia a dia
52
+ }
53
+
54
+ // Fallback para caso o usuário passe uma moeda não mapeada (ex: 'CAD')
55
+ const DEFAULT_CURRENCY_WORDS = { major: ['unidade', 'unidades'], minor: ['centavo', 'centavos'] }
56
+
57
+ // ============================================================================
58
+ // Segment Building
59
+ // ============================================================================
60
+
61
+ /**
62
+ * Builds segment word for 0-999 with Portuguese "e" rules.
63
+ * Returns the word and whether it's an exact hundred (for "cem" handling).
64
+ */
65
+ function buildSegment (n) {
66
+ if (n === 0) return { word: '', isExactHundred: false }
67
+
68
+ // Special case: exact 100 is "cem"
69
+ if (n === 100) return { word: 'cem', isExactHundred: true }
70
+
71
+ const ones = n % 10
72
+ const tens = Math.trunc(n / 10) % 10
73
+ const hundreds = Math.trunc(n / 100)
74
+
75
+ const parts = []
76
+
77
+ // Hundreds
78
+ if (hundreds > 0) {
79
+ parts.push(HUNDREDS[hundreds])
80
+ }
81
+
82
+ // Tens and ones
83
+ if (tens === 1) {
84
+ // Teens (10-19)
85
+ parts.push(TEENS[ones])
86
+ } else if (tens >= 2) {
87
+ if (ones > 0) {
88
+ // Tens + ones with "e": "vinte e um"
89
+ parts.push(TENS[tens] + ' e ' + ONES[ones])
90
+ } else {
91
+ parts.push(TENS[tens])
92
+ }
93
+ } else if (ones > 0) {
94
+ parts.push(ONES[ones])
95
+ }
96
+
97
+ // Join hundreds with "e": "cento e um", "duzentos e trinta e um"
98
+ const word = parts.join(' e ')
99
+
100
+ return { word, isExactHundred: hundreds > 0 && tens === 0 && ones === 0, startsWithHundreds: n >= 100 }
101
+ }
102
+
103
+ // ============================================================================
104
+ // Scale Word Lookup (Short Scale for pt-BR)
105
+ // ============================================================================
106
+
107
+ // Precompute scale words for singular and plural forms
108
+ // Index 1 = thousands, 2 = millions, 3 = billions (10^9), etc.
109
+ const SCALE_WORDS_SINGULAR = [
110
+ '', // 0 unused
111
+ THOUSAND, // 1: mil
112
+ 'milhão', // 2: 10^6
113
+ 'bilhão', // 3: 10^9
114
+ 'trilhão', // 4: 10^12
115
+ 'quatrilhão', // 5: 10^15
116
+ 'quintilhão', // 6: 10^18
117
+ 'sextilhão', // 7: 10^21
118
+ 'setilhão' // 8: 10^24
119
+ ]
120
+
121
+ const SCALE_WORDS_PLURAL = [
122
+ '', // 0 unused
123
+ THOUSAND, // 1: mil (same)
124
+ 'milhões', // 2: 10^6
125
+ 'bilhões', // 3: 10^9
126
+ 'trilhões', // 4: 10^12
127
+ 'quatrilhões', // 5: 10^15
128
+ 'quintilhões', // 6: 10^18
129
+ 'sextilhões', // 7: 10^21
130
+ 'setilhões' // 8: 10^24
131
+ ]
132
+
133
+ // ============================================================================
134
+ // Conversion Functions
135
+ // ============================================================================
136
+
137
+ /**
138
+ * Converts a non-negative integer to Portuguese words.
139
+ *
140
+ * @param {bigint} n - Non-negative integer to convert
141
+ * @returns {string} Portuguese words
142
+ */
143
+ function integerToWords (n) {
144
+ if (n === 0n) return ZERO
145
+
146
+ // Fast path: numbers < 1000
147
+ if (n < 1000n) {
148
+ return buildSegment(Number(n)).word
149
+ }
150
+
151
+ // Fast path: numbers < 1,000,000 (thousands)
152
+ if (n < 1_000_000n) {
153
+ const thousands = Number(n / 1000n)
154
+ const remainder = Number(n % 1000n)
155
+
156
+ let result
157
+ if (thousands === 1) {
158
+ // "mil" not "um mil"
159
+ result = THOUSAND
160
+ } else {
161
+ result = buildSegment(thousands).word + ' ' + THOUSAND
162
+ }
163
+
164
+ if (remainder > 0) {
165
+ const remainderResult = buildSegment(remainder)
166
+ // REGRA DO "E": Menor que 100 OU Centena Exata (ex: 500)
167
+ if (!remainderResult.startsWithHundreds || remainderResult.isExactHundred) {
168
+ result += ' e ' + remainderResult.word
169
+ } else {
170
+ result += ' ' + remainderResult.word
171
+ }
172
+ }
173
+
174
+ return result
175
+ }
176
+
177
+ // For numbers >= 1,000,000, use scale decomposition
178
+ return buildLargeNumberWords(n)
179
+ }
180
+
181
+ /**
182
+ * Builds words for numbers >= 1,000,000.
183
+ * Uses BigInt division for faster segment extraction.
184
+ *
185
+ * @param {bigint} n - Number >= 1,000,000
186
+ * @returns {string} Portuguese words
187
+ */
188
+ function buildLargeNumberWords (n) {
189
+ // Extract segments using BigInt division
190
+ const segments = []
191
+ let temp = n
192
+ while (temp > 0n) {
193
+ segments.push(Number(temp % 1000n))
194
+ temp = temp / 1000n
195
+ }
196
+
197
+ // Find the first non-zero segment index
198
+ let firstNonZeroIdx = 0
199
+ for (let i = 0; i < segments.length; i++) {
200
+ if (segments[i] !== 0) {
201
+ firstNonZeroIdx = i
202
+ break
203
+ }
204
+ }
205
+
206
+ let result = ''
207
+ let prevWasScale = false
208
+
209
+ for (let i = segments.length - 1; i >= 0; i--) {
210
+ const segment = segments[i]
211
+ if (segment === 0) continue
212
+
213
+ const segmentResult = buildSegment(segment)
214
+ const isLastSegment = (i === firstNonZeroIdx)
215
+
216
+ // REGRA DO "E": Se for o último segmento e for < 100 OU centena exata (ex: 500)
217
+ if (result && isLastSegment && prevWasScale && (!segmentResult.startsWithHundreds || segmentResult.isExactHundred)) {
218
+ result += ' e'
219
+ }
220
+
221
+ if (result) result += ' '
222
+
223
+ if (i === 0) {
224
+ // Units segment
225
+ result += segmentResult.word
226
+ prevWasScale = false
227
+ } else if (i === 1) {
228
+ // Thousands
229
+ if (segment === 1) {
230
+ result += THOUSAND
231
+ } else {
232
+ result += segmentResult.word + ' ' + THOUSAND
233
+ }
234
+ prevWasScale = true
235
+ } else {
236
+ // Million and above
237
+ const scaleWord = segment === 1 ? SCALE_WORDS_SINGULAR[i] : SCALE_WORDS_PLURAL[i]
238
+ if (segment === 1) {
239
+ result += 'um ' + scaleWord
240
+ } else {
241
+ result += segmentResult.word + ' ' + scaleWord
242
+ }
243
+ prevWasScale = true
244
+ }
245
+ }
246
+
247
+ return result
248
+ }
249
+
250
+ /**
251
+ * Converts decimal digits to Portuguese words.
252
+ *
253
+ * @param {string} decimalPart - Decimal digits (without the point)
254
+ * @returns {string} Portuguese words for decimal part
255
+ */
256
+ function decimalPartToWords (decimalPart) {
257
+ let result = ''
258
+
259
+ // Handle leading zeros
260
+ let i = 0
261
+ while (i < decimalPart.length && decimalPart[i] === '0') {
262
+ if (result) result += ' '
263
+ result += ZERO
264
+ i++
265
+ }
266
+
267
+ // Convert remainder as a single number
268
+ const remainder = decimalPart.slice(i)
269
+ if (remainder) {
270
+ if (result) result += ' '
271
+ result += integerToWords(BigInt(remainder))
272
+ }
273
+
274
+ return result
275
+ }
276
+
277
+ /**
278
+ * Converts a numeric value to Portuguese words.
279
+ *
280
+ * @param {number | string | bigint} value - The numeric value to convert
281
+ * @returns {string} The number in Portuguese words
282
+ */
283
+ function toCardinal (value) {
284
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
285
+
286
+ let result = ''
287
+
288
+ if (isNegative) {
289
+ result = NEGATIVE + ' '
290
+ }
291
+
292
+ result += integerToWords(integerPart)
293
+
294
+ if (decimalPart) {
295
+ result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
296
+ }
297
+
298
+ return result
299
+ }
300
+
301
+ // ============================================================================
302
+ // Ordinal Functions
303
+ // ============================================================================
304
+
305
+ /**
306
+ * Builds ordinal words for 0-999.
307
+ *
308
+ * @param {number} n - Number 0-999
309
+ * @returns {string} Portuguese ordinal words
310
+ */
311
+ function buildOrdinalSegment (n) {
312
+ if (n === 0) return ''
313
+
314
+ const ones = n % 10
315
+ const tens = Math.trunc(n / 10) % 10
316
+ const hundreds = Math.trunc(n / 100)
317
+
318
+ const parts = []
319
+
320
+ // Hundreds ordinal
321
+ if (hundreds > 0) {
322
+ parts.push(ORDINAL_HUNDREDS[hundreds])
323
+ }
324
+
325
+ // Tens and ones
326
+ if (tens === 1) {
327
+ // 10-19: use teens array (décimo, décimo primeiro, etc.)
328
+ parts.push(ORDINAL_TEENS[ones])
329
+ } else if (tens >= 2) {
330
+ parts.push(ORDINAL_TENS[tens])
331
+ if (ones > 0) {
332
+ parts.push(ORDINAL_ONES[ones])
333
+ }
334
+ } else if (ones > 0) {
335
+ parts.push(ORDINAL_ONES[ones])
336
+ }
337
+
338
+ return parts.join(' ')
339
+ }
340
+
341
+ /**
342
+ * Builds ordinal words for large numbers.
343
+ *
344
+ * @param {bigint} n - Non-negative integer
345
+ * @returns {string} Portuguese ordinal words
346
+ */
347
+ function buildLargeOrdinal (n) {
348
+ // Extract segments
349
+ const segments = []
350
+ let temp = n
351
+ while (temp > 0n) {
352
+ segments.push(Number(temp % 1000n))
353
+ temp = temp / 1000n
354
+ }
355
+
356
+ // Find the lowest non-zero segment (index 0 = units, lowest scale)
357
+ let lowestNonZeroIdx = 0
358
+ for (let i = 0; i < segments.length; i++) {
359
+ if (segments[i] !== 0) {
360
+ lowestNonZeroIdx = i
361
+ break
362
+ }
363
+ }
364
+
365
+ // Scale ordinal words (singular forms - short scale for pt-BR)
366
+ const SCALE_ORDINAL = ['', 'milésimo', 'milionésimo', 'bilionésimo', 'trilionésimo', 'quatrilionésimo', 'quintilionésimo', 'sextilionésimo']
367
+
368
+ let result = ''
369
+
370
+ for (let i = segments.length - 1; i >= 0; i--) {
371
+ const segment = segments[i]
372
+ if (segment === 0) continue
373
+
374
+ if (result) result += ' '
375
+
376
+ if (i === lowestNonZeroIdx) {
377
+ // Last non-zero segment gets ordinal form
378
+ if (i === 0) {
379
+ // Units: just ordinal
380
+ result += buildOrdinalSegment(segment)
381
+ } else if (segment === 1 && i > 0) {
382
+ // Exact scale: "milésimo", "milionésimo", etc.
383
+ result += SCALE_ORDINAL[i]
384
+ } else {
385
+ // Segment + scale ordinal
386
+ result += buildOrdinalSegment(segment) + ' ' + SCALE_ORDINAL[i]
387
+ }
388
+ } else {
389
+ // Higher segments use cardinal form
390
+ if (i === 0) {
391
+ result += buildSegment(segment).word
392
+ } else if (i === 1) {
393
+ if (segment === 1) {
394
+ result += THOUSAND
395
+ } else {
396
+ result += buildSegment(segment).word + ' ' + THOUSAND
397
+ }
398
+ } else {
399
+ const scaleWord = segment === 1 ? SCALE_WORDS_SINGULAR[i] : SCALE_WORDS_PLURAL[i]
400
+ if (segment === 1) {
401
+ result += 'um ' + scaleWord
402
+ } else {
403
+ result += buildSegment(segment).word + ' ' + scaleWord
404
+ }
405
+ }
406
+ }
407
+ }
408
+
409
+ return result
410
+ }
411
+
412
+ /**
413
+ * Converts a number to Portuguese ordinal words.
414
+ *
415
+ * @param {number | string | bigint} value - The number to convert
416
+ * @returns {string} Portuguese ordinal words
417
+ */
418
+ function toOrdinal (value) {
419
+ const n = parseOrdinalValue(value)
420
+
421
+ // Fast path: 1-9
422
+ if (n < 10n) {
423
+ return ORDINAL_ONES[Number(n)]
424
+ }
425
+
426
+ // Fast path: 10-19
427
+ if (n < 20n) {
428
+ return ORDINAL_TEENS[Number(n) - 10]
429
+ }
430
+
431
+ // Fast path: 20-99
432
+ if (n < 100n) {
433
+ const ones = Number(n % 10n)
434
+ const tens = Number(n / 10n)
435
+ if (ones === 0) {
436
+ return ORDINAL_TENS[tens]
437
+ }
438
+ return ORDINAL_TENS[tens] + ' ' + ORDINAL_ONES[ones]
439
+ }
440
+
441
+ // Fast path: 100-999
442
+ if (n < 1000n) {
443
+ return buildOrdinalSegment(Number(n))
444
+ }
445
+
446
+ // Large numbers
447
+ return buildLargeOrdinal(n)
448
+ }
449
+
450
+ // ============================================================================
451
+ // Currency Functions
452
+ // ============================================================================
453
+
454
+ /**
455
+ * Converts a number to Brazilian Portuguese currency words.
456
+ *
457
+ * @param {number | string | bigint} value - The amount to convert
458
+ * @param {Object} [options]
459
+ * @param {boolean} [options.and=true] - Include "e" between major and minor units
460
+ * @param {string} [options.currency] - Currency code (e.g., 'BRL', 'USD')
461
+ * @returns {string} Brazilian Portuguese currency words
462
+ *
463
+ * @example
464
+ * toCurrency(42.50) // 'quarenta e dois reais e cinquenta centavos'
465
+ * toCurrency(42.50, {currency: 'USD'}) // 'quarenta e dois dólares e cinquenta centavos'
466
+ */
467
+ function toCurrency (value, options) {
468
+ options = validateOptions(options)
469
+ const { isNegative, dollars: majorUnits, cents: minorUnits } = parseCurrencyValue(value)
470
+ const { and = true } = options
471
+
472
+ // 1. Descobre a moeda informada ou busca automaticamente a padrão do país (pt-BR = BRL)
473
+ let currencyCode = options.currency
474
+ if (!currencyCode) {
475
+ try {
476
+ const localeInfo = new Intl.Locale('pt-BR')
477
+ currencyCode = localeInfo.getCurrencies?.()[0]
478
+ } catch (e) {
479
+ // Ignora erro em ambientes antigos (fallback garantido abaixo)
480
+ }
481
+ currencyCode = currencyCode || 'BRL' // Padrão absoluto para o Brasil
482
+ }
483
+ currencyCode = currencyCode.toUpperCase()
484
+
485
+ // 2. Busca os nomes no dicionário ou usa o fallback genérico
486
+ const currencyWords = CURRENCIES[currencyCode] || {
487
+ major: [currencyCode, currencyCode],
488
+ minor: DEFAULT_CURRENCY_WORDS.minor
489
+ }
490
+
491
+ let result = ''
492
+
493
+ if (isNegative) {
494
+ result = NEGATIVE + ' '
495
+ }
496
+
497
+ const hasMajor = majorUnits > 0n
498
+ const hasMinor = minorUnits > 0n
499
+
500
+ if (!hasMajor && !hasMinor) {
501
+ return ZERO + ' ' + currencyWords.major[1]
502
+ }
503
+
504
+ // Parte inteira (Reais, Dólares...)
505
+ if (hasMajor) {
506
+ const majorText = integerToWords(majorUnits)
507
+ const majorUnit = majorUnits === 1n ? currencyWords.major[0] : currencyWords.major[1]
508
+ result += majorText + ' ' + majorUnit
509
+ }
510
+
511
+ // Parte decimal (Centavos...)
512
+ if (hasMinor) {
513
+ if (hasMajor) {
514
+ result += and ? ' e ' : ' '
515
+ }
516
+ const minorText = integerToWords(minorUnits)
517
+ const minorUnit = minorUnits === 1n ? currencyWords.minor[0] : currencyWords.minor[1]
518
+
519
+ // Ignora adicionar unidade de centavos se a moeda não os tiver (ex: JPY onde minor é string vazia)
520
+ if (minorUnit === '') {
521
+ result += minorText
522
+ } else {
523
+ result += minorText + ' ' + minorUnit
524
+ }
525
+ }
526
+
527
+ return result
528
+ }
529
+
530
+ // ============================================================================
531
+ // Public API
532
+ // ============================================================================
533
+
534
+ export { toCardinal, toOrdinal, toCurrency }
package/src/pt-PT.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Converts a numeric value to Portuguese words.
3
+ *
4
+ * This is the main public API. It accepts any valid numeric input
5
+ * (number, string, or bigint) and handles parsing internally.
6
+ *
7
+ * @param {number | string | bigint} value - The numeric value to convert
8
+ * @returns {string} The number in Portuguese words
9
+ * @throws {TypeError} If value is not a valid numeric type
10
+ * @throws {Error} If value is not a valid number format
11
+ *
12
+ * @example
13
+ * toCardinal(21) // 'vinte e um'
14
+ * toCardinal(100) // 'cem'
15
+ * toCardinal(1000000) // 'um milhão'
16
+ */
17
+ export function toCardinal(value: number | string | bigint): string;
18
+ /**
19
+ * Converts a number to Portuguese ordinal words.
20
+ *
21
+ * @param {number | string | bigint} value - The number to convert
22
+ * @returns {string} Portuguese ordinal words
23
+ *
24
+ * @example
25
+ * toOrdinal(1) // 'primeiro'
26
+ * toOrdinal(21) // 'vigésimo primeiro'
27
+ * toOrdinal(100) // 'centésimo'
28
+ */
29
+ export function toOrdinal(value: number | string | bigint): string;
30
+ /**
31
+ * Converts a number to Portuguese currency words (Euro).
32
+ *
33
+ * @param {number | string | bigint} value - The amount to convert
34
+ * @param {Object} [options]
35
+ * @param {boolean} [options.and=true] - Include "e" between euros and cents
36
+ * @returns {string} Portuguese currency words
37
+ *
38
+ * @example
39
+ * toCurrency(42.50) // 'quarenta e dois euros e cinquenta cêntimos'
40
+ * toCurrency(1) // 'um euro'
41
+ * toCurrency(0.01) // 'um cêntimo'
42
+ */
43
+ export function toCurrency(value: number | string | bigint, options?: {
44
+ and?: boolean | undefined;
45
+ }): string;