n2words 3.1.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 (482) hide show
  1. package/CHANGELOG.md +44 -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/{lib/languages/bn.js → src/bn-BD.js} +110 -6
  157. package/src/cs-CZ.d.ts +49 -0
  158. package/{lib/languages/cs.js → src/cs-CZ.js} +240 -14
  159. package/src/da-DK.d.ts +44 -0
  160. package/{lib/languages/da.js → src/da-DK.js} +131 -11
  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/{lib/languages/en.js → src/en-NZ.js} +164 -31
  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} +228 -18
  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/{lib/languages/fi.js → src/fi-FI.js} +152 -11
  207. package/src/fil-PH.d.ts +37 -0
  208. package/{lib/languages/fil.js → src/fil-PH.js} +144 -8
  209. package/src/fr-BE.d.ts +49 -0
  210. package/{lib/languages → src}/fr-BE.js +175 -13
  211. package/src/fr-FR.d.ts +63 -0
  212. package/{lib/languages/fr.js → src/fr-FR.js} +182 -16
  213. package/src/gu-IN.d.ts +35 -0
  214. package/{lib/languages/gu.js → src/gu-IN.js} +115 -6
  215. package/src/ha-NG.d.ts +37 -0
  216. package/{lib/languages/ha.js → src/ha-NG.js} +107 -8
  217. package/src/hbo-IL.d.ts +39 -0
  218. package/{lib/languages/hbo.js → src/hbo-IL.js} +211 -19
  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/{lib/languages/hi.js → src/hi-IN.js} +116 -6
  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} +99 -8
  229. package/src/it-IT.d.ts +59 -0
  230. package/{lib/languages/it.js → src/it-IT.js} +179 -15
  231. package/src/ja-JP.d.ts +49 -0
  232. package/{lib/languages/ja.js → src/ja-JP.js} +111 -12
  233. package/src/ka-GE.d.ts +44 -0
  234. package/{lib/languages/ka.js → src/ka-GE.js} +113 -11
  235. package/src/kn-IN.d.ts +35 -0
  236. package/{lib/languages/kn.js → src/kn-IN.js} +115 -6
  237. package/src/ko-KR.d.ts +45 -0
  238. package/{lib/languages/ko.js → src/ko-KR.js} +94 -12
  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/{lib/languages/mr.js → src/mr-IN.js} +116 -6
  245. package/src/ms-MY.d.ts +37 -0
  246. package/{lib/languages/ms.js → src/ms-MY.js} +111 -8
  247. package/src/nb-NO.d.ts +44 -0
  248. package/{lib/languages/nb.js → src/nb-NO.js} +153 -11
  249. package/src/nl-NL.d.ts +54 -0
  250. package/{lib/languages/nl.js → src/nl-NL.js} +260 -18
  251. package/src/pa-IN.d.ts +36 -0
  252. package/{lib/languages/pa.js → src/pa-IN.js} +116 -6
  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/{lib/languages/pt.js → src/pt-PT.js} +234 -12
  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} +136 -11
  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} +109 -6
  271. package/src/te-IN.d.ts +35 -0
  272. package/{lib/languages/te.js → src/te-IN.js} +115 -6
  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/{lib/languages/tr.js → src/tr-TR.js} +168 -23
  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/{lib/languages/ur.js → src/ur-PK.js} +116 -6
  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} +102 -11
  291. package/src/yo-NG.d.ts +37 -0
  292. package/{lib/languages/yo.js → src/yo-NG.js} +109 -9
  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/ka.js +0 -3
  350. package/dist/languages/ka.js.map +0 -1
  351. package/dist/languages/kn.js +0 -3
  352. package/dist/languages/kn.js.map +0 -1
  353. package/dist/languages/ko.js +0 -3
  354. package/dist/languages/ko.js.map +0 -1
  355. package/dist/languages/lt.js +0 -3
  356. package/dist/languages/lt.js.map +0 -1
  357. package/dist/languages/lv.js +0 -3
  358. package/dist/languages/lv.js.map +0 -1
  359. package/dist/languages/mr.js +0 -3
  360. package/dist/languages/mr.js.map +0 -1
  361. package/dist/languages/ms.js +0 -3
  362. package/dist/languages/ms.js.map +0 -1
  363. package/dist/languages/nb.js +0 -3
  364. package/dist/languages/nb.js.map +0 -1
  365. package/dist/languages/nl.js +0 -3
  366. package/dist/languages/nl.js.map +0 -1
  367. package/dist/languages/pa.js +0 -3
  368. package/dist/languages/pa.js.map +0 -1
  369. package/dist/languages/pl.js +0 -3
  370. package/dist/languages/pl.js.map +0 -1
  371. package/dist/languages/pt.js +0 -3
  372. package/dist/languages/pt.js.map +0 -1
  373. package/dist/languages/ro.js +0 -3
  374. package/dist/languages/ro.js.map +0 -1
  375. package/dist/languages/ru.js +0 -3
  376. package/dist/languages/ru.js.map +0 -1
  377. package/dist/languages/sr-Cyrl.js +0 -3
  378. package/dist/languages/sr-Cyrl.js.map +0 -1
  379. package/dist/languages/sr-Latn.js +0 -3
  380. package/dist/languages/sr-Latn.js.map +0 -1
  381. package/dist/languages/sv.js +0 -3
  382. package/dist/languages/sv.js.map +0 -1
  383. package/dist/languages/sw.js +0 -3
  384. package/dist/languages/sw.js.map +0 -1
  385. package/dist/languages/ta.js +0 -3
  386. package/dist/languages/ta.js.map +0 -1
  387. package/dist/languages/te.js +0 -3
  388. package/dist/languages/te.js.map +0 -1
  389. package/dist/languages/th.js +0 -3
  390. package/dist/languages/th.js.map +0 -1
  391. package/dist/languages/tr.js +0 -3
  392. package/dist/languages/tr.js.map +0 -1
  393. package/dist/languages/uk.js +0 -3
  394. package/dist/languages/uk.js.map +0 -1
  395. package/dist/languages/ur.js +0 -3
  396. package/dist/languages/ur.js.map +0 -1
  397. package/dist/languages/vi.js +0 -3
  398. package/dist/languages/vi.js.map +0 -1
  399. package/dist/languages/yo.js +0 -3
  400. package/dist/languages/yo.js.map +0 -1
  401. package/dist/languages/zh-Hans.js +0 -3
  402. package/dist/languages/zh-Hans.js.map +0 -1
  403. package/dist/languages/zh-Hant.js +0 -3
  404. package/dist/languages/zh-Hant.js.map +0 -1
  405. package/dist/n2words.js +0 -3
  406. package/dist/n2words.js.map +0 -1
  407. package/lib/languages/am-Latn.d.ts +0 -7
  408. package/lib/languages/am-Latn.js +0 -159
  409. package/lib/languages/am.d.ts +0 -7
  410. package/lib/languages/am.js +0 -159
  411. package/lib/languages/ar.d.ts +0 -17
  412. package/lib/languages/az.d.ts +0 -7
  413. package/lib/languages/az.js +0 -171
  414. package/lib/languages/bn.d.ts +0 -7
  415. package/lib/languages/cs.d.ts +0 -18
  416. package/lib/languages/da.d.ts +0 -14
  417. package/lib/languages/de.d.ts +0 -17
  418. package/lib/languages/de.js +0 -320
  419. package/lib/languages/el.d.ts +0 -14
  420. package/lib/languages/el.js +0 -236
  421. package/lib/languages/en.d.ts +0 -17
  422. package/lib/languages/es.d.ts +0 -21
  423. package/lib/languages/fa.d.ts +0 -7
  424. package/lib/languages/fa.js +0 -134
  425. package/lib/languages/fi.d.ts +0 -14
  426. package/lib/languages/fil.d.ts +0 -7
  427. package/lib/languages/fr-BE.d.ts +0 -11
  428. package/lib/languages/fr.d.ts +0 -21
  429. package/lib/languages/gu.d.ts +0 -7
  430. package/lib/languages/ha.d.ts +0 -7
  431. package/lib/languages/hbo.d.ts +0 -13
  432. package/lib/languages/he.d.ts +0 -13
  433. package/lib/languages/he.js +0 -265
  434. package/lib/languages/hi.d.ts +0 -7
  435. package/lib/languages/hr.d.ts +0 -11
  436. package/lib/languages/hr.js +0 -224
  437. package/lib/languages/hu.d.ts +0 -7
  438. package/lib/languages/id.d.ts +0 -7
  439. package/lib/languages/it.d.ts +0 -19
  440. package/lib/languages/ja.d.ts +0 -17
  441. package/lib/languages/ka.d.ts +0 -17
  442. package/lib/languages/kn.d.ts +0 -7
  443. package/lib/languages/ko.d.ts +0 -14
  444. package/lib/languages/lt.d.ts +0 -18
  445. package/lib/languages/lt.js +0 -301
  446. package/lib/languages/lv.d.ts +0 -18
  447. package/lib/languages/lv.js +0 -312
  448. package/lib/languages/mr.d.ts +0 -7
  449. package/lib/languages/ms.d.ts +0 -7
  450. package/lib/languages/nb.d.ts +0 -14
  451. package/lib/languages/nl.d.ts +0 -26
  452. package/lib/languages/pa.d.ts +0 -7
  453. package/lib/languages/pl.d.ts +0 -22
  454. package/lib/languages/pl.js +0 -317
  455. package/lib/languages/pt.d.ts +0 -17
  456. package/lib/languages/ro.d.ts +0 -18
  457. package/lib/languages/ru.d.ts +0 -11
  458. package/lib/languages/ru.js +0 -245
  459. package/lib/languages/sr-Cyrl.d.ts +0 -11
  460. package/lib/languages/sr-Cyrl.js +0 -221
  461. package/lib/languages/sr-Latn.d.ts +0 -11
  462. package/lib/languages/sr-Latn.js +0 -221
  463. package/lib/languages/sv.d.ts +0 -14
  464. package/lib/languages/sw.d.ts +0 -7
  465. package/lib/languages/ta.d.ts +0 -7
  466. package/lib/languages/te.d.ts +0 -7
  467. package/lib/languages/th.d.ts +0 -7
  468. package/lib/languages/tr.d.ts +0 -18
  469. package/lib/languages/uk.d.ts +0 -11
  470. package/lib/languages/uk.js +0 -224
  471. package/lib/languages/ur.d.ts +0 -7
  472. package/lib/languages/vi.d.ts +0 -17
  473. package/lib/languages/yo.d.ts +0 -7
  474. package/lib/languages/zh-Hans.d.ts +0 -11
  475. package/lib/languages/zh-Hant.d.ts +0 -11
  476. package/lib/n2words.d.ts +0 -55
  477. package/lib/n2words.js +0 -126
  478. package/lib/utils/parse-numeric.d.ts +0 -17
  479. /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
  480. /package/{lib → src}/utils/is-plain-object.js +0 -0
  481. /package/{lib → src}/utils/validate-options.d.ts +0 -0
  482. /package/{lib → src}/utils/validate-options.js +0 -0
