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/lib/languages/sv.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts a numeric value to Swedish words.
|
|
3
|
-
*
|
|
4
|
-
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
-
* @returns {string} The number in Swedish words
|
|
6
|
-
* @throws {TypeError} If value is not a valid numeric type
|
|
7
|
-
* @throws {Error} If value is not a valid number format
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* toWords(42) // 'fyrtio-två'
|
|
11
|
-
* toWords(101) // 'hundra och ett'
|
|
12
|
-
* toWords(1000000) // 'en miljon'
|
|
13
|
-
*/
|
|
14
|
-
export function toWords(value: number | string | bigint): string;
|
package/lib/languages/sw.d.ts
DELETED
package/lib/languages/ta.d.ts
DELETED
package/lib/languages/te.d.ts
DELETED
package/lib/languages/th.d.ts
DELETED
package/lib/languages/tr.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts a numeric value to Turkish words.
|
|
3
|
-
*
|
|
4
|
-
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
-
* @param {Object} [options] - Conversion options
|
|
6
|
-
* @param {boolean} [options.dropSpaces=false] - Remove spaces for compound form
|
|
7
|
-
* @returns {string} The number in Turkish words
|
|
8
|
-
* @throws {TypeError} If value is not a valid numeric type
|
|
9
|
-
* @throws {Error} If value is not a valid number format
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* toWords(21) // 'yirmi bir'
|
|
13
|
-
* toWords(21, { dropSpaces: true }) // 'yirmibir'
|
|
14
|
-
* toWords(1000) // 'bin'
|
|
15
|
-
*/
|
|
16
|
-
export function toWords(value: number | string | bigint, options?: {
|
|
17
|
-
dropSpaces?: boolean | undefined;
|
|
18
|
-
}): string;
|
package/lib/languages/tr.js
DELETED
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Turkish language converter - Functional Implementation
|
|
3
|
-
*
|
|
4
|
-
* A performance-optimized number-to-words converter using precomputed lookup tables.
|
|
5
|
-
*
|
|
6
|
-
* Key features:
|
|
7
|
-
* - Omits 'bir' (one) before hundreds and thousands
|
|
8
|
-
* - Optional dropSpaces for compound form
|
|
9
|
-
* - Short scale naming
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { parseNumericValue } from '../utils/parse-numeric.js'
|
|
13
|
-
import { validateOptions } from '../utils/validate-options.js'
|
|
14
|
-
|
|
15
|
-
// ============================================================================
|
|
16
|
-
// Vocabulary (module-level constants)
|
|
17
|
-
// ============================================================================
|
|
18
|
-
|
|
19
|
-
const ONES = ['', 'bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', 'dokuz']
|
|
20
|
-
|
|
21
|
-
const TEENS = ['on', 'on bir', 'on iki', 'on üç', 'on dört', 'on beş', 'on altı', 'on yedi', 'on sekiz', 'on dokuz']
|
|
22
|
-
const TENS = ['', '', 'yirmi', 'otuz', 'kırk', 'elli', 'altmış', 'yetmiş', 'seksen', 'doksan']
|
|
23
|
-
|
|
24
|
-
const HUNDRED = 'yüz'
|
|
25
|
-
const THOUSAND = 'bin'
|
|
26
|
-
|
|
27
|
-
const ZERO = 'sıfır'
|
|
28
|
-
const NEGATIVE = 'eksi'
|
|
29
|
-
const DECIMAL_SEP = 'virgül'
|
|
30
|
-
|
|
31
|
-
// Short scale
|
|
32
|
-
const SCALES = ['milyon', 'milyar', 'trilyon', 'katrilyon', 'kentilyon']
|
|
33
|
-
|
|
34
|
-
// ============================================================================
|
|
35
|
-
// Precomputed Lookup Tables (built once at module load)
|
|
36
|
-
// ============================================================================
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Builds segment word for 0-999.
|
|
40
|
-
* Omits "bir" before "yüz" (hundred).
|
|
41
|
-
*/
|
|
42
|
-
function buildSegment (n, separator = ' ') {
|
|
43
|
-
if (n === 0) return ''
|
|
44
|
-
|
|
45
|
-
const ones = n % 10
|
|
46
|
-
const tens = Math.floor(n / 10) % 10
|
|
47
|
-
const hundreds = Math.floor(n / 100)
|
|
48
|
-
|
|
49
|
-
const parts = []
|
|
50
|
-
|
|
51
|
-
// Hundreds - omit "bir" before yüz
|
|
52
|
-
if (hundreds > 0) {
|
|
53
|
-
if (hundreds === 1) {
|
|
54
|
-
parts.push(HUNDRED)
|
|
55
|
-
} else {
|
|
56
|
-
parts.push(ONES[hundreds] + separator + HUNDRED)
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Tens and ones
|
|
61
|
-
const tensOnes = n % 100
|
|
62
|
-
|
|
63
|
-
if (tensOnes === 0) {
|
|
64
|
-
// Just hundreds
|
|
65
|
-
} else if (tensOnes < 10) {
|
|
66
|
-
parts.push(ONES[ones])
|
|
67
|
-
} else if (tensOnes < 20) {
|
|
68
|
-
parts.push(TEENS[ones].replace(' ', separator))
|
|
69
|
-
} else if (ones === 0) {
|
|
70
|
-
parts.push(TENS[tens])
|
|
71
|
-
} else {
|
|
72
|
-
parts.push(TENS[tens] + separator + ONES[ones])
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return parts.join(separator)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Precompute all 1000 segment words (0-999) with space separator
|
|
79
|
-
const SEGMENTS = new Array(1000)
|
|
80
|
-
const SEGMENTS_NO_SPACE = new Array(1000)
|
|
81
|
-
|
|
82
|
-
for (let i = 0; i < 1000; i++) {
|
|
83
|
-
SEGMENTS[i] = buildSegment(i, ' ')
|
|
84
|
-
SEGMENTS_NO_SPACE[i] = buildSegment(i, '')
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// ============================================================================
|
|
88
|
-
// Conversion Functions
|
|
89
|
-
// ============================================================================
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Converts a non-negative integer to Turkish words.
|
|
93
|
-
*
|
|
94
|
-
* @param {bigint} n - Non-negative integer to convert
|
|
95
|
-
* @param {Object} options - Conversion options
|
|
96
|
-
* @returns {string} Turkish words
|
|
97
|
-
*/
|
|
98
|
-
function integerToWords (n, options = {}) {
|
|
99
|
-
if (n === 0n) return ZERO
|
|
100
|
-
|
|
101
|
-
const sep = options.dropSpaces ? '' : ' '
|
|
102
|
-
const segments = options.dropSpaces ? SEGMENTS_NO_SPACE : SEGMENTS
|
|
103
|
-
|
|
104
|
-
// Fast path: numbers < 1000 (direct lookup)
|
|
105
|
-
if (n < 1000n) {
|
|
106
|
-
return segments[Number(n)]
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Fast path: numbers < 1,000,000 (thousands)
|
|
110
|
-
if (n < 1_000_000n) {
|
|
111
|
-
const thousands = Number(n / 1000n)
|
|
112
|
-
const remainder = Number(n % 1000n)
|
|
113
|
-
|
|
114
|
-
// Omit "bir" before bin (thousand)
|
|
115
|
-
let result
|
|
116
|
-
if (thousands === 1) {
|
|
117
|
-
result = THOUSAND
|
|
118
|
-
} else {
|
|
119
|
-
result = segments[thousands] + sep + THOUSAND
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (remainder > 0) {
|
|
123
|
-
result += sep + segments[remainder]
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return result
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// For numbers >= 1,000,000, use scale decomposition
|
|
130
|
-
return buildLargeNumberWords(n, options)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Builds words for numbers >= 1,000,000.
|
|
135
|
-
*
|
|
136
|
-
* @param {bigint} n - Number >= 1,000,000
|
|
137
|
-
* @param {Object} options - Conversion options
|
|
138
|
-
* @returns {string} Turkish words
|
|
139
|
-
*/
|
|
140
|
-
function buildLargeNumberWords (n, options) {
|
|
141
|
-
const sep = options.dropSpaces ? '' : ' '
|
|
142
|
-
const segmentsArr = options.dropSpaces ? SEGMENTS_NO_SPACE : SEGMENTS
|
|
143
|
-
|
|
144
|
-
const numStr = n.toString()
|
|
145
|
-
const len = numStr.length
|
|
146
|
-
|
|
147
|
-
// Build segments of 3 digits from right to left
|
|
148
|
-
const segments = []
|
|
149
|
-
const segmentSize = 3
|
|
150
|
-
|
|
151
|
-
const remainderLen = len % segmentSize
|
|
152
|
-
let pos = 0
|
|
153
|
-
if (remainderLen > 0) {
|
|
154
|
-
segments.push(Number(numStr.slice(0, remainderLen)))
|
|
155
|
-
pos = remainderLen
|
|
156
|
-
}
|
|
157
|
-
while (pos < len) {
|
|
158
|
-
segments.push(Number(numStr.slice(pos, pos + segmentSize)))
|
|
159
|
-
pos += segmentSize
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Convert segments to words
|
|
163
|
-
const parts = []
|
|
164
|
-
let scaleIndex = segments.length - 1
|
|
165
|
-
|
|
166
|
-
for (let i = 0; i < segments.length; i++) {
|
|
167
|
-
const segment = segments[i]
|
|
168
|
-
|
|
169
|
-
if (segment !== 0) {
|
|
170
|
-
const segmentWord = segmentsArr[segment]
|
|
171
|
-
|
|
172
|
-
if (scaleIndex === 0) {
|
|
173
|
-
// Units segment
|
|
174
|
-
parts.push(segmentWord)
|
|
175
|
-
} else if (scaleIndex === 1) {
|
|
176
|
-
// Thousands - omit "bir" before bin
|
|
177
|
-
if (segment === 1) {
|
|
178
|
-
parts.push(THOUSAND)
|
|
179
|
-
} else {
|
|
180
|
-
parts.push(segmentWord + sep + THOUSAND)
|
|
181
|
-
}
|
|
182
|
-
} else {
|
|
183
|
-
// Millions+ - "bir" is kept before scale words
|
|
184
|
-
const scaleWord = SCALES[scaleIndex - 2]
|
|
185
|
-
parts.push(segmentWord + sep + scaleWord)
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
scaleIndex--
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
return parts.join(sep)
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Converts decimal digits to Turkish words.
|
|
197
|
-
*
|
|
198
|
-
* @param {string} decimalPart - Decimal digits (without the point)
|
|
199
|
-
* @param {Object} options - Conversion options
|
|
200
|
-
* @returns {string} Turkish words for decimal part
|
|
201
|
-
*/
|
|
202
|
-
function decimalPartToWords (decimalPart, options) {
|
|
203
|
-
const sep = options.dropSpaces ? '' : ' '
|
|
204
|
-
let result = ''
|
|
205
|
-
|
|
206
|
-
// Handle leading zeros
|
|
207
|
-
let i = 0
|
|
208
|
-
while (i < decimalPart.length && decimalPart[i] === '0') {
|
|
209
|
-
if (result) result += sep
|
|
210
|
-
result += ZERO
|
|
211
|
-
i++
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// Convert remainder as a single number
|
|
215
|
-
const remainder = decimalPart.slice(i)
|
|
216
|
-
if (remainder) {
|
|
217
|
-
if (result) result += sep
|
|
218
|
-
result += integerToWords(BigInt(remainder), options)
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return result
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Converts a numeric value to Turkish words.
|
|
226
|
-
*
|
|
227
|
-
* @param {number | string | bigint} value - The numeric value to convert
|
|
228
|
-
* @param {Object} [options] - Conversion options
|
|
229
|
-
* @param {boolean} [options.dropSpaces=false] - Remove spaces for compound form
|
|
230
|
-
* @returns {string} The number in Turkish words
|
|
231
|
-
* @throws {TypeError} If value is not a valid numeric type
|
|
232
|
-
* @throws {Error} If value is not a valid number format
|
|
233
|
-
*
|
|
234
|
-
* @example
|
|
235
|
-
* toWords(21) // 'yirmi bir'
|
|
236
|
-
* toWords(21, { dropSpaces: true }) // 'yirmibir'
|
|
237
|
-
* toWords(1000) // 'bin'
|
|
238
|
-
*/
|
|
239
|
-
function toWords (value, options) {
|
|
240
|
-
options = validateOptions(options)
|
|
241
|
-
const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
|
|
242
|
-
|
|
243
|
-
const sep = options.dropSpaces ? '' : ' '
|
|
244
|
-
let result = ''
|
|
245
|
-
|
|
246
|
-
if (isNegative) {
|
|
247
|
-
result = NEGATIVE + sep
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
result += integerToWords(integerPart, options)
|
|
251
|
-
|
|
252
|
-
if (decimalPart) {
|
|
253
|
-
result += sep + DECIMAL_SEP + sep + decimalPartToWords(decimalPart, options)
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
return result
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// ============================================================================
|
|
260
|
-
// Public API
|
|
261
|
-
// ============================================================================
|
|
262
|
-
|
|
263
|
-
export { toWords }
|
package/lib/languages/uk.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts a numeric value to Ukrainian 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
|
-
* @returns {string} The number in Ukrainian words
|
|
8
|
-
*/
|
|
9
|
-
export function toWords(value: number | string | bigint, options?: {
|
|
10
|
-
gender?: "masculine" | "feminine" | undefined;
|
|
11
|
-
}): string;
|
package/lib/languages/uk.js
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ukrainian language converter - Functional Implementation
|
|
3
|
-
*
|
|
4
|
-
* Self-contained converter using shared Slavic utilities.
|
|
5
|
-
*
|
|
6
|
-
* Key features:
|
|
7
|
-
* - Three-form pluralization (one/few/many)
|
|
8
|
-
* - Gender: thousands are feminine, millions+ are masculine
|
|
9
|
-
* - Irregular hundreds
|
|
10
|
-
* - Long scale naming
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { parseNumericValue } from '../utils/parse-numeric.js'
|
|
14
|
-
import { validateOptions } from '../utils/validate-options.js'
|
|
15
|
-
|
|
16
|
-
// ============================================================================
|
|
17
|
-
// Slavic Utilities (inlined for performance)
|
|
18
|
-
// ============================================================================
|
|
19
|
-
|
|
20
|
-
function pluralize (n, forms) {
|
|
21
|
-
const num = typeof n === 'bigint' ? Number(n) : n
|
|
22
|
-
const lastDigit = num % 10
|
|
23
|
-
const lastTwoDigits = num % 100
|
|
24
|
-
|
|
25
|
-
if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
|
|
26
|
-
return forms[2]
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (lastDigit === 1) return forms[0]
|
|
30
|
-
if (lastDigit >= 2 && lastDigit <= 4) return forms[1]
|
|
31
|
-
return forms[2]
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function buildAllSegments (onesMasc, onesFem, teens, tens, hundreds) {
|
|
35
|
-
const masc = new Array(1000)
|
|
36
|
-
const fem = new Array(1000)
|
|
37
|
-
|
|
38
|
-
for (let i = 0; i < 1000; i++) {
|
|
39
|
-
masc[i] = buildSegment(i, onesMasc, teens, tens, hundreds)
|
|
40
|
-
fem[i] = buildSegment(i, onesFem, teens, tens, hundreds)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return { masc, fem }
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function buildSegment (n, ones, teens, tens, hundreds) {
|
|
47
|
-
if (n === 0) return ''
|
|
48
|
-
|
|
49
|
-
const onesDigit = n % 10
|
|
50
|
-
const tensDigit = Math.floor(n / 10) % 10
|
|
51
|
-
const hundredsDigit = Math.floor(n / 100)
|
|
52
|
-
|
|
53
|
-
const parts = []
|
|
54
|
-
|
|
55
|
-
if (hundredsDigit > 0) {
|
|
56
|
-
parts.push(hundreds[hundredsDigit])
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (tensDigit > 1) {
|
|
60
|
-
parts.push(tens[tensDigit])
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (tensDigit === 1) {
|
|
64
|
-
parts.push(teens[onesDigit])
|
|
65
|
-
} else if (onesDigit > 0) {
|
|
66
|
-
parts.push(ones[onesDigit])
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return parts.join(' ')
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// ============================================================================
|
|
73
|
-
// Vocabulary
|
|
74
|
-
// ============================================================================
|
|
75
|
-
|
|
76
|
-
const ONES_MASC = ['', 'один', 'два', 'три', 'чотири', 'п\'ять', 'шiсть', 'сiм', 'вiсiм', 'дев\'ять']
|
|
77
|
-
const ONES_FEM = ['', 'одна', 'двi', 'три', 'чотири', 'п\'ять', 'шiсть', 'сiм', 'вiсiм', 'дев\'ять']
|
|
78
|
-
|
|
79
|
-
const TEENS = ['десять', 'одинадцять', 'дванадцять', 'тринадцять', 'чотирнадцять', 'п\'ятнадцять', 'шiстнадцять', 'сiмнадцять', 'вiсiмнадцять', 'дев\'ятнадцять']
|
|
80
|
-
const TENS = ['', '', 'двадцять', 'тридцять', 'сорок', 'п\'ятдесят', 'шiстдесят', 'сiмдесят', 'вiсiмдесят', 'дев\'яносто']
|
|
81
|
-
|
|
82
|
-
// Irregular hundreds
|
|
83
|
-
const HUNDREDS = ['', 'сто', 'двiстi', 'триста', 'чотириста', 'п\'ятсот', 'шiстсот', 'сiмсот', 'вiсiмсот', 'дев\'ятсот']
|
|
84
|
-
|
|
85
|
-
const ZERO = 'нуль'
|
|
86
|
-
const NEGATIVE = 'мiнус'
|
|
87
|
-
const DECIMAL_SEP = 'кома'
|
|
88
|
-
|
|
89
|
-
// Scale words: [singular, few, many]
|
|
90
|
-
// Thousands (index 0) are feminine, rest are masculine
|
|
91
|
-
const SCALE_FORMS = [
|
|
92
|
-
['тисяча', 'тисячi', 'тисяч'],
|
|
93
|
-
['мiльйон', 'мiльйони', 'мiльйонiв'],
|
|
94
|
-
['мiльярд', 'мiльярди', 'мiльярдiв'],
|
|
95
|
-
['трильйон', 'трильйони', 'трильйонiв'],
|
|
96
|
-
['квадрильйон', 'квадрильйони', 'квадрильйонiв'],
|
|
97
|
-
['квiнтильйон', 'квiнтильйони', 'квiнтильйонiв'],
|
|
98
|
-
['секстильйон', 'секстильйони', 'секстильйонiв'],
|
|
99
|
-
['септильйон', 'септильйони', 'септильйонiв'],
|
|
100
|
-
['октильйон', 'октильйони', 'октильйонiв']
|
|
101
|
-
]
|
|
102
|
-
|
|
103
|
-
// ============================================================================
|
|
104
|
-
// Precomputed Lookup Tables
|
|
105
|
-
// ============================================================================
|
|
106
|
-
|
|
107
|
-
const { masc: SEGMENTS_MASC, fem: SEGMENTS_FEM } = buildAllSegments(ONES_MASC, ONES_FEM, TEENS, TENS, HUNDREDS)
|
|
108
|
-
|
|
109
|
-
// ============================================================================
|
|
110
|
-
// Conversion Functions
|
|
111
|
-
// ============================================================================
|
|
112
|
-
|
|
113
|
-
function integerToWords (n, options = {}) {
|
|
114
|
-
if (n === 0n) return ZERO
|
|
115
|
-
|
|
116
|
-
if (n < 1000n) {
|
|
117
|
-
const segments = options.gender === 'feminine' ? SEGMENTS_FEM : SEGMENTS_MASC
|
|
118
|
-
return segments[Number(n)]
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return buildLargeNumberWords(n, options)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function buildLargeNumberWords (n, options) {
|
|
125
|
-
const numStr = n.toString()
|
|
126
|
-
const len = numStr.length
|
|
127
|
-
|
|
128
|
-
const segments = []
|
|
129
|
-
const segmentSize = 3
|
|
130
|
-
|
|
131
|
-
const remainderLen = len % segmentSize
|
|
132
|
-
let pos = 0
|
|
133
|
-
if (remainderLen > 0) {
|
|
134
|
-
segments.push(Number(numStr.slice(0, remainderLen)))
|
|
135
|
-
pos = remainderLen
|
|
136
|
-
}
|
|
137
|
-
while (pos < len) {
|
|
138
|
-
segments.push(Number(numStr.slice(pos, pos + segmentSize)))
|
|
139
|
-
pos += segmentSize
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const parts = []
|
|
143
|
-
let scaleIndex = segments.length - 1
|
|
144
|
-
|
|
145
|
-
for (let i = 0; i < segments.length; i++) {
|
|
146
|
-
const segment = segments[i]
|
|
147
|
-
|
|
148
|
-
if (segment !== 0) {
|
|
149
|
-
if (scaleIndex === 0) {
|
|
150
|
-
const segmentWords = options.gender === 'feminine' ? SEGMENTS_FEM : SEGMENTS_MASC
|
|
151
|
-
parts.push(segmentWords[segment])
|
|
152
|
-
} else {
|
|
153
|
-
const scaleForms = SCALE_FORMS[scaleIndex - 1]
|
|
154
|
-
const scaleWord = pluralize(segment, scaleForms)
|
|
155
|
-
// Thousands (scaleIndex=1) are feminine, others masculine
|
|
156
|
-
const isFeminine = scaleIndex === 1
|
|
157
|
-
const segmentWords = isFeminine ? SEGMENTS_FEM : SEGMENTS_MASC
|
|
158
|
-
parts.push(segmentWords[segment] + ' ' + scaleWord)
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
scaleIndex--
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
return parts.join(' ')
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function decimalPartToWords (decimalPart, options) {
|
|
169
|
-
let result = ''
|
|
170
|
-
let i = 0
|
|
171
|
-
|
|
172
|
-
while (i < decimalPart.length && decimalPart[i] === '0') {
|
|
173
|
-
if (result) result += ' '
|
|
174
|
-
result += ZERO
|
|
175
|
-
i++
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const remainder = decimalPart.slice(i)
|
|
179
|
-
if (remainder) {
|
|
180
|
-
if (result) result += ' '
|
|
181
|
-
result += integerToWords(BigInt(remainder), options)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return result
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Converts a numeric value to Ukrainian words.
|
|
189
|
-
*
|
|
190
|
-
* @param {number | string | bigint} value - The numeric value to convert
|
|
191
|
-
* @param {Object} [options] - Optional configuration
|
|
192
|
-
* @param {('masculine'|'feminine')} [options.gender='masculine'] - Grammatical gender
|
|
193
|
-
* @returns {string} The number in Ukrainian words
|
|
194
|
-
*/
|
|
195
|
-
function toWords (value, options) {
|
|
196
|
-
options = validateOptions(options)
|
|
197
|
-
const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
|
|
198
|
-
|
|
199
|
-
let result = ''
|
|
200
|
-
|
|
201
|
-
if (isNegative) {
|
|
202
|
-
result = NEGATIVE + ' '
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
result += integerToWords(integerPart, options)
|
|
206
|
-
|
|
207
|
-
if (decimalPart) {
|
|
208
|
-
result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart, options)
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
return result
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// ============================================================================
|
|
215
|
-
// Exports
|
|
216
|
-
// ============================================================================
|
|
217
|
-
|
|
218
|
-
export { toWords }
|
package/lib/languages/ur.d.ts
DELETED