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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Hausa language converter
|
|
2
|
+
* Hausa (Nigeria) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: ha-NG | Hausa as used in Nigeria
|
|
5
5
|
*
|
|
6
6
|
* Key features:
|
|
7
7
|
* - Authentic Boko orthography with ɗ (hooked d) and ' (glottal stop)
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
* - Per-digit decimal reading
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
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'
|
|
17
19
|
|
|
18
20
|
// ============================================================================
|
|
19
21
|
// Vocabulary
|
|
@@ -34,6 +36,22 @@ const DECIMAL_SEP = 'digo'
|
|
|
34
36
|
// Short scale
|
|
35
37
|
const SCALE_WORDS = ['', THOUSAND, 'miliyan', 'biliyan']
|
|
36
38
|
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// Ordinal Vocabulary
|
|
41
|
+
// ============================================================================
|
|
42
|
+
|
|
43
|
+
// Hausa ordinals: "na" + cardinal (na ɗaya = 1st, na biyu = 2nd)
|
|
44
|
+
// First has special form "na fari" or "farko"
|
|
45
|
+
const ORDINAL_PREFIX = 'na'
|
|
46
|
+
const ORDINAL_FIRST = 'na farko'
|
|
47
|
+
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// Currency Vocabulary (Nigerian Naira)
|
|
50
|
+
// ============================================================================
|
|
51
|
+
|
|
52
|
+
const NAIRA = 'naira'
|
|
53
|
+
const KOBO = 'kobo'
|
|
54
|
+
|
|
37
55
|
// ============================================================================
|
|
38
56
|
// Precomputed Lookup Table
|
|
39
57
|
// ============================================================================
|
|
@@ -47,8 +65,8 @@ function buildSegment (n) {
|
|
|
47
65
|
if (n === 0) return ''
|
|
48
66
|
|
|
49
67
|
const ones = n % 10
|
|
50
|
-
const tensDigit = Math.
|
|
51
|
-
const hundredsDigit = Math.
|
|
68
|
+
const tensDigit = Math.trunc(n / 10) % 10
|
|
69
|
+
const hundredsDigit = Math.trunc(n / 100)
|
|
52
70
|
|
|
53
71
|
const parts = []
|
|
54
72
|
|
|
@@ -88,11 +106,6 @@ function buildSegment (n) {
|
|
|
88
106
|
return parts.join(' ')
|
|
89
107
|
}
|
|
90
108
|
|
|
91
|
-
const SEGMENTS = new Array(1000)
|
|
92
|
-
for (let i = 0; i < 1000; i++) {
|
|
93
|
-
SEGMENTS[i] = buildSegment(i)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
109
|
// ============================================================================
|
|
97
110
|
// Conversion Functions
|
|
98
111
|
// ============================================================================
|
|
@@ -101,7 +114,7 @@ function integerToWords (n) {
|
|
|
101
114
|
if (n === 0n) return ZERO
|
|
102
115
|
|
|
103
116
|
if (n < 1000n) {
|
|
104
|
-
return
|
|
117
|
+
return buildSegment(Number(n))
|
|
105
118
|
}
|
|
106
119
|
|
|
107
120
|
return buildLargeNumberWords(n)
|
|
@@ -143,9 +156,9 @@ function buildLargeNumberWords (n) {
|
|
|
143
156
|
const scaleWord = SCALE_WORDS[scaleIndex] || ''
|
|
144
157
|
|
|
145
158
|
if (scaleIndex === 0) {
|
|
146
|
-
rawParts.push(
|
|
159
|
+
rawParts.push(buildSegment(segment))
|
|
147
160
|
} else {
|
|
148
|
-
rawParts.push(
|
|
161
|
+
rawParts.push(buildSegment(segment))
|
|
149
162
|
rawParts.push(scaleWord)
|
|
150
163
|
}
|
|
151
164
|
}
|
|
@@ -205,8 +218,8 @@ function decimalPartToWords (decimalPart) {
|
|
|
205
218
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
206
219
|
* @returns {string} The number in Hausa words
|
|
207
220
|
*/
|
|
208
|
-
function
|
|
209
|
-
const { isNegative, integerPart, decimalPart } =
|
|
221
|
+
function toCardinal (value) {
|
|
222
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
210
223
|
|
|
211
224
|
let result = ''
|
|
212
225
|
|
|
@@ -223,8 +236,89 @@ function toWords (value) {
|
|
|
223
236
|
return result
|
|
224
237
|
}
|
|
225
238
|
|
|
239
|
+
// ============================================================================
|
|
240
|
+
// ORDINAL: toOrdinal(value)
|
|
241
|
+
// ============================================================================
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Converts a non-negative integer to Hausa ordinal words.
|
|
245
|
+
*
|
|
246
|
+
* Hausa ordinals: na farko (1st), na biyu (2nd), na uku (3rd), etc.
|
|
247
|
+
*
|
|
248
|
+
* @param {bigint} n - Positive integer to convert
|
|
249
|
+
* @returns {string} Hausa ordinal words
|
|
250
|
+
*/
|
|
251
|
+
function integerToOrdinal (n) {
|
|
252
|
+
// Special form for first
|
|
253
|
+
if (n === 1n) return ORDINAL_FIRST
|
|
254
|
+
|
|
255
|
+
// For 2+, use "na" prefix + cardinal
|
|
256
|
+
return ORDINAL_PREFIX + ' ' + integerToWords(n)
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Converts a numeric value to Hausa ordinal words.
|
|
261
|
+
*
|
|
262
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
263
|
+
* @returns {string} The number as ordinal words
|
|
264
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
265
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* toOrdinal(1) // 'na farko'
|
|
269
|
+
* toOrdinal(2) // 'na biyu'
|
|
270
|
+
* toOrdinal(10) // 'na goma'
|
|
271
|
+
*/
|
|
272
|
+
function toOrdinal (value) {
|
|
273
|
+
const integerPart = parseOrdinalValue(value)
|
|
274
|
+
return integerToOrdinal(integerPart)
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// ============================================================================
|
|
278
|
+
// CURRENCY: toCurrency(value)
|
|
279
|
+
// ============================================================================
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Converts a numeric value to Hausa currency words (Nigerian Naira).
|
|
283
|
+
*
|
|
284
|
+
* Uses naira and kobo (100 kobo = 1 naira).
|
|
285
|
+
*
|
|
286
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
287
|
+
* @returns {string} The amount in Hausa currency words
|
|
288
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
289
|
+
* @throws {Error} If value is not a valid number format
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* toCurrency(42) // 'arba'in da biyu naira'
|
|
293
|
+
* toCurrency(1.50) // 'ɗaya naira da hamsin kobo'
|
|
294
|
+
* toCurrency(-5) // 'babu biyar naira'
|
|
295
|
+
*/
|
|
296
|
+
function toCurrency (value) {
|
|
297
|
+
const { isNegative, dollars: naira, cents: kobo } = parseCurrencyValue(value)
|
|
298
|
+
|
|
299
|
+
let result = ''
|
|
300
|
+
if (isNegative) {
|
|
301
|
+
result = NEGATIVE + ' '
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Naira part
|
|
305
|
+
if (naira > 0n || kobo === 0n) {
|
|
306
|
+
result += integerToWords(naira) + ' ' + NAIRA
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Kobo part
|
|
310
|
+
if (kobo > 0n) {
|
|
311
|
+
if (naira > 0n) {
|
|
312
|
+
result += ' da '
|
|
313
|
+
}
|
|
314
|
+
result += integerToWords(kobo) + ' ' + KOBO
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return result
|
|
318
|
+
}
|
|
319
|
+
|
|
226
320
|
// ============================================================================
|
|
227
321
|
// Exports
|
|
228
322
|
// ============================================================================
|
|
229
323
|
|
|
230
|
-
export {
|
|
324
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/hbo-IL.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Biblical Hebrew words.
|
|
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
|
+
* @param {string} [options.andWord='ו'] - Custom conjunction word
|
|
8
|
+
* @returns {string} The number in Biblical Hebrew words
|
|
9
|
+
*/
|
|
10
|
+
export function toCardinal(value: number | string | bigint, options?: {
|
|
11
|
+
gender?: "masculine" | "feminine" | undefined;
|
|
12
|
+
andWord?: string | undefined;
|
|
13
|
+
}): string;
|
|
14
|
+
/**
|
|
15
|
+
* Converts a numeric value to Biblical Hebrew ordinal words.
|
|
16
|
+
*
|
|
17
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
18
|
+
* @returns {string} The ordinal in Biblical Hebrew words
|
|
19
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
20
|
+
* @throws {Error} If value is not a positive integer
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* toOrdinal(1) // 'ראשון'
|
|
24
|
+
* toOrdinal(21) // 'עשרים וראשון'
|
|
25
|
+
*/
|
|
26
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
27
|
+
/**
|
|
28
|
+
* Converts a numeric value to Biblical Hebrew Shekel currency words.
|
|
29
|
+
*
|
|
30
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
31
|
+
* @returns {string} The currency in Biblical Hebrew words
|
|
32
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
33
|
+
* @throws {Error} If value is not a valid number format
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* toCurrency(1) // 'שקל אחד'
|
|
37
|
+
* toCurrency(2.50) // 'שניים שקלים חמישים גרות'
|
|
38
|
+
*/
|
|
39
|
+
export function toCurrency(value: number | string | bigint): string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Biblical Hebrew language converter
|
|
2
|
+
* Biblical Hebrew (Israel) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: hbo-IL | Biblical/Ancient Hebrew
|
|
5
5
|
*
|
|
6
6
|
* Key features:
|
|
7
7
|
* - Gender agreement (masculine default, feminine via option)
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
* - Special 1-9 thousands construct state
|
|
10
10
|
* - "ו" (ve) conjunction rules vary by position
|
|
11
11
|
* - Per-digit decimal reading
|
|
12
|
-
*
|
|
13
|
-
* Optimization: Precomputed segment lookup tables for both genders.
|
|
14
12
|
*/
|
|
15
13
|
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
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
18
|
|
|
19
19
|
// ============================================================================
|
|
20
20
|
// Vocabulary (arrays for indexed access - faster than object property lookup)
|
|
@@ -43,8 +43,20 @@ const ZERO = 'אפס'
|
|
|
43
43
|
const NEGATIVE = 'מינוס'
|
|
44
44
|
const DECIMAL_SEP = 'נקודה'
|
|
45
45
|
|
|
46
|
+
// Ordinal forms (masculine) - used in Biblical Hebrew
|
|
47
|
+
const ORDINAL_ONES = ['', 'ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שביעי', 'שמיני', 'תשיעי']
|
|
48
|
+
const ORDINAL_TEENS = ['עשירי', 'אחד עשר', 'שנים עשר', 'שלשה עשר', 'ארבעה עשר', 'חמשה עשר', 'ששה עשר', 'שבעה עשר', 'שמונה עשר', 'תשעה עשר']
|
|
49
|
+
const ORDINAL_TENS = ['', '', 'עשרים', 'שלשים', 'ארבעים', 'חמישים', 'ששים', 'שבעים', 'שמונים', 'תשעים']
|
|
50
|
+
const ORDINAL_HUNDRED = 'מאה'
|
|
51
|
+
|
|
52
|
+
// Currency (Biblical Shekel - historical usage)
|
|
53
|
+
const SHEKEL = 'שקל'
|
|
54
|
+
const SHEKEL_PLURAL = 'שקלים'
|
|
55
|
+
const GERAH = 'גרה'
|
|
56
|
+
const GERAH_PLURAL = 'גרות'
|
|
57
|
+
|
|
46
58
|
// ============================================================================
|
|
47
|
-
//
|
|
59
|
+
// Segment Building
|
|
48
60
|
// ============================================================================
|
|
49
61
|
|
|
50
62
|
/**
|
|
@@ -55,8 +67,8 @@ function buildScaleSegment (n, andWord, ONES, TEENS, HUNDREDS_ARR) {
|
|
|
55
67
|
if (n === 0) return ''
|
|
56
68
|
|
|
57
69
|
const ones = n % 10
|
|
58
|
-
const tens = Math.
|
|
59
|
-
const hundreds = Math.
|
|
70
|
+
const tens = Math.trunc(n / 10) % 10
|
|
71
|
+
const hundreds = Math.trunc(n / 100)
|
|
60
72
|
|
|
61
73
|
let result = ''
|
|
62
74
|
|
|
@@ -105,8 +117,8 @@ function buildUnitsSegment (n, andWord, ONES, TEENS, HUNDREDS_ARR) {
|
|
|
105
117
|
if (n === 0) return ''
|
|
106
118
|
|
|
107
119
|
const ones = n % 10
|
|
108
|
-
const tens = Math.
|
|
109
|
-
const hundreds = Math.
|
|
120
|
+
const tens = Math.trunc(n / 10) % 10
|
|
121
|
+
const hundreds = Math.trunc(n / 100)
|
|
110
122
|
|
|
111
123
|
let result = ''
|
|
112
124
|
|
|
@@ -145,19 +157,6 @@ function buildUnitsSegment (n, andWord, ONES, TEENS, HUNDREDS_ARR) {
|
|
|
145
157
|
return result
|
|
146
158
|
}
|
|
147
159
|
|
|
148
|
-
// Precompute all 1000 segment words for masculine (default) with default conjunction
|
|
149
|
-
const SCALE_SEGMENTS_MASC = new Array(1000)
|
|
150
|
-
const UNITS_SEGMENTS_MASC = new Array(1000)
|
|
151
|
-
const SCALE_SEGMENTS_FEM = new Array(1000)
|
|
152
|
-
const UNITS_SEGMENTS_FEM = new Array(1000)
|
|
153
|
-
|
|
154
|
-
for (let i = 0; i < 1000; i++) {
|
|
155
|
-
SCALE_SEGMENTS_MASC[i] = buildScaleSegment(i, 'ו', ONES_MASC, TEENS_MASC, HUNDREDS)
|
|
156
|
-
UNITS_SEGMENTS_MASC[i] = buildUnitsSegment(i, 'ו', ONES_MASC, TEENS_MASC, HUNDREDS)
|
|
157
|
-
SCALE_SEGMENTS_FEM[i] = buildScaleSegment(i, 'ו', ONES_FEM, TEENS_FEM, HUNDREDS_FEM)
|
|
158
|
-
UNITS_SEGMENTS_FEM[i] = buildUnitsSegment(i, 'ו', ONES_FEM, TEENS_FEM, HUNDREDS_FEM)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
160
|
// ============================================================================
|
|
162
161
|
// Conversion Functions
|
|
163
162
|
// ============================================================================
|
|
@@ -169,25 +168,20 @@ for (let i = 0; i < 1000; i++) {
|
|
|
169
168
|
* @param {Object} options - Conversion options
|
|
170
169
|
* @returns {string} Biblical Hebrew words
|
|
171
170
|
*/
|
|
172
|
-
function integerToWords (n,
|
|
171
|
+
function integerToWords (n, gender, andWord) {
|
|
173
172
|
if (n === 0n) return ZERO
|
|
174
173
|
|
|
175
|
-
const andWord = options.andWord ?? 'ו'
|
|
176
|
-
const gender = options.gender || 'masculine'
|
|
177
174
|
const isFeminine = gender === 'feminine'
|
|
178
|
-
const usePrecomputed = andWord === 'ו'
|
|
179
175
|
|
|
180
176
|
// Select vocabulary based on gender
|
|
181
177
|
const ONES = isFeminine ? ONES_FEM : ONES_MASC
|
|
182
178
|
const TEENS = isFeminine ? TEENS_FEM : TEENS_MASC
|
|
183
179
|
const THOUSANDS_SPECIAL = isFeminine ? THOUSANDS_FEM : THOUSANDS_MASC
|
|
184
180
|
const HUNDREDS_ARR = isFeminine ? HUNDREDS_FEM : HUNDREDS
|
|
185
|
-
const SCALE_SEGS = isFeminine ? SCALE_SEGMENTS_FEM : SCALE_SEGMENTS_MASC
|
|
186
|
-
const UNITS_SEGS = isFeminine ? UNITS_SEGMENTS_FEM : UNITS_SEGMENTS_MASC
|
|
187
181
|
|
|
188
|
-
// Fast path: numbers < 1000
|
|
182
|
+
// Fast path: numbers < 1000
|
|
189
183
|
if (n < 1000n) {
|
|
190
|
-
return
|
|
184
|
+
return buildUnitsSegment(Number(n), andWord, ONES, TEENS, HUNDREDS_ARR)
|
|
191
185
|
}
|
|
192
186
|
|
|
193
187
|
// Extract segments using BigInt modulo
|
|
@@ -207,7 +201,7 @@ function integerToWords (n, options) {
|
|
|
207
201
|
|
|
208
202
|
if (i === 0) {
|
|
209
203
|
// Units segment (no scale word)
|
|
210
|
-
const segmentWord =
|
|
204
|
+
const segmentWord = buildUnitsSegment(segment, andWord, ONES, TEENS, HUNDREDS_ARR)
|
|
211
205
|
if (result) {
|
|
212
206
|
// Add "ו" before single-digit units when following scale words
|
|
213
207
|
if (segment <= 9) {
|
|
@@ -224,7 +218,7 @@ function integerToWords (n, options) {
|
|
|
224
218
|
if (result) result += ' '
|
|
225
219
|
result += THOUSANDS_SPECIAL[segment]
|
|
226
220
|
} else {
|
|
227
|
-
const segmentWord =
|
|
221
|
+
const segmentWord = buildScaleSegment(segment, andWord, ONES, TEENS, HUNDREDS_ARR)
|
|
228
222
|
if (result) result += ' '
|
|
229
223
|
result += segmentWord + ' ' + SCALE[1]
|
|
230
224
|
}
|
|
@@ -234,7 +228,7 @@ function integerToWords (n, options) {
|
|
|
234
228
|
if (result) result += ' '
|
|
235
229
|
result += SCALE[i]
|
|
236
230
|
} else {
|
|
237
|
-
const segmentWord =
|
|
231
|
+
const segmentWord = buildScaleSegment(segment, andWord, ONES, TEENS, HUNDREDS_ARR)
|
|
238
232
|
if (result) result += ' '
|
|
239
233
|
result += segmentWord + ' ' + SCALE_PLURAL[i]
|
|
240
234
|
}
|
|
@@ -251,8 +245,7 @@ function integerToWords (n, options) {
|
|
|
251
245
|
* @param {Object} options - Conversion options
|
|
252
246
|
* @returns {string} Biblical Hebrew words for decimal part
|
|
253
247
|
*/
|
|
254
|
-
function decimalPartToWords (decimalPart,
|
|
255
|
-
const gender = options.gender || 'masculine'
|
|
248
|
+
function decimalPartToWords (decimalPart, gender, andWord) {
|
|
256
249
|
const ONES = gender === 'feminine' ? ONES_FEM : ONES_MASC
|
|
257
250
|
|
|
258
251
|
let result = ''
|
|
@@ -271,12 +264,18 @@ function decimalPartToWords (decimalPart, options) {
|
|
|
271
264
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
272
265
|
* @param {Object} [options] - Optional configuration
|
|
273
266
|
* @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
|
|
274
|
-
* @param {string} [options.andWord] - Custom conjunction word
|
|
267
|
+
* @param {string} [options.andWord='ו'] - Custom conjunction word
|
|
275
268
|
* @returns {string} The number in Biblical Hebrew words
|
|
276
269
|
*/
|
|
277
|
-
function
|
|
270
|
+
function toCardinal (value, options) {
|
|
278
271
|
options = validateOptions(options)
|
|
279
|
-
const { isNegative, integerPart, decimalPart } =
|
|
272
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
273
|
+
|
|
274
|
+
// Apply option defaults
|
|
275
|
+
const {
|
|
276
|
+
gender = 'masculine',
|
|
277
|
+
andWord = 'ו'
|
|
278
|
+
} = options
|
|
280
279
|
|
|
281
280
|
let result = ''
|
|
282
281
|
|
|
@@ -284,17 +283,192 @@ function toWords (value, options) {
|
|
|
284
283
|
result = NEGATIVE + ' '
|
|
285
284
|
}
|
|
286
285
|
|
|
287
|
-
result += integerToWords(integerPart,
|
|
286
|
+
result += integerToWords(integerPart, gender, andWord)
|
|
288
287
|
|
|
289
288
|
if (decimalPart) {
|
|
290
|
-
result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart,
|
|
289
|
+
result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, gender, andWord)
|
|
291
290
|
}
|
|
292
291
|
|
|
293
292
|
return result
|
|
294
293
|
}
|
|
295
294
|
|
|
295
|
+
// ============================================================================
|
|
296
|
+
// Ordinal Functions
|
|
297
|
+
// ============================================================================
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Builds ordinal for tens and ones (0-99).
|
|
301
|
+
*
|
|
302
|
+
* @param {number} n - Number 0-99
|
|
303
|
+
* @returns {string} Ordinal word
|
|
304
|
+
*/
|
|
305
|
+
function buildOrdinalTensOnes (n) {
|
|
306
|
+
if (n === 0) return ''
|
|
307
|
+
if (n < 10) return ORDINAL_ONES[n]
|
|
308
|
+
if (n < 20) return ORDINAL_TEENS[n - 10]
|
|
309
|
+
|
|
310
|
+
const ones = n % 10
|
|
311
|
+
const tens = Math.trunc(n / 10)
|
|
312
|
+
|
|
313
|
+
if (ones === 0) {
|
|
314
|
+
// Round tens: add "וראשון"
|
|
315
|
+
return ORDINAL_TENS[tens] + ' ו' + ORDINAL_ONES[1]
|
|
316
|
+
}
|
|
317
|
+
// Compound: cardinal tens + ordinal ones
|
|
318
|
+
return ORDINAL_TENS[tens] + ' ו' + ORDINAL_ONES[ones]
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Converts a non-negative integer to Biblical Hebrew ordinal words.
|
|
323
|
+
*
|
|
324
|
+
* @param {bigint} n - Non-negative integer to convert
|
|
325
|
+
* @returns {string} Biblical Hebrew ordinal words
|
|
326
|
+
*/
|
|
327
|
+
function integerToOrdinal (n) {
|
|
328
|
+
if (n === 0n) return ''
|
|
329
|
+
if (n === 1n) return ORDINAL_ONES[1]
|
|
330
|
+
|
|
331
|
+
// Numbers < 100
|
|
332
|
+
if (n < 100n) {
|
|
333
|
+
return buildOrdinalTensOnes(Number(n))
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Numbers < 1000
|
|
337
|
+
if (n < 1000n) {
|
|
338
|
+
const hundreds = Number(n / 100n)
|
|
339
|
+
const remainder = Number(n % 100n)
|
|
340
|
+
|
|
341
|
+
if (remainder === 0) {
|
|
342
|
+
return ORDINAL_HUNDRED
|
|
343
|
+
}
|
|
344
|
+
return HUNDREDS[hundreds] + ' ' + buildOrdinalTensOnes(remainder)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Numbers < 1,000,000
|
|
348
|
+
if (n < 1_000_000n) {
|
|
349
|
+
const thousands = Number(n / 1000n)
|
|
350
|
+
const remainder = Number(n % 1000n)
|
|
351
|
+
|
|
352
|
+
if (remainder === 0) {
|
|
353
|
+
if (thousands <= 9) {
|
|
354
|
+
return THOUSANDS_MASC[thousands]
|
|
355
|
+
}
|
|
356
|
+
return buildScaleSegment(thousands, 'ו', ONES_MASC, TEENS_MASC, HUNDREDS) + ' ' + SCALE[1]
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Cardinal thousands + ordinal remainder
|
|
360
|
+
let result
|
|
361
|
+
if (thousands <= 9) {
|
|
362
|
+
result = THOUSANDS_MASC[thousands]
|
|
363
|
+
} else {
|
|
364
|
+
result = buildScaleSegment(thousands, 'ו', ONES_MASC, TEENS_MASC, HUNDREDS) + ' ' + SCALE[1]
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
if (remainder < 100) {
|
|
368
|
+
return result + ' ' + buildOrdinalTensOnes(remainder)
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const remHundreds = Math.trunc(remainder / 100)
|
|
372
|
+
const remTensOnes = remainder % 100
|
|
373
|
+
|
|
374
|
+
if (remTensOnes === 0) {
|
|
375
|
+
return result + ' ' + HUNDREDS[remHundreds]
|
|
376
|
+
}
|
|
377
|
+
return result + ' ' + HUNDREDS[remHundreds] + ' ' + buildOrdinalTensOnes(remTensOnes)
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// Numbers >= 1,000,000
|
|
381
|
+
const millions = Number(n / 1_000_000n)
|
|
382
|
+
const remainder = n % 1_000_000n
|
|
383
|
+
|
|
384
|
+
if (remainder === 0n) {
|
|
385
|
+
if (millions === 1) {
|
|
386
|
+
return SCALE[2]
|
|
387
|
+
}
|
|
388
|
+
return buildScaleSegment(millions, 'ו', ONES_MASC, TEENS_MASC, HUNDREDS) + ' ' + SCALE_PLURAL[2]
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// Cardinal millions + ordinal remainder
|
|
392
|
+
let result
|
|
393
|
+
if (millions === 1) {
|
|
394
|
+
result = SCALE[2]
|
|
395
|
+
} else {
|
|
396
|
+
result = buildScaleSegment(millions, 'ו', ONES_MASC, TEENS_MASC, HUNDREDS) + ' ' + SCALE_PLURAL[2]
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return result + ' ' + integerToOrdinal(remainder)
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Converts a numeric value to Biblical Hebrew ordinal words.
|
|
404
|
+
*
|
|
405
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
406
|
+
* @returns {string} The ordinal in Biblical Hebrew words
|
|
407
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
408
|
+
* @throws {Error} If value is not a positive integer
|
|
409
|
+
*
|
|
410
|
+
* @example
|
|
411
|
+
* toOrdinal(1) // 'ראשון'
|
|
412
|
+
* toOrdinal(21) // 'עשרים וראשון'
|
|
413
|
+
*/
|
|
414
|
+
function toOrdinal (value) {
|
|
415
|
+
const n = parseOrdinalValue(value)
|
|
416
|
+
return integerToOrdinal(n)
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// ============================================================================
|
|
420
|
+
// Currency Functions
|
|
421
|
+
// ============================================================================
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Converts a numeric value to Biblical Hebrew Shekel currency words.
|
|
425
|
+
*
|
|
426
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
427
|
+
* @returns {string} The currency in Biblical Hebrew words
|
|
428
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
429
|
+
* @throws {Error} If value is not a valid number format
|
|
430
|
+
*
|
|
431
|
+
* @example
|
|
432
|
+
* toCurrency(1) // 'שקל אחד'
|
|
433
|
+
* toCurrency(2.50) // 'שניים שקלים חמישים גרות'
|
|
434
|
+
*/
|
|
435
|
+
function toCurrency (value) {
|
|
436
|
+
const { isNegative, dollars, cents } = parseCurrencyValue(value)
|
|
437
|
+
|
|
438
|
+
const parts = []
|
|
439
|
+
|
|
440
|
+
if (isNegative) {
|
|
441
|
+
parts.push(NEGATIVE)
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// Shekels (masculine)
|
|
445
|
+
if (dollars > 0n || cents === 0n) {
|
|
446
|
+
if (dollars === 1n) {
|
|
447
|
+
parts.push(SHEKEL + ' ' + ONES_MASC[1])
|
|
448
|
+
} else if (dollars === 2n) {
|
|
449
|
+
parts.push(ONES_MASC[2] + ' ' + SHEKEL_PLURAL)
|
|
450
|
+
} else {
|
|
451
|
+
const shekelWord = integerToWords(dollars, 'masculine', 'ו')
|
|
452
|
+
parts.push(shekelWord + ' ' + SHEKEL_PLURAL)
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// Gerah (feminine subunit)
|
|
457
|
+
if (cents > 0n) {
|
|
458
|
+
const centNum = Number(cents)
|
|
459
|
+
if (centNum === 1) {
|
|
460
|
+
parts.push(GERAH + ' ' + ONES_FEM[1])
|
|
461
|
+
} else {
|
|
462
|
+
const gerahWord = integerToWords(cents, 'feminine', 'ו')
|
|
463
|
+
parts.push(gerahWord + ' ' + GERAH_PLURAL)
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
return parts.join(' ')
|
|
468
|
+
}
|
|
469
|
+
|
|
296
470
|
// ============================================================================
|
|
297
471
|
// Exports
|
|
298
472
|
// ============================================================================
|
|
299
473
|
|
|
300
|
-
export {
|
|
474
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/he-IL.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Modern Hebrew words.
|
|
3
|
+
*
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @param {Object} [options] - Optional configuration
|
|
6
|
+
* @param {string} [options.andWord='ו'] - Custom conjunction word
|
|
7
|
+
* @returns {string} The number in Modern Hebrew words
|
|
8
|
+
*/
|
|
9
|
+
export function toCardinal(value: number | string | bigint, options?: {
|
|
10
|
+
andWord?: string | undefined;
|
|
11
|
+
}): string;
|
|
12
|
+
/**
|
|
13
|
+
* Converts a numeric value to Hebrew ordinal words.
|
|
14
|
+
*
|
|
15
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
16
|
+
* @returns {string} The ordinal in Hebrew words
|
|
17
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
18
|
+
* @throws {Error} If value is not a positive integer
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* toOrdinal(1) // 'ראשון'
|
|
22
|
+
* toOrdinal(21) // 'עשרים וראשון'
|
|
23
|
+
*/
|
|
24
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
25
|
+
/**
|
|
26
|
+
* Converts a numeric value to Hebrew New Israeli Shekel currency words.
|
|
27
|
+
*
|
|
28
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
29
|
+
* @returns {string} The currency in Hebrew words
|
|
30
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
31
|
+
* @throws {Error} If value is not a valid number format
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* toCurrency(1) // 'שקל אחד'
|
|
35
|
+
* toCurrency(2.50) // 'שניים שקלים חמישים אגורות'
|
|
36
|
+
*/
|
|
37
|
+
export function toCurrency(value: number | string | bigint): string;
|