n2words 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/LICENSE +1 -1
  3. package/README.md +64 -184
  4. package/dist/am-ET.js +2 -0
  5. package/dist/am-ET.umd.js +2 -0
  6. package/dist/am-Latn-ET.js +2 -0
  7. package/dist/am-Latn-ET.umd.js +2 -0
  8. package/dist/ar-SA.js +2 -0
  9. package/dist/ar-SA.umd.js +2 -0
  10. package/dist/az-AZ.js +2 -0
  11. package/dist/az-AZ.umd.js +2 -0
  12. package/dist/bn-BD.js +2 -0
  13. package/dist/bn-BD.umd.js +2 -0
  14. package/dist/cs-CZ.js +2 -0
  15. package/dist/cs-CZ.umd.js +2 -0
  16. package/dist/da-DK.js +2 -0
  17. package/dist/da-DK.umd.js +2 -0
  18. package/dist/de-DE.js +2 -0
  19. package/dist/de-DE.umd.js +2 -0
  20. package/dist/el-GR.js +2 -0
  21. package/dist/el-GR.umd.js +2 -0
  22. package/dist/en-AU.js +2 -0
  23. package/dist/en-AU.umd.js +2 -0
  24. package/dist/en-BD.js +2 -0
  25. package/dist/en-BD.umd.js +2 -0
  26. package/dist/en-CA.js +2 -0
  27. package/dist/en-CA.umd.js +2 -0
  28. package/dist/en-GB.js +2 -0
  29. package/dist/en-GB.umd.js +2 -0
  30. package/dist/en-GH.js +2 -0
  31. package/dist/en-GH.umd.js +2 -0
  32. package/dist/en-IE.js +2 -0
  33. package/dist/en-IE.umd.js +2 -0
  34. package/dist/en-IN.js +2 -0
  35. package/dist/en-IN.umd.js +2 -0
  36. package/dist/en-KE.js +2 -0
  37. package/dist/en-KE.umd.js +2 -0
  38. package/dist/en-MY.js +2 -0
  39. package/dist/en-MY.umd.js +2 -0
  40. package/dist/en-NG.js +2 -0
  41. package/dist/en-NG.umd.js +2 -0
  42. package/dist/en-NZ.js +2 -0
  43. package/dist/en-NZ.umd.js +2 -0
  44. package/dist/en-PH.js +2 -0
  45. package/dist/en-PH.umd.js +2 -0
  46. package/dist/en-PK.js +2 -0
  47. package/dist/en-PK.umd.js +2 -0
  48. package/dist/en-SG.js +2 -0
  49. package/dist/en-SG.umd.js +2 -0
  50. package/dist/en-US.js +2 -0
  51. package/dist/en-US.umd.js +2 -0
  52. package/dist/en-ZA.js +2 -0
  53. package/dist/en-ZA.umd.js +2 -0
  54. package/dist/es-ES.js +2 -0
  55. package/dist/es-ES.umd.js +2 -0
  56. package/dist/es-MX.js +2 -0
  57. package/dist/es-MX.umd.js +2 -0
  58. package/dist/es-US.js +2 -0
  59. package/dist/es-US.umd.js +2 -0
  60. package/dist/fa-IR.js +2 -0
  61. package/dist/fa-IR.umd.js +2 -0
  62. package/dist/fi-FI.js +2 -0
  63. package/dist/fi-FI.umd.js +2 -0
  64. package/dist/fil-PH.js +2 -0
  65. package/dist/fil-PH.umd.js +2 -0
  66. package/dist/fr-BE.js +2 -0
  67. package/dist/fr-BE.umd.js +2 -0
  68. package/dist/fr-FR.js +2 -0
  69. package/dist/fr-FR.umd.js +2 -0
  70. package/dist/gu-IN.js +2 -0
  71. package/dist/gu-IN.umd.js +2 -0
  72. package/dist/ha-NG.js +2 -0
  73. package/dist/ha-NG.umd.js +2 -0
  74. package/dist/hbo-IL.js +2 -0
  75. package/dist/hbo-IL.umd.js +2 -0
  76. package/dist/he-IL.js +2 -0
  77. package/dist/he-IL.umd.js +2 -0
  78. package/dist/hi-IN.js +2 -0
  79. package/dist/hi-IN.umd.js +2 -0
  80. package/dist/hr-HR.js +2 -0
  81. package/dist/hr-HR.umd.js +2 -0
  82. package/dist/hu-HU.js +2 -0
  83. package/dist/hu-HU.umd.js +2 -0
  84. package/dist/id-ID.js +2 -0
  85. package/dist/id-ID.umd.js +2 -0
  86. package/dist/it-IT.js +2 -0
  87. package/dist/it-IT.umd.js +2 -0
  88. package/dist/ja-JP.js +2 -0
  89. package/dist/ja-JP.umd.js +2 -0
  90. package/dist/ka-GE.js +2 -0
  91. package/dist/ka-GE.umd.js +2 -0
  92. package/dist/kn-IN.js +2 -0
  93. package/dist/kn-IN.umd.js +2 -0
  94. package/dist/ko-KR.js +2 -0
  95. package/dist/ko-KR.umd.js +2 -0
  96. package/dist/lt-LT.js +2 -0
  97. package/dist/lt-LT.umd.js +2 -0
  98. package/dist/lv-LV.js +2 -0
  99. package/dist/lv-LV.umd.js +2 -0
  100. package/dist/mr-IN.js +2 -0
  101. package/dist/mr-IN.umd.js +2 -0
  102. package/dist/ms-MY.js +2 -0
  103. package/dist/ms-MY.umd.js +2 -0
  104. package/dist/nb-NO.js +2 -0
  105. package/dist/nb-NO.umd.js +2 -0
  106. package/dist/nl-NL.js +2 -0
  107. package/dist/nl-NL.umd.js +2 -0
  108. package/dist/pa-IN.js +2 -0
  109. package/dist/pa-IN.umd.js +2 -0
  110. package/dist/pl-PL.js +2 -0
  111. package/dist/pl-PL.umd.js +2 -0
  112. package/dist/pt-PT.js +2 -0
  113. package/dist/pt-PT.umd.js +2 -0
  114. package/dist/ro-RO.js +2 -0
  115. package/dist/ro-RO.umd.js +2 -0
  116. package/dist/ru-RU.js +2 -0
  117. package/dist/ru-RU.umd.js +2 -0
  118. package/dist/sr-Cyrl-RS.js +2 -0
  119. package/dist/sr-Cyrl-RS.umd.js +2 -0
  120. package/dist/sr-Latn-RS.js +2 -0
  121. package/dist/sr-Latn-RS.umd.js +2 -0
  122. package/dist/sv-SE.js +2 -0
  123. package/dist/sv-SE.umd.js +2 -0
  124. package/dist/sw-KE.js +2 -0
  125. package/dist/sw-KE.umd.js +2 -0
  126. package/dist/ta-IN.js +2 -0
  127. package/dist/ta-IN.umd.js +2 -0
  128. package/dist/te-IN.js +2 -0
  129. package/dist/te-IN.umd.js +2 -0
  130. package/dist/th-TH.js +2 -0
  131. package/dist/th-TH.umd.js +2 -0
  132. package/dist/tr-TR.js +2 -0
  133. package/dist/tr-TR.umd.js +2 -0
  134. package/dist/uk-UA.js +2 -0
  135. package/dist/uk-UA.umd.js +2 -0
  136. package/dist/ur-PK.js +2 -0
  137. package/dist/ur-PK.umd.js +2 -0
  138. package/dist/vi-VN.js +2 -0
  139. package/dist/vi-VN.umd.js +2 -0
  140. package/dist/yo-NG.js +2 -0
  141. package/dist/yo-NG.umd.js +2 -0
  142. package/dist/zh-Hans-CN.js +2 -0
  143. package/dist/zh-Hans-CN.umd.js +2 -0
  144. package/dist/zh-Hant-TW.js +2 -0
  145. package/dist/zh-Hant-TW.umd.js +2 -0
  146. package/package.json +47 -82
  147. package/src/am-ET.d.ts +40 -0
  148. package/src/am-ET.js +269 -0
  149. package/src/am-Latn-ET.d.ts +35 -0
  150. package/src/am-Latn-ET.js +264 -0
  151. package/src/ar-SA.d.ts +49 -0
  152. package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
  153. package/src/az-AZ.d.ts +37 -0
  154. package/src/az-AZ.js +312 -0
  155. package/src/bn-BD.d.ts +36 -0
  156. package/src/bn-BD.js +270 -0
  157. package/src/cs-CZ.d.ts +49 -0
  158. package/{lib/languages/cs.js → src/cs-CZ.js} +249 -40
  159. package/src/da-DK.d.ts +44 -0
  160. package/{lib/languages/da.js → src/da-DK.js} +136 -23
  161. package/src/de-DE.d.ts +57 -0
  162. package/src/de-DE.js +603 -0
  163. package/src/el-GR.d.ts +40 -0
  164. package/src/el-GR.js +418 -0
  165. package/src/en-AU.d.ts +47 -0
  166. package/src/en-AU.js +423 -0
  167. package/src/en-BD.d.ts +49 -0
  168. package/src/en-BD.js +415 -0
  169. package/src/en-CA.d.ts +63 -0
  170. package/src/en-CA.js +518 -0
  171. package/src/en-GB.d.ts +56 -0
  172. package/src/en-GB.js +469 -0
  173. package/src/en-GH.d.ts +11 -0
  174. package/src/en-GH.js +345 -0
  175. package/src/en-IE.d.ts +56 -0
  176. package/src/en-IE.js +479 -0
  177. package/src/en-IN.d.ts +49 -0
  178. package/src/en-IN.js +415 -0
  179. package/src/en-KE.d.ts +11 -0
  180. package/src/en-KE.js +345 -0
  181. package/src/en-MY.d.ts +11 -0
  182. package/src/en-MY.js +347 -0
  183. package/src/en-NG.d.ts +56 -0
  184. package/src/en-NG.js +479 -0
  185. package/src/en-NZ.d.ts +11 -0
  186. package/src/en-NZ.js +375 -0
  187. package/src/en-PH.d.ts +11 -0
  188. package/src/en-PH.js +345 -0
  189. package/src/en-PK.d.ts +49 -0
  190. package/src/en-PK.js +415 -0
  191. package/src/en-SG.d.ts +11 -0
  192. package/src/en-SG.js +345 -0
  193. package/src/en-US.d.ts +63 -0
  194. package/src/en-US.js +516 -0
  195. package/src/en-ZA.d.ts +56 -0
  196. package/src/en-ZA.js +478 -0
  197. package/src/es-ES.d.ts +65 -0
  198. package/src/es-ES.js +541 -0
  199. package/src/es-MX.d.ts +58 -0
  200. package/{lib/languages/es.js → src/es-MX.js} +237 -47
  201. package/src/es-US.d.ts +58 -0
  202. package/src/es-US.js +446 -0
  203. package/src/fa-IR.d.ts +38 -0
  204. package/src/fa-IR.js +246 -0
  205. package/src/fi-FI.d.ts +46 -0
  206. package/src/fi-FI.js +379 -0
  207. package/src/fil-PH.d.ts +37 -0
  208. package/{lib/languages/fil.js → src/fil-PH.js} +149 -24
  209. package/src/fr-BE.d.ts +49 -0
  210. package/src/fr-BE.js +453 -0
  211. package/src/fr-FR.d.ts +63 -0
  212. package/{lib/languages/fr.js → src/fr-FR.js} +200 -47
  213. package/src/gu-IN.d.ts +35 -0
  214. package/src/gu-IN.js +259 -0
  215. package/src/ha-NG.d.ts +37 -0
  216. package/{lib/languages/ha.js → src/ha-NG.js} +110 -16
  217. package/src/hbo-IL.d.ts +39 -0
  218. package/{lib/languages/hbo.js → src/hbo-IL.js} +217 -43
  219. package/src/he-IL.d.ts +37 -0
  220. package/src/he-IL.js +537 -0
  221. package/src/hi-IN.d.ts +36 -0
  222. package/src/hi-IN.js +280 -0
  223. package/src/hr-HR.d.ts +42 -0
  224. package/src/hr-HR.js +463 -0
  225. package/src/hu-HU.d.ts +38 -0
  226. package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
  227. package/src/id-ID.d.ts +38 -0
  228. package/{lib/languages/id.js → src/id-ID.js} +106 -20
  229. package/src/it-IT.d.ts +59 -0
  230. package/src/it-IT.js +506 -0
  231. package/src/ja-JP.d.ts +49 -0
  232. package/{lib/languages/ja.js → src/ja-JP.js} +119 -32
  233. package/src/ka-GE.d.ts +44 -0
  234. package/src/ka-GE.js +393 -0
  235. package/src/kn-IN.d.ts +35 -0
  236. package/{lib/languages/kn.js → src/kn-IN.js} +156 -34
  237. package/src/ko-KR.d.ts +45 -0
  238. package/{lib/languages/ko.js → src/ko-KR.js} +99 -24
  239. package/src/lt-LT.d.ts +49 -0
  240. package/src/lt-LT.js +543 -0
  241. package/src/lv-LV.d.ts +49 -0
  242. package/src/lv-LV.js +595 -0
  243. package/src/mr-IN.d.ts +36 -0
  244. package/src/mr-IN.js +260 -0
  245. package/src/ms-MY.d.ts +37 -0
  246. package/{lib/languages/ms.js → src/ms-MY.js} +118 -20
  247. package/src/nb-NO.d.ts +44 -0
  248. package/{lib/languages/nb.js → src/nb-NO.js} +165 -33
  249. package/src/nl-NL.d.ts +54 -0
  250. package/{lib/languages/nl.js → src/nl-NL.js} +271 -47
  251. package/src/pa-IN.d.ts +36 -0
  252. package/src/pa-IN.js +268 -0
  253. package/src/pl-PL.d.ts +55 -0
  254. package/src/pl-PL.js +585 -0
  255. package/src/pt-PT.d.ts +45 -0
  256. package/src/pt-PT.js +514 -0
  257. package/src/ro-RO.d.ts +44 -0
  258. package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
  259. package/src/ru-RU.d.ts +50 -0
  260. package/src/ru-RU.js +535 -0
  261. package/src/sr-Cyrl-RS.d.ts +49 -0
  262. package/src/sr-Cyrl-RS.js +503 -0
  263. package/src/sr-Latn-RS.d.ts +49 -0
  264. package/src/sr-Latn-RS.js +503 -0
  265. package/src/sv-SE.d.ts +44 -0
  266. package/{lib/languages/sv.js → src/sv-SE.js} +149 -34
  267. package/src/sw-KE.d.ts +37 -0
  268. package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
  269. package/src/ta-IN.d.ts +35 -0
  270. package/{lib/languages/ta.js → src/ta-IN.js} +163 -47
  271. package/src/te-IN.d.ts +35 -0
  272. package/{lib/languages/te.js → src/te-IN.js} +147 -46
  273. package/src/th-TH.d.ts +38 -0
  274. package/{lib/languages/th.js → src/th-TH.js} +99 -6
  275. package/src/tr-TR.d.ts +48 -0
  276. package/src/tr-TR.js +397 -0
  277. package/src/uk-UA.d.ts +42 -0
  278. package/src/uk-UA.js +463 -0
  279. package/src/ur-PK.d.ts +36 -0
  280. package/src/ur-PK.js +268 -0
  281. package/src/utils/expand-scientific.d.ts +32 -0
  282. package/src/utils/expand-scientific.js +65 -0
  283. package/src/utils/parse-cardinal.d.ts +14 -0
  284. package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
  285. package/src/utils/parse-currency.d.ts +14 -0
  286. package/src/utils/parse-currency.js +91 -0
  287. package/src/utils/parse-ordinal.d.ts +10 -0
  288. package/src/utils/parse-ordinal.js +103 -0
  289. package/src/vi-VN.d.ts +48 -0
  290. package/{lib/languages/vi.js → src/vi-VN.js} +124 -53
  291. package/src/yo-NG.d.ts +37 -0
  292. package/src/yo-NG.js +403 -0
  293. package/src/zh-Hans-CN.d.ts +48 -0
  294. package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
  295. package/src/zh-Hant-TW.d.ts +50 -0
  296. package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
  297. package/dist/languages/am-Latn.js +0 -3
  298. package/dist/languages/am-Latn.js.map +0 -1
  299. package/dist/languages/am.js +0 -3
  300. package/dist/languages/am.js.map +0 -1
  301. package/dist/languages/ar.js +0 -3
  302. package/dist/languages/ar.js.map +0 -1
  303. package/dist/languages/az.js +0 -3
  304. package/dist/languages/az.js.map +0 -1
  305. package/dist/languages/bn.js +0 -3
  306. package/dist/languages/bn.js.map +0 -1
  307. package/dist/languages/cs.js +0 -3
  308. package/dist/languages/cs.js.map +0 -1
  309. package/dist/languages/da.js +0 -3
  310. package/dist/languages/da.js.map +0 -1
  311. package/dist/languages/de.js +0 -3
  312. package/dist/languages/de.js.map +0 -1
  313. package/dist/languages/el.js +0 -3
  314. package/dist/languages/el.js.map +0 -1
  315. package/dist/languages/en.js +0 -3
  316. package/dist/languages/en.js.map +0 -1
  317. package/dist/languages/es.js +0 -3
  318. package/dist/languages/es.js.map +0 -1
  319. package/dist/languages/fa.js +0 -3
  320. package/dist/languages/fa.js.map +0 -1
  321. package/dist/languages/fi.js +0 -3
  322. package/dist/languages/fi.js.map +0 -1
  323. package/dist/languages/fil.js +0 -3
  324. package/dist/languages/fil.js.map +0 -1
  325. package/dist/languages/fr-BE.js +0 -3
  326. package/dist/languages/fr-BE.js.map +0 -1
  327. package/dist/languages/fr.js +0 -3
  328. package/dist/languages/fr.js.map +0 -1
  329. package/dist/languages/gu.js +0 -3
  330. package/dist/languages/gu.js.map +0 -1
  331. package/dist/languages/ha.js +0 -3
  332. package/dist/languages/ha.js.map +0 -1
  333. package/dist/languages/hbo.js +0 -3
  334. package/dist/languages/hbo.js.map +0 -1
  335. package/dist/languages/he.js +0 -3
  336. package/dist/languages/he.js.map +0 -1
  337. package/dist/languages/hi.js +0 -3
  338. package/dist/languages/hi.js.map +0 -1
  339. package/dist/languages/hr.js +0 -3
  340. package/dist/languages/hr.js.map +0 -1
  341. package/dist/languages/hu.js +0 -3
  342. package/dist/languages/hu.js.map +0 -1
  343. package/dist/languages/id.js +0 -3
  344. package/dist/languages/id.js.map +0 -1
  345. package/dist/languages/it.js +0 -3
  346. package/dist/languages/it.js.map +0 -1
  347. package/dist/languages/ja.js +0 -3
  348. package/dist/languages/ja.js.map +0 -1
  349. package/dist/languages/kn.js +0 -3
  350. package/dist/languages/kn.js.map +0 -1
  351. package/dist/languages/ko.js +0 -3
  352. package/dist/languages/ko.js.map +0 -1
  353. package/dist/languages/lt.js +0 -3
  354. package/dist/languages/lt.js.map +0 -1
  355. package/dist/languages/lv.js +0 -3
  356. package/dist/languages/lv.js.map +0 -1
  357. package/dist/languages/mr.js +0 -3
  358. package/dist/languages/mr.js.map +0 -1
  359. package/dist/languages/ms.js +0 -3
  360. package/dist/languages/ms.js.map +0 -1
  361. package/dist/languages/nb.js +0 -3
  362. package/dist/languages/nb.js.map +0 -1
  363. package/dist/languages/nl.js +0 -3
  364. package/dist/languages/nl.js.map +0 -1
  365. package/dist/languages/pa.js +0 -3
  366. package/dist/languages/pa.js.map +0 -1
  367. package/dist/languages/pl.js +0 -3
  368. package/dist/languages/pl.js.map +0 -1
  369. package/dist/languages/pt.js +0 -3
  370. package/dist/languages/pt.js.map +0 -1
  371. package/dist/languages/ro.js +0 -3
  372. package/dist/languages/ro.js.map +0 -1
  373. package/dist/languages/ru.js +0 -3
  374. package/dist/languages/ru.js.map +0 -1
  375. package/dist/languages/sr-Cyrl.js +0 -3
  376. package/dist/languages/sr-Cyrl.js.map +0 -1
  377. package/dist/languages/sr-Latn.js +0 -3
  378. package/dist/languages/sr-Latn.js.map +0 -1
  379. package/dist/languages/sv.js +0 -3
  380. package/dist/languages/sv.js.map +0 -1
  381. package/dist/languages/sw.js +0 -3
  382. package/dist/languages/sw.js.map +0 -1
  383. package/dist/languages/ta.js +0 -3
  384. package/dist/languages/ta.js.map +0 -1
  385. package/dist/languages/te.js +0 -3
  386. package/dist/languages/te.js.map +0 -1
  387. package/dist/languages/th.js +0 -3
  388. package/dist/languages/th.js.map +0 -1
  389. package/dist/languages/tr.js +0 -3
  390. package/dist/languages/tr.js.map +0 -1
  391. package/dist/languages/uk.js +0 -3
  392. package/dist/languages/uk.js.map +0 -1
  393. package/dist/languages/ur.js +0 -3
  394. package/dist/languages/ur.js.map +0 -1
  395. package/dist/languages/vi.js +0 -3
  396. package/dist/languages/vi.js.map +0 -1
  397. package/dist/languages/zh-Hans.js +0 -3
  398. package/dist/languages/zh-Hans.js.map +0 -1
  399. package/dist/languages/zh-Hant.js +0 -3
  400. package/dist/languages/zh-Hant.js.map +0 -1
  401. package/dist/n2words.js +0 -3
  402. package/dist/n2words.js.map +0 -1
  403. package/lib/languages/am-Latn.d.ts +0 -7
  404. package/lib/languages/am-Latn.js +0 -164
  405. package/lib/languages/am.d.ts +0 -7
  406. package/lib/languages/am.js +0 -164
  407. package/lib/languages/ar.d.ts +0 -17
  408. package/lib/languages/az.d.ts +0 -7
  409. package/lib/languages/az.js +0 -176
  410. package/lib/languages/bn.d.ts +0 -7
  411. package/lib/languages/bn.js +0 -145
  412. package/lib/languages/cs.d.ts +0 -18
  413. package/lib/languages/da.d.ts +0 -14
  414. package/lib/languages/de.d.ts +0 -17
  415. package/lib/languages/de.js +0 -332
  416. package/lib/languages/el.d.ts +0 -14
  417. package/lib/languages/el.js +0 -243
  418. package/lib/languages/en.d.ts +0 -17
  419. package/lib/languages/en.js +0 -256
  420. package/lib/languages/es.d.ts +0 -21
  421. package/lib/languages/fa.d.ts +0 -7
  422. package/lib/languages/fa.js +0 -134
  423. package/lib/languages/fi.d.ts +0 -14
  424. package/lib/languages/fi.js +0 -245
  425. package/lib/languages/fil.d.ts +0 -7
  426. package/lib/languages/fr-BE.d.ts +0 -11
  427. package/lib/languages/fr-BE.js +0 -300
  428. package/lib/languages/fr.d.ts +0 -21
  429. package/lib/languages/gu.d.ts +0 -7
  430. package/lib/languages/gu.js +0 -137
  431. package/lib/languages/ha.d.ts +0 -7
  432. package/lib/languages/hbo.d.ts +0 -13
  433. package/lib/languages/he.d.ts +0 -13
  434. package/lib/languages/he.js +0 -276
  435. package/lib/languages/hi.d.ts +0 -7
  436. package/lib/languages/hi.js +0 -145
  437. package/lib/languages/hr.d.ts +0 -11
  438. package/lib/languages/hr.js +0 -218
  439. package/lib/languages/hu.d.ts +0 -7
  440. package/lib/languages/id.d.ts +0 -7
  441. package/lib/languages/it.d.ts +0 -19
  442. package/lib/languages/it.js +0 -377
  443. package/lib/languages/ja.d.ts +0 -17
  444. package/lib/languages/kn.d.ts +0 -7
  445. package/lib/languages/ko.d.ts +0 -14
  446. package/lib/languages/lt.d.ts +0 -18
  447. package/lib/languages/lt.js +0 -310
  448. package/lib/languages/lv.d.ts +0 -18
  449. package/lib/languages/lv.js +0 -321
  450. package/lib/languages/mr.d.ts +0 -7
  451. package/lib/languages/mr.js +0 -137
  452. package/lib/languages/ms.d.ts +0 -7
  453. package/lib/languages/nb.d.ts +0 -14
  454. package/lib/languages/nl.d.ts +0 -26
  455. package/lib/languages/pa.d.ts +0 -7
  456. package/lib/languages/pa.js +0 -163
  457. package/lib/languages/pl.d.ts +0 -22
  458. package/lib/languages/pl.js +0 -330
  459. package/lib/languages/pt.d.ts +0 -17
  460. package/lib/languages/pt.js +0 -306
  461. package/lib/languages/ro.d.ts +0 -18
  462. package/lib/languages/ru.d.ts +0 -11
  463. package/lib/languages/ru.js +0 -240
  464. package/lib/languages/sr-Cyrl.d.ts +0 -11
  465. package/lib/languages/sr-Cyrl.js +0 -215
  466. package/lib/languages/sr-Latn.d.ts +0 -11
  467. package/lib/languages/sr-Latn.js +0 -215
  468. package/lib/languages/sv.d.ts +0 -14
  469. package/lib/languages/sw.d.ts +0 -7
  470. package/lib/languages/ta.d.ts +0 -7
  471. package/lib/languages/te.d.ts +0 -7
  472. package/lib/languages/th.d.ts +0 -7
  473. package/lib/languages/tr.d.ts +0 -18
  474. package/lib/languages/tr.js +0 -263
  475. package/lib/languages/uk.d.ts +0 -11
  476. package/lib/languages/uk.js +0 -218
  477. package/lib/languages/ur.d.ts +0 -7
  478. package/lib/languages/ur.js +0 -163
  479. package/lib/languages/vi.d.ts +0 -17
  480. package/lib/languages/zh-Hans.d.ts +0 -11
  481. package/lib/languages/zh-Hant.d.ts +0 -11
  482. package/lib/n2words.d.ts +0 -53
  483. package/lib/n2words.js +0 -122
  484. package/lib/utils/parse-numeric.d.ts +0 -17
  485. /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
  486. /package/{lib → src}/utils/is-plain-object.js +0 -0
  487. /package/{lib → src}/utils/validate-options.d.ts +0 -0
  488. /package/{lib → src}/utils/validate-options.js +0 -0
