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,256 +0,0 @@
1
- /**
2
- * English language converter - Functional Implementation v2
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
- * English-specific rules (handled in precomputation):
11
- * - "and" after hundreds: "one hundred and twenty-three"
12
- * - Hyphenated tens-ones: "twenty-one", "forty-two"
13
- * - "and" before final segment when following scale word
14
- */
15
-
16
- import { parseNumericValue } from '../utils/parse-numeric.js'
17
-
18
- // ============================================================================
19
- // Vocabulary (module-level constants)
20
- // ============================================================================
21
-
22
- const ONES = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
23
- const TEENS = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
24
- const TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
25
-
26
- const SCALES = ['thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 'sextillion', 'septillion', 'octillion']
27
-
28
- const HUNDRED = 'hundred'
29
- const ZERO = 'zero'
30
- const NEGATIVE = 'minus'
31
- const DECIMAL_SEP = 'point'
32
-
33
- // ============================================================================
34
- // Precomputed Lookup Tables (built once at module load)
35
- // ============================================================================
36
-
37
- /**
38
- * Builds segment word for 0-999.
39
- * Returns object with word and whether it contains "hundred" (for "and" logic).
40
- */
41
- function buildSegment (n) {
42
- if (n === 0) return { word: '', hasHundred: false }
43
-
44
- const ones = n % 10
45
- const tens = Math.floor(n / 10) % 10
46
- const hundreds = Math.floor(n / 100)
47
-
48
- let result = ''
49
- let hasHundred = false
50
-
51
- // Hundreds
52
- if (hundreds > 0) {
53
- result = ONES[hundreds] + ' ' + HUNDRED
54
- hasHundred = true
55
- }
56
-
57
- // Tens and ones
58
- let tensOnes = ''
59
- if (tens === 1) {
60
- tensOnes = TEENS[ones]
61
- } else if (tens >= 2) {
62
- if (ones > 0) {
63
- tensOnes = TENS[tens] + '-' + ONES[ones]
64
- } else {
65
- tensOnes = TENS[tens]
66
- }
67
- } else if (ones > 0) {
68
- tensOnes = ONES[ones]
69
- }
70
-
71
- // Combine with "and" after hundreds
72
- if (result && tensOnes) {
73
- return { word: result + ' and ' + tensOnes, hasHundred: true }
74
- }
75
-
76
- return { word: result || tensOnes, hasHundred }
77
- }
78
-
79
- // Precompute all 1000 segment words (0-999)
80
- const SEGMENTS = new Array(1000)
81
- const SEGMENTS_HAS_HUNDRED = new Array(1000)
82
-
83
- for (let i = 0; i < 1000; i++) {
84
- const result = buildSegment(i)
85
- SEGMENTS[i] = result.word
86
- SEGMENTS_HAS_HUNDRED[i] = result.hasHundred
87
- }
88
-
89
- // ============================================================================
90
- // Conversion Functions
91
- // ============================================================================
92
-
93
- /**
94
- * Converts a non-negative integer to English words.
95
- *
96
- * @param {bigint} n - Non-negative integer to convert
97
- * @returns {string} English words
98
- */
99
- function integerToWords (n) {
100
- if (n === 0n) return ZERO
101
-
102
- // Fast path: numbers < 1000 (direct lookup)
103
- if (n < 1000n) {
104
- return SEGMENTS[Number(n)]
105
- }
106
-
107
- // Fast path: numbers < 1,000,000 (thousands)
108
- if (n < 1_000_000n) {
109
- const thousands = Number(n / 1000n)
110
- const remainder = Number(n % 1000n)
111
-
112
- let result = SEGMENTS[thousands] + ' ' + SCALES[0]
113
-
114
- if (remainder > 0) {
115
- const remainderWord = SEGMENTS[remainder]
116
- // Insert "and" if remainder doesn't have hundred
117
- if (!SEGMENTS_HAS_HUNDRED[remainder]) {
118
- result += ' and ' + remainderWord
119
- } else {
120
- result += ' ' + remainderWord
121
- }
122
- }
123
-
124
- return result
125
- }
126
-
127
- // For numbers >= 1,000,000, use scale decomposition
128
- return buildLargeNumberWords(n)
129
- }
130
-
131
- /**
132
- * Builds words for numbers >= 1,000,000.
133
- * Uses BigInt division for faster segment extraction.
134
- *
135
- * @param {bigint} n - Number >= 1,000,000
136
- * @returns {string} English words
137
- */
138
- function buildLargeNumberWords (n) {
139
- // Extract segments using BigInt division (faster than string slicing)
140
- // Segments are stored least-significant first (index 0 = ones, 1 = thousands, etc.)
141
- const segments = []
142
- let temp = n
143
- while (temp > 0n) {
144
- segments.push(Number(temp % 1000n))
145
- temp = temp / 1000n
146
- }
147
-
148
- // Find the first (smallest index) non-zero segment - this is processed last
149
- let firstNonZeroIdx = -1
150
- for (let i = 0; i < segments.length; i++) {
151
- if (segments[i] !== 0) {
152
- firstNonZeroIdx = i
153
- break
154
- }
155
- }
156
-
157
- // Build result string directly (avoids intermediate object allocations)
158
- // Process from most-significant (end) to least-significant (start)
159
- let result = ''
160
- let prevWasScale = false
161
-
162
- for (let i = segments.length - 1; i >= 0; i--) {
163
- const segment = segments[i]
164
- if (segment === 0) continue
165
-
166
- const segmentWord = SEGMENTS[segment]
167
- const hasHundred = SEGMENTS_HAS_HUNDRED[segment]
168
- const isLastSegment = (i === firstNonZeroIdx)
169
-
170
- // Add "and" only before FINAL segment if it follows scale and doesn't have hundred
171
- if (result && isLastSegment && prevWasScale && !hasHundred) {
172
- result += ' and'
173
- }
174
-
175
- // Add segment word
176
- if (result) result += ' '
177
- result += segmentWord
178
-
179
- // Add scale word (i=0 is units, i=1 is thousands, etc.)
180
- if (i > 0) {
181
- result += ' ' + SCALES[i - 1]
182
- prevWasScale = true
183
- } else {
184
- prevWasScale = false
185
- }
186
- }
187
-
188
- return result
189
- }
190
-
191
- /**
192
- * Converts decimal digits to English words.
193
- *
194
- * @param {string} decimalPart - Decimal digits (without the point)
195
- * @returns {string} English words for decimal part
196
- */
197
- function decimalPartToWords (decimalPart) {
198
- let result = ''
199
-
200
- // Handle leading zeros
201
- let i = 0
202
- while (i < decimalPart.length && decimalPart[i] === '0') {
203
- if (result) result += ' '
204
- result += ZERO
205
- i++
206
- }
207
-
208
- // Convert remainder as a single number
209
- const remainder = decimalPart.slice(i)
210
- if (remainder) {
211
- if (result) result += ' '
212
- result += integerToWords(BigInt(remainder))
213
- }
214
-
215
- return result
216
- }
217
-
218
- /**
219
- * Converts a numeric value to English words.
220
- *
221
- * This is the main public API. It accepts any valid numeric input
222
- * (number, string, or bigint) and handles parsing internally.
223
- *
224
- * @param {number | string | bigint} value - The numeric value to convert
225
- * @returns {string} The number in English 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
- * toWords(42) // 'forty-two'
231
- * toWords(-3.14) // 'minus three point one four'
232
- * toWords('1000000') // 'one million'
233
- */
234
- function toWords (value) {
235
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
236
-
237
- let result = ''
238
-
239
- if (isNegative) {
240
- result = NEGATIVE + ' '
241
- }
242
-
243
- result += integerToWords(integerPart)
244
-
245
- if (decimalPart) {
246
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
247
- }
248
-
249
- return result
250
- }
251
-
252
- // ============================================================================
253
- // Public API
254
- // ============================================================================
255
-
256
- export { toWords }
@@ -1,21 +0,0 @@
1
- /**
2
- * Converts a numeric value to Spanish 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
- * @param {Object} [options] - Optional configuration
9
- * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
10
- * @returns {string} The number in Spanish words
11
- * @throws {TypeError} If value is not a valid numeric type
12
- * @throws {Error} If value is not a valid number format
13
- *
14
- * @example
15
- * toWords(21) // 'veintiuno'
16
- * toWords(21, {gender: 'feminine'}) // 'veintiuna'
17
- * toWords(1000000) // 'un millón'
18
- */
19
- export function toWords(value: number | string | bigint, options?: {
20
- gender?: "masculine" | "feminine" | undefined;
21
- }): string;
@@ -1,7 +0,0 @@
1
- /**
2
- * Converts a numeric value to Persian words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Persian words
6
- */
7
- export function toWords(value: number | string | bigint): string;
@@ -1,134 +0,0 @@
1
- /**
2
- * Persian language converter - Functional Implementation
3
- *
4
- * Self-contained converter using recursive decomposition.
5
- *
6
- * Key features:
7
- * - "و" (and) conjunction for compound numbers
8
- * - Omit "یک" (one) before thousand
9
- * - Pre-composed hundreds (دویست, سيصد, etc.)
10
- */
11
-
12
- import { parseNumericValue } from '../utils/parse-numeric.js'
13
-
14
- // ============================================================================
15
- // Vocabulary
16
- // ============================================================================
17
-
18
- const ONES = { 1: 'یک', 2: 'دو', 3: 'سه', 4: 'چهار', 5: 'پنج', 6: 'شش', 7: 'هفت', 8: 'هشت', 9: 'نه' }
19
- const TEENS = { 10: 'ده', 11: 'یازده', 12: 'دوازده', 13: 'سیزده', 14: 'چهارده', 15: 'پانزده', 16: 'شانزده', 17: 'هفده', 18: 'هجده', 19: 'نوزده' }
20
- const TENS = { 20: 'بیست', 30: 'سی', 40: 'چهل', 50: 'پنجاه', 60: 'شصت', 70: 'هفتاد', 80: 'هشتاد', 90: 'نود' }
21
- const HUNDREDS = { 100: 'صد', 200: 'دویست', 300: 'سيصد', 400: 'چهار صد', 500: 'پانصد', 600: 'ششصد', 700: 'هفتصد', 800: 'هشتصد', 900: 'نهصد' }
22
-
23
- const THOUSAND = 'هزار'
24
- const MILLION = 'میلیون'
25
-
26
- const ZERO = 'صفر'
27
- const NEGATIVE = 'منفى'
28
- const DECIMAL_SEP = 'ممیّز'
29
-
30
- // ============================================================================
31
- // Conversion Functions
32
- // ============================================================================
33
-
34
- function integerToWords (n) {
35
- if (n === 0n) return ZERO
36
-
37
- // 1-9
38
- if (n <= 9n) {
39
- return ONES[Number(n)]
40
- }
41
-
42
- // 10-19
43
- if (n <= 19n) {
44
- return TEENS[Number(n)]
45
- }
46
-
47
- // 20-99
48
- if (n < 100n) {
49
- const ones = n % 10n
50
- const tens = n - ones
51
- if (ones === 0n) {
52
- return TENS[Number(tens)]
53
- }
54
- return `${TENS[Number(tens)]} و ${ONES[Number(ones)]}`
55
- }
56
-
57
- // 100-999
58
- if (n < 1000n) {
59
- const hundreds = 100n * (n / 100n)
60
- const remainder = n - hundreds
61
- if (remainder === 0n) {
62
- return HUNDREDS[Number(hundreds)]
63
- }
64
- return `${HUNDREDS[Number(hundreds)]} و ${integerToWords(remainder)}`
65
- }
66
-
67
- // 1000-999999
68
- if (n < 1_000_000n) {
69
- const thousandMultiplier = n / 1000n
70
- // Persian omits "one" before thousand: 1000 is just "هزار", not "یک هزار"
71
- const thousandPrefix = thousandMultiplier === 1n
72
- ? ''
73
- : integerToWords(thousandMultiplier) + ' '
74
- const remainder = n % 1000n
75
- const suffix = remainder === 0n ? '' : ' ' + integerToWords(remainder)
76
- return `${thousandPrefix}${THOUSAND}${suffix}`
77
- }
78
-
79
- // 1000000+
80
- const millionMultiplier = n / 1_000_000n
81
- const millionPrefix = integerToWords(millionMultiplier) + ' ' + MILLION
82
- const remainder = n % 1_000_000n
83
- const suffix = remainder === 0n ? '' : ' و ' + integerToWords(remainder)
84
- return `${millionPrefix}${suffix}`
85
- }
86
-
87
- function decimalPartToWords (decimalPart) {
88
- let result = ''
89
- let i = 0
90
-
91
- while (i < decimalPart.length && decimalPart[i] === '0') {
92
- if (result) result += ' '
93
- result += ZERO
94
- i++
95
- }
96
-
97
- const remainder = decimalPart.slice(i)
98
- if (remainder) {
99
- if (result) result += ' '
100
- result += integerToWords(BigInt(remainder))
101
- }
102
-
103
- return result
104
- }
105
-
106
- /**
107
- * Converts a numeric value to Persian words.
108
- *
109
- * @param {number | string | bigint} value - The numeric value to convert
110
- * @returns {string} The number in Persian words
111
- */
112
- function toWords (value) {
113
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
114
-
115
- let result = ''
116
-
117
- if (isNegative) {
118
- result = NEGATIVE + ' '
119
- }
120
-
121
- result += integerToWords(integerPart)
122
-
123
- if (decimalPart) {
124
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
125
- }
126
-
127
- return result
128
- }
129
-
130
- // ============================================================================
131
- // Exports
132
- // ============================================================================
133
-
134
- export { toWords }
@@ -1,14 +0,0 @@
1
- /**
2
- * Converts a numeric value to Finnish words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Finnish 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) // 'kaksikymmentäyksi'
11
- * toWords(1000) // 'tuhat'
12
- * toWords('3.14') // 'kolme pilkku yksi neljä'
13
- */
14
- export function toWords(value: number | string | bigint): string;
@@ -1,245 +0,0 @@
1
- /**
2
- * Finnish language converter - Functional Implementation
3
- *
4
- * A performance-optimized number-to-words converter using precomputed lookup tables.
5
- *
6
- * Key features:
7
- * - Compound tens+ones without spaces: "kaksikymmentäyksi" (21)
8
- * - Teens with "-toista" suffix
9
- * - Omit "yksi" before sata/tuhat but keep before miljoona+
10
- * - Long scale: miljoona, miljardi, biljoona
11
- * - Per-digit decimal reading
12
- */
13
-
14
- import { parseNumericValue } from '../utils/parse-numeric.js'
15
-
16
- // ============================================================================
17
- // Vocabulary (module-level constants)
18
- // ============================================================================
19
-
20
- const ONES = ['', 'yksi', 'kaksi', 'kolme', 'neljä', 'viisi', 'kuusi', 'seitsemän', 'kahdeksan', 'yhdeksän']
21
-
22
- const TEENS = ['kymmenen', 'yksitoista', 'kaksitoista', 'kolmetoista', 'neljätoista', 'viisitoista', 'kuusitoista', 'seitsemäntoista', 'kahdeksantoista', 'yhdeksäntoista']
23
-
24
- // Tens use "kymmentä" suffix
25
- const TENS = ['', '', 'kaksikymmentä', 'kolmekymmentä', 'neljäkymmentä', 'viisikymmentä', 'kuusikymmentä', 'seitsemänkymmentä', 'kahdeksankymmentä', 'yhdeksänkymmentä']
26
-
27
- const HUNDRED = 'sata'
28
- const THOUSAND = 'tuhat'
29
-
30
- const ZERO = 'nolla'
31
- const NEGATIVE = 'miinus'
32
- const DECIMAL_SEP = 'pilkku'
33
-
34
- // Long scale
35
- const SCALES = ['miljoona', 'miljardi', 'biljoona', 'triljoona']
36
-
37
- // ============================================================================
38
- // Precomputed Lookup Tables (built once at module load)
39
- // ============================================================================
40
-
41
- /**
42
- * Builds segment word for 0-999.
43
- * Omits "yksi" before "sata" (hundred).
44
- */
45
- function buildSegment (n) {
46
- if (n === 0) return ''
47
-
48
- const ones = n % 10
49
- const tens = Math.floor(n / 10) % 10
50
- const hundreds = Math.floor(n / 100)
51
-
52
- const parts = []
53
-
54
- // Hundreds - omit "yksi" before sata
55
- if (hundreds > 0) {
56
- if (hundreds === 1) {
57
- parts.push(HUNDRED)
58
- } else {
59
- parts.push(ONES[hundreds] + ' ' + HUNDRED)
60
- }
61
- }
62
-
63
- // Tens and ones
64
- const tensOnes = n % 100
65
-
66
- if (tensOnes === 0) {
67
- // Just hundreds
68
- } else if (tensOnes < 10) {
69
- parts.push(ONES[ones])
70
- } else if (tensOnes < 20) {
71
- parts.push(TEENS[ones])
72
- } else if (ones === 0) {
73
- parts.push(TENS[tens])
74
- } else {
75
- // Compound: "kaksikymmentäyksi" (no space)
76
- parts.push(TENS[tens] + ONES[ones])
77
- }
78
-
79
- return parts.join(' ')
80
- }
81
-
82
- // Precompute all 1000 segment words (0-999)
83
- const SEGMENTS = new Array(1000)
84
-
85
- for (let i = 0; i < 1000; i++) {
86
- SEGMENTS[i] = buildSegment(i)
87
- }
88
-
89
- // ============================================================================
90
- // Conversion Functions
91
- // ============================================================================
92
-
93
- /**
94
- * Converts a non-negative integer to Finnish words.
95
- *
96
- * @param {bigint} n - Non-negative integer to convert
97
- * @returns {string} Finnish words
98
- */
99
- function integerToWords (n) {
100
- if (n === 0n) return ZERO
101
-
102
- // Fast path: numbers < 1000 (direct lookup)
103
- if (n < 1000n) {
104
- return SEGMENTS[Number(n)]
105
- }
106
-
107
- // Fast path: numbers < 1,000,000 (thousands)
108
- if (n < 1_000_000n) {
109
- const thousands = Number(n / 1000n)
110
- const remainder = Number(n % 1000n)
111
-
112
- // Omit "yksi" before tuhat
113
- let result
114
- if (thousands === 1) {
115
- result = THOUSAND
116
- } else {
117
- result = SEGMENTS[thousands] + ' ' + THOUSAND
118
- }
119
-
120
- if (remainder > 0) {
121
- result += ' ' + SEGMENTS[remainder]
122
- }
123
-
124
- return result
125
- }
126
-
127
- // For numbers >= 1,000,000, use scale decomposition
128
- return buildLargeNumberWords(n)
129
- }
130
-
131
- /**
132
- * Builds words for numbers >= 1,000,000.
133
- *
134
- * @param {bigint} n - Number >= 1,000,000
135
- * @returns {string} Finnish words
136
- */
137
- function buildLargeNumberWords (n) {
138
- const numStr = n.toString()
139
- const len = numStr.length
140
-
141
- // Build segments of 3 digits from right to left
142
- const segments = []
143
- const segmentSize = 3
144
-
145
- const remainderLen = len % segmentSize
146
- let pos = 0
147
- if (remainderLen > 0) {
148
- segments.push(Number(numStr.slice(0, remainderLen)))
149
- pos = remainderLen
150
- }
151
- while (pos < len) {
152
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
153
- pos += segmentSize
154
- }
155
-
156
- // Convert segments to words
157
- const parts = []
158
- let scaleIndex = segments.length - 1
159
-
160
- for (let i = 0; i < segments.length; i++) {
161
- const segment = segments[i]
162
-
163
- if (segment !== 0) {
164
- const segmentWord = SEGMENTS[segment]
165
-
166
- if (scaleIndex === 0) {
167
- // Units segment
168
- parts.push(segmentWord)
169
- } else if (scaleIndex === 1) {
170
- // Thousands - omit "yksi" before tuhat
171
- if (segment === 1) {
172
- parts.push(THOUSAND)
173
- } else {
174
- parts.push(segmentWord + ' ' + THOUSAND)
175
- }
176
- } else {
177
- // Millions+ - keep "yksi" before scale words
178
- const scaleWord = SCALES[scaleIndex - 2]
179
- parts.push(segmentWord + ' ' + scaleWord)
180
- }
181
- }
182
-
183
- scaleIndex--
184
- }
185
-
186
- return parts.join(' ')
187
- }
188
-
189
- /**
190
- * Converts decimal digits to Finnish words (per-digit).
191
- *
192
- * @param {string} decimalPart - Decimal digits (without the point)
193
- * @returns {string} Finnish words for decimal part
194
- */
195
- function decimalPartToWords (decimalPart) {
196
- const parts = []
197
-
198
- for (const digit of decimalPart) {
199
- const d = parseInt(digit, 10)
200
- if (d === 0) {
201
- parts.push(ZERO)
202
- } else {
203
- parts.push(ONES[d])
204
- }
205
- }
206
-
207
- return parts.join(' ')
208
- }
209
-
210
- /**
211
- * Converts a numeric value to Finnish words.
212
- *
213
- * @param {number | string | bigint} value - The numeric value to convert
214
- * @returns {string} The number in Finnish words
215
- * @throws {TypeError} If value is not a valid numeric type
216
- * @throws {Error} If value is not a valid number format
217
- *
218
- * @example
219
- * toWords(21) // 'kaksikymmentäyksi'
220
- * toWords(1000) // 'tuhat'
221
- * toWords('3.14') // 'kolme pilkku yksi neljä'
222
- */
223
- function toWords (value) {
224
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
225
-
226
- let result = ''
227
-
228
- if (isNegative) {
229
- result = NEGATIVE + ' '
230
- }
231
-
232
- result += integerToWords(integerPart)
233
-
234
- if (decimalPart) {
235
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
236
- }
237
-
238
- return result
239
- }
240
-
241
- // ============================================================================
242
- // Public API
243
- // ============================================================================
244
-
245
- export { toWords }
@@ -1,7 +0,0 @@
1
- /**
2
- * Converts a numeric value to Filipino words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Filipino words
6
- */
7
- export function toWords(value: number | string | bigint): string;
@@ -1,11 +0,0 @@
1
- /**
2
- * Converts a numeric value to Belgian French words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @param {Object} [options] - Optional configuration
6
- * @param {boolean} [options.withHyphenSeparator=false] - Use hyphens between words
7
- * @returns {string} The number in Belgian French words
8
- */
9
- export function toWords(value: number | string | bigint, options?: {
10
- withHyphenSeparator?: boolean | undefined;
11
- }): string;