n2words 3.1.0 → 5.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 (486) hide show
  1. package/CHANGELOG.md +51 -40
  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-BR.js +2 -0
  113. package/dist/pt-BR.umd.js +2 -0
  114. package/dist/pt-PT.js +2 -0
  115. package/dist/pt-PT.umd.js +2 -0
  116. package/dist/ro-RO.js +2 -0
  117. package/dist/ro-RO.umd.js +2 -0
  118. package/dist/ru-RU.js +2 -0
  119. package/dist/ru-RU.umd.js +2 -0
  120. package/dist/sr-Cyrl-RS.js +2 -0
  121. package/dist/sr-Cyrl-RS.umd.js +2 -0
  122. package/dist/sr-Latn-RS.js +2 -0
  123. package/dist/sr-Latn-RS.umd.js +2 -0
  124. package/dist/sv-SE.js +2 -0
  125. package/dist/sv-SE.umd.js +2 -0
  126. package/dist/sw-KE.js +2 -0
  127. package/dist/sw-KE.umd.js +2 -0
  128. package/dist/ta-IN.js +2 -0
  129. package/dist/ta-IN.umd.js +2 -0
  130. package/dist/te-IN.js +2 -0
  131. package/dist/te-IN.umd.js +2 -0
  132. package/dist/th-TH.js +2 -0
  133. package/dist/th-TH.umd.js +2 -0
  134. package/dist/tr-TR.js +2 -0
  135. package/dist/tr-TR.umd.js +2 -0
  136. package/dist/uk-UA.js +2 -0
  137. package/dist/uk-UA.umd.js +2 -0
  138. package/dist/ur-PK.js +2 -0
  139. package/dist/ur-PK.umd.js +2 -0
  140. package/dist/vi-VN.js +2 -0
  141. package/dist/vi-VN.umd.js +2 -0
  142. package/dist/yo-NG.js +2 -0
  143. package/dist/yo-NG.umd.js +2 -0
  144. package/dist/zh-Hans-CN.js +2 -0
  145. package/dist/zh-Hans-CN.umd.js +2 -0
  146. package/dist/zh-Hant-TW.js +2 -0
  147. package/dist/zh-Hant-TW.umd.js +2 -0
  148. package/package.json +61 -88
  149. package/src/am-ET.d.ts +40 -0
  150. package/src/am-ET.js +269 -0
  151. package/src/am-Latn-ET.d.ts +35 -0
  152. package/src/am-Latn-ET.js +264 -0
  153. package/src/ar-SA.d.ts +49 -0
  154. package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
  155. package/src/az-AZ.d.ts +37 -0
  156. package/src/az-AZ.js +312 -0
  157. package/src/bn-BD.d.ts +36 -0
  158. package/{lib/languages/bn.js → src/bn-BD.js} +110 -6
  159. package/src/cs-CZ.d.ts +49 -0
  160. package/{lib/languages/cs.js → src/cs-CZ.js} +240 -14
  161. package/src/da-DK.d.ts +44 -0
  162. package/{lib/languages/da.js → src/da-DK.js} +131 -11
  163. package/src/de-DE.d.ts +57 -0
  164. package/src/de-DE.js +603 -0
  165. package/src/el-GR.d.ts +40 -0
  166. package/src/el-GR.js +418 -0
  167. package/src/en-AU.d.ts +47 -0
  168. package/src/en-AU.js +423 -0
  169. package/src/en-BD.d.ts +49 -0
  170. package/src/en-BD.js +415 -0
  171. package/src/en-CA.d.ts +63 -0
  172. package/src/en-CA.js +518 -0
  173. package/src/en-GB.d.ts +56 -0
  174. package/src/en-GB.js +469 -0
  175. package/src/en-GH.d.ts +11 -0
  176. package/src/en-GH.js +345 -0
  177. package/src/en-IE.d.ts +56 -0
  178. package/src/en-IE.js +479 -0
  179. package/src/en-IN.d.ts +49 -0
  180. package/src/en-IN.js +415 -0
  181. package/src/en-KE.d.ts +11 -0
  182. package/src/en-KE.js +345 -0
  183. package/src/en-MY.d.ts +11 -0
  184. package/src/en-MY.js +347 -0
  185. package/src/en-NG.d.ts +56 -0
  186. package/src/en-NG.js +479 -0
  187. package/src/en-NZ.d.ts +11 -0
  188. package/{lib/languages/en.js → src/en-NZ.js} +164 -31
  189. package/src/en-PH.d.ts +11 -0
  190. package/src/en-PH.js +345 -0
  191. package/src/en-PK.d.ts +49 -0
  192. package/src/en-PK.js +415 -0
  193. package/src/en-SG.d.ts +11 -0
  194. package/src/en-SG.js +345 -0
  195. package/src/en-US.d.ts +63 -0
  196. package/src/en-US.js +516 -0
  197. package/src/en-ZA.d.ts +56 -0
  198. package/src/en-ZA.js +478 -0
  199. package/src/es-ES.d.ts +65 -0
  200. package/src/es-ES.js +541 -0
  201. package/src/es-MX.d.ts +58 -0
  202. package/{lib/languages/es.js → src/es-MX.js} +228 -18
  203. package/src/es-US.d.ts +58 -0
  204. package/src/es-US.js +446 -0
  205. package/src/fa-IR.d.ts +38 -0
  206. package/src/fa-IR.js +246 -0
  207. package/src/fi-FI.d.ts +46 -0
  208. package/{lib/languages/fi.js → src/fi-FI.js} +152 -11
  209. package/src/fil-PH.d.ts +37 -0
  210. package/{lib/languages/fil.js → src/fil-PH.js} +144 -8
  211. package/src/fr-BE.d.ts +49 -0
  212. package/{lib/languages → src}/fr-BE.js +175 -13
  213. package/src/fr-FR.d.ts +63 -0
  214. package/{lib/languages/fr.js → src/fr-FR.js} +182 -16
  215. package/src/gu-IN.d.ts +35 -0
  216. package/{lib/languages/gu.js → src/gu-IN.js} +115 -6
  217. package/src/ha-NG.d.ts +37 -0
  218. package/{lib/languages/ha.js → src/ha-NG.js} +107 -8
  219. package/src/hbo-IL.d.ts +39 -0
  220. package/{lib/languages/hbo.js → src/hbo-IL.js} +211 -19
  221. package/src/he-IL.d.ts +37 -0
  222. package/src/he-IL.js +537 -0
  223. package/src/hi-IN.d.ts +36 -0
  224. package/{lib/languages/hi.js → src/hi-IN.js} +116 -6
  225. package/src/hr-HR.d.ts +42 -0
  226. package/src/hr-HR.js +463 -0
  227. package/src/hu-HU.d.ts +38 -0
  228. package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
  229. package/src/id-ID.d.ts +38 -0
  230. package/{lib/languages/id.js → src/id-ID.js} +99 -8
  231. package/src/it-IT.d.ts +59 -0
  232. package/{lib/languages/it.js → src/it-IT.js} +179 -15
  233. package/src/ja-JP.d.ts +49 -0
  234. package/{lib/languages/ja.js → src/ja-JP.js} +111 -12
  235. package/src/ka-GE.d.ts +44 -0
  236. package/{lib/languages/ka.js → src/ka-GE.js} +113 -11
  237. package/src/kn-IN.d.ts +35 -0
  238. package/{lib/languages/kn.js → src/kn-IN.js} +115 -6
  239. package/src/ko-KR.d.ts +45 -0
  240. package/{lib/languages/ko.js → src/ko-KR.js} +94 -12
  241. package/src/lt-LT.d.ts +49 -0
  242. package/src/lt-LT.js +543 -0
  243. package/src/lv-LV.d.ts +49 -0
  244. package/src/lv-LV.js +595 -0
  245. package/src/mr-IN.d.ts +36 -0
  246. package/{lib/languages/mr.js → src/mr-IN.js} +116 -6
  247. package/src/ms-MY.d.ts +37 -0
  248. package/{lib/languages/ms.js → src/ms-MY.js} +111 -8
  249. package/src/nb-NO.d.ts +44 -0
  250. package/{lib/languages/nb.js → src/nb-NO.js} +153 -11
  251. package/src/nl-NL.d.ts +54 -0
  252. package/{lib/languages/nl.js → src/nl-NL.js} +260 -18
  253. package/src/pa-IN.d.ts +36 -0
  254. package/{lib/languages/pa.js → src/pa-IN.js} +116 -6
  255. package/src/pl-PL.d.ts +55 -0
  256. package/src/pl-PL.js +585 -0
  257. package/src/pt-BR.d.ts +31 -0
  258. package/src/pt-BR.js +534 -0
  259. package/src/pt-PT.d.ts +45 -0
  260. package/{lib/languages/pt.js → src/pt-PT.js} +234 -12
  261. package/src/ro-RO.d.ts +44 -0
  262. package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
  263. package/src/ru-RU.d.ts +50 -0
  264. package/src/ru-RU.js +535 -0
  265. package/src/sr-Cyrl-RS.d.ts +49 -0
  266. package/src/sr-Cyrl-RS.js +503 -0
  267. package/src/sr-Latn-RS.d.ts +49 -0
  268. package/src/sr-Latn-RS.js +503 -0
  269. package/src/sv-SE.d.ts +44 -0
  270. package/{lib/languages/sv.js → src/sv-SE.js} +136 -11
  271. package/src/sw-KE.d.ts +37 -0
  272. package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
  273. package/src/ta-IN.d.ts +35 -0
  274. package/{lib/languages/ta.js → src/ta-IN.js} +109 -6
  275. package/src/te-IN.d.ts +35 -0
  276. package/{lib/languages/te.js → src/te-IN.js} +115 -6
  277. package/src/th-TH.d.ts +38 -0
  278. package/{lib/languages/th.js → src/th-TH.js} +99 -6
  279. package/src/tr-TR.d.ts +48 -0
  280. package/{lib/languages/tr.js → src/tr-TR.js} +168 -23
  281. package/src/uk-UA.d.ts +42 -0
  282. package/src/uk-UA.js +463 -0
  283. package/src/ur-PK.d.ts +36 -0
  284. package/{lib/languages/ur.js → src/ur-PK.js} +116 -6
  285. package/src/utils/expand-scientific.d.ts +32 -0
  286. package/src/utils/expand-scientific.js +65 -0
  287. package/src/utils/parse-cardinal.d.ts +14 -0
  288. package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
  289. package/src/utils/parse-currency.d.ts +14 -0
  290. package/src/utils/parse-currency.js +91 -0
  291. package/src/utils/parse-ordinal.d.ts +10 -0
  292. package/src/utils/parse-ordinal.js +103 -0
  293. package/src/vi-VN.d.ts +48 -0
  294. package/{lib/languages/vi.js → src/vi-VN.js} +102 -11
  295. package/src/yo-NG.d.ts +37 -0
  296. package/{lib/languages/yo.js → src/yo-NG.js} +109 -9
  297. package/src/zh-Hans-CN.d.ts +48 -0
  298. package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
  299. package/src/zh-Hant-TW.d.ts +50 -0
  300. package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
  301. package/dist/languages/am-Latn.js +0 -3
  302. package/dist/languages/am-Latn.js.map +0 -1
  303. package/dist/languages/am.js +0 -3
  304. package/dist/languages/am.js.map +0 -1
  305. package/dist/languages/ar.js +0 -3
  306. package/dist/languages/ar.js.map +0 -1
  307. package/dist/languages/az.js +0 -3
  308. package/dist/languages/az.js.map +0 -1
  309. package/dist/languages/bn.js +0 -3
  310. package/dist/languages/bn.js.map +0 -1
  311. package/dist/languages/cs.js +0 -3
  312. package/dist/languages/cs.js.map +0 -1
  313. package/dist/languages/da.js +0 -3
  314. package/dist/languages/da.js.map +0 -1
  315. package/dist/languages/de.js +0 -3
  316. package/dist/languages/de.js.map +0 -1
  317. package/dist/languages/el.js +0 -3
  318. package/dist/languages/el.js.map +0 -1
  319. package/dist/languages/en.js +0 -3
  320. package/dist/languages/en.js.map +0 -1
  321. package/dist/languages/es.js +0 -3
  322. package/dist/languages/es.js.map +0 -1
  323. package/dist/languages/fa.js +0 -3
  324. package/dist/languages/fa.js.map +0 -1
  325. package/dist/languages/fi.js +0 -3
  326. package/dist/languages/fi.js.map +0 -1
  327. package/dist/languages/fil.js +0 -3
  328. package/dist/languages/fil.js.map +0 -1
  329. package/dist/languages/fr-BE.js +0 -3
  330. package/dist/languages/fr-BE.js.map +0 -1
  331. package/dist/languages/fr.js +0 -3
  332. package/dist/languages/fr.js.map +0 -1
  333. package/dist/languages/gu.js +0 -3
  334. package/dist/languages/gu.js.map +0 -1
  335. package/dist/languages/ha.js +0 -3
  336. package/dist/languages/ha.js.map +0 -1
  337. package/dist/languages/hbo.js +0 -3
  338. package/dist/languages/hbo.js.map +0 -1
  339. package/dist/languages/he.js +0 -3
  340. package/dist/languages/he.js.map +0 -1
  341. package/dist/languages/hi.js +0 -3
  342. package/dist/languages/hi.js.map +0 -1
  343. package/dist/languages/hr.js +0 -3
  344. package/dist/languages/hr.js.map +0 -1
  345. package/dist/languages/hu.js +0 -3
  346. package/dist/languages/hu.js.map +0 -1
  347. package/dist/languages/id.js +0 -3
  348. package/dist/languages/id.js.map +0 -1
  349. package/dist/languages/it.js +0 -3
  350. package/dist/languages/it.js.map +0 -1
  351. package/dist/languages/ja.js +0 -3
  352. package/dist/languages/ja.js.map +0 -1
  353. package/dist/languages/ka.js +0 -3
  354. package/dist/languages/ka.js.map +0 -1
  355. package/dist/languages/kn.js +0 -3
  356. package/dist/languages/kn.js.map +0 -1
  357. package/dist/languages/ko.js +0 -3
  358. package/dist/languages/ko.js.map +0 -1
  359. package/dist/languages/lt.js +0 -3
  360. package/dist/languages/lt.js.map +0 -1
  361. package/dist/languages/lv.js +0 -3
  362. package/dist/languages/lv.js.map +0 -1
  363. package/dist/languages/mr.js +0 -3
  364. package/dist/languages/mr.js.map +0 -1
  365. package/dist/languages/ms.js +0 -3
  366. package/dist/languages/ms.js.map +0 -1
  367. package/dist/languages/nb.js +0 -3
  368. package/dist/languages/nb.js.map +0 -1
  369. package/dist/languages/nl.js +0 -3
  370. package/dist/languages/nl.js.map +0 -1
  371. package/dist/languages/pa.js +0 -3
  372. package/dist/languages/pa.js.map +0 -1
  373. package/dist/languages/pl.js +0 -3
  374. package/dist/languages/pl.js.map +0 -1
  375. package/dist/languages/pt.js +0 -3
  376. package/dist/languages/pt.js.map +0 -1
  377. package/dist/languages/ro.js +0 -3
  378. package/dist/languages/ro.js.map +0 -1
  379. package/dist/languages/ru.js +0 -3
  380. package/dist/languages/ru.js.map +0 -1
  381. package/dist/languages/sr-Cyrl.js +0 -3
  382. package/dist/languages/sr-Cyrl.js.map +0 -1
  383. package/dist/languages/sr-Latn.js +0 -3
  384. package/dist/languages/sr-Latn.js.map +0 -1
  385. package/dist/languages/sv.js +0 -3
  386. package/dist/languages/sv.js.map +0 -1
  387. package/dist/languages/sw.js +0 -3
  388. package/dist/languages/sw.js.map +0 -1
  389. package/dist/languages/ta.js +0 -3
  390. package/dist/languages/ta.js.map +0 -1
  391. package/dist/languages/te.js +0 -3
  392. package/dist/languages/te.js.map +0 -1
  393. package/dist/languages/th.js +0 -3
  394. package/dist/languages/th.js.map +0 -1
  395. package/dist/languages/tr.js +0 -3
  396. package/dist/languages/tr.js.map +0 -1
  397. package/dist/languages/uk.js +0 -3
  398. package/dist/languages/uk.js.map +0 -1
  399. package/dist/languages/ur.js +0 -3
  400. package/dist/languages/ur.js.map +0 -1
  401. package/dist/languages/vi.js +0 -3
  402. package/dist/languages/vi.js.map +0 -1
  403. package/dist/languages/yo.js +0 -3
  404. package/dist/languages/yo.js.map +0 -1
  405. package/dist/languages/zh-Hans.js +0 -3
  406. package/dist/languages/zh-Hans.js.map +0 -1
  407. package/dist/languages/zh-Hant.js +0 -3
  408. package/dist/languages/zh-Hant.js.map +0 -1
  409. package/dist/n2words.js +0 -3
  410. package/dist/n2words.js.map +0 -1
  411. package/lib/languages/am-Latn.d.ts +0 -7
  412. package/lib/languages/am-Latn.js +0 -159
  413. package/lib/languages/am.d.ts +0 -7
  414. package/lib/languages/am.js +0 -159
  415. package/lib/languages/ar.d.ts +0 -17
  416. package/lib/languages/az.d.ts +0 -7
  417. package/lib/languages/az.js +0 -171
  418. package/lib/languages/bn.d.ts +0 -7
  419. package/lib/languages/cs.d.ts +0 -18
  420. package/lib/languages/da.d.ts +0 -14
  421. package/lib/languages/de.d.ts +0 -17
  422. package/lib/languages/de.js +0 -320
  423. package/lib/languages/el.d.ts +0 -14
  424. package/lib/languages/el.js +0 -236
  425. package/lib/languages/en.d.ts +0 -17
  426. package/lib/languages/es.d.ts +0 -21
  427. package/lib/languages/fa.d.ts +0 -7
  428. package/lib/languages/fa.js +0 -134
  429. package/lib/languages/fi.d.ts +0 -14
  430. package/lib/languages/fil.d.ts +0 -7
  431. package/lib/languages/fr-BE.d.ts +0 -11
  432. package/lib/languages/fr.d.ts +0 -21
  433. package/lib/languages/gu.d.ts +0 -7
  434. package/lib/languages/ha.d.ts +0 -7
  435. package/lib/languages/hbo.d.ts +0 -13
  436. package/lib/languages/he.d.ts +0 -13
  437. package/lib/languages/he.js +0 -265
  438. package/lib/languages/hi.d.ts +0 -7
  439. package/lib/languages/hr.d.ts +0 -11
  440. package/lib/languages/hr.js +0 -224
  441. package/lib/languages/hu.d.ts +0 -7
  442. package/lib/languages/id.d.ts +0 -7
  443. package/lib/languages/it.d.ts +0 -19
  444. package/lib/languages/ja.d.ts +0 -17
  445. package/lib/languages/ka.d.ts +0 -17
  446. package/lib/languages/kn.d.ts +0 -7
  447. package/lib/languages/ko.d.ts +0 -14
  448. package/lib/languages/lt.d.ts +0 -18
  449. package/lib/languages/lt.js +0 -301
  450. package/lib/languages/lv.d.ts +0 -18
  451. package/lib/languages/lv.js +0 -312
  452. package/lib/languages/mr.d.ts +0 -7
  453. package/lib/languages/ms.d.ts +0 -7
  454. package/lib/languages/nb.d.ts +0 -14
  455. package/lib/languages/nl.d.ts +0 -26
  456. package/lib/languages/pa.d.ts +0 -7
  457. package/lib/languages/pl.d.ts +0 -22
  458. package/lib/languages/pl.js +0 -317
  459. package/lib/languages/pt.d.ts +0 -17
  460. package/lib/languages/ro.d.ts +0 -18
  461. package/lib/languages/ru.d.ts +0 -11
  462. package/lib/languages/ru.js +0 -245
  463. package/lib/languages/sr-Cyrl.d.ts +0 -11
  464. package/lib/languages/sr-Cyrl.js +0 -221
  465. package/lib/languages/sr-Latn.d.ts +0 -11
  466. package/lib/languages/sr-Latn.js +0 -221
  467. package/lib/languages/sv.d.ts +0 -14
  468. package/lib/languages/sw.d.ts +0 -7
  469. package/lib/languages/ta.d.ts +0 -7
  470. package/lib/languages/te.d.ts +0 -7
  471. package/lib/languages/th.d.ts +0 -7
  472. package/lib/languages/tr.d.ts +0 -18
  473. package/lib/languages/uk.d.ts +0 -11
  474. package/lib/languages/uk.js +0 -224
  475. package/lib/languages/ur.d.ts +0 -7
  476. package/lib/languages/vi.d.ts +0 -17
  477. package/lib/languages/yo.d.ts +0 -7
  478. package/lib/languages/zh-Hans.d.ts +0 -11
  479. package/lib/languages/zh-Hant.d.ts +0 -11
  480. package/lib/n2words.d.ts +0 -55
  481. package/lib/n2words.js +0 -126
  482. package/lib/utils/parse-numeric.d.ts +0 -17
  483. /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
  484. /package/{lib → src}/utils/is-plain-object.js +0 -0
  485. /package/{lib → src}/utils/validate-options.d.ts +0 -0
  486. /package/{lib → src}/utils/validate-options.js +0 -0