@@ -1,13 +1,9 @@
1
1
  /**
2
- * Dutch language converter - Functional Implementation
2
+ * Dutch (Netherlands) language converter
3
3
  *
4
- * A performance-optimized number-to-words converter using precomputed lookup tables.
5
- * Self-contained module with its own input validation, ready for subpath exports.
4
+ * CLDR: nl-NL | Dutch as used in the Netherlands
6
5
  *
7
- * Key optimization: Precompute all segment values (0-999) at module load.
8
- * This eliminates all per-call string manipulation for segment conversion.
9
- *
10
- * Dutch-specific rules (handled in precomputation):
6
+ * Dutch-specific rules:
11
7
  * - Inverted tens-ones: eenentwintig (one-and-twenty)
12
8
  * - "ën" connector when ones ends in 'e' (twee, drie)
13
9
  * - Compound words without spaces
@@ -17,8 +13,10 @@
17
13
  * - Long scale with -ard forms
18
14
  */
19
15
 
20
- import { parseNumericValue } from '../utils/parse-numeric.js'
21
- import { validateOptions } from '../utils/validate-options.js'
16
+ import { parseCardinalValue } from './utils/parse-cardinal.js'
17
+ import { parseCurrencyValue } from './utils/parse-currency.js'
18
+ import { parseOrdinalValue } from './utils/parse-ordinal.js'
19
+ import { validateOptions } from './utils/validate-options.js'
22
20
 
