n2words 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/LICENSE +1 -1
  3. package/README.md +64 -184
  4. package/dist/am-ET.js +2 -0
  5. package/dist/am-ET.umd.js +2 -0
  6. package/dist/am-Latn-ET.js +2 -0
  7. package/dist/am-Latn-ET.umd.js +2 -0
  8. package/dist/ar-SA.js +2 -0
  9. package/dist/ar-SA.umd.js +2 -0
  10. package/dist/az-AZ.js +2 -0
  11. package/dist/az-AZ.umd.js +2 -0
  12. package/dist/bn-BD.js +2 -0
  13. package/dist/bn-BD.umd.js +2 -0
  14. package/dist/cs-CZ.js +2 -0
  15. package/dist/cs-CZ.umd.js +2 -0
  16. package/dist/da-DK.js +2 -0
  17. package/dist/da-DK.umd.js +2 -0
  18. package/dist/de-DE.js +2 -0
  19. package/dist/de-DE.umd.js +2 -0
  20. package/dist/el-GR.js +2 -0
  21. package/dist/el-GR.umd.js +2 -0
  22. package/dist/en-AU.js +2 -0
  23. package/dist/en-AU.umd.js +2 -0
  24. package/dist/en-BD.js +2 -0
  25. package/dist/en-BD.umd.js +2 -0
  26. package/dist/en-CA.js +2 -0
  27. package/dist/en-CA.umd.js +2 -0
  28. package/dist/en-GB.js +2 -0
  29. package/dist/en-GB.umd.js +2 -0
  30. package/dist/en-GH.js +2 -0
  31. package/dist/en-GH.umd.js +2 -0
  32. package/dist/en-IE.js +2 -0
  33. package/dist/en-IE.umd.js +2 -0
  34. package/dist/en-IN.js +2 -0
  35. package/dist/en-IN.umd.js +2 -0
  36. package/dist/en-KE.js +2 -0
  37. package/dist/en-KE.umd.js +2 -0
  38. package/dist/en-MY.js +2 -0
  39. package/dist/en-MY.umd.js +2 -0
  40. package/dist/en-NG.js +2 -0
  41. package/dist/en-NG.umd.js +2 -0
  42. package/dist/en-NZ.js +2 -0
  43. package/dist/en-NZ.umd.js +2 -0
  44. package/dist/en-PH.js +2 -0
  45. package/dist/en-PH.umd.js +2 -0
  46. package/dist/en-PK.js +2 -0
  47. package/dist/en-PK.umd.js +2 -0
  48. package/dist/en-SG.js +2 -0
  49. package/dist/en-SG.umd.js +2 -0
  50. package/dist/en-US.js +2 -0
  51. package/dist/en-US.umd.js +2 -0
  52. package/dist/en-ZA.js +2 -0
  53. package/dist/en-ZA.umd.js +2 -0
  54. package/dist/es-ES.js +2 -0
  55. package/dist/es-ES.umd.js +2 -0
  56. package/dist/es-MX.js +2 -0
  57. package/dist/es-MX.umd.js +2 -0
  58. package/dist/es-US.js +2 -0
  59. package/dist/es-US.umd.js +2 -0
  60. package/dist/fa-IR.js +2 -0
  61. package/dist/fa-IR.umd.js +2 -0
  62. package/dist/fi-FI.js +2 -0
  63. package/dist/fi-FI.umd.js +2 -0
  64. package/dist/fil-PH.js +2 -0
  65. package/dist/fil-PH.umd.js +2 -0
  66. package/dist/fr-BE.js +2 -0
  67. package/dist/fr-BE.umd.js +2 -0
  68. package/dist/fr-FR.js +2 -0
  69. package/dist/fr-FR.umd.js +2 -0
  70. package/dist/gu-IN.js +2 -0
  71. package/dist/gu-IN.umd.js +2 -0
  72. package/dist/ha-NG.js +2 -0
  73. package/dist/ha-NG.umd.js +2 -0
  74. package/dist/hbo-IL.js +2 -0
  75. package/dist/hbo-IL.umd.js +2 -0
  76. package/dist/he-IL.js +2 -0
  77. package/dist/he-IL.umd.js +2 -0
  78. package/dist/hi-IN.js +2 -0
  79. package/dist/hi-IN.umd.js +2 -0
  80. package/dist/hr-HR.js +2 -0
  81. package/dist/hr-HR.umd.js +2 -0
  82. package/dist/hu-HU.js +2 -0
  83. package/dist/hu-HU.umd.js +2 -0
  84. package/dist/id-ID.js +2 -0
  85. package/dist/id-ID.umd.js +2 -0
  86. package/dist/it-IT.js +2 -0
  87. package/dist/it-IT.umd.js +2 -0
  88. package/dist/ja-JP.js +2 -0
  89. package/dist/ja-JP.umd.js +2 -0
  90. package/dist/ka-GE.js +2 -0
  91. package/dist/ka-GE.umd.js +2 -0
  92. package/dist/kn-IN.js +2 -0
  93. package/dist/kn-IN.umd.js +2 -0
  94. package/dist/ko-KR.js +2 -0
  95. package/dist/ko-KR.umd.js +2 -0
  96. package/dist/lt-LT.js +2 -0
  97. package/dist/lt-LT.umd.js +2 -0
  98. package/dist/lv-LV.js +2 -0
  99. package/dist/lv-LV.umd.js +2 -0
  100. package/dist/mr-IN.js +2 -0
  101. package/dist/mr-IN.umd.js +2 -0
  102. package/dist/ms-MY.js +2 -0
  103. package/dist/ms-MY.umd.js +2 -0
  104. package/dist/nb-NO.js +2 -0
  105. package/dist/nb-NO.umd.js +2 -0
  106. package/dist/nl-NL.js +2 -0
  107. package/dist/nl-NL.umd.js +2 -0
  108. package/dist/pa-IN.js +2 -0
  109. package/dist/pa-IN.umd.js +2 -0
  110. package/dist/pl-PL.js +2 -0
  111. package/dist/pl-PL.umd.js +2 -0
  112. package/dist/pt-PT.js +2 -0
  113. package/dist/pt-PT.umd.js +2 -0
  114. package/dist/ro-RO.js +2 -0
  115. package/dist/ro-RO.umd.js +2 -0
  116. package/dist/ru-RU.js +2 -0
  117. package/dist/ru-RU.umd.js +2 -0
  118. package/dist/sr-Cyrl-RS.js +2 -0
  119. package/dist/sr-Cyrl-RS.umd.js +2 -0
  120. package/dist/sr-Latn-RS.js +2 -0
  121. package/dist/sr-Latn-RS.umd.js +2 -0
  122. package/dist/sv-SE.js +2 -0
  123. package/dist/sv-SE.umd.js +2 -0
  124. package/dist/sw-KE.js +2 -0
  125. package/dist/sw-KE.umd.js +2 -0
  126. package/dist/ta-IN.js +2 -0
  127. package/dist/ta-IN.umd.js +2 -0
  128. package/dist/te-IN.js +2 -0
  129. package/dist/te-IN.umd.js +2 -0
  130. package/dist/th-TH.js +2 -0
  131. package/dist/th-TH.umd.js +2 -0
  132. package/dist/tr-TR.js +2 -0
  133. package/dist/tr-TR.umd.js +2 -0
  134. package/dist/uk-UA.js +2 -0
  135. package/dist/uk-UA.umd.js +2 -0
  136. package/dist/ur-PK.js +2 -0
  137. package/dist/ur-PK.umd.js +2 -0
  138. package/dist/vi-VN.js +2 -0
  139. package/dist/vi-VN.umd.js +2 -0
  140. package/dist/yo-NG.js +2 -0
  141. package/dist/yo-NG.umd.js +2 -0
  142. package/dist/zh-Hans-CN.js +2 -0
  143. package/dist/zh-Hans-CN.umd.js +2 -0
  144. package/dist/zh-Hant-TW.js +2 -0
  145. package/dist/zh-Hant-TW.umd.js +2 -0
  146. package/package.json +47 -82
  147. package/src/am-ET.d.ts +40 -0
  148. package/src/am-ET.js +269 -0
  149. package/src/am-Latn-ET.d.ts +35 -0
  150. package/src/am-Latn-ET.js +264 -0
  151. package/src/ar-SA.d.ts +49 -0
  152. package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
  153. package/src/az-AZ.d.ts +37 -0
  154. package/src/az-AZ.js +312 -0
  155. package/src/bn-BD.d.ts +36 -0
  156. package/src/bn-BD.js +270 -0
  157. package/src/cs-CZ.d.ts +49 -0
  158. package/{lib/languages/cs.js → src/cs-CZ.js} +249 -40
  159. package/src/da-DK.d.ts +44 -0
  160. package/{lib/languages/da.js → src/da-DK.js} +136 -23
  161. package/src/de-DE.d.ts +57 -0
  162. package/src/de-DE.js +603 -0
  163. package/src/el-GR.d.ts +40 -0
  164. package/src/el-GR.js +418 -0
  165. package/src/en-AU.d.ts +47 -0
  166. package/src/en-AU.js +423 -0
  167. package/src/en-BD.d.ts +49 -0
  168. package/src/en-BD.js +415 -0
  169. package/src/en-CA.d.ts +63 -0
  170. package/src/en-CA.js +518 -0
  171. package/src/en-GB.d.ts +56 -0
  172. package/src/en-GB.js +469 -0
  173. package/src/en-GH.d.ts +11 -0
  174. package/src/en-GH.js +345 -0
  175. package/src/en-IE.d.ts +56 -0
  176. package/src/en-IE.js +479 -0
  177. package/src/en-IN.d.ts +49 -0
  178. package/src/en-IN.js +415 -0
  179. package/src/en-KE.d.ts +11 -0
  180. package/src/en-KE.js +345 -0
  181. package/src/en-MY.d.ts +11 -0
  182. package/src/en-MY.js +347 -0
  183. package/src/en-NG.d.ts +56 -0
  184. package/src/en-NG.js +479 -0
  185. package/src/en-NZ.d.ts +11 -0
  186. package/src/en-NZ.js +375 -0
  187. package/src/en-PH.d.ts +11 -0
  188. package/src/en-PH.js +345 -0
  189. package/src/en-PK.d.ts +49 -0
  190. package/src/en-PK.js +415 -0
  191. package/src/en-SG.d.ts +11 -0
  192. package/src/en-SG.js +345 -0
  193. package/src/en-US.d.ts +63 -0
  194. package/src/en-US.js +516 -0
  195. package/src/en-ZA.d.ts +56 -0
  196. package/src/en-ZA.js +478 -0
  197. package/src/es-ES.d.ts +65 -0
  198. package/src/es-ES.js +541 -0
  199. package/src/es-MX.d.ts +58 -0
  200. package/{lib/languages/es.js → src/es-MX.js} +237 -47
  201. package/src/es-US.d.ts +58 -0
  202. package/src/es-US.js +446 -0
  203. package/src/fa-IR.d.ts +38 -0
  204. package/src/fa-IR.js +246 -0
  205. package/src/fi-FI.d.ts +46 -0
  206. package/src/fi-FI.js +379 -0
  207. package/src/fil-PH.d.ts +37 -0
  208. package/{lib/languages/fil.js → src/fil-PH.js} +149 -24
  209. package/src/fr-BE.d.ts +49 -0
  210. package/src/fr-BE.js +453 -0
  211. package/src/fr-FR.d.ts +63 -0
  212. package/{lib/languages/fr.js → src/fr-FR.js} +200 -47
  213. package/src/gu-IN.d.ts +35 -0
  214. package/src/gu-IN.js +259 -0
  215. package/src/ha-NG.d.ts +37 -0
  216. package/{lib/languages/ha.js → src/ha-NG.js} +110 -16
  217. package/src/hbo-IL.d.ts +39 -0
  218. package/{lib/languages/hbo.js → src/hbo-IL.js} +217 -43
  219. package/src/he-IL.d.ts +37 -0
  220. package/src/he-IL.js +537 -0
  221. package/src/hi-IN.d.ts +36 -0
  222. package/src/hi-IN.js +280 -0
  223. package/src/hr-HR.d.ts +42 -0
  224. package/src/hr-HR.js +463 -0
  225. package/src/hu-HU.d.ts +38 -0
  226. package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
  227. package/src/id-ID.d.ts +38 -0
  228. package/{lib/languages/id.js → src/id-ID.js} +106 -20
  229. package/src/it-IT.d.ts +59 -0
  230. package/src/it-IT.js +506 -0
  231. package/src/ja-JP.d.ts +49 -0
  232. package/{lib/languages/ja.js → src/ja-JP.js} +119 -32
  233. package/src/ka-GE.d.ts +44 -0
  234. package/src/ka-GE.js +393 -0
  235. package/src/kn-IN.d.ts +35 -0
  236. package/{lib/languages/kn.js → src/kn-IN.js} +156 -34
  237. package/src/ko-KR.d.ts +45 -0
  238. package/{lib/languages/ko.js → src/ko-KR.js} +99 -24
  239. package/src/lt-LT.d.ts +49 -0
  240. package/src/lt-LT.js +543 -0
  241. package/src/lv-LV.d.ts +49 -0
  242. package/src/lv-LV.js +595 -0
  243. package/src/mr-IN.d.ts +36 -0
  244. package/src/mr-IN.js +260 -0
  245. package/src/ms-MY.d.ts +37 -0
  246. package/{lib/languages/ms.js → src/ms-MY.js} +118 -20
  247. package/src/nb-NO.d.ts +44 -0
  248. package/{lib/languages/nb.js → src/nb-NO.js} +165 -33
  249. package/src/nl-NL.d.ts +54 -0
  250. package/{lib/languages/nl.js → src/nl-NL.js} +271 -47
  251. package/src/pa-IN.d.ts +36 -0
  252. package/src/pa-IN.js +268 -0
  253. package/src/pl-PL.d.ts +55 -0
  254. package/src/pl-PL.js +585 -0
  255. package/src/pt-PT.d.ts +45 -0
  256. package/src/pt-PT.js +514 -0
  257. package/src/ro-RO.d.ts +44 -0
  258. package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
  259. package/src/ru-RU.d.ts +50 -0
  260. package/src/ru-RU.js +535 -0
  261. package/src/sr-Cyrl-RS.d.ts +49 -0
  262. package/src/sr-Cyrl-RS.js +503 -0
  263. package/src/sr-Latn-RS.d.ts +49 -0
  264. package/src/sr-Latn-RS.js +503 -0
  265. package/src/sv-SE.d.ts +44 -0
  266. package/{lib/languages/sv.js → src/sv-SE.js} +149 -34
  267. package/src/sw-KE.d.ts +37 -0
  268. package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
  269. package/src/ta-IN.d.ts +35 -0
  270. package/{lib/languages/ta.js → src/ta-IN.js} +163 -47
  271. package/src/te-IN.d.ts +35 -0
  272. package/{lib/languages/te.js → src/te-IN.js} +147 -46
  273. package/src/th-TH.d.ts +38 -0
  274. package/{lib/languages/th.js → src/th-TH.js} +99 -6
  275. package/src/tr-TR.d.ts +48 -0
  276. package/src/tr-TR.js +397 -0
  277. package/src/uk-UA.d.ts +42 -0
  278. package/src/uk-UA.js +463 -0
  279. package/src/ur-PK.d.ts +36 -0
  280. package/src/ur-PK.js +268 -0
  281. package/src/utils/expand-scientific.d.ts +32 -0
  282. package/src/utils/expand-scientific.js +65 -0
  283. package/src/utils/parse-cardinal.d.ts +14 -0
  284. package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
  285. package/src/utils/parse-currency.d.ts +14 -0
  286. package/src/utils/parse-currency.js +91 -0
  287. package/src/utils/parse-ordinal.d.ts +10 -0
  288. package/src/utils/parse-ordinal.js +103 -0
  289. package/src/vi-VN.d.ts +48 -0
  290. package/{lib/languages/vi.js → src/vi-VN.js} +124 -53
  291. package/src/yo-NG.d.ts +37 -0
  292. package/src/yo-NG.js +403 -0
  293. package/src/zh-Hans-CN.d.ts +48 -0
  294. package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
  295. package/src/zh-Hant-TW.d.ts +50 -0
  296. package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
  297. package/dist/languages/am-Latn.js +0 -3
  298. package/dist/languages/am-Latn.js.map +0 -1
  299. package/dist/languages/am.js +0 -3
  300. package/dist/languages/am.js.map +0 -1
  301. package/dist/languages/ar.js +0 -3
  302. package/dist/languages/ar.js.map +0 -1
  303. package/dist/languages/az.js +0 -3
  304. package/dist/languages/az.js.map +0 -1
  305. package/dist/languages/bn.js +0 -3
  306. package/dist/languages/bn.js.map +0 -1
  307. package/dist/languages/cs.js +0 -3
  308. package/dist/languages/cs.js.map +0 -1
  309. package/dist/languages/da.js +0 -3
  310. package/dist/languages/da.js.map +0 -1
  311. package/dist/languages/de.js +0 -3
  312. package/dist/languages/de.js.map +0 -1
  313. package/dist/languages/el.js +0 -3
  314. package/dist/languages/el.js.map +0 -1
  315. package/dist/languages/en.js +0 -3
  316. package/dist/languages/en.js.map +0 -1
  317. package/dist/languages/es.js +0 -3
  318. package/dist/languages/es.js.map +0 -1
  319. package/dist/languages/fa.js +0 -3
  320. package/dist/languages/fa.js.map +0 -1
  321. package/dist/languages/fi.js +0 -3
  322. package/dist/languages/fi.js.map +0 -1
  323. package/dist/languages/fil.js +0 -3
  324. package/dist/languages/fil.js.map +0 -1
  325. package/dist/languages/fr-BE.js +0 -3
  326. package/dist/languages/fr-BE.js.map +0 -1
  327. package/dist/languages/fr.js +0 -3
  328. package/dist/languages/fr.js.map +0 -1
  329. package/dist/languages/gu.js +0 -3
  330. package/dist/languages/gu.js.map +0 -1
  331. package/dist/languages/ha.js +0 -3
  332. package/dist/languages/ha.js.map +0 -1
  333. package/dist/languages/hbo.js +0 -3
  334. package/dist/languages/hbo.js.map +0 -1
  335. package/dist/languages/he.js +0 -3
  336. package/dist/languages/he.js.map +0 -1
  337. package/dist/languages/hi.js +0 -3
  338. package/dist/languages/hi.js.map +0 -1
  339. package/dist/languages/hr.js +0 -3
  340. package/dist/languages/hr.js.map +0 -1
  341. package/dist/languages/hu.js +0 -3
  342. package/dist/languages/hu.js.map +0 -1
  343. package/dist/languages/id.js +0 -3
  344. package/dist/languages/id.js.map +0 -1
  345. package/dist/languages/it.js +0 -3
  346. package/dist/languages/it.js.map +0 -1
  347. package/dist/languages/ja.js +0 -3
  348. package/dist/languages/ja.js.map +0 -1
  349. package/dist/languages/kn.js +0 -3
  350. package/dist/languages/kn.js.map +0 -1
  351. package/dist/languages/ko.js +0 -3
  352. package/dist/languages/ko.js.map +0 -1
  353. package/dist/languages/lt.js +0 -3
  354. package/dist/languages/lt.js.map +0 -1
  355. package/dist/languages/lv.js +0 -3
  356. package/dist/languages/lv.js.map +0 -1
  357. package/dist/languages/mr.js +0 -3
  358. package/dist/languages/mr.js.map +0 -1
  359. package/dist/languages/ms.js +0 -3
  360. package/dist/languages/ms.js.map +0 -1
  361. package/dist/languages/nb.js +0 -3
  362. package/dist/languages/nb.js.map +0 -1
  363. package/dist/languages/nl.js +0 -3
  364. package/dist/languages/nl.js.map +0 -1
  365. package/dist/languages/pa.js +0 -3
  366. package/dist/languages/pa.js.map +0 -1
  367. package/dist/languages/pl.js +0 -3
  368. package/dist/languages/pl.js.map +0 -1
  369. package/dist/languages/pt.js +0 -3
  370. package/dist/languages/pt.js.map +0 -1
  371. package/dist/languages/ro.js +0 -3
  372. package/dist/languages/ro.js.map +0 -1
  373. package/dist/languages/ru.js +0 -3
  374. package/dist/languages/ru.js.map +0 -1
  375. package/dist/languages/sr-Cyrl.js +0 -3
  376. package/dist/languages/sr-Cyrl.js.map +0 -1
  377. package/dist/languages/sr-Latn.js +0 -3
  378. package/dist/languages/sr-Latn.js.map +0 -1
  379. package/dist/languages/sv.js +0 -3
  380. package/dist/languages/sv.js.map +0 -1
  381. package/dist/languages/sw.js +0 -3
  382. package/dist/languages/sw.js.map +0 -1
  383. package/dist/languages/ta.js +0 -3
  384. package/dist/languages/ta.js.map +0 -1
  385. package/dist/languages/te.js +0 -3
  386. package/dist/languages/te.js.map +0 -1
  387. package/dist/languages/th.js +0 -3
  388. package/dist/languages/th.js.map +0 -1
  389. package/dist/languages/tr.js +0 -3
  390. package/dist/languages/tr.js.map +0 -1
  391. package/dist/languages/uk.js +0 -3
  392. package/dist/languages/uk.js.map +0 -1
  393. package/dist/languages/ur.js +0 -3
  394. package/dist/languages/ur.js.map +0 -1
  395. package/dist/languages/vi.js +0 -3
  396. package/dist/languages/vi.js.map +0 -1
  397. package/dist/languages/zh-Hans.js +0 -3
  398. package/dist/languages/zh-Hans.js.map +0 -1
  399. package/dist/languages/zh-Hant.js +0 -3
  400. package/dist/languages/zh-Hant.js.map +0 -1
  401. package/dist/n2words.js +0 -3
  402. package/dist/n2words.js.map +0 -1
  403. package/lib/languages/am-Latn.d.ts +0 -7
  404. package/lib/languages/am-Latn.js +0 -164
  405. package/lib/languages/am.d.ts +0 -7
  406. package/lib/languages/am.js +0 -164
  407. package/lib/languages/ar.d.ts +0 -17
  408. package/lib/languages/az.d.ts +0 -7
  409. package/lib/languages/az.js +0 -176
  410. package/lib/languages/bn.d.ts +0 -7
  411. package/lib/languages/bn.js +0 -145
  412. package/lib/languages/cs.d.ts +0 -18
  413. package/lib/languages/da.d.ts +0 -14
  414. package/lib/languages/de.d.ts +0 -17
  415. package/lib/languages/de.js +0 -332
  416. package/lib/languages/el.d.ts +0 -14
  417. package/lib/languages/el.js +0 -243
  418. package/lib/languages/en.d.ts +0 -17
  419. package/lib/languages/en.js +0 -256
  420. package/lib/languages/es.d.ts +0 -21
  421. package/lib/languages/fa.d.ts +0 -7
  422. package/lib/languages/fa.js +0 -134
  423. package/lib/languages/fi.d.ts +0 -14
  424. package/lib/languages/fi.js +0 -245
  425. package/lib/languages/fil.d.ts +0 -7
  426. package/lib/languages/fr-BE.d.ts +0 -11
  427. package/lib/languages/fr-BE.js +0 -300
  428. package/lib/languages/fr.d.ts +0 -21
  429. package/lib/languages/gu.d.ts +0 -7
  430. package/lib/languages/gu.js +0 -137
  431. package/lib/languages/ha.d.ts +0 -7
  432. package/lib/languages/hbo.d.ts +0 -13
  433. package/lib/languages/he.d.ts +0 -13
  434. package/lib/languages/he.js +0 -276
  435. package/lib/languages/hi.d.ts +0 -7
  436. package/lib/languages/hi.js +0 -145
  437. package/lib/languages/hr.d.ts +0 -11
  438. package/lib/languages/hr.js +0 -218
  439. package/lib/languages/hu.d.ts +0 -7
  440. package/lib/languages/id.d.ts +0 -7
  441. package/lib/languages/it.d.ts +0 -19
  442. package/lib/languages/it.js +0 -377
  443. package/lib/languages/ja.d.ts +0 -17
  444. package/lib/languages/kn.d.ts +0 -7
  445. package/lib/languages/ko.d.ts +0 -14
  446. package/lib/languages/lt.d.ts +0 -18
  447. package/lib/languages/lt.js +0 -310
  448. package/lib/languages/lv.d.ts +0 -18
  449. package/lib/languages/lv.js +0 -321
  450. package/lib/languages/mr.d.ts +0 -7
  451. package/lib/languages/mr.js +0 -137
  452. package/lib/languages/ms.d.ts +0 -7
  453. package/lib/languages/nb.d.ts +0 -14
  454. package/lib/languages/nl.d.ts +0 -26
  455. package/lib/languages/pa.d.ts +0 -7
  456. package/lib/languages/pa.js +0 -163
  457. package/lib/languages/pl.d.ts +0 -22
  458. package/lib/languages/pl.js +0 -330
  459. package/lib/languages/pt.d.ts +0 -17
  460. package/lib/languages/pt.js +0 -306
  461. package/lib/languages/ro.d.ts +0 -18
  462. package/lib/languages/ru.d.ts +0 -11
  463. package/lib/languages/ru.js +0 -240
  464. package/lib/languages/sr-Cyrl.d.ts +0 -11
  465. package/lib/languages/sr-Cyrl.js +0 -215
  466. package/lib/languages/sr-Latn.d.ts +0 -11
  467. package/lib/languages/sr-Latn.js +0 -215
  468. package/lib/languages/sv.d.ts +0 -14
  469. package/lib/languages/sw.d.ts +0 -7
  470. package/lib/languages/ta.d.ts +0 -7
  471. package/lib/languages/te.d.ts +0 -7
  472. package/lib/languages/th.d.ts +0 -7
  473. package/lib/languages/tr.d.ts +0 -18
  474. package/lib/languages/tr.js +0 -263
  475. package/lib/languages/uk.d.ts +0 -11
  476. package/lib/languages/uk.js +0 -218
  477. package/lib/languages/ur.d.ts +0 -7
  478. package/lib/languages/ur.js +0 -163
  479. package/lib/languages/vi.d.ts +0 -17
  480. package/lib/languages/zh-Hans.d.ts +0 -11
  481. package/lib/languages/zh-Hant.d.ts +0 -11
  482. package/lib/n2words.d.ts +0 -53
  483. package/lib/n2words.js +0 -122
  484. package/lib/utils/parse-numeric.d.ts +0 -17
  485. /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
  486. /package/{lib → src}/utils/is-plain-object.js +0 -0
  487. /package/{lib → src}/utils/validate-options.d.ts +0 -0
  488. /package/{lib → src}/utils/validate-options.js +0 -0
