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
@@ -1,310 +0,0 @@
1
- /**
2
- * Lithuanian language converter - Functional Implementation
3
- *
4
- * A performance-optimized number-to-words converter using precomputed lookup tables.
5
- *
6
- * Key features:
7
- * - Three-form pluralization (singular/plural/genitive)
8
- * - Gender agreement (masculine/feminine for numbers < 1000)
9
- * - Two-form hundreds (šimtas/šimtai)
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 (module-level constants)
18
- // ============================================================================
19
-
20
- const ONES_MASC = ['', 'vienas', 'du', 'trys', 'keturi', 'penki', 'šeši', 'septyni', 'aštuoni', 'devyni']
21
- const ONES_FEM = ['', 'viena', 'dvi', 'trys', 'keturios', 'penkios', 'šešios', 'septynios', 'aštuonios', 'devynios']
22
-
23
- const TEENS = ['dešimt', 'vienuolika', 'dvylika', 'trylika', 'keturiolika', 'penkiolika', 'šešiolika', 'septyniolika', 'aštuoniolika', 'devyniolika']
24
- const TENS = ['', '', 'dvidešimt', 'trisdešimt', 'keturiasdešimt', 'penkiasdešimt', 'šešiasdešimt', 'septyniasdešimt', 'aštuoniasdešimt', 'devyniasdešimt']
25
-
26
- // Hundreds: šimtas (singular), šimtai (plural)
27
- const HUNDRED_SINGULAR = 'šimtas'
28
- const HUNDRED_PLURAL = 'šimtai'
29
-
30
- const ZERO = 'nulis'
31
- const NEGATIVE = 'minus'
32
- const DECIMAL_SEP = 'kablelis'
33
-
34
- // Scale words: [singular, plural, genitive]
35
- const SCALE_FORMS = [
36
- ['tūkstantis', 'tūkstančiai', 'tūkstančių'],
37
- ['milijonas', 'milijonai', 'milijonų'],
38
- ['milijardas', 'milijardai', 'milijardų'],
39
- ['trilijonas', 'trilijonai', 'trilijonų'],
40
- ['kvadrilijonas', 'kvadrilijonai', 'kvadrilijonų'],
41
- ['kvintilijonas', 'kvintilijonai', 'kvintilijonų'],
42
- ['sikstilijonas', 'sikstilijonai', 'sikstilijonų'],
43
- ['septilijonas', 'septilijonai', 'septilijonų'],
44
- ['oktilijonas', 'oktilijonai', 'oktilijonų']
45
- ]
46
-
47
- // ============================================================================
48
- // Precomputed Lookup Tables (built once at module load)
49
- // ============================================================================
50
-
51
- /**
52
- * Builds segment word for 0-999 (masculine form).
53
- */
54
- function buildSegment (n) {
55
- if (n === 0) return ''
56
-
57
- const ones = n % 10
58
- const tens = Math.floor(n / 10) % 10
59
- const hundreds = Math.floor(n / 100)
60
-
61
- const parts = []
62
-
63
- // Hundreds - Lithuanian always includes the numeral
64
- if (hundreds > 0) {
65
- parts.push(ONES_MASC[hundreds])
66
- parts.push(hundreds === 1 ? HUNDRED_SINGULAR : HUNDRED_PLURAL)
67
- }
68
-
69
- // Tens
70
- if (tens > 1) {
71
- parts.push(TENS[tens])
72
- }
73
-
74
- // Teens or ones
75
- if (tens === 1) {
76
- parts.push(TEENS[ones])
77
- } else if (ones > 0) {
78
- parts.push(ONES_MASC[ones])
79
- }
80
-
81
- return parts.join(' ')
82
- }
83
-
84
- /**
85
- * Builds segment word for 0-999 (feminine form - only differs in ones).
86
- */
87
- function buildSegmentFeminine (n) {
88
- if (n === 0) return ''
89
-
90
- const ones = n % 10
91
- const tens = Math.floor(n / 10) % 10
92
- const hundreds = Math.floor(n / 100)
93
-
94
- const parts = []
95
-
96
- // Hundreds - always masculine
97
- if (hundreds > 0) {
98
- parts.push(ONES_MASC[hundreds])
99
- parts.push(hundreds === 1 ? HUNDRED_SINGULAR : HUNDRED_PLURAL)
100
- }
101
-
102
- // Tens
103
- if (tens > 1) {
104
- parts.push(TENS[tens])
105
- }
106
-
107
- // Teens or ones - feminine for ones only
108
- if (tens === 1) {
109
- parts.push(TEENS[ones])
110
- } else if (ones > 0) {
111
- parts.push(ONES_FEM[ones])
112
- }
113
-
114
- return parts.join(' ')
115
- }
116
-
117
- // Precompute all 1000 segment words (0-999)
118
- const SEGMENTS_MASC = new Array(1000)
119
- const SEGMENTS_FEM = new Array(1000)
120
-
121
- for (let i = 0; i < 1000; i++) {
122
- SEGMENTS_MASC[i] = buildSegment(i)
123
- SEGMENTS_FEM[i] = buildSegmentFeminine(i)
124
- }
125
-
126
- // ============================================================================
127
- // Pluralization
128
- // ============================================================================
129
-
130
- /**
131
- * Lithuanian pluralization rules.
132
- * - Singular: ends in 1 (except 11)
133
- * - Plural: ends in 2-9 (except 12-19)
134
- * - Genitive: 0, 10-19, or ends in 0
135
- *
136
- * @param {number} n - The segment value
137
- * @param {string[]} forms - [singular, plural, genitive]
138
- * @returns {string} The appropriate form
139
- */
140
- function pluralize (n, forms) {
141
- if (n === 0) return forms[2]
142
-
143
- const lastDigit = n % 10
144
- const lastTwoDigits = n % 100
145
-
146
- // 10-19 always use genitive
147
- if (lastTwoDigits >= 10 && lastTwoDigits <= 19) {
148
- return forms[2]
149
- }
150
-
151
- // Ends in 0 → genitive
152
- if (lastDigit === 0) {
153
- return forms[2]
154
- }
155
-
156
- // Ends in 1 → singular
157
- if (lastDigit === 1) {
158
- return forms[0]
159
- }
160
-
161
- // Ends in 2-9 → plural
162
- return forms[1]
163
- }
164
-
165
- // ============================================================================
166
- // Conversion Functions
167
- // ============================================================================
168
-
169
- /**
170
- * Converts a non-negative integer to Lithuanian words.
171
- *
172
- * @param {bigint} n - Non-negative integer to convert
173
- * @param {Object} options - Conversion options
174
- * @returns {string} Lithuanian words
175
- */
176
- function integerToWords (n, options = {}) {
177
- if (n === 0n) return ZERO
178
-
179
- // Fast path: numbers < 1000 (direct lookup)
180
- if (n < 1000n) {
181
- const segments = options.gender === 'feminine' ? SEGMENTS_FEM : SEGMENTS_MASC
182
- return segments[Number(n)]
183
- }
184
-
185
- // For numbers >= 1000, feminine only applies to final segment if < 1000
186
- // But the fixture shows feminine NOT applying for n >= 1000
187
- // So we use masculine for all segments when n >= 1000
188
- return buildLargeNumberWords(n, options)
189
- }
190
-
191
- /**
192
- * Builds words for numbers >= 1000.
193
- *
194
- * @param {bigint} n - Number >= 1000
195
- * @param {Object} options - Conversion options
196
- * @returns {string} Lithuanian words
197
- */
198
- function buildLargeNumberWords (n, options) {
199
- const numStr = n.toString()
200
- const len = numStr.length
201
-
202
- // Build segments of 3 digits from right to left
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
- // Convert segments to words
218
- const parts = []
219
- let scaleIndex = segments.length - 1
220
-
221
- for (let i = 0; i < segments.length; i++) {
222
- const segment = segments[i]
223
-
224
- if (segment !== 0) {
225
- const segmentWord = SEGMENTS_MASC[segment]
226
-
227
- if (scaleIndex === 0) {
228
- // Units segment - use masculine (feminine doesn't apply when n >= 1000)
229
- parts.push(segmentWord)
230
- } else {
231
- // Segment with scale word
232
- const scaleForms = SCALE_FORMS[scaleIndex - 1]
233
- const scaleWord = pluralize(segment, scaleForms)
234
- parts.push(segmentWord + ' ' + scaleWord)
235
- }
236
- }
237
-
238
- scaleIndex--
239
- }
240
-
241
- return parts.join(' ')
242
- }
243
-
244
- /**
245
- * Converts decimal digits to Lithuanian words.
246
- *
247
- * @param {string} decimalPart - Decimal digits (without the point)
248
- * @param {Object} options - Conversion options
249
- * @returns {string} Lithuanian words for decimal part
250
- */
251
- function decimalPartToWords (decimalPart, options) {
252
- let result = ''
253
-
254
- // Handle leading zeros
255
- let i = 0
256
- while (i < decimalPart.length && decimalPart[i] === '0') {
257
- if (result) result += ' '
258
- result += ZERO
259
- i++
260
- }
261
-
262
- // Convert remainder as a single number
263
- const remainder = decimalPart.slice(i)
264
- if (remainder) {
265
- if (result) result += ' '
266
- result += integerToWords(BigInt(remainder), options)
267
- }
268
-
269
- return result
270
- }
271
-
272
- /**
273
- * Converts a numeric value to Lithuanian words.
274
- *
275
- * @param {number | string | bigint} value - The numeric value to convert
276
- * @param {Object} [options] - Conversion options
277
- * @param {string} [options.gender='masculine'] - Gender for numbers < 1000
278
- * @returns {string} The number in Lithuanian words
279
- * @throws {TypeError} If value is not a valid numeric type
280
- * @throws {Error} If value is not a valid number format
281
- *
282
- * @example
283
- * toWords(42) // 'keturiasdešimt du'
284
- * toWords(1, { gender: 'feminine' }) // 'viena'
285
- * toWords(1000000) // 'vienas milijonas'
286
- */
287
- function toWords (value, options) {
288
- options = validateOptions(options)
289
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
290
-
291
- let result = ''
292
-
293
- if (isNegative) {
294
- result = NEGATIVE + ' '
295
- }
296
-
297
- result += integerToWords(integerPart, options)
298
-
299
- if (decimalPart) {
300
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
301
- }
302
-
303
- return result
304
- }
305
-
306
- // ============================================================================
307
- // Public API
308
- // ============================================================================
309
-
310
- export { toWords }
@@ -1,18 +0,0 @@
1
- /**
2
- * Converts a numeric value to Latvian 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 < 1000
7
- * @returns {string} The number in Latvian 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(42) // 'četrdesmit divi'
13
- * toWords(1, { gender: 'feminine' }) // 'viena'
14
- * toWords(1000) // 'tūkstotis'
15
- */
16
- export function toWords(value: number | string | bigint, options?: {
17
- gender?: string | undefined;
18
- }): string;
@@ -1,321 +0,0 @@
1
- /**
2
- * Latvian language converter - Functional Implementation
3
- *
4
- * A performance-optimized number-to-words converter using precomputed lookup tables.
5
- *
6
- * Key features:
7
- * - Two-form pluralization (singular for 1 except 11, plural otherwise)
8
- * - Gender agreement (masculine/feminine for numbers < 1000)
9
- * - Special hundreds forms (simts/simti/simtu)
10
- * - Omit "one" before scale words
11
- * - Long scale naming
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 = ['', 'viens', 'divi', 'trīs', 'četri', 'pieci', 'seši', 'septiņi', 'astoņi', 'deviņi']
22
- const ONES_FEM = ['', 'viena', 'divas', 'trīs', 'četras', 'piecas', 'sešas', 'septiņas', 'astoņas', 'deviņas']
23
-
24
- const TEENS = ['desmit', 'vienpadsmit', 'divpadsmit', 'trīspadsmit', 'četrpadsmit', 'piecpadsmit', 'sešpadsmit', 'septiņpadsmit', 'astoņpadsmit', 'deviņpadsmit']
25
- const TENS = ['', '', 'divdesmit', 'trīsdesmit', 'četrdesmit', 'piecdesmit', 'sešdesmit', 'septiņdesmit', 'astoņdesmit', 'deviņdesmit']
26
-
27
- // Hundreds: simts (100, 110-199), simti (200-999), simtu (101-109)
28
- const HUNDRED_SINGULAR = 'simts'
29
- const HUNDRED_PLURAL = 'simti'
30
- const HUNDRED_GENITIVE = 'simtu'
31
-
32
- const ZERO = 'nulle'
33
- const NEGATIVE = 'mīnus'
34
- const DECIMAL_SEP = 'komats'
35
-
36
- // Scale words: [singular, plural, genitive]
37
- const SCALE_FORMS = [
38
- ['tūkstotis', 'tūkstoši', 'tūkstošu'],
39
- ['miljons', 'miljoni', 'miljonu'],
40
- ['miljards', 'miljardi', 'miljardu'],
41
- ['triljons', 'triljoni', 'triljonu'],
42
- ['kvadriljons', 'kvadriljoni', 'kvadriljonu'],
43
- ['kvintiljons', 'kvintiljoni', 'kvintiljonu'],
44
- ['sikstiljons', 'sikstiljoni', 'sikstiljonu'],
45
- ['septiljons', 'septiljoni', 'septiljonu'],
46
- ['oktiljons', 'oktiljoni', 'oktiljonu']
47
- ]
48
-
49
- // ============================================================================
50
- // Precomputed Lookup Tables (built once at module load)
51
- // ============================================================================
52
-
53
- /**
54
- * Builds segment word for 0-999 (masculine form).
55
- * Does NOT include special handling for segment=1 (omitOneBeforeScale).
56
- * That's handled at join time.
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 - Latvian has special forms
68
- if (hundreds > 0) {
69
- if (hundreds === 1 && tens === 0 && ones > 0) {
70
- // 101-109: use genitive form "simtu"
71
- parts.push(HUNDRED_GENITIVE)
72
- } else if (hundreds > 1) {
73
- // 200-999: use plural "simti"
74
- parts.push(ONES_MASC[hundreds])
75
- parts.push(HUNDRED_PLURAL)
76
- } else {
77
- // 100, 110-199: use singular "simts"
78
- parts.push(HUNDRED_SINGULAR)
79
- }
80
- }
81
-
82
- // Tens
83
- if (tens > 1) {
84
- parts.push(TENS[tens])
85
- }
86
-
87
- // Teens or ones
88
- if (tens === 1) {
89
- parts.push(TEENS[ones])
90
- } else if (ones > 0) {
91
- parts.push(ONES_MASC[ones])
92
- }
93
-
94
- return parts.join(' ')
95
- }
96
-
97
- /**
98
- * Builds segment word for 0-999 (feminine form - only differs in ones).
99
- */
100
- function buildSegmentFeminine (n) {
101
- if (n === 0) return ''
102
-
103
- const ones = n % 10
104
- const tens = Math.floor(n / 10) % 10
105
- const hundreds = Math.floor(n / 100)
106
-
107
- const parts = []
108
-
109
- // Hundreds - always masculine
110
- if (hundreds > 0) {
111
- if (hundreds === 1 && tens === 0 && ones > 0) {
112
- parts.push(HUNDRED_GENITIVE)
113
- } else if (hundreds > 1) {
114
- parts.push(ONES_MASC[hundreds])
115
- parts.push(HUNDRED_PLURAL)
116
- } else {
117
- parts.push(HUNDRED_SINGULAR)
118
- }
119
- }
120
-
121
- // Tens
122
- if (tens > 1) {
123
- parts.push(TENS[tens])
124
- }
125
-
126
- // Teens or ones - feminine for ones only
127
- if (tens === 1) {
128
- parts.push(TEENS[ones])
129
- } else if (ones > 0) {
130
- parts.push(ONES_FEM[ones])
131
- }
132
-
133
- return parts.join(' ')
134
- }
135
-
136
- // Precompute all 1000 segment words (0-999)
137
- const SEGMENTS_MASC = new Array(1000)
138
- const SEGMENTS_FEM = new Array(1000)
139
-
140
- for (let i = 0; i < 1000; i++) {
141
- SEGMENTS_MASC[i] = buildSegment(i)
142
- SEGMENTS_FEM[i] = buildSegmentFeminine(i)
143
- }
144
-
145
- // ============================================================================
146
- // Pluralization
147
- // ============================================================================
148
-
149
- /**
150
- * Latvian pluralization - simpler than Slavic.
151
- * Singular: ends in 1 (except 11)
152
- * Plural: everything else
153
- *
154
- * @param {number} n - The segment value
155
- * @param {string[]} forms - [singular, plural, genitive]
156
- * @returns {string} The appropriate form
157
- */
158
- function pluralize (n, forms) {
159
- if (n === 0) return forms[2]
160
-
161
- const lastDigit = n % 10
162
- const lastTwoDigits = n % 100
163
-
164
- if (lastDigit === 1 && lastTwoDigits !== 11) {
165
- return forms[0]
166
- }
167
-
168
- return forms[1]
169
- }
170
-
171
- // ============================================================================
172
- // Conversion Functions
173
- // ============================================================================
174
-
175
- /**
176
- * Converts a non-negative integer to Latvian words.
177
- *
178
- * @param {bigint} n - Non-negative integer to convert
179
- * @param {Object} options - Conversion options
180
- * @returns {string} Latvian words
181
- */
182
- function integerToWords (n, options = {}) {
183
- if (n === 0n) return ZERO
184
-
185
- // Fast path: numbers < 1000 (direct lookup)
186
- if (n < 1000n) {
187
- const segments = options.gender === 'feminine' ? SEGMENTS_FEM : SEGMENTS_MASC
188
- return segments[Number(n)]
189
- }
190
-
191
- // For numbers >= 1000, feminine only applies to final segment if < 1000
192
- // But we use masculine for all segments when n >= 1000
193
- return buildLargeNumberWords(n, options)
194
- }
195
-
196
- /**
197
- * Builds words for numbers >= 1000.
198
- *
199
- * @param {bigint} n - Number >= 1000
200
- * @param {Object} options - Conversion options
201
- * @returns {string} Latvian words
202
- */
203
- function buildLargeNumberWords (n, options) {
204
- const numStr = n.toString()
205
- const len = numStr.length
206
-
207
- // Build segments of 3 digits from right to left
208
- const segments = []
209
- const segmentSize = 3
210
-
211
- const remainderLen = len % segmentSize
212
- let pos = 0
213
- if (remainderLen > 0) {
214
- segments.push(Number(numStr.slice(0, remainderLen)))
215
- pos = remainderLen
216
- }
217
- while (pos < len) {
218
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
219
- pos += segmentSize
220
- }
221
-
222
- // Convert segments to words
223
- const parts = []
224
- let scaleIndex = segments.length - 1
225
-
226
- for (let i = 0; i < segments.length; i++) {
227
- const segment = segments[i]
228
-
229
- if (segment !== 0) {
230
- const segmentWord = SEGMENTS_MASC[segment]
231
-
232
- if (scaleIndex === 0) {
233
- // Units segment - use masculine (feminine doesn't apply when n >= 1000)
234
- parts.push(segmentWord)
235
- } else {
236
- // Segment with scale word
237
- const scaleForms = SCALE_FORMS[scaleIndex - 1]
238
- const scaleWord = pluralize(segment, scaleForms)
239
-
240
- // Latvian omits "one" before scale words
241
- if (segment === 1) {
242
- parts.push(scaleWord)
243
- } else {
244
- parts.push(segmentWord + ' ' + scaleWord)
245
- }
246
- }
247
- }
248
-
249
- scaleIndex--
250
- }
251
-
252
- return parts.join(' ')
253
- }
254
-
255
- /**
256
- * Converts decimal digits to Latvian words.
257
- *
258
- * @param {string} decimalPart - Decimal digits (without the point)
259
- * @param {Object} options - Conversion options
260
- * @returns {string} Latvian words for decimal part
261
- */
262
- function decimalPartToWords (decimalPart, options) {
263
- let result = ''
264
-
265
- // Handle leading zeros
266
- let i = 0
267
- while (i < decimalPart.length && decimalPart[i] === '0') {
268
- if (result) result += ' '
269
- result += ZERO
270
- i++
271
- }
272
-
273
- // Convert remainder as a single number
274
- const remainder = decimalPart.slice(i)
275
- if (remainder) {
276
- if (result) result += ' '
277
- result += integerToWords(BigInt(remainder), options)
278
- }
279
-
280
- return result
281
- }
282
-
283
- /**
284
- * Converts a numeric value to Latvian words.
285
- *
286
- * @param {number | string | bigint} value - The numeric value to convert
287
- * @param {Object} [options] - Conversion options
288
- * @param {string} [options.gender='masculine'] - Gender for numbers < 1000
289
- * @returns {string} The number in Latvian words
290
- * @throws {TypeError} If value is not a valid numeric type
291
- * @throws {Error} If value is not a valid number format
292
- *
293
- * @example
294
- * toWords(42) // 'četrdesmit divi'
295
- * toWords(1, { gender: 'feminine' }) // 'viena'
296
- * toWords(1000) // 'tūkstotis'
297
- */
298
- function toWords (value, options) {
299
- options = validateOptions(options)
300
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
301
-
302
- let result = ''
303
-
304
- if (isNegative) {
305
- result = NEGATIVE + ' '
306
- }
307
-
308
- result += integerToWords(integerPart, options)
309
-
310
- if (decimalPart) {
311
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
312
- }
313
-
314
- return result
315
- }
316
-
317
- // ============================================================================
318
- // Public API
319
- // ============================================================================
320
-
321
- export { toWords }
@@ -1,7 +0,0 @@
1
- /**
2
- * Converts a numeric value to Marathi words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Marathi words
6
- */
7
- export function toWords(value: number | string | bigint): string;