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-SG.js
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Singaporean English language converter
|
|
3
|
+
*
|
|
4
|
+
* CLDR: en-SG | English as used in Singapore
|
|
5
|
+
*
|
|
6
|
+
* Exports:
|
|
7
|
+
* - toCardinal(value) - Cardinal numbers: 42 → "forty-two"
|
|
8
|
+
* - toOrdinal(value) - Ordinal numbers: 42 → "forty-second"
|
|
9
|
+
* - toCurrency(value, options?) - Currency: 42.50 → "forty-two dollars and fifty cents"
|
|
10
|
+
*
|
|
11
|
+
* Singaporean English conventions:
|
|
12
|
+
* - Follows British English style
|
|
13
|
+
* - "and" after hundreds: "one hundred and twenty-three"
|
|
14
|
+
* - "and" before final segment: "one million and one"
|
|
15
|
+
* - Hyphenated tens-ones: "twenty-one", "forty-two"
|
|
16
|
+
* - Western numbering system (short scale: billion = 10^9)
|
|
17
|
+
* - Currency: Singapore Dollar (SGD) - dollar/dollars, cent/cents
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
21
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
22
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
23
|
+
import { validateOptions } from './utils/validate-options.js'
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Vocabulary (module-level constants)
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
const ONES = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
|
|
30
|
+
const TEENS = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
|
|
31
|
+
const TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
|
|
32
|
+
|
|
33
|
+
const SCALES = [
|
|
34
|
+
'thousand', 'million', 'billion', 'trillion', 'quadrillion',
|
|
35
|
+
'quintillion', 'sextillion', 'septillion', 'octillion', 'nonillion',
|
|
36
|
+
'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quattuordecillion',
|
|
37
|
+
'quindecillion', 'sexdecillion', 'septendecillion', 'octodecillion', 'novemdecillion',
|
|
38
|
+
'vigintillion'
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
const HUNDRED = 'hundred'
|
|
42
|
+
const ZERO = 'zero'
|
|
43
|
+
const NEGATIVE = 'minus'
|
|
44
|
+
const DECIMAL_SEP = 'point'
|
|
45
|
+
|
|
46
|
+
// Ordinal vocabulary
|
|
47
|
+
const ORDINAL_ONES = ['', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth']
|
|
48
|
+
const ORDINAL_TEENS = ['tenth', 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth']
|
|
49
|
+
const ORDINAL_TENS = ['', '', 'twentieth', 'thirtieth', 'fortieth', 'fiftieth', 'sixtieth', 'seventieth', 'eightieth', 'ninetieth']
|
|
50
|
+
|
|
51
|
+
// Currency vocabulary (Singapore Dollar)
|
|
52
|
+
const DOLLAR = 'dollar'
|
|
53
|
+
const DOLLARS = 'dollars'
|
|
54
|
+
const CENT = 'cent'
|
|
55
|
+
const CENTS = 'cents'
|
|
56
|
+
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// Segment Building
|
|
59
|
+
// ============================================================================
|
|
60
|
+
|
|
61
|
+
const segmentResult = { word: '', hasHundred: false }
|
|
62
|
+
|
|
63
|
+
function buildSegment (n) {
|
|
64
|
+
if (n === 0) {
|
|
65
|
+
segmentResult.word = ''
|
|
66
|
+
segmentResult.hasHundred = false
|
|
67
|
+
return segmentResult
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const ones = n % 10
|
|
71
|
+
const tens = Math.trunc(n / 10) % 10
|
|
72
|
+
const hundreds = Math.trunc(n / 100)
|
|
73
|
+
|
|
74
|
+
let tensOnes = ''
|
|
75
|
+
if (tens === 1) {
|
|
76
|
+
tensOnes = TEENS[ones]
|
|
77
|
+
} else if (tens >= 2) {
|
|
78
|
+
tensOnes = ones > 0 ? TENS[tens] + '-' + ONES[ones] : TENS[tens]
|
|
79
|
+
} else if (ones > 0) {
|
|
80
|
+
tensOnes = ONES[ones]
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (hundreds > 0) {
|
|
84
|
+
if (tensOnes) {
|
|
85
|
+
segmentResult.word = ONES[hundreds] + ' ' + HUNDRED + ' and ' + tensOnes
|
|
86
|
+
} else {
|
|
87
|
+
segmentResult.word = ONES[hundreds] + ' ' + HUNDRED
|
|
88
|
+
}
|
|
89
|
+
segmentResult.hasHundred = true
|
|
90
|
+
} else {
|
|
91
|
+
segmentResult.word = tensOnes
|
|
92
|
+
segmentResult.hasHundred = false
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return segmentResult
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Conversion Functions
|
|
100
|
+
// ============================================================================
|
|
101
|
+
|
|
102
|
+
function integerToWords (n) {
|
|
103
|
+
if (n === 0n) return ZERO
|
|
104
|
+
|
|
105
|
+
if (n < 1000n) {
|
|
106
|
+
return buildSegment(Number(n)).word
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (n < 1_000_000n) {
|
|
110
|
+
const thousands = Number(n / 1000n)
|
|
111
|
+
const remainder = Number(n % 1000n)
|
|
112
|
+
|
|
113
|
+
const { word: thousandsWord } = buildSegment(thousands)
|
|
114
|
+
let result = thousandsWord + ' ' + SCALES[0]
|
|
115
|
+
|
|
116
|
+
if (remainder > 0) {
|
|
117
|
+
const { word: remainderWord, hasHundred } = buildSegment(remainder)
|
|
118
|
+
result += hasHundred ? ' ' + remainderWord : ' and ' + remainderWord
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return result
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return buildLargeNumberWords(n)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function buildLargeNumberWords (n) {
|
|
128
|
+
const segments = []
|
|
129
|
+
let temp = n
|
|
130
|
+
while (temp > 0n) {
|
|
131
|
+
segments.push(Number(temp % 1000n))
|
|
132
|
+
temp = temp / 1000n
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
let firstNonZeroIdx = -1
|
|
136
|
+
for (let i = 0; i < segments.length; i++) {
|
|
137
|
+
if (segments[i] !== 0) {
|
|
138
|
+
firstNonZeroIdx = i
|
|
139
|
+
break
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
let result = ''
|
|
144
|
+
let prevWasScale = false
|
|
145
|
+
|
|
146
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
147
|
+
const segment = segments[i]
|
|
148
|
+
if (segment === 0) continue
|
|
149
|
+
|
|
150
|
+
const { word, hasHundred } = buildSegment(segment)
|
|
151
|
+
const isLastSegment = (i === firstNonZeroIdx)
|
|
152
|
+
|
|
153
|
+
if (result && isLastSegment && prevWasScale && !hasHundred) {
|
|
154
|
+
result += ' and'
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (result) result += ' '
|
|
158
|
+
result += word
|
|
159
|
+
|
|
160
|
+
if (i > 0) {
|
|
161
|
+
result += ' ' + SCALES[i - 1]
|
|
162
|
+
prevWasScale = true
|
|
163
|
+
} else {
|
|
164
|
+
prevWasScale = false
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return result
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function decimalPartToWords (decimalPart) {
|
|
172
|
+
let result = ''
|
|
173
|
+
|
|
174
|
+
let i = 0
|
|
175
|
+
while (i < decimalPart.length && decimalPart[i] === '0') {
|
|
176
|
+
if (result) result += ' '
|
|
177
|
+
result += ZERO
|
|
178
|
+
i++
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const remainder = decimalPart.slice(i)
|
|
182
|
+
if (remainder) {
|
|
183
|
+
if (result) result += ' '
|
|
184
|
+
result += integerToWords(BigInt(remainder))
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return result
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Converts a numeric value to Singaporean English words.
|
|
192
|
+
*
|
|
193
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
194
|
+
* @returns {string} The number in English words
|
|
195
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
196
|
+
* @throws {Error} If value is not a valid number format
|
|
197
|
+
*/
|
|
198
|
+
function toCardinal (value) {
|
|
199
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
200
|
+
|
|
201
|
+
let result = ''
|
|
202
|
+
|
|
203
|
+
if (isNegative) {
|
|
204
|
+
result = NEGATIVE + ' '
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
result += integerToWords(integerPart)
|
|
208
|
+
|
|
209
|
+
if (decimalPart) {
|
|
210
|
+
result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return result
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// ============================================================================
|
|
217
|
+
// ORDINAL
|
|
218
|
+
// ============================================================================
|
|
219
|
+
|
|
220
|
+
function buildOrdinalSegment (n) {
|
|
221
|
+
const ones = n % 10
|
|
222
|
+
const tens = Math.trunc(n / 10) % 10
|
|
223
|
+
const hundreds = Math.trunc(n / 100)
|
|
224
|
+
|
|
225
|
+
let tensOnesOrdinal = ''
|
|
226
|
+
if (tens === 1) {
|
|
227
|
+
tensOnesOrdinal = ORDINAL_TEENS[ones]
|
|
228
|
+
} else if (tens >= 2) {
|
|
229
|
+
if (ones > 0) {
|
|
230
|
+
tensOnesOrdinal = TENS[tens] + '-' + ORDINAL_ONES[ones]
|
|
231
|
+
} else {
|
|
232
|
+
tensOnesOrdinal = ORDINAL_TENS[tens]
|
|
233
|
+
}
|
|
234
|
+
} else if (ones > 0) {
|
|
235
|
+
tensOnesOrdinal = ORDINAL_ONES[ones]
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (hundreds > 0) {
|
|
239
|
+
if (tensOnesOrdinal) {
|
|
240
|
+
return ONES[hundreds] + ' ' + HUNDRED + ' ' + tensOnesOrdinal
|
|
241
|
+
} else {
|
|
242
|
+
return ONES[hundreds] + ' hundredth'
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return tensOnesOrdinal
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function integerToOrdinal (n) {
|
|
250
|
+
if (n < 1000n) {
|
|
251
|
+
return buildOrdinalSegment(Number(n))
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
if (n < 1_000_000n) {
|
|
255
|
+
const thousands = Number(n / 1000n)
|
|
256
|
+
const remainder = Number(n % 1000n)
|
|
257
|
+
|
|
258
|
+
if (remainder === 0) {
|
|
259
|
+
return buildSegment(thousands).word + ' ' + SCALES[0] + 'th'
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const { word: thousandsWord } = buildSegment(thousands)
|
|
263
|
+
return thousandsWord + ' ' + SCALES[0] + ' ' + buildOrdinalSegment(remainder)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return buildLargeOrdinal(n)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function buildLargeOrdinal (n) {
|
|
270
|
+
const segments = []
|
|
271
|
+
let temp = n
|
|
272
|
+
while (temp > 0n) {
|
|
273
|
+
segments.push(Number(temp % 1000n))
|
|
274
|
+
temp = temp / 1000n
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
let lowestNonZeroIdx = 0
|
|
278
|
+
for (let i = 0; i < segments.length; i++) {
|
|
279
|
+
if (segments[i] !== 0) {
|
|
280
|
+
lowestNonZeroIdx = i
|
|
281
|
+
break
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
let result = ''
|
|
286
|
+
|
|
287
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
288
|
+
const segment = segments[i]
|
|
289
|
+
if (segment === 0) continue
|
|
290
|
+
|
|
291
|
+
const isLowestSegment = (i === lowestNonZeroIdx)
|
|
292
|
+
|
|
293
|
+
if (result) result += ' '
|
|
294
|
+
|
|
295
|
+
if (isLowestSegment) {
|
|
296
|
+
if (i === 0) {
|
|
297
|
+
result += buildOrdinalSegment(segment)
|
|
298
|
+
} else {
|
|
299
|
+
result += buildSegment(segment).word + ' ' + SCALES[i - 1] + 'th'
|
|
300
|
+
}
|
|
301
|
+
} else {
|
|
302
|
+
result += buildSegment(segment).word
|
|
303
|
+
if (i > 0) {
|
|
304
|
+
result += ' ' + SCALES[i - 1]
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return result
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function toOrdinal (value) {
|
|
313
|
+
const integerPart = parseOrdinalValue(value)
|
|
314
|
+
return integerToOrdinal(integerPart)
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// ============================================================================
|
|
318
|
+
// CURRENCY
|
|
319
|
+
// ============================================================================
|
|
320
|
+
|
|
321
|
+
function toCurrency (value, options) {
|
|
322
|
+
options = validateOptions(options)
|
|
323
|
+
const { isNegative, dollars, cents } = parseCurrencyValue(value)
|
|
324
|
+
const { and: useAnd = true } = options
|
|
325
|
+
|
|
326
|
+
let result = ''
|
|
327
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
328
|
+
|
|
329
|
+
if (dollars > 0n || cents === 0n) {
|
|
330
|
+
result += integerToWords(dollars)
|
|
331
|
+
result += ' ' + (dollars === 1n ? DOLLAR : DOLLARS)
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (cents > 0n) {
|
|
335
|
+
if (dollars > 0n) {
|
|
336
|
+
result += useAnd ? ' and ' : ' '
|
|
337
|
+
}
|
|
338
|
+
result += integerToWords(cents)
|
|
339
|
+
result += ' ' + (cents === 1n ? CENT : CENTS)
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return result
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/en-US.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to American 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=false] - Use "and" after hundreds and before final small numbers (e.g., "one hundred and one" instead of "one hundred one")
|
|
11
|
+
* @returns {string} The number in American 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 one'
|
|
18
|
+
* toCardinal(101, { and: true }) // 'one hundred and 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 American 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 American 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 American 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;
|