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 +0,0 @@
1
- /**
2
- * Converts a numeric value to Czech 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 Czech 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) // 'dvacet jedna'
14
- * toWords(1000) // 'tisíc'
15
- * toWords(2000) // 'dva tisíce'
16
- * toWords(5000) // 'pět tisíc'
17
- */
18
- export function toWords(value: number | string | bigint): string;
@@ -1,14 +0,0 @@
1
- /**
2
- * Converts a numeric value to Danish words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Danish 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) // 'enogtyve'
11
- * toWords(1000) // 'ettusind'
12
- * toWords(1000000) // 'en millioner'
13
- */
14
- export function toWords(value: number | string | bigint): string;
@@ -1,17 +0,0 @@
1
- /**
2
- * Converts a numeric value to German 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 German 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) // 'einundzwanzig'
14
- * toWords(1000) // 'eintausend'
15
- * toWords(1000000) // 'eine Million'
16
- */
17
- export function toWords(value: number | string | bigint): string;
@@ -1,332 +0,0 @@
1
- /**
2
- * German language converter - Functional Implementation
3
- *
4
- * A performance-optimized number-to-words converter using precomputed lookup tables.
5
- * Self-contained module with its own input validation, ready for subpath exports.
6
- *
7
- * Key optimization: Precompute all segment values (0-999) at module load.
8
- * This eliminates all per-call string manipulation for segment conversion.
9
- *
10
- * German-specific rules (handled in precomputation):
11
- * - Inverted tens-ones order: "einundzwanzig" (one-and-twenty) for 21-99
12
- * - Compound words without spaces below million level
13
- * - Three forms of 1: "eins" (standalone), "ein" (before hundert/tausend), "eine" (before Million+)
14
- * - Scale pluralization: Million → Millionen, Milliarde → Milliarden
15
- * - Spaces only around million+ scale words
16
- */
17
-
18
- import { parseNumericValue } from '../utils/parse-numeric.js'
19
-
20
- // ============================================================================
21
- // Vocabulary (module-level constants)
22
- // ============================================================================
23
-
24
- // Ones words (1-9), index 0 unused
25
- const ONES = ['', 'eins', 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun']
26
-
27
- // "ein" form for use before hundert/und
28
- const EIN = 'ein'
29
-
30
- // Teens (10-19)
31
- const TEENS = ['zehn', 'elf', 'zwölf', 'dreizehn', 'vierzehn', 'fünfzehn', 'sechzehn', 'siebzehn', 'achtzehn', 'neunzehn']
32
-
33
- // Tens (20-90)
34
- const TENS = ['', '', 'zwanzig', 'dreißig', 'vierzig', 'fünfzig', 'sechzig', 'siebzig', 'achtzig', 'neunzig']
35
-
36
- // Scale words (index 0 = thousand, 1 = million, etc.)
37
- const SCALES = ['tausend', 'Million', 'Milliarde', 'Billion', 'Billiarde', 'Trillion', 'Trilliarde', 'Quadrillion', 'Quadrilliarde']
38
-
39
- // Pluralized scale words (million+)
40
- const SCALES_PLURAL = ['tausend', 'Millionen', 'Milliarden', 'Billionen', 'Billiarden', 'Trillionen', 'Trilliarden', 'Quadrillionen', 'Quadrilliarden']
41
-
42
- const HUNDRED = 'hundert'
43
- const ZERO = 'null'
44
- const NEGATIVE = 'minus'
45
- const DECIMAL_SEP = 'komma'
46
-
47
- // ============================================================================
48
- // Precomputed Lookup Tables (built once at module load)
49
- // ============================================================================
50
-
51
- /**
52
- * Builds segment word for 0-999 (standalone form, uses "eins").
53
- * German inverts ones and tens: "einundzwanzig" = one-and-twenty
54
- * Only used during table construction.
55
- */
56
- function buildSegment (n) {
57
- if (n === 0) return ''
58
-
59
- const ones = n % 10
60
- const tens = Math.floor(n / 10) % 10
61
- const hundreds = Math.floor(n / 100)
62
-
63
- let result = ''
64
-
65
- // Hundreds: "ein" before hundert, not "eins"
66
- if (hundreds > 0) {
67
- result += (hundreds === 1 ? EIN : ONES[hundreds]) + HUNDRED
68
- }
69
-
70
- // Tens and ones
71
- if (tens === 1) {
72
- // Teens
73
- result += TEENS[ones]
74
- } else if (tens >= 2 && ones > 0) {
75
- // Inverted: "einundzwanzig" (one-and-twenty)
76
- // Use "ein" before "und", not "eins"
77
- result += (ones === 1 ? EIN : ONES[ones]) + 'und' + TENS[tens]
78
- } else if (tens >= 2) {
79
- // Just tens
80
- result += TENS[tens]
81
- } else if (ones > 0) {
82
- // Just ones (no tens, possibly after hundreds)
83
- // Use "eins" for standalone/after hundreds
84
- result += ONES[ones]
85
- }
86
-
87
- return result
88
- }
89
-
90
- /**
91
- * Builds segment word for use before "tausend".
92
- * Uses "ein" instead of "eins" for 1.
93
- */
94
- function buildSegmentForThousand (n) {
95
- if (n === 0) return ''
96
- if (n === 1) return EIN // "eintausend"
97
-
98
- const ones = n % 10
99
- const tens = Math.floor(n / 10) % 10
100
- const hundreds = Math.floor(n / 100)
101
-
102
- let result = ''
103
-
104
- if (hundreds > 0) {
105
- result += (hundreds === 1 ? EIN : ONES[hundreds]) + HUNDRED
106
- }
107
-
108
- if (tens === 1) {
109
- result += TEENS[ones]
110
- } else if (tens >= 2 && ones > 0) {
111
- result += (ones === 1 ? EIN : ONES[ones]) + 'und' + TENS[tens]
112
- } else if (tens >= 2) {
113
- result += TENS[tens]
114
- } else if (ones > 0 && hundreds > 0) {
115
- // After hundreds, ones 1 stays "eins" when not followed by scale
116
- // But we're going to tausend, so this path won't hit for n=1
117
- result += ONES[ones]
118
- } else if (ones > 0) {
119
- result += ONES[ones]
120
- }
121
-
122
- return result
123
- }
124
-
125
- // Precompute all 1000 segment words (0-999) - standalone form
126
- const SEGMENTS = new Array(1000)
127
- for (let i = 0; i < 1000; i++) {
128
- SEGMENTS[i] = buildSegment(i)
129
- }
130
-
131
- // Precompute all 1000 segment words for thousand context
132
- const SEGMENTS_THOUSAND = new Array(1000)
133
- for (let i = 0; i < 1000; i++) {
134
- SEGMENTS_THOUSAND[i] = buildSegmentForThousand(i)
135
- }
136
-
137
- // ============================================================================
138
- // Conversion Functions
139
- // ============================================================================
140
-
141
- /**
142
- * Converts a non-negative integer to German words.
143
- *
144
- * @param {bigint} n - Non-negative integer to convert
145
- * @returns {string} German words
146
- */
147
- function integerToWords (n) {
148
- if (n === 0n) return ZERO
149
-
150
- // Fast path: numbers < 1000 (direct lookup)
151
- if (n < 1000n) {
152
- return SEGMENTS[Number(n)]
153
- }
154
-
155
- // Fast path: numbers < 1,000,000 (thousands)
156
- if (n < 1_000_000n) {
157
- const thousands = Number(n / 1000n)
158
- const remainder = Number(n % 1000n)
159
-
160
- // Compound: "eintausendzweihundert" (no spaces)
161
- let result = SEGMENTS_THOUSAND[thousands] + SCALES[0]
162
-
163
- if (remainder > 0) {
164
- result += SEGMENTS[remainder]
165
- }
166
-
167
- return result
168
- }
169
-
170
- // For numbers >= 1,000,000, use scale decomposition
171
- return buildLargeNumberWords(n)
172
- }
173
-
174
- /**
175
- * Builds words for numbers >= 1,000,000.
176
- *
177
- * @param {bigint} n - Number >= 1,000,000
178
- * @returns {string} German words
179
- */
180
- function buildLargeNumberWords (n) {
181
- const numStr = n.toString()
182
- const len = numStr.length
183
-
184
- // Build segments of 3 digits from right to left
185
- const segments = []
186
- const segmentSize = 3
187
-
188
- const remainderLen = len % segmentSize
189
- let pos = 0
190
- if (remainderLen > 0) {
191
- segments.push(Number(numStr.slice(0, remainderLen)))
192
- pos = remainderLen
193
- }
194
- while (pos < len) {
195
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
196
- pos += segmentSize
197
- }
198
-
199
- // Convert segments to words
200
- const parts = []
201
- let scaleIndex = segments.length - 1
202
-
203
- for (let i = 0; i < segments.length; i++) {
204
- const segment = segments[i]
205
-
206
- if (segment !== 0) {
207
- if (scaleIndex === 0) {
208
- // Units segment (no scale word)
209
- parts.push({ words: SEGMENTS[segment], isScale: false, scaleLevel: 0 })
210
- } else if (scaleIndex === 1) {
211
- // Thousands: compound without space
212
- const segWords = SEGMENTS_THOUSAND[segment]
213
- parts.push({ words: segWords + SCALES[0], isScale: false, scaleLevel: 1 })
214
- } else {
215
- // Million+ : space around scale word
216
- let segWords
217
- if (segment === 1) {
218
- segWords = 'eine' // "eine Million"
219
- } else {
220
- segWords = SEGMENTS[segment]
221
- }
222
- const scaleWord = segment === 1 ? SCALES[scaleIndex - 1] : SCALES_PLURAL[scaleIndex - 1]
223
- parts.push({ words: segWords, isScale: false, scaleLevel: scaleIndex })
224
- parts.push({ words: scaleWord, isScale: true, scaleLevel: scaleIndex })
225
- }
226
- }
227
-
228
- scaleIndex--
229
- }
230
-
231
- // Join with German spacing rules: space around million+ scale words
232
- return joinGermanParts(parts)
233
- }
234
-
235
- /**
236
- * Joins parts with German spacing rules.
237
- * Spaces only around million+ scale words.
238
- *
239
- * @param {Array} parts - Parts with metadata
240
- * @returns {string} Joined string
241
- */
242
- function joinGermanParts (parts) {
243
- if (parts.length === 0) return ZERO
244
-
245
- let result = ''
246
-
247
- for (let i = 0; i < parts.length; i++) {
248
- const part = parts[i]
249
- const prevPart = i > 0 ? parts[i - 1] : null
250
-
251
- // Add space before if:
252
- // - Current is a million+ scale word
253
- // - Previous was a million+ scale word
254
- if (i > 0) {
255
- const needsSpace = part.isScale || (prevPart && prevPart.isScale)
256
- if (needsSpace) {
257
- result += ' '
258
- }
259
- }
260
-
261
- result += part.words
262
- }
263
-
264
- return result
265
- }
266
-
267
- /**
268
- * Converts decimal digits to German words.
269
- *
270
- * @param {string} decimalPart - Decimal digits (without the point)
271
- * @returns {string} German words for decimal part
272
- */
273
- function decimalPartToWords (decimalPart) {
274
- let result = ''
275
-
276
- // Handle leading zeros
277
- let i = 0
278
- while (i < decimalPart.length && decimalPart[i] === '0') {
279
- if (result) result += ' '
280
- result += ZERO
281
- i++
282
- }
283
-
284
- // Convert remainder as a single number
285
- const remainder = decimalPart.slice(i)
286
- if (remainder) {
287
- if (result) result += ' '
288
- result += integerToWords(BigInt(remainder))
289
- }
290
-
291
- return result
292
- }
293
-
294
- /**
295
- * Converts a numeric value to German words.
296
- *
297
- * This is the main public API. It accepts any valid numeric input
298
- * (number, string, or bigint) and handles parsing internally.
299
- *
300
- * @param {number | string | bigint} value - The numeric value to convert
301
- * @returns {string} The number in German words
302
- * @throws {TypeError} If value is not a valid numeric type
303
- * @throws {Error} If value is not a valid number format
304
- *
305
- * @example
306
- * toWords(21) // 'einundzwanzig'
307
- * toWords(1000) // 'eintausend'
308
- * toWords(1000000) // 'eine Million'
309
- */
310
- function toWords (value) {
311
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
312
-
313
- let result = ''
314
-
315
- if (isNegative) {
316
- result = NEGATIVE + ' '
317
- }
318
-
319
- result += integerToWords(integerPart)
320
-
321
- if (decimalPart) {
322
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
323
- }
324
-
325
- return result
326
- }
327
-
328
- // ============================================================================
329
- // Public API
330
- // ============================================================================
331
-
332
- export { toWords }
@@ -1,14 +0,0 @@
1
- /**
2
- * Converts a numeric value to Greek words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Greek 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(1000) // 'χίλια'
12
- * toWords('3.14') // 'τρία κόμμα ένα τέσσερα'
13
- */
14
- export function toWords(value: number | string | bigint): string;
@@ -1,243 +0,0 @@
1
- /**
2
- * Greek language converter - Functional Implementation
3
- *
4
- * A performance-optimized number-to-words converter using precomputed lookup tables.
5
- *
6
- * Key features:
7
- * - Space-separated number composition
8
- * - Implicit "one" (ένα) omission before scale words
9
- * - Irregular hundreds (διακόσια, τριακόσια, etc.)
10
- * - Per-digit decimal reading
11
- */
12
-
13
- import { parseNumericValue } from '../utils/parse-numeric.js'
14
-
15
- // ============================================================================
16
- // Vocabulary (module-level constants)
17
- // ============================================================================
18
-
19
- const ONES = ['', 'ένα', 'δύο', 'τρία', 'τέσσερα', 'πέντε', 'έξι', 'επτά', 'οκτώ', 'εννέα']
20
-
21
- const TEENS = ['δέκα', 'έντεκα', 'δώδεκα', 'δεκατρία', 'δεκατέσσερα', 'δεκαπέντε', 'δεκαέξι', 'δεκαεπτά', 'δεκαοκτώ', 'δεκαεννέα']
22
-
23
- const TENS = ['', '', 'είκοσι', 'τριάντα', 'σαράντα', 'πενήντα', 'εξήντα', 'εβδομήντα', 'ογδόντα', 'ενενήντα']
24
-
25
- // Greek has irregular hundreds
26
- const HUNDREDS = ['', 'εκατό', 'διακόσια', 'τριακόσια', 'τετρακόσια', 'πεντακόσια', 'εξακόσια', 'επτακόσια', 'οκτακόσια', 'εννιακόσια']
27
-
28
- const THOUSAND = 'χίλια'
29
-
30
- const ZERO = 'μηδέν'
31
- const NEGATIVE = 'μείον'
32
- const DECIMAL_SEP = 'κόμμα'
33
-
34
- // Short scale
35
- const SCALES = ['εκατομμύριο', 'δισεκατομμύριο', 'τρισεκατομμύριο']
36
-
37
- // ============================================================================
38
- // Precomputed Lookup Tables (built once at module load)
39
- // ============================================================================
40
-
41
- /**
42
- * Builds segment word for 0-999.
43
- */
44
- function buildSegment (n) {
45
- if (n === 0) return ''
46
-
47
- const ones = n % 10
48
- const tens = Math.floor(n / 10) % 10
49
- const hundreds = Math.floor(n / 100)
50
-
51
- const parts = []
52
-
53
- // Hundreds (irregular forms)
54
- if (hundreds > 0) {
55
- parts.push(HUNDREDS[hundreds])
56
- }
57
-
58
- // Tens and ones
59
- const tensOnes = n % 100
60
-
61
- if (tensOnes === 0) {
62
- // Just hundreds
63
- } else if (tensOnes < 10) {
64
- parts.push(ONES[ones])
65
- } else if (tensOnes < 20) {
66
- parts.push(TEENS[ones])
67
- } else if (ones === 0) {
68
- parts.push(TENS[tens])
69
- } else {
70
- parts.push(TENS[tens] + ' ' + ONES[ones])
71
- }
72
-
73
- return parts.join(' ')
74
- }
75
-
76
- // Precompute all 1000 segment words (0-999)
77
- const SEGMENTS = new Array(1000)
78
-
79
- for (let i = 0; i < 1000; i++) {
80
- SEGMENTS[i] = buildSegment(i)
81
- }
82
-
83
- // ============================================================================
84
- // Conversion Functions
85
- // ============================================================================
86
-
87
- /**
88
- * Converts a non-negative integer to Greek words.
89
- *
90
- * @param {bigint} n - Non-negative integer to convert
91
- * @returns {string} Greek words
92
- */
93
- function integerToWords (n) {
94
- if (n === 0n) return ZERO
95
-
96
- // Fast path: numbers < 1000 (direct lookup)
97
- if (n < 1000n) {
98
- return SEGMENTS[Number(n)]
99
- }
100
-
101
- // Fast path: numbers < 1,000,000 (thousands)
102
- if (n < 1_000_000n) {
103
- const thousands = Number(n / 1000n)
104
- const remainder = Number(n % 1000n)
105
-
106
- // Omit "ένα" before χίλια
107
- let result
108
- if (thousands === 1) {
109
- result = THOUSAND
110
- } else {
111
- result = SEGMENTS[thousands] + ' ' + THOUSAND
112
- }
113
-
114
- if (remainder > 0) {
115
- result += ' ' + SEGMENTS[remainder]
116
- }
117
-
118
- return result
119
- }
120
-
121
- // For numbers >= 1,000,000, use scale decomposition
122
- return buildLargeNumberWords(n)
123
- }
124
-
125
- /**
126
- * Builds words for numbers >= 1,000,000.
127
- *
128
- * @param {bigint} n - Number >= 1,000,000
129
- * @returns {string} Greek words
130
- */
131
- function buildLargeNumberWords (n) {
132
- const numStr = n.toString()
133
- const len = numStr.length
134
-
135
- // Build segments of 3 digits from right to left
136
- const segments = []
137
- const segmentSize = 3
138
-
139
- const remainderLen = len % segmentSize
140
- let pos = 0
141
- if (remainderLen > 0) {
142
- segments.push(Number(numStr.slice(0, remainderLen)))
143
- pos = remainderLen
144
- }
145
- while (pos < len) {
146
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
147
- pos += segmentSize
148
- }
149
-
150
- // Convert segments to words
151
- const parts = []
152
- let scaleIndex = segments.length - 1
153
-
154
- for (let i = 0; i < segments.length; i++) {
155
- const segment = segments[i]
156
-
157
- if (segment !== 0) {
158
- const segmentWord = SEGMENTS[segment]
159
-
160
- if (scaleIndex === 0) {
161
- // Units segment
162
- parts.push(segmentWord)
163
- } else if (scaleIndex === 1) {
164
- // Thousands - omit "ένα" before χίλια
165
- if (segment === 1) {
166
- parts.push(THOUSAND)
167
- } else {
168
- parts.push(segmentWord + ' ' + THOUSAND)
169
- }
170
- } else {
171
- // Millions+ - omit "ένα" before scale words
172
- const scaleWord = SCALES[scaleIndex - 2]
173
- if (segment === 1) {
174
- parts.push(scaleWord)
175
- } else {
176
- parts.push(segmentWord + ' ' + scaleWord)
177
- }
178
- }
179
- }
180
-
181
- scaleIndex--
182
- }
183
-
184
- return parts.join(' ')
185
- }
186
-
187
- /**
188
- * Converts decimal digits to Greek words (per-digit).
189
- *
190
- * @param {string} decimalPart - Decimal digits (without the point)
191
- * @returns {string} Greek words for decimal part
192
- */
193
- function decimalPartToWords (decimalPart) {
194
- const parts = []
195
-
196
- for (const digit of decimalPart) {
197
- const d = parseInt(digit, 10)
198
- if (d === 0) {
199
- parts.push(ZERO)
200
- } else {
201
- parts.push(ONES[d])
202
- }
203
- }
204
-
205
- return parts.join(' ')
206
- }
207
-
208
- /**
209
- * Converts a numeric value to Greek words.
210
- *
211
- * @param {number | string | bigint} value - The numeric value to convert
212
- * @returns {string} The number in Greek words
213
- * @throws {TypeError} If value is not a valid numeric type
214
- * @throws {Error} If value is not a valid number format
215
- *
216
- * @example
217
- * toWords(21) // 'είκοσι ένα'
218
- * toWords(1000) // 'χίλια'
219
- * toWords('3.14') // 'τρία κόμμα ένα τέσσερα'
220
- */
221
- function toWords (value) {
222
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
223
-
224
- let result = ''
225
-
226
- if (isNegative) {
227
- result = NEGATIVE + ' '
228
- }
229
-
230
- result += integerToWords(integerPart)
231
-
232
- if (decimalPart) {
233
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
234
- }
235
-
236
- return result
237
- }
238
-
239
- // ============================================================================
240
- // Public API
241
- // ============================================================================
242
-
243
- export { toWords }
@@ -1,17 +0,0 @@
1
- /**
2
- * Converts a numeric value to English 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 English 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) // 'forty-two'
14
- * toWords(-3.14) // 'minus three point one four'
15
- * toWords('1000000') // 'one million'
16
- */
17
- export function toWords(value: number | string | bigint): string;