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,7 @@
1
1
  /**
2
- * Filipino language converter - Functional Implementation
2
+ * Filipino (Philippines) language converter
3
3
  *
4
- * Self-contained module with its own input validation, ready for subpath exports.
4
+ * CLDR: fil-PH | Filipino as used in the Philippines
5
5
  *
6
6
  * Key features:
7
7
  * - Linker "ng" after vowels: "isang daang" (100)
@@ -10,7 +10,9 @@
10
10
  * - Per-digit decimal reading
11
11
  */
12
12
 
13
- import { parseNumericValue } from '../utils/parse-numeric.js'
13
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
14
+ import { parseCurrencyValue } from './utils/parse-currency.js'
15
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
14
16
 
15
17
  // ============================================================================
16
18
  // Vocabulary
@@ -31,6 +33,25 @@ const DECIMAL_SEP = 'punto'
31
33
  // Short scale with linker
32
34
  const SCALE_WORDS = ['', THOUSAND, 'milyong', 'bilyong', 'trilyong']
33
35
 
36
+ // ============================================================================
37
+ // Ordinal Vocabulary
38
+ // ============================================================================
39
+
40
+ // Filipino ordinals use "ika-" prefix: ika-isa (1st), ikalawa (2nd), etc.
41
+ // Special forms for 1st and 2nd
42
+ const ORDINAL_PREFIX = 'ika'
43
+ const ORDINAL_SPECIAL = {
44
+ 1: 'una', // first
45
+ 2: 'ikalawa' // second (contracted form)
46
+ }
47
+
48
+ // ============================================================================
49
+ // Currency Vocabulary (Philippine Peso)
50
+ // ============================================================================
51
+
52
+ const PESO = 'piso'
53
+ const SENTIMO = 'sentimo'
54
+
34
55
  // ============================================================================
35
56
  // Helper Functions
36
57
  // ============================================================================