package/src/en-PK.js ADDED
@@ -0,0 +1,415 @@
1
+ /**
2
+ * English (Pakistan) language converter
3
+ *
4
+ * CLDR: en-PK | English as used in Pakistan
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
+ * - Pakistani Rupee currency (PKR)
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 (Pakistani Rupee)
40
+ const RUPEE = 'rupee'
41
+ const RUPEES = 'rupees'
42
+ const PAISA = 'paisa'
43
+ const PAISE = 'paise'
44
+
45
+ // ============================================================================
46
+ // Segment Building
47
+ // ============================================================================
48
+
49
+ // Reusable result object to avoid allocation per call
50
+ const segmentResult = { word: '', hasHundred: false }
51
+
52
+ /**
53
+ * Builds words for a 0-999 segment (British-style with "and" after hundreds).
54
+ *
55
+ * @param {number} n - Number 0-999
56
+ * @returns {{ word: string, hasHundred: boolean }}
57
+ */
58
+ function buildSegment (n) {
59
+ if (n === 0) {
60
+ segmentResult.word = ''
61
+ segmentResult.hasHundred = false
62
+ return segmentResult
63
+ }
64
+
65
+ const ones = n % 10
66
+ const tens = Math.trunc(n / 10) % 10
67
+ const hundreds = Math.trunc(n / 100)
68
+
69
+ // Build tens-ones part first
70
+ let tensOnes = ''
71
+ if (tens === 1) {
72
+ tensOnes = TEENS[ones]
73
+ } else if (tens >= 2) {
74
+ tensOnes = ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
75
+ } else if (ones > 0) {
76
+ tensOnes = ONES[ones]
77
+ }
78
+
79
+ // Hundreds place (British-style: "and" after hundreds)
80
+ if (hundreds > 0) {
81
+ if (tensOnes) {
82
+ segmentResult.word = ONES[hundreds] + ' ' + HUNDRED + ' and ' + tensOnes
83
+ } else {
84
+ segmentResult.word = ONES[hundreds] + ' ' + HUNDRED
85
+ }
86
+ segmentResult.hasHundred = true
87
+ } else {
88
+ segmentResult.word = tensOnes
89
+ segmentResult.hasHundred = false
90
+ }
91
+
92
+ return segmentResult
93
+ }
94
+
95
+ /**
96
+ * Builds words for a 0-99 segment (no hundreds).
97
+ *
98
+ * @param {number} n - Number 0-99
99
+ * @returns {string}
100
+ */
101
+ function buildSmallSegment (n) {
102
+ if (n === 0) return ''
103
+
104
+ const ones = n % 10
105
+ const tens = Math.trunc(n / 10)
106
+
107
+ if (tens === 1) {
108
+ return TEENS[ones]
109
+ } else if (tens >= 2) {
110
+ return ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
111
+ }
112
+ return ONES[ones]
113
+ }
114
+
115
+ // ============================================================================
116
+ // Conversion Functions
117
+ // ============================================================================
118
+
119
+ /**
120
+ * Converts a non-negative integer to English words using Indian numbering.
121
+ *
122
+ * Uses BigInt modulo for segment extraction.
123
+ * South Asian 3-2-2 grouping: first 3 digits, then groups of 2.
124
+ *
125
+ * @param {bigint} n - Non-negative integer to convert
126
+ * @returns {string} English words
127
+ */
128
+ function integerToWords (n) {
129
+ if (n === 0n) return ZERO
130
+
131
+ // Fast path: numbers < 1000
132
+ if (n < 1000n) {
133
+ return buildSegment(Number(n)).word
134
+ }
135
+
136
+ // Extract segments using BigInt modulo
137
+ // First segment is 3 digits (units), rest are 2 digits (thousands, lakhs, crores, etc.)
138
+ // Segments stored least-significant first
139
+ const segments = []
140
+
141
+ // First segment: last 3 digits
142
+ segments.push(Number(n % 1000n))
143
+ let temp = n / 1000n
144
+
145
+ // Remaining segments: 2 digits each (thousand, lakh, crore, etc.)
146
+ while (temp > 0n) {
147
+ segments.push(Number(temp % 100n))
148
+ temp = temp / 100n
149
+ }
150
+
151
+ // Build result string (process from most-significant to least)
152
+ const words = []
153
+ for (let i = segments.length - 1; i >= 0; i--) {
154
+ const segment = segments[i]
155
+ if (segment === 0) continue
156
+
157
+ if (i === 0) {
158
+ // First segment (units place) can be 0-999
159
+ const { word, hasHundred } = buildSegment(segment)
160
+ // Add "and" before final segment if previous segments exist and no hundred
161
+ if (words.length > 0 && !hasHundred) {
162
+ words.push('and')
163
+ }
164
+ words.push(word)
165
+ } else {
166
+ // Other segments are 0-99
167
+ words.push(buildSmallSegment(segment))
168
+ // Add scale word
169
+ if (SCALES[i - 1]) {
170
+ words.push(SCALES[i - 1])
171
+ }
172
+ }
173
+ }
174
+
175
+ return words.join(' ')
176
+ }
177
+
178
+ /**
179
+ * Converts decimal digits to English words.
180
+ *
181
+ * @param {string} decimalPart - Decimal digits (without the point)
182
+ * @returns {string} English words for decimal part
183
+ */
184
+ function decimalPartToWords (decimalPart) {
185
+ let result = ''
186
+
187
+ // Handle leading zeros
188
+ let i = 0
189
+ while (i < decimalPart.length && decimalPart[i] === '0') {
190
+ if (result) result += ' '
191
+ result += ZERO
192
+ i++
193
+ }
194
+
195
+ // Convert remainder as a single number
196
+ const remainder = decimalPart.slice(i)
197
+ if (remainder) {
198
+ if (result) result += ' '
199
+ result += integerToWords(BigInt(remainder))
200
+ }
201
+
202
+ return result
203
+ }
204
+
205
+ /**
206
+ * Converts a numeric value to English words using Indian numbering.
207
+ *
208
+ * @param {number | string | bigint} value - The numeric value to convert
209
+ * @returns {string} The number in English words
210
+ * @throws {TypeError} If value is not a valid numeric type
211
+ * @throws {Error} If value is not a valid number format
212
+ *
213
+ * @example
214
+ * toCardinal(42) // 'forty-two'
215
+ * toCardinal(100000) // 'one lakh'
216
+ * toCardinal(10000000) // 'one crore'
217
+ * toCardinal(1234567) // 'twelve lakh thirty-four thousand five hundred and sixty-seven'
218
+ */
219
+ function toCardinal (value) {
220
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
221
+
222
+ let result = ''
223
+
224
+ if (isNegative) {
225
+ result = NEGATIVE + ' '
226
+ }
227
+
228
+ result += integerToWords(integerPart)
229
+
230
+ if (decimalPart) {
231
+ result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
232
+ }
233
+
234
+ return result
235
+ }
236
+
237
+ // ============================================================================
238
+ // ORDINAL: toOrdinal(value)
239
+ // ============================================================================
240
+
241
+ /**
242
+ * Builds ordinal words for a 0-999 segment (final segment only).
243
+ *
244
+ * @param {number} n - Number 0-999
245
+ * @returns {string} Ordinal words for this segment
246
+ */
247
+ function buildOrdinalSegment (n) {
248
+ const ones = n % 10
249
+ const tens = Math.trunc(n / 10) % 10
250
+ const hundreds = Math.trunc(n / 100)
251
+
252
+ // Build ordinal for tens-ones portion
253
+ let tensOnesOrdinal = ''
254
+ if (tens === 1) {
255
+ tensOnesOrdinal = ORDINAL_TEENS[ones]
256
+ } else if (tens >= 2) {
257
+ if (ones > 0) {
258
+ tensOnesOrdinal = TENS[tens] + '-' + ORDINAL_ONES[ones]
259
+ } else {
260
+ tensOnesOrdinal = ORDINAL_TENS[tens]
261
+ }
262
+ } else if (ones > 0) {
263
+ tensOnesOrdinal = ORDINAL_ONES[ones]
264
+ }
265
+
266
+ // Hundreds place
267
+ if (hundreds > 0) {
268
+ if (tensOnesOrdinal) {
269
+ return ONES[hundreds] + ' ' + HUNDRED + ' ' + tensOnesOrdinal
270
+ } else {
271
+ return ONES[hundreds] + ' hundredth'
272
+ }
273
+ }
274
+
275
+ return tensOnesOrdinal
276
+ }
277
+
278
+ /**
279
+ * Converts a positive integer to ordinal words using Indian numbering.
280
+ *
281
+ * @param {bigint} n - Positive integer to convert
282
+ * @returns {string} Ordinal English words
283
+ */
284
+ function integerToOrdinal (n) {
285
+ // Fast path: numbers < 1000
286
+ if (n < 1000n) {
287
+ return buildOrdinalSegment(Number(n))
288
+ }
289
+
290
+ // Extract segments using BigInt modulo (3-2-2 pattern)
291
+ const segments = []
292
+
293
+ // First segment: last 3 digits
294
+ segments.push(Number(n % 1000n))
295
+ let temp = n / 1000n
296
+
297
+ // Remaining segments: 2 digits each
298
+ while (temp > 0n) {
299
+ segments.push(Number(temp % 100n))
300
+ temp = temp / 100n
301
+ }
302
+
303
+ // Find the lowest non-zero segment (this gets ordinal treatment)
304
+ let lowestNonZeroIdx = 0
305
+ for (let i = 0; i < segments.length; i++) {
306
+ if (segments[i] !== 0) {
307
+ lowestNonZeroIdx = i
308
+ break
309
+ }
310
+ }
311
+
312
+ // Build result (most-significant to least)
313
+ const words = []
314
+
315
+ for (let i = segments.length - 1; i >= 0; i--) {
316
+ const segment = segments[i]
317
+ if (segment === 0) continue
318
+
319
+ const isLowestSegment = (i === lowestNonZeroIdx)
320
+
321
+ if (isLowestSegment) {
322
+ // Final non-zero segment gets ordinal treatment
323
+ if (i === 0) {
324
+ // Units position: use ordinal segment
325
+ words.push(buildOrdinalSegment(segment))
326
+ } else {
327
+ // Scale position with no remainder below: "one lakhth"
328
+ words.push(buildSmallSegment(segment))
329
+ words.push(SCALES[i - 1] + 'th')
330
+ }
331
+ } else {
332
+ // Non-final segments are cardinal
333
+ if (i === 0) {
334
+ words.push(buildSegment(segment).word)
335
+ } else {
336
+ words.push(buildSmallSegment(segment))
337
+ words.push(SCALES[i - 1])
338
+ }
339
+ }
340
+ }
341
+
342
+ return words.join(' ')
343
+ }
344
+
345
+ /**
346
+ * Converts a numeric value to English ordinal words using Indian numbering.
347
+ *
348
+ * @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
349
+ * @returns {string} The number as ordinal words
350
+ * @throws {TypeError} If value is not a valid numeric type
351
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
352
+ *
353
+ * @example
354
+ * toOrdinal(1) // 'first'
355
+ * toOrdinal(100000) // 'one lakhth'
356
+ * toOrdinal(100001) // 'one lakh first'
357
+ */
358
+ function toOrdinal (value) {
359
+ const integerPart = parseOrdinalValue(value)
360
+ return integerToOrdinal(integerPart)
361
+ }
362
+
363
+ // ============================================================================
364
+ // CURRENCY: toCurrency(value, options?)
365
+ // ============================================================================
366
+
367
+ /**
368
+ * Converts a numeric value to Pakistani English currency words.
369
+ *
370
+ * @param {number | string | bigint} value - The currency amount to convert
371
+ * @param {Object} [options] - Optional configuration
372
+ * @param {boolean} [options.and=true] - Use "and" between rupees and paise
373
+ * @returns {string} The amount in Pakistani English currency words
374
+ * @throws {TypeError} If value is not a valid numeric type
375
+ * @throws {Error} If value is not a valid number format
376
+ *
377
+ * @example
378
+ * toCurrency(42.50) // 'forty-two rupees and fifty paise'
379
+ * toCurrency(100000) // 'one lakh rupees'
380
+ * toCurrency(1) // 'one rupee'
381
+ * toCurrency(0.50) // 'fifty paise'
382
+ * toCurrency(42.50, { and: false }) // 'forty-two rupees fifty paise'
383
+ */
384
+ function toCurrency (value, options) {
385
+ options = validateOptions(options)
386
+ const { isNegative, dollars: rupees, cents: paise } = parseCurrencyValue(value)
387
+ const { and: useAnd = true } = options
388
+
389
+ // Build result
390
+ let result = ''
391
+ if (isNegative) result = NEGATIVE + ' '
392
+
393
+ // Rupees part (show if non-zero, or if no paise)
394
+ if (rupees > 0n || paise === 0n) {
395
+ result += integerToWords(rupees)
396
+ result += ' ' + (rupees === 1n ? RUPEE : RUPEES)
397
+ }
398
+
399
+ // Paise part
400
+ if (paise > 0n) {
401
+ if (rupees > 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-SG.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Converts a numeric value to Singaporean English words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @returns {string} The number in English 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
+ export function toCardinal(value: number | string | bigint): string;
10
+ export function toOrdinal(value: any): string;
11
+ export function toCurrency(value: any, options: any): string;