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.
- package/CHANGELOG.md +59 -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/src/bn-BD.js +270 -0
- package/src/cs-CZ.d.ts +49 -0
- package/{lib/languages/cs.js → src/cs-CZ.js} +249 -40
- package/src/da-DK.d.ts +44 -0
- package/{lib/languages/da.js → src/da-DK.js} +136 -23
- 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/src/en-NZ.js +375 -0
- 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} +237 -47
- 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/src/fi-FI.js +379 -0
- package/src/fil-PH.d.ts +37 -0
- package/{lib/languages/fil.js → src/fil-PH.js} +149 -24
- package/src/fr-BE.d.ts +49 -0
- package/src/fr-BE.js +453 -0
- package/src/fr-FR.d.ts +63 -0
- package/{lib/languages/fr.js → src/fr-FR.js} +200 -47
- package/src/gu-IN.d.ts +35 -0
- package/src/gu-IN.js +259 -0
- package/src/ha-NG.d.ts +37 -0
- package/{lib/languages/ha.js → src/ha-NG.js} +110 -16
- package/src/hbo-IL.d.ts +39 -0
- package/{lib/languages/hbo.js → src/hbo-IL.js} +217 -43
- package/src/he-IL.d.ts +37 -0
- package/src/he-IL.js +537 -0
- package/src/hi-IN.d.ts +36 -0
- package/src/hi-IN.js +280 -0
- 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} +106 -20
- package/src/it-IT.d.ts +59 -0
- package/src/it-IT.js +506 -0
- package/src/ja-JP.d.ts +49 -0
- package/{lib/languages/ja.js → src/ja-JP.js} +119 -32
- package/src/ka-GE.d.ts +44 -0
- package/src/ka-GE.js +393 -0
- package/src/kn-IN.d.ts +35 -0
- package/{lib/languages/kn.js → src/kn-IN.js} +156 -34
- package/src/ko-KR.d.ts +45 -0
- package/{lib/languages/ko.js → src/ko-KR.js} +99 -24
- 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/src/mr-IN.js +260 -0
- package/src/ms-MY.d.ts +37 -0
- package/{lib/languages/ms.js → src/ms-MY.js} +118 -20
- package/src/nb-NO.d.ts +44 -0
- package/{lib/languages/nb.js → src/nb-NO.js} +165 -33
- package/src/nl-NL.d.ts +54 -0
- package/{lib/languages/nl.js → src/nl-NL.js} +271 -47
- package/src/pa-IN.d.ts +36 -0
- package/src/pa-IN.js +268 -0
- package/src/pl-PL.d.ts +55 -0
- package/src/pl-PL.js +585 -0
- package/src/pt-PT.d.ts +45 -0
- package/src/pt-PT.js +514 -0
- 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} +149 -34
- 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} +163 -47
- package/src/te-IN.d.ts +35 -0
- package/{lib/languages/te.js → src/te-IN.js} +147 -46
- 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/src/tr-TR.js +397 -0
- package/src/uk-UA.d.ts +42 -0
- package/src/uk-UA.js +463 -0
- package/src/ur-PK.d.ts +36 -0
- package/src/ur-PK.js +268 -0
- 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} +124 -53
- package/src/yo-NG.d.ts +37 -0
- package/src/yo-NG.js +403 -0
- 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/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/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 -164
- package/lib/languages/am.d.ts +0 -7
- package/lib/languages/am.js +0 -164
- package/lib/languages/ar.d.ts +0 -17
- package/lib/languages/az.d.ts +0 -7
- package/lib/languages/az.js +0 -176
- package/lib/languages/bn.d.ts +0 -7
- package/lib/languages/bn.js +0 -145
- 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 -332
- package/lib/languages/el.d.ts +0 -14
- package/lib/languages/el.js +0 -243
- package/lib/languages/en.d.ts +0 -17
- package/lib/languages/en.js +0 -256
- 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/fi.js +0 -245
- package/lib/languages/fil.d.ts +0 -7
- package/lib/languages/fr-BE.d.ts +0 -11
- package/lib/languages/fr-BE.js +0 -300
- package/lib/languages/fr.d.ts +0 -21
- package/lib/languages/gu.d.ts +0 -7
- package/lib/languages/gu.js +0 -137
- 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 -276
- package/lib/languages/hi.d.ts +0 -7
- package/lib/languages/hi.js +0 -145
- package/lib/languages/hr.d.ts +0 -11
- package/lib/languages/hr.js +0 -218
- 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/it.js +0 -377
- package/lib/languages/ja.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 -310
- package/lib/languages/lv.d.ts +0 -18
- package/lib/languages/lv.js +0 -321
- package/lib/languages/mr.d.ts +0 -7
- package/lib/languages/mr.js +0 -137
- 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/pa.js +0 -163
- package/lib/languages/pl.d.ts +0 -22
- package/lib/languages/pl.js +0 -330
- package/lib/languages/pt.d.ts +0 -17
- package/lib/languages/pt.js +0 -306
- package/lib/languages/ro.d.ts +0 -18
- package/lib/languages/ru.d.ts +0 -11
- package/lib/languages/ru.js +0 -240
- package/lib/languages/sr-Cyrl.d.ts +0 -11
- package/lib/languages/sr-Cyrl.js +0 -215
- package/lib/languages/sr-Latn.d.ts +0 -11
- package/lib/languages/sr-Latn.js +0 -215
- 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/tr.js +0 -263
- package/lib/languages/uk.d.ts +0 -11
- package/lib/languages/uk.js +0 -218
- package/lib/languages/ur.d.ts +0 -7
- package/lib/languages/ur.js +0 -163
- package/lib/languages/vi.d.ts +0 -17
- package/lib/languages/zh-Hans.d.ts +0 -11
- package/lib/languages/zh-Hant.d.ts +0 -11
- package/lib/n2words.d.ts +0 -53
- package/lib/n2words.js +0 -122
- 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
package/src/he-IL.js
ADDED
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modern Hebrew (Israel) language converter
|
|
3
|
+
*
|
|
4
|
+
* CLDR: he-IL | Modern Hebrew as used in Israel
|
|
5
|
+
*
|
|
6
|
+
* Key features:
|
|
7
|
+
* - Feminine grammatical forms (default in Modern Hebrew)
|
|
8
|
+
* - Dual forms for 2, 200, 2000
|
|
9
|
+
* - Special 1-9 thousands construct state
|
|
10
|
+
* - "ו" (ve) conjunction rules vary by position
|
|
11
|
+
* - Per-digit decimal reading
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
15
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
16
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
17
|
+
import { validateOptions } from './utils/validate-options.js'
|
|
18
|
+
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Vocabulary (arrays for indexed access - faster than object property lookup)
|
|
21
|
+
// ============================================================================
|
|
22
|
+
|
|
23
|
+
// Feminine forms (default in Modern Hebrew) - index 0 unused
|
|
24
|
+
const ONES = ['', 'אחת', 'שתים', 'שלש', 'ארבע', 'חמש', 'שש', 'שבע', 'שמונה', 'תשע']
|
|
25
|
+
const TEENS = ['עשר', 'אחת עשרה', 'שתים עשרה', 'שלש עשרה', 'ארבע עשרה', 'חמש עשרה', 'שש עשרה', 'שבע עשרה', 'שמונה עשרה', 'תשע עשרה']
|
|
26
|
+
const TENS = ['', '', 'עשרים', 'שלשים', 'ארבעים', 'חמישים', 'ששים', 'שבעים', 'שמונים', 'תשעים']
|
|
27
|
+
const HUNDREDS = ['', 'מאה', 'מאתיים', 'שלש מאות', 'ארבע מאות', 'חמש מאות', 'שש מאות', 'שבע מאות', 'שמונה מאות', 'תשע מאות']
|
|
28
|
+
|
|
29
|
+
// Special forms for 1-9 thousand (index 0 unused)
|
|
30
|
+
const THOUSANDS_SPECIAL = ['', 'אלף', 'אלפיים', 'שלשת אלפים', 'ארבעת אלפים', 'חמשת אלפים', 'ששת אלפים', 'שבעת אלפים', 'שמונת אלפים', 'תשעת אלפים']
|
|
31
|
+
|
|
32
|
+
// Scale words (index 1 = thousands, 2 = millions, etc.)
|
|
33
|
+
const SCALE = ['', 'אלף', 'מיליון', 'מיליארד', 'טריליון', 'קוודרליון', 'קווינטיליון']
|
|
34
|
+
const SCALE_PLURAL = ['', 'אלפים', 'מיליונים', 'מיליארדים', 'טריליונים', 'קוודרליונים', 'קווינטיליונים']
|
|
35
|
+
|
|
36
|
+
const ZERO = 'אפס'
|
|
37
|
+
const NEGATIVE = 'מינוס'
|
|
38
|
+
const DECIMAL_SEP = 'נקודה'
|
|
39
|
+
|
|
40
|
+
// Masculine forms for currency and ordinals
|
|
41
|
+
const ONES_MASC = ['', 'אחד', 'שניים', 'שלשה', 'ארבעה', 'חמשה', 'ששה', 'שבעה', 'שמונה', 'תשעה']
|
|
42
|
+
|
|
43
|
+
// Ordinal forms (masculine, used by default)
|
|
44
|
+
const ORDINAL_ONES = ['', 'ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שביעי', 'שמיני', 'תשיעי']
|
|
45
|
+
const ORDINAL_TEENS = ['עשירי', 'אחד עשר', 'שנים עשר', 'שלשה עשר', 'ארבעה עשר', 'חמשה עשר', 'ששה עשר', 'שבעה עשר', 'שמונה עשר', 'תשעה עשר']
|
|
46
|
+
const ORDINAL_TENS = ['', '', 'עשרים', 'שלשים', 'ארבעים', 'חמישים', 'ששים', 'שבעים', 'שמונים', 'תשעים']
|
|
47
|
+
const ORDINAL_HUNDRED = 'מאה'
|
|
48
|
+
|
|
49
|
+
// Currency (New Israeli Shekel)
|
|
50
|
+
const SHEKEL_SINGULAR = 'שקל'
|
|
51
|
+
const SHEKEL_PLURAL = 'שקלים'
|
|
52
|
+
const AGORA_SINGULAR = 'אגורה'
|
|
53
|
+
const AGORA_PLURAL = 'אגורות'
|
|
54
|
+
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// Segment Building
|
|
57
|
+
// ============================================================================
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Builds segment word for scale segments (thousands, millions, etc.).
|
|
61
|
+
* "ו" is added before tens and ones when following hundreds.
|
|
62
|
+
*/
|
|
63
|
+
function buildScaleSegment (n, andWord) {
|
|
64
|
+
if (n === 0) return ''
|
|
65
|
+
|
|
66
|
+
const ones = n % 10
|
|
67
|
+
const tens = Math.trunc(n / 10) % 10
|
|
68
|
+
const hundreds = Math.trunc(n / 100)
|
|
69
|
+
|
|
70
|
+
let result = ''
|
|
71
|
+
|
|
72
|
+
// Hundreds
|
|
73
|
+
if (hundreds > 0) {
|
|
74
|
+
result = HUNDREDS[hundreds]
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Tens and ones
|
|
78
|
+
if (tens === 1) {
|
|
79
|
+
// Teens (10-19)
|
|
80
|
+
const teenWord = TEENS[ones]
|
|
81
|
+
if (result) {
|
|
82
|
+
result += ' ' + andWord + teenWord
|
|
83
|
+
} else {
|
|
84
|
+
result = teenWord
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
// Tens (20-90)
|
|
88
|
+
if (tens >= 2) {
|
|
89
|
+
if (result) {
|
|
90
|
+
result += ' ' + andWord + TENS[tens]
|
|
91
|
+
} else {
|
|
92
|
+
result = TENS[tens]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Ones
|
|
97
|
+
if (ones > 0) {
|
|
98
|
+
if (result) {
|
|
99
|
+
result += ' ' + andWord + ONES[ones]
|
|
100
|
+
} else {
|
|
101
|
+
result = ONES[ones]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return result
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Builds segment word for units segment (no scale word).
|
|
111
|
+
* "ו" is only added before the final ones digit.
|
|
112
|
+
*/
|
|
113
|
+
function buildUnitsSegment (n, andWord) {
|
|
114
|
+
if (n === 0) return ''
|
|
115
|
+
|
|
116
|
+
const ones = n % 10
|
|
117
|
+
const tens = Math.trunc(n / 10) % 10
|
|
118
|
+
const hundreds = Math.trunc(n / 100)
|
|
119
|
+
|
|
120
|
+
let result = ''
|
|
121
|
+
|
|
122
|
+
// Hundreds
|
|
123
|
+
if (hundreds > 0) {
|
|
124
|
+
result = HUNDREDS[hundreds]
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Tens (no conjunction)
|
|
128
|
+
if (tens === 1) {
|
|
129
|
+
// Teens (10-19)
|
|
130
|
+
if (result) {
|
|
131
|
+
result += ' ' + TEENS[ones]
|
|
132
|
+
} else {
|
|
133
|
+
result = TEENS[ones]
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
if (tens >= 2) {
|
|
137
|
+
if (result) {
|
|
138
|
+
result += ' ' + TENS[tens]
|
|
139
|
+
} else {
|
|
140
|
+
result = TENS[tens]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Ones - conjunction only here
|
|
145
|
+
if (ones > 0) {
|
|
146
|
+
if (result) {
|
|
147
|
+
result += ' ' + andWord + ONES[ones]
|
|
148
|
+
} else {
|
|
149
|
+
result = ONES[ones]
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return result
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ============================================================================
|
|
158
|
+
// Conversion Functions
|
|
159
|
+
// ============================================================================
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Converts a non-negative integer to Hebrew words.
|
|
163
|
+
*
|
|
164
|
+
* @param {bigint} n - Non-negative integer to convert
|
|
165
|
+
* @param {string} andWord - Conjunction word
|
|
166
|
+
* @returns {string} Hebrew words
|
|
167
|
+
*/
|
|
168
|
+
function integerToWords (n, andWord) {
|
|
169
|
+
if (n === 0n) return ZERO
|
|
170
|
+
|
|
171
|
+
// Fast path: numbers < 1000
|
|
172
|
+
if (n < 1000n) {
|
|
173
|
+
return buildUnitsSegment(Number(n), andWord)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Extract segments using BigInt modulo
|
|
177
|
+
const segments = []
|
|
178
|
+
let temp = n
|
|
179
|
+
while (temp > 0n) {
|
|
180
|
+
segments.push(Number(temp % 1000n))
|
|
181
|
+
temp = temp / 1000n
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Build result string directly
|
|
185
|
+
let result = ''
|
|
186
|
+
|
|
187
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
188
|
+
const segment = segments[i]
|
|
189
|
+
if (segment === 0) continue
|
|
190
|
+
|
|
191
|
+
if (i === 0) {
|
|
192
|
+
// Units segment (no scale word)
|
|
193
|
+
const segmentWord = buildUnitsSegment(segment, andWord)
|
|
194
|
+
if (result) {
|
|
195
|
+
// Add "ו" before single-digit units when following scale words
|
|
196
|
+
if (segment <= 9) {
|
|
197
|
+
result += ' ' + andWord + segmentWord
|
|
198
|
+
} else {
|
|
199
|
+
result += ' ' + segmentWord
|
|
200
|
+
}
|
|
201
|
+
} else {
|
|
202
|
+
result = segmentWord
|
|
203
|
+
}
|
|
204
|
+
} else if (i === 1) {
|
|
205
|
+
// Thousands - special handling for 1-9
|
|
206
|
+
if (segment <= 9) {
|
|
207
|
+
if (result) result += ' '
|
|
208
|
+
result += THOUSANDS_SPECIAL[segment]
|
|
209
|
+
} else {
|
|
210
|
+
const segmentWord = buildScaleSegment(segment, andWord)
|
|
211
|
+
if (result) result += ' '
|
|
212
|
+
result += segmentWord + ' ' + SCALE[1]
|
|
213
|
+
}
|
|
214
|
+
} else {
|
|
215
|
+
// Millions and above
|
|
216
|
+
if (segment === 1) {
|
|
217
|
+
if (result) result += ' '
|
|
218
|
+
result += SCALE[i]
|
|
219
|
+
} else {
|
|
220
|
+
const segmentWord = buildScaleSegment(segment, andWord)
|
|
221
|
+
if (result) result += ' '
|
|
222
|
+
result += segmentWord + ' ' + SCALE_PLURAL[i]
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return result
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Converts decimal digits to Hebrew words (digit by digit).
|
|
232
|
+
*
|
|
233
|
+
* @param {string} decimalPart - Decimal digits (without the point)
|
|
234
|
+
* @returns {string} Hebrew words for decimal part
|
|
235
|
+
*/
|
|
236
|
+
function decimalPartToWords (decimalPart) {
|
|
237
|
+
let result = ''
|
|
238
|
+
|
|
239
|
+
for (let i = 0; i < decimalPart.length; i++) {
|
|
240
|
+
const d = parseInt(decimalPart[i], 10)
|
|
241
|
+
if (result) result += ' '
|
|
242
|
+
result += d === 0 ? ZERO : ONES[d]
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return result
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Converts a numeric value to Modern Hebrew words.
|
|
250
|
+
*
|
|
251
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
252
|
+
* @param {Object} [options] - Optional configuration
|
|
253
|
+
* @param {string} [options.andWord='ו'] - Custom conjunction word
|
|
254
|
+
* @returns {string} The number in Modern Hebrew words
|
|
255
|
+
*/
|
|
256
|
+
function toCardinal (value, options) {
|
|
257
|
+
options = validateOptions(options)
|
|
258
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
259
|
+
|
|
260
|
+
// Apply option defaults
|
|
261
|
+
const { andWord = 'ו' } = options
|
|
262
|
+
|
|
263
|
+
let result = ''
|
|
264
|
+
|
|
265
|
+
if (isNegative) {
|
|
266
|
+
result = NEGATIVE + ' '
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
result += integerToWords(integerPart, andWord)
|
|
270
|
+
|
|
271
|
+
if (decimalPart) {
|
|
272
|
+
result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return result
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// ============================================================================
|
|
279
|
+
// Ordinal Functions
|
|
280
|
+
// ============================================================================
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Builds ordinal for tens and ones (0-99).
|
|
284
|
+
*
|
|
285
|
+
* @param {number} n - Number 0-99
|
|
286
|
+
* @returns {string} Ordinal word
|
|
287
|
+
*/
|
|
288
|
+
function buildOrdinalTensOnes (n) {
|
|
289
|
+
if (n === 0) return ''
|
|
290
|
+
if (n < 10) return ORDINAL_ONES[n]
|
|
291
|
+
if (n < 20) return ORDINAL_TEENS[n - 10]
|
|
292
|
+
|
|
293
|
+
const ones = n % 10
|
|
294
|
+
const tens = Math.trunc(n / 10)
|
|
295
|
+
|
|
296
|
+
if (ones === 0) {
|
|
297
|
+
// Round tens: "עשרים וראשון" (twentieth = twenty and first)
|
|
298
|
+
return ORDINAL_TENS[tens] + ' ו' + ORDINAL_ONES[1]
|
|
299
|
+
}
|
|
300
|
+
// For compound ordinals, only the last part is ordinal
|
|
301
|
+
return ORDINAL_TENS[tens] + ' ו' + ORDINAL_ONES[ones]
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Converts a non-negative integer to Hebrew ordinal words.
|
|
306
|
+
*
|
|
307
|
+
* @param {bigint} n - Non-negative integer to convert
|
|
308
|
+
* @returns {string} Hebrew ordinal words
|
|
309
|
+
*/
|
|
310
|
+
function integerToOrdinal (n) {
|
|
311
|
+
if (n === 0n) return ''
|
|
312
|
+
if (n === 1n) return ORDINAL_ONES[1]
|
|
313
|
+
|
|
314
|
+
// Numbers < 100
|
|
315
|
+
if (n < 100n) {
|
|
316
|
+
return buildOrdinalTensOnes(Number(n))
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Numbers < 1000
|
|
320
|
+
if (n < 1000n) {
|
|
321
|
+
const hundreds = Number(n / 100n)
|
|
322
|
+
const remainder = Number(n % 100n)
|
|
323
|
+
|
|
324
|
+
let result
|
|
325
|
+
if (hundreds === 1) {
|
|
326
|
+
if (remainder === 0) {
|
|
327
|
+
return ORDINAL_HUNDRED
|
|
328
|
+
}
|
|
329
|
+
result = HUNDREDS[hundreds]
|
|
330
|
+
} else {
|
|
331
|
+
if (remainder === 0) {
|
|
332
|
+
return HUNDREDS[hundreds]
|
|
333
|
+
}
|
|
334
|
+
result = HUNDREDS[hundreds]
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
return result + ' ' + buildOrdinalTensOnes(remainder)
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// Numbers < 1,000,000
|
|
341
|
+
if (n < 1_000_000n) {
|
|
342
|
+
const thousands = Number(n / 1000n)
|
|
343
|
+
const remainder = Number(n % 1000n)
|
|
344
|
+
|
|
345
|
+
if (remainder === 0) {
|
|
346
|
+
if (thousands <= 9) {
|
|
347
|
+
return THOUSANDS_SPECIAL[thousands]
|
|
348
|
+
}
|
|
349
|
+
return buildScaleSegment(thousands, 'ו') + ' ' + SCALE[1]
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Cardinal thousands + ordinal remainder
|
|
353
|
+
let result
|
|
354
|
+
if (thousands <= 9) {
|
|
355
|
+
result = THOUSANDS_SPECIAL[thousands]
|
|
356
|
+
} else {
|
|
357
|
+
result = buildScaleSegment(thousands, 'ו') + ' ' + SCALE[1]
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (remainder < 100) {
|
|
361
|
+
return result + ' ' + buildOrdinalTensOnes(remainder)
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const remHundreds = Math.trunc(remainder / 100)
|
|
365
|
+
const remTensOnes = remainder % 100
|
|
366
|
+
|
|
367
|
+
if (remTensOnes === 0) {
|
|
368
|
+
return result + ' ' + HUNDREDS[remHundreds]
|
|
369
|
+
}
|
|
370
|
+
return result + ' ' + HUNDREDS[remHundreds] + ' ' + buildOrdinalTensOnes(remTensOnes)
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Numbers >= 1,000,000
|
|
374
|
+
const millions = Number(n / 1_000_000n)
|
|
375
|
+
const remainder = n % 1_000_000n
|
|
376
|
+
|
|
377
|
+
if (remainder === 0n) {
|
|
378
|
+
if (millions === 1) {
|
|
379
|
+
return SCALE[2]
|
|
380
|
+
}
|
|
381
|
+
return buildScaleSegment(millions, 'ו') + ' ' + SCALE_PLURAL[2]
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Cardinal millions + ordinal remainder
|
|
385
|
+
let result
|
|
386
|
+
if (millions === 1) {
|
|
387
|
+
result = SCALE[2]
|
|
388
|
+
} else {
|
|
389
|
+
result = buildScaleSegment(millions, 'ו') + ' ' + SCALE_PLURAL[2]
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return result + ' ' + integerToOrdinal(remainder)
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Converts a numeric value to Hebrew ordinal words.
|
|
397
|
+
*
|
|
398
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
399
|
+
* @returns {string} The ordinal in Hebrew words
|
|
400
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
401
|
+
* @throws {Error} If value is not a positive integer
|
|
402
|
+
*
|
|
403
|
+
* @example
|
|
404
|
+
* toOrdinal(1) // 'ראשון'
|
|
405
|
+
* toOrdinal(21) // 'עשרים וראשון'
|
|
406
|
+
*/
|
|
407
|
+
function toOrdinal (value) {
|
|
408
|
+
const n = parseOrdinalValue(value)
|
|
409
|
+
return integerToOrdinal(n)
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// ============================================================================
|
|
413
|
+
// Currency Functions
|
|
414
|
+
// ============================================================================
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Builds segment word for currency (masculine forms).
|
|
418
|
+
*/
|
|
419
|
+
function buildCurrencySegment (n) {
|
|
420
|
+
if (n === 0) return ''
|
|
421
|
+
|
|
422
|
+
const ones = n % 10
|
|
423
|
+
const tens = Math.trunc(n / 10) % 10
|
|
424
|
+
const hundreds = Math.trunc(n / 100)
|
|
425
|
+
|
|
426
|
+
let result = ''
|
|
427
|
+
|
|
428
|
+
// Hundreds
|
|
429
|
+
if (hundreds > 0) {
|
|
430
|
+
result = HUNDREDS[hundreds]
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// Tens and ones
|
|
434
|
+
if (tens === 1) {
|
|
435
|
+
// Teens (10-19)
|
|
436
|
+
const teenWord = TEENS[ones]
|
|
437
|
+
if (result) {
|
|
438
|
+
result += ' ' + teenWord
|
|
439
|
+
} else {
|
|
440
|
+
result = teenWord
|
|
441
|
+
}
|
|
442
|
+
} else {
|
|
443
|
+
// Tens (20-90)
|
|
444
|
+
if (tens >= 2) {
|
|
445
|
+
if (result) {
|
|
446
|
+
result += ' ' + TENS[tens]
|
|
447
|
+
} else {
|
|
448
|
+
result = TENS[tens]
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Ones - masculine form for currency
|
|
453
|
+
if (ones > 0) {
|
|
454
|
+
if (result) {
|
|
455
|
+
result += ' ו' + ONES_MASC[ones]
|
|
456
|
+
} else {
|
|
457
|
+
result = ONES_MASC[ones]
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
return result
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Converts a non-negative integer to Hebrew currency words (masculine).
|
|
467
|
+
*
|
|
468
|
+
* @param {bigint} n - Non-negative integer to convert
|
|
469
|
+
* @returns {string} Hebrew words (masculine form)
|
|
470
|
+
*/
|
|
471
|
+
function integerToCurrencyWords (n) {
|
|
472
|
+
if (n === 0n) return ZERO
|
|
473
|
+
|
|
474
|
+
// Fast path: numbers < 1000
|
|
475
|
+
if (n < 1000n) {
|
|
476
|
+
return buildCurrencySegment(Number(n))
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// Use general integerToWords but with masculine forms embedded in segment builder
|
|
480
|
+
// For simplicity, use the cardinal form which defaults to feminine
|
|
481
|
+
// However, for currency we need masculine - this is a simplification
|
|
482
|
+
return integerToWords(n, 'ו')
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Converts a numeric value to Hebrew New Israeli Shekel currency words.
|
|
487
|
+
*
|
|
488
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
489
|
+
* @returns {string} The currency in Hebrew words
|
|
490
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
491
|
+
* @throws {Error} If value is not a valid number format
|
|
492
|
+
*
|
|
493
|
+
* @example
|
|
494
|
+
* toCurrency(1) // 'שקל אחד'
|
|
495
|
+
* toCurrency(2.50) // 'שניים שקלים חמישים אגורות'
|
|
496
|
+
*/
|
|
497
|
+
function toCurrency (value) {
|
|
498
|
+
const { isNegative, dollars, cents } = parseCurrencyValue(value)
|
|
499
|
+
|
|
500
|
+
const parts = []
|
|
501
|
+
|
|
502
|
+
if (isNegative) {
|
|
503
|
+
parts.push(NEGATIVE)
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// Shekels (masculine)
|
|
507
|
+
if (dollars > 0n || cents === 0n) {
|
|
508
|
+
if (dollars === 1n) {
|
|
509
|
+
parts.push(SHEKEL_SINGULAR + ' ' + ONES_MASC[1])
|
|
510
|
+
} else if (dollars === 2n) {
|
|
511
|
+
parts.push(ONES_MASC[2] + ' ' + SHEKEL_PLURAL)
|
|
512
|
+
} else {
|
|
513
|
+
const shekelWord = integerToCurrencyWords(dollars)
|
|
514
|
+
const shekelForm = SHEKEL_PLURAL
|
|
515
|
+
parts.push(shekelWord + ' ' + shekelForm)
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// Agorot (feminine)
|
|
520
|
+
if (cents > 0n) {
|
|
521
|
+
const centNum = Number(cents)
|
|
522
|
+
if (centNum === 1) {
|
|
523
|
+
parts.push(AGORA_SINGULAR + ' ' + ONES[1])
|
|
524
|
+
} else {
|
|
525
|
+
const centWord = integerToWords(cents, 'ו')
|
|
526
|
+
parts.push(centWord + ' ' + AGORA_PLURAL)
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
return parts.join(' ')
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// ============================================================================
|
|
534
|
+
// Exports
|
|
535
|
+
// ============================================================================
|
|
536
|
+
|
|
537
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/hi-IN.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Hindi words.
|
|
3
|
+
*
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @returns {string} The number in Hindi words
|
|
6
|
+
*/
|
|
7
|
+
export function toCardinal(value: number | string | bigint): string;
|
|
8
|
+
/**
|
|
9
|
+
* Converts a numeric value to Hindi 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 Hindi currency words (Indian Rupee).
|
|
25
|
+
*
|
|
26
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
27
|
+
* @returns {string} The amount in Hindi 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;
|