@@ -53,8 +74,8 @@ function buildSegment (n) {
53
74
  if (n === 0) return ''
54
75
 
55
76
  const ones = n % 10
56
- const tensDigit = Math.floor(n / 10) % 10
57
- const hundredsDigit = Math.floor(n / 100)
77
+ const tensDigit = Math.trunc(n / 10) % 10
78
+ const hundredsDigit = Math.trunc(n / 100)
58
79
 
59
80
  const parts = []
60
81
 
@@ -186,8 +207,8 @@ function decimalPartToWords (decimalPart) {
186
207
  * @param {number | string | bigint} value - The numeric value to convert
187
208
  * @returns {string} The number in Filipino words
188
209
  */
189
- function toWords (value) {
190
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
210
+ function toCardinal (value) {
211
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
191
212
 
192
213
  let result = ''
193
214
 
@@ -204,8 +225,123 @@ function toWords (value) {
204
225
  return result
205
226
  }
206
227
 
228
+ // ============================================================================
229
+ // ORDINAL: toOrdinal(value)
230
+ // ============================================================================
231
+
232
+ /**
233
+ * Converts a non-negative integer to Filipino ordinal words.
234
+ *
235
+ * Filipino ordinals: una (1st), ikalawa (2nd), then ika- + cardinal.
236
+ *
237
+ * @param {bigint} n - Positive integer to convert
238
+ * @returns {string} Filipino ordinal words
239
+ */
240
+ function integerToOrdinal (n) {
241
+ // Special forms for 1st and 2nd
242
+ if (n === 1n) return ORDINAL_SPECIAL[1]
243
+ if (n === 2n) return ORDINAL_SPECIAL[2]
244
+
245
+ // For 3+, use ika- prefix + cardinal
246
+ return ORDINAL_PREFIX + '-' + integerToWords(n)
247
+ }
248
+
249
+ /**
250
+ * Converts a numeric value to Filipino ordinal words.
251
+ *
252
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
253
+ * @returns {string} The number as ordinal words
254
+ * @throws {TypeError} If value is not a valid numeric type
255
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
256
+ *
257
+ * @example
258
+ * toOrdinal(1) // 'una'
259
+ * toOrdinal(2) // 'ikalawa'
260
+ * toOrdinal(3) // 'ika-tatlo'
261
+ */
262
+ function toOrdinal (value) {
263
+ const integerPart = parseOrdinalValue(value)
264
+ return integerToOrdinal(integerPart)
265
+ }
266
+
267
+ // ============================================================================
268
+ // CURRENCY: toCurrency(value)
269
+ // ============================================================================
270
+
271
+ /**
272
+ * Converts a numeric value to Filipino currency words (Philippine Peso).
273
+ *
274
+ * Uses piso (peso) and sentimo (centavo).
275
+ *
276
+ * @param {number | string | bigint} value - The currency amount to convert
277
+ * @returns {string} The amount in Filipino currency words
278
+ * @throws {TypeError} If value is not a valid numeric type
279
+ * @throws {Error} If value is not a valid number format
280
+ *
281
+ * @example
282
+ * toCurrency(42) // 'apatnapu dalawang piso'
283
+ * toCurrency(1.50) // 'isang piso at limampung sentimo'
284
+ * toCurrency(-5) // 'negatibo limang piso'
285
+ */
286
+ function toCurrency (value) {
287
+ const { isNegative, dollars: pesos, cents: sentimos } = parseCurrencyValue(value)
288
+
289
+ let result = ''
290
+ if (isNegative) {
291
+ result = NEGATIVE + ' '
292
+ }
293
+
294
+ // Pesos part
295
+ if (pesos > 0n || sentimos === 0n) {
296
+ // Add linker before "piso"
297
+ const pesoWords = integerToWords(pesos)
298
+ if (pesos === 0n) {
299
+ result += pesoWords + ' ' + PESO
300
+ } else {
301
+ // Need to add linker to the last word before "piso"
302
+ const lastSpaceIdx = pesoWords.lastIndexOf(' ')
303
+ if (lastSpaceIdx === -1) {
304
+ // Single word
305
+ result += addLinker(pesoWords) + ' ' + PESO
306
+ } else {
307
+ const prefix = pesoWords.slice(0, lastSpaceIdx + 1)
308
+ const lastWord = pesoWords.slice(lastSpaceIdx + 1)
309
+ if (lastWord.endsWith('ng')) {
310
+ result += pesoWords + ' ' + PESO
311
+ } else {
312
+ result += prefix + addLinker(lastWord) + ' ' + PESO
313
+ }
314
+ }
315
+ }
316
+ }
317
+
318
+ // Sentimos part
319
+ if (sentimos > 0n) {
320
+ if (pesos > 0n) {
321
+ result += ' at '
322
+ }
323
+ const sentimoWords = integerToWords(sentimos)
324
+ // Add linker before "sentimo"
325
+ const lastSpaceIdx = sentimoWords.lastIndexOf(' ')
326
+ if (lastSpaceIdx === -1) {
327
+ // Single word
328
+ result += addLinker(sentimoWords) + ' ' + SENTIMO
329
+ } else {
330
+ const prefix = sentimoWords.slice(0, lastSpaceIdx + 1)
331
+ const lastWord = sentimoWords.slice(lastSpaceIdx + 1)
332
+ if (lastWord.endsWith('ng')) {
333
+ result += sentimoWords + ' ' + SENTIMO
334
+ } else {
335
+ result += prefix + addLinker(lastWord) + ' ' + SENTIMO
336
+ }
337
+ }
338
+ }
339
+
340
+ return result
341
+ }
342
+
207
343
  // ============================================================================
208
344
  // Exports
209
345
  // ============================================================================
210
346
 
211
- export { toWords }
347
+ export { toCardinal, toOrdinal, toCurrency }
package/src/fr-BE.d.ts ADDED
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Converts a numeric value to Belgian French words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @param {Object} [options] - Optional configuration
6
+ * @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between words
7
+ * @returns {string} The number in Belgian French words
8
+ */
9
+ export function toCardinal(value: number | string | bigint, options?: {
10
+ withHyphenSeparator?: boolean | undefined;
11
+ }): string;
12
+ /**
13
+ * Converts a numeric value to Belgian French ordinal words.
14
+ *
15
+ * Belgian French ordinals: premier (1st), then cardinal + ième.
16
+ * Special rules: quatre→quatrième, cinq→cinquième, neuf→neuvième.
17
+ *
18
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
19
+ * @returns {string} The number as ordinal words
20
+ * @throws {TypeError} If value is not a valid numeric type
21
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
22
+ *
23
+ * @example
24
+ * toOrdinal(1) // 'premier'
25
+ * toOrdinal(2) // 'deuxième'
26
+ * toOrdinal(70) // 'septantième'
27
+ * toOrdinal(90) // 'nonantième'
28
+ */
29
+ export function toOrdinal(value: number | string | bigint): string;
30
+ /**
31
+ * Converts a numeric value to Belgian French currency words (Euro).
32
+ *
33
+ * @param {number | string | bigint} value - The currency amount to convert
34
+ * @param {Object} [options] - Optional configuration
35
+ * @param {boolean} [options.and=true] - Use "et" between euros and centimes
36
+ * @returns {string} The amount in Belgian French currency words
37
+ * @throws {TypeError} If value is not a valid numeric type
38
+ * @throws {Error} If value is not a valid number format
39
+ *
40
+ * @example
41
+ * toCurrency(42.50) // 'quarante-deux euros et cinquante centimes'
42
+ * toCurrency(1) // 'un euro'
43
+ * toCurrency(0.99) // 'nonante-neuf centimes'
44
+ * toCurrency(0.01) // 'un centime'
45
+ * toCurrency(42.50, { and: false }) // 'quarante-deux euros cinquante centimes'
46
+ */
47
+ export function toCurrency(value: number | string | bigint, options?: {
48
+ and?: boolean | undefined;
49
+ }): string;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * French (Belgium) language converter - Functional Implementation
2
+ * French (Belgium) language converter
3
3
  *
4
- * Self-contained module with its own input validation, ready for subpath exports.
4
+ * CLDR: fr-BE | French as used in Belgium
5
5
  *
6
6
  * Belgian French differences from standard French:
7
7
  * - septante (70) instead of soixante-dix
@@ -10,8 +10,10 @@
10
10
  * - Uses "septante et un" (71), "nonante et un" (91)
11
11
  */
12
12
 
13
- import { parseNumericValue } from '../utils/parse-numeric.js'
14
- import { validateOptions } from '../utils/validate-options.js'
13
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
14
+ import { parseCurrencyValue } from './utils/parse-currency.js'
15
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
16
+ import { validateOptions } from './utils/validate-options.js'
15
17
 
16
18
  // ============================================================================
17
19
  // Vocabulary
@@ -31,6 +33,25 @@ const ZERO = 'zéro'
31
33
  const NEGATIVE = 'moins'
32
34
  const DECIMAL_SEP = 'virgule'
33
35
 
36
+ // ============================================================================
37
+ // Ordinal Vocabulary
38
+ // ============================================================================
39
+
40
+ // Ordinal suffix
41
+ const ORDINAL_SUFFIX = 'ième'
42
+
43
+ // Special ordinals
44
+ const PREMIER = 'premier'
45
+
46
+ // ============================================================================
47
+ // Currency Vocabulary (Euro)
48
+ // ============================================================================
49
+
50
+ const EURO = 'euro'
51
+ const EUROS = 'euros'
52
+ const CENTIME = 'centime'
53
+ const CENTIMES = 'centimes'
54
+
34
55
  // ============================================================================
35
56
  // Segment Building
36
57
  // ============================================================================
@@ -39,7 +60,7 @@ function buildSegment (n) {
39
60
  if (n === 0) return { word: '', endsWithCents: false, endsWithVingts: false }
40
61
 
41
62
  const tensOnes = n % 100
42
- const hundreds = Math.floor(n / 100)
63
+ const hundreds = Math.trunc(n / 100)
43
64
 
44
65
  const parts = []
45
66
  let endsWithCents = false
@@ -70,7 +91,7 @@ function buildSegment (n) {
70
91
  parts.push(TEENS[tensOnes - 10])
71
92
  } else if (tensOnes < 70) {
72
93
  // 20-69: standard pattern
73
- const t = Math.floor(tensOnes / 10)
94
+ const t = Math.trunc(tensOnes / 10)
74
95
  const o = tensOnes % 10
75
96
  if (o === 0) {
76
97
  parts.push(TENS[t])
@@ -263,22 +284,163 @@ function decimalPartToWords (decimalPart, withHyphen) {
263
284
  * @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between words
264
285
  * @returns {string} The number in Belgian French words
265
286
  */
266
- function toWords (value, options) {
287
+ function toCardinal (value, options) {
267
288
  options = validateOptions(options)
268
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
269
- const withHyphen = options.withHyphenSeparator || false
289
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
290
+
291
+ // Apply option defaults
292
+ const { withHyphenSeparator = false } = options
270
293
 
271
294
  let result = ''
272
- const sep = withHyphen ? '-' : ' '
295
+ const sep = withHyphenSeparator ? '-' : ' '
273
296
 
274
297
  if (isNegative) {
275
298
  result = NEGATIVE + sep
276
299
  }
277
300
 
278
- result += integerToWords(integerPart, withHyphen)
301
+ result += integerToWords(integerPart, withHyphenSeparator)
279
302
 
280
303
  if (decimalPart) {
281
- result += sep + DECIMAL_SEP + sep + decimalPartToWords(decimalPart, withHyphen)
304
+ result += sep + DECIMAL_SEP + sep + decimalPartToWords(decimalPart, withHyphenSeparator)
305
+ }
306
+
307
+ return result
308
+ }
309
+
310
+ // ============================================================================
311
+ // ORDINAL: toOrdinal(value)
312
+ // ============================================================================
313
+
314
+ /**
315
+ * Converts a cardinal number word to its ordinal form.
316
+ * Rules:
317
+ * - 1 → premier (special case)
318
+ * - Drop final -e before adding -ième (quatre → quatrième)
319
+ * - cinq → cinquième (add -u- before -ième)
320
+ * - neuf → neuvième (f → v before -ième)
321
+ *
322
+ * @param {string} cardinalWord - Cardinal word to convert
323
+ * @returns {string} Ordinal form
324
+ */
325
+ function cardinalToOrdinal (cardinalWord) {
326
+ // Handle special endings
327
+ if (cardinalWord.endsWith('cinq')) {
328
+ // cinq → cinquième (add 'u')
329
+ return cardinalWord + 'u' + ORDINAL_SUFFIX
330
+ }
331
+
332
+ if (cardinalWord.endsWith('neuf')) {
333
+ // neuf → neuvième (f → v)
334
+ return cardinalWord.slice(0, -1) + 'v' + ORDINAL_SUFFIX
335
+ }
336
+
337
+ // Drop plural -s from cents/vingts/millions/etc. (quatre-vingts → quatre-vingtième)
338
+ // Note: "trois", "six" also end in s but that's not a plural
339
+ if (cardinalWord.endsWith('cents') ||
340
+ cardinalWord.endsWith('vingts') ||
341
+ cardinalWord.endsWith('millions') ||
342
+ cardinalWord.endsWith('milliards') ||
343
+ cardinalWord.endsWith('billions') ||
344
+ cardinalWord.endsWith('billiards') ||
345
+ cardinalWord.endsWith('trillions') ||
346
+ cardinalWord.endsWith('trilliards') ||
347
+ cardinalWord.endsWith('quadrillions') ||
348
+ cardinalWord.endsWith('quadrilliards')) {
349
+ return cardinalWord.slice(0, -1) + ORDINAL_SUFFIX
350
+ }
351
+
352
+ // Drop final -e before adding -ième (quatre → quatrième)
353
+ if (cardinalWord.endsWith('e')) {
354
+ return cardinalWord.slice(0, -1) + ORDINAL_SUFFIX
355
+ }
356
+
357
+ // Default: just add -ième
358
+ return cardinalWord + ORDINAL_SUFFIX
359
+ }
360
+
361
+ /**
362
+ * Converts a positive integer to Belgian French ordinal words.
363
+ *
364
+ * @param {bigint} n - Positive integer
365
+ * @returns {string} Belgian French ordinal words
366
+ */
367
+ function integerToOrdinal (n) {
368
+ // Special case: 1 → premier
369
+ if (n === 1n) {
370
+ return PREMIER
371
+ }
372
+
373
+ // Get cardinal form and convert to ordinal
374
+ const cardinalWord = integerToWords(n, false)
375
+ return cardinalToOrdinal(cardinalWord)
376
+ }
377
+
378
+ /**
379
+ * Converts a numeric value to Belgian French ordinal words.
380
+ *
381
+ * Belgian French ordinals: premier (1st), then cardinal + ième.
382
+ * Special rules: quatre→quatrième, cinq→cinquième, neuf→neuvième.
383
+ *
384
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
385
+ * @returns {string} The number as ordinal words
386
+ * @throws {TypeError} If value is not a valid numeric type
387
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
388
+ *
389
+ * @example
390
+ * toOrdinal(1) // 'premier'
391
+ * toOrdinal(2) // 'deuxième'
392
+ * toOrdinal(70) // 'septantième'
393
+ * toOrdinal(90) // 'nonantième'
394
+ */
395
+ function toOrdinal (value) {
396
+ const integerPart = parseOrdinalValue(value)
397
+ return integerToOrdinal(integerPart)
398
+ }
399
+
400
+ // ============================================================================
401
+ // CURRENCY: toCurrency(value, options?)
402
+ // ============================================================================
403
+
404
+ /**
405
+ * Converts a numeric value to Belgian French currency words (Euro).
406
+ *
407
+ * @param {number | string | bigint} value - The currency amount to convert
408
+ * @param {Object} [options] - Optional configuration
409
+ * @param {boolean} [options.and=true] - Use "et" between euros and centimes
410
+ * @returns {string} The amount in Belgian French currency words
411
+ * @throws {TypeError} If value is not a valid numeric type
412
+ * @throws {Error} If value is not a valid number format
413
+ *
414
+ * @example
415
+ * toCurrency(42.50) // 'quarante-deux euros et cinquante centimes'
416
+ * toCurrency(1) // 'un euro'
417
+ * toCurrency(0.99) // 'nonante-neuf centimes'
418
+ * toCurrency(0.01) // 'un centime'
419
+ * toCurrency(42.50, { and: false }) // 'quarante-deux euros cinquante centimes'
420
+ */
421
+ function toCurrency (value, options) {
422
+ options = validateOptions(options)
423
+ const { isNegative, dollars: euros, cents: centimes } = parseCurrencyValue(value)
424
+ const { and: useAnd = true } = options
425
+
426
+ // Build result
427
+ let result = ''
428
+ if (isNegative) result = NEGATIVE + ' '
429
+
430
+ // Euros part
431
+ if (euros > 0n || centimes === 0n) {
432
+ result += integerToWords(euros, false)
433
+ // In French, 0 and 1 are singular: "zéro euro", "un euro"
434
+ result += ' ' + (euros <= 1n ? EURO : EUROS)
435
+ }
436
+
437
+ // Centimes part
438
+ if (centimes > 0n) {
439
+ if (euros > 0n) {
440
+ result += useAnd ? ' et ' : ' '
441
+ }
442
+ result += integerToWords(centimes, false)
443
+ result += ' ' + (centimes === 1n ? CENTIME : CENTIMES)
282
444
  }
283
445
 
284
446
  return result
@@ -288,4 +450,4 @@ function toWords (value, options) {
288
450
  // Exports
289
451
  // ============================================================================
290
452
 
291
- export { toWords }
453
+ export { toCardinal, toOrdinal, toCurrency }
package/src/fr-FR.d.ts ADDED
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Converts a numeric value to French 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
+ * @param {Object} [options] - Optional configuration
9
+ * @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between all words
10
+ * @returns {string} The number in French words
11
+ * @throws {TypeError} If value is not a valid numeric type
12
+ * @throws {Error} If value is not a valid number format
13
+ *
14
+ * @example
15
+ * toCardinal(21) // 'vingt et un'
16
+ * toCardinal(80) // 'quatre-vingts'
17
+ * toCardinal(1000000) // 'un million'
18
+ */
19
+ export function toCardinal(value: number | string | bigint, options?: {
20
+ withHyphenSeparator?: boolean | undefined;
21
+ }): string;
22
+ /**
23
+ * Converts a numeric value to French ordinal words.
24
+ *
25
+ * French ordinals: premier (1st), then cardinal + ième.
26
+ * Special rules: quatre→quatrième, cinq→cinquième, neuf→neuvième.
27
+ *
28
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
29
+ * @returns {string} The number as ordinal words
30
+ * @throws {TypeError} If value is not a valid numeric type
31
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
32
+ *
33
+ * @example
34
+ * toOrdinal(1) // 'premier'
35
+ * toOrdinal(2) // 'deuxième'
36
+ * toOrdinal(4) // 'quatrième'
37
+ * toOrdinal(5) // 'cinquième'
38
+ * toOrdinal(9) // 'neuvième'
39
+ * toOrdinal(21) // 'vingt et unième'
40
+ * toOrdinal(100) // 'centième'
41
+ * toOrdinal(1000) // 'millième'
42
+ */
43
+ export function toOrdinal(value: number | string | bigint): string;
44
+ /**
45
+ * Converts a numeric value to French currency words (Euro).
46
+ *
47
+ * @param {number | string | bigint} value - The currency amount to convert
48
+ * @param {Object} [options] - Optional configuration
49
+ * @param {boolean} [options.and=true] - Use "et" between euros and centimes
50
+ * @returns {string} The amount in French currency words
51
+ * @throws {TypeError} If value is not a valid numeric type
52
+ * @throws {Error} If value is not a valid number format
53
+ *
54
+ * @example
55
+ * toCurrency(42.50) // 'quarante-deux euros et cinquante centimes'
56
+ * toCurrency(1) // 'un euro'
57
+ * toCurrency(0.99) // 'quatre-vingt-dix-neuf centimes'
58
+ * toCurrency(0.01) // 'un centime'
59
+ * toCurrency(42.50, { and: false }) // 'quarante-deux euros cinquante centimes'
60
+ */
61
+ export function toCurrency(value: number | string | bigint, options?: {
62
+ and?: boolean | undefined;
63
+ }): string;