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,7 +1,7 @@
1
1
  /**
2
- * Thai language converter - Functional Implementation
2
+ * Thai (Thailand) language converter
3
3
  *
4
- * Self-contained converter with precomputed lookup tables.
4
+ * CLDR: th-TH | Thai as used in Thailand
5
5
  *
6
6
  * Key features:
7
7
  * - No word separators (continuous Thai script)
@@ -11,7 +11,9 @@
11
11
  * - Per-digit decimal reading
12
12
  */
13
13
 
14
- import { parseNumericValue } from '../utils/parse-numeric.js'
14
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
15
+ import { parseCurrencyValue } from './utils/parse-currency.js'
16
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
15
17
 
16
18
  // ============================================================================
17
19
  // Vocabulary
@@ -23,6 +25,20 @@ const ZERO = 'ศูนย์'
23
25
  const NEGATIVE = 'ลบ'
24
26
  const DECIMAL_SEP = 'จุด'
25
27
 
28
+ // ============================================================================
29
+ // Ordinal Vocabulary
30
+ // ============================================================================
31
+
32
+ const ORDINAL_PREFIX = 'ที่'
33
+
34
+ // ============================================================================
35
+ // Currency Vocabulary (Thai Baht)
36
+ // ============================================================================
37
+
38
+ const BAHT = 'บาท'
39
+ const SATANG = 'สตางค์'
40
+ const BAHT_ONLY = 'ถ้วน' // "exactly" suffix when no satang
41
+
26
42
  // ============================================================================
27
43
  // Conversion Functions
28
44
  // ============================================================================
