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,18 +1,21 @@
1
1
  /**
2
- * Tamil language converter - Functional Implementation
2
+ * Tamil (India) language converter
3
3
  *
4
- * Self-contained converter for South Asian numbering.
4
+ * CLDR: ta-IN | Tamil as used in India
5
5
  *
6
6
  * Key features:
7
7
  * - Indian numbering system (ஆயிரம், லட்சம், கோடி)
8
8
  * - Tamil script
9
9
  * - 3-2-2 grouping pattern
10
10
  * - Complete word forms for 0-99
11
- * - Special hundred word transformations
11
+ * - Special hundred word transformations (connected vs standalone)
12
12
  * - Per-digit decimal reading
13
+ * - BigInt modulo for efficient segment extraction
13
14
  */
14
15
 
15
- import { parseNumericValue } from '../utils/parse-numeric.js'
16
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
17
+ import { parseCurrencyValue } from './utils/parse-currency.js'
18
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
16
19
 
17
20
  // ============================================================================
18
21
  // Vocabulary
@@ -22,6 +25,26 @@ const ZERO = 'பூஜ்ஜியம்'
22
25
  const NEGATIVE = 'மைனஸ்'
23
26
  const DECIMAL_SEP = 'புள்ளி'
24
27
 
28
+ // ============================================================================
29
+ // Ordinal Vocabulary
30
+ // ============================================================================
31
+
32
+ // Ordinal suffix
33
+ const ORDINAL_SUFFIX = 'ஆவது'
34
+
35
+ // Special ordinals for first few numbers
36
+ const ORDINAL_SPECIAL = ['', 'முதல்', 'இரண்டாவது', 'மூன்றாவது', 'நான்காவது', 'ஐந்தாவது', 'ஆறாவது']
37
+
38
+ // ============================================================================
39
+ // Currency Vocabulary (Indian Rupee)
40
+ // ============================================================================
41
+
42
+ // Rupee (singular/plural same in Tamil)
43
+ const RUPEE = 'ரூபாய்'
44
+
45
+ // Paisa (singular/plural same in Tamil)
46
+ const PAISA = 'பைசா'
47
+
25
48
  const BELOW_HUNDRED = [
26
49
  'பூஜ்ஜியம்', 'ஒன்று', 'இரண்டு', 'மூன்று', 'நான்கு', 'ஐந்து', 'ஆறு', 'ஏழு', 'எட்டு', 'ஒன்பது',
27
50
  'பத்து', 'பதினொன்று', 'பன்னிரண்டு', 'பதிமூன்று', 'பதினான்கு', 'பதினைந்து', 'பதினாறு', 'பதினேழு', 'பதினெட்டு', 'பத்தொன்பது',
@@ -48,35 +71,16 @@ const ONES = ['ஒன்று', 'இரண்டு', 'மூன்று', '
48
71
  const SCALE_WORDS = ['', 'ஆயிரம்', 'லட்சம்', 'கோடி', 'அரபு', 'கராபு', 'நீல்', 'பத்ம', 'சங்கு']
49
72
 
50
73
  // ============================================================================
51
- // Segment Splitting (inlined for performance)
52
- // ============================================================================
53
-
54
- function groupByThreeThenTwos (n) {
55
- const numStr = n.toString()
56
-
57
- if (numStr.length <= 3) {
58
- return [Number(numStr)]
59
- }
60
-
61
- const segments = []
62
- const last3 = numStr.slice(-3)
63
- segments.unshift(Number(last3))
64
-
65
- let remaining = numStr.slice(0, -3)
66
- while (remaining.length > 0) {
67
- const segment = remaining.slice(-2)
68
- segments.unshift(Number(segment))
69
- remaining = remaining.slice(0, -2)
70
- }
71
-
72
- return segments
73
- }
74
-
75
- // ============================================================================
76
- // Conversion Functions
74
+ // Segment Building
77
75
  // ============================================================================
78
76
 
79
- function convertBelowThousand (n) {
77
+ /**
78
+ * Builds words for a 0-999 segment.
79
+ *
80
+ * @param {number} n - Number 0-999
81
+ * @returns {string} Tamil words for the segment
82
+ */
83
+ function buildSegment (n) {
80
84
  if (n === 0) return ''
81
85
  if (n < 100) return BELOW_HUNDRED[n]
82
86
 
@@ -87,30 +91,61 @@ function convertBelowThousand (n) {
87
91
  return HUNDREDS[hundreds]
88
92
  }
89
93
 
90
- // Use precomputed connected form
94
+ // Use connected form when followed by remainder
91
95
  return HUNDREDS_CONNECTED[hundreds] + ' ' + BELOW_HUNDRED[remainder]
92
96
  }
93
97
 
98
+ // ============================================================================
99
+ // Conversion Functions
100
+ // ============================================================================
101
+
102
+ /**
103
+ * Converts a non-negative integer to Tamil words.
104
+ *
105
+ * Uses BigInt modulo for segment extraction (faster than string slicing).
106
+ * South Asian 3-2-2 grouping: first 3 digits, then groups of 2.
107
+ *
108
+ * @param {bigint} n - Non-negative integer to convert
109
+ * @returns {string} Tamil words
110
+ */
94
111
  function integerToWords (n) {
95
112
  if (n === 0n) return ZERO
96
113
 
97
- const groups = groupByThreeThenTwos(n)
98
- const groupCount = groups.length
99
- const words = []
114
+ // Fast path: numbers < 1000
115
+ if (n < 1000n) {
116
+ return buildSegment(Number(n))
117
+ }
118
+
119
+ // Extract segments using BigInt modulo
120
+ const segments = []
121
+ segments.push(Number(n % 1000n))
122
+ let temp = n / 1000n
123
+
124
+ while (temp > 0n) {
125
+ segments.push(Number(temp % 100n))
126
+ temp = temp / 100n
127
+ }
100
128
 
101
- for (let i = 0; i < groupCount; i++) {
102
- const groupValue = groups[i]
103
- if (groupValue === 0) continue
129
+ // Build result string (process from most-significant to least)
130
+ const words = []
131
+ for (let i = segments.length - 1; i >= 0; i--) {
132
+ const segment = segments[i]
133
+ if (segment === 0) continue
134
+
135
+ if (i === 0) {
136
+ words.push(buildSegment(segment))
137
+ } else {
138
+ // Use 'ஒரு' for 1 at scale positions
139
+ const groupWords = (segment === 1) ? 'ஒரு' : BELOW_HUNDRED[segment]
140
+ words.push(groupWords)
141
+ }
104
142
 
105
- const scaleIndex = groupCount - i - 1
106
- const groupWords = (groupValue === 1 && scaleIndex > 0) ? 'ஒரு' : convertBelowThousand(groupValue)
107
- words.push(groupWords)
108
- if (scaleIndex > 0 && SCALE_WORDS[scaleIndex]) {
109
- words.push(SCALE_WORDS[scaleIndex])
143
+ if (i > 0 && SCALE_WORDS[i]) {
144
+ words.push(SCALE_WORDS[i])
110
145
  }
111
146
  }
112
147
 
113
- return words.join(' ').trim()
148
+ return words.join(' ')
114
149
  }
115
150
 
116
151
  function decimalPartToWords (decimalPart) {
@@ -129,8 +164,8 @@ function decimalPartToWords (decimalPart) {
129
164
  * @param {number | string | bigint} value - The numeric value to convert
130
165
  * @returns {string} The number in Tamil words
131
166
  */
132
- function toWords (value) {
133
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
167
+ function toCardinal (value) {
168
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
134
169
 
135
170
  let result = ''
136
171
 
@@ -147,8 +182,89 @@ function toWords (value) {
147
182
  return result
148
183
  }
149
184
 
185
+ // ============================================================================
186
+ // ORDINAL: toOrdinal(value)
187
+ // ============================================================================
188
+
189
+ /**
190
+ * Converts a positive integer to Tamil ordinal words.
191
+ *
192
+ * Tamil ordinals: First has special form, 2-6 have special suffixes, then -ஆவது suffix.
193
+ *
194
+ * @param {bigint} n - Positive integer to convert
195
+ * @returns {string} Tamil ordinal words
196
+ */
197
+ function integerToOrdinal (n) {
198
+ // Special ordinals for 1-6
199
+ if (n >= 1n && n <= 6n) {
200
+ return ORDINAL_SPECIAL[Number(n)]
201
+ }
202
+
203
+ // For 7 and above, add suffix to cardinal
204
+ const cardinal = integerToWords(n)
205
+ return cardinal + ORDINAL_SUFFIX
206
+ }
207
+
208
+ /**
209
+ * Converts a numeric value to Tamil ordinal words.
210
+ *
211
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
212
+ * @returns {string} The number as ordinal words
213
+ * @throws {TypeError} If value is not a valid numeric type
214
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
215
+ *
216
+ * @example
217
+ * toOrdinal(1) // 'முதல்'
218
+ * toOrdinal(2) // 'இரண்டாவது'
219
+ * toOrdinal(10) // 'பத்துஆவது'
220
+ */
221
+ function toOrdinal (value) {
222
+ const integerPart = parseOrdinalValue(value)
223
+ return integerToOrdinal(integerPart)
224
+ }
225
+
226
+ // ============================================================================
227
+ // CURRENCY: toCurrency(value, options?)
228
+ // ============================================================================
229
+
230
+ /**
231
+ * Converts a numeric value to Tamil currency words (Indian Rupee).
232
+ *
233
+ * @param {number | string | bigint} value - The currency amount to convert
234
+ * @returns {string} The amount in Tamil currency words
235
+ * @throws {TypeError} If value is not a valid numeric type
236
+ * @throws {Error} If value is not a valid number format
237
+ *
238
+ * @example
239
+ * toCurrency(42.50) // 'நாற்பத்திரண்டு ரூபாய் ஐம்பது பைசா'
240
+ * toCurrency(1) // 'ஒன்று ரூபாய்'
241
+ * toCurrency(0.01) // 'ஒன்று பைசா'
242
+ */
243
+ function toCurrency (value) {
244
+ const { isNegative, dollars: rupees, cents: paise } = parseCurrencyValue(value)
245
+
246
+ // Build result
247
+ let result = ''
248
+ if (isNegative) result = NEGATIVE + ' '
249
+
250
+ // Rupees part - show if non-zero, or if no paise
251
+ if (rupees > 0n || paise === 0n) {
252
+ result += integerToWords(rupees) + ' ' + RUPEE
253
+ }
254
+
255
+ // Paise part
256
+ if (paise > 0n) {
257
+ if (rupees > 0n) {
258
+ result += ' '
259
+ }
260
+ result += integerToWords(paise) + ' ' + PAISA
261
+ }
262
+
263
+ return result
264
+ }
265
+
150
266
  // ============================================================================
151
267
  // Exports
152
268
  // ============================================================================
153
269
 
154
- export { toWords }
270
+ export { toCardinal, toOrdinal, toCurrency }
package/src/te-IN.d.ts ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Converts a numeric value to Telugu words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @returns {string} The number in Telugu words
6
+ */
7
+ export function toCardinal(value: number | string | bigint): string;
8
+ /**
9
+ * Converts a numeric value to Telugu ordinal words.
10
+ *
11
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
12
+ * @returns {string} The number as ordinal words
13
+ * @throws {TypeError} If value is not a valid numeric type
14
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
15
+ *
16
+ * @example
17
+ * toOrdinal(1) // 'మొదటి'
18
+ * toOrdinal(2) // 'రెండవ'
19
+ * toOrdinal(10) // 'పదివ'
20
+ */
21
+ export function toOrdinal(value: number | string | bigint): string;
22
+ /**
23
+ * Converts a numeric value to Telugu currency words (Indian Rupee).
24
+ *
25
+ * @param {number | string | bigint} value - The currency amount to convert
26
+ * @returns {string} The amount in Telugu currency words
27
+ * @throws {TypeError} If value is not a valid numeric type
28
+ * @throws {Error} If value is not a valid number format
29
+ *
30
+ * @example
31
+ * toCurrency(42.50) // 'నలభై రెండు రూపాయలు యాభై పైసలు'
32
+ * toCurrency(1) // 'ఒకటి రూపాయి'
33
+ * toCurrency(0.01) // 'ఒకటి పైసా'
34
+ */
35
+ export function toCurrency(value: number | string | bigint): string;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Telugu language converter - Functional Implementation
2
+ * Telugu (India) language converter
3
3
  *
4
- * Self-contained converter for South Asian numbering.
4
+ * CLDR: te-IN | Telugu as used in India
5
5
  *
6
6
  * Key features:
7
7
  * - Indian numbering system (వెయ్యి, లక్ష, కోటి)
@@ -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
@@ -21,6 +23,28 @@ const ZERO = 'సున్నా'
21
23
  const NEGATIVE = 'మైనస్'
22
24
  const DECIMAL_SEP = 'పాయింట్'
23
25
 
26
+ // ============================================================================
27
+ // Ordinal Vocabulary
28
+ // ============================================================================
29
+
30
+ // Ordinal suffix (adds to cardinal for numbers >= 7)
31
+ const ORDINAL_SUFFIX = 'వ'
32
+
33
+ // Special ordinals for first few numbers
34
+ const ORDINAL_SPECIAL = ['', 'మొదటి', 'రెండవ', 'మూడవ', 'నాలుగవ', 'ఐదవ', 'ఆరవ']
35
+
36
+ // ============================================================================
37
+ // Currency Vocabulary (Indian Rupee)
38
+ // ============================================================================
39
+
40
+ // Rupee (singular/plural same in Telugu)
41
+ const RUPEE = 'రూపాయి'
42
+ const RUPEES = 'రూపాయలు'
43
+
44
+ // Paisa (singular/plural same in Telugu)
45
+ const PAISA = 'పైసా'
46
+ const PAISE = 'పైసలు'
47
+
24
48
  const BELOW_HUNDRED = [
25
49
  'సున్నా', 'ఒకటి', 'రెండు', 'మూడు', 'నాలుగు', 'ఐదు', 'ఆరు', 'ఏడు', 'ఎనిమిది', 'తొమ్మిది',
26
50
  'పది', 'పదకొండు', 'పన్నెండు', 'పదమూడు', 'పద్నాలుగు', 'పదిహేను', 'పదహారు', 'పదిహేడు', 'పద్దెనిమిది', 'పంతొమ్మిది',
@@ -34,10 +58,6 @@ const BELOW_HUNDRED = [
34
58
  'తొంభై', 'తొంభై ఒకటి', 'తొంభై రెండు', 'తొంభై మూడు', 'తొంభై నాలుగు', 'తొంభై ఐదు', 'తొంభై ఆరు', 'తొంభై ఏడు', 'తొంభై ఎనిమిది', 'తొంభై తొమ్మిది'
35
59
  ]
36
60
 
37
- // ============================================================================
38
- // Vocabulary (continued)
39
- // ============================================================================
40
-
41
61
  const HUNDREDS = ['', 'వంద', 'రెండు వందలు', 'మూడు వందలు', 'నాలుగు వందలు', 'ఐదు వందలు', 'ఆరు వందలు', 'ఏడు వందలు', 'ఎనిమిది వందలు', 'తొమ్మిది వందలు']
42
62
 
43
63
  // Ones for decimal reading
@@ -47,13 +67,13 @@ const ONES = ['ఒకటి', 'రెండు', 'మూడు', 'నాలు
47
67
  const SCALE_WORDS = ['', 'వెయ్యి', 'లక్ష', 'కోటి', 'అరబ్', 'ఖరబ్', 'నిల్', 'పడ్మ', 'శంకు']
48
68
 
49
69
  // ============================================================================
50
- // Conversion Functions
70
+ // Segment Building
51
71
  // ============================================================================
52
72
 
53
73
  /**
54
- * Converts 0-999 to Telugu words.
74
+ * Builds words for a 0-999 segment.
55
75
  */
56
- function convertBelowThousand (n) {
76
+ function buildSegment (n) {
57
77
  if (n === 0) return ''
58
78
  if (n < 100) return BELOW_HUNDRED[n]
59
79
 
@@ -66,9 +86,15 @@ function convertBelowThousand (n) {
66
86
  return HUNDREDS[hundreds] + ' ' + BELOW_HUNDRED[remainder]
67
87
  }
68
88
 
89
+ // ============================================================================
90
+ // Conversion Functions
91
+ // ============================================================================
92
+
69
93
  /**
70
94
  * Converts a non-negative integer to Telugu words.
71
- * Uses recursive approach for Indian 3-2-2 grouping pattern.
95
+ *
96
+ * Uses BigInt modulo for segment extraction (faster than string slicing).
97
+ * South Asian 3-2-2 grouping: first 3 digits, then groups of 2.
72
98
  *
73
99
  * @param {bigint} n - Non-negative integer to convert
74
100
  * @returns {string} Telugu words
@@ -78,49 +104,39 @@ function integerToWords (n) {
78
104
 
79
105
  // Fast path: numbers < 1000 (direct lookup)
80
106
  if (n < 1000n) {
81
- return convertBelowThousand(Number(n))
107
+ return buildSegment(Number(n))
82
108
  }
83
109
 
84
- return buildLargeNumberWords(n, 0)
85
- }
86
-
87
- /**
88
- * Recursively builds words for numbers >= 1000.
89
- * Indian grouping: first 3 digits, then 2-digit groups.
90
- *
91
- * @param {bigint} n - Number to convert
92
- * @param {number} scale - Current scale index (0=units, 1=thousands, etc.)
93
- * @returns {string} Telugu words
94
- */
95
- function buildLargeNumberWords (n, scale) {
96
- if (n === 0n) return ''
97
-
98
- // Determine divisor: 1000 for first split, 100 for rest
99
- const divisor = scale === 0 ? 1000n : 100n
100
- const segment = Number(n % divisor)
101
- const rest = n / divisor
110
+ // Extract segments using BigInt modulo
111
+ const segments = []
112
+ segments.push(Number(n % 1000n))
113
+ let temp = n / 1000n
102
114
 
103
- // Build higher segments first (recursive)
104
- let result = ''
105
- if (rest > 0n) {
106
- result = buildLargeNumberWords(rest, scale + 1)
115
+ while (temp > 0n) {
116
+ segments.push(Number(temp % 100n))
117
+ temp = temp / 100n
107
118
  }
108
119
 
109
- // Add current segment
110
- if (segment > 0) {
111
- if (result) result += ' '
120
+ // Build result string (process from most-significant to least)
121
+ const words = []
122
+ for (let i = segments.length - 1; i >= 0; i--) {
123
+ const segment = segments[i]
124
+ if (segment === 0) continue
112
125
 
113
- if (scale === 0) {
114
- // Units segment (0-999)
115
- result += convertBelowThousand(segment)
126
+ if (i === 0) {
127
+ words.push(buildSegment(segment))
116
128
  } else {
117
- // Scale segments (0-99)
129
+ // Use 'ఒక' for 1 at scale positions
118
130
  const groupWords = (segment === 1) ? 'ఒక' : BELOW_HUNDRED[segment]
119
- result += groupWords + ' ' + SCALE_WORDS[scale]
131
+ words.push(groupWords)
132
+ }
133
+
134
+ if (i > 0 && SCALE_WORDS[i]) {
135
+ words.push(SCALE_WORDS[i])
120
136
  }
121
137
  }
122
138
 
123
- return result
139
+ return words.join(' ')
124
140
  }
125
141
 
126
142
  function decimalPartToWords (decimalPart) {
@@ -139,8 +155,8 @@ function decimalPartToWords (decimalPart) {
139
155
  * @param {number | string | bigint} value - The numeric value to convert
140
156
  * @returns {string} The number in Telugu words
141
157
  */
142
- function toWords (value) {
143
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
158
+ function toCardinal (value) {
159
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
144
160
 
145
161
  let result = ''
146
162
 
@@ -157,8 +173,93 @@ function toWords (value) {
157
173
  return result
158
174
  }
159
175
 
176
+ // ============================================================================
177
+ // ORDINAL: toOrdinal(value)
178
+ // ============================================================================
179
+
180
+ /**
181
+ * Converts a positive integer to Telugu ordinal words.
182
+ *
183
+ * Telugu ordinals: First 6 are irregular, then add -వ suffix.
184
+ *
185
+ * @param {bigint} n - Positive integer to convert
186
+ * @returns {string} Telugu ordinal words
187
+ */
188
+ function integerToOrdinal (n) {
189
+ // Special ordinals for 1-6
190
+ if (n >= 1n && n <= 6n) {
191
+ return ORDINAL_SPECIAL[Number(n)]
192
+ }
193
+
194
+ // For 7 and above, add suffix to cardinal
195
+ const cardinal = integerToWords(n)
196
+ return cardinal + ORDINAL_SUFFIX
197
+ }
198
+
199
+ /**
200
+ * Converts a numeric value to Telugu ordinal words.
201
+ *
202
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
203
+ * @returns {string} The number as ordinal words
204
+ * @throws {TypeError} If value is not a valid numeric type
205
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
206
+ *
207
+ * @example
208
+ * toOrdinal(1) // 'మొదటి'
209
+ * toOrdinal(2) // 'రెండవ'
210
+ * toOrdinal(10) // 'పదివ'
211
+ */
212
+ function toOrdinal (value) {
213
+ const integerPart = parseOrdinalValue(value)
214
+ return integerToOrdinal(integerPart)
215
+ }
216
+
217
+ // ============================================================================
218
+ // CURRENCY: toCurrency(value, options?)
219
+ // ============================================================================
220
+
221
+ /**
222
+ * Converts a numeric value to Telugu currency words (Indian Rupee).
223
+ *
224
+ * @param {number | string | bigint} value - The currency amount to convert
225
+ * @returns {string} The amount in Telugu currency words
226
+ * @throws {TypeError} If value is not a valid numeric type
227
+ * @throws {Error} If value is not a valid number format
228
+ *
229
+ * @example
230
+ * toCurrency(42.50) // 'నలభై రెండు రూపాయలు యాభై పైసలు'
231
+ * toCurrency(1) // 'ఒకటి రూపాయి'
232
+ * toCurrency(0.01) // 'ఒకటి పైసా'
233
+ */
234
+ function toCurrency (value) {
235
+ const { isNegative, dollars: rupees, cents: paise } = parseCurrencyValue(value)
236
+
237
+ // Build result
238
+ let result = ''
239
+ if (isNegative) result = NEGATIVE + ' '
240
+
241
+ // Rupees part - show if non-zero, or if no paise
242
+ if (rupees > 0n || paise === 0n) {
243
+ result += integerToWords(rupees)
244
+ // Singular for 1 rupee, plural otherwise
245
+ result += ' ' + (rupees === 1n ? RUPEE : RUPEES)
246
+ }
247
+
248
+ // Paise part
249
+ if (paise > 0n) {
250
+ if (rupees > 0n) {
251
+ result += ' '
252
+ }
253
+ result += integerToWords(paise)
254
+ // Singular for 1 paisa, plural otherwise
255
+ result += ' ' + (paise === 1n ? PAISA : PAISE)
256
+ }
257
+
258
+ return result
259
+ }
260
+
160
261
  // ============================================================================
161
262
  // Exports
162
263
  // ============================================================================
163
264
 
164
- export { toWords }
265
+ export { toCardinal, toOrdinal, toCurrency }
package/src/th-TH.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Converts a numeric value to Thai words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @returns {string} The number in Thai words
6
+ */
7
+ export function toCardinal(value: number | string | bigint): string;
8
+ /**
9
+ * Converts a numeric value to Thai ordinal words.
10
+ *
11
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
12
+ * @returns {string} The number as ordinal words
13
+ * @throws {TypeError} If value is not a valid numeric type
14
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
15
+ *
16
+ * @example
17
+ * toOrdinal(1) // 'ที่หนึ่ง'
18
+ * toOrdinal(2) // 'ที่สอง'
19
+ * toOrdinal(10) // 'ที่สิบ'
20
+ */
21
+ export function toOrdinal(value: number | string | bigint): string;
22
+ /**
23
+ * Converts a numeric value to Thai currency words (Baht).
24
+ *
25
+ * Thai Baht uses satang as subunit (100 satang = 1 baht).
26
+ * When whole amounts, adds "ถ้วน" (exactly) suffix.
27
+ *
28
+ * @param {number | string | bigint} value - The currency amount to convert
29
+ * @returns {string} The amount in Thai currency words
30
+ * @throws {TypeError} If value is not a valid numeric type
31
+ * @throws {Error} If value is not a valid number format
32
+ *
33
+ * @example
34
+ * toCurrency(42) // 'สี่สิบสองบาทถ้วน'
35
+ * toCurrency(1.50) // 'หนึ่งบาทห้าสิบสตางค์'
36
+ * toCurrency(-5) // 'ลบห้าบาทถ้วน'
37
+ */
38
+ export function toCurrency(value: number | string | bigint): string;