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/en-BD.js
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* English (Bangladesh) language converter
|
|
3
|
+
*
|
|
4
|
+
* CLDR: en-BD | English as used in Bangladesh
|
|
5
|
+
*
|
|
6
|
+
* Key features:
|
|
7
|
+
* - Indian numbering system (thousand, lakh, crore, arab, kharab)
|
|
8
|
+
* - 3-2-2 grouping pattern (last 3 digits, then groups of 2)
|
|
9
|
+
* - British-style "and" after hundreds
|
|
10
|
+
* - Bangladeshi Taka currency (BDT)
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
14
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
15
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
16
|
+
import { validateOptions } from './utils/validate-options.js'
|
|
17
|
+
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Vocabulary (module-level constants)
|
|
20
|
+
// ============================================================================
|
|
21
|
+
|
|
22
|
+
const ONES = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
|
|
23
|
+
const TEENS = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
|
|
24
|
+
const TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
|
|
25
|
+
|
|
26
|
+
// Indian numbering scales: 10^3, 10^5, 10^7, 10^9, 10^11, 10^13, 10^15, 10^17
|
|
27
|
+
const SCALES = ['thousand', 'lakh', 'crore', 'arab', 'kharab', 'neel', 'padma', 'shankh']
|
|
28
|
+
|
|
29
|
+
const HUNDRED = 'hundred'
|
|
30
|
+
const ZERO = 'zero'
|
|
31
|
+
const NEGATIVE = 'minus'
|
|
32
|
+
const DECIMAL_SEP = 'point'
|
|
33
|
+
|
|
34
|
+
// Ordinal vocabulary
|
|
35
|
+
const ORDINAL_ONES = ['', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth']
|
|
36
|
+
const ORDINAL_TEENS = ['tenth', 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth']
|
|
37
|
+
const ORDINAL_TENS = ['', '', 'twentieth', 'thirtieth', 'fortieth', 'fiftieth', 'sixtieth', 'seventieth', 'eightieth', 'ninetieth']
|
|
38
|
+
|
|
39
|
+
// Currency vocabulary (Bangladeshi Taka)
|
|
40
|
+
const TAKA = 'taka'
|
|
41
|
+
const PAISA = 'paisa'
|
|
42
|
+
const PAISE = 'paise'
|
|
43
|
+
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Segment Building
|
|
46
|
+
// ============================================================================
|
|
47
|
+
|
|
48
|
+
// Reusable result object to avoid allocation per call
|
|
49
|
+
const segmentResult = { word: '', hasHundred: false }
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Builds words for a 0-999 segment (British-style with "and" after hundreds).
|
|
53
|
+
*
|
|
54
|
+
* @param {number} n - Number 0-999
|
|
55
|
+
* @returns {{ word: string, hasHundred: boolean }}
|
|
56
|
+
*/
|
|
57
|
+
function buildSegment (n) {
|
|
58
|
+
if (n === 0) {
|
|
59
|
+
segmentResult.word = ''
|
|
60
|
+
segmentResult.hasHundred = false
|
|
61
|
+
return segmentResult
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const ones = n % 10
|
|
65
|
+
const tens = Math.trunc(n / 10) % 10
|
|
66
|
+
const hundreds = Math.trunc(n / 100)
|
|
67
|
+
|
|
68
|
+
// Build tens-ones part first
|
|
69
|
+
let tensOnes = ''
|
|
70
|
+
if (tens === 1) {
|
|
71
|
+
tensOnes = TEENS[ones]
|
|
72
|
+
} else if (tens >= 2) {
|
|
73
|
+
tensOnes = ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
|
|
74
|
+
} else if (ones > 0) {
|
|
75
|
+
tensOnes = ONES[ones]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Hundreds place (British-style: "and" after hundreds)
|
|
79
|
+
if (hundreds > 0) {
|
|
80
|
+
if (tensOnes) {
|
|
81
|
+
segmentResult.word = ONES[hundreds] + ' ' + HUNDRED + ' and ' + tensOnes
|
|
82
|
+
} else {
|
|
83
|
+
segmentResult.word = ONES[hundreds] + ' ' + HUNDRED
|
|
84
|
+
}
|
|
85
|
+
segmentResult.hasHundred = true
|
|
86
|
+
} else {
|
|
87
|
+
segmentResult.word = tensOnes
|
|
88
|
+
segmentResult.hasHundred = false
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return segmentResult
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Builds words for a 0-99 segment (no hundreds).
|
|
96
|
+
*
|
|
97
|
+
* @param {number} n - Number 0-99
|
|
98
|
+
* @returns {string}
|
|
99
|
+
*/
|
|
100
|
+
function buildSmallSegment (n) {
|
|
101
|
+
if (n === 0) return ''
|
|
102
|
+
|
|
103
|
+
const ones = n % 10
|
|
104
|
+
const tens = Math.trunc(n / 10)
|
|
105
|
+
|
|
106
|
+
if (tens === 1) {
|
|
107
|
+
return TEENS[ones]
|
|
108
|
+
} else if (tens >= 2) {
|
|
109
|
+
return ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
|
|
110
|
+
}
|
|
111
|
+
return ONES[ones]
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Conversion Functions
|
|
116
|
+
// ============================================================================
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Converts a non-negative integer to English words using Indian numbering.
|
|
120
|
+
*
|
|
121
|
+
* Uses BigInt modulo for segment extraction.
|
|
122
|
+
* South Asian 3-2-2 grouping: first 3 digits, then groups of 2.
|
|
123
|
+
*
|
|
124
|
+
* @param {bigint} n - Non-negative integer to convert
|
|
125
|
+
* @returns {string} English words
|
|
126
|
+
*/
|
|
127
|
+
function integerToWords (n) {
|
|
128
|
+
if (n === 0n) return ZERO
|
|
129
|
+
|
|
130
|
+
// Fast path: numbers < 1000
|
|
131
|
+
if (n < 1000n) {
|
|
132
|
+
return buildSegment(Number(n)).word
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Extract segments using BigInt modulo
|
|
136
|
+
// First segment is 3 digits (units), rest are 2 digits (thousands, lakhs, crores, etc.)
|
|
137
|
+
// Segments stored least-significant first
|
|
138
|
+
const segments = []
|
|
139
|
+
|
|
140
|
+
// First segment: last 3 digits
|
|
141
|
+
segments.push(Number(n % 1000n))
|
|
142
|
+
let temp = n / 1000n
|
|
143
|
+
|
|
144
|
+
// Remaining segments: 2 digits each (thousand, lakh, crore, etc.)
|
|
145
|
+
while (temp > 0n) {
|
|
146
|
+
segments.push(Number(temp % 100n))
|
|
147
|
+
temp = temp / 100n
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Build result string (process from most-significant to least)
|
|
151
|
+
const words = []
|
|
152
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
153
|
+
const segment = segments[i]
|
|
154
|
+
if (segment === 0) continue
|
|
155
|
+
|
|
156
|
+
if (i === 0) {
|
|
157
|
+
// First segment (units place) can be 0-999
|
|
158
|
+
const { word, hasHundred } = buildSegment(segment)
|
|
159
|
+
// Add "and" before final segment if previous segments exist and no hundred
|
|
160
|
+
if (words.length > 0 && !hasHundred) {
|
|
161
|
+
words.push('and')
|
|
162
|
+
}
|
|
163
|
+
words.push(word)
|
|
164
|
+
} else {
|
|
165
|
+
// Other segments are 0-99
|
|
166
|
+
words.push(buildSmallSegment(segment))
|
|
167
|
+
// Add scale word
|
|
168
|
+
if (SCALES[i - 1]) {
|
|
169
|
+
words.push(SCALES[i - 1])
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return words.join(' ')
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Converts decimal digits to English words.
|
|
179
|
+
*
|
|
180
|
+
* @param {string} decimalPart - Decimal digits (without the point)
|
|
181
|
+
* @returns {string} English words for decimal part
|
|
182
|
+
*/
|
|
183
|
+
function decimalPartToWords (decimalPart) {
|
|
184
|
+
let result = ''
|
|
185
|
+
|
|
186
|
+
// Handle leading zeros
|
|
187
|
+
let i = 0
|
|
188
|
+
while (i < decimalPart.length && decimalPart[i] === '0') {
|
|
189
|
+
if (result) result += ' '
|
|
190
|
+
result += ZERO
|
|
191
|
+
i++
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Convert remainder as a single number
|
|
195
|
+
const remainder = decimalPart.slice(i)
|
|
196
|
+
if (remainder) {
|
|
197
|
+
if (result) result += ' '
|
|
198
|
+
result += integerToWords(BigInt(remainder))
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return result
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Converts a numeric value to English words using Indian numbering.
|
|
206
|
+
*
|
|
207
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
208
|
+
* @returns {string} The number in English words
|
|
209
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
210
|
+
* @throws {Error} If value is not a valid number format
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* toCardinal(42) // 'forty-two'
|
|
214
|
+
* toCardinal(100000) // 'one lakh'
|
|
215
|
+
* toCardinal(10000000) // 'one crore'
|
|
216
|
+
* toCardinal(1234567) // 'twelve lakh thirty-four thousand five hundred and sixty-seven'
|
|
217
|
+
*/
|
|
218
|
+
function toCardinal (value) {
|
|
219
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
220
|
+
|
|
221
|
+
let result = ''
|
|
222
|
+
|
|
223
|
+
if (isNegative) {
|
|
224
|
+
result = NEGATIVE + ' '
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
result += integerToWords(integerPart)
|
|
228
|
+
|
|
229
|
+
if (decimalPart) {
|
|
230
|
+
result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return result
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// ============================================================================
|
|
237
|
+
// ORDINAL: toOrdinal(value)
|
|
238
|
+
// ============================================================================
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Builds ordinal words for a 0-999 segment (final segment only).
|
|
242
|
+
*
|
|
243
|
+
* @param {number} n - Number 0-999
|
|
244
|
+
* @returns {string} Ordinal words for this segment
|
|
245
|
+
*/
|
|
246
|
+
function buildOrdinalSegment (n) {
|
|
247
|
+
const ones = n % 10
|
|
248
|
+
const tens = Math.trunc(n / 10) % 10
|
|
249
|
+
const hundreds = Math.trunc(n / 100)
|
|
250
|
+
|
|
251
|
+
// Build ordinal for tens-ones portion
|
|
252
|
+
let tensOnesOrdinal = ''
|
|
253
|
+
if (tens === 1) {
|
|
254
|
+
tensOnesOrdinal = ORDINAL_TEENS[ones]
|
|
255
|
+
} else if (tens >= 2) {
|
|
256
|
+
if (ones > 0) {
|
|
257
|
+
tensOnesOrdinal = TENS[tens] + '-' + ORDINAL_ONES[ones]
|
|
258
|
+
} else {
|
|
259
|
+
tensOnesOrdinal = ORDINAL_TENS[tens]
|
|
260
|
+
}
|
|
261
|
+
} else if (ones > 0) {
|
|
262
|
+
tensOnesOrdinal = ORDINAL_ONES[ones]
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Hundreds place
|
|
266
|
+
if (hundreds > 0) {
|
|
267
|
+
if (tensOnesOrdinal) {
|
|
268
|
+
return ONES[hundreds] + ' ' + HUNDRED + ' ' + tensOnesOrdinal
|
|
269
|
+
} else {
|
|
270
|
+
return ONES[hundreds] + ' hundredth'
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return tensOnesOrdinal
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Converts a positive integer to ordinal words using Indian numbering.
|
|
279
|
+
*
|
|
280
|
+
* @param {bigint} n - Positive integer to convert
|
|
281
|
+
* @returns {string} Ordinal English words
|
|
282
|
+
*/
|
|
283
|
+
function integerToOrdinal (n) {
|
|
284
|
+
// Fast path: numbers < 1000
|
|
285
|
+
if (n < 1000n) {
|
|
286
|
+
return buildOrdinalSegment(Number(n))
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Extract segments using BigInt modulo (3-2-2 pattern)
|
|
290
|
+
const segments = []
|
|
291
|
+
|
|
292
|
+
// First segment: last 3 digits
|
|
293
|
+
segments.push(Number(n % 1000n))
|
|
294
|
+
let temp = n / 1000n
|
|
295
|
+
|
|
296
|
+
// Remaining segments: 2 digits each
|
|
297
|
+
while (temp > 0n) {
|
|
298
|
+
segments.push(Number(temp % 100n))
|
|
299
|
+
temp = temp / 100n
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Find the lowest non-zero segment (this gets ordinal treatment)
|
|
303
|
+
let lowestNonZeroIdx = 0
|
|
304
|
+
for (let i = 0; i < segments.length; i++) {
|
|
305
|
+
if (segments[i] !== 0) {
|
|
306
|
+
lowestNonZeroIdx = i
|
|
307
|
+
break
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Build result (most-significant to least)
|
|
312
|
+
const words = []
|
|
313
|
+
|
|
314
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
315
|
+
const segment = segments[i]
|
|
316
|
+
if (segment === 0) continue
|
|
317
|
+
|
|
318
|
+
const isLowestSegment = (i === lowestNonZeroIdx)
|
|
319
|
+
|
|
320
|
+
if (isLowestSegment) {
|
|
321
|
+
// Final non-zero segment gets ordinal treatment
|
|
322
|
+
if (i === 0) {
|
|
323
|
+
// Units position: use ordinal segment
|
|
324
|
+
words.push(buildOrdinalSegment(segment))
|
|
325
|
+
} else {
|
|
326
|
+
// Scale position with no remainder below: "one lakhth"
|
|
327
|
+
words.push(buildSmallSegment(segment))
|
|
328
|
+
words.push(SCALES[i - 1] + 'th')
|
|
329
|
+
}
|
|
330
|
+
} else {
|
|
331
|
+
// Non-final segments are cardinal
|
|
332
|
+
if (i === 0) {
|
|
333
|
+
words.push(buildSegment(segment).word)
|
|
334
|
+
} else {
|
|
335
|
+
words.push(buildSmallSegment(segment))
|
|
336
|
+
words.push(SCALES[i - 1])
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return words.join(' ')
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Converts a numeric value to English ordinal words using Indian numbering.
|
|
346
|
+
*
|
|
347
|
+
* @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
|
|
348
|
+
* @returns {string} The number as ordinal words
|
|
349
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
350
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
351
|
+
*
|
|
352
|
+
* @example
|
|
353
|
+
* toOrdinal(1) // 'first'
|
|
354
|
+
* toOrdinal(100000) // 'one lakhth'
|
|
355
|
+
* toOrdinal(100001) // 'one lakh first'
|
|
356
|
+
*/
|
|
357
|
+
function toOrdinal (value) {
|
|
358
|
+
const integerPart = parseOrdinalValue(value)
|
|
359
|
+
return integerToOrdinal(integerPart)
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// ============================================================================
|
|
363
|
+
// CURRENCY: toCurrency(value, options?)
|
|
364
|
+
// ============================================================================
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Converts a numeric value to Bangladeshi English currency words.
|
|
368
|
+
*
|
|
369
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
370
|
+
* @param {Object} [options] - Optional configuration
|
|
371
|
+
* @param {boolean} [options.and=true] - Use "and" between taka and paise
|
|
372
|
+
* @returns {string} The amount in Bangladeshi English currency words
|
|
373
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
374
|
+
* @throws {Error} If value is not a valid number format
|
|
375
|
+
*
|
|
376
|
+
* @example
|
|
377
|
+
* toCurrency(42.50) // 'forty-two taka and fifty paise'
|
|
378
|
+
* toCurrency(100000) // 'one lakh taka'
|
|
379
|
+
* toCurrency(1) // 'one taka'
|
|
380
|
+
* toCurrency(0.50) // 'fifty paise'
|
|
381
|
+
* toCurrency(42.50, { and: false }) // 'forty-two taka fifty paise'
|
|
382
|
+
*/
|
|
383
|
+
function toCurrency (value, options) {
|
|
384
|
+
options = validateOptions(options)
|
|
385
|
+
const { isNegative, dollars: taka, cents: paise } = parseCurrencyValue(value)
|
|
386
|
+
const { and: useAnd = true } = options
|
|
387
|
+
|
|
388
|
+
// Build result
|
|
389
|
+
let result = ''
|
|
390
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
391
|
+
|
|
392
|
+
// Taka part (show if non-zero, or if no paise)
|
|
393
|
+
// Note: "taka" is used for both singular and plural
|
|
394
|
+
if (taka > 0n || paise === 0n) {
|
|
395
|
+
result += integerToWords(taka)
|
|
396
|
+
result += ' ' + TAKA
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Paise part
|
|
400
|
+
if (paise > 0n) {
|
|
401
|
+
if (taka > 0n) {
|
|
402
|
+
result += useAnd ? ' and ' : ' '
|
|
403
|
+
}
|
|
404
|
+
result += integerToWords(paise)
|
|
405
|
+
result += ' ' + (paise === 1n ? PAISA : PAISE)
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
return result
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// ============================================================================
|
|
412
|
+
// Public API
|
|
413
|
+
// ============================================================================
|
|
414
|
+
|
|
415
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/en-CA.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Canadian English 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] - Optional configuration
|
|
9
|
+
* @param {boolean} [options.hundredPairing=false] - Use hundred-pairing for 1100-9999 (e.g., "fifteen hundred" instead of "one thousand five hundred")
|
|
10
|
+
* @param {boolean} [options.and=true] - Use "and" after hundreds and before final small numbers (default: true, Canadian/British style)
|
|
11
|
+
* @returns {string} The number in Canadian English words
|
|
12
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
13
|
+
* @throws {Error} If value is not a valid number format
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* toCardinal(42) // 'forty-two'
|
|
17
|
+
* toCardinal(101) // 'one hundred and one'
|
|
18
|
+
* toCardinal(101, { and: false }) // 'one hundred one'
|
|
19
|
+
* toCardinal(1500) // 'one thousand five hundred'
|
|
20
|
+
* toCardinal(1500, { hundredPairing: true }) // 'fifteen hundred'
|
|
21
|
+
*/
|
|
22
|
+
export function toCardinal(value: number | string | bigint, options?: {
|
|
23
|
+
hundredPairing?: boolean | undefined;
|
|
24
|
+
and?: boolean | undefined;
|
|
25
|
+
}): string;
|
|
26
|
+
/**
|
|
27
|
+
* Converts a numeric value to Canadian English ordinal words.
|
|
28
|
+
*
|
|
29
|
+
* @param {number | string | bigint} value - The numeric value to convert (must be a positive integer)
|
|
30
|
+
* @returns {string} The number as ordinal words (e.g., "first", "forty-second")
|
|
31
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
32
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* toOrdinal(1) // 'first'
|
|
36
|
+
* toOrdinal(2) // 'second'
|
|
37
|
+
* toOrdinal(3) // 'third'
|
|
38
|
+
* toOrdinal(21) // 'twenty-first'
|
|
39
|
+
* toOrdinal(42) // 'forty-second'
|
|
40
|
+
* toOrdinal(100) // 'one hundredth'
|
|
41
|
+
* toOrdinal(101) // 'one hundred first'
|
|
42
|
+
* toOrdinal(1000) // 'one thousandth'
|
|
43
|
+
*/
|
|
44
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
45
|
+
/**
|
|
46
|
+
* Converts a numeric value to Canadian English currency words.
|
|
47
|
+
*
|
|
48
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
49
|
+
* @param {Object} [options] - Optional configuration
|
|
50
|
+
* @param {boolean} [options.and=true] - Use "and" between dollars and cents (e.g., "one dollar and fifty cents")
|
|
51
|
+
* @returns {string} The amount in Canadian English currency words
|
|
52
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
53
|
+
* @throws {Error} If value is not a valid number format
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* toCurrency(42.50) // 'forty-two dollars and fifty cents'
|
|
57
|
+
* toCurrency(1) // 'one dollar'
|
|
58
|
+
* toCurrency(0.99) // 'ninety-nine cents'
|
|
59
|
+
* toCurrency(42.50, { and: false }) // 'forty-two dollars fifty cents'
|
|
60
|
+
*/
|
|
61
|
+
export function toCurrency(value: number | string | bigint, options?: {
|
|
62
|
+
and?: boolean | undefined;
|
|
63
|
+
}): string;
|