23
21
  // ============================================================================
24
22
  // Vocabulary (module-level constants)
@@ -37,8 +35,14 @@ const ZERO = 'nul'
37
35
  const NEGATIVE = 'min'
38
36
  const DECIMAL_SEP = 'komma'
39
37
 
38
+ // Currency vocabulary (Euro)
39
+ const EURO = 'euro'
40
+ const EUROS = 'euro' // Euro doesn't pluralize in Dutch
41
+ const CENT = 'cent'
42
+ const CENTEN = 'cent' // Cent doesn't pluralize in written currency
43
+
40
44
  // ============================================================================
41
- // Precomputed Lookup Tables (built once at module load)
45
+ // Segment Building
42
46
  // ============================================================================
43
47
 
44
48
  /**
@@ -51,8 +55,8 @@ function buildSegment (n, withAnd) {
51
55
  if (n === 0) return ''
52
56
 
53
57
  const ones = n % 10
54
- const tens = Math.floor(n / 10) % 10
55
- const hundreds = Math.floor(n / 100)
58
+ const tens = Math.trunc(n / 10) % 10
59
+ const hundreds = Math.trunc(n / 100)
56
60
  const tensOnes = n % 100
57
61
 
58
62
  let result = ''
@@ -98,18 +102,6 @@ function buildSegment (n, withAnd) {
98
102
  return result
99
103
  }
100
104
 
101
- // Precompute all 1000 segment words (0-999) - standard form
102
- const SEGMENTS = new Array(1000)
103
- for (let i = 0; i < 1000; i++) {
104
- SEGMENTS[i] = buildSegment(i, false)
105
- }
106
-
107
- // Precompute all 1000 segment words (0-999) - with optional "en"
108
- const SEGMENTS_WITH_AND = new Array(1000)
109
- for (let i = 0; i < 1000; i++) {
110
- SEGMENTS_WITH_AND[i] = buildSegment(i, true)
111
- }
112
-
113
105
  // ============================================================================
114
106
  // Conversion Functions
115
107
  // ============================================================================
@@ -125,7 +117,6 @@ function integerToWords (n, options) {
125
117
  if (n === 0n) return ZERO
126
118
 
127
119
  const { accentOne, includeOptionalAnd, noHundredPairing } = options
128
- const segments = includeOptionalAnd ? SEGMENTS_WITH_AND : SEGMENTS
129
120
 
130
121
  // Apply één/een replacement
131
122
  const applyAccent = (word) => {
@@ -135,9 +126,9 @@ function integerToWords (n, options) {
135
126
  return word
136
127
  }
137
128
 
138
- // Fast path: numbers < 1000 (direct lookup)
129
+ // Fast path: numbers < 1000
139
130
  if (n < 1000n) {
140
- return applyAccent(segments[Number(n)])
131
+ return applyAccent(buildSegment(Number(n), includeOptionalAnd))
141
132
  }
142
133
 
143
134
  // Hundred pairing for 1100-9999
@@ -147,9 +138,9 @@ function integerToWords (n, options) {
147
138
 
148
139
  // Only use pairing when high is not a multiple of 10
149
140
  if (high % 10 !== 0) {
150
- let result = segments[high] + HUNDRED
141
+ let result = buildSegment(high, includeOptionalAnd) + HUNDRED
151
142
  if (low > 0) {
152
- const lowWord = segments[low]
143
+ const lowWord = buildSegment(low, includeOptionalAnd)
153
144
  if (includeOptionalAnd && low < 13) {
154
145
  result += ' en ' + lowWord
155
146
  } else {
@@ -171,11 +162,11 @@ function integerToWords (n, options) {
171
162
  result = SCALES[0]
172
163
  } else {
173
164
  // Compound: "vijfduizend"
174
- result = segments[thousands] + SCALES[0]
165
+ result = buildSegment(thousands, includeOptionalAnd) + SCALES[0]
175
166
  }
176
167
 
177
168
  if (remainder > 0) {
178
- const remainderWord = segments[remainder]
169
+ const remainderWord = buildSegment(remainder, includeOptionalAnd)
179
170
  if (includeOptionalAnd && remainder < 13) {
180
171
  result += ' en ' + remainderWord
181
172
  } else {
@@ -200,7 +191,6 @@ function integerToWords (n, options) {
200
191
  */