@@ -136,8 +152,8 @@ function decimalPartToWords (decimalPart) {
136
152
  * @param {number | string | bigint} value - The numeric value to convert
137
153
  * @returns {string} The number in Thai words
138
154
  */
139
- function toWords (value) {
140
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
155
+ function toCardinal (value) {
156
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
141
157
 
142
158
  let result = ''
143
159
 
@@ -154,8 +170,85 @@ function toWords (value) {
154
170
  return result
155
171
  }
156
172
 
173
+ // ============================================================================
174
+ // ORDINAL: toOrdinal(value)
175
+ // ============================================================================
176
+
177
+ /**
178
+ * Converts a non-negative integer to Thai ordinal words.
179
+ *
180
+ * Thai ordinals use "ที่" prefix + cardinal number.
181
+ *
182
+ * @param {bigint} n - Positive integer to convert
183
+ * @returns {string} Thai ordinal words
184
+ */
185
+ function integerToOrdinal (n) {
186
+ return ORDINAL_PREFIX + integerToWords(n)
187
+ }
188
+
189
+ /**
190
+ * Converts a numeric value to Thai ordinal words.
191
+ *
192
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
193
+ * @returns {string} The number as ordinal words
194
+ * @throws {TypeError} If value is not a valid numeric type
195
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
196
+ *
197
+ * @example
198
+ * toOrdinal(1) // 'ที่หนึ่ง'
199
+ * toOrdinal(2) // 'ที่สอง'
200
+ * toOrdinal(10) // 'ที่สิบ'
201
+ */
202
+ function toOrdinal (value) {
203
+ const integerPart = parseOrdinalValue(value)
204
+ return integerToOrdinal(integerPart)
205
+ }
206
+
207
+ // ============================================================================
208
+ // CURRENCY: toCurrency(value)
209
+ // ============================================================================
210
+
211
+ /**
212
+ * Converts a numeric value to Thai currency words (Baht).
213
+ *
214
+ * Thai Baht uses satang as subunit (100 satang = 1 baht).
215
+ * When whole amounts, adds "ถ้วน" (exactly) suffix.
216
+ *
217
+ * @param {number | string | bigint} value - The currency amount to convert
218
+ * @returns {string} The amount in Thai currency words
219
+ * @throws {TypeError} If value is not a valid numeric type
220
+ * @throws {Error} If value is not a valid number format
221
+ *
222
+ * @example
223
+ * toCurrency(42) // 'สี่สิบสองบาทถ้วน'
224
+ * toCurrency(1.50) // 'หนึ่งบาทห้าสิบสตางค์'
225
+ * toCurrency(-5) // 'ลบห้าบาทถ้วน'
226
+ */
227
+ function toCurrency (value) {
228
+ const { isNegative, dollars: baht, cents: satang } = parseCurrencyValue(value)
229
+
230
+ let result = ''
231
+ if (isNegative) {
232
+ result = NEGATIVE
233
+ }
234
+
235
+ // Baht part - always show
236
+ result += integerToWords(baht)
237
+ result += BAHT
238
+
239
+ // Satang part or "exactly" suffix
240
+ if (satang > 0n) {
241
+ result += integerToWords(satang)
242
+ result += SATANG
243
+ } else {
244
+ result += BAHT_ONLY
245
+ }
246
+
247
+ return result
248
+ }
249
+
157
250
  // ============================================================================
158
251
  // Exports
159
252
  // ============================================================================
160
253
 
161
- export { toWords }
254
+ export { toCardinal, toOrdinal, toCurrency }
package/src/tr-TR.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Converts a numeric value to Turkish words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @param {Object} [options] - Conversion options
6
+ * @param {boolean} [options.dropSpaces=false] - Remove spaces for compound form
7
+ * @returns {string} The number in Turkish 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
+ * toCardinal(21) // 'yirmi bir'
13
+ * toCardinal(21, { dropSpaces: true }) // 'yirmibir'
14
+ * toCardinal(1000) // 'bin'
15
+ */
16
+ export function toCardinal(value: number | string | bigint, options?: {
17
+ dropSpaces?: boolean | undefined;
18
+ }): string;
19
+ /**
20
+ * Converts a numeric value to Turkish ordinal words.
21
+ *
22
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
23
+ * @returns {string} The number as ordinal words
24
+ * @throws {TypeError} If value is not a valid numeric type
25
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
26
+ *
27
+ * @example
28
+ * toOrdinal(1) // 'birinci'
29
+ * toOrdinal(2) // 'ikinci'
30
+ * toOrdinal(21) // 'yirmibirinci'
31
+ */
32
+ export function toOrdinal(value: number | string | bigint): string;
33
+ /**
34
+ * Converts a numeric value to Turkish currency words (Turkish Lira).
35
+ *
36
+ * Uses lira and kuruş (100 kuruş = 1 lira).
37
+ *
38
+ * @param {number | string | bigint} value - The currency amount to convert
39
+ * @returns {string} The amount in Turkish currency words
40
+ * @throws {TypeError} If value is not a valid numeric type
41
+ * @throws {Error} If value is not a valid number format
42
+ *
43
+ * @example
44
+ * toCurrency(42) // 'kırk iki lira'
45
+ * toCurrency(1.50) // 'bir lira elli kuruş'
46
+ * toCurrency(-5) // 'eksi beş lira'
47
+ */
48
+ export function toCurrency(value: number | string | bigint): string;
package/src/tr-TR.js ADDED
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Turkish (Turkey) language converter
3
+ *
4
+ * CLDR: tr-TR | Turkish as used in Turkey
5
+ *
6
+ * Key features:
7
+ * - Omits 'bir' (one) before hundreds and thousands
8
+ * - Optional dropSpaces for compound form
9
+ * - Short scale naming
10
+ */
11
+
12
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
13
+ import { parseCurrencyValue } from './utils/parse-currency.js'
14
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
15
+ import { validateOptions } from './utils/validate-options.js'
16
+
17
+ // ============================================================================
18
+ // Vocabulary (module-level constants)
19
+ // ============================================================================
20
+
21
+ const ONES = ['', 'bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', 'dokuz']
22
+
23
+ const TEENS = ['on', 'on bir', 'on iki', 'on üç', 'on dört', 'on beş', 'on altı', 'on yedi', 'on sekiz', 'on dokuz']
24
+ const TENS = ['', '', 'yirmi', 'otuz', 'kırk', 'elli', 'altmış', 'yetmiş', 'seksen', 'doksan']
25
+
26
+ const HUNDRED = 'yüz'
27
+ const THOUSAND = 'bin'
28
+
29
+ const ZERO = 'sıfır'
30
+ const NEGATIVE = 'eksi'
31
+ const DECIMAL_SEP = 'virgül'
32
+
33
+ // Short scale
34
+ const SCALES = ['milyon', 'milyar', 'trilyon', 'katrilyon', 'kentilyon']
35
+
36
+ // ============================================================================
37
+ // Ordinal Vocabulary
38
+ // ============================================================================
39
+
40
+ // Turkish ordinals use -(i/ı/u/ü)nci/ncı/ncu/ncü suffix with vowel harmony
41
+ // Special forms for 1-10
42
+ const ORDINAL_SPECIAL = {
43
+ 1: 'birinci',
44
+ 2: 'ikinci',
45
+ 3: 'üçüncü',
46
+ 4: 'dördüncü',
47
+ 5: 'beşinci',
48
+ 6: 'altıncı',
49
+ 7: 'yedinci',
50
+ 8: 'sekizinci',
51
+ 9: 'dokuzuncu',
52
+ 10: 'onuncu'
53
+ }
54
+
55
+ // ============================================================================
56
+ // Currency Vocabulary (Turkish Lira)
57
+ // ============================================================================
58
+
59
+ const LIRA = 'lira' // same singular and plural
60
+ const KURUS = 'kuruş' // subunit (100 kuruş = 1 lira)
61
+
62
+ // ============================================================================
63
+ // Segment Building
64
+ // ============================================================================
65
+
66
+ /**
67
+ * Builds segment word for 0-999.
68
+ * Omits "bir" before "yüz" (hundred).
69
+ */
70
+ function buildSegment (n, separator = ' ') {
71
+ if (n === 0) return ''
72
+
73
+ const ones = n % 10
74
+ const tens = Math.trunc(n / 10) % 10
75
+ const hundreds = Math.trunc(n / 100)
76
+
77
+ const parts = []
78
+
79
+ // Hundreds - omit "bir" before yüz
80
+ if (hundreds > 0) {
81
+ if (hundreds === 1) {
82
+ parts.push(HUNDRED)
83
+ } else {
84
+ parts.push(ONES[hundreds] + separator + HUNDRED)
85
+ }
86
+ }
87
+
88
+ // Tens and ones
89
+ const tensOnes = n % 100
90
+
91
+ if (tensOnes === 0) {
92
+ // Just hundreds
93
+ } else if (tensOnes < 10) {
94
+ parts.push(ONES[ones])
95
+ } else if (tensOnes < 20) {
96
+ parts.push(TEENS[ones].replace(' ', separator))
97
+ } else if (ones === 0) {
98
+ parts.push(TENS[tens])
99
+ } else {
100
+ parts.push(TENS[tens] + separator + ONES[ones])
101
+ }
102
+
103
+ return parts.join(separator)
104
+ }
105
+
106
+ // ============================================================================
107
+ // Conversion Functions
108
+ // ============================================================================
109
+
110
+ /**
111
+ * Converts a non-negative integer to Turkish words.
112
+ *
113
+ * @param {bigint} n - Non-negative integer to convert
114
+ * @param {Object} options - Conversion options
115
+ * @returns {string} Turkish words
116
+ */
117
+ function integerToWords (n, dropSpaces) {
118
+ if (n === 0n) return ZERO
119
+
120
+ const sep = dropSpaces ? '' : ' '
121
+
122
+ // Fast path: numbers < 1000
123
+ if (n < 1000n) {
124
+ return buildSegment(Number(n), sep)
125
+ }
126
+
127
+ // Fast path: numbers < 1,000,000 (thousands)
128
+ if (n < 1_000_000n) {
129
+ const thousands = Number(n / 1000n)
130
+ const remainder = Number(n % 1000n)
131
+
132
+ // Omit "bir" before bin (thousand)
133
+ let result
134
+ if (thousands === 1) {
135
+ result = THOUSAND
136
+ } else {
137
+ result = buildSegment(thousands, sep) + sep + THOUSAND
138
+ }
139
+
140
+ if (remainder > 0) {
141
+ result += sep + buildSegment(remainder, sep)
142
+ }
143
+
144
+ return result
145
+ }
146
+
147
+ // For numbers >= 1,000,000, use scale decomposition
148
+ return buildLargeNumberWords(n, dropSpaces)
149
+ }
150
+
151
+ /**
152
+ * Builds words for numbers >= 1,000,000.
153
+ *
154
+ * @param {bigint} n - Number >= 1,000,000
155
+ * @param {Object} options - Conversion options
156
+ * @returns {string} Turkish words
157
+ */
158
+ function buildLargeNumberWords (n, dropSpaces) {
159
+ const sep = dropSpaces ? '' : ' '
160
+
161
+ const numStr = n.toString()
162
+ const len = numStr.length
163
+
164
+ // Build segments of 3 digits from right to left
165
+ const segments = []
166
+ const segmentSize = 3
167
+
168
+ const remainderLen = len % segmentSize
169
+ let pos = 0
170
+ if (remainderLen > 0) {
171
+ segments.push(Number(numStr.slice(0, remainderLen)))
172
+ pos = remainderLen
173
+ }
174
+ while (pos < len) {
175
+ segments.push(Number(numStr.slice(pos, pos + segmentSize)))
176
+ pos += segmentSize
177
+ }
178
+
179
+ // Convert segments to words
180
+ const parts = []
181
+ let scaleIndex = segments.length - 1
182
+
183
+ for (let i = 0; i < segments.length; i++) {
184
+ const segment = segments[i]
185
+
186
+ if (segment !== 0) {
187
+ const segmentWord = buildSegment(segment, sep)
188
+
189
+ if (scaleIndex === 0) {
190
+ // Units segment
191
+ parts.push(segmentWord)
192
+ } else if (scaleIndex === 1) {
193
+ // Thousands - omit "bir" before bin
194
+ if (segment === 1) {
195
+ parts.push(THOUSAND)
196
+ } else {
197
+ parts.push(segmentWord + sep + THOUSAND)
198
+ }
199
+ } else {
200
+ // Millions+ - "bir" is kept before scale words
201
+ const scaleWord = SCALES[scaleIndex - 2]
202
+ parts.push(segmentWord + sep + scaleWord)
203
+ }
204
+ }
205
+
206
+ scaleIndex--
207
+ }
208
+
209
+ return parts.join(sep)
210
+ }
211
+
212
+ /**
213
+ * Converts decimal digits to Turkish words.
214
+ *
215
+ * @param {string} decimalPart - Decimal digits (without the point)
216
+ * @param {Object} options - Conversion options
217
+ * @returns {string} Turkish words for decimal part
218
+ */
219
+ function decimalPartToWords (decimalPart, dropSpaces) {
220
+ const sep = dropSpaces ? '' : ' '
221
+ let result = ''
222
+
223
+ // Handle leading zeros
224
+ let i = 0
225
+ while (i < decimalPart.length && decimalPart[i] === '0') {
226
+ if (result) result += sep
227
+ result += ZERO
228
+ i++
229
+ }
230
+
231
+ // Convert remainder as a single number
232
+ const remainder = decimalPart.slice(i)
233
+ if (remainder) {
234
+ if (result) result += sep
235
+ result += integerToWords(BigInt(remainder), dropSpaces)
236
+ }
237
+
238
+ return result
239
+ }
240
+
241
+ /**
242
+ * Converts a numeric value to Turkish words.
243
+ *
244
+ * @param {number | string | bigint} value - The numeric value to convert
245
+ * @param {Object} [options] - Conversion options
246
+ * @param {boolean} [options.dropSpaces=false] - Remove spaces for compound form
247
+ * @returns {string} The number in Turkish words
248
+ * @throws {TypeError} If value is not a valid numeric type
249
+ * @throws {Error} If value is not a valid number format
250
+ *
251
+ * @example
252
+ * toCardinal(21) // 'yirmi bir'
253
+ * toCardinal(21, { dropSpaces: true }) // 'yirmibir'
254
+ * toCardinal(1000) // 'bin'
255
+ */
256
+ function toCardinal (value, options) {
257
+ options = validateOptions(options)
258
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
259
+
260
+ // Apply option defaults
261
+ const { dropSpaces = false } = options
262
+
263
+ const sep = dropSpaces ? '' : ' '
264
+ let result = ''
265
+
266
+ if (isNegative) {
267
+ result = NEGATIVE + sep
268
+ }
269
+
270
+ result += integerToWords(integerPart, dropSpaces)
271
+
272
+ if (decimalPart) {
273
+ result += sep + DECIMAL_SEP + sep + decimalPartToWords(decimalPart, dropSpaces)
274
+ }
275
+
276
+ return result
277
+ }
278
+
279
+ // ============================================================================
280
+ // ORDINAL: toOrdinal(value)
281
+ // ============================================================================
282
+
283
+ /**
284
+ * Determines the ordinal suffix based on Turkish vowel harmony.
285
+ * @param {string} word - The cardinal word
286
+ * @returns {string} The appropriate suffix
287
+ */
288
+ function getOrdinalSuffix (word) {
289
+ // Turkish vowel harmony: back vowels (a,ı,o,u) vs front vowels (e,i,ö,ü)
290
+ // Find last vowel to determine suffix
291
+ const backVowels = 'aıou'
292
+ const frontVowels = 'eiöü'
293
+
294
+ // Scan from end for last vowel
295
+ for (let i = word.length - 1; i >= 0; i--) {
296
+ const char = word[i]
297
+ if (backVowels.includes(char)) {
298
+ // Back vowels: -ıncı (after ı,a) or -uncu (after o,u)
299
+ if ('ou'.includes(char)) return 'uncu'
300
+ return 'ıncı'
301
+ }
302
+ if (frontVowels.includes(char)) {
303
+ // Front vowels: -inci (after e,i) or -üncü (after ö,ü)
304
+ if ('öü'.includes(char)) return 'üncü'
305
+ return 'inci'
306
+ }
307
+ }
308
+ return 'inci' // default
309
+ }
310
+
311
+ /**
312
+ * Converts a non-negative integer to Turkish ordinal words.
313
+ *
314
+ * Turkish ordinals: birinci (1st), ikinci (2nd), üçüncü (3rd), etc.
315
+ * Uses vowel harmony for suffix selection.
316
+ *
317
+ * @param {bigint} n - Positive integer to convert
318
+ * @returns {string} Turkish ordinal words
319
+ */
320
+ function integerToOrdinal (n) {
321
+ // Special forms for 1-10
322
+ if (n >= 1n && n <= 10n) {
323
+ return ORDINAL_SPECIAL[Number(n)]
324
+ }
325
+
326
+ // For numbers > 10, add appropriate suffix to cardinal (dropSpaces=true)
327
+ const cardinal = integerToWords(n, true)
328
+ const suffix = getOrdinalSuffix(cardinal)
329
+ return cardinal + suffix
330
+ }
331
+
332
+ /**
333
+ * Converts a numeric value to Turkish ordinal words.
334
+ *
335
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
336
+ * @returns {string} The number as ordinal words
337
+ * @throws {TypeError} If value is not a valid numeric type
338
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
339
+ *
340
+ * @example
341
+ * toOrdinal(1) // 'birinci'
342
+ * toOrdinal(2) // 'ikinci'
343
+ * toOrdinal(21) // 'yirmibirinci'
344
+ */
345
+ function toOrdinal (value) {
346
+ const integerPart = parseOrdinalValue(value)
347
+ return integerToOrdinal(integerPart)
348
+ }
349
+
350
+ // ============================================================================
351
+ // CURRENCY: toCurrency(value)
352
+ // ============================================================================
353
+
354
+ /**
355
+ * Converts a numeric value to Turkish currency words (Turkish Lira).
356
+ *
357
+ * Uses lira and kuruş (100 kuruş = 1 lira).
358
+ *
359
+ * @param {number | string | bigint} value - The currency amount to convert
360
+ * @returns {string} The amount in Turkish currency words
361
+ * @throws {TypeError} If value is not a valid numeric type
362
+ * @throws {Error} If value is not a valid number format
363
+ *
364
+ * @example
365
+ * toCurrency(42) // 'kırk iki lira'
366
+ * toCurrency(1.50) // 'bir lira elli kuruş'
367
+ * toCurrency(-5) // 'eksi beş lira'
368
+ */
369
+ function toCurrency (value) {
370
+ const { isNegative, dollars: lira, cents: kurus } = parseCurrencyValue(value)
371
+
372
+ let result = ''
373
+ if (isNegative) {
374
+ result = NEGATIVE + ' '
375
+ }
376
+
377
+ // Lira part
378
+ if (lira > 0n || kurus === 0n) {
379
+ result += integerToWords(lira, false) + ' ' + LIRA
380
+ }
381
+
382
+ // Kuruş part
383
+ if (kurus > 0n) {
384
+ if (lira > 0n) {
385
+ result += ' '
386
+ }
387
+ result += integerToWords(kurus, false) + ' ' + KURUS
388
+ }
389
+
390
+ return result
391
+ }
392
+
393
+ // ============================================================================
394
+ // Public API
395
+ // ============================================================================
396
+
397
+ export { toCardinal, toOrdinal, toCurrency }
package/src/uk-UA.d.ts ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Converts a numeric value to Ukrainian 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 Ukrainian words
8
+ */
9
+ export function toCardinal(value: number | string | bigint, options?: {
10
+ gender?: "masculine" | "feminine" | undefined;
11
+ }): string;
12
+ /**
13
+ * Converts a numeric value to Ukrainian ordinal words (masculine nominative).
14
+ *
15
+ * @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
16
+ * @returns {string} The number as ordinal words
17
+ * @throws {TypeError} If value is not a valid numeric type
18
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
19
+ *
20
+ * @example
21
+ * toOrdinal(1) // 'перший'
22
+ * toOrdinal(2) // 'другий'
23
+ * toOrdinal(21) // 'двадцять перший'
24
+ * toOrdinal(100) // 'сотий'
25
+ * toOrdinal(1000) // 'тисячний'
26
+ */
27
+ export function toOrdinal(value: number | string | bigint): string;
28
+ /**
29
+ * Converts a numeric value to Ukrainian currency words (Hryvnia).
30
+ *
31
+ * @param {number | string | bigint} value - The currency amount to convert
32
+ * @returns {string} The amount in Ukrainian currency words
33
+ * @throws {TypeError} If value is not a valid numeric type
34
+ * @throws {Error} If value is not a valid number format
35
+ *
36
+ * @example
37
+ * toCurrency(42) // 'сорок двi гривнi'
38
+ * toCurrency(1) // 'одна гривня'
39
+ * toCurrency(1.50) // 'одна гривня п\'ятдесят копiйок'
40
+ * toCurrency(-5) // 'мiнус п\'ять гривень'
41
+ */
42
+ export function toCurrency(value: number | string | bigint): string;