package/src/fr-BE.js ADDED
@@ -0,0 +1,453 @@
1
+ /**
2
+ * French (Belgium) language converter
3
+ *
4
+ * CLDR: fr-BE | French as used in Belgium
5
+ *
6
+ * Belgian French differences from standard French:
7
+ * - septante (70) instead of soixante-dix
8
+ * - nonante (90) instead of quatre-vingt-dix
9
+ * - Keeps quatre-vingts (80) like standard French
10
+ * - Uses "septante et un" (71), "nonante et un" (91)
11
+ */
12
+
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'
17
+
18
+ // ============================================================================
19
+ // Vocabulary
20
+ // ============================================================================
21
+
22
+ const ONES = ['', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf']
23
+ const TEENS = ['dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf']
24
+ const TENS = ['', '', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'septante', 'quatre-vingt', 'nonante']
25
+
26
+ // Scale words (long scale with -ard forms)
27
+ const SCALES = ['million', 'billion', 'trillion', 'quadrillion']
28
+ const SCALES_ARD = ['milliard', 'billiard', 'trilliard', 'quadrilliard']
29
+
30
+ const THOUSAND = 'mille'
31
+ const HUNDRED = 'cent'
32
+ const ZERO = 'zéro'
33
+ const NEGATIVE = 'moins'
34
+ const DECIMAL_SEP = 'virgule'
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
+
55
+ // ============================================================================
56
+ // Segment Building
57
+ // ============================================================================
58
+
59
+ function buildSegment (n) {
60
+ if (n === 0) return { word: '', endsWithCents: false, endsWithVingts: false }
61
+
62
+ const tensOnes = n % 100
63
+ const hundreds = Math.trunc(n / 100)
64
+
65
+ const parts = []
66
+ let endsWithCents = false
67
+ let endsWithVingts = false
68
+
69
+ // Hundreds
70
+ if (hundreds > 0) {
71
+ if (hundreds === 1) {
72
+ parts.push(HUNDRED)
73
+ } else {
74
+ if (tensOnes === 0) {
75
+ parts.push(ONES[hundreds] + ' ' + HUNDRED + 's')
76
+ endsWithCents = true
77
+ } else {
78
+ parts.push(ONES[hundreds] + ' ' + HUNDRED)
79
+ }
80
+ }
81
+ }
82
+
83
+ // Tens and ones - Belgian pattern
84
+ if (tensOnes === 0) {
85
+ // Just hundreds
86
+ } else if (tensOnes < 10) {
87
+ parts.push(ONES[tensOnes])
88
+ } else if (tensOnes < 17) {
89
+ parts.push(TEENS[tensOnes - 10])
90
+ } else if (tensOnes < 20) {
91
+ parts.push(TEENS[tensOnes - 10])
92
+ } else if (tensOnes < 70) {
93
+ // 20-69: standard pattern
94
+ const t = Math.trunc(tensOnes / 10)
95
+ const o = tensOnes % 10
96
+ if (o === 0) {
97
+ parts.push(TENS[t])
98
+ } else if (o === 1) {
99
+ parts.push(TENS[t] + ' et ' + ONES[1])
100
+ } else {
101
+ parts.push(TENS[t] + '-' + ONES[o])
102
+ }
103
+ } else if (tensOnes < 80) {
104
+ // 70-79: septante pattern (Belgian)
105
+ const o = tensOnes % 10
106
+ if (o === 0) {
107
+ parts.push('septante')
108
+ } else if (o === 1) {
109
+ parts.push('septante et ' + ONES[1])
110
+ } else {
111
+ parts.push('septante-' + ONES[o])
112
+ }
113
+ } else if (tensOnes === 80) {
114
+ // 80: quatre-vingts (same as standard)
115
+ parts.push('quatre-vingts')
116
+ endsWithVingts = true
117
+ } else if (tensOnes < 90) {
118
+ // 81-89: quatre-vingt-X (same as standard)
119
+ const remainder = tensOnes - 80
120
+ parts.push('quatre-vingt-' + ONES[remainder])
121
+ } else {
122
+ // 90-99: nonante pattern (Belgian)
123
+ const o = tensOnes % 10
124
+ if (o === 0) {
125
+ parts.push('nonante')
126
+ } else if (o === 1) {
127
+ parts.push('nonante et ' + ONES[1])
128
+ } else {
129
+ parts.push('nonante-' + ONES[o])
130
+ }
131
+ }
132
+
133
+ return { word: parts.join(' '), endsWithCents, endsWithVingts }
134
+ }
135
+
136
+ // ============================================================================
137
+ // Helper Functions
138
+ // ============================================================================
139
+
140
+ function getScaleWord (scaleIndex, segment) {
141
+ if (scaleIndex === 1) return THOUSAND
142
+
143
+ if (scaleIndex % 2 === 0) {
144
+ const arrayIndex = (scaleIndex / 2) - 1
145
+ const baseWord = SCALES[arrayIndex]
146
+ if (!baseWord) return ''
147
+ return segment > 1n ? baseWord + 's' : baseWord
148
+ } else {
149
+ const arrayIndex = ((scaleIndex - 1) / 2) - 1
150
+ const ardWord = SCALES_ARD[arrayIndex]
151
+ if (!ardWord) return THOUSAND
152
+ return segment > 1n ? ardWord + 's' : ardWord
153
+ }
154
+ }
155
+
156
+ // ============================================================================
157
+ // Conversion Functions
158
+ // ============================================================================
159
+
160
+ function integerToWords (n, withHyphen = false) {
161
+ if (n === 0n) return ZERO
162
+
163
+ if (n < 1000n) {
164
+ const { word } = buildSegment(Number(n))
165
+ return withHyphen ? word.replace(/ /g, '-') : word
166
+ }
167
+
168
+ if (n < 1_000_000n) {
169
+ const thousands = Number(n / 1000n)
170
+ const remainder = Number(n % 1000n)
171
+
172
+ let result
173
+ if (thousands === 1) {
174
+ result = THOUSAND
175
+ } else {
176
+ const { word: thousandsWord, endsWithCents, endsWithVingts } = buildSegment(thousands)
177
+ let adjustedWord = thousandsWord
178
+ if (endsWithCents || endsWithVingts) {
179
+ adjustedWord = thousandsWord.slice(0, -1)
180
+ }
181
+ result = adjustedWord + (withHyphen ? '-' : ' ') + THOUSAND
182
+ }
183
+
184
+ if (remainder > 0) {
185
+ const { word: remainderWord } = buildSegment(remainder)
186
+ result += (withHyphen ? '-' : ' ') + remainderWord
187
+ }
188
+
189
+ if (withHyphen) {
190
+ result = result.replace(/ /g, '-')
191
+ }
192
+
193
+ return result
194
+ }
195
+
196
+ return buildLargeNumberWords(n, withHyphen)
197
+ }
198
+
199
+ function buildLargeNumberWords (n, withHyphen) {
200
+ const numStr = n.toString()
201
+ const len = numStr.length
202
+
203
+ const segments = []
204
+ const segmentSize = 3
205
+
206
+ const remainderLen = len % segmentSize
207
+ let pos = 0
208
+ if (remainderLen > 0) {
209
+ segments.push(Number(numStr.slice(0, remainderLen)))
210
+ pos = remainderLen
211
+ }
212
+ while (pos < len) {
213
+ segments.push(Number(numStr.slice(pos, pos + segmentSize)))
214
+ pos += segmentSize
215
+ }
216
+
217
+ const parts = []
218
+ let scaleIndex = segments.length - 1
219
+
220
+ for (let i = 0; i < segments.length; i++) {
221
+ const segment = segments[i]
222
+
223
+ if (segment !== 0) {
224
+ const scaleWord = scaleIndex > 0 ? getScaleWord(scaleIndex, BigInt(segment)) : ''
225
+ const { word: segWords, endsWithCents, endsWithVingts } = buildSegment(segment)
226
+
227
+ if (scaleIndex === 0) {
228
+ parts.push(segWords)
229
+ } else if (scaleIndex === 1) {
230
+ if (segment === 1) {
231
+ parts.push(THOUSAND)
232
+ } else {
233
+ let adjustedWord = segWords
234
+ if (endsWithCents || endsWithVingts) {
235
+ adjustedWord = segWords.slice(0, -1)
236
+ }
237
+ parts.push(adjustedWord)
238
+ parts.push(scaleWord)
239
+ }
240
+ } else {
241
+ parts.push(segWords)
242
+ parts.push(scaleWord)
243
+ }
244
+ }
245
+
246
+ scaleIndex--
247
+ }
248
+
249
+ const sep = withHyphen ? '-' : ' '
250
+ let result = parts.join(sep)
251
+
252
+ if (withHyphen) {
253
+ result = result.replace(/ /g, '-')
254
+ }
255
+
256
+ return result
257
+ }
258
+
259
+ function decimalPartToWords (decimalPart, withHyphen) {
260
+ let result = ''
261
+ const sep = withHyphen ? '-' : ' '
262
+
263
+ let i = 0
264
+ while (i < decimalPart.length && decimalPart[i] === '0') {
265
+ if (result) result += sep
266
+ result += ZERO
267
+ i++
268
+ }
269
+
270
+ const remainder = decimalPart.slice(i)
271
+ if (remainder) {
272
+ if (result) result += sep
273
+ result += integerToWords(BigInt(remainder), withHyphen)
274
+ }
275
+
276
+ return result
277
+ }
278
+
279
+ /**
280
+ * Converts a numeric value to Belgian French words.
281
+ *
282
+ * @param {number | string | bigint} value - The numeric value to convert
283
+ * @param {Object} [options] - Optional configuration
284
+ * @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between words
285
+ * @returns {string} The number in Belgian French words
286
+ */
287
+ function toCardinal (value, options) {
288
+ options = validateOptions(options)
289
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
290
+
291
+ // Apply option defaults
292
+ const { withHyphenSeparator = false } = options
293
+
294
+ let result = ''
295
+ const sep = withHyphenSeparator ? '-' : ' '
296
+
297
+ if (isNegative) {
298
+ result = NEGATIVE + sep
299
+ }
300
+
301
+ result += integerToWords(integerPart, withHyphenSeparator)
302
+
303
+ if (decimalPart) {
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)
444
+ }
445
+
446
+ return result
447
+ }
448
+
449
+ // ============================================================================
450
+ // Exports
451
+ // ============================================================================
452
+
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;