n2words 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSE +1 -1
  3. package/README.md +64 -184
  4. package/dist/am-ET.js +2 -0
  5. package/dist/am-ET.umd.js +2 -0
  6. package/dist/am-Latn-ET.js +2 -0
  7. package/dist/am-Latn-ET.umd.js +2 -0
  8. package/dist/ar-SA.js +2 -0
  9. package/dist/ar-SA.umd.js +2 -0
  10. package/dist/az-AZ.js +2 -0
  11. package/dist/az-AZ.umd.js +2 -0
  12. package/dist/bn-BD.js +2 -0
  13. package/dist/bn-BD.umd.js +2 -0
  14. package/dist/cs-CZ.js +2 -0
  15. package/dist/cs-CZ.umd.js +2 -0
  16. package/dist/da-DK.js +2 -0
  17. package/dist/da-DK.umd.js +2 -0
  18. package/dist/de-DE.js +2 -0
  19. package/dist/de-DE.umd.js +2 -0
  20. package/dist/el-GR.js +2 -0
  21. package/dist/el-GR.umd.js +2 -0
  22. package/dist/en-AU.js +2 -0
  23. package/dist/en-AU.umd.js +2 -0
  24. package/dist/en-BD.js +2 -0
  25. package/dist/en-BD.umd.js +2 -0
  26. package/dist/en-CA.js +2 -0
  27. package/dist/en-CA.umd.js +2 -0
  28. package/dist/en-GB.js +2 -0
  29. package/dist/en-GB.umd.js +2 -0
  30. package/dist/en-GH.js +2 -0
  31. package/dist/en-GH.umd.js +2 -0
  32. package/dist/en-IE.js +2 -0
  33. package/dist/en-IE.umd.js +2 -0
  34. package/dist/en-IN.js +2 -0
  35. package/dist/en-IN.umd.js +2 -0
  36. package/dist/en-KE.js +2 -0
  37. package/dist/en-KE.umd.js +2 -0
  38. package/dist/en-MY.js +2 -0
  39. package/dist/en-MY.umd.js +2 -0
  40. package/dist/en-NG.js +2 -0
  41. package/dist/en-NG.umd.js +2 -0
  42. package/dist/en-NZ.js +2 -0
  43. package/dist/en-NZ.umd.js +2 -0
  44. package/dist/en-PH.js +2 -0
  45. package/dist/en-PH.umd.js +2 -0
  46. package/dist/en-PK.js +2 -0
  47. package/dist/en-PK.umd.js +2 -0
  48. package/dist/en-SG.js +2 -0
  49. package/dist/en-SG.umd.js +2 -0
  50. package/dist/en-US.js +2 -0
  51. package/dist/en-US.umd.js +2 -0
  52. package/dist/en-ZA.js +2 -0
  53. package/dist/en-ZA.umd.js +2 -0
  54. package/dist/es-ES.js +2 -0
  55. package/dist/es-ES.umd.js +2 -0
  56. package/dist/es-MX.js +2 -0
  57. package/dist/es-MX.umd.js +2 -0
  58. package/dist/es-US.js +2 -0
  59. package/dist/es-US.umd.js +2 -0
  60. package/dist/fa-IR.js +2 -0
  61. package/dist/fa-IR.umd.js +2 -0
  62. package/dist/fi-FI.js +2 -0
  63. package/dist/fi-FI.umd.js +2 -0
  64. package/dist/fil-PH.js +2 -0
  65. package/dist/fil-PH.umd.js +2 -0
  66. package/dist/fr-BE.js +2 -0
  67. package/dist/fr-BE.umd.js +2 -0
  68. package/dist/fr-FR.js +2 -0
  69. package/dist/fr-FR.umd.js +2 -0
  70. package/dist/gu-IN.js +2 -0
  71. package/dist/gu-IN.umd.js +2 -0
  72. package/dist/ha-NG.js +2 -0
  73. package/dist/ha-NG.umd.js +2 -0
  74. package/dist/hbo-IL.js +2 -0
  75. package/dist/hbo-IL.umd.js +2 -0
  76. package/dist/he-IL.js +2 -0
  77. package/dist/he-IL.umd.js +2 -0
  78. package/dist/hi-IN.js +2 -0
  79. package/dist/hi-IN.umd.js +2 -0
  80. package/dist/hr-HR.js +2 -0
  81. package/dist/hr-HR.umd.js +2 -0
  82. package/dist/hu-HU.js +2 -0
  83. package/dist/hu-HU.umd.js +2 -0
  84. package/dist/id-ID.js +2 -0
  85. package/dist/id-ID.umd.js +2 -0
  86. package/dist/it-IT.js +2 -0
  87. package/dist/it-IT.umd.js +2 -0
  88. package/dist/ja-JP.js +2 -0
  89. package/dist/ja-JP.umd.js +2 -0
  90. package/dist/ka-GE.js +2 -0
  91. package/dist/ka-GE.umd.js +2 -0
  92. package/dist/kn-IN.js +2 -0
  93. package/dist/kn-IN.umd.js +2 -0
  94. package/dist/ko-KR.js +2 -0
  95. package/dist/ko-KR.umd.js +2 -0
  96. package/dist/lt-LT.js +2 -0
  97. package/dist/lt-LT.umd.js +2 -0
  98. package/dist/lv-LV.js +2 -0
  99. package/dist/lv-LV.umd.js +2 -0
  100. package/dist/mr-IN.js +2 -0
  101. package/dist/mr-IN.umd.js +2 -0
  102. package/dist/ms-MY.js +2 -0
  103. package/dist/ms-MY.umd.js +2 -0
  104. package/dist/nb-NO.js +2 -0
  105. package/dist/nb-NO.umd.js +2 -0
  106. package/dist/nl-NL.js +2 -0
  107. package/dist/nl-NL.umd.js +2 -0
  108. package/dist/pa-IN.js +2 -0
  109. package/dist/pa-IN.umd.js +2 -0
  110. package/dist/pl-PL.js +2 -0
  111. package/dist/pl-PL.umd.js +2 -0
  112. package/dist/pt-PT.js +2 -0
  113. package/dist/pt-PT.umd.js +2 -0
  114. package/dist/ro-RO.js +2 -0
  115. package/dist/ro-RO.umd.js +2 -0
  116. package/dist/ru-RU.js +2 -0
  117. package/dist/ru-RU.umd.js +2 -0
  118. package/dist/sr-Cyrl-RS.js +2 -0
  119. package/dist/sr-Cyrl-RS.umd.js +2 -0
  120. package/dist/sr-Latn-RS.js +2 -0
  121. package/dist/sr-Latn-RS.umd.js +2 -0
  122. package/dist/sv-SE.js +2 -0
  123. package/dist/sv-SE.umd.js +2 -0
  124. package/dist/sw-KE.js +2 -0
  125. package/dist/sw-KE.umd.js +2 -0
  126. package/dist/ta-IN.js +2 -0
  127. package/dist/ta-IN.umd.js +2 -0
  128. package/dist/te-IN.js +2 -0
  129. package/dist/te-IN.umd.js +2 -0
  130. package/dist/th-TH.js +2 -0
  131. package/dist/th-TH.umd.js +2 -0
  132. package/dist/tr-TR.js +2 -0
  133. package/dist/tr-TR.umd.js +2 -0
  134. package/dist/uk-UA.js +2 -0
  135. package/dist/uk-UA.umd.js +2 -0
  136. package/dist/ur-PK.js +2 -0
  137. package/dist/ur-PK.umd.js +2 -0
  138. package/dist/vi-VN.js +2 -0
  139. package/dist/vi-VN.umd.js +2 -0
  140. package/dist/yo-NG.js +2 -0
  141. package/dist/yo-NG.umd.js +2 -0
  142. package/dist/zh-Hans-CN.js +2 -0
  143. package/dist/zh-Hans-CN.umd.js +2 -0
  144. package/dist/zh-Hant-TW.js +2 -0
  145. package/dist/zh-Hant-TW.umd.js +2 -0
  146. package/package.json +47 -82
  147. package/src/am-ET.d.ts +40 -0
  148. package/src/am-ET.js +269 -0
  149. package/src/am-Latn-ET.d.ts +35 -0
  150. package/src/am-Latn-ET.js +264 -0
  151. package/src/ar-SA.d.ts +49 -0
  152. package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
  153. package/src/az-AZ.d.ts +37 -0
  154. package/src/az-AZ.js +312 -0
  155. package/src/bn-BD.d.ts +36 -0
  156. package/{lib/languages/bn.js → src/bn-BD.js} +110 -6
  157. package/src/cs-CZ.d.ts +49 -0
  158. package/{lib/languages/cs.js → src/cs-CZ.js} +240 -14
  159. package/src/da-DK.d.ts +44 -0
  160. package/{lib/languages/da.js → src/da-DK.js} +131 -11
  161. package/src/de-DE.d.ts +57 -0
  162. package/src/de-DE.js +603 -0
  163. package/src/el-GR.d.ts +40 -0
  164. package/src/el-GR.js +418 -0
  165. package/src/en-AU.d.ts +47 -0
  166. package/src/en-AU.js +423 -0
  167. package/src/en-BD.d.ts +49 -0
  168. package/src/en-BD.js +415 -0
  169. package/src/en-CA.d.ts +63 -0
  170. package/src/en-CA.js +518 -0
  171. package/src/en-GB.d.ts +56 -0
  172. package/src/en-GB.js +469 -0
  173. package/src/en-GH.d.ts +11 -0
  174. package/src/en-GH.js +345 -0
  175. package/src/en-IE.d.ts +56 -0
  176. package/src/en-IE.js +479 -0
  177. package/src/en-IN.d.ts +49 -0
  178. package/src/en-IN.js +415 -0
  179. package/src/en-KE.d.ts +11 -0
  180. package/src/en-KE.js +345 -0
  181. package/src/en-MY.d.ts +11 -0
  182. package/src/en-MY.js +347 -0
  183. package/src/en-NG.d.ts +56 -0
  184. package/src/en-NG.js +479 -0
  185. package/src/en-NZ.d.ts +11 -0
  186. package/{lib/languages/en.js → src/en-NZ.js} +164 -31
  187. package/src/en-PH.d.ts +11 -0
  188. package/src/en-PH.js +345 -0
  189. package/src/en-PK.d.ts +49 -0
  190. package/src/en-PK.js +415 -0
  191. package/src/en-SG.d.ts +11 -0
  192. package/src/en-SG.js +345 -0
  193. package/src/en-US.d.ts +63 -0
  194. package/src/en-US.js +516 -0
  195. package/src/en-ZA.d.ts +56 -0
  196. package/src/en-ZA.js +478 -0
  197. package/src/es-ES.d.ts +65 -0
  198. package/src/es-ES.js +541 -0
  199. package/src/es-MX.d.ts +58 -0
  200. package/{lib/languages/es.js → src/es-MX.js} +228 -18
  201. package/src/es-US.d.ts +58 -0
  202. package/src/es-US.js +446 -0
  203. package/src/fa-IR.d.ts +38 -0
  204. package/src/fa-IR.js +246 -0
  205. package/src/fi-FI.d.ts +46 -0
  206. package/{lib/languages/fi.js → src/fi-FI.js} +152 -11
  207. package/src/fil-PH.d.ts +37 -0
  208. package/{lib/languages/fil.js → src/fil-PH.js} +144 -8
  209. package/src/fr-BE.d.ts +49 -0
  210. package/{lib/languages → src}/fr-BE.js +175 -13
  211. package/src/fr-FR.d.ts +63 -0
  212. package/{lib/languages/fr.js → src/fr-FR.js} +182 -16
  213. package/src/gu-IN.d.ts +35 -0
  214. package/{lib/languages/gu.js → src/gu-IN.js} +115 -6
  215. package/src/ha-NG.d.ts +37 -0
  216. package/{lib/languages/ha.js → src/ha-NG.js} +107 -8
  217. package/src/hbo-IL.d.ts +39 -0
  218. package/{lib/languages/hbo.js → src/hbo-IL.js} +211 -19
  219. package/src/he-IL.d.ts +37 -0
  220. package/src/he-IL.js +537 -0
  221. package/src/hi-IN.d.ts +36 -0
  222. package/{lib/languages/hi.js → src/hi-IN.js} +116 -6
  223. package/src/hr-HR.d.ts +42 -0
  224. package/src/hr-HR.js +463 -0
  225. package/src/hu-HU.d.ts +38 -0
  226. package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
  227. package/src/id-ID.d.ts +38 -0
  228. package/{lib/languages/id.js → src/id-ID.js} +99 -8
  229. package/src/it-IT.d.ts +59 -0
  230. package/{lib/languages/it.js → src/it-IT.js} +179 -15
  231. package/src/ja-JP.d.ts +49 -0
  232. package/{lib/languages/ja.js → src/ja-JP.js} +111 -12
  233. package/src/ka-GE.d.ts +44 -0
  234. package/{lib/languages/ka.js → src/ka-GE.js} +113 -11
  235. package/src/kn-IN.d.ts +35 -0
  236. package/{lib/languages/kn.js → src/kn-IN.js} +115 -6
  237. package/src/ko-KR.d.ts +45 -0
  238. package/{lib/languages/ko.js → src/ko-KR.js} +94 -12
  239. package/src/lt-LT.d.ts +49 -0
  240. package/src/lt-LT.js +543 -0
  241. package/src/lv-LV.d.ts +49 -0
  242. package/src/lv-LV.js +595 -0
  243. package/src/mr-IN.d.ts +36 -0
  244. package/{lib/languages/mr.js → src/mr-IN.js} +116 -6
  245. package/src/ms-MY.d.ts +37 -0
  246. package/{lib/languages/ms.js → src/ms-MY.js} +111 -8
  247. package/src/nb-NO.d.ts +44 -0
  248. package/{lib/languages/nb.js → src/nb-NO.js} +153 -11
  249. package/src/nl-NL.d.ts +54 -0
  250. package/{lib/languages/nl.js → src/nl-NL.js} +260 -18
  251. package/src/pa-IN.d.ts +36 -0
  252. package/{lib/languages/pa.js → src/pa-IN.js} +116 -6
  253. package/src/pl-PL.d.ts +55 -0
  254. package/src/pl-PL.js +585 -0
  255. package/src/pt-PT.d.ts +45 -0
  256. package/{lib/languages/pt.js → src/pt-PT.js} +234 -12
  257. package/src/ro-RO.d.ts +44 -0
  258. package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
  259. package/src/ru-RU.d.ts +50 -0
  260. package/src/ru-RU.js +535 -0
  261. package/src/sr-Cyrl-RS.d.ts +49 -0
  262. package/src/sr-Cyrl-RS.js +503 -0
  263. package/src/sr-Latn-RS.d.ts +49 -0
  264. package/src/sr-Latn-RS.js +503 -0
  265. package/src/sv-SE.d.ts +44 -0
  266. package/{lib/languages/sv.js → src/sv-SE.js} +136 -11
  267. package/src/sw-KE.d.ts +37 -0
  268. package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
  269. package/src/ta-IN.d.ts +35 -0
  270. package/{lib/languages/ta.js → src/ta-IN.js} +109 -6
  271. package/src/te-IN.d.ts +35 -0
  272. package/{lib/languages/te.js → src/te-IN.js} +115 -6
  273. package/src/th-TH.d.ts +38 -0
  274. package/{lib/languages/th.js → src/th-TH.js} +99 -6
  275. package/src/tr-TR.d.ts +48 -0
  276. package/{lib/languages/tr.js → src/tr-TR.js} +168 -23
  277. package/src/uk-UA.d.ts +42 -0
  278. package/src/uk-UA.js +463 -0
  279. package/src/ur-PK.d.ts +36 -0
  280. package/{lib/languages/ur.js → src/ur-PK.js} +116 -6
  281. package/src/utils/expand-scientific.d.ts +32 -0
  282. package/src/utils/expand-scientific.js +65 -0
  283. package/src/utils/parse-cardinal.d.ts +14 -0
  284. package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
  285. package/src/utils/parse-currency.d.ts +14 -0
  286. package/src/utils/parse-currency.js +91 -0
  287. package/src/utils/parse-ordinal.d.ts +10 -0
  288. package/src/utils/parse-ordinal.js +103 -0
  289. package/src/vi-VN.d.ts +48 -0
  290. package/{lib/languages/vi.js → src/vi-VN.js} +102 -11
  291. package/src/yo-NG.d.ts +37 -0
  292. package/{lib/languages/yo.js → src/yo-NG.js} +109 -9
  293. package/src/zh-Hans-CN.d.ts +48 -0
  294. package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
  295. package/src/zh-Hant-TW.d.ts +50 -0
  296. package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
  297. package/dist/languages/am-Latn.js +0 -3
  298. package/dist/languages/am-Latn.js.map +0 -1
  299. package/dist/languages/am.js +0 -3
  300. package/dist/languages/am.js.map +0 -1
  301. package/dist/languages/ar.js +0 -3
  302. package/dist/languages/ar.js.map +0 -1
  303. package/dist/languages/az.js +0 -3
  304. package/dist/languages/az.js.map +0 -1
  305. package/dist/languages/bn.js +0 -3
  306. package/dist/languages/bn.js.map +0 -1
  307. package/dist/languages/cs.js +0 -3
  308. package/dist/languages/cs.js.map +0 -1
  309. package/dist/languages/da.js +0 -3
  310. package/dist/languages/da.js.map +0 -1
  311. package/dist/languages/de.js +0 -3
  312. package/dist/languages/de.js.map +0 -1
  313. package/dist/languages/el.js +0 -3
  314. package/dist/languages/el.js.map +0 -1
  315. package/dist/languages/en.js +0 -3
  316. package/dist/languages/en.js.map +0 -1
  317. package/dist/languages/es.js +0 -3
  318. package/dist/languages/es.js.map +0 -1
  319. package/dist/languages/fa.js +0 -3
  320. package/dist/languages/fa.js.map +0 -1
  321. package/dist/languages/fi.js +0 -3
  322. package/dist/languages/fi.js.map +0 -1
  323. package/dist/languages/fil.js +0 -3
  324. package/dist/languages/fil.js.map +0 -1
  325. package/dist/languages/fr-BE.js +0 -3
  326. package/dist/languages/fr-BE.js.map +0 -1
  327. package/dist/languages/fr.js +0 -3
  328. package/dist/languages/fr.js.map +0 -1
  329. package/dist/languages/gu.js +0 -3
  330. package/dist/languages/gu.js.map +0 -1
  331. package/dist/languages/ha.js +0 -3
  332. package/dist/languages/ha.js.map +0 -1
  333. package/dist/languages/hbo.js +0 -3
  334. package/dist/languages/hbo.js.map +0 -1
  335. package/dist/languages/he.js +0 -3
  336. package/dist/languages/he.js.map +0 -1
  337. package/dist/languages/hi.js +0 -3
  338. package/dist/languages/hi.js.map +0 -1
  339. package/dist/languages/hr.js +0 -3
  340. package/dist/languages/hr.js.map +0 -1
  341. package/dist/languages/hu.js +0 -3
  342. package/dist/languages/hu.js.map +0 -1
  343. package/dist/languages/id.js +0 -3
  344. package/dist/languages/id.js.map +0 -1
  345. package/dist/languages/it.js +0 -3
  346. package/dist/languages/it.js.map +0 -1
  347. package/dist/languages/ja.js +0 -3
  348. package/dist/languages/ja.js.map +0 -1
  349. package/dist/languages/ka.js +0 -3
  350. package/dist/languages/ka.js.map +0 -1
  351. package/dist/languages/kn.js +0 -3
  352. package/dist/languages/kn.js.map +0 -1
  353. package/dist/languages/ko.js +0 -3
  354. package/dist/languages/ko.js.map +0 -1
  355. package/dist/languages/lt.js +0 -3
  356. package/dist/languages/lt.js.map +0 -1
  357. package/dist/languages/lv.js +0 -3
  358. package/dist/languages/lv.js.map +0 -1
  359. package/dist/languages/mr.js +0 -3
  360. package/dist/languages/mr.js.map +0 -1
  361. package/dist/languages/ms.js +0 -3
  362. package/dist/languages/ms.js.map +0 -1
  363. package/dist/languages/nb.js +0 -3
  364. package/dist/languages/nb.js.map +0 -1
  365. package/dist/languages/nl.js +0 -3
  366. package/dist/languages/nl.js.map +0 -1
  367. package/dist/languages/pa.js +0 -3
  368. package/dist/languages/pa.js.map +0 -1
  369. package/dist/languages/pl.js +0 -3
  370. package/dist/languages/pl.js.map +0 -1
  371. package/dist/languages/pt.js +0 -3
  372. package/dist/languages/pt.js.map +0 -1
  373. package/dist/languages/ro.js +0 -3
  374. package/dist/languages/ro.js.map +0 -1
  375. package/dist/languages/ru.js +0 -3
  376. package/dist/languages/ru.js.map +0 -1
  377. package/dist/languages/sr-Cyrl.js +0 -3
  378. package/dist/languages/sr-Cyrl.js.map +0 -1
  379. package/dist/languages/sr-Latn.js +0 -3
  380. package/dist/languages/sr-Latn.js.map +0 -1
  381. package/dist/languages/sv.js +0 -3
  382. package/dist/languages/sv.js.map +0 -1
  383. package/dist/languages/sw.js +0 -3
  384. package/dist/languages/sw.js.map +0 -1
  385. package/dist/languages/ta.js +0 -3
  386. package/dist/languages/ta.js.map +0 -1
  387. package/dist/languages/te.js +0 -3
  388. package/dist/languages/te.js.map +0 -1
  389. package/dist/languages/th.js +0 -3
  390. package/dist/languages/th.js.map +0 -1
  391. package/dist/languages/tr.js +0 -3
  392. package/dist/languages/tr.js.map +0 -1
  393. package/dist/languages/uk.js +0 -3
  394. package/dist/languages/uk.js.map +0 -1
  395. package/dist/languages/ur.js +0 -3
  396. package/dist/languages/ur.js.map +0 -1
  397. package/dist/languages/vi.js +0 -3
  398. package/dist/languages/vi.js.map +0 -1
  399. package/dist/languages/yo.js +0 -3
  400. package/dist/languages/yo.js.map +0 -1
  401. package/dist/languages/zh-Hans.js +0 -3
  402. package/dist/languages/zh-Hans.js.map +0 -1
  403. package/dist/languages/zh-Hant.js +0 -3
  404. package/dist/languages/zh-Hant.js.map +0 -1
  405. package/dist/n2words.js +0 -3
  406. package/dist/n2words.js.map +0 -1
  407. package/lib/languages/am-Latn.d.ts +0 -7
  408. package/lib/languages/am-Latn.js +0 -159
  409. package/lib/languages/am.d.ts +0 -7
  410. package/lib/languages/am.js +0 -159
  411. package/lib/languages/ar.d.ts +0 -17
  412. package/lib/languages/az.d.ts +0 -7
  413. package/lib/languages/az.js +0 -171
  414. package/lib/languages/bn.d.ts +0 -7
  415. package/lib/languages/cs.d.ts +0 -18
  416. package/lib/languages/da.d.ts +0 -14
  417. package/lib/languages/de.d.ts +0 -17
  418. package/lib/languages/de.js +0 -320
  419. package/lib/languages/el.d.ts +0 -14
  420. package/lib/languages/el.js +0 -236
  421. package/lib/languages/en.d.ts +0 -17
  422. package/lib/languages/es.d.ts +0 -21
  423. package/lib/languages/fa.d.ts +0 -7
  424. package/lib/languages/fa.js +0 -134
  425. package/lib/languages/fi.d.ts +0 -14
  426. package/lib/languages/fil.d.ts +0 -7
  427. package/lib/languages/fr-BE.d.ts +0 -11
  428. package/lib/languages/fr.d.ts +0 -21
  429. package/lib/languages/gu.d.ts +0 -7
  430. package/lib/languages/ha.d.ts +0 -7
  431. package/lib/languages/hbo.d.ts +0 -13
  432. package/lib/languages/he.d.ts +0 -13
  433. package/lib/languages/he.js +0 -265
  434. package/lib/languages/hi.d.ts +0 -7
  435. package/lib/languages/hr.d.ts +0 -11
  436. package/lib/languages/hr.js +0 -224
  437. package/lib/languages/hu.d.ts +0 -7
  438. package/lib/languages/id.d.ts +0 -7
  439. package/lib/languages/it.d.ts +0 -19
  440. package/lib/languages/ja.d.ts +0 -17
  441. package/lib/languages/ka.d.ts +0 -17
  442. package/lib/languages/kn.d.ts +0 -7
  443. package/lib/languages/ko.d.ts +0 -14
  444. package/lib/languages/lt.d.ts +0 -18
  445. package/lib/languages/lt.js +0 -301
  446. package/lib/languages/lv.d.ts +0 -18
  447. package/lib/languages/lv.js +0 -312
  448. package/lib/languages/mr.d.ts +0 -7
  449. package/lib/languages/ms.d.ts +0 -7
  450. package/lib/languages/nb.d.ts +0 -14
  451. package/lib/languages/nl.d.ts +0 -26
  452. package/lib/languages/pa.d.ts +0 -7
  453. package/lib/languages/pl.d.ts +0 -22
  454. package/lib/languages/pl.js +0 -317
  455. package/lib/languages/pt.d.ts +0 -17
  456. package/lib/languages/ro.d.ts +0 -18
  457. package/lib/languages/ru.d.ts +0 -11
  458. package/lib/languages/ru.js +0 -245
  459. package/lib/languages/sr-Cyrl.d.ts +0 -11
  460. package/lib/languages/sr-Cyrl.js +0 -221
  461. package/lib/languages/sr-Latn.d.ts +0 -11
  462. package/lib/languages/sr-Latn.js +0 -221
  463. package/lib/languages/sv.d.ts +0 -14
  464. package/lib/languages/sw.d.ts +0 -7
  465. package/lib/languages/ta.d.ts +0 -7
  466. package/lib/languages/te.d.ts +0 -7
  467. package/lib/languages/th.d.ts +0 -7
  468. package/lib/languages/tr.d.ts +0 -18
  469. package/lib/languages/uk.d.ts +0 -11
  470. package/lib/languages/uk.js +0 -224
  471. package/lib/languages/ur.d.ts +0 -7
  472. package/lib/languages/vi.d.ts +0 -17
  473. package/lib/languages/yo.d.ts +0 -7
  474. package/lib/languages/zh-Hans.d.ts +0 -11
  475. package/lib/languages/zh-Hant.d.ts +0 -11
  476. package/lib/n2words.d.ts +0 -55
  477. package/lib/n2words.js +0 -126
  478. package/lib/utils/parse-numeric.d.ts +0 -17
  479. /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
  480. /package/{lib → src}/utils/is-plain-object.js +0 -0
  481. /package/{lib → src}/utils/validate-options.d.ts +0 -0
  482. /package/{lib → src}/utils/validate-options.js +0 -0
