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.
- package/CHANGELOG.md +51 -40
- 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-BR.js +2 -0
- package/dist/pt-BR.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 +61 -88
- 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-BR.d.ts +31 -0
- package/src/pt-BR.js +534 -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,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Dutch language converter
|
|
2
|
+
* Dutch (Netherlands) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: nl-NL | Dutch as used in the Netherlands
|
|
5
5
|
*
|
|
6
6
|
* Dutch-specific rules:
|
|
7
7
|
* - Inverted tens-ones: eenentwintig (one-and-twenty)
|
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
* - Long scale with -ard forms
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
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'
|
|
18
20
|
|
|
19
21
|
// ============================================================================
|
|
20
22
|
// Vocabulary (module-level constants)
|
|
@@ -33,6 +35,12 @@ const ZERO = 'nul'
|
|
|
33
35
|
const NEGATIVE = 'min'
|
|
34
36
|
const DECIMAL_SEP = 'komma'
|
|
35
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
|
+
|
|
36
44
|
// ============================================================================
|
|
37
45
|
// Segment Building
|
|
38
46
|
// ============================================================================
|
|
@@ -47,8 +55,8 @@ function buildSegment (n, withAnd) {
|
|
|
47
55
|
if (n === 0) return ''
|
|
48
56
|
|
|
49
57
|
const ones = n % 10
|
|
50
|
-
const tens = Math.
|
|
51
|
-
const hundreds = Math.
|
|
58
|
+
const tens = Math.trunc(n / 10) % 10
|
|
59
|
+
const hundreds = Math.trunc(n / 100)
|
|
52
60
|
const tensOnes = n % 100
|
|
53
61
|
|
|
54
62
|
let result = ''
|
|
@@ -284,20 +292,23 @@ function decimalPartToWords (decimalPart, options) {
|
|
|
284
292
|
* @throws {Error} If value is not a valid number format
|
|
285
293
|
*
|
|
286
294
|
* @example
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
295
|
+
* toCardinal(21) // 'eenentwintig'
|
|
296
|
+
* toCardinal(1) // 'één'
|
|
297
|
+
* toCardinal(1, {accentOne: false}) // 'een'
|
|
298
|
+
* toCardinal(1104) // 'elfhonderd vier'
|
|
291
299
|
*/
|
|
292
|
-
function
|
|
300
|
+
function toCardinal (value, options) {
|
|
293
301
|
options = validateOptions(options)
|
|
294
|
-
const { isNegative, integerPart, decimalPart } =
|
|
302
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
295
303
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
304
|
+
// Apply option defaults
|
|
305
|
+
const {
|
|
306
|
+
accentOne = true,
|
|
307
|
+
includeOptionalAnd = false,
|
|
308
|
+
noHundredPairing = false
|
|
309
|
+
} = options
|
|
310
|
+
|
|
311
|
+
const opts = { accentOne, includeOptionalAnd, noHundredPairing }
|
|
301
312
|
|
|
302
313
|
let result = ''
|
|
303
314
|
|
|
@@ -314,8 +325,239 @@ function toWords (value, options) {
|
|
|
314
325
|
return result
|
|
315
326
|
}
|
|
316
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
|
+
|
|
317
559
|
// ============================================================================
|
|
318
560
|
// Public API
|
|
319
561
|
// ============================================================================
|
|
320
562
|
|
|
321
|
-
export {
|
|
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;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Punjabi language converter
|
|
2
|
+
* Punjabi (India) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: pa-IN | Punjabi (Gurmukhi) as used in India
|
|
5
5
|
*
|
|
6
6
|
* Key features:
|
|
7
7
|
* - Indian numbering system (ਹਜ਼ਾਰ, ਲੱਖ, ਕਰੋੜ)
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* - Complete word forms for 0-99
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
14
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
15
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
14
16
|
|
|
15
17
|
// ============================================================================
|
|
16
18
|
// Vocabulary
|
|
@@ -21,6 +23,28 @@ const NEGATIVE = 'ਮਾਇਨਸ'
|
|
|
21
23
|
const DECIMAL_SEP = 'ਦਸ਼ਮਲਵ'
|
|
22
24
|
const HUNDRED = 'ਸੌ'
|
|
23
25
|
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Ordinal Vocabulary
|
|
28
|
+
// ============================================================================
|
|
29
|
+
|
|
30
|
+
// Ordinal suffix (adds to cardinal for numbers >= 7)
|
|
31
|
+
const ORDINAL_SUFFIX = 'ਵਾਂ'
|
|
32
|
+
|
|
33
|
+
// Special ordinals for first few numbers (1-6 have irregular forms)
|
|
34
|
+
const ORDINAL_SPECIAL = ['', 'ਪਹਿਲਾ', 'ਦੂਜਾ', 'ਤੀਜਾ', 'ਚੌਥਾ', 'ਪੰਜਵਾਂ', 'ਛੇਵਾਂ']
|
|
35
|
+
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Currency Vocabulary (Indian Rupee)
|
|
38
|
+
// ============================================================================
|
|
39
|
+
|
|
40
|
+
// Rupee: singular/plural
|
|
41
|
+
const RUPEE = 'ਰੁਪਇਆ'
|
|
42
|
+
const RUPEES = 'ਰੁਪਏ'
|
|
43
|
+
|
|
44
|
+
// Paisa: singular/plural
|
|
45
|
+
const PAISA = 'ਪੈਸਾ'
|
|
46
|
+
const PAISE = 'ਪੈਸੇ'
|
|
47
|
+
|
|
24
48
|
const BELOW_HUNDRED = [
|
|
25
49
|
'ਸਿਫ਼ਰ', 'ਇੱਕ', 'ਦੋ', 'ਤਿੰਨ', 'ਚਾਰ', 'ਪੰਜ', 'ਛੇ', 'ਸੱਤ', 'ਅੱਠ', 'ਨੌਂ',
|
|
26
50
|
'ਦੱਸ', 'ਗਿਆਰਾਂ', 'ਬਾਰਾਂ', 'ਤੇਰਾਂ', 'ਚੌਦਾਂ', 'ਪੰਦਰਾਂ', 'ਸੋਲਾਂ', 'ਸਤਾਰਾਂ', 'ਅਠਾਰਾਂ', 'ਉੱਨੀ',
|
|
@@ -133,8 +157,8 @@ function decimalPartToWords (decimalPart) {
|
|
|
133
157
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
134
158
|
* @returns {string} The number in Punjabi words
|
|
135
159
|
*/
|
|
136
|
-
function
|
|
137
|
-
const { isNegative, integerPart, decimalPart } =
|
|
160
|
+
function toCardinal (value) {
|
|
161
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
138
162
|
|
|
139
163
|
let result = ''
|
|
140
164
|
|
|
@@ -151,8 +175,94 @@ function toWords (value) {
|
|
|
151
175
|
return result
|
|
152
176
|
}
|
|
153
177
|
|
|
178
|
+
// ============================================================================
|
|
179
|
+
// ORDINAL: toOrdinal(value)
|
|
180
|
+
// ============================================================================
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Converts a positive integer to Punjabi ordinal words.
|
|
184
|
+
*
|
|
185
|
+
* Punjabi ordinals: First 6 are irregular, then add -ਵਾਂ suffix.
|
|
186
|
+
*
|
|
187
|
+
* @param {bigint} n - Positive integer to convert
|
|
188
|
+
* @returns {string} Punjabi ordinal words
|
|
189
|
+
*/
|
|
190
|
+
function integerToOrdinal (n) {
|
|
191
|
+
// Special ordinals for 1-6
|
|
192
|
+
if (n >= 1n && n <= 6n) {
|
|
193
|
+
return ORDINAL_SPECIAL[Number(n)]
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// For 7 and above, add suffix to cardinal
|
|
197
|
+
const cardinal = integerToWords(n)
|
|
198
|
+
return cardinal + ORDINAL_SUFFIX
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Converts a numeric value to Punjabi ordinal words.
|
|
203
|
+
*
|
|
204
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
205
|
+
* @returns {string} The number as ordinal words
|
|
206
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
207
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* toOrdinal(1) // 'ਪਹਿਲਾ'
|
|
211
|
+
* toOrdinal(2) // 'ਦੂਜਾ'
|
|
212
|
+
* toOrdinal(3) // 'ਤੀਜਾ'
|
|
213
|
+
* toOrdinal(10) // 'ਦੱਸਵਾਂ'
|
|
214
|
+
*/
|
|
215
|
+
function toOrdinal (value) {
|
|
216
|
+
const integerPart = parseOrdinalValue(value)
|
|
217
|
+
return integerToOrdinal(integerPart)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// ============================================================================
|
|
221
|
+
// CURRENCY: toCurrency(value, options?)
|
|
222
|
+
// ============================================================================
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Converts a numeric value to Punjabi currency words (Indian Rupee).
|
|
226
|
+
*
|
|
227
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
228
|
+
* @returns {string} The amount in Punjabi currency words
|
|
229
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
230
|
+
* @throws {Error} If value is not a valid number format
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* toCurrency(42.50) // 'ਬਿਆਲੀ ਰੁਪਏ ਪੰਜਾਹ ਪੈਸੇ'
|
|
234
|
+
* toCurrency(1) // 'ਇੱਕ ਰੁਪਇਆ'
|
|
235
|
+
* toCurrency(0.01) // 'ਇੱਕ ਪੈਸਾ'
|
|
236
|
+
*/
|
|
237
|
+
function toCurrency (value) {
|
|
238
|
+
const { isNegative, dollars: rupees, cents: paise } = parseCurrencyValue(value)
|
|
239
|
+
|
|
240
|
+
// Build result
|
|
241
|
+
let result = ''
|
|
242
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
243
|
+
|
|
244
|
+
// Rupees part - show if non-zero, or if no paise
|
|
245
|
+
if (rupees > 0n || paise === 0n) {
|
|
246
|
+
result += integerToWords(rupees)
|
|
247
|
+
// Singular for 1 rupee, plural otherwise
|
|
248
|
+
result += ' ' + (rupees === 1n ? RUPEE : RUPEES)
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Paise part
|
|
252
|
+
if (paise > 0n) {
|
|
253
|
+
if (rupees > 0n) {
|
|
254
|
+
result += ' '
|
|
255
|
+
}
|
|
256
|
+
result += integerToWords(paise)
|
|
257
|
+
// Singular for 1 paisa, plural otherwise
|
|
258
|
+
result += ' ' + (paise === 1n ? PAISA : PAISE)
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return result
|
|
262
|
+
}
|
|
263
|
+
|
|
154
264
|
// ============================================================================
|
|
155
265
|
// Exports
|
|
156
266
|
// ============================================================================
|
|
157
267
|
|
|
158
|
-
export {
|
|
268
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/pl-PL.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Polish words.
|
|
3
|
+
*
|
|
4
|
+
* This is the main public API. It accepts any valid numeric input
|
|
5
|
+
* (number, string, or bigint) and handles parsing internally.
|
|
6
|
+
*
|
|
7
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
8
|
+
* @param {Object} [options] - Conversion options
|
|
9
|
+
* @param {string} [options.gender='masculine'] - Gender for numbers < 1000
|
|
10
|
+
* @returns {string} The number in Polish words
|
|
11
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
12
|
+
* @throws {Error} If value is not a valid number format
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* toCardinal(1) // 'jeden'
|
|
16
|
+
* toCardinal(1, { gender: 'feminine' }) // 'jedna'
|
|
17
|
+
* toCardinal(1000) // 'tysiąc'
|
|
18
|
+
* toCardinal(2000) // 'dwa tysiące'
|
|
19
|
+
*/
|
|
20
|
+
export function toCardinal(value: number | string | bigint, options?: {
|
|
21
|
+
gender?: string | undefined;
|
|
22
|
+
}): string;
|
|
23
|
+
/**
|
|
24
|
+
* Converts a numeric value to Polish ordinal words (masculine nominative).
|
|
25
|
+
*
|
|
26
|
+
* @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
|
|
27
|
+
* @returns {string} The number as ordinal words (e.g., "pierwszy", "czterdziesty drugi")
|
|
28
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
29
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* toOrdinal(1) // 'pierwszy'
|
|
33
|
+
* toOrdinal(2) // 'drugi'
|
|
34
|
+
* toOrdinal(3) // 'trzeci'
|
|
35
|
+
* toOrdinal(21) // 'dwudziesty pierwszy'
|
|
36
|
+
* toOrdinal(42) // 'czterdziesty drugi'
|
|
37
|
+
* toOrdinal(100) // 'setny'
|
|
38
|
+
* toOrdinal(1000) // 'tysięczny'
|
|
39
|
+
*/
|
|
40
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
41
|
+
/**
|
|
42
|
+
* Converts a numeric value to Polish currency words (Polish Złoty).
|
|
43
|
+
*
|
|
44
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
45
|
+
* @returns {string} The amount in Polish currency words
|
|
46
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
47
|
+
* @throws {Error} If value is not a valid number format
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* toCurrency(42) // 'czterdzieści dwa złote'
|
|
51
|
+
* toCurrency(1) // 'jeden złoty'
|
|
52
|
+
* toCurrency(1.50) // 'jeden złoty pięćdziesiąt groszy'
|
|
53
|
+
* toCurrency(-5) // 'minus pięć złotych'
|
|
54
|
+
*/
|
|
55
|
+
export function toCurrency(value: number | string | bigint): string;
|