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,330 +0,0 @@
1
- /**
2
- * Polish 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
- * Polish-specific rules (handled in precomputation):
11
- * - Three-form pluralization: 1 = singular, 2-4 = few, 5+ = many
12
- * - Gender agreement (masculine/feminine for numbers < 1000)
13
- * - Omit "jeden" before scale words (tysiąc, milion, etc.)
14
- * - Irregular hundreds: dwieście, trzysta, czterysta, pięćset...
15
- * - Long scale with -ard forms: miliard, biliard, tryliard
16
- */
17
-
18
- import { parseNumericValue } from '../utils/parse-numeric.js'
19
- import { validateOptions } from '../utils/validate-options.js'
20
-
21
- // ============================================================================
22
- // Vocabulary (module-level constants)
23
- // ============================================================================
24
-
25
- const ONES_MASC = ['', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć']
26
- const ONES_FEM = ['', 'jedna', 'dwie', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć']
27
-
28
- const TEENS = ['dziesięć', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dziewiętnaście']
29
-
30
- const TENS = ['', '', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'pięćdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewięćdziesiąt']
31
-
32
- // Irregular hundreds
33
- const HUNDREDS = ['', 'sto', 'dwieście', 'trzysta', 'czterysta', 'pięćset', 'sześćset', 'siedemset', 'osiemset', 'dziewięćset']
34
-
35
- // Scale words: [singular, few (2-4), many (5+)]
36
- const PLURAL_FORMS = {
37
- 1: ['tysiąc', 'tysiące', 'tysięcy'],
38
- 2: ['milion', 'miliony', 'milionów'],
39
- 3: ['miliard', 'miliardy', 'miliardów'],
40
- 4: ['bilion', 'biliony', 'bilionów'],
41
- 5: ['biliard', 'biliardy', 'biliardów'],
42
- 6: ['trylion', 'tryliony', 'trylionów'],
43
- 7: ['tryliard', 'tryliardy', 'tryliardów'],
44
- 8: ['kwadrylion', 'kwadryliony', 'kwadrylionów'],
45
- 9: ['kwaryliard', 'kwadryliardy', 'kwadryliardów'],
46
- 10: ['kwintylion', 'kwintyliony', 'kwintylionów']
47
- }
48
-
49
- const ZERO = 'zero'
50
- const NEGATIVE = 'minus'
51
- const DECIMAL_SEP = 'przecinek'
52
-
53
- // ============================================================================
54
- // Precomputed Lookup Tables (built once at module load)
55
- // ============================================================================
56
-
57
- /**
58
- * Builds segment word for 0-999 (masculine form).
59
- * @param {number} n - Segment value
60
- * @returns {string} Polish word
61
- */
62
- function buildSegment (n) {
63
- if (n === 0) return ''
64
-
65
- const ones = n % 10
66
- const tens = Math.floor(n / 10) % 10
67
- const hundreds = Math.floor(n / 100)
68
-
69
- const parts = []
70
-
71
- // Hundreds
72
- if (hundreds > 0) {
73
- parts.push(HUNDREDS[hundreds])
74
- }
75
-
76
- // Tens and ones
77
- if (tens === 1) {
78
- // Teens (10-19)
79
- parts.push(TEENS[ones])
80
- } else {
81
- if (tens >= 2) {
82
- parts.push(TENS[tens])
83
- }
84
- if (ones > 0) {
85
- parts.push(ONES_MASC[ones])
86
- }
87
- }
88
-
89
- return parts.join(' ')
90
- }
91
-
92
- /**
93
- * Builds segment word for 0-999 (feminine form - only differs in ones).
94
- * @param {number} n - Segment value
95
- * @returns {string} Polish word
96
- */
97
- function buildSegmentFeminine (n) {
98
- if (n === 0) return ''
99
-
100
- const ones = n % 10
101
- const tens = Math.floor(n / 10) % 10
102
- const hundreds = Math.floor(n / 100)
103
-
104
- const parts = []
105
-
106
- // Hundreds
107
- if (hundreds > 0) {
108
- parts.push(HUNDREDS[hundreds])
109
- }
110
-
111
- // Tens and ones - feminine for ones only
112
- if (tens === 1) {
113
- parts.push(TEENS[ones])
114
- } else {
115
- if (tens >= 2) {
116
- parts.push(TENS[tens])
117
- }
118
- if (ones > 0) {
119
- parts.push(ONES_FEM[ones])
120
- }
121
- }
122
-
123
- return parts.join(' ')
124
- }
125
-
126
- // Precompute all 1000 segment words (0-999)
127
- const SEGMENTS_MASC = new Array(1000)
128
- const SEGMENTS_FEM = new Array(1000)
129
- for (let i = 0; i < 1000; i++) {
130
- SEGMENTS_MASC[i] = buildSegment(i)
131
- SEGMENTS_FEM[i] = buildSegmentFeminine(i)
132
- }
133
-
134
- // ============================================================================
135
- // Helper Functions
136
- // ============================================================================
137
-
138
- /**
139
- * Polish pluralization: 1 = singular, 2-4 = few, else = many.
140
- * Special case: 11-19 always use many form.
141
- *
142
- * @param {bigint} n - Number to pluralize
143
- * @param {string[]} forms - [singular, few, many]
144
- * @returns {string} Correct plural form
145
- */
146
- function pluralize (n, forms) {
147
- if (n === 1n) {
148
- return forms[0]
149
- }
150
-
151
- const lastDigit = n % 10n
152
- const lastTwoDigits = n % 100n
153
-
154
- // Teens (11-19) always use many form
155
- // 2-4 use few form (but not 12-14)
156
- if (lastDigit >= 2n && lastDigit <= 4n && (lastTwoDigits < 10n || lastTwoDigits > 20n)) {
157
- return forms[1]
158
- }
159
-
160
- return forms[2]
161
- }
162
-
163
- // ============================================================================
164
- // Conversion Functions
165
- // ============================================================================
166
-
167
- /**
168
- * Converts a non-negative integer to Polish words.
169
- *
170
- * @param {bigint} n - Non-negative integer to convert
171
- * @param {Object} options - Conversion options
172
- * @returns {string} Polish words
173
- */
174
- function integerToWords (n, options = {}) {
175
- if (n === 0n) return ZERO
176
-
177
- // Fast path: numbers < 1000 (direct lookup)
178
- if (n < 1000n) {
179
- const segments = options.gender === 'feminine' ? SEGMENTS_FEM : SEGMENTS_MASC
180
- return segments[Number(n)]
181
- }
182
-
183
- // Fast path: numbers < 1,000,000 (thousands)
184
- if (n < 1_000_000n) {
185
- const thousands = Number(n / 1000n)
186
- const remainder = Number(n % 1000n)
187
-
188
- const scaleWord = pluralize(BigInt(thousands), PLURAL_FORMS[1])
189
-
190
- let result
191
- if (thousands === 1) {
192
- // Omit "jeden" before tysiąc
193
- result = scaleWord
194
- } else {
195
- result = SEGMENTS_MASC[thousands] + ' ' + scaleWord
196
- }
197
-
198
- if (remainder > 0) {
199
- result += ' ' + SEGMENTS_MASC[remainder]
200
- }
201
-
202
- return result
203
- }
204
-
205
- // For numbers >= 1,000,000, use scale decomposition
206
- return buildLargeNumberWords(n, options)
207
- }
208
-
209
- /**
210
- * Builds words for numbers >= 1,000,000.
211
- * Uses BigInt division for faster segment extraction.
212
- *
213
- * @param {bigint} n - Number >= 1,000,000
214
- * @param {Object} options - Conversion options
215
- * @returns {string} Polish words
216
- */
217
- function buildLargeNumberWords (n, options) {
218
- // Extract segments using BigInt division (faster than string slicing)
219
- // Segments stored least-significant first (index 0 = ones, 1 = thousands, etc.)
220
- const segmentValues = []
221
- let temp = n
222
- while (temp > 0n) {
223
- segmentValues.push(temp % 1000n)
224
- temp = temp / 1000n
225
- }
226
-
227
- // Build result string directly
228
- let result = ''
229
-
230
- for (let i = segmentValues.length - 1; i >= 0; i--) {
231
- const segment = segmentValues[i]
232
- if (segment === 0n) continue
233
-
234
- const segmentWord = SEGMENTS_MASC[Number(segment)]
235
-
236
- if (result) result += ' '
237
-
238
- if (i === 0) {
239
- // Units segment
240
- result += segmentWord
241
- } else {
242
- // Scale word needed
243
- const forms = PLURAL_FORMS[i]
244
- if (forms) {
245
- const scaleWord = pluralize(segment, forms)
246
-
247
- if (segment === 1n) {
248
- // Omit "jeden" before scale words
249
- result += scaleWord
250
- } else {
251
- result += segmentWord + ' ' + scaleWord
252
- }
253
- }
254
- }
255
- }
256
-
257
- return result
258
- }
259
-
260
- /**
261
- * Converts decimal digits to Polish words.
262
- *
263
- * @param {string} decimalPart - Decimal digits (without the point)
264
- * @param {Object} options - Conversion options
265
- * @returns {string} Polish words for decimal part
266
- */
267
- function decimalPartToWords (decimalPart, options) {
268
- let result = ''
269
-
270
- // Handle leading zeros
271
- let i = 0
272
- while (i < decimalPart.length && decimalPart[i] === '0') {
273
- if (result) result += ' '
274
- result += ZERO
275
- i++
276
- }
277
-
278
- // Convert remainder as a single number
279
- const remainder = decimalPart.slice(i)
280
- if (remainder) {
281
- if (result) result += ' '
282
- result += integerToWords(BigInt(remainder), options)
283
- }
284
-
285
- return result
286
- }
287
-
288
- /**
289
- * Converts a numeric value to Polish words.
290
- *
291
- * This is the main public API. It accepts any valid numeric input
292
- * (number, string, or bigint) and handles parsing internally.
293
- *
294
- * @param {number | string | bigint} value - The numeric value to convert
295
- * @param {Object} [options] - Conversion options
296
- * @param {string} [options.gender='masculine'] - Gender for numbers < 1000
297
- * @returns {string} The number in Polish words
298
- * @throws {TypeError} If value is not a valid numeric type
299
- * @throws {Error} If value is not a valid number format
300
- *
301
- * @example
302
- * toWords(1) // 'jeden'
303
- * toWords(1, { gender: 'feminine' }) // 'jedna'
304
- * toWords(1000) // 'tysiąc'
305
- * toWords(2000) // 'dwa tysiące'
306
- */
307
- function toWords (value, options) {
308
- options = validateOptions(options)
309
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
310
-
311
- let result = ''
312
-
313
- if (isNegative) {
314
- result = NEGATIVE + ' '
315
- }
316
-
317
- result += integerToWords(integerPart, options)
318
-
319
- if (decimalPart) {
320
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
321
- }
322
-
323
- return result
324
- }
325
-
326
- // ============================================================================
327
- // Public API
328
- // ============================================================================
329
-
330
- export { toWords }
@@ -1,17 +0,0 @@
1
- /**
2
- * Converts a numeric value to Portuguese 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 Portuguese 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) // 'vinte e um'
14
- * toWords(100) // 'cem'
15
- * toWords(1000000) // 'um milhão'
16
- */
17
- export function toWords(value: number | string | bigint): string;
@@ -1,306 +0,0 @@
1
- /**
2
- * Portuguese 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
- * Portuguese-specific rules (handled in precomputation):
11
- * - "e" conjunction everywhere: vinte e um, cento e um, mil e um
12
- * - "cem" for exact 100, "cento" for 100+ remainder
13
- * - Irregular hundreds: duzentos, trezentos, quatrocentos, etc.
14
- * - Compound scale: milhão (10^6), mil milhões (10^9), bilião (10^12)
15
- * - Omit "um" before "mil"
16
- */
17
-
18
- import { parseNumericValue } from '../utils/parse-numeric.js'
19
-
20
- // ============================================================================
21
- // Vocabulary (module-level constants)
22
- // ============================================================================
23
-
24
- const ONES = ['', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove']
25
- const TEENS = ['dez', 'onze', 'doze', 'treze', 'catorze', 'quinze', 'dezasseis', 'dezassete', 'dezoito', 'dezanove']
26
- const TENS = ['', '', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa']
27
-
28
- // Irregular hundreds
29
- const HUNDREDS = ['', 'cento', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos']
30
-
31
- const THOUSAND = 'mil'
32
- const ZERO = 'zero'
33
- const NEGATIVE = 'menos'
34
- const DECIMAL_SEP = 'vírgula'
35
-
36
- // ============================================================================
37
- // Precomputed Lookup Tables (built once at module load)
38
- // ============================================================================
39
-
40
- /**
41
- * Builds segment word for 0-999 with Portuguese "e" rules.
42
- * Returns the word and whether it's an exact hundred (for "cem" handling).
43
- */
44
- function buildSegment (n) {
45
- if (n === 0) return { word: '', isExactHundred: false }
46
-
47
- // Special case: exact 100 is "cem"
48
- if (n === 100) return { word: 'cem', isExactHundred: true }
49
-
50
- const ones = n % 10
51
- const tens = Math.floor(n / 10) % 10
52
- const hundreds = Math.floor(n / 100)
53
-
54
- const parts = []
55
-
56
- // Hundreds
57
- if (hundreds > 0) {
58
- parts.push(HUNDREDS[hundreds])
59
- }
60
-
61
- // Tens and ones
62
- if (tens === 1) {
63
- // Teens (10-19)
64
- parts.push(TEENS[ones])
65
- } else if (tens >= 2) {
66
- if (ones > 0) {
67
- // Tens + ones with "e": "vinte e um"
68
- parts.push(TENS[tens] + ' e ' + ONES[ones])
69
- } else {
70
- parts.push(TENS[tens])
71
- }
72
- } else if (ones > 0) {
73
- parts.push(ONES[ones])
74
- }
75
-
76
- // Join hundreds with "e": "cento e um", "duzentos e trinta e um"
77
- const word = parts.join(' e ')
78
-
79
- return { word, isExactHundred: hundreds > 0 && tens === 0 && ones === 0 }
80
- }
81
-
82
- // Precompute all 1000 segment words (0-999)
83
- const SEGMENTS = new Array(1000)
84
- const SEGMENTS_STARTS_WITH_HUNDREDS = new Array(1000)
85
-
86
- for (let i = 0; i < 1000; i++) {
87
- const result = buildSegment(i)
88
- SEGMENTS[i] = result.word
89
- // Precompute whether segment starts with hundreds (100-999)
90
- SEGMENTS_STARTS_WITH_HUNDREDS[i] = i >= 100
91
- }
92
-
93
- // ============================================================================
94
- // Scale Word Lookup (precomputed for common scales)
95
- // ============================================================================
96
-
97
- // Precompute scale words for singular and plural forms
98
- // Index 1 = thousands, 2 = millions, 3 = billions (mil milhões), etc.
99
- const SCALE_WORDS_SINGULAR = [
100
- '', // 0 unused
101
- THOUSAND, // 1: mil
102
- 'milhão', // 2: 10^6
103
- 'mil milhões', // 3: 10^9 (compound)
104
- 'bilião', // 4: 10^12
105
- 'mil biliões', // 5: 10^15 (compound)
106
- 'trilião', // 6: 10^18
107
- 'mil triliões', // 7: 10^21 (compound)
108
- 'quatrilião' // 8: 10^24
109
- ]
110
-
111
- const SCALE_WORDS_PLURAL = [
112
- '', // 0 unused
113
- THOUSAND, // 1: mil (same)
114
- 'milhões', // 2: 10^6
115
- 'mil milhões', // 3: 10^9 (compound, same)
116
- 'biliões', // 4: 10^12
117
- 'mil biliões', // 5: 10^15 (compound, same)
118
- 'triliões', // 6: 10^18
119
- 'mil triliões', // 7: 10^21 (compound, same)
120
- 'quatriliões' // 8: 10^24
121
- ]
122
-
123
- // ============================================================================
124
- // Conversion Functions
125
- // ============================================================================
126
-
127
- /**
128
- * Converts a non-negative integer to Portuguese words.
129
- *
130
- * @param {bigint} n - Non-negative integer to convert
131
- * @returns {string} Portuguese words
132
- */
133
- function integerToWords (n) {
134
- if (n === 0n) return ZERO
135
-
136
- // Fast path: numbers < 1000 (direct lookup)
137
- if (n < 1000n) {
138
- return SEGMENTS[Number(n)]
139
- }
140
-
141
- // Fast path: numbers < 1,000,000 (thousands)
142
- if (n < 1_000_000n) {
143
- const thousands = Number(n / 1000n)
144
- const remainder = Number(n % 1000n)
145
-
146
- let result
147
- if (thousands === 1) {
148
- // "mil" not "um mil"
149
- result = THOUSAND
150
- } else {
151
- result = SEGMENTS[thousands] + ' ' + THOUSAND
152
- }
153
-
154
- if (remainder > 0) {
155
- // Insert "e" before remainder if it doesn't start with hundreds (< 100)
156
- if (!SEGMENTS_STARTS_WITH_HUNDREDS[remainder]) {
157
- result += ' e ' + SEGMENTS[remainder]
158
- } else {
159
- result += ' ' + SEGMENTS[remainder]
160
- }
161
- }
162
-
163
- return result
164
- }
165
-
166
- // For numbers >= 1,000,000, use scale decomposition
167
- return buildLargeNumberWords(n)
168
- }
169
-
170
- /**
171
- * Builds words for numbers >= 1,000,000.
172
- * Uses BigInt division for faster segment extraction.
173
- *
174
- * @param {bigint} n - Number >= 1,000,000
175
- * @returns {string} Portuguese words
176
- */
177
- function buildLargeNumberWords (n) {
178
- // Extract segments using BigInt division
179
- // Segments stored least-significant first (index 0 = ones, 1 = thousands, etc.)
180
- const segments = []
181
- let temp = n
182
- while (temp > 0n) {
183
- segments.push(Number(temp % 1000n))
184
- temp = temp / 1000n
185
- }
186
-
187
- // Find the first non-zero segment index (lowest scale with value)
188
- let firstNonZeroIdx = 0
189
- for (let i = 0; i < segments.length; i++) {
190
- if (segments[i] !== 0) {
191
- firstNonZeroIdx = i
192
- break
193
- }
194
- }
195
-
196
- // Build result string directly
197
- let result = ''
198
- let prevWasScale = false
199
-
200
- for (let i = segments.length - 1; i >= 0; i--) {
201
- const segment = segments[i]
202
- if (segment === 0) continue
203
-
204
- const segmentWord = SEGMENTS[segment]
205
- const isLastSegment = (i === firstNonZeroIdx)
206
-
207
- // Add "e" before final segment if previous was scale and this doesn't start with hundreds
208
- if (result && isLastSegment && prevWasScale && !SEGMENTS_STARTS_WITH_HUNDREDS[segment]) {
209
- result += ' e'
210
- }
211
-
212
- if (result) result += ' '
213
-
214
- if (i === 0) {
215
- // Units segment
216
- result += segmentWord
217
- prevWasScale = false
218
- } else if (i === 1) {
219
- // Thousands
220
- if (segment === 1) {
221
- result += THOUSAND
222
- } else {
223
- result += segmentWord + ' ' + THOUSAND
224
- }
225
- prevWasScale = true
226
- } else {
227
- // Million and above - use precomputed scale arrays
228
- const scaleWord = segment === 1 ? SCALE_WORDS_SINGULAR[i] : SCALE_WORDS_PLURAL[i]
229
- if (segment === 1) {
230
- result += 'um ' + scaleWord
231
- } else {
232
- result += segmentWord + ' ' + scaleWord
233
- }
234
- prevWasScale = true
235
- }
236
- }
237
-
238
- return result
239
- }
240
-
241
- /**
242
- * Converts decimal digits to Portuguese words.
243
- *
244
- * @param {string} decimalPart - Decimal digits (without the point)
245
- * @returns {string} Portuguese words for decimal part
246
- */
247
- function decimalPartToWords (decimalPart) {
248
- let result = ''
249
-
250
- // Handle leading zeros
251
- let i = 0
252
- while (i < decimalPart.length && decimalPart[i] === '0') {
253
- if (result) result += ' '
254
- result += ZERO
255
- i++
256
- }
257
-
258
- // Convert remainder as a single number
259
- const remainder = decimalPart.slice(i)
260
- if (remainder) {
261
- if (result) result += ' '
262
- result += integerToWords(BigInt(remainder))
263
- }
264
-
265
- return result
266
- }
267
-
268
- /**
269
- * Converts a numeric value to Portuguese words.
270
- *
271
- * This is the main public API. It accepts any valid numeric input
272
- * (number, string, or bigint) and handles parsing internally.
273
- *
274
- * @param {number | string | bigint} value - The numeric value to convert
275
- * @returns {string} The number in Portuguese words
276
- * @throws {TypeError} If value is not a valid numeric type
277
- * @throws {Error} If value is not a valid number format
278
- *
279
- * @example
280
- * toWords(21) // 'vinte e um'
281
- * toWords(100) // 'cem'
282
- * toWords(1000000) // 'um milhão'
283
- */
284
- function toWords (value) {
285
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
286
-
287
- let result = ''
288
-
289
- if (isNegative) {
290
- result = NEGATIVE + ' '
291
- }
292
-
293
- result += integerToWords(integerPart)
294
-
295
- if (decimalPart) {
296
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
297
- }
298
-
299
- return result
300
- }
301
-
302
- // ============================================================================
303
- // Public API
304
- // ============================================================================
305
-
306
- export { toWords }
@@ -1,18 +0,0 @@
1
- /**
2
- * Converts a numeric value to Romanian words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @param {Object} [options] - Conversion options
6
- * @param {string} [options.gender='masculine'] - Gender for numbers
7
- * @returns {string} The number in Romanian words
8
- * @throws {TypeError} If value is not a valid numeric type
9
- * @throws {Error} If value is not a valid number format
10
- *
11
- * @example
12
- * toWords(21) // 'douăzeci și unu'
13
- * toWords(1, { gender: 'feminine' }) // 'una'
14
- * toWords(1000) // 'o mie'
15
- */
16
- export function toWords(value: number | string | bigint, options?: {
17
- gender?: string | undefined;
18
- }): string;
@@ -1,11 +0,0 @@
1
- /**
2
- * Converts a numeric value to Russian words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @param {Object} [options] - Optional configuration
6
- * @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
7
- * @returns {string} The number in Russian words
8
- */
9
- export function toWords(value: number | string | bigint, options?: {
10
- gender?: "masculine" | "feminine" | undefined;
11
- }): string;