n2words 3.1.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/LICENSE +1 -1
- package/README.md +64 -184
- package/dist/am-ET.js +2 -0
- package/dist/am-ET.umd.js +2 -0
- package/dist/am-Latn-ET.js +2 -0
- package/dist/am-Latn-ET.umd.js +2 -0
- package/dist/ar-SA.js +2 -0
- package/dist/ar-SA.umd.js +2 -0
- package/dist/az-AZ.js +2 -0
- package/dist/az-AZ.umd.js +2 -0
- package/dist/bn-BD.js +2 -0
- package/dist/bn-BD.umd.js +2 -0
- package/dist/cs-CZ.js +2 -0
- package/dist/cs-CZ.umd.js +2 -0
- package/dist/da-DK.js +2 -0
- package/dist/da-DK.umd.js +2 -0
- package/dist/de-DE.js +2 -0
- package/dist/de-DE.umd.js +2 -0
- package/dist/el-GR.js +2 -0
- package/dist/el-GR.umd.js +2 -0
- package/dist/en-AU.js +2 -0
- package/dist/en-AU.umd.js +2 -0
- package/dist/en-BD.js +2 -0
- package/dist/en-BD.umd.js +2 -0
- package/dist/en-CA.js +2 -0
- package/dist/en-CA.umd.js +2 -0
- package/dist/en-GB.js +2 -0
- package/dist/en-GB.umd.js +2 -0
- package/dist/en-GH.js +2 -0
- package/dist/en-GH.umd.js +2 -0
- package/dist/en-IE.js +2 -0
- package/dist/en-IE.umd.js +2 -0
- package/dist/en-IN.js +2 -0
- package/dist/en-IN.umd.js +2 -0
- package/dist/en-KE.js +2 -0
- package/dist/en-KE.umd.js +2 -0
- package/dist/en-MY.js +2 -0
- package/dist/en-MY.umd.js +2 -0
- package/dist/en-NG.js +2 -0
- package/dist/en-NG.umd.js +2 -0
- package/dist/en-NZ.js +2 -0
- package/dist/en-NZ.umd.js +2 -0
- package/dist/en-PH.js +2 -0
- package/dist/en-PH.umd.js +2 -0
- package/dist/en-PK.js +2 -0
- package/dist/en-PK.umd.js +2 -0
- package/dist/en-SG.js +2 -0
- package/dist/en-SG.umd.js +2 -0
- package/dist/en-US.js +2 -0
- package/dist/en-US.umd.js +2 -0
- package/dist/en-ZA.js +2 -0
- package/dist/en-ZA.umd.js +2 -0
- package/dist/es-ES.js +2 -0
- package/dist/es-ES.umd.js +2 -0
- package/dist/es-MX.js +2 -0
- package/dist/es-MX.umd.js +2 -0
- package/dist/es-US.js +2 -0
- package/dist/es-US.umd.js +2 -0
- package/dist/fa-IR.js +2 -0
- package/dist/fa-IR.umd.js +2 -0
- package/dist/fi-FI.js +2 -0
- package/dist/fi-FI.umd.js +2 -0
- package/dist/fil-PH.js +2 -0
- package/dist/fil-PH.umd.js +2 -0
- package/dist/fr-BE.js +2 -0
- package/dist/fr-BE.umd.js +2 -0
- package/dist/fr-FR.js +2 -0
- package/dist/fr-FR.umd.js +2 -0
- package/dist/gu-IN.js +2 -0
- package/dist/gu-IN.umd.js +2 -0
- package/dist/ha-NG.js +2 -0
- package/dist/ha-NG.umd.js +2 -0
- package/dist/hbo-IL.js +2 -0
- package/dist/hbo-IL.umd.js +2 -0
- package/dist/he-IL.js +2 -0
- package/dist/he-IL.umd.js +2 -0
- package/dist/hi-IN.js +2 -0
- package/dist/hi-IN.umd.js +2 -0
- package/dist/hr-HR.js +2 -0
- package/dist/hr-HR.umd.js +2 -0
- package/dist/hu-HU.js +2 -0
- package/dist/hu-HU.umd.js +2 -0
- package/dist/id-ID.js +2 -0
- package/dist/id-ID.umd.js +2 -0
- package/dist/it-IT.js +2 -0
- package/dist/it-IT.umd.js +2 -0
- package/dist/ja-JP.js +2 -0
- package/dist/ja-JP.umd.js +2 -0
- package/dist/ka-GE.js +2 -0
- package/dist/ka-GE.umd.js +2 -0
- package/dist/kn-IN.js +2 -0
- package/dist/kn-IN.umd.js +2 -0
- package/dist/ko-KR.js +2 -0
- package/dist/ko-KR.umd.js +2 -0
- package/dist/lt-LT.js +2 -0
- package/dist/lt-LT.umd.js +2 -0
- package/dist/lv-LV.js +2 -0
- package/dist/lv-LV.umd.js +2 -0
- package/dist/mr-IN.js +2 -0
- package/dist/mr-IN.umd.js +2 -0
- package/dist/ms-MY.js +2 -0
- package/dist/ms-MY.umd.js +2 -0
- package/dist/nb-NO.js +2 -0
- package/dist/nb-NO.umd.js +2 -0
- package/dist/nl-NL.js +2 -0
- package/dist/nl-NL.umd.js +2 -0
- package/dist/pa-IN.js +2 -0
- package/dist/pa-IN.umd.js +2 -0
- package/dist/pl-PL.js +2 -0
- package/dist/pl-PL.umd.js +2 -0
- package/dist/pt-PT.js +2 -0
- package/dist/pt-PT.umd.js +2 -0
- package/dist/ro-RO.js +2 -0
- package/dist/ro-RO.umd.js +2 -0
- package/dist/ru-RU.js +2 -0
- package/dist/ru-RU.umd.js +2 -0
- package/dist/sr-Cyrl-RS.js +2 -0
- package/dist/sr-Cyrl-RS.umd.js +2 -0
- package/dist/sr-Latn-RS.js +2 -0
- package/dist/sr-Latn-RS.umd.js +2 -0
- package/dist/sv-SE.js +2 -0
- package/dist/sv-SE.umd.js +2 -0
- package/dist/sw-KE.js +2 -0
- package/dist/sw-KE.umd.js +2 -0
- package/dist/ta-IN.js +2 -0
- package/dist/ta-IN.umd.js +2 -0
- package/dist/te-IN.js +2 -0
- package/dist/te-IN.umd.js +2 -0
- package/dist/th-TH.js +2 -0
- package/dist/th-TH.umd.js +2 -0
- package/dist/tr-TR.js +2 -0
- package/dist/tr-TR.umd.js +2 -0
- package/dist/uk-UA.js +2 -0
- package/dist/uk-UA.umd.js +2 -0
- package/dist/ur-PK.js +2 -0
- package/dist/ur-PK.umd.js +2 -0
- package/dist/vi-VN.js +2 -0
- package/dist/vi-VN.umd.js +2 -0
- package/dist/yo-NG.js +2 -0
- package/dist/yo-NG.umd.js +2 -0
- package/dist/zh-Hans-CN.js +2 -0
- package/dist/zh-Hans-CN.umd.js +2 -0
- package/dist/zh-Hant-TW.js +2 -0
- package/dist/zh-Hant-TW.umd.js +2 -0
- package/package.json +47 -82
- package/src/am-ET.d.ts +40 -0
- package/src/am-ET.js +269 -0
- package/src/am-Latn-ET.d.ts +35 -0
- package/src/am-Latn-ET.js +264 -0
- package/src/ar-SA.d.ts +49 -0
- package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
- package/src/az-AZ.d.ts +37 -0
- package/src/az-AZ.js +312 -0
- package/src/bn-BD.d.ts +36 -0
- package/{lib/languages/bn.js → src/bn-BD.js} +110 -6
- package/src/cs-CZ.d.ts +49 -0
- package/{lib/languages/cs.js → src/cs-CZ.js} +240 -14
- package/src/da-DK.d.ts +44 -0
- package/{lib/languages/da.js → src/da-DK.js} +131 -11
- package/src/de-DE.d.ts +57 -0
- package/src/de-DE.js +603 -0
- package/src/el-GR.d.ts +40 -0
- package/src/el-GR.js +418 -0
- package/src/en-AU.d.ts +47 -0
- package/src/en-AU.js +423 -0
- package/src/en-BD.d.ts +49 -0
- package/src/en-BD.js +415 -0
- package/src/en-CA.d.ts +63 -0
- package/src/en-CA.js +518 -0
- package/src/en-GB.d.ts +56 -0
- package/src/en-GB.js +469 -0
- package/src/en-GH.d.ts +11 -0
- package/src/en-GH.js +345 -0
- package/src/en-IE.d.ts +56 -0
- package/src/en-IE.js +479 -0
- package/src/en-IN.d.ts +49 -0
- package/src/en-IN.js +415 -0
- package/src/en-KE.d.ts +11 -0
- package/src/en-KE.js +345 -0
- package/src/en-MY.d.ts +11 -0
- package/src/en-MY.js +347 -0
- package/src/en-NG.d.ts +56 -0
- package/src/en-NG.js +479 -0
- package/src/en-NZ.d.ts +11 -0
- package/{lib/languages/en.js → src/en-NZ.js} +164 -31
- package/src/en-PH.d.ts +11 -0
- package/src/en-PH.js +345 -0
- package/src/en-PK.d.ts +49 -0
- package/src/en-PK.js +415 -0
- package/src/en-SG.d.ts +11 -0
- package/src/en-SG.js +345 -0
- package/src/en-US.d.ts +63 -0
- package/src/en-US.js +516 -0
- package/src/en-ZA.d.ts +56 -0
- package/src/en-ZA.js +478 -0
- package/src/es-ES.d.ts +65 -0
- package/src/es-ES.js +541 -0
- package/src/es-MX.d.ts +58 -0
- package/{lib/languages/es.js → src/es-MX.js} +228 -18
- package/src/es-US.d.ts +58 -0
- package/src/es-US.js +446 -0
- package/src/fa-IR.d.ts +38 -0
- package/src/fa-IR.js +246 -0
- package/src/fi-FI.d.ts +46 -0
- package/{lib/languages/fi.js → src/fi-FI.js} +152 -11
- package/src/fil-PH.d.ts +37 -0
- package/{lib/languages/fil.js → src/fil-PH.js} +144 -8
- package/src/fr-BE.d.ts +49 -0
- package/{lib/languages → src}/fr-BE.js +175 -13
- package/src/fr-FR.d.ts +63 -0
- package/{lib/languages/fr.js → src/fr-FR.js} +182 -16
- package/src/gu-IN.d.ts +35 -0
- package/{lib/languages/gu.js → src/gu-IN.js} +115 -6
- package/src/ha-NG.d.ts +37 -0
- package/{lib/languages/ha.js → src/ha-NG.js} +107 -8
- package/src/hbo-IL.d.ts +39 -0
- package/{lib/languages/hbo.js → src/hbo-IL.js} +211 -19
- package/src/he-IL.d.ts +37 -0
- package/src/he-IL.js +537 -0
- package/src/hi-IN.d.ts +36 -0
- package/{lib/languages/hi.js → src/hi-IN.js} +116 -6
- package/src/hr-HR.d.ts +42 -0
- package/src/hr-HR.js +463 -0
- package/src/hu-HU.d.ts +38 -0
- package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
- package/src/id-ID.d.ts +38 -0
- package/{lib/languages/id.js → src/id-ID.js} +99 -8
- package/src/it-IT.d.ts +59 -0
- package/{lib/languages/it.js → src/it-IT.js} +179 -15
- package/src/ja-JP.d.ts +49 -0
- package/{lib/languages/ja.js → src/ja-JP.js} +111 -12
- package/src/ka-GE.d.ts +44 -0
- package/{lib/languages/ka.js → src/ka-GE.js} +113 -11
- package/src/kn-IN.d.ts +35 -0
- package/{lib/languages/kn.js → src/kn-IN.js} +115 -6
- package/src/ko-KR.d.ts +45 -0
- package/{lib/languages/ko.js → src/ko-KR.js} +94 -12
- package/src/lt-LT.d.ts +49 -0
- package/src/lt-LT.js +543 -0
- package/src/lv-LV.d.ts +49 -0
- package/src/lv-LV.js +595 -0
- package/src/mr-IN.d.ts +36 -0
- package/{lib/languages/mr.js → src/mr-IN.js} +116 -6
- package/src/ms-MY.d.ts +37 -0
- package/{lib/languages/ms.js → src/ms-MY.js} +111 -8
- package/src/nb-NO.d.ts +44 -0
- package/{lib/languages/nb.js → src/nb-NO.js} +153 -11
- package/src/nl-NL.d.ts +54 -0
- package/{lib/languages/nl.js → src/nl-NL.js} +260 -18
- package/src/pa-IN.d.ts +36 -0
- package/{lib/languages/pa.js → src/pa-IN.js} +116 -6
- package/src/pl-PL.d.ts +55 -0
- package/src/pl-PL.js +585 -0
- package/src/pt-PT.d.ts +45 -0
- package/{lib/languages/pt.js → src/pt-PT.js} +234 -12
- package/src/ro-RO.d.ts +44 -0
- package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
- package/src/ru-RU.d.ts +50 -0
- package/src/ru-RU.js +535 -0
- package/src/sr-Cyrl-RS.d.ts +49 -0
- package/src/sr-Cyrl-RS.js +503 -0
- package/src/sr-Latn-RS.d.ts +49 -0
- package/src/sr-Latn-RS.js +503 -0
- package/src/sv-SE.d.ts +44 -0
- package/{lib/languages/sv.js → src/sv-SE.js} +136 -11
- package/src/sw-KE.d.ts +37 -0
- package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
- package/src/ta-IN.d.ts +35 -0
- package/{lib/languages/ta.js → src/ta-IN.js} +109 -6
- package/src/te-IN.d.ts +35 -0
- package/{lib/languages/te.js → src/te-IN.js} +115 -6
- package/src/th-TH.d.ts +38 -0
- package/{lib/languages/th.js → src/th-TH.js} +99 -6
- package/src/tr-TR.d.ts +48 -0
- package/{lib/languages/tr.js → src/tr-TR.js} +168 -23
- package/src/uk-UA.d.ts +42 -0
- package/src/uk-UA.js +463 -0
- package/src/ur-PK.d.ts +36 -0
- package/{lib/languages/ur.js → src/ur-PK.js} +116 -6
- package/src/utils/expand-scientific.d.ts +32 -0
- package/src/utils/expand-scientific.js +65 -0
- package/src/utils/parse-cardinal.d.ts +14 -0
- package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
- package/src/utils/parse-currency.d.ts +14 -0
- package/src/utils/parse-currency.js +91 -0
- package/src/utils/parse-ordinal.d.ts +10 -0
- package/src/utils/parse-ordinal.js +103 -0
- package/src/vi-VN.d.ts +48 -0
- package/{lib/languages/vi.js → src/vi-VN.js} +102 -11
- package/src/yo-NG.d.ts +37 -0
- package/{lib/languages/yo.js → src/yo-NG.js} +109 -9
- package/src/zh-Hans-CN.d.ts +48 -0
- package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
- package/src/zh-Hant-TW.d.ts +50 -0
- package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
- package/dist/languages/am-Latn.js +0 -3
- package/dist/languages/am-Latn.js.map +0 -1
- package/dist/languages/am.js +0 -3
- package/dist/languages/am.js.map +0 -1
- package/dist/languages/ar.js +0 -3
- package/dist/languages/ar.js.map +0 -1
- package/dist/languages/az.js +0 -3
- package/dist/languages/az.js.map +0 -1
- package/dist/languages/bn.js +0 -3
- package/dist/languages/bn.js.map +0 -1
- package/dist/languages/cs.js +0 -3
- package/dist/languages/cs.js.map +0 -1
- package/dist/languages/da.js +0 -3
- package/dist/languages/da.js.map +0 -1
- package/dist/languages/de.js +0 -3
- package/dist/languages/de.js.map +0 -1
- package/dist/languages/el.js +0 -3
- package/dist/languages/el.js.map +0 -1
- package/dist/languages/en.js +0 -3
- package/dist/languages/en.js.map +0 -1
- package/dist/languages/es.js +0 -3
- package/dist/languages/es.js.map +0 -1
- package/dist/languages/fa.js +0 -3
- package/dist/languages/fa.js.map +0 -1
- package/dist/languages/fi.js +0 -3
- package/dist/languages/fi.js.map +0 -1
- package/dist/languages/fil.js +0 -3
- package/dist/languages/fil.js.map +0 -1
- package/dist/languages/fr-BE.js +0 -3
- package/dist/languages/fr-BE.js.map +0 -1
- package/dist/languages/fr.js +0 -3
- package/dist/languages/fr.js.map +0 -1
- package/dist/languages/gu.js +0 -3
- package/dist/languages/gu.js.map +0 -1
- package/dist/languages/ha.js +0 -3
- package/dist/languages/ha.js.map +0 -1
- package/dist/languages/hbo.js +0 -3
- package/dist/languages/hbo.js.map +0 -1
- package/dist/languages/he.js +0 -3
- package/dist/languages/he.js.map +0 -1
- package/dist/languages/hi.js +0 -3
- package/dist/languages/hi.js.map +0 -1
- package/dist/languages/hr.js +0 -3
- package/dist/languages/hr.js.map +0 -1
- package/dist/languages/hu.js +0 -3
- package/dist/languages/hu.js.map +0 -1
- package/dist/languages/id.js +0 -3
- package/dist/languages/id.js.map +0 -1
- package/dist/languages/it.js +0 -3
- package/dist/languages/it.js.map +0 -1
- package/dist/languages/ja.js +0 -3
- package/dist/languages/ja.js.map +0 -1
- package/dist/languages/ka.js +0 -3
- package/dist/languages/ka.js.map +0 -1
- package/dist/languages/kn.js +0 -3
- package/dist/languages/kn.js.map +0 -1
- package/dist/languages/ko.js +0 -3
- package/dist/languages/ko.js.map +0 -1
- package/dist/languages/lt.js +0 -3
- package/dist/languages/lt.js.map +0 -1
- package/dist/languages/lv.js +0 -3
- package/dist/languages/lv.js.map +0 -1
- package/dist/languages/mr.js +0 -3
- package/dist/languages/mr.js.map +0 -1
- package/dist/languages/ms.js +0 -3
- package/dist/languages/ms.js.map +0 -1
- package/dist/languages/nb.js +0 -3
- package/dist/languages/nb.js.map +0 -1
- package/dist/languages/nl.js +0 -3
- package/dist/languages/nl.js.map +0 -1
- package/dist/languages/pa.js +0 -3
- package/dist/languages/pa.js.map +0 -1
- package/dist/languages/pl.js +0 -3
- package/dist/languages/pl.js.map +0 -1
- package/dist/languages/pt.js +0 -3
- package/dist/languages/pt.js.map +0 -1
- package/dist/languages/ro.js +0 -3
- package/dist/languages/ro.js.map +0 -1
- package/dist/languages/ru.js +0 -3
- package/dist/languages/ru.js.map +0 -1
- package/dist/languages/sr-Cyrl.js +0 -3
- package/dist/languages/sr-Cyrl.js.map +0 -1
- package/dist/languages/sr-Latn.js +0 -3
- package/dist/languages/sr-Latn.js.map +0 -1
- package/dist/languages/sv.js +0 -3
- package/dist/languages/sv.js.map +0 -1
- package/dist/languages/sw.js +0 -3
- package/dist/languages/sw.js.map +0 -1
- package/dist/languages/ta.js +0 -3
- package/dist/languages/ta.js.map +0 -1
- package/dist/languages/te.js +0 -3
- package/dist/languages/te.js.map +0 -1
- package/dist/languages/th.js +0 -3
- package/dist/languages/th.js.map +0 -1
- package/dist/languages/tr.js +0 -3
- package/dist/languages/tr.js.map +0 -1
- package/dist/languages/uk.js +0 -3
- package/dist/languages/uk.js.map +0 -1
- package/dist/languages/ur.js +0 -3
- package/dist/languages/ur.js.map +0 -1
- package/dist/languages/vi.js +0 -3
- package/dist/languages/vi.js.map +0 -1
- package/dist/languages/yo.js +0 -3
- package/dist/languages/yo.js.map +0 -1
- package/dist/languages/zh-Hans.js +0 -3
- package/dist/languages/zh-Hans.js.map +0 -1
- package/dist/languages/zh-Hant.js +0 -3
- package/dist/languages/zh-Hant.js.map +0 -1
- package/dist/n2words.js +0 -3
- package/dist/n2words.js.map +0 -1
- package/lib/languages/am-Latn.d.ts +0 -7
- package/lib/languages/am-Latn.js +0 -159
- package/lib/languages/am.d.ts +0 -7
- package/lib/languages/am.js +0 -159
- package/lib/languages/ar.d.ts +0 -17
- package/lib/languages/az.d.ts +0 -7
- package/lib/languages/az.js +0 -171
- package/lib/languages/bn.d.ts +0 -7
- package/lib/languages/cs.d.ts +0 -18
- package/lib/languages/da.d.ts +0 -14
- package/lib/languages/de.d.ts +0 -17
- package/lib/languages/de.js +0 -320
- package/lib/languages/el.d.ts +0 -14
- package/lib/languages/el.js +0 -236
- package/lib/languages/en.d.ts +0 -17
- package/lib/languages/es.d.ts +0 -21
- package/lib/languages/fa.d.ts +0 -7
- package/lib/languages/fa.js +0 -134
- package/lib/languages/fi.d.ts +0 -14
- package/lib/languages/fil.d.ts +0 -7
- package/lib/languages/fr-BE.d.ts +0 -11
- package/lib/languages/fr.d.ts +0 -21
- package/lib/languages/gu.d.ts +0 -7
- package/lib/languages/ha.d.ts +0 -7
- package/lib/languages/hbo.d.ts +0 -13
- package/lib/languages/he.d.ts +0 -13
- package/lib/languages/he.js +0 -265
- package/lib/languages/hi.d.ts +0 -7
- package/lib/languages/hr.d.ts +0 -11
- package/lib/languages/hr.js +0 -224
- package/lib/languages/hu.d.ts +0 -7
- package/lib/languages/id.d.ts +0 -7
- package/lib/languages/it.d.ts +0 -19
- package/lib/languages/ja.d.ts +0 -17
- package/lib/languages/ka.d.ts +0 -17
- package/lib/languages/kn.d.ts +0 -7
- package/lib/languages/ko.d.ts +0 -14
- package/lib/languages/lt.d.ts +0 -18
- package/lib/languages/lt.js +0 -301
- package/lib/languages/lv.d.ts +0 -18
- package/lib/languages/lv.js +0 -312
- package/lib/languages/mr.d.ts +0 -7
- package/lib/languages/ms.d.ts +0 -7
- package/lib/languages/nb.d.ts +0 -14
- package/lib/languages/nl.d.ts +0 -26
- package/lib/languages/pa.d.ts +0 -7
- package/lib/languages/pl.d.ts +0 -22
- package/lib/languages/pl.js +0 -317
- package/lib/languages/pt.d.ts +0 -17
- package/lib/languages/ro.d.ts +0 -18
- package/lib/languages/ru.d.ts +0 -11
- package/lib/languages/ru.js +0 -245
- package/lib/languages/sr-Cyrl.d.ts +0 -11
- package/lib/languages/sr-Cyrl.js +0 -221
- package/lib/languages/sr-Latn.d.ts +0 -11
- package/lib/languages/sr-Latn.js +0 -221
- package/lib/languages/sv.d.ts +0 -14
- package/lib/languages/sw.d.ts +0 -7
- package/lib/languages/ta.d.ts +0 -7
- package/lib/languages/te.d.ts +0 -7
- package/lib/languages/th.d.ts +0 -7
- package/lib/languages/tr.d.ts +0 -18
- package/lib/languages/uk.d.ts +0 -11
- package/lib/languages/uk.js +0 -224
- package/lib/languages/ur.d.ts +0 -7
- package/lib/languages/vi.d.ts +0 -17
- package/lib/languages/yo.d.ts +0 -7
- package/lib/languages/zh-Hans.d.ts +0 -11
- package/lib/languages/zh-Hant.d.ts +0 -11
- package/lib/n2words.d.ts +0 -55
- package/lib/n2words.js +0 -126
- package/lib/utils/parse-numeric.d.ts +0 -17
- /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
- /package/{lib → src}/utils/is-plain-object.js +0 -0
- /package/{lib → src}/utils/validate-options.d.ts +0 -0
- /package/{lib → src}/utils/validate-options.js +0 -0
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Spanish language converter
|
|
2
|
+
* Spanish (Mexico) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: es-MX | Spanish as used in Mexico
|
|
5
|
+
*
|
|
6
|
+
* Uses the European long scale numbering system (per RAE and Academia Mexicana):
|
|
7
|
+
* - 10⁶ = millón
|
|
8
|
+
* - 10⁹ = mil millones (thousand millions)
|
|
9
|
+
* - 10¹² = billón
|
|
5
10
|
*
|
|
6
11
|
* Spanish-specific rules:
|
|
7
12
|
* - Gender agreement: uno/una, veintiuno/veintiuna, hundreds
|
|
@@ -9,12 +14,13 @@
|
|
|
9
14
|
* - "y" conjunction: treinta y uno (only 30-99 with ones)
|
|
10
15
|
* - "cien" for exact 100, "ciento/cienta" otherwise
|
|
11
16
|
* - Irregular hundreds: quinientos, setecientos, novecientos
|
|
12
|
-
* - Compound long scale: millón, mil millones, billón, mil billones
|
|
13
17
|
* - "un" before millón (not "uno"), omit before mil
|
|
14
18
|
*/
|
|
15
19
|
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
20
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
21
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
22
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
23
|
+
import { validateOptions } from './utils/validate-options.js'
|
|
18
24
|
|
|
19
25
|
// ============================================================================
|
|
20
26
|
// Vocabulary (module-level constants)
|
|
@@ -40,10 +46,30 @@ const SCALES = ['millón', 'billón', 'trillón', 'cuatrillón']
|
|
|
40
46
|
const SCALES_PLURAL = ['millones', 'billones', 'trillones', 'cuatrillones']
|
|
41
47
|
|
|
42
48
|
const THOUSAND = 'mil'
|
|
49
|
+
|
|
43
50
|
const ZERO = 'cero'
|
|
44
51
|
const NEGATIVE = 'menos'
|
|
45
52
|
const DECIMAL_SEP = 'punto'
|
|
46
53
|
|
|
54
|
+
// Ordinal vocabulary (identical to es-ES - ordinals don't vary by region)
|
|
55
|
+
const ORDINAL_ONES_MASC = ['', 'primero', 'segundo', 'tercero', 'cuarto', 'quinto', 'sexto', 'séptimo', 'octavo', 'noveno']
|
|
56
|
+
const ORDINAL_ONES_FEM = ['', 'primera', 'segunda', 'tercera', 'cuarta', 'quinta', 'sexta', 'séptima', 'octava', 'novena']
|
|
57
|
+
const ORDINAL_TENS_MASC = ['', 'décimo', 'vigésimo', 'trigésimo', 'cuadragésimo', 'quincuagésimo', 'sexagésimo', 'septuagésimo', 'octogésimo', 'nonagésimo']
|
|
58
|
+
const ORDINAL_TENS_FEM = ['', 'décima', 'vigésima', 'trigésima', 'cuadragésima', 'quincuagésima', 'sexagésima', 'septuagésima', 'octogésima', 'nonagésima']
|
|
59
|
+
const ORDINAL_HUNDRED_MASC = 'centésimo'
|
|
60
|
+
const ORDINAL_HUNDRED_FEM = 'centésima'
|
|
61
|
+
const ORDINAL_THOUSAND_MASC = 'milésimo'
|
|
62
|
+
const ORDINAL_THOUSAND_FEM = 'milésima'
|
|
63
|
+
const ORDINAL_MILLION_MASC = 'millonésimo'
|
|
64
|
+
const ORDINAL_MILLION_FEM = 'millonésima'
|
|
65
|
+
|
|
66
|
+
// Currency vocabulary (Mexican Peso - MXN)
|
|
67
|
+
const PESO = 'peso'
|
|
68
|
+
const PESOS = 'pesos'
|
|
69
|
+
const CENTAVO = 'centavo'
|
|
70
|
+
const CENTAVOS = 'centavos'
|
|
71
|
+
const CURRENCY_CONNECTOR = 'con'
|
|
72
|
+
|
|
47
73
|
// ============================================================================
|
|
48
74
|
// Segment Building
|
|
49
75
|
// ============================================================================
|
|
@@ -61,8 +87,8 @@ function buildSegment (n, feminine) {
|
|
|
61
87
|
if (n === 100) return 'cien'
|
|
62
88
|
|
|
63
89
|
const ones = n % 10
|
|
64
|
-
const tens = Math.
|
|
65
|
-
const hundreds = Math.
|
|
90
|
+
const tens = Math.trunc(n / 10) % 10
|
|
91
|
+
const hundreds = Math.trunc(n / 100)
|
|
66
92
|
const tensOnes = n % 100
|
|
67
93
|
|
|
68
94
|
const parts = []
|
|
@@ -271,10 +297,7 @@ function decimalPartToWords (decimalPart, feminine) {
|
|
|
271
297
|
}
|
|
272
298
|
|
|
273
299
|
/**
|
|
274
|
-
* Converts a numeric value to Spanish words.
|
|
275
|
-
*
|
|
276
|
-
* This is the main public API. It accepts any valid numeric input
|
|
277
|
-
* (number, string, or bigint) and handles parsing internally.
|
|
300
|
+
* Converts a numeric value to Spanish words (long scale).
|
|
278
301
|
*
|
|
279
302
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
280
303
|
* @param {Object} [options] - Optional configuration
|
|
@@ -284,14 +307,17 @@ function decimalPartToWords (decimalPart, feminine) {
|
|
|
284
307
|
* @throws {Error} If value is not a valid number format
|
|
285
308
|
*
|
|
286
309
|
* @example
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
310
|
+
* toCardinal(21) // 'veintiuno'
|
|
311
|
+
* toCardinal(21, {gender: 'feminine'}) // 'veintiuna'
|
|
312
|
+
* toCardinal(1000000000) // 'mil millones'
|
|
290
313
|
*/
|
|
291
|
-
function
|
|
314
|
+
function toCardinal (value, options) {
|
|
292
315
|
options = validateOptions(options)
|
|
293
|
-
const { isNegative, integerPart, decimalPart } =
|
|
294
|
-
|
|
316
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
317
|
+
|
|
318
|
+
// Apply option defaults
|
|
319
|
+
const { gender = 'masculine' } = options
|
|
320
|
+
const feminine = gender === 'feminine'
|
|
295
321
|
|
|
296
322
|
let result = ''
|
|
297
323
|
|
|
@@ -308,8 +334,192 @@ function toWords (value, options) {
|
|
|
308
334
|
return result
|
|
309
335
|
}
|
|
310
336
|
|
|
337
|
+
// ============================================================================
|
|
338
|
+
// ORDINAL: toOrdinal(value, options?)
|
|
339
|
+
// ============================================================================
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Builds ordinal word for a 0-999 segment.
|
|
343
|
+
*
|
|
344
|
+
* @param {number} n - Segment value 0-999
|
|
345
|
+
* @param {boolean} feminine - Use feminine forms
|
|
346
|
+
* @returns {string} Spanish ordinal word
|
|
347
|
+
*/
|
|
348
|
+
function buildOrdinalSegment (n, feminine) {
|
|
349
|
+
if (n === 0) return ''
|
|
350
|
+
|
|
351
|
+
const ones = n % 10
|
|
352
|
+
const tens = Math.trunc(n / 10) % 10
|
|
353
|
+
const hundreds = Math.trunc(n / 100)
|
|
354
|
+
|
|
355
|
+
const onesArr = feminine ? ORDINAL_ONES_FEM : ORDINAL_ONES_MASC
|
|
356
|
+
const tensArr = feminine ? ORDINAL_TENS_FEM : ORDINAL_TENS_MASC
|
|
357
|
+
const hundredWord = feminine ? ORDINAL_HUNDRED_FEM : ORDINAL_HUNDRED_MASC
|
|
358
|
+
|
|
359
|
+
const parts = []
|
|
360
|
+
|
|
361
|
+
// Hundreds
|
|
362
|
+
if (hundreds > 0) {
|
|
363
|
+
if (hundreds === 1) {
|
|
364
|
+
parts.push(hundredWord)
|
|
365
|
+
} else {
|
|
366
|
+
const prefixes = ['', '', 'du', 'tri', 'cuadri', 'quin', 'sex', 'septi', 'octi', 'noni']
|
|
367
|
+
parts.push(prefixes[hundreds] + hundredWord)
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Tens
|
|
372
|
+
if (tens > 0) {
|
|
373
|
+
parts.push(tensArr[tens])
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// Ones
|
|
377
|
+
if (ones > 0) {
|
|
378
|
+
parts.push(onesArr[ones])
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return parts.join(' ')
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Converts a positive integer to Spanish ordinal words.
|
|
386
|
+
*
|
|
387
|
+
* @param {bigint} n - Positive integer to convert
|
|
388
|
+
* @param {boolean} feminine - Use feminine forms
|
|
389
|
+
* @returns {string} Spanish ordinal words
|
|
390
|
+
*/
|
|
391
|
+
function integerToOrdinal (n, feminine) {
|
|
392
|
+
const thousandWord = feminine ? ORDINAL_THOUSAND_FEM : ORDINAL_THOUSAND_MASC
|
|
393
|
+
const millionWord = feminine ? ORDINAL_MILLION_FEM : ORDINAL_MILLION_MASC
|
|
394
|
+
|
|
395
|
+
// Fast path: numbers < 1000
|
|
396
|
+
if (n < 1000n) {
|
|
397
|
+
return buildOrdinalSegment(Number(n), feminine)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// Numbers 1000-999999
|
|
401
|
+
if (n < 1_000_000n) {
|
|
402
|
+
const thousands = Number(n / 1000n)
|
|
403
|
+
const remainder = Number(n % 1000n)
|
|
404
|
+
|
|
405
|
+
let result = ''
|
|
406
|
+
|
|
407
|
+
if (thousands === 1) {
|
|
408
|
+
result = thousandWord
|
|
409
|
+
} else {
|
|
410
|
+
result = buildOrdinalSegment(thousands, feminine) + ' ' + thousandWord
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
if (remainder > 0) {
|
|
414
|
+
result += ' ' + buildOrdinalSegment(remainder, feminine)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
return result
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// Numbers >= 1,000,000
|
|
421
|
+
const millions = Number(n / 1_000_000n)
|
|
422
|
+
const remainder = n % 1_000_000n
|
|
423
|
+
|
|
424
|
+
let result = ''
|
|
425
|
+
|
|
426
|
+
if (millions === 1) {
|
|
427
|
+
result = millionWord
|
|
428
|
+
} else {
|
|
429
|
+
result = buildOrdinalSegment(millions, feminine) + ' ' + millionWord
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
if (remainder > 0n) {
|
|
433
|
+
result += ' ' + integerToOrdinal(remainder, feminine)
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
return result
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Converts a numeric value to Spanish ordinal words.
|
|
441
|
+
*
|
|
442
|
+
* @param {number | string | bigint} value - The positive integer to convert
|
|
443
|
+
* @param {Object} [options] - Optional configuration
|
|
444
|
+
* @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
|
|
445
|
+
* @returns {string} The number in Spanish ordinal words
|
|
446
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
447
|
+
* @throws {Error} If value is not a positive integer
|
|
448
|
+
*
|
|
449
|
+
* @example
|
|
450
|
+
* toOrdinal(1) // 'primero'
|
|
451
|
+
* toOrdinal(1, { gender: 'feminine' }) // 'primera'
|
|
452
|
+
* toOrdinal(21) // 'vigésimo primero'
|
|
453
|
+
*/
|
|
454
|
+
function toOrdinal (value, options) {
|
|
455
|
+
options = validateOptions(options)
|
|
456
|
+
const integerPart = parseOrdinalValue(value)
|
|
457
|
+
|
|
458
|
+
const { gender = 'masculine' } = options
|
|
459
|
+
const feminine = gender === 'feminine'
|
|
460
|
+
|
|
461
|
+
return integerToOrdinal(integerPart, feminine)
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// ============================================================================
|
|
465
|
+
// CURRENCY: toCurrency(value, options?)
|
|
466
|
+
// ============================================================================
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* Converts a numeric value to Mexican Peso currency words.
|
|
470
|
+
*
|
|
471
|
+
* Mexican currency uses masculine gender for pesos (el peso)
|
|
472
|
+
* and masculine for centavos (el centavo).
|
|
473
|
+
*
|
|
474
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
475
|
+
* @param {Object} [options] - Optional configuration
|
|
476
|
+
* @param {boolean} [options.and=true] - Use "con" between pesos and centavos
|
|
477
|
+
* @returns {string} The amount in Mexican currency words
|
|
478
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
479
|
+
* @throws {Error} If value is not a valid number format
|
|
480
|
+
*
|
|
481
|
+
* @example
|
|
482
|
+
* toCurrency(42.50) // 'cuarenta y dos pesos con cincuenta centavos'
|
|
483
|
+
* toCurrency(1) // 'un peso'
|
|
484
|
+
* toCurrency(0.99) // 'noventa y nueve centavos'
|
|
485
|
+
* toCurrency(42.50, { and: false }) // 'cuarenta y dos pesos cincuenta centavos'
|
|
486
|
+
*/
|
|
487
|
+
function toCurrency (value, options) {
|
|
488
|
+
options = validateOptions(options)
|
|
489
|
+
const { isNegative, dollars: pesos, cents: centavos } = parseCurrencyValue(value)
|
|
490
|
+
const { and: useAnd = true } = options
|
|
491
|
+
|
|
492
|
+
let result = ''
|
|
493
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
494
|
+
|
|
495
|
+
// Pesos part (show if non-zero, or if no centavos)
|
|
496
|
+
if (pesos > 0n || centavos === 0n) {
|
|
497
|
+
// Use masculine for pesos, but "un peso" not "uno peso"
|
|
498
|
+
if (pesos === 1n) {
|
|
499
|
+
result += 'un ' + PESO
|
|
500
|
+
} else {
|
|
501
|
+
result += integerToWords(pesos, false) + ' ' + PESOS
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Centavos part
|
|
506
|
+
if (centavos > 0n) {
|
|
507
|
+
if (pesos > 0n) {
|
|
508
|
+
result += useAnd ? ' ' + CURRENCY_CONNECTOR + ' ' : ' '
|
|
509
|
+
}
|
|
510
|
+
// Use masculine for centavos, but "un centavo" not "uno centavo"
|
|
511
|
+
if (centavos === 1n) {
|
|
512
|
+
result += 'un ' + CENTAVO
|
|
513
|
+
} else {
|
|
514
|
+
result += integerToWords(centavos, false) + ' ' + CENTAVOS
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return result
|
|
519
|
+
}
|
|
520
|
+
|
|
311
521
|
// ============================================================================
|
|
312
522
|
// Public API
|
|
313
523
|
// ============================================================================
|
|
314
524
|
|
|
315
|
-
export {
|
|
525
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/es-US.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Spanish words (US short scale).
|
|
3
|
+
*
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @param {Object} [options] - Optional configuration
|
|
6
|
+
* @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
|
|
7
|
+
* @returns {string} The number in Spanish words
|
|
8
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
9
|
+
* @throws {Error} If value is not a valid number format
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* toCardinal(21) // 'veintiuno'
|
|
13
|
+
* toCardinal(21, {gender: 'feminine'}) // 'veintiuna'
|
|
14
|
+
* toCardinal(1000000000) // 'un billón'
|
|
15
|
+
*/
|
|
16
|
+
export function toCardinal(value: number | string | bigint, options?: {
|
|
17
|
+
gender?: "masculine" | "feminine" | undefined;
|
|
18
|
+
}): string;
|
|
19
|
+
/**
|
|
20
|
+
* Converts a numeric value to Spanish ordinal words.
|
|
21
|
+
*
|
|
22
|
+
* @param {number | string | bigint} value - The positive integer to convert
|
|
23
|
+
* @param {Object} [options] - Optional configuration
|
|
24
|
+
* @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
|
|
25
|
+
* @returns {string} The number in Spanish ordinal words
|
|
26
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
27
|
+
* @throws {Error} If value is not a positive integer
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* toOrdinal(1) // 'primero'
|
|
31
|
+
* toOrdinal(1, { gender: 'feminine' }) // 'primera'
|
|
32
|
+
* toOrdinal(21) // 'vigésimo primero'
|
|
33
|
+
*/
|
|
34
|
+
export function toOrdinal(value: number | string | bigint, options?: {
|
|
35
|
+
gender?: "masculine" | "feminine" | undefined;
|
|
36
|
+
}): string;
|
|
37
|
+
/**
|
|
38
|
+
* Converts a numeric value to US Dollar currency words in Spanish.
|
|
39
|
+
*
|
|
40
|
+
* US Dollar uses masculine gender for dólares (el dólar)
|
|
41
|
+
* and masculine for centavos (el centavo).
|
|
42
|
+
*
|
|
43
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
44
|
+
* @param {Object} [options] - Optional configuration
|
|
45
|
+
* @param {boolean} [options.and=true] - Use "con" between dollars and cents
|
|
46
|
+
* @returns {string} The amount in Spanish US Dollar currency words
|
|
47
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
48
|
+
* @throws {Error} If value is not a valid number format
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* toCurrency(42.50) // 'cuarenta y dos dólares con cincuenta centavos'
|
|
52
|
+
* toCurrency(1) // 'un dólar'
|
|
53
|
+
* toCurrency(0.99) // 'noventa y nueve centavos'
|
|
54
|
+
* toCurrency(42.50, { and: false }) // 'cuarenta y dos dólares cincuenta centavos'
|
|
55
|
+
*/
|
|
56
|
+
export function toCurrency(value: number | string | bigint, options?: {
|
|
57
|
+
and?: boolean | undefined;
|
|
58
|
+
}): string;
|