201
192
  function buildLargeNumberWords (n, options) {
202
193
  const { includeOptionalAnd } = options
203
- const segmentLookup = includeOptionalAnd ? SEGMENTS_WITH_AND : SEGMENTS
204
194
 
205
195
  // Extract segments using BigInt division (faster than string slicing)
206
196
  // Segments stored least-significant first (index 0 = ones, 1 = thousands, etc.)
@@ -221,7 +211,7 @@ function buildLargeNumberWords (n, options) {
221
211
 
222
212
  if (i === 0) {
223
213
  // Units segment
224
- const word = segmentLookup[segment]
214
+ const word = buildSegment(segment, includeOptionalAnd)
225
215
  if (result) {
226
216
  if (prevWasScale && includeOptionalAnd && segment < 13) {
227
217
  result += ' en ' + word
@@ -238,7 +228,7 @@ function buildLargeNumberWords (n, options) {
238
228
  if (segment === 1) {
239
229
  result += SCALES[0]
240
230
  } else {
241
- result += segmentLookup[segment] + SCALES[0]
231
+ result += buildSegment(segment, includeOptionalAnd) + SCALES[0]
242
232
  }
243
233
  prevWasScale = true
244
234
  } else {
@@ -248,7 +238,7 @@ function buildLargeNumberWords (n, options) {
248
238
  if (segment === 1) {
249
239
  result += 'een ' + scaleWord
250
240
  } else {
251
- result += segmentLookup[segment] + ' ' + scaleWord
241
+ result += buildSegment(segment, includeOptionalAnd) + ' ' + scaleWord
252
242
  }
253
243
  prevWasScale = true
254
244
  }
@@ -302,20 +292,23 @@ function decimalPartToWords (decimalPart, options) {
302
292
  * @throws {Error} If value is not a valid number format
303
293
  *
304
294
  * @example
305
- * toWords(21) // 'eenentwintig'
306
- * toWords(1) // 'één'
307
- * toWords(1, {accentOne: false}) // 'een'
308
- * toWords(1104) // 'elfhonderd vier'
295
+ * toCardinal(21) // 'eenentwintig'
296
+ * toCardinal(1) // 'één'
297
+ * toCardinal(1, {accentOne: false}) // 'een'
298
+ * toCardinal(1104) // 'elfhonderd vier'
309
299
  */
310
- function toWords (value, options) {
300
+ function toCardinal (value, options) {
311
301
  options = validateOptions(options)
312
- const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
302
+ const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
313
303
 
314
- const opts = {
315
- accentOne: options.accentOne !== false, // default true
316
- includeOptionalAnd: options.includeOptionalAnd || false,
317
- noHundredPairing: options.noHundredPairing || false
318
- }
304
+ // Apply option defaults
305
+ const {
306
+ accentOne = true,
307
+ includeOptionalAnd = false,
308
+ noHundredPairing = false
309
+ } = options
310
+
311
+ const opts = { accentOne, includeOptionalAnd, noHundredPairing }
319
312
 
320
313
  let result = ''
321
314
 
@@ -332,8 +325,239 @@ function toWords (value, options) {
332
325
  return result
333
326
  }
334
327
 
328
+ // ============================================================================
329
+ // Ordinal Functions
330
+ // ============================================================================
331
+
332
+ // Ordinal forms for 1-9
333
+ const ORDINAL_ONES = ['', 'eerste', 'tweede', 'derde', 'vierde', 'vijfde', 'zesde', 'zevende', 'achtste', 'negende']
334
+
335
+ /**
336
+ * Converts a small cardinal to ordinal.
337
+ * Rules: 1-19 add -de (except eerste, derde, achtste), 20+ add -ste
338
+ *
339
+ * @param {string} cardinalWord - Cardinal word
340
+ * @param {number} n - The number value (0-99)
341
+ * @returns {string} Ordinal word
342
+ */
343
+ function smallCardinalToOrdinal (cardinalWord, n) {
344
+ // Special cases for 1-9
345
+ if (n >= 1 && n <= 9) return ORDINAL_ONES[n]
346
+
347
+ // 10-19: add -de or -e if ends in d
348
+ if (n < 20) {
349
+ if (cardinalWord.endsWith('d')) {
350
+ return cardinalWord + 'e'
351
+ }
352
+ return cardinalWord + 'de'
353
+ }
354
+
355
+ // 20+: add -ste
356
+ return cardinalWord + 'ste'
357
+ }
358
+
359
+ /**
360
+ * Builds ordinal words for 0-999.
361
+ *
362
+ * @param {number} n - Number 0-999
363
+ * @returns {string} Dutch ordinal words
364
+ */
365
+ function buildOrdinalSegment (n) {
366
+ if (n === 0) return ''
367
+
368
+ const hundreds = Math.trunc(n / 100)
369
+ const tensOnes = n % 100
370
+
371
+ // Simple cases: 1-99
372
+ if (hundreds === 0) {
373
+ const cardinalWord = buildSegment(n, false)
374
+ return smallCardinalToOrdinal(cardinalWord, n)
375
+ }
376
+
377
+ // Hundreds: need to build prefix + ordinal suffix
378
+ let prefix = ''
379
+ if (hundreds === 1) {
380
+ prefix = HUNDRED
381
+ } else {
382
+ prefix = ONES[hundreds] + HUNDRED
383
+ }
384
+
385
+ if (tensOnes === 0) {
386
+ // Exact hundred: honderdste, tweehonderdste
387
+ return prefix + 'ste'
388
+ }
389
+
390
+ // Hundreds + remainder: honderd eerste, tweehonderd drieëntwintigste
391
+ // Dutch ordinals with hundreds use a space before the ordinal part
392
+ const ordinalPart = smallCardinalToOrdinal(buildSegment(tensOnes, false), tensOnes)
393
+ return prefix + ' ' + ordinalPart
394
+ }
395
+
396
+ /**
397
+ * Converts a number to Dutch ordinal words.
398
+ *
399
+ * @param {number | string | bigint} value - The number to convert
400
+ * @returns {string} Dutch ordinal words
401
+ *
402
+ * @example
403
+ * toOrdinal(1) // 'eerste'
404
+ * toOrdinal(21) // 'eenentwintigste'
405
+ * toOrdinal(100) // 'honderdste'
406
+ */
407
+ function toOrdinal (value) {
408
+ const n = parseOrdinalValue(value)
409
+
410
+ // Fast path: 1-9
411
+ if (n < 10n) return ORDINAL_ONES[Number(n)]
412
+
413
+ // Fast path: 10-99
414
+ if (n < 100n) {
415
+ const cardinalWord = buildSegment(Number(n), false)
416
+ return smallCardinalToOrdinal(cardinalWord, Number(n))
417
+ }
418
+
419
+ // Fast path: 100-999
420
+ if (n < 1000n) {
421
+ return buildOrdinalSegment(Number(n))
422
+ }
423
+
424
+ // Large numbers: build with cardinal then convert last segment
425
+ return buildLargeOrdinal(n)
426
+ }
427
+
428
+ /**
429
+ * Builds ordinal words for large numbers.
430
+ *
431
+ * @param {bigint} n - Non-negative integer >= 1000
432
+ * @returns {string} Dutch ordinal words
433
+ */
434
+ function buildLargeOrdinal (n) {
435
+ // Extract segments
436
+ const segments = []
437
+ let temp = n
438
+ while (temp > 0n) {
439
+ segments.push(Number(temp % 1000n))
440
+ temp = temp / 1000n
441
+ }
442
+
443
+ // Find the lowest non-zero segment
444
+ let lowestNonZeroIdx = 0
445
+ for (let i = 0; i < segments.length; i++) {
446
+ if (segments[i] !== 0) {
447
+ lowestNonZeroIdx = i
448
+ break
449
+ }
450
+ }
451
+
452
+ // Scale ordinal words
453
+ const SCALE_ORDINAL = ['', 'duizendste', 'miljoenste', 'miljardste', 'biljoenste', 'biljardste', 'triljoenste']
454
+
455
+ let result = ''
456
+
457
+ for (let i = segments.length - 1; i >= 0; i--) {
458
+ const segment = segments[i]
459
+ if (segment === 0) continue
460
+
461
+ if (result) result += ' '
462
+
463
+ if (i === lowestNonZeroIdx) {
464
+ // Last non-zero segment gets ordinal form
465
+ if (i === 0) {
466
+ // Units segment: use ordinal segment builder
467
+ result += buildOrdinalSegment(segment)
468
+ } else if (segment === 1 && i > 0) {
469
+ // Exact scale: duizendste, miljoenste, etc.
470
+ if (i === 1) {
471
+ result += SCALE_ORDINAL[i]
472
+ } else {
473
+ result += 'een ' + SCALE_ORDINAL[i]
474
+ }
475
+ } else {
476
+ // Segment + scale ordinal
477
+ if (i === 1) {
478
+ result += buildSegment(segment, false) + SCALE_ORDINAL[i]
479
+ } else {
480
+ result += buildSegment(segment, false) + ' ' + SCALE_ORDINAL[i]
481
+ }
482
+ }
483
+ } else {
484
+ // Higher segments use cardinal form
485
+ if (i === 1) {
486
+ if (segment === 1) {
487
+ result += SCALES[0]
488
+ } else {
489
+ result += buildSegment(segment, false) + SCALES[0]
490
+ }
491
+ } else {
492
+ const scaleWord = SCALES[i - 1]
493
+ if (segment === 1) {
494
+ result += 'een ' + scaleWord
495
+ } else {
496
+ result += buildSegment(segment, false) + ' ' + scaleWord
497
+ }
498
+ }
499
+ }
500
+ }
501
+
502
+ return result
503
+ }
504
+
505
+ // ============================================================================
506
+ // Currency Functions
507
+ // ============================================================================
508
+
509
+ /**
510
+ * Converts a number to Dutch currency words (Euro).
511
+ *
512
+ * @param {number | string | bigint} value - The amount to convert
513
+ * @param {Object} [options]
514
+ * @param {boolean} [options.and=true] - Include "en" between euros and cents
515
+ * @returns {string} Dutch currency words
516
+ *
517
+ * @example
518
+ * toCurrency(42.50) // 'tweeënveertig euro en vijftig cent'
519
+ * toCurrency(1) // 'één euro'
520
+ * toCurrency(0.01) // 'één cent'
521
+ */
522
+ function toCurrency (value, options) {
523
+ options = validateOptions(options)
524
+ const { isNegative, dollars: euros, cents } = parseCurrencyValue(value)
525
+ const { and = true } = options
526
+
527
+ let result = ''
528
+
529
+ if (isNegative) {
530
+ result = NEGATIVE + ' '
531
+ }
532
+
533
+ const hasEuros = euros > 0n
534
+ const hasCents = cents > 0n
535
+
536
+ if (!hasEuros && !hasCents) {
537
+ return ZERO + ' ' + EUROS
538
+ }
539
+
540
+ // Use accentOne: true for currency (één euro, één cent)
541
+ const opts = { accentOne: true, includeOptionalAnd: false, noHundredPairing: true }
542
+
543
+ if (hasEuros) {
544
+ const euroWords = integerToWords(euros, opts)
545
+ result += euroWords + ' ' + (euros === 1n ? EURO : EUROS)
546
+ }
547
+
548
+ if (hasCents) {
549
+ if (hasEuros) {
550
+ result += and ? ' en ' : ' '
551
+ }
552
+ const centWords = integerToWords(cents, opts)
553
+ result += centWords + ' ' + (cents === 1n ? CENT : CENTEN)
554
+ }
555
+
556
+ return result
557
+ }
558
+
335
559
  // ============================================================================
336
560
  // Public API
337
561
  // ============================================================================
338
562
 
339
- export { toWords }
563
+ export { toCardinal, toOrdinal, toCurrency }
package/src/pa-IN.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Converts a numeric value to Punjabi words.
3
+ *
4
+ * @param {number | string | bigint} value - The numeric value to convert
5
+ * @returns {string} The number in Punjabi words
6
+ */
7
+ export function toCardinal(value: number | string | bigint): string;
8
+ /**
9
+ * Converts a numeric value to Punjabi ordinal words.
10
+ *
11
+ * @param {number | string | bigint} value - The numeric value to convert (positive integer)
12
+ * @returns {string} The number as ordinal words
13
+ * @throws {TypeError} If value is not a valid numeric type
14
+ * @throws {RangeError} If value is negative, zero, or has a decimal part
15
+ *
16
+ * @example
17
+ * toOrdinal(1) // 'ਪਹਿਲਾ'
18
+ * toOrdinal(2) // 'ਦੂਜਾ'
19
+ * toOrdinal(3) // 'ਤੀਜਾ'
20
+ * toOrdinal(10) // 'ਦੱਸਵਾਂ'
21
+ */
22
+ export function toOrdinal(value: number | string | bigint): string;
23
+ /**
24
+ * Converts a numeric value to Punjabi currency words (Indian Rupee).
25
+ *
26
+ * @param {number | string | bigint} value - The currency amount to convert
27
+ * @returns {string} The amount in Punjabi currency words
28
+ * @throws {TypeError} If value is not a valid numeric type
29
+ * @throws {Error} If value is not a valid number format
30
+ *
31
+ * @example
32
+ * toCurrency(42.50) // 'ਬਿਆਲੀ ਰੁਪਏ ਪੰਜਾਹ ਪੈਸੇ'
33
+ * toCurrency(1) // 'ਇੱਕ ਰੁਪਇਆ'
34
+ * toCurrency(0.01) // 'ਇੱਕ ਪੈਸਾ'
35
+ */
36
+ export function toCurrency(value: number | string | bigint): string;