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,224 +0,0 @@
1
- /**
2
- * Croatian 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 (dvjesto, tristo, etc.)
10
- * - Long scale naming with -ard forms
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 = ['', 'jedan', 'dva', 'tri', 'četiri', 'pet', 'šest', 'sedam', 'osam', 'devet']
21
- const ONES_FEM = ['', 'jedna', 'dvije', 'tri', 'četiri', 'pet', 'šest', 'sedam', 'osam', 'devet']
22
-
23
- const TEENS = ['deset', 'jedanaest', 'dvanaest', 'trinaest', 'četrnaest', 'petnaest', 'šesnaest', 'sedamnaest', 'osamnaest', 'devetnaest']
24
- const TENS = ['', '', 'dvadeset', 'trideset', 'četrdeset', 'pedeset', 'šezdeset', 'sedamdeset', 'osamdeset', 'devedeset']
25
-
26
- // Croatian has irregular hundreds
27
- const HUNDREDS = ['', 'sto', 'dvjesto', 'tristo', 'četiristo', 'petsto', 'šesto', 'sedamsto', 'osamsto', 'devetsto']
28
-
29
- const ZERO = 'nula'
30
- const NEGATIVE = 'minus'
31
- const DECIMAL_SEP = 'zarez'
32
-
33
- // Scale words: [singular, few, many]
34
- // Thousands (index 0) are feminine, rest are masculine
35
- const SCALE_FORMS = [
36
- ['tisuća', 'tisuće', 'tisuća'],
37
- ['milijun', 'milijuna', 'milijuna'],
38
- ['milijarda', 'milijarde', 'milijarda'],
39
- ['bilijun', 'bilijuna', 'bilijuna'],
40
- ['bilijarda', 'bilijarde', 'bilijarda'],
41
- ['trilijun', 'trilijuna', 'trilijuna'],
42
- ['trilijarda', 'trilijarde', 'trilijarda'],
43
- ['kvadrilijun', 'kvadrilijuna', 'kvadrilijuna'],
44
- ['kvadrilijarda', 'kvadrilijarde', 'kvadrilijarda']
45
- ]
46
-
47
- // ============================================================================
48
- // Segment Building
49
- // ============================================================================
50
-
51
- function pluralize (n, forms) {
52
- const num = typeof n === 'bigint' ? Number(n) : n
53
- const lastDigit = num % 10
54
- const lastTwoDigits = num % 100
55
-
56
- if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
57
- return forms[2]
58
- }
59
-
60
- if (lastDigit === 1) return forms[0]
61
- if (lastDigit >= 2 && lastDigit <= 4) return forms[1]
62
- return forms[2]
63
- }
64
-
65
- function buildSegmentMasc (n) {
66
- if (n === 0) return ''
67
-
68
- const onesDigit = n % 10
69
- const tensDigit = Math.floor(n / 10) % 10
70
- const hundredsDigit = Math.floor(n / 100)
71
-
72
- const parts = []
73
-
74
- if (hundredsDigit > 0) {
75
- parts.push(HUNDREDS[hundredsDigit])
76
- }
77
-
78
- if (tensDigit > 1) {
79
- parts.push(TENS[tensDigit])
80
- }
81
-
82
- if (tensDigit === 1) {
83
- parts.push(TEENS[onesDigit])
84
- } else if (onesDigit > 0) {
85
- parts.push(ONES_MASC[onesDigit])
86
- }
87
-
88
- return parts.join(' ')
89
- }
90
-
91
- function buildSegmentFem (n) {
92
- if (n === 0) return ''
93
-
94
- const onesDigit = n % 10
95
- const tensDigit = Math.floor(n / 10) % 10
96
- const hundredsDigit = Math.floor(n / 100)
97
-
98
- const parts = []
99
-
100
- if (hundredsDigit > 0) {
101
- parts.push(HUNDREDS[hundredsDigit])
102
- }
103
-
104
- if (tensDigit > 1) {
105
- parts.push(TENS[tensDigit])
106
- }
107
-
108
- if (tensDigit === 1) {
109
- parts.push(TEENS[onesDigit])
110
- } else if (onesDigit > 0) {
111
- parts.push(ONES_FEM[onesDigit])
112
- }
113
-
114
- return parts.join(' ')
115
- }
116
-
117
- // ============================================================================
118
- // Conversion Functions
119
- // ============================================================================
120
-
121
- function integerToWords (n, options = {}) {
122
- if (n === 0n) return ZERO
123
-
124
- if (n < 1000n) {
125
- return options.gender === 'feminine' ? buildSegmentFem(Number(n)) : buildSegmentMasc(Number(n))
126
- }
127
-
128
- return buildLargeNumberWords(n, options)
129
- }
130
-
131
- function buildLargeNumberWords (n, options) {
132
- const numStr = n.toString()
133
- const len = numStr.length
134
-
135
- const segments = []
136
- const segmentSize = 3
137
-
138
- const remainderLen = len % segmentSize
139
- let pos = 0
140
- if (remainderLen > 0) {
141
- segments.push(Number(numStr.slice(0, remainderLen)))
142
- pos = remainderLen
143
- }
144
- while (pos < len) {
145
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
146
- pos += segmentSize
147
- }
148
-
149
- const parts = []
150
- let scaleIndex = segments.length - 1
151
-
152
- for (let i = 0; i < segments.length; i++) {
153
- const segment = segments[i]
154
-
155
- if (segment !== 0) {
156
- if (scaleIndex === 0) {
157
- parts.push(options.gender === 'feminine' ? buildSegmentFem(segment) : buildSegmentMasc(segment))
158
- } else {
159
- const scaleForms = SCALE_FORMS[scaleIndex - 1]
160
- const scaleWord = pluralize(segment, scaleForms)
161
- // Thousands (scaleIndex=1) are feminine, others masculine
162
- const isFeminine = scaleIndex === 1
163
- const segmentWord = isFeminine ? buildSegmentFem(segment) : buildSegmentMasc(segment)
164
- parts.push(segmentWord + ' ' + scaleWord)
165
- }
166
- }
167
-
168
- scaleIndex--
169
- }
170
-
171
- return parts.join(' ')
172
- }
173
-
174
- function decimalPartToWords (decimalPart, options) {
175
- let result = ''
176
- let i = 0
177
-
178
- while (i < decimalPart.length && decimalPart[i] === '0') {
179
- if (result) result += ' '
180
- result += ZERO
181
- i++
182
- }
183
-
184
- const remainder = decimalPart.slice(i)
185
- if (remainder) {
186
- if (result) result += ' '
187
- result += integerToWords(BigInt(remainder), options)
188
- }
189
-
190
- return result
191
- }
192
-
193
- /**
194
- * Converts a numeric value to Croatian words.
195
- *
196
- * @param {number | string | bigint} value - The numeric value to convert
197
- * @param {Object} [options] - Optional configuration
198
- * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
199
- * @returns {string} The number in Croatian words
200
- */
201
- function toWords (value, options) {
202
- options = validateOptions(options)
203
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
204
-
205
- let result = ''
206
-
207
- if (isNegative) {
208
- result = NEGATIVE + ' '
209
- }
210
-
211
- result += integerToWords(integerPart, options)
212
-
213
- if (decimalPart) {
214
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
215
- }
216
-
217
- return result
218
- }
219
-
220
- // ============================================================================
221
- // Exports
222
- // ============================================================================
223
-
224
- export { toWords }
@@ -1,7 +0,0 @@
1
- /**
2
- * Converts a numeric value to Hungarian words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Hungarian words
6
- */
7
- export function toWords(value: number | string | bigint): string;
@@ -1,7 +0,0 @@
1
- /**
2
- * Converts a numeric value to Indonesian words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Indonesian words
6
- */
7
- export function toWords(value: number | string | bigint): string;
@@ -1,19 +0,0 @@
1
- /**
2
- * Converts a numeric value to Italian 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 Italian 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(28) // 'ventotto'
14
- * toWords(23) // 'ventitré'
15
- * toWords(1000) // 'mille'
16
- * toWords(2000) // 'duemila'
17
- * toWords(1000000) // 'un milione'
18
- */
19
- export function toWords(value: number | string | bigint): string;
@@ -1,17 +0,0 @@
1
- /**
2
- * Converts a numeric value to Japanese 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 Japanese kanji 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(42) // '四十二'
14
- * toWords(10000) // '一万'
15
- * toWords(100000000) // '一億'
16
- */
17
- export function toWords(value: number | string | bigint): string;
@@ -1,17 +0,0 @@
1
- /**
2
- * Converts a numeric value to Georgian 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 Georgian 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) // 'ოცდაერთი'
14
- * toWords(100) // 'ასი'
15
- * toWords(1000) // 'ათასი'
16
- */
17
- export function toWords(value: number | string | bigint): string;
@@ -1,7 +0,0 @@
1
- /**
2
- * Converts a numeric value to Kannada words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Kannada words
6
- */
7
- export function toWords(value: number | string | bigint): string;
@@ -1,14 +0,0 @@
1
- /**
2
- * Converts a numeric value to Korean words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Korean words
6
- * @throws {TypeError} If value is not a valid numeric type
7
- * @throws {Error} If value is not a valid number format
8
- *
9
- * @example
10
- * toWords(21) // '이십일'
11
- * toWords(10000) // '만'
12
- * toWords(1000000) // '백만'
13
- */
14
- export function toWords(value: number | string | bigint): string;
@@ -1,18 +0,0 @@
1
- /**
2
- * Converts a numeric value to Lithuanian 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 Lithuanian 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) // 'keturiasdešimt du'
13
- * toWords(1, { gender: 'feminine' }) // 'viena'
14
- * toWords(1000000) // 'vienas milijonas'
15
- */
16
- export function toWords(value: number | string | bigint, options?: {
17
- gender?: string | undefined;
18
- }): string;
@@ -1,301 +0,0 @@
1
- /**
2
- * Lithuanian 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 (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
- // Segment Building
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
- // ============================================================================
118
- // Pluralization
119
- // ============================================================================
120
-
121
- /**
122
- * Lithuanian pluralization rules.
123
- * - Singular: ends in 1 (except 11)
124
- * - Plural: ends in 2-9 (except 12-19)
125
- * - Genitive: 0, 10-19, or ends in 0
126
- *
127
- * @param {number} n - The segment value
128
- * @param {string[]} forms - [singular, plural, genitive]
129
- * @returns {string} The appropriate form
130
- */
131
- function pluralize (n, forms) {
132
- if (n === 0) return forms[2]
133
-
134
- const lastDigit = n % 10
135
- const lastTwoDigits = n % 100
136
-
137
- // 10-19 always use genitive
138
- if (lastTwoDigits >= 10 && lastTwoDigits <= 19) {
139
- return forms[2]
140
- }
141
-
142
- // Ends in 0 → genitive
143
- if (lastDigit === 0) {
144
- return forms[2]
145
- }
146
-
147
- // Ends in 1 → singular
148
- if (lastDigit === 1) {
149
- return forms[0]
150
- }
151
-
152
- // Ends in 2-9 → plural
153
- return forms[1]
154
- }
155
-
156
- // ============================================================================
157
- // Conversion Functions
158
- // ============================================================================
159
-
160
- /**
161
- * Converts a non-negative integer to Lithuanian words.
162
- *
163
- * @param {bigint} n - Non-negative integer to convert
164
- * @param {Object} options - Conversion options
165
- * @returns {string} Lithuanian words
166
- */
167
- function integerToWords (n, options = {}) {
168
- if (n === 0n) return ZERO
169
-
170
- // Fast path: numbers < 1000
171
- if (n < 1000n) {
172
- const num = Number(n)
173
- return options.gender === 'feminine' ? buildSegmentFeminine(num) : buildSegment(num)
174
- }
175
-
176
- // For numbers >= 1000, feminine only applies to final segment if < 1000
177
- // But the fixture shows feminine NOT applying for n >= 1000
178
- // So we use masculine for all segments when n >= 1000
179
- return buildLargeNumberWords(n, options)
180
- }
181
-
182
- /**
183
- * Builds words for numbers >= 1000.
184
- *
185
- * @param {bigint} n - Number >= 1000
186
- * @param {Object} options - Conversion options
187
- * @returns {string} Lithuanian words
188
- */
189
- function buildLargeNumberWords (n, options) {
190
- const numStr = n.toString()
191
- const len = numStr.length
192
-
193
- // Build segments of 3 digits from right to left
194
- const segments = []
195
- const segmentSize = 3
196
-
197
- const remainderLen = len % segmentSize
198
- let pos = 0
199
- if (remainderLen > 0) {
200
- segments.push(Number(numStr.slice(0, remainderLen)))
201
- pos = remainderLen
202
- }
203
- while (pos < len) {
204
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
205
- pos += segmentSize
206
- }
207
-
208
- // Convert segments to words
209
- const parts = []
210
- let scaleIndex = segments.length - 1
211
-
212
- for (let i = 0; i < segments.length; i++) {
213
- const segment = segments[i]
214
-
215
- if (segment !== 0) {
216
- const segmentWord = buildSegment(segment)
217
-
218
- if (scaleIndex === 0) {
219
- // Units segment - use masculine (feminine doesn't apply when n >= 1000)
220
- parts.push(segmentWord)
221
- } else {
222
- // Segment with scale word
223
- const scaleForms = SCALE_FORMS[scaleIndex - 1]
224
- const scaleWord = pluralize(segment, scaleForms)
225
- parts.push(segmentWord + ' ' + scaleWord)
226
- }
227
- }
228
-
229
- scaleIndex--
230
- }
231
-
232
- return parts.join(' ')
233
- }
234
-
235
- /**
236
- * Converts decimal digits to Lithuanian words.
237
- *
238
- * @param {string} decimalPart - Decimal digits (without the point)
239
- * @param {Object} options - Conversion options
240
- * @returns {string} Lithuanian words for decimal part
241
- */
242
- function decimalPartToWords (decimalPart, options) {
243
- let result = ''
244
-
245
- // Handle leading zeros
246
- let i = 0
247
- while (i < decimalPart.length && decimalPart[i] === '0') {
248
- if (result) result += ' '
249
- result += ZERO
250
- i++
251
- }
252
-
253
- // Convert remainder as a single number
254
- const remainder = decimalPart.slice(i)
255
- if (remainder) {
256
- if (result) result += ' '
257
- result += integerToWords(BigInt(remainder), options)
258
- }
259
-
260
- return result
261
- }
262
-
263
- /**
264
- * Converts a numeric value to Lithuanian words.
265
- *
266
- * @param {number | string | bigint} value - The numeric value to convert
267
- * @param {Object} [options] - Conversion options
268
- * @param {string} [options.gender='masculine'] - Gender for numbers < 1000
269
- * @returns {string} The number in Lithuanian words
270
- * @throws {TypeError} If value is not a valid numeric type
271
- * @throws {Error} If value is not a valid number format
272
- *
273
- * @example
274
- * toWords(42) // 'keturiasdešimt du'
275
- * toWords(1, { gender: 'feminine' }) // 'viena'
276
- * toWords(1000000) // 'vienas milijonas'
277
- */
278
- function toWords (value, options) {
279
- options = validateOptions(options)
280
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
281
-
282
- let result = ''
283
-
284
- if (isNegative) {
285
- result = NEGATIVE + ' '
286
- }
287
-
288
- result += integerToWords(integerPart, options)
289
-
290
- if (decimalPart) {
291
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
292
- }
293
-
294
- return result
295
- }
296
-
297
- // ============================================================================
298
- // Public API
299
- // ============================================================================
300
-
301
- 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;