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
package/src/en-BD.js ADDED
@@ -0,0 +1,415 @@
1
+ /**
2
+ * English (Bangladesh) language converter
3
+ *
4
+ * CLDR: en-BD | English as used in Bangladesh
5
+ *
6
+ * Key features:
7
+ * - Indian numbering system (thousand, lakh, crore, arab, kharab)
8
+ * - 3-2-2 grouping pattern (last 3 digits, then groups of 2)
9
+ * - British-style "and" after hundreds
10
+ * - Bangladeshi Taka currency (BDT)
11
+ */
12
+
13
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
14
+ import { parseCurrencyValue } from './utils/parse-currency.js'
15
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
16
+ import { validateOptions } from './utils/validate-options.js'
17
+
18
+ // ============================================================================
19
+ // Vocabulary (module-level constants)
20
+ // ============================================================================
21
+
22
+ const ONES = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
23
+ const TEENS = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
24
+ const TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
25
+
26
+ // Indian numbering scales: 10^3, 10^5, 10^7, 10^9, 10^11, 10^13, 10^15, 10^17
27
+ const SCALES = ['thousand', 'lakh', 'crore', 'arab', 'kharab', 'neel', 'padma', 'shankh']
28
+
29
+ const HUNDRED = 'hundred'
30
+ const ZERO = 'zero'
31
+ const NEGATIVE = 'minus'
32
+ const DECIMAL_SEP = 'point'
33
+
34
+ // Ordinal vocabulary
35
+ const ORDINAL_ONES = ['', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth']
36
+ const ORDINAL_TEENS = ['tenth', 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth']
37
+ const ORDINAL_TENS = ['', '', 'twentieth', 'thirtieth', 'fortieth', 'fiftieth', 'sixtieth', 'seventieth', 'eightieth', 'ninetieth']
38
+
39
+ // Currency vocabulary (Bangladeshi Taka)
40
+ const TAKA = 'taka'
41
+ const PAISA = 'paisa'
42
+ const PAISE = 'paise'
43
+
44
+ // ============================================================================
45
+ // Segment Building
46
+ // ============================================================================
47
+
48
+ // Reusable result object to avoid allocation per call
49
+ const segmentResult = { word: '', hasHundred: false }
50
+
51
+ /**
52
+ * Builds words for a 0-999 segment (British-style with "and" after hundreds).
53
+ *
54
+ * @param {number} n - Number 0-999
55
+ * @returns {{ word: string, hasHundred: boolean }}
56
+ */
57
+ function buildSegment (n) {
58
+ if (n === 0) {
59
+ segmentResult.word = ''
60
+ segmentResult.hasHundred = false
61
+ return segmentResult
62
+ }
63
+
64
+ const ones = n % 10
65
+ const tens = Math.trunc(n / 10) % 10
66
+ const hundreds = Math.trunc(n / 100)
67
+
68
+ // Build tens-ones part first
69
+ let tensOnes = ''
70
+ if (tens === 1) {
71
+ tensOnes = TEENS[ones]
72
+ } else if (tens >= 2) {
73
+ tensOnes = ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
74
+ } else if (ones > 0) {
75
+ tensOnes = ONES[ones]
76
+ }
77
+
78
+ // Hundreds place (British-style: "and" after hundreds)
79
+ if (hundreds > 0) {
80
+ if (tensOnes) {
81
+ segmentResult.word = ONES[hundreds] + ' ' + HUNDRED + ' and ' + tensOnes
82
+ } else {
83
+ segmentResult.word = ONES[hundreds] + ' ' + HUNDRED
84
+ }
85
+ segmentResult.hasHundred = true
86
+ } else {
87
+ segmentResult.word = tensOnes
88
+ segmentResult.hasHundred = false
89
+ }
90
+
91
+ return segmentResult
92
+ }
93
+
94
+ /**
95
+ * Builds words for a 0-99 segment (no hundreds).
96
+ *
97
+ * @param {number} n - Number 0-99
98
+ * @returns {string}
99
+ */
100
+ function buildSmallSegment (n) {
101
+ if (n === 0) return ''
102
+
103
+ const ones = n % 10
104
+ const tens = Math.trunc(n / 10)
105
+
106
+ if (tens === 1) {
107
+ return TEENS[ones]
108
+ } else if (tens >= 2) {
109
+ return ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
110
+ }
111
+ return ONES[ones]
112
+ }
113
+
114
+ // ============================================================================
115
+ // Conversion Functions
116
+ // ============================================================================
117
+
118
+ /**
119
+ * Converts a non-negative integer to English words using Indian numbering.
120
+ *
121
+ * Uses BigInt modulo for segment extraction.
122
+ * South Asian 3-2-2 grouping: first 3 digits, then groups of 2.
123
+ *
124
+ * @param {bigint} n - Non-negative integer to convert
125
+ * @returns {string} English words
126
+ */
127
+ function integerToWords (n) {
128
+ if (n === 0n) return ZERO
129
+
130
+ // Fast path: numbers < 1000
131
+ if (n < 1000n) {
132
+ return buildSegment(Number(n)).word
133
+ }
134
+
135
+ // Extract segments using BigInt modulo
136
+ // First segment is 3 digits (units), rest are 2 digits (thousands, lakhs, crores, etc.)
137
+ // Segments stored least-significant first
138
+ const segments = []
139
+
140
+ // First segment: last 3 digits
141
+ segments.push(Number(n % 1000n))
142
+ let temp = n / 1000n
143
+
144
+ // Remaining segments: 2 digits each (thousand, lakh, crore, etc.)
145
+ while (temp > 0n) {
146
+ segments.push(Number(temp % 100n))
147
+ temp = temp / 100n
148
+ }
149
+
150
+ // Build result string (process from most-significant to least)
151
+ const words = []
152
+ for (let i = segments.length - 1; i >= 0; i--) {
153
+ const segment = segments[i]
154
+ if (segment === 0) continue
155
+
156
+ if (i === 0) {
157
+ // First segment (units place) can be 0-999
158
+ const { word, hasHundred } = buildSegment(segment)
159
+ // Add "and" before final segment if previous segments exist and no hundred
160
+ if (words.length > 0 && !hasHundred) {
161
+ words.push('and')
162
+ }
163
+ words.push(word)
164
+ } else {
165
+ // Other segments are 0-99
166
+ words.push(buildSmallSegment(segment))
167
+ // Add scale word
168
+ if (SCALES[i - 1]) {
169
+ words.push(SCALES[i - 1])
170
+ }
171
+ }
172
+ }
173
+
174
+ return words.join(' ')
175
+ }
176
+
177
+ /**
178
+ * Converts decimal digits to English words.
179
+ *
180
+ * @param {string} decimalPart - Decimal digits (without the point)
181
+ * @returns {string} English words for decimal part
182
+ */
183
+ function decimalPartToWords (decimalPart) {
184
+ let result = ''
185
+
186
+ // Handle leading zeros
187
+ let i = 0
188
+ while (i < decimalPart.length && decimalPart[i] === '0') {
189
+ if (result) result += ' '
190
+ result += ZERO
191
+ i++
192
+ }
193
+
194
+ // Convert remainder as a single number
195
+ const remainder = decimalPart.slice(i)
196
+ if (remainder) {
197
+ if (result) result += ' '
198
+ result += integerToWords(BigInt(remainder))
199
+ }
200
+
201
+ return result
202
+ }
203
+
204
+ /**
205
+ * Converts a numeric value to English words using Indian numbering.
206
+ *
207
+ * @param {number | string | bigint} value - The numeric value to convert
208
+ * @returns {string} The number in English words
209
+ * @throws {TypeError} If value is not a valid numeric type
210
+ * @throws {Error} If value is not a valid number format
211
+ *
212
+ * @example
213
+ * toCardinal(42) // 'forty-two'
214
+ * toCardinal(100000) // 'one lakh'
215
+ * toCardinal(10000000) // 'one crore'
216
+ * toCardinal(1234567) // 'twelve lakh thirty-four thousand five hundred and sixty-seven'
217
+ */
218
+ function toCardinal (value) {
219
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
220
+
221
+ let result = ''
222
+
223
+ if (isNegative) {
224
+ result = NEGATIVE + ' '
225
+ }
226
+
227
+ result += integerToWords(integerPart)
228
+
229
+ if (decimalPart) {
230
+ result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
231
+ }
232
+
233
+ return result
234
+ }
235
+
236
+ // ============================================================================
237
+ // ORDINAL: toOrdinal(value)
238
+ // ============================================================================
239
+
240
+ /**
241
+ * Builds ordinal words for a 0-999 segment (final segment only).
242
+ *
243
+ * @param {number} n - Number 0-999
244
+ * @returns {string} Ordinal words for this segment
245
+ */
246
+ function buildOrdinalSegment (n) {
247
+ const ones = n % 10
248
+ const tens = Math.trunc(n / 10) % 10
249
+ const hundreds = Math.trunc(n / 100)
250
+
251
+ // Build ordinal for tens-ones portion
252
+ let tensOnesOrdinal = ''
253
+ if (tens === 1) {
254
+ tensOnesOrdinal = ORDINAL_TEENS[ones]
255
+ } else if (tens >= 2) {
256
+ if (ones > 0) {
257
+ tensOnesOrdinal = TENS[tens] + '-' + ORDINAL_ONES[ones]
258
+ } else {
259
+ tensOnesOrdinal = ORDINAL_TENS[tens]
260
+ }
261
+ } else if (ones > 0) {
262
+ tensOnesOrdinal = ORDINAL_ONES[ones]
263
+ }
264
+
265
+ // Hundreds place
266
+ if (hundreds > 0) {
267
+ if (tensOnesOrdinal) {
268
+ return ONES[hundreds] + ' ' + HUNDRED + ' ' + tensOnesOrdinal
269
+ } else {
270
+ return ONES[hundreds] + ' hundredth'
271
+ }
272
+ }
273
+
274
+ return tensOnesOrdinal
275
+ }
276
+
277
+ /**
278
+ * Converts a positive integer to ordinal words using Indian numbering.
279
+ *
280
+ * @param {bigint} n - Positive integer to convert
281
+ * @returns {string} Ordinal English words
282
+ */
283
+ function integerToOrdinal (n) {
284
+ // Fast path: numbers < 1000
285
+ if (n < 1000n) {
286
+ return buildOrdinalSegment(Number(n))
287
+ }
288
+
289
+ // Extract segments using BigInt modulo (3-2-2 pattern)
290
+ const segments = []
291
+
292
+ // First segment: last 3 digits
293
+ segments.push(Number(n % 1000n))
294
+ let temp = n / 1000n
295
+
296
+ // Remaining segments: 2 digits each
297
+ while (temp > 0n) {
298
+ segments.push(Number(temp % 100n))
299
+ temp = temp / 100n
300
+ }
301
+
302
+ // Find the lowest non-zero segment (this gets ordinal treatment)
303
+ let lowestNonZeroIdx = 0
304
+ for (let i = 0; i < segments.length; i++) {
305
+ if (segments[i] !== 0) {
306
+ lowestNonZeroIdx = i
307
+ break
308
+ }
309
+ }
310
+
311
+ // Build result (most-significant to least)
312
+ const words = []
313
+
314
+ for (let i = segments.length - 1; i >= 0; i--) {
315
+ const segment = segments[i]
316
+ if (segment === 0) continue
317
+
318
+ const isLowestSegment = (i === lowestNonZeroIdx)
319
+
320
+ if (isLowestSegment) {
321
+ // Final non-zero segment gets ordinal treatment
322
+ if (i === 0) {
323
+ // Units position: use ordinal segment
324
+ words.push(buildOrdinalSegment(segment))
325
+ } else {
326
+ // Scale position with no remainder below: "one lakhth"
327
+ words.push(buildSmallSegment(segment))
328
+ words.push(SCALES[i - 1] + 'th')
329
+ }
330
+ } else {
331
+ // Non-final segments are cardinal
332
+ if (i === 0) {
333
+ words.push(buildSegment(segment).word)
334
+ } else {
335
+ words.push(buildSmallSegment(segment))
336
+ words.push(SCALES[i - 1])
337
+ }
338
+ }
339
+ }
340
+
341
+ return words.join(' ')
342
+ }
343
+
344
+ /**
345
+ * Converts a numeric value to English ordinal words using Indian numbering.
346
+ *
347
+ * @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
348
+ * @returns {string} The number as ordinal words
349
+ * @throws {TypeError} If value is not a valid numeric type
350
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
351
+ *
352
+ * @example
353
+ * toOrdinal(1) // 'first'
354
+ * toOrdinal(100000) // 'one lakhth'
355
+ * toOrdinal(100001) // 'one lakh first'
356
+ */
357
+ function toOrdinal (value) {
358
+ const integerPart = parseOrdinalValue(value)
359
+ return integerToOrdinal(integerPart)
360
+ }
361
+
362
+ // ============================================================================
363
+ // CURRENCY: toCurrency(value, options?)
364
+ // ============================================================================
365
+
366
+ /**
367
+ * Converts a numeric value to Bangladeshi English currency words.
368
+ *
369
+ * @param {number | string | bigint} value - The currency amount to convert
370
+ * @param {Object} [options] - Optional configuration
371
+ * @param {boolean} [options.and=true] - Use "and" between taka and paise
372
+ * @returns {string} The amount in Bangladeshi English currency words
373
+ * @throws {TypeError} If value is not a valid numeric type
374
+ * @throws {Error} If value is not a valid number format
375
+ *
376
+ * @example
377
+ * toCurrency(42.50) // 'forty-two taka and fifty paise'
378
+ * toCurrency(100000) // 'one lakh taka'
379
+ * toCurrency(1) // 'one taka'
380
+ * toCurrency(0.50) // 'fifty paise'
381
+ * toCurrency(42.50, { and: false }) // 'forty-two taka fifty paise'
382
+ */
383
+ function toCurrency (value, options) {
384
+ options = validateOptions(options)
385
+ const { isNegative, dollars: taka, cents: paise } = parseCurrencyValue(value)
386
+ const { and: useAnd = true } = options
387
+
388
+ // Build result
389
+ let result = ''
390
+ if (isNegative) result = NEGATIVE + ' '
391
+
392
+ // Taka part (show if non-zero, or if no paise)
393
+ // Note: "taka" is used for both singular and plural
394
+ if (taka > 0n || paise === 0n) {
395
+ result += integerToWords(taka)
396
+ result += ' ' + TAKA
397
+ }
398
+
399
+ // Paise part
400
+ if (paise > 0n) {
401
+ if (taka > 0n) {
402
+ result += useAnd ? ' and ' : ' '
403
+ }
404
+ result += integerToWords(paise)
405
+ result += ' ' + (paise === 1n ? PAISA : PAISE)
406
+ }
407
+
408
+ return result
409
+ }
410
+
411
+ // ============================================================================
412
+ // Public API
413
+ // ============================================================================
414
+
415
+ export { toCardinal, toOrdinal, toCurrency }
package/src/en-CA.d.ts ADDED
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Converts a numeric value to Canadian 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
+ * @param {Object} [options] - Optional configuration
9
+ * @param {boolean} [options.hundredPairing=false] - Use hundred-pairing for 1100-9999 (e.g., "fifteen hundred" instead of "one thousand five hundred")
10
+ * @param {boolean} [options.and=true] - Use "and" after hundreds and before final small numbers (default: true, Canadian/British style)
11
+ * @returns {string} The number in Canadian English words
12
+ * @throws {TypeError} If value is not a valid numeric type
13
+ * @throws {Error} If value is not a valid number format
14
+ *
15
+ * @example
16
+ * toCardinal(42) // 'forty-two'
17
+ * toCardinal(101) // 'one hundred and one'
18
+ * toCardinal(101, { and: false }) // 'one hundred one'
19
+ * toCardinal(1500) // 'one thousand five hundred'
20
+ * toCardinal(1500, { hundredPairing: true }) // 'fifteen hundred'
21
+ */
22
+ export function toCardinal(value: number | string | bigint, options?: {
23
+ hundredPairing?: boolean | undefined;
24
+ and?: boolean | undefined;
25
+ }): string;
26
+ /**
27
+ * Converts a numeric value to Canadian English ordinal words.
28
+ *
29
+ * @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
30
+ * @returns {string} The number as ordinal words (e.g., "first", "forty-second")
31
+ * @throws {TypeError} If value is not a valid numeric type
32
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
33
+ *
34
+ * @example
35
+ * toOrdinal(1) // 'first'
36
+ * toOrdinal(2) // 'second'
37
+ * toOrdinal(3) // 'third'
38
+ * toOrdinal(21) // 'twenty-first'
39
+ * toOrdinal(42) // 'forty-second'
40
+ * toOrdinal(100) // 'one hundredth'
41
+ * toOrdinal(101) // 'one hundred first'
42
+ * toOrdinal(1000) // 'one thousandth'
43
+ */
44
+ export function toOrdinal(value: number | string | bigint): string;
45
+ /**
46
+ * Converts a numeric value to Canadian English currency words.
47
+ *
48
+ * @param {number | string | bigint} value - The currency amount to convert
49
+ * @param {Object} [options] - Optional configuration
50
+ * @param {boolean} [options.and=true] - Use "and" between dollars and cents (e.g., "one dollar and fifty cents")
51
+ * @returns {string} The amount in Canadian English currency words
52
+ * @throws {TypeError} If value is not a valid numeric type
53
+ * @throws {Error} If value is not a valid number format
54
+ *
55
+ * @example
56
+ * toCurrency(42.50) // 'forty-two dollars and fifty cents'
57
+ * toCurrency(1) // 'one dollar'
58
+ * toCurrency(0.99) // 'ninety-nine cents'
59
+ * toCurrency(42.50, { and: false }) // 'forty-two dollars fifty cents'
60
+ */
61
+ export function toCurrency(value: number | string | bigint, options?: {
62
+ and?: boolean | undefined;
63
+ }): string;