@@ -1,320 +0,0 @@
1
- /**
2
- * German language converter - Functional Implementation
3
- *
4
- * Self-contained module with its own input validation, ready for subpath exports.
5
- *
6
- * Key features:
7
- * - Inverted tens-ones order: "einundzwanzig" (one-and-twenty) for 21-99
8
- * - Compound words without spaces below million level
9
- * - Three forms of 1: "eins" (standalone), "ein" (before hundert/tausend), "eine" (before Million+)
10
- * - Scale pluralization: Million → Millionen, Milliarde → Milliarden
11
- * - Spaces only around million+ scale words
12
- * - BigInt modulo for efficient segment extraction
13
- */
14
-
15
- import { parseNumericValue } from '../utils/parse-numeric.js'
16
-
17
- // ============================================================================
18
- // Vocabulary (module-level constants)
19
- // ============================================================================
20
-
21
- // Ones words (1-9), index 0 unused
22
- const ONES = ['', 'eins', 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun']
23
-
24
- // "ein" form for use before hundert/und
25
- const EIN = 'ein'
26
-
27
- // Teens (10-19)
28
- const TEENS = ['zehn', 'elf', 'zwölf', 'dreizehn', 'vierzehn', 'fünfzehn', 'sechzehn', 'siebzehn', 'achtzehn', 'neunzehn']
29
-
30
- // Tens (20-90)
31
- const TENS = ['', '', 'zwanzig', 'dreißig', 'vierzig', 'fünfzig', 'sechzig', 'siebzig', 'achtzig', 'neunzig']
32
-
33
- // Scale words (index 0 = thousand, 1 = million, etc.)
34
- const SCALES = ['tausend', 'Million', 'Milliarde', 'Billion', 'Billiarde', 'Trillion', 'Trilliarde', 'Quadrillion', 'Quadrilliarde']
35
-
36
- // Pluralized scale words (million+)
37
- const SCALES_PLURAL = ['tausend', 'Millionen', 'Milliarden', 'Billionen', 'Billiarden', 'Trillionen', 'Trilliarden', 'Quadrillionen', 'Quadrilliarden']
38
-
39
- const HUNDRED = 'hundert'
40
- const ZERO = 'null'
41
- const NEGATIVE = 'minus'
42
- const DECIMAL_SEP = 'komma'
43
-
44
- // ============================================================================
45
- // Segment Building
46
- // ============================================================================
47
-
48
- /**
49
- * Builds segment word for 0-999 (standalone form, uses "eins").
50
- * German inverts ones and tens: "einundzwanzig" = one-and-twenty
51
- *
52
- * @param {number} n - Number 0-999
53
- * @returns {string} German words for the segment
54
- */
55
- function buildSegment (n) {
56
- if (n === 0) return ''
57
-
58
- const ones = n % 10
59
- const tens = Math.trunc(n / 10) % 10
60
- const hundreds = Math.trunc(n / 100)
61
-
62
- let result = ''
63
-
64
- // Hundreds: "ein" before hundert, not "eins"
65
- if (hundreds > 0) {
66
- result += (hundreds === 1 ? EIN : ONES[hundreds]) + HUNDRED
67
- }
68
-
69
- // Tens and ones
70
- if (tens === 1) {
71
- // Teens
72
- result += TEENS[ones]
73
- } else if (tens >= 2 && ones > 0) {
74
- // Inverted: "einundzwanzig" (one-and-twenty)
75
- // Use "ein" before "und", not "eins"
76
- result += (ones === 1 ? EIN : ONES[ones]) + 'und' + TENS[tens]
77
- } else if (tens >= 2) {
78
- // Just tens
79
- result += TENS[tens]
80
- } else if (ones > 0) {
81
- // Just ones (no tens, possibly after hundreds)
82
- // Use "eins" for standalone/after hundreds
83
- result += ONES[ones]
84
- }
85
-
86
- return result
87
- }
88
-
89
- /**
90
- * Builds segment word for use before "tausend".
91
- * Uses "ein" instead of "eins" for 1.
92
- *
93
- * @param {number} n - Number 0-999
94
- * @returns {string} German words for thousand context
95
- */
96
- function buildSegmentForThousand (n) {
97
- if (n === 0) return ''
98
- if (n === 1) return EIN // "eintausend"
99
-
100
- const ones = n % 10
101
- const tens = Math.trunc(n / 10) % 10
102
- const hundreds = Math.trunc(n / 100)
103
-
104
- let result = ''
105
-
106
- if (hundreds > 0) {
107
- result += (hundreds === 1 ? EIN : ONES[hundreds]) + HUNDRED
108
- }
109
-
110
- if (tens === 1) {
111
- result += TEENS[ones]
112
- } else if (tens >= 2 && ones > 0) {
113
- result += (ones === 1 ? EIN : ONES[ones]) + 'und' + TENS[tens]
114
- } else if (tens >= 2) {
115
- result += TENS[tens]
116
- } else if (ones > 0 && hundreds > 0) {
117
- result += ONES[ones]
118
- } else if (ones > 0) {
119
- result += ONES[ones]
120
- }
121
-
122
- return result
123
- }
124
-
125
- // ============================================================================
126
- // Conversion Functions
127
- // ============================================================================
128
-
129
- /**
130
- * Converts a non-negative integer to German words.
131
- *
132
- * @param {bigint} n - Non-negative integer to convert
133
- * @returns {string} German words
134
- */
135
- function integerToWords (n) {
136
- if (n === 0n) return ZERO
137
-
138
- // Fast path: numbers < 1000
139
- if (n < 1000n) {
140
- return buildSegment(Number(n))
141
- }
142
-
143
- // Fast path: numbers < 1,000,000
144
- if (n < 1_000_000n) {
145
- const thousands = Number(n / 1000n)
146
- const remainder = Number(n % 1000n)
147
-
148
- // Compound: "eintausendzweihundert" (no spaces)
149
- let result = buildSegmentForThousand(thousands) + SCALES[0]
150
-
151
- if (remainder > 0) {
152
- result += buildSegment(remainder)
153
- }
154
-
155
- return result
156
- }
157
-
158
- // For numbers >= 1,000,000, use scale decomposition
159
- return buildLargeNumberWords(n)
160
- }
161
-
162
- /**
163
- * Builds words for numbers >= 1,000,000.
164
- *
165
- * @param {bigint} n - Number >= 1,000,000
166
- * @returns {string} German words
167
- */
168
- function buildLargeNumberWords (n) {
169
- const numStr = n.toString()
170
- const len = numStr.length
171
-
172
- // Build segments of 3 digits from right to left
173
- const segments = []
174
- const segmentSize = 3
175
-
176
- const remainderLen = len % segmentSize
177
- let pos = 0
178
- if (remainderLen > 0) {
179
- segments.push(Number(numStr.slice(0, remainderLen)))
180
- pos = remainderLen
181
- }
182
- while (pos < len) {
183
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
184
- pos += segmentSize
185
- }
186
-
187
- // Convert segments to words
188
- const parts = []
189
- let scaleIndex = segments.length - 1
190
-
191
- for (let i = 0; i < segments.length; i++) {
192
- const segment = segments[i]
193
-
194
- if (segment !== 0) {
195
- if (scaleIndex === 0) {
196
- // Units segment (no scale word)
197
- parts.push({ words: buildSegment(segment), isScale: false, scaleLevel: 0 })
198
- } else if (scaleIndex === 1) {
199
- // Thousands: compound without space
200
- const segWords = buildSegmentForThousand(segment)
201
- parts.push({ words: segWords + SCALES[0], isScale: false, scaleLevel: 1 })
202
- } else {
203
- // Million+ : space around scale word
204
- let segWords
205
- if (segment === 1) {
206
- segWords = 'eine' // "eine Million"
207
- } else {
208
- segWords = buildSegment(segment)
209
- }
210
- const scaleWord = segment === 1 ? SCALES[scaleIndex - 1] : SCALES_PLURAL[scaleIndex - 1]
211
- parts.push({ words: segWords, isScale: false, scaleLevel: scaleIndex })
212
- parts.push({ words: scaleWord, isScale: true, scaleLevel: scaleIndex })
213
- }
214
- }
215
-
216
- scaleIndex--
217
- }
218
-
219
- // Join with German spacing rules: space around million+ scale words
220
- return joinGermanParts(parts)
221
- }
222
-
223
- /**
224
- * Joins parts with German spacing rules.
225
- * Spaces only around million+ scale words.
226
- *
227
- * @param {Array} parts - Parts with metadata
228
- * @returns {string} Joined string
229
- */
230
- function joinGermanParts (parts) {
231
- if (parts.length === 0) return ZERO
232
-
233
- let result = ''
234
-
235
- for (let i = 0; i < parts.length; i++) {
236
- const part = parts[i]
237
- const prevPart = i > 0 ? parts[i - 1] : null
238
-
239
- // Add space before if:
240
- // - Current is a million+ scale word
241
- // - Previous was a million+ scale word
242
- if (i > 0) {
243
- const needsSpace = part.isScale || (prevPart && prevPart.isScale)
244
- if (needsSpace) {
245
- result += ' '
246
- }
247
- }
248
-
249
- result += part.words
250
- }
251
-
252
- return result
253
- }
254
-
255
- /**
256
- * Converts decimal digits to German words.
257
- *
258
- * @param {string} decimalPart - Decimal digits (without the point)
259
- * @returns {string} German words for decimal part
260
- */
261
- function decimalPartToWords (decimalPart) {
262
- let result = ''
263
-
264
- // Handle leading zeros
265
- let i = 0
266
- while (i < decimalPart.length && decimalPart[i] === '0') {
267
- if (result) result += ' '
268
- result += ZERO
269
- i++
270
- }
271
-
272
- // Convert remainder as a single number
273
- const remainder = decimalPart.slice(i)
274
- if (remainder) {
275
- if (result) result += ' '
276
- result += integerToWords(BigInt(remainder))
277
- }
278
-
279
- return result
280
- }
281
-
282
- /**
283
- * Converts a numeric value to German words.
284
- *
285
- * This is the main public API. It accepts any valid numeric input
286
- * (number, string, or bigint) and handles parsing internally.
287
- *
288
- * @param {number | string | bigint} value - The numeric value to convert
289
- * @returns {string} The number in German words
290
- * @throws {TypeError} If value is not a valid numeric type
291
- * @throws {Error} If value is not a valid number format
292
- *
293
- * @example
294
- * toWords(21) // 'einundzwanzig'
295
- * toWords(1000) // 'eintausend'
296
- * toWords(1000000) // 'eine Million'
297
- */
298
- function toWords (value) {
299
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
300
-
301
- let result = ''
302
-
303
- if (isNegative) {
304
- result = NEGATIVE + ' '
305
- }
306
-
307
- result += integerToWords(integerPart)
308
-
309
- if (decimalPart) {
310
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
311
- }
312
-
313
- return result
314
- }
315
-
316
- // ============================================================================
317
- // Public API
318
- // ============================================================================
319
-
320
- export { toWords }
@@ -1,14 +0,0 @@
1
- /**
2
- * Converts a numeric value to Greek words.
3
- *
4
- * @param {number | string | bigint} value - The numeric value to convert
5
- * @returns {string} The number in Greek words
6
- * @throws {TypeError} If value is not a valid numeric type
7
- * @throws {Error} If value is not a valid number format
8
- *
9
- * @example
10
- * toWords(21) // 'είκοσι ένα'
11
- * toWords(1000) // 'χίλια'
12
- * toWords('3.14') // 'τρία κόμμα ένα τέσσερα'
13
- */
14
- export function toWords(value: number | string | bigint): string;
@@ -1,236 +0,0 @@
1
- /**
2
- * Greek language converter - Functional Implementation
3
- *
4
- * Self-contained module with its own input validation, ready for subpath exports.
5
- *
6
- * Key features:
7
- * - Space-separated number composition
8
- * - Implicit "one" (ένα) omission before scale words
9
- * - Irregular hundreds (διακόσια, τριακόσια, etc.)
10
- * - Per-digit decimal reading
11
- */
12
-
13
- import { parseNumericValue } from '../utils/parse-numeric.js'
14
-
15
- // ============================================================================
16
- // Vocabulary (module-level constants)
17
- // ============================================================================
18
-
19
- const ONES = ['', 'ένα', 'δύο', 'τρία', 'τέσσερα', 'πέντε', 'έξι', 'επτά', 'οκτώ', 'εννέα']
20
-
21
- const TEENS = ['δέκα', 'έντεκα', 'δώδεκα', 'δεκατρία', 'δεκατέσσερα', 'δεκαπέντε', 'δεκαέξι', 'δεκαεπτά', 'δεκαοκτώ', 'δεκαεννέα']
22
-
23
- const TENS = ['', '', 'είκοσι', 'τριάντα', 'σαράντα', 'πενήντα', 'εξήντα', 'εβδομήντα', 'ογδόντα', 'ενενήντα']
24
-
25
- // Greek has irregular hundreds
26
- const HUNDREDS = ['', 'εκατό', 'διακόσια', 'τριακόσια', 'τετρακόσια', 'πεντακόσια', 'εξακόσια', 'επτακόσια', 'οκτακόσια', 'εννιακόσια']
27
-
28
- const THOUSAND = 'χίλια'
29
-
30
- const ZERO = 'μηδέν'
31
- const NEGATIVE = 'μείον'
32
- const DECIMAL_SEP = 'κόμμα'
33
-
34
- // Short scale
35
- const SCALES = ['εκατομμύριο', 'δισεκατομμύριο', 'τρισεκατομμύριο']
36
-
37
- // ============================================================================
38
- // Segment Building
39
- // ============================================================================
40
-
41
- /**
42
- * Builds segment word for 0-999.
43
- */
44
- function buildSegment (n) {
45
- if (n === 0) return ''
46
-
47
- const ones = n % 10
48
- const tens = Math.floor(n / 10) % 10
49
- const hundreds = Math.floor(n / 100)
50
-
51
- const parts = []
52
-
53
- // Hundreds (irregular forms)
54
- if (hundreds > 0) {
55
- parts.push(HUNDREDS[hundreds])
56
- }
57
-
58
- // Tens and ones
59
- const tensOnes = n % 100
60
-
61
- if (tensOnes === 0) {
62
- // Just hundreds
63
- } else if (tensOnes < 10) {
64
- parts.push(ONES[ones])
65
- } else if (tensOnes < 20) {
66
- parts.push(TEENS[ones])
67
- } else if (ones === 0) {
68
- parts.push(TENS[tens])
69
- } else {
70
- parts.push(TENS[tens] + ' ' + ONES[ones])
71
- }
72
-
73
- return parts.join(' ')
74
- }
75
-
76
- // ============================================================================
77
- // Conversion Functions
78
- // ============================================================================
79
-
80
- /**
81
- * Converts a non-negative integer to Greek words.
82
- *
83
- * @param {bigint} n - Non-negative integer to convert
84
- * @returns {string} Greek words
85
- */
86
- function integerToWords (n) {
87
- if (n === 0n) return ZERO
88
-
89
- // Fast path: numbers < 1000 (direct lookup)
90
- if (n < 1000n) {
91
- return buildSegment(Number(n))
92
- }
93
-
94
- // Fast path: numbers < 1,000,000 (thousands)
95
- if (n < 1_000_000n) {
96
- const thousands = Number(n / 1000n)
97
- const remainder = Number(n % 1000n)
98
-
99
- // Omit "ένα" before χίλια
100
- let result
101
- if (thousands === 1) {
102
- result = THOUSAND
103
- } else {
104
- result = buildSegment(thousands) + ' ' + THOUSAND
105
- }
106
-
107
- if (remainder > 0) {
108
- result += ' ' + buildSegment(remainder)
109
- }
110
-
111
- return result
112
- }
113
-
114
- // For numbers >= 1,000,000, use scale decomposition
115
- return buildLargeNumberWords(n)
116
- }
117
-
118
- /**
119
- * Builds words for numbers >= 1,000,000.
120
- *
121
- * @param {bigint} n - Number >= 1,000,000
122
- * @returns {string} Greek words
123
- */
124
- function buildLargeNumberWords (n) {
125
- const numStr = n.toString()
126
- const len = numStr.length
127
-
128
- // Build segments of 3 digits from right to left
129
- const segments = []
130
- const segmentSize = 3
131
-
132
- const remainderLen = len % segmentSize
133
- let pos = 0
134
- if (remainderLen > 0) {
135
- segments.push(Number(numStr.slice(0, remainderLen)))
136
- pos = remainderLen
137
- }
138
- while (pos < len) {
139
- segments.push(Number(numStr.slice(pos, pos + segmentSize)))
140
- pos += segmentSize
141
- }
142
-
143
- // Convert segments to words
144
- const parts = []
145
- let scaleIndex = segments.length - 1
146
-
147
- for (let i = 0; i < segments.length; i++) {
148
- const segment = segments[i]
149
-
150
- if (segment !== 0) {
151
- const segmentWord = buildSegment(segment)
152
-
153
- if (scaleIndex === 0) {
154
- // Units segment
155
- parts.push(segmentWord)
156
- } else if (scaleIndex === 1) {
157
- // Thousands - omit "ένα" before χίλια
158
- if (segment === 1) {
159
- parts.push(THOUSAND)
160
- } else {
161
- parts.push(segmentWord + ' ' + THOUSAND)
162
- }
163
- } else {
164
- // Millions+ - omit "ένα" before scale words
165
- const scaleWord = SCALES[scaleIndex - 2]
166
- if (segment === 1) {
167
- parts.push(scaleWord)
168
- } else {
169
- parts.push(segmentWord + ' ' + scaleWord)
170
- }
171
- }
172
- }
173
-
174
- scaleIndex--
175
- }
176
-
177
- return parts.join(' ')
178
- }
179
-
180
- /**
181
- * Converts decimal digits to Greek words (per-digit).
182
- *
183
- * @param {string} decimalPart - Decimal digits (without the point)
184
- * @returns {string} Greek words for decimal part
185
- */
186
- function decimalPartToWords (decimalPart) {
187
- const parts = []
188
-
189
- for (const digit of decimalPart) {
190
- const d = parseInt(digit, 10)
191
- if (d === 0) {
192
- parts.push(ZERO)
193
- } else {
194
- parts.push(ONES[d])
195
- }
196
- }
197
-
198
- return parts.join(' ')
199
- }
200
-
201
- /**
202
- * Converts a numeric value to Greek words.
203
- *
204
- * @param {number | string | bigint} value - The numeric value to convert
205
- * @returns {string} The number in Greek words
206
- * @throws {TypeError} If value is not a valid numeric type
207
- * @throws {Error} If value is not a valid number format
208
- *
209
- * @example
210
- * toWords(21) // 'είκοσι ένα'
211
- * toWords(1000) // 'χίλια'
212
- * toWords('3.14') // 'τρία κόμμα ένα τέσσερα'
213
- */
214
- function toWords (value) {
215
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
216
-
217
- let result = ''
218
-
219
- if (isNegative) {
220
- result = NEGATIVE + ' '
221
- }
222
-
223
- result += integerToWords(integerPart)
224
-
225
- if (decimalPart) {
226
- result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
227
- }
228
-
229
- return result
230
- }
231
-
232
- // ============================================================================
233
- // Public API
234
- // ============================================================================
235
-
236
- export { toWords }
@@ -1,17 +0,0 @@
1
- /**
2
- * Converts a numeric value to English words.
3
- *
4
- * This is the main public API. It accepts any valid numeric input
5
- * (number, string, or bigint) and handles parsing internally.
6
- *
7
- * @param {number | string | bigint} value - The numeric value to convert
8
- * @returns {string} The number in English words
9
- * @throws {TypeError} If value is not a valid numeric type
10
- * @throws {Error} If value is not a valid number format
11
- *
12
- * @example
13
- * toWords(42) // 'forty-two'
14
- * toWords(-3.14) // 'minus three point one four'
15
- * toWords('1000000') // 'one million'
16
- */
17
- export function toWords(value: number | string | bigint): string;
@@ -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;