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,377 +0,0 @@
1
- /**
2
- * Italian 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 1000 segment values (0-999) at module load.
8
- * This eliminates all per-call string manipulation for segment conversion.
9
- *
10
- * Italian-specific rules (handled in precomputation):
11
- * - Concatenation without spaces within segments ("ventotto" not "venti otto")
12
- * - Phonetic vowel elision: "venti" + "otto" → "ventotto"
13
- * - Accent on final "tre" in compounds: "ventitré"
14
- * - mille/mila alternation for thousands
15
- * - Scale words: milione/milioni, miliardo/miliardi, etc.
16
- * - "e" connector before simple final remainder
17
- */
18
-
19
- import { parseNumericValue } from '../utils/parse-numeric.js'
20
-
21
- // ============================================================================
22
- // Vocabulary (module-level constants)
23
- // ============================================================================
24
-
25
- // Base vocabulary for building lookup tables
26
- const ONES = ['', 'uno', 'due', 'tre', 'quattro', 'cinque', 'sei', 'sette', 'otto', 'nove']
27
- const TEENS = ['dieci', 'undici', 'dodici', 'tredici', 'quattordici', 'quindici', 'sedici', 'diciassette', 'diciotto', 'diciannove']
28
- const TENS = ['', '', 'venti', 'trenta', 'quaranta', 'cinquanta', 'sessanta', 'settanta', 'ottanta', 'novanta']
29
- const HUNDREDS = ['', 'cento', 'duecento', 'trecento', 'quattrocento', 'cinquecento', 'seicento', 'settecento', 'ottocento', 'novecento']
30
-
31
- const ZERO = 'zero'
32
- const NEGATIVE = 'meno'
33
- const DECIMAL_SEP = 'virgola'
34
-
35
- // Thousands
36
- const THOUSAND_SINGULAR = 'mille'
37
- const THOUSAND_PLURAL_SUFFIX = 'mila'
38
-
39
- // Scale word generation
40
- const SCALE_PREFIXES = ['m', 'b', 'tr', 'quadr', 'quint', 'sest', 'sett', 'ott', 'nov', 'dec']
41
-
42
- // ============================================================================
43
- // Precomputed Lookup Tables (built once at module load)
44
- // ============================================================================
45
-
46
- /**
47
- * Applies Italian phonetic vowel elision rules.
48
- * Only used during table construction.
49
- */
50
- function applyPhoneticRules (str) {
51
- return str
52
- .replace(/io/g, 'o')
53
- .replace(/ao/g, 'o')
54
- .replace(/oo/g, 'o')
55
- .replace(/iu/g, 'u')
56
- .replace(/au/g, 'u')
57
- }
58
-
59
- /**
60
- * Adds accent to final "tre" in a word.
61
- * Only used during table construction.
62
- */
63
- function accentuateTre (word) {
64
- if (word.length > 3 && word.slice(-3) === 'tre') {
65
- return word.slice(0, -3) + 'tré'
66
- }
67
- return word
68
- }
69
-
70
- /**
71
- * Builds the segment word for a number 0-999.
72
- * Only used during table construction.
73
- */
74
- function buildSegmentWord (n) {
75
- if (n === 0) return ''
76
-
77
- const ones = n % 10
78
- const tens = Math.floor(n / 10) % 10
79
- const hundreds = Math.floor(n / 100)
80
-
81
- let result = ''
82
-
83
- // Hundreds
84
- if (hundreds > 0) {
85
- result = HUNDREDS[hundreds]
86
- }
87
-
88
- // Tens and ones
89
- if (tens === 0 && ones === 0) {
90
- // Nothing more
91
- } else if (tens === 1) {
92
- // Teens: 10-19
93
- result += TEENS[ones]
94
- } else if (tens >= 2) {
95
- // 20-99
96
- result += TENS[tens]
97
- if (ones > 0) {
98
- result += ONES[ones]
99
- }
100
- } else if (ones > 0) {
101
- // 1-9 (tens === 0)
102
- result += ONES[ones]
103
- }
104
-
105
- // Apply phonetic rules and accent
106
- return accentuateTre(applyPhoneticRules(result))
107
- }
108
-
109
- /**
110
- * Builds segment word with "un" for scale context (millions, billions).
111
- * Only used during table construction.
112
- */
113
- function buildSegmentWordForScale (n) {
114
- if (n === 0) return ''
115
- if (n === 1) return 'un' // "un milione" not "uno milione"
116
-
117
- const ones = n % 10
118
- const tens = Math.floor(n / 10) % 10
119
- const hundreds = Math.floor(n / 100)
120
-
121
- let result = ''
122
-
123
- if (hundreds > 0) {
124
- result = HUNDREDS[hundreds]
125
- }
126
-
127
- if (tens === 0 && ones === 0) {
128
- // Nothing more
129
- } else if (tens === 1) {
130
- result += TEENS[ones]
131
- } else if (tens >= 2) {
132
- result += TENS[tens]
133
- if (ones > 0) {
134
- result += ONES[ones]
135
- }
136
- } else if (ones > 0) {
137
- // 1-9 with tens === 0
138
- // "un" only for exactly 1, others normal
139
- result += ONES[ones]
140
- }
141
-
142
- return accentuateTre(applyPhoneticRules(result))
143
- }
144
-
145
- // Precompute all 1000 segment words (0-999)
146
- // SEGMENTS[n] gives the Italian word for n within a segment
147
- const SEGMENTS = new Array(1000)
148
- for (let i = 0; i < 1000; i++) {
149
- SEGMENTS[i] = buildSegmentWord(i)
150
- }
151
-
152
- // Precompute segment words for scale context (uses "un" for 1)
153
- const SEGMENTS_SCALE = new Array(1000)
154
- for (let i = 0; i < 1000; i++) {
155
- SEGMENTS_SCALE[i] = buildSegmentWordForScale(i)
156
- }
157
-
158
- // Precompute thousands words (1-999) + "mila" suffix
159
- // THOUSANDS[n] gives the word for n thousand (e.g., THOUSANDS[2] = "duemila")
160
- const THOUSANDS = new Array(1000)
161
- THOUSANDS[0] = ''
162
- THOUSANDS[1] = THOUSAND_SINGULAR // "mille"
163
- for (let i = 2; i < 1000; i++) {
164
- THOUSANDS[i] = applyPhoneticRules(SEGMENTS[i] + THOUSAND_PLURAL_SUFFIX)
165
- }
166
-
167
- // ============================================================================
168
- // Scale Word Functions
169
- // ============================================================================
170
-
171
- /**
172
- * Gets singular scale word for index.
173
- * @param {number} scaleIndex - 2=million, 3=billion, etc.
174
- */
175
- function getScaleWordSingular (scaleIndex) {
176
- if (scaleIndex < 2) return ''
177
- const prefixIndex = Math.floor((scaleIndex - 2) / 2)
178
- const isIardo = (scaleIndex - 2) % 2 === 1
179
- const prefix = SCALE_PREFIXES[prefixIndex]
180
- if (!prefix) return ''
181
- return prefix + (isIardo ? 'iliardo' : 'ilione')
182
- }
183
-
184
- /**
185
- * Gets plural scale word for index.
186
- * @param {number} scaleIndex - 2=million, 3=billion, etc.
187
- */
188
- function getScaleWordPlural (scaleIndex) {
189
- if (scaleIndex < 2) return ''
190
- const prefixIndex = Math.floor((scaleIndex - 2) / 2)
191
- const isIardo = (scaleIndex - 2) % 2 === 1
192
- const prefix = SCALE_PREFIXES[prefixIndex]
193
- if (!prefix) return ''
194
- return prefix + (isIardo ? 'iliardi' : 'ilioni')
195
- }
196
-
197
- // ============================================================================
198
- // Conversion Functions
199
- // ============================================================================
200
-
201
- /**
202
- * Converts a non-negative integer to Italian words.
203
- *
204
- * @param {bigint} n - Non-negative integer to convert
205
- * @returns {string} Italian words
206
- */
207
- function integerToWords (n) {
208
- if (n === 0n) return ZERO
209
-
210
- // Fast path: numbers < 1000 (direct lookup)
211
- if (n < 1000n) {
212
- return SEGMENTS[Number(n)]
213
- }
214
-
215
- // Fast path: numbers < 1,000,000 (thousands)
216
- if (n < 1_000_000n) {
217
- const thousands = Number(n / 1000n)
218
- const remainder = Number(n % 1000n)
219
-
220
- if (remainder === 0) {
221
- return THOUSANDS[thousands]
222
- }
223
-
224
- // Concatenate thousands + remainder
225
- return THOUSANDS[thousands] + SEGMENTS[remainder]
226
- }
227
-
228
- // For numbers >= 1,000,000, use scale decomposition
229
- return buildLargeNumberWords(n)
230
- }
231
-
232
- /**
233
- * Builds words for numbers >= 1,000,000.
234
- *
235
- * @param {bigint} n - Number >= 1,000,000
236
- * @returns {string} Italian words
237
- */
238
- function buildLargeNumberWords (n) {
239
- const parts = []
240
- let remaining = n
241
-
242
- // Find the highest scale
243
- let maxScale = 2
244
- let testValue = 1_000_000n
245
- while (testValue * 1000n <= remaining) {
246
- testValue *= 1000n
247
- maxScale++
248
- }
249
-
250
- // Process from highest scale down
251
- for (let scaleIndex = maxScale; scaleIndex >= 0; scaleIndex--) {
252
- const divisor = 1000n ** BigInt(scaleIndex)
253
- const segment = remaining / divisor
254
- remaining = remaining % divisor
255
-
256
- if (segment === 0n) continue
257
-
258
- const segNum = Number(segment)
259
-
260
- if (scaleIndex >= 2) {
261
- // Millions and above: "segment scaleWord"
262
- const segmentWords = SEGMENTS_SCALE[segNum]
263
- const scaleWord = segment === 1n
264
- ? getScaleWordSingular(scaleIndex)
265
- : getScaleWordPlural(scaleIndex)
266
- parts.push(segmentWords + ' ' + scaleWord)
267
- } else if (scaleIndex === 1) {
268
- // Thousands: use precomputed table
269
- parts.push(THOUSANDS[segNum])
270
- } else {
271
- // Units (scaleIndex === 0): just the segment
272
- parts.push(SEGMENTS[segNum])
273
- }
274
- }
275
-
276
- return joinPartsWithConnector(parts)
277
- }
278
-
279
- /**
280
- * Joins parts with Italian connector rules.
281
- * Uses "e" before simple (non-compound) final segment.
282
- *
283
- * @param {string[]} parts - Parts to join
284
- * @returns {string} Joined string
285
- */
286
- function joinPartsWithConnector (parts) {
287
- const len = parts.length
288
- if (len === 0) return ''
289
- if (len === 1) return parts[0]
290
-
291
- // Check if last part is "simple" (no space = no scale word)
292
- const lastPart = parts[len - 1]
293
- if (lastPart.indexOf(' ') === -1) {
294
- // Join all but last with space, then add "e" connector
295
- let result = parts[0]
296
- for (let i = 1; i < len - 1; i++) {
297
- result += ' ' + parts[i]
298
- }
299
- return result + ' e ' + lastPart
300
- }
301
-
302
- // Join with spaces
303
- let result = parts[0]
304
- for (let i = 1; i < len; i++) {
305
- result += ' ' + parts[i]
306
- }
307
- return result
308
- }
309
-
310
- /**
311
- * Converts decimal digits to Italian words.
312
- *
313
- * @param {string} decimalPart - Decimal digits (without the point)
314
- * @returns {string} Italian words for decimal part
315
- */
316
- function decimalPartToWords (decimalPart) {
317
- let result = ''
318
-
319
- // Handle leading zeros
320
- let i = 0
321
- while (i < decimalPart.length && decimalPart[i] === '0') {
322
- if (result) result += ' '
323
- result += ZERO
324
- i++
325
- }
326
-
327
- // Convert remainder as a single number
328
- const remainder = decimalPart.slice(i)
329
- if (remainder) {
330
- if (result) result += ' '
331
- result += integerToWords(BigInt(remainder))
332
- }
333
-
334
- return result
335
- }
336
-
337
- /**
338
- * Converts a numeric value to Italian words.
339
- *
340
- * This is the main public API. It accepts any valid numeric input
341
- * (number, string, or bigint) and handles parsing internally.
342
- *
343
- * @param {number | string | bigint} value - The numeric value to convert
344
- * @returns {string} The number in Italian words
345
- * @throws {TypeError} If value is not a valid numeric type
346
- * @throws {Error} If value is not a valid number format
347
- *
348
- * @example
349
- * toWords(28) // 'ventotto'
350
- * toWords(23) // 'ventitré'
351
- * toWords(1000) // 'mille'
352
- * toWords(2000) // 'duemila'
353
- * toWords(1000000) // 'un milione'
354
- */
355
- function toWords (value) {
356
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
357
-
358
- let result = ''
359
-
360
- if (isNegative) {
361
- result = NEGATIVE + ' '
362
- }
363
-
364
- result += integerToWords(integerPart)
365
-
366
- if (decimalPart) {
367
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
368
- }
369
-
370
- return result
371
- }
372
-
373
- // ============================================================================
374
- // Public API
375
- // ============================================================================
376
-
377
- export { toWords }
@@ -1,17 +0,0 @@
1
- /**
2
- * Converts a numeric value to Japanese 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 Japanese kanji 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) // '四十二'
14
- * toWords(10000) // '一万'
15
- * toWords(100000000) // '一億'
16
- */
17
- export function toWords(value: number | string | bigint): string;
@@ -1,7 +0,0 @@
1
- /**
2
- * Converts a numeric value to Kannada words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Kannada words
6
- */
7
- export function toWords(value: number | string | bigint): string;
@@ -1,14 +0,0 @@
1
- /**
2
- * Converts a numeric value to Korean words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Korean 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(10000) // '만'
12
- * toWords(1000000) // '백만'
13
- */
14
- export function toWords(value: number | string | bigint): string;
@@ -1,18 +0,0 @@
1
- /**
2
- * Converts a numeric value to Lithuanian 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 < 1000
7
- * @returns {string} The number in Lithuanian 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(42) // 'keturiasdešimt du'
13
- * toWords(1, { gender: 'feminine' }) // 'viena'
14
- * toWords(1000000) // 'vienas milijonas'
15
- */
16
- export function toWords(value: number | string | bigint, options?: {
17
- gender?: string | undefined;
18
- }): string;