@@ -1,317 +0,0 @@
1
- /**
2
- * Polish language converter - Functional Implementation
3
- *
4
- * Self-contained module with its own input validation, ready for subpath exports.
5
- *
6
- * Polish-specific rules:
7
- * - Three-form pluralization: 1 = singular, 2-4 = few, 5+ = many
8
- * - Gender agreement (masculine/feminine for numbers < 1000)
9
- * - Omit "jeden" before scale words (tysiąc, milion, etc.)
10
- * - Irregular hundreds: dwieście, trzysta, czterysta, pięćset...
11
- * - Long scale with -ard forms: miliard, biliard, tryliard
12
- */
13
-
14
- import { parseNumericValue } from '../utils/parse-numeric.js'
15
- import { validateOptions } from '../utils/validate-options.js'
16
-
17
- // ============================================================================
18
- // Vocabulary (module-level constants)
19
- // ============================================================================
20
-
21
- const ONES_MASC = ['', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć']
22
- const ONES_FEM = ['', 'jedna', 'dwie', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć']
23
-
24
- const TEENS = ['dziesięć', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dziewiętnaście']
25
-
26
- const TENS = ['', '', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'pięćdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewięćdziesiąt']
27
-
28
- // Irregular hundreds
29
- const HUNDREDS = ['', 'sto', 'dwieście', 'trzysta', 'czterysta', 'pięćset', 'sześćset', 'siedemset', 'osiemset', 'dziewięćset']
30
-
31
- // Scale words: [singular, few (2-4), many (5+)]
32
- const PLURAL_FORMS = {
33
- 1: ['tysiąc', 'tysiące', 'tysięcy'],
34
- 2: ['milion', 'miliony', 'milionów'],
35
- 3: ['miliard', 'miliardy', 'miliardów'],
36
- 4: ['bilion', 'biliony', 'bilionów'],
37
- 5: ['biliard', 'biliardy', 'biliardów'],
38
- 6: ['trylion', 'tryliony', 'trylionów'],
39
- 7: ['tryliard', 'tryliardy', 'tryliardów'],
40
- 8: ['kwadrylion', 'kwadryliony', 'kwadrylionów'],
41
- 9: ['kwaryliard', 'kwadryliardy', 'kwadryliardów'],
42
- 10: ['kwintylion', 'kwintyliony', 'kwintylionów']
43
- }
44
-
45
- const ZERO = 'zero'
46
- const NEGATIVE = 'minus'
47
- const DECIMAL_SEP = 'przecinek'
48
-
49
- // ============================================================================
50
- // Segment Building
51
- // ============================================================================
52
-
53
- /**
54
- * Builds segment word for 0-999 (masculine form).
55
- * @param {number} n - Segment value
56
- * @returns {string} Polish word
57
- */
58
- function buildSegment (n) {
59
- if (n === 0) return ''
60
-
61
- const ones = n % 10
62
- const tens = Math.floor(n / 10) % 10
63
- const hundreds = Math.floor(n / 100)
64
-
65
- const parts = []
66
-
67
- // Hundreds
68
- if (hundreds > 0) {
69
- parts.push(HUNDREDS[hundreds])
70
- }
71
-
72
- // Tens and ones
73
- if (tens === 1) {
74
- // Teens (10-19)
75
- parts.push(TEENS[ones])
76
- } else {
77
- if (tens >= 2) {
78
- parts.push(TENS[tens])
79
- }
80
- if (ones > 0) {
81
- parts.push(ONES_MASC[ones])
82
- }
83
- }
84
-
85
- return parts.join(' ')
86
- }
87
-
88
- /**
89
- * Builds segment word for 0-999 (feminine form - only differs in ones).
90
- * @param {number} n - Segment value
91
- * @returns {string} Polish word
92
- */
93
- function buildSegmentFeminine (n) {
94
- if (n === 0) return ''
95
-
96
- const ones = n % 10
97
- const tens = Math.floor(n / 10) % 10
98
- const hundreds = Math.floor(n / 100)
99
-
100
- const parts = []
101
-
102
- // Hundreds
103
- if (hundreds > 0) {
104
- parts.push(HUNDREDS[hundreds])
105
- }
106
-
107
- // Tens and ones - feminine for ones only
108
- if (tens === 1) {
109
- parts.push(TEENS[ones])
110
- } else {
111
- if (tens >= 2) {
112
- parts.push(TENS[tens])
113
- }
114
- if (ones > 0) {
115
- parts.push(ONES_FEM[ones])
116
- }
117
- }
118
-
119
- return parts.join(' ')
120
- }
121
-
122
- // ============================================================================
123
- // Helper Functions
124
- // ============================================================================
125
-
126
- /**
127
- * Polish pluralization: 1 = singular, 2-4 = few, else = many.
128
- * Special case: 11-19 always use many form.
129
- *
130
- * @param {bigint} n - Number to pluralize
131
- * @param {string[]} forms - [singular, few, many]
132
- * @returns {string} Correct plural form
133
- */
134
- function pluralize (n, forms) {
135
- if (n === 1n) {
136
- return forms[0]
137
- }
138
-
139
- const lastDigit = n % 10n
140
- const lastTwoDigits = n % 100n
141
-
142
- // Teens (11-19) always use many form
143
- // 2-4 use few form (but not 12-14)
144
- if (lastDigit >= 2n && lastDigit <= 4n && (lastTwoDigits < 10n || lastTwoDigits > 20n)) {
145
- return forms[1]
146
- }
147
-
148
- return forms[2]
149
- }
150
-
151
- // ============================================================================
152
- // Conversion Functions
153
- // ============================================================================
154
-
155
- /**
156
- * Converts a non-negative integer to Polish words.
157
- *
158
- * @param {bigint} n - Non-negative integer to convert
159
- * @param {Object} options - Conversion options
160
- * @returns {string} Polish words
161
- */
162
- function integerToWords (n, options = {}) {
163
- if (n === 0n) return ZERO
164
-
165
- // Fast path: numbers < 1000
166
- if (n < 1000n) {
167
- return options.gender === 'feminine' ? buildSegmentFeminine(Number(n)) : buildSegment(Number(n))
168
- }
169
-
170
- // Fast path: numbers < 1,000,000 (thousands)
171
- if (n < 1_000_000n) {
172
- const thousands = Number(n / 1000n)
173
- const remainder = Number(n % 1000n)
174
-
175
- const scaleWord = pluralize(BigInt(thousands), PLURAL_FORMS[1])
176
-
177
- let result
178
- if (thousands === 1) {
179
- // Omit "jeden" before tysiąc
180
- result = scaleWord
181
- } else {
182
- result = buildSegment(thousands) + ' ' + scaleWord
183
- }
184
-
185
- if (remainder > 0) {
186
- result += ' ' + buildSegment(remainder)
187
- }
188
-
189
- return result
190
- }
191
-
192
- // For numbers >= 1,000,000, use scale decomposition
193
- return buildLargeNumberWords(n, options)
194
- }
195
-
196
- /**
197
- * Builds words for numbers >= 1,000,000.
198
- * Uses BigInt division for faster segment extraction.
199
- *
200
- * @param {bigint} n - Number >= 1,000,000
201
- * @param {Object} options - Conversion options
202
- * @returns {string} Polish words
203
- */
204
- function buildLargeNumberWords (n, options) {
205
- // Extract segments using BigInt division (faster than string slicing)
206
- // Segments stored least-significant first (index 0 = ones, 1 = thousands, etc.)
207
- const segmentValues = []
208
- let temp = n
209
- while (temp > 0n) {
210
- segmentValues.push(temp % 1000n)
211
- temp = temp / 1000n
212
- }
213
-
214
- // Build result string directly
215
- let result = ''
216
-
217
- for (let i = segmentValues.length - 1; i >= 0; i--) {
218
- const segment = segmentValues[i]
219
- if (segment === 0n) continue
220
-
221
- const segmentWord = buildSegment(Number(segment))
222
-
223
- if (result) result += ' '
224
-
225
- if (i === 0) {
226
- // Units segment
227
- result += segmentWord
228
- } else {
229
- // Scale word needed
230
- const forms = PLURAL_FORMS[i]
231
- if (forms) {
232
- const scaleWord = pluralize(segment, forms)
233
-
234
- if (segment === 1n) {
235
- // Omit "jeden" before scale words
236
- result += scaleWord
237
- } else {
238
- result += segmentWord + ' ' + scaleWord
239
- }
240
- }
241
- }
242
- }
243
-
244
- return result
245
- }
246
-
247
- /**
248
- * Converts decimal digits to Polish words.
249
- *
250
- * @param {string} decimalPart - Decimal digits (without the point)
251
- * @param {Object} options - Conversion options
252
- * @returns {string} Polish words for decimal part
253
- */
254
- function decimalPartToWords (decimalPart, options) {
255
- let result = ''
256
-
257
- // Handle leading zeros
258
- let i = 0
259
- while (i < decimalPart.length && decimalPart[i] === '0') {
260
- if (result) result += ' '
261
- result += ZERO
262
- i++
263
- }
264
-
265
- // Convert remainder as a single number
266
- const remainder = decimalPart.slice(i)
267
- if (remainder) {
268
- if (result) result += ' '
269
- result += integerToWords(BigInt(remainder), options)
270
- }
271
-
272
- return result
273
- }
274
-
275
- /**
276
- * Converts a numeric value to Polish words.
277
- *
278
- * This is the main public API. It accepts any valid numeric input
279
- * (number, string, or bigint) and handles parsing internally.
280
- *
281
- * @param {number | string | bigint} value - The numeric value to convert
282
- * @param {Object} [options] - Conversion options
283
- * @param {string} [options.gender='masculine'] - Gender for numbers < 1000
284
- * @returns {string} The number in Polish words
285
- * @throws {TypeError} If value is not a valid numeric type
286
- * @throws {Error} If value is not a valid number format
287
- *
288
- * @example
289
- * toWords(1) // 'jeden'
290
- * toWords(1, { gender: 'feminine' }) // 'jedna'
291
- * toWords(1000) // 'tysiąc'
292
- * toWords(2000) // 'dwa tysiące'
293
- */
294
- function toWords (value, options) {
295
- options = validateOptions(options)
296
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
297
-
298
- let result = ''
299
-
300
- if (isNegative) {
301
- result = NEGATIVE + ' '
302
- }
303
-
304
- result += integerToWords(integerPart, options)
305
-
306
- if (decimalPart) {
307
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
308
- }
309
-
310
- return result
311
- }
312
-
313
- // ============================================================================
314
- // Public API
315
- // ============================================================================
316
-
317
- export { toWords }
@@ -1,17 +0,0 @@
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
- * toWords(21) // 'vinte e um'
14
- * toWords(100) // 'cem'
15
- * toWords(1000000) // 'um milhão'
16
- */
17
- export function toWords(value: number | string | bigint): string;
@@ -1,18 +0,0 @@
1
- /**
2
- * Converts a numeric value to Romanian words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @param {Object} [options] - Conversion options
6
- * @param {string} [options.gender='masculine'] - Gender for numbers
7
- * @returns {string} The number in Romanian words
8
- * @throws {TypeError} If value is not a valid numeric type
9
- * @throws {Error} If value is not a valid number format
10
- *
11
- * @example
12
- * toWords(21) // 'douăzeci și unu'
13
- * toWords(1, { gender: 'feminine' }) // 'una'
14
- * toWords(1000) // 'o mie'
15
- */
16
- export function toWords(value: number | string | bigint, options?: {
17
- gender?: string | undefined;
18
- }): string;
@@ -1,11 +0,0 @@
1
- /**
2
- * Converts a numeric value to Russian words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @param {Object} [options] - Optional configuration
6
- * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
7
- * @returns {string} The number in Russian words
8
- */
9
- export function toWords(value: number | string | bigint, options?: {
10
- gender?: "masculine" | "feminine" | undefined;
11
- }): string;
@@ -1,245 +0,0 @@
1
- /**
2
- * Russian language converter - Functional Implementation
3
- *
4
- * Self-contained module with its own input validation, ready for subpath exports.
5
- *
6
- * Key features:
7
- * - Three-form pluralization (one/few/many)
8
- * - Gender: thousands are feminine, millions+ are masculine
9
- * - Irregular hundreds (двести, триста, etc.)
10
- * - Long scale naming
11
- */
12
-
13
- import { parseNumericValue } from '../utils/parse-numeric.js'
14
- import { validateOptions } from '../utils/validate-options.js'
15
-
16
- // ============================================================================
17
- // Vocabulary
18
- // ============================================================================
19
-
20
- const ONES_MASC = ['', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять']
21
- const ONES_FEM = ['', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять']
22
-
23
- const TEENS = ['десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать']
24
- const TENS = ['', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто']
25
-
26
- // Irregular hundreds
27
- const HUNDREDS = ['', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот']
28
-
29
- const ZERO = 'ноль'
30
- const NEGATIVE = 'минус'
31
- const DECIMAL_SEP = 'запятая'
32
-
33
- // Scale words: [singular, few, many]
34
- // Thousands (index 0) are feminine, rest are masculine
35
- const SCALE_FORMS = [
36
- ['тысяча', 'тысячи', 'тысяч'],
37
- ['миллион', 'миллиона', 'миллионов'],
38
- ['миллиард', 'миллиарда', 'миллиардов'],
39
- ['триллион', 'триллиона', 'триллионов'],
40
- ['квадриллион', 'квадриллиона', 'квадриллионов'],
41
- ['квинтиллион', 'квинтиллиона', 'квинтиллионов'],
42
- ['секстиллион', 'секстиллиона', 'секстиллионов'],
43
- ['септиллион', 'септиллиона', 'септиллионов'],
44
- ['октиллион', 'октиллиона', 'октиллионов'],
45
- ['нониллион', 'нониллиона', 'нониллионов']
46
- ]
47
-
48
- // ============================================================================
49
- // Segment Building
50
- // ============================================================================
51
-
52
- function pluralize (n, forms) {
53
- const num = typeof n === 'bigint' ? Number(n) : n
54
- const lastDigit = num % 10
55
- const lastTwoDigits = num % 100
56
-
57
- if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
58
- return forms[2]
59
- }
60
-
61
- if (lastDigit === 1) return forms[0]
62
- if (lastDigit >= 2 && lastDigit <= 4) return forms[1]
63
- return forms[2]
64
- }
65
-
66
- function buildSegmentMasc (n) {
67
- if (n === 0) return ''
68
-
69
- const onesDigit = n % 10
70
- const tensDigit = Math.floor(n / 10) % 10
71
- const hundredsDigit = Math.floor(n / 100)
72
-
73
- const parts = []
74
-
75
- if (hundredsDigit > 0) {
76
- parts.push(HUNDREDS[hundredsDigit])
77
- }
78
-
79
- if (tensDigit > 1) {
80
- parts.push(TENS[tensDigit])
81
- }
82
-
83
- if (tensDigit === 1) {
84
- parts.push(TEENS[onesDigit])
85
- } else if (onesDigit > 0) {
86
- parts.push(ONES_MASC[onesDigit])
87
- }
88
-
89
- return parts.join(' ')
90
- }
91
-
92
- function buildSegmentFem (n) {
93
- if (n === 0) return ''
94
-
95
- const onesDigit = n % 10
96
- const tensDigit = Math.floor(n / 10) % 10
97
- const hundredsDigit = Math.floor(n / 100)
98
-
99
- const parts = []
100
-
101
- if (hundredsDigit > 0) {
102
- parts.push(HUNDREDS[hundredsDigit])
103
- }
104
-
105
- if (tensDigit > 1) {
106
- parts.push(TENS[tensDigit])
107
- }
108
-
109
- if (tensDigit === 1) {
110
- parts.push(TEENS[onesDigit])
111
- } else if (onesDigit > 0) {
112
- parts.push(ONES_FEM[onesDigit])
113
- }
114
-
115
- return parts.join(' ')
116
- }
117
-
118
- // ============================================================================
119
- // Conversion Functions
120
- // ============================================================================
121
-
122
- function integerToWords (n, options = {}) {
123
- if (n === 0n) return ZERO
124
-
125
- const feminine = options.gender === 'feminine'
126
-
127
- if (n < 1000n) {
128
- return feminine ? buildSegmentFem(Number(n)) : buildSegmentMasc(Number(n))
129
- }
130
-
131
- if (n < 1_000_000n) {
132
- const thousands = Number(n / 1000n)
133
- const remainder = Number(n % 1000n)
134
-
135
- // Thousands are always feminine in Russian
136
- const thousandsWord = buildSegmentFem(thousands)
137
- const scaleWord = pluralize(thousands, SCALE_FORMS[0])
138
-
139
- let result = thousandsWord + ' ' + scaleWord
140
-
141
- if (remainder > 0) {
142
- result += ' ' + (feminine ? buildSegmentFem(remainder) : buildSegmentMasc(remainder))
143
- }
144
-
145
- return result
146
- }
147
-
148
- return buildLargeNumberWords(n, options)
149
- }
150
-
151
- function buildLargeNumberWords (n, options) {
152
- const feminine = options.gender === 'feminine'
153
- const numStr = n.toString()
154
- const len = numStr.length
155
-
156
- const segments = []
157
- const segmentSize = 3
158
-
159
- const remainderLen = len % segmentSize
160
- let pos = 0
161
- if (remainderLen > 0) {
162
- segments.push(Number(numStr.slice(0, remainderLen)))
163
- pos = remainderLen
164
- }
165
- while (pos < len) {
166
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
167
- pos += segmentSize
168
- }
169
-
170
- const parts = []
171
- let scaleIndex = segments.length - 1
172
-
173
- for (let i = 0; i < segments.length; i++) {
174
- const segment = segments[i]
175
-
176
- if (segment !== 0) {
177
- if (scaleIndex === 0) {
178
- parts.push(feminine ? buildSegmentFem(segment) : buildSegmentMasc(segment))
179
- } else {
180
- const scaleForms = SCALE_FORMS[scaleIndex - 1]
181
- const scaleWord = pluralize(segment, scaleForms)
182
- // Thousands (scaleIndex=1) are feminine, others masculine
183
- const isFeminine = scaleIndex === 1
184
- const segmentWord = isFeminine ? buildSegmentFem(segment) : buildSegmentMasc(segment)
185
- parts.push(segmentWord + ' ' + scaleWord)
186
- }
187
- }
188
-
189
- scaleIndex--
190
- }
191
-
192
- return parts.join(' ')
193
- }
194
-
195
- function decimalPartToWords (decimalPart, options) {
196
- let result = ''
197
- let i = 0
198
-
199
- while (i < decimalPart.length && decimalPart[i] === '0') {
200
- if (result) result += ' '
201
- result += ZERO
202
- i++
203
- }
204
-
205
- const remainder = decimalPart.slice(i)
206
- if (remainder) {
207
- if (result) result += ' '
208
- result += integerToWords(BigInt(remainder), options)
209
- }
210
-
211
- return result
212
- }
213
-
214
- /**
215
- * Converts a numeric value to Russian words.
216
- *
217
- * @param {number | string | bigint} value - The numeric value to convert
218
- * @param {Object} [options] - Optional configuration
219
- * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
220
- * @returns {string} The number in Russian words
221
- */
222
- function toWords (value, options) {
223
- options = validateOptions(options)
224
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
225
-
226
- let result = ''
227
-
228
- if (isNegative) {
229
- result = NEGATIVE + ' '
230
- }
231
-
232
- result += integerToWords(integerPart, options)
233
-
234
- if (decimalPart) {
235
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
236
- }
237
-
238
- return result
239
- }
240
-
241
- // ============================================================================
242
- // Exports
243
- // ============================================================================
244
-
245
- export { toWords }
@@ -1,11 +0,0 @@
1
- /**
2
- * Converts a numeric value to Serbian (Cyrillic) words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @param {Object} [options] - Optional configuration
6
- * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
7
- * @returns {string} The number in Serbian Cyrillic words
8
- */
9
- export function toWords(value: number | string | bigint, options?: {
10
- gender?: "masculine" | "feminine" | undefined;
11
- }): string;