@ducatjs/money 0.2.1 → 0.3.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/NOTICE +47 -11
- package/README.md +346 -44
- package/data/cldr-territories.json +2791 -0
- package/data/crypto-units.json +68 -0
- package/data/rbnf/de.txt +243 -0
- package/data/rbnf/en.txt +166 -0
- package/data/rbnf/es.txt +261 -0
- package/data/rbnf/fr.txt +159 -0
- package/data/rbnf/it.txt +502 -0
- package/data/rbnf/nl.txt +103 -0
- package/data/rbnf/pt.txt +171 -0
- package/dist/adyen-fx.js +1 -1
- package/dist/adyen-fx.js.map +1 -1
- package/dist/allocate.d.ts.map +1 -1
- package/dist/allocate.js +2 -3
- package/dist/allocate.js.map +1 -1
- package/dist/cash.d.ts +15 -0
- package/dist/cash.d.ts.map +1 -1
- package/dist/cash.js +17 -0
- package/dist/cash.js.map +1 -1
- package/dist/convert.d.ts.map +1 -1
- package/dist/convert.js +2 -3
- package/dist/convert.js.map +1 -1
- package/dist/crypto.d.ts +54 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +89 -0
- package/dist/crypto.js.map +1 -0
- package/dist/currencies.d.ts +43 -0
- package/dist/currencies.d.ts.map +1 -0
- package/dist/currencies.js +91 -0
- package/dist/currencies.js.map +1 -0
- package/dist/currency.d.ts +9 -1
- package/dist/currency.d.ts.map +1 -1
- package/dist/currency.js +41 -14
- package/dist/currency.js.map +1 -1
- package/dist/decimal.d.ts +25 -3
- package/dist/decimal.d.ts.map +1 -1
- package/dist/decimal.js +78 -8
- package/dist/decimal.js.map +1 -1
- package/dist/ecb.d.ts +23 -8
- package/dist/ecb.d.ts.map +1 -1
- package/dist/ecb.js +46 -15
- package/dist/ecb.js.map +1 -1
- package/dist/entries/adyen-fx.d.ts +3 -0
- package/dist/entries/adyen-fx.d.ts.map +1 -0
- package/dist/entries/adyen-fx.js +5 -0
- package/dist/entries/adyen-fx.js.map +1 -0
- package/dist/entries/boc.d.ts +3 -0
- package/dist/entries/boc.d.ts.map +1 -0
- package/dist/entries/boc.js +5 -0
- package/dist/entries/boc.js.map +1 -0
- package/dist/entries/boe.d.ts +3 -0
- package/dist/entries/boe.d.ts.map +1 -0
- package/dist/entries/boe.js +5 -0
- package/dist/entries/boe.js.map +1 -0
- package/dist/entries/crypto.d.ts +3 -0
- package/dist/entries/crypto.d.ts.map +1 -0
- package/dist/entries/crypto.js +5 -0
- package/dist/entries/crypto.js.map +1 -0
- package/dist/entries/currencies.d.ts +3 -0
- package/dist/entries/currencies.d.ts.map +1 -0
- package/dist/entries/currencies.js +5 -0
- package/dist/entries/currencies.js.map +1 -0
- package/dist/entries/drizzle-mysql.d.ts +3 -0
- package/dist/entries/drizzle-mysql.d.ts.map +1 -0
- package/dist/entries/drizzle-mysql.js +5 -0
- package/dist/entries/drizzle-mysql.js.map +1 -0
- package/dist/entries/drizzle-pg.d.ts +3 -0
- package/dist/entries/drizzle-pg.d.ts.map +1 -0
- package/dist/entries/drizzle-pg.js +5 -0
- package/dist/entries/drizzle-pg.js.map +1 -0
- package/dist/entries/drizzle-sqlite.d.ts +3 -0
- package/dist/entries/drizzle-sqlite.d.ts.map +1 -0
- package/dist/entries/drizzle-sqlite.js +5 -0
- package/dist/entries/drizzle-sqlite.js.map +1 -0
- package/dist/entries/ecb.d.ts +3 -0
- package/dist/entries/ecb.d.ts.map +1 -0
- package/dist/entries/ecb.js +5 -0
- package/dist/entries/ecb.js.map +1 -0
- package/dist/entries/fed.d.ts +3 -0
- package/dist/entries/fed.d.ts.map +1 -0
- package/dist/entries/fed.js +5 -0
- package/dist/entries/fed.js.map +1 -0
- package/dist/entries/fetch.d.ts +3 -0
- package/dist/entries/fetch.d.ts.map +1 -0
- package/dist/entries/fetch.js +5 -0
- package/dist/entries/fetch.js.map +1 -0
- package/dist/entries/finance.d.ts +3 -0
- package/dist/entries/finance.d.ts.map +1 -0
- package/dist/entries/finance.js +5 -0
- package/dist/entries/finance.js.map +1 -0
- package/dist/entries/historic.d.ts +3 -0
- package/dist/entries/historic.d.ts.map +1 -0
- package/dist/entries/historic.js +5 -0
- package/dist/entries/historic.js.map +1 -0
- package/dist/entries/history.d.ts +3 -0
- package/dist/entries/history.d.ts.map +1 -0
- package/dist/entries/history.js +5 -0
- package/dist/entries/history.js.map +1 -0
- package/dist/entries/hmrc.d.ts +3 -0
- package/dist/entries/hmrc.d.ts.map +1 -0
- package/dist/entries/hmrc.js +5 -0
- package/dist/entries/hmrc.js.map +1 -0
- package/dist/entries/kysely.d.ts +3 -0
- package/dist/entries/kysely.d.ts.map +1 -0
- package/dist/entries/kysely.js +5 -0
- package/dist/entries/kysely.js.map +1 -0
- package/dist/entries/parse.d.ts +3 -0
- package/dist/entries/parse.d.ts.map +1 -0
- package/dist/entries/parse.js +5 -0
- package/dist/entries/parse.js.map +1 -0
- package/dist/entries/pg.d.ts +3 -0
- package/dist/entries/pg.d.ts.map +1 -0
- package/dist/entries/pg.js +5 -0
- package/dist/entries/pg.js.map +1 -0
- package/dist/entries/policy.d.ts +3 -0
- package/dist/entries/policy.d.ts.map +1 -0
- package/dist/entries/policy.js +5 -0
- package/dist/entries/policy.js.map +1 -0
- package/dist/entries/pricing.d.ts +3 -0
- package/dist/entries/pricing.d.ts.map +1 -0
- package/dist/entries/pricing.js +5 -0
- package/dist/entries/pricing.js.map +1 -0
- package/dist/entries/stripe-fx.d.ts +3 -0
- package/dist/entries/stripe-fx.d.ts.map +1 -0
- package/dist/entries/stripe-fx.js +5 -0
- package/dist/entries/stripe-fx.js.map +1 -0
- package/dist/entries/testing-arbitraries.d.ts +3 -0
- package/dist/entries/testing-arbitraries.d.ts.map +1 -0
- package/dist/entries/testing-arbitraries.js +5 -0
- package/dist/entries/testing-arbitraries.js.map +1 -0
- package/dist/entries/testing-index.d.ts +3 -0
- package/dist/entries/testing-index.d.ts.map +1 -0
- package/dist/entries/testing-index.js +5 -0
- package/dist/entries/testing-index.js.map +1 -0
- package/dist/entries/testing-jest.d.ts +3 -0
- package/dist/entries/testing-jest.d.ts.map +1 -0
- package/dist/entries/testing-jest.js +5 -0
- package/dist/entries/testing-jest.js.map +1 -0
- package/dist/entries/testing-vitest.d.ts +3 -0
- package/dist/entries/testing-vitest.d.ts.map +1 -0
- package/dist/entries/testing-vitest.js +5 -0
- package/dist/entries/testing-vitest.js.map +1 -0
- package/dist/entries/valibot.d.ts +3 -0
- package/dist/entries/valibot.d.ts.map +1 -0
- package/dist/entries/valibot.js +5 -0
- package/dist/entries/valibot.js.map +1 -0
- package/dist/entries/wire.d.ts +3 -0
- package/dist/entries/wire.d.ts.map +1 -0
- package/dist/entries/wire.js +5 -0
- package/dist/entries/wire.js.map +1 -0
- package/dist/entries/zod.d.ts +3 -0
- package/dist/entries/zod.d.ts.map +1 -0
- package/dist/entries/zod.js +5 -0
- package/dist/entries/zod.js.map +1 -0
- package/dist/exact.d.ts.map +1 -1
- package/dist/exact.js +3 -3
- package/dist/exact.js.map +1 -1
- package/dist/fetch.d.ts +7 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +11 -2
- package/dist/fetch.js.map +1 -1
- package/dist/finance.d.ts +296 -0
- package/dist/finance.d.ts.map +1 -0
- package/dist/finance.js +825 -0
- package/dist/finance.js.map +1 -0
- package/dist/fixed-money.d.ts +12 -0
- package/dist/fixed-money.d.ts.map +1 -0
- package/dist/fixed-money.js +32 -0
- package/dist/fixed-money.js.map +1 -0
- package/dist/fixed.d.ts +26 -9
- package/dist/fixed.d.ts.map +1 -1
- package/dist/fixed.js +75 -49
- package/dist/fixed.js.map +1 -1
- package/dist/fn.d.ts +17 -1
- package/dist/fn.d.ts.map +1 -1
- package/dist/fn.js +17 -1
- package/dist/fn.js.map +1 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +28 -9
- package/dist/format.js.map +1 -1
- package/dist/generated/crypto.d.ts +58 -0
- package/dist/generated/crypto.d.ts.map +1 -0
- package/dist/generated/crypto.js +15 -0
- package/dist/generated/crypto.js.map +1 -0
- package/dist/generated/iso/AED.d.ts +2 -0
- package/dist/generated/iso/AED.d.ts.map +1 -0
- package/dist/generated/iso/AED.js +5 -0
- package/dist/generated/iso/AED.js.map +1 -0
- package/dist/generated/iso/AFN.d.ts +2 -0
- package/dist/generated/iso/AFN.d.ts.map +1 -0
- package/dist/generated/iso/AFN.js +5 -0
- package/dist/generated/iso/AFN.js.map +1 -0
- package/dist/generated/iso/ALL.d.ts +2 -0
- package/dist/generated/iso/ALL.d.ts.map +1 -0
- package/dist/generated/iso/ALL.js +5 -0
- package/dist/generated/iso/ALL.js.map +1 -0
- package/dist/generated/iso/AMD.d.ts +2 -0
- package/dist/generated/iso/AMD.d.ts.map +1 -0
- package/dist/generated/iso/AMD.js +5 -0
- package/dist/generated/iso/AMD.js.map +1 -0
- package/dist/generated/iso/AOA.d.ts +2 -0
- package/dist/generated/iso/AOA.d.ts.map +1 -0
- package/dist/generated/iso/AOA.js +5 -0
- package/dist/generated/iso/AOA.js.map +1 -0
- package/dist/generated/iso/ARS.d.ts +2 -0
- package/dist/generated/iso/ARS.d.ts.map +1 -0
- package/dist/generated/iso/ARS.js +5 -0
- package/dist/generated/iso/ARS.js.map +1 -0
- package/dist/generated/iso/AUD.d.ts +2 -0
- package/dist/generated/iso/AUD.d.ts.map +1 -0
- package/dist/generated/iso/AUD.js +5 -0
- package/dist/generated/iso/AUD.js.map +1 -0
- package/dist/generated/iso/AWG.d.ts +2 -0
- package/dist/generated/iso/AWG.d.ts.map +1 -0
- package/dist/generated/iso/AWG.js +5 -0
- package/dist/generated/iso/AWG.js.map +1 -0
- package/dist/generated/iso/AZN.d.ts +2 -0
- package/dist/generated/iso/AZN.d.ts.map +1 -0
- package/dist/generated/iso/AZN.js +5 -0
- package/dist/generated/iso/AZN.js.map +1 -0
- package/dist/generated/iso/BAM.d.ts +2 -0
- package/dist/generated/iso/BAM.d.ts.map +1 -0
- package/dist/generated/iso/BAM.js +5 -0
- package/dist/generated/iso/BAM.js.map +1 -0
- package/dist/generated/iso/BBD.d.ts +2 -0
- package/dist/generated/iso/BBD.d.ts.map +1 -0
- package/dist/generated/iso/BBD.js +5 -0
- package/dist/generated/iso/BBD.js.map +1 -0
- package/dist/generated/iso/BDT.d.ts +2 -0
- package/dist/generated/iso/BDT.d.ts.map +1 -0
- package/dist/generated/iso/BDT.js +5 -0
- package/dist/generated/iso/BDT.js.map +1 -0
- package/dist/generated/iso/BHD.d.ts +2 -0
- package/dist/generated/iso/BHD.d.ts.map +1 -0
- package/dist/generated/iso/BHD.js +5 -0
- package/dist/generated/iso/BHD.js.map +1 -0
- package/dist/generated/iso/BIF.d.ts +2 -0
- package/dist/generated/iso/BIF.d.ts.map +1 -0
- package/dist/generated/iso/BIF.js +5 -0
- package/dist/generated/iso/BIF.js.map +1 -0
- package/dist/generated/iso/BMD.d.ts +2 -0
- package/dist/generated/iso/BMD.d.ts.map +1 -0
- package/dist/generated/iso/BMD.js +5 -0
- package/dist/generated/iso/BMD.js.map +1 -0
- package/dist/generated/iso/BND.d.ts +2 -0
- package/dist/generated/iso/BND.d.ts.map +1 -0
- package/dist/generated/iso/BND.js +5 -0
- package/dist/generated/iso/BND.js.map +1 -0
- package/dist/generated/iso/BOB.d.ts +2 -0
- package/dist/generated/iso/BOB.d.ts.map +1 -0
- package/dist/generated/iso/BOB.js +5 -0
- package/dist/generated/iso/BOB.js.map +1 -0
- package/dist/generated/iso/BOV.d.ts +2 -0
- package/dist/generated/iso/BOV.d.ts.map +1 -0
- package/dist/generated/iso/BOV.js +5 -0
- package/dist/generated/iso/BOV.js.map +1 -0
- package/dist/generated/iso/BRL.d.ts +2 -0
- package/dist/generated/iso/BRL.d.ts.map +1 -0
- package/dist/generated/iso/BRL.js +5 -0
- package/dist/generated/iso/BRL.js.map +1 -0
- package/dist/generated/iso/BSD.d.ts +2 -0
- package/dist/generated/iso/BSD.d.ts.map +1 -0
- package/dist/generated/iso/BSD.js +5 -0
- package/dist/generated/iso/BSD.js.map +1 -0
- package/dist/generated/iso/BTN.d.ts +2 -0
- package/dist/generated/iso/BTN.d.ts.map +1 -0
- package/dist/generated/iso/BTN.js +5 -0
- package/dist/generated/iso/BTN.js.map +1 -0
- package/dist/generated/iso/BWP.d.ts +2 -0
- package/dist/generated/iso/BWP.d.ts.map +1 -0
- package/dist/generated/iso/BWP.js +5 -0
- package/dist/generated/iso/BWP.js.map +1 -0
- package/dist/generated/iso/BYN.d.ts +2 -0
- package/dist/generated/iso/BYN.d.ts.map +1 -0
- package/dist/generated/iso/BYN.js +5 -0
- package/dist/generated/iso/BYN.js.map +1 -0
- package/dist/generated/iso/BZD.d.ts +2 -0
- package/dist/generated/iso/BZD.d.ts.map +1 -0
- package/dist/generated/iso/BZD.js +5 -0
- package/dist/generated/iso/BZD.js.map +1 -0
- package/dist/generated/iso/CAD.d.ts +2 -0
- package/dist/generated/iso/CAD.d.ts.map +1 -0
- package/dist/generated/iso/CAD.js +5 -0
- package/dist/generated/iso/CAD.js.map +1 -0
- package/dist/generated/iso/CDF.d.ts +2 -0
- package/dist/generated/iso/CDF.d.ts.map +1 -0
- package/dist/generated/iso/CDF.js +5 -0
- package/dist/generated/iso/CDF.js.map +1 -0
- package/dist/generated/iso/CHE.d.ts +2 -0
- package/dist/generated/iso/CHE.d.ts.map +1 -0
- package/dist/generated/iso/CHE.js +5 -0
- package/dist/generated/iso/CHE.js.map +1 -0
- package/dist/generated/iso/CHF.d.ts +2 -0
- package/dist/generated/iso/CHF.d.ts.map +1 -0
- package/dist/generated/iso/CHF.js +5 -0
- package/dist/generated/iso/CHF.js.map +1 -0
- package/dist/generated/iso/CHW.d.ts +2 -0
- package/dist/generated/iso/CHW.d.ts.map +1 -0
- package/dist/generated/iso/CHW.js +5 -0
- package/dist/generated/iso/CHW.js.map +1 -0
- package/dist/generated/iso/CLF.d.ts +2 -0
- package/dist/generated/iso/CLF.d.ts.map +1 -0
- package/dist/generated/iso/CLF.js +5 -0
- package/dist/generated/iso/CLF.js.map +1 -0
- package/dist/generated/iso/CLP.d.ts +2 -0
- package/dist/generated/iso/CLP.d.ts.map +1 -0
- package/dist/generated/iso/CLP.js +5 -0
- package/dist/generated/iso/CLP.js.map +1 -0
- package/dist/generated/iso/CNY.d.ts +2 -0
- package/dist/generated/iso/CNY.d.ts.map +1 -0
- package/dist/generated/iso/CNY.js +5 -0
- package/dist/generated/iso/CNY.js.map +1 -0
- package/dist/generated/iso/COP.d.ts +2 -0
- package/dist/generated/iso/COP.d.ts.map +1 -0
- package/dist/generated/iso/COP.js +5 -0
- package/dist/generated/iso/COP.js.map +1 -0
- package/dist/generated/iso/COU.d.ts +2 -0
- package/dist/generated/iso/COU.d.ts.map +1 -0
- package/dist/generated/iso/COU.js +5 -0
- package/dist/generated/iso/COU.js.map +1 -0
- package/dist/generated/iso/CRC.d.ts +2 -0
- package/dist/generated/iso/CRC.d.ts.map +1 -0
- package/dist/generated/iso/CRC.js +5 -0
- package/dist/generated/iso/CRC.js.map +1 -0
- package/dist/generated/iso/CUP.d.ts +2 -0
- package/dist/generated/iso/CUP.d.ts.map +1 -0
- package/dist/generated/iso/CUP.js +5 -0
- package/dist/generated/iso/CUP.js.map +1 -0
- package/dist/generated/iso/CVE.d.ts +2 -0
- package/dist/generated/iso/CVE.d.ts.map +1 -0
- package/dist/generated/iso/CVE.js +5 -0
- package/dist/generated/iso/CVE.js.map +1 -0
- package/dist/generated/iso/CZK.d.ts +2 -0
- package/dist/generated/iso/CZK.d.ts.map +1 -0
- package/dist/generated/iso/CZK.js +5 -0
- package/dist/generated/iso/CZK.js.map +1 -0
- package/dist/generated/iso/DJF.d.ts +2 -0
- package/dist/generated/iso/DJF.d.ts.map +1 -0
- package/dist/generated/iso/DJF.js +5 -0
- package/dist/generated/iso/DJF.js.map +1 -0
- package/dist/generated/iso/DKK.d.ts +2 -0
- package/dist/generated/iso/DKK.d.ts.map +1 -0
- package/dist/generated/iso/DKK.js +5 -0
- package/dist/generated/iso/DKK.js.map +1 -0
- package/dist/generated/iso/DOP.d.ts +2 -0
- package/dist/generated/iso/DOP.d.ts.map +1 -0
- package/dist/generated/iso/DOP.js +5 -0
- package/dist/generated/iso/DOP.js.map +1 -0
- package/dist/generated/iso/DZD.d.ts +2 -0
- package/dist/generated/iso/DZD.d.ts.map +1 -0
- package/dist/generated/iso/DZD.js +5 -0
- package/dist/generated/iso/DZD.js.map +1 -0
- package/dist/generated/iso/EGP.d.ts +2 -0
- package/dist/generated/iso/EGP.d.ts.map +1 -0
- package/dist/generated/iso/EGP.js +5 -0
- package/dist/generated/iso/EGP.js.map +1 -0
- package/dist/generated/iso/ERN.d.ts +2 -0
- package/dist/generated/iso/ERN.d.ts.map +1 -0
- package/dist/generated/iso/ERN.js +5 -0
- package/dist/generated/iso/ERN.js.map +1 -0
- package/dist/generated/iso/ETB.d.ts +2 -0
- package/dist/generated/iso/ETB.d.ts.map +1 -0
- package/dist/generated/iso/ETB.js +5 -0
- package/dist/generated/iso/ETB.js.map +1 -0
- package/dist/generated/iso/EUR.d.ts +2 -0
- package/dist/generated/iso/EUR.d.ts.map +1 -0
- package/dist/generated/iso/EUR.js +5 -0
- package/dist/generated/iso/EUR.js.map +1 -0
- package/dist/generated/iso/FJD.d.ts +2 -0
- package/dist/generated/iso/FJD.d.ts.map +1 -0
- package/dist/generated/iso/FJD.js +5 -0
- package/dist/generated/iso/FJD.js.map +1 -0
- package/dist/generated/iso/FKP.d.ts +2 -0
- package/dist/generated/iso/FKP.d.ts.map +1 -0
- package/dist/generated/iso/FKP.js +5 -0
- package/dist/generated/iso/FKP.js.map +1 -0
- package/dist/generated/iso/GBP.d.ts +2 -0
- package/dist/generated/iso/GBP.d.ts.map +1 -0
- package/dist/generated/iso/GBP.js +5 -0
- package/dist/generated/iso/GBP.js.map +1 -0
- package/dist/generated/iso/GEL.d.ts +2 -0
- package/dist/generated/iso/GEL.d.ts.map +1 -0
- package/dist/generated/iso/GEL.js +5 -0
- package/dist/generated/iso/GEL.js.map +1 -0
- package/dist/generated/iso/GHS.d.ts +2 -0
- package/dist/generated/iso/GHS.d.ts.map +1 -0
- package/dist/generated/iso/GHS.js +5 -0
- package/dist/generated/iso/GHS.js.map +1 -0
- package/dist/generated/iso/GIP.d.ts +2 -0
- package/dist/generated/iso/GIP.d.ts.map +1 -0
- package/dist/generated/iso/GIP.js +5 -0
- package/dist/generated/iso/GIP.js.map +1 -0
- package/dist/generated/iso/GMD.d.ts +2 -0
- package/dist/generated/iso/GMD.d.ts.map +1 -0
- package/dist/generated/iso/GMD.js +5 -0
- package/dist/generated/iso/GMD.js.map +1 -0
- package/dist/generated/iso/GNF.d.ts +2 -0
- package/dist/generated/iso/GNF.d.ts.map +1 -0
- package/dist/generated/iso/GNF.js +5 -0
- package/dist/generated/iso/GNF.js.map +1 -0
- package/dist/generated/iso/GTQ.d.ts +2 -0
- package/dist/generated/iso/GTQ.d.ts.map +1 -0
- package/dist/generated/iso/GTQ.js +5 -0
- package/dist/generated/iso/GTQ.js.map +1 -0
- package/dist/generated/iso/GYD.d.ts +2 -0
- package/dist/generated/iso/GYD.d.ts.map +1 -0
- package/dist/generated/iso/GYD.js +5 -0
- package/dist/generated/iso/GYD.js.map +1 -0
- package/dist/generated/iso/HKD.d.ts +2 -0
- package/dist/generated/iso/HKD.d.ts.map +1 -0
- package/dist/generated/iso/HKD.js +5 -0
- package/dist/generated/iso/HKD.js.map +1 -0
- package/dist/generated/iso/HNL.d.ts +2 -0
- package/dist/generated/iso/HNL.d.ts.map +1 -0
- package/dist/generated/iso/HNL.js +5 -0
- package/dist/generated/iso/HNL.js.map +1 -0
- package/dist/generated/iso/HTG.d.ts +2 -0
- package/dist/generated/iso/HTG.d.ts.map +1 -0
- package/dist/generated/iso/HTG.js +5 -0
- package/dist/generated/iso/HTG.js.map +1 -0
- package/dist/generated/iso/HUF.d.ts +2 -0
- package/dist/generated/iso/HUF.d.ts.map +1 -0
- package/dist/generated/iso/HUF.js +5 -0
- package/dist/generated/iso/HUF.js.map +1 -0
- package/dist/generated/iso/IDR.d.ts +2 -0
- package/dist/generated/iso/IDR.d.ts.map +1 -0
- package/dist/generated/iso/IDR.js +5 -0
- package/dist/generated/iso/IDR.js.map +1 -0
- package/dist/generated/iso/ILS.d.ts +2 -0
- package/dist/generated/iso/ILS.d.ts.map +1 -0
- package/dist/generated/iso/ILS.js +5 -0
- package/dist/generated/iso/ILS.js.map +1 -0
- package/dist/generated/iso/INR.d.ts +2 -0
- package/dist/generated/iso/INR.d.ts.map +1 -0
- package/dist/generated/iso/INR.js +5 -0
- package/dist/generated/iso/INR.js.map +1 -0
- package/dist/generated/iso/IQD.d.ts +2 -0
- package/dist/generated/iso/IQD.d.ts.map +1 -0
- package/dist/generated/iso/IQD.js +5 -0
- package/dist/generated/iso/IQD.js.map +1 -0
- package/dist/generated/iso/IRR.d.ts +2 -0
- package/dist/generated/iso/IRR.d.ts.map +1 -0
- package/dist/generated/iso/IRR.js +5 -0
- package/dist/generated/iso/IRR.js.map +1 -0
- package/dist/generated/iso/ISK.d.ts +2 -0
- package/dist/generated/iso/ISK.d.ts.map +1 -0
- package/dist/generated/iso/ISK.js +5 -0
- package/dist/generated/iso/ISK.js.map +1 -0
- package/dist/generated/iso/JMD.d.ts +2 -0
- package/dist/generated/iso/JMD.d.ts.map +1 -0
- package/dist/generated/iso/JMD.js +5 -0
- package/dist/generated/iso/JMD.js.map +1 -0
- package/dist/generated/iso/JOD.d.ts +2 -0
- package/dist/generated/iso/JOD.d.ts.map +1 -0
- package/dist/generated/iso/JOD.js +5 -0
- package/dist/generated/iso/JOD.js.map +1 -0
- package/dist/generated/iso/JPY.d.ts +2 -0
- package/dist/generated/iso/JPY.d.ts.map +1 -0
- package/dist/generated/iso/JPY.js +5 -0
- package/dist/generated/iso/JPY.js.map +1 -0
- package/dist/generated/iso/KES.d.ts +2 -0
- package/dist/generated/iso/KES.d.ts.map +1 -0
- package/dist/generated/iso/KES.js +5 -0
- package/dist/generated/iso/KES.js.map +1 -0
- package/dist/generated/iso/KGS.d.ts +2 -0
- package/dist/generated/iso/KGS.d.ts.map +1 -0
- package/dist/generated/iso/KGS.js +5 -0
- package/dist/generated/iso/KGS.js.map +1 -0
- package/dist/generated/iso/KHR.d.ts +2 -0
- package/dist/generated/iso/KHR.d.ts.map +1 -0
- package/dist/generated/iso/KHR.js +5 -0
- package/dist/generated/iso/KHR.js.map +1 -0
- package/dist/generated/iso/KMF.d.ts +2 -0
- package/dist/generated/iso/KMF.d.ts.map +1 -0
- package/dist/generated/iso/KMF.js +5 -0
- package/dist/generated/iso/KMF.js.map +1 -0
- package/dist/generated/iso/KPW.d.ts +2 -0
- package/dist/generated/iso/KPW.d.ts.map +1 -0
- package/dist/generated/iso/KPW.js +5 -0
- package/dist/generated/iso/KPW.js.map +1 -0
- package/dist/generated/iso/KRW.d.ts +2 -0
- package/dist/generated/iso/KRW.d.ts.map +1 -0
- package/dist/generated/iso/KRW.js +5 -0
- package/dist/generated/iso/KRW.js.map +1 -0
- package/dist/generated/iso/KWD.d.ts +2 -0
- package/dist/generated/iso/KWD.d.ts.map +1 -0
- package/dist/generated/iso/KWD.js +5 -0
- package/dist/generated/iso/KWD.js.map +1 -0
- package/dist/generated/iso/KYD.d.ts +2 -0
- package/dist/generated/iso/KYD.d.ts.map +1 -0
- package/dist/generated/iso/KYD.js +5 -0
- package/dist/generated/iso/KYD.js.map +1 -0
- package/dist/generated/iso/KZT.d.ts +2 -0
- package/dist/generated/iso/KZT.d.ts.map +1 -0
- package/dist/generated/iso/KZT.js +5 -0
- package/dist/generated/iso/KZT.js.map +1 -0
- package/dist/generated/iso/LAK.d.ts +2 -0
- package/dist/generated/iso/LAK.d.ts.map +1 -0
- package/dist/generated/iso/LAK.js +5 -0
- package/dist/generated/iso/LAK.js.map +1 -0
- package/dist/generated/iso/LBP.d.ts +2 -0
- package/dist/generated/iso/LBP.d.ts.map +1 -0
- package/dist/generated/iso/LBP.js +5 -0
- package/dist/generated/iso/LBP.js.map +1 -0
- package/dist/generated/iso/LKR.d.ts +2 -0
- package/dist/generated/iso/LKR.d.ts.map +1 -0
- package/dist/generated/iso/LKR.js +5 -0
- package/dist/generated/iso/LKR.js.map +1 -0
- package/dist/generated/iso/LRD.d.ts +2 -0
- package/dist/generated/iso/LRD.d.ts.map +1 -0
- package/dist/generated/iso/LRD.js +5 -0
- package/dist/generated/iso/LRD.js.map +1 -0
- package/dist/generated/iso/LSL.d.ts +2 -0
- package/dist/generated/iso/LSL.d.ts.map +1 -0
- package/dist/generated/iso/LSL.js +5 -0
- package/dist/generated/iso/LSL.js.map +1 -0
- package/dist/generated/iso/LYD.d.ts +2 -0
- package/dist/generated/iso/LYD.d.ts.map +1 -0
- package/dist/generated/iso/LYD.js +5 -0
- package/dist/generated/iso/LYD.js.map +1 -0
- package/dist/generated/iso/MAD.d.ts +2 -0
- package/dist/generated/iso/MAD.d.ts.map +1 -0
- package/dist/generated/iso/MAD.js +5 -0
- package/dist/generated/iso/MAD.js.map +1 -0
- package/dist/generated/iso/MDL.d.ts +2 -0
- package/dist/generated/iso/MDL.d.ts.map +1 -0
- package/dist/generated/iso/MDL.js +5 -0
- package/dist/generated/iso/MDL.js.map +1 -0
- package/dist/generated/iso/MGA.d.ts +2 -0
- package/dist/generated/iso/MGA.d.ts.map +1 -0
- package/dist/generated/iso/MGA.js +5 -0
- package/dist/generated/iso/MGA.js.map +1 -0
- package/dist/generated/iso/MKD.d.ts +2 -0
- package/dist/generated/iso/MKD.d.ts.map +1 -0
- package/dist/generated/iso/MKD.js +5 -0
- package/dist/generated/iso/MKD.js.map +1 -0
- package/dist/generated/iso/MMK.d.ts +2 -0
- package/dist/generated/iso/MMK.d.ts.map +1 -0
- package/dist/generated/iso/MMK.js +5 -0
- package/dist/generated/iso/MMK.js.map +1 -0
- package/dist/generated/iso/MNT.d.ts +2 -0
- package/dist/generated/iso/MNT.d.ts.map +1 -0
- package/dist/generated/iso/MNT.js +5 -0
- package/dist/generated/iso/MNT.js.map +1 -0
- package/dist/generated/iso/MOP.d.ts +2 -0
- package/dist/generated/iso/MOP.d.ts.map +1 -0
- package/dist/generated/iso/MOP.js +5 -0
- package/dist/generated/iso/MOP.js.map +1 -0
- package/dist/generated/iso/MRU.d.ts +2 -0
- package/dist/generated/iso/MRU.d.ts.map +1 -0
- package/dist/generated/iso/MRU.js +5 -0
- package/dist/generated/iso/MRU.js.map +1 -0
- package/dist/generated/iso/MUR.d.ts +2 -0
- package/dist/generated/iso/MUR.d.ts.map +1 -0
- package/dist/generated/iso/MUR.js +5 -0
- package/dist/generated/iso/MUR.js.map +1 -0
- package/dist/generated/iso/MVR.d.ts +2 -0
- package/dist/generated/iso/MVR.d.ts.map +1 -0
- package/dist/generated/iso/MVR.js +5 -0
- package/dist/generated/iso/MVR.js.map +1 -0
- package/dist/generated/iso/MWK.d.ts +2 -0
- package/dist/generated/iso/MWK.d.ts.map +1 -0
- package/dist/generated/iso/MWK.js +5 -0
- package/dist/generated/iso/MWK.js.map +1 -0
- package/dist/generated/iso/MXN.d.ts +2 -0
- package/dist/generated/iso/MXN.d.ts.map +1 -0
- package/dist/generated/iso/MXN.js +5 -0
- package/dist/generated/iso/MXN.js.map +1 -0
- package/dist/generated/iso/MXV.d.ts +2 -0
- package/dist/generated/iso/MXV.d.ts.map +1 -0
- package/dist/generated/iso/MXV.js +5 -0
- package/dist/generated/iso/MXV.js.map +1 -0
- package/dist/generated/iso/MYR.d.ts +2 -0
- package/dist/generated/iso/MYR.d.ts.map +1 -0
- package/dist/generated/iso/MYR.js +5 -0
- package/dist/generated/iso/MYR.js.map +1 -0
- package/dist/generated/iso/MZN.d.ts +2 -0
- package/dist/generated/iso/MZN.d.ts.map +1 -0
- package/dist/generated/iso/MZN.js +5 -0
- package/dist/generated/iso/MZN.js.map +1 -0
- package/dist/generated/iso/NAD.d.ts +2 -0
- package/dist/generated/iso/NAD.d.ts.map +1 -0
- package/dist/generated/iso/NAD.js +5 -0
- package/dist/generated/iso/NAD.js.map +1 -0
- package/dist/generated/iso/NGN.d.ts +2 -0
- package/dist/generated/iso/NGN.d.ts.map +1 -0
- package/dist/generated/iso/NGN.js +5 -0
- package/dist/generated/iso/NGN.js.map +1 -0
- package/dist/generated/iso/NIO.d.ts +2 -0
- package/dist/generated/iso/NIO.d.ts.map +1 -0
- package/dist/generated/iso/NIO.js +5 -0
- package/dist/generated/iso/NIO.js.map +1 -0
- package/dist/generated/iso/NOK.d.ts +2 -0
- package/dist/generated/iso/NOK.d.ts.map +1 -0
- package/dist/generated/iso/NOK.js +5 -0
- package/dist/generated/iso/NOK.js.map +1 -0
- package/dist/generated/iso/NPR.d.ts +2 -0
- package/dist/generated/iso/NPR.d.ts.map +1 -0
- package/dist/generated/iso/NPR.js +5 -0
- package/dist/generated/iso/NPR.js.map +1 -0
- package/dist/generated/iso/NZD.d.ts +2 -0
- package/dist/generated/iso/NZD.d.ts.map +1 -0
- package/dist/generated/iso/NZD.js +5 -0
- package/dist/generated/iso/NZD.js.map +1 -0
- package/dist/generated/iso/OMR.d.ts +2 -0
- package/dist/generated/iso/OMR.d.ts.map +1 -0
- package/dist/generated/iso/OMR.js +5 -0
- package/dist/generated/iso/OMR.js.map +1 -0
- package/dist/generated/iso/PAB.d.ts +2 -0
- package/dist/generated/iso/PAB.d.ts.map +1 -0
- package/dist/generated/iso/PAB.js +5 -0
- package/dist/generated/iso/PAB.js.map +1 -0
- package/dist/generated/iso/PEN.d.ts +2 -0
- package/dist/generated/iso/PEN.d.ts.map +1 -0
- package/dist/generated/iso/PEN.js +5 -0
- package/dist/generated/iso/PEN.js.map +1 -0
- package/dist/generated/iso/PGK.d.ts +2 -0
- package/dist/generated/iso/PGK.d.ts.map +1 -0
- package/dist/generated/iso/PGK.js +5 -0
- package/dist/generated/iso/PGK.js.map +1 -0
- package/dist/generated/iso/PHP.d.ts +2 -0
- package/dist/generated/iso/PHP.d.ts.map +1 -0
- package/dist/generated/iso/PHP.js +5 -0
- package/dist/generated/iso/PHP.js.map +1 -0
- package/dist/generated/iso/PKR.d.ts +2 -0
- package/dist/generated/iso/PKR.d.ts.map +1 -0
- package/dist/generated/iso/PKR.js +5 -0
- package/dist/generated/iso/PKR.js.map +1 -0
- package/dist/generated/iso/PLN.d.ts +2 -0
- package/dist/generated/iso/PLN.d.ts.map +1 -0
- package/dist/generated/iso/PLN.js +5 -0
- package/dist/generated/iso/PLN.js.map +1 -0
- package/dist/generated/iso/PYG.d.ts +2 -0
- package/dist/generated/iso/PYG.d.ts.map +1 -0
- package/dist/generated/iso/PYG.js +5 -0
- package/dist/generated/iso/PYG.js.map +1 -0
- package/dist/generated/iso/QAR.d.ts +2 -0
- package/dist/generated/iso/QAR.d.ts.map +1 -0
- package/dist/generated/iso/QAR.js +5 -0
- package/dist/generated/iso/QAR.js.map +1 -0
- package/dist/generated/iso/RON.d.ts +2 -0
- package/dist/generated/iso/RON.d.ts.map +1 -0
- package/dist/generated/iso/RON.js +5 -0
- package/dist/generated/iso/RON.js.map +1 -0
- package/dist/generated/iso/RSD.d.ts +2 -0
- package/dist/generated/iso/RSD.d.ts.map +1 -0
- package/dist/generated/iso/RSD.js +5 -0
- package/dist/generated/iso/RSD.js.map +1 -0
- package/dist/generated/iso/RUB.d.ts +2 -0
- package/dist/generated/iso/RUB.d.ts.map +1 -0
- package/dist/generated/iso/RUB.js +5 -0
- package/dist/generated/iso/RUB.js.map +1 -0
- package/dist/generated/iso/RWF.d.ts +2 -0
- package/dist/generated/iso/RWF.d.ts.map +1 -0
- package/dist/generated/iso/RWF.js +5 -0
- package/dist/generated/iso/RWF.js.map +1 -0
- package/dist/generated/iso/SAR.d.ts +2 -0
- package/dist/generated/iso/SAR.d.ts.map +1 -0
- package/dist/generated/iso/SAR.js +5 -0
- package/dist/generated/iso/SAR.js.map +1 -0
- package/dist/generated/iso/SBD.d.ts +2 -0
- package/dist/generated/iso/SBD.d.ts.map +1 -0
- package/dist/generated/iso/SBD.js +5 -0
- package/dist/generated/iso/SBD.js.map +1 -0
- package/dist/generated/iso/SCR.d.ts +2 -0
- package/dist/generated/iso/SCR.d.ts.map +1 -0
- package/dist/generated/iso/SCR.js +5 -0
- package/dist/generated/iso/SCR.js.map +1 -0
- package/dist/generated/iso/SDG.d.ts +2 -0
- package/dist/generated/iso/SDG.d.ts.map +1 -0
- package/dist/generated/iso/SDG.js +5 -0
- package/dist/generated/iso/SDG.js.map +1 -0
- package/dist/generated/iso/SEK.d.ts +2 -0
- package/dist/generated/iso/SEK.d.ts.map +1 -0
- package/dist/generated/iso/SEK.js +5 -0
- package/dist/generated/iso/SEK.js.map +1 -0
- package/dist/generated/iso/SGD.d.ts +2 -0
- package/dist/generated/iso/SGD.d.ts.map +1 -0
- package/dist/generated/iso/SGD.js +5 -0
- package/dist/generated/iso/SGD.js.map +1 -0
- package/dist/generated/iso/SHP.d.ts +2 -0
- package/dist/generated/iso/SHP.d.ts.map +1 -0
- package/dist/generated/iso/SHP.js +5 -0
- package/dist/generated/iso/SHP.js.map +1 -0
- package/dist/generated/iso/SLE.d.ts +2 -0
- package/dist/generated/iso/SLE.d.ts.map +1 -0
- package/dist/generated/iso/SLE.js +5 -0
- package/dist/generated/iso/SLE.js.map +1 -0
- package/dist/generated/iso/SOS.d.ts +2 -0
- package/dist/generated/iso/SOS.d.ts.map +1 -0
- package/dist/generated/iso/SOS.js +5 -0
- package/dist/generated/iso/SOS.js.map +1 -0
- package/dist/generated/iso/SRD.d.ts +2 -0
- package/dist/generated/iso/SRD.d.ts.map +1 -0
- package/dist/generated/iso/SRD.js +5 -0
- package/dist/generated/iso/SRD.js.map +1 -0
- package/dist/generated/iso/SSP.d.ts +2 -0
- package/dist/generated/iso/SSP.d.ts.map +1 -0
- package/dist/generated/iso/SSP.js +5 -0
- package/dist/generated/iso/SSP.js.map +1 -0
- package/dist/generated/iso/STN.d.ts +2 -0
- package/dist/generated/iso/STN.d.ts.map +1 -0
- package/dist/generated/iso/STN.js +5 -0
- package/dist/generated/iso/STN.js.map +1 -0
- package/dist/generated/iso/SVC.d.ts +2 -0
- package/dist/generated/iso/SVC.d.ts.map +1 -0
- package/dist/generated/iso/SVC.js +5 -0
- package/dist/generated/iso/SVC.js.map +1 -0
- package/dist/generated/iso/SYP.d.ts +2 -0
- package/dist/generated/iso/SYP.d.ts.map +1 -0
- package/dist/generated/iso/SYP.js +5 -0
- package/dist/generated/iso/SYP.js.map +1 -0
- package/dist/generated/iso/SZL.d.ts +2 -0
- package/dist/generated/iso/SZL.d.ts.map +1 -0
- package/dist/generated/iso/SZL.js +5 -0
- package/dist/generated/iso/SZL.js.map +1 -0
- package/dist/generated/iso/THB.d.ts +2 -0
- package/dist/generated/iso/THB.d.ts.map +1 -0
- package/dist/generated/iso/THB.js +5 -0
- package/dist/generated/iso/THB.js.map +1 -0
- package/dist/generated/iso/TJS.d.ts +2 -0
- package/dist/generated/iso/TJS.d.ts.map +1 -0
- package/dist/generated/iso/TJS.js +5 -0
- package/dist/generated/iso/TJS.js.map +1 -0
- package/dist/generated/iso/TMT.d.ts +2 -0
- package/dist/generated/iso/TMT.d.ts.map +1 -0
- package/dist/generated/iso/TMT.js +5 -0
- package/dist/generated/iso/TMT.js.map +1 -0
- package/dist/generated/iso/TND.d.ts +2 -0
- package/dist/generated/iso/TND.d.ts.map +1 -0
- package/dist/generated/iso/TND.js +5 -0
- package/dist/generated/iso/TND.js.map +1 -0
- package/dist/generated/iso/TOP.d.ts +2 -0
- package/dist/generated/iso/TOP.d.ts.map +1 -0
- package/dist/generated/iso/TOP.js +5 -0
- package/dist/generated/iso/TOP.js.map +1 -0
- package/dist/generated/iso/TRY.d.ts +2 -0
- package/dist/generated/iso/TRY.d.ts.map +1 -0
- package/dist/generated/iso/TRY.js +5 -0
- package/dist/generated/iso/TRY.js.map +1 -0
- package/dist/generated/iso/TTD.d.ts +2 -0
- package/dist/generated/iso/TTD.d.ts.map +1 -0
- package/dist/generated/iso/TTD.js +5 -0
- package/dist/generated/iso/TTD.js.map +1 -0
- package/dist/generated/iso/TWD.d.ts +2 -0
- package/dist/generated/iso/TWD.d.ts.map +1 -0
- package/dist/generated/iso/TWD.js +5 -0
- package/dist/generated/iso/TWD.js.map +1 -0
- package/dist/generated/iso/TZS.d.ts +2 -0
- package/dist/generated/iso/TZS.d.ts.map +1 -0
- package/dist/generated/iso/TZS.js +5 -0
- package/dist/generated/iso/TZS.js.map +1 -0
- package/dist/generated/iso/UAH.d.ts +2 -0
- package/dist/generated/iso/UAH.d.ts.map +1 -0
- package/dist/generated/iso/UAH.js +5 -0
- package/dist/generated/iso/UAH.js.map +1 -0
- package/dist/generated/iso/UGX.d.ts +2 -0
- package/dist/generated/iso/UGX.d.ts.map +1 -0
- package/dist/generated/iso/UGX.js +5 -0
- package/dist/generated/iso/UGX.js.map +1 -0
- package/dist/generated/iso/USD.d.ts +2 -0
- package/dist/generated/iso/USD.d.ts.map +1 -0
- package/dist/generated/iso/USD.js +5 -0
- package/dist/generated/iso/USD.js.map +1 -0
- package/dist/generated/iso/USN.d.ts +2 -0
- package/dist/generated/iso/USN.d.ts.map +1 -0
- package/dist/generated/iso/USN.js +5 -0
- package/dist/generated/iso/USN.js.map +1 -0
- package/dist/generated/iso/UYI.d.ts +2 -0
- package/dist/generated/iso/UYI.d.ts.map +1 -0
- package/dist/generated/iso/UYI.js +5 -0
- package/dist/generated/iso/UYI.js.map +1 -0
- package/dist/generated/iso/UYU.d.ts +2 -0
- package/dist/generated/iso/UYU.d.ts.map +1 -0
- package/dist/generated/iso/UYU.js +5 -0
- package/dist/generated/iso/UYU.js.map +1 -0
- package/dist/generated/iso/UYW.d.ts +2 -0
- package/dist/generated/iso/UYW.d.ts.map +1 -0
- package/dist/generated/iso/UYW.js +5 -0
- package/dist/generated/iso/UYW.js.map +1 -0
- package/dist/generated/iso/UZS.d.ts +2 -0
- package/dist/generated/iso/UZS.d.ts.map +1 -0
- package/dist/generated/iso/UZS.js +5 -0
- package/dist/generated/iso/UZS.js.map +1 -0
- package/dist/generated/iso/VED.d.ts +2 -0
- package/dist/generated/iso/VED.d.ts.map +1 -0
- package/dist/generated/iso/VED.js +5 -0
- package/dist/generated/iso/VED.js.map +1 -0
- package/dist/generated/iso/VES.d.ts +2 -0
- package/dist/generated/iso/VES.d.ts.map +1 -0
- package/dist/generated/iso/VES.js +5 -0
- package/dist/generated/iso/VES.js.map +1 -0
- package/dist/generated/iso/VND.d.ts +2 -0
- package/dist/generated/iso/VND.d.ts.map +1 -0
- package/dist/generated/iso/VND.js +5 -0
- package/dist/generated/iso/VND.js.map +1 -0
- package/dist/generated/iso/VUV.d.ts +2 -0
- package/dist/generated/iso/VUV.d.ts.map +1 -0
- package/dist/generated/iso/VUV.js +5 -0
- package/dist/generated/iso/VUV.js.map +1 -0
- package/dist/generated/iso/WST.d.ts +2 -0
- package/dist/generated/iso/WST.d.ts.map +1 -0
- package/dist/generated/iso/WST.js +5 -0
- package/dist/generated/iso/WST.js.map +1 -0
- package/dist/generated/iso/XAD.d.ts +2 -0
- package/dist/generated/iso/XAD.d.ts.map +1 -0
- package/dist/generated/iso/XAD.js +5 -0
- package/dist/generated/iso/XAD.js.map +1 -0
- package/dist/generated/iso/XAF.d.ts +2 -0
- package/dist/generated/iso/XAF.d.ts.map +1 -0
- package/dist/generated/iso/XAF.js +5 -0
- package/dist/generated/iso/XAF.js.map +1 -0
- package/dist/generated/iso/XCD.d.ts +2 -0
- package/dist/generated/iso/XCD.d.ts.map +1 -0
- package/dist/generated/iso/XCD.js +5 -0
- package/dist/generated/iso/XCD.js.map +1 -0
- package/dist/generated/iso/XCG.d.ts +2 -0
- package/dist/generated/iso/XCG.d.ts.map +1 -0
- package/dist/generated/iso/XCG.js +5 -0
- package/dist/generated/iso/XCG.js.map +1 -0
- package/dist/generated/iso/XOF.d.ts +2 -0
- package/dist/generated/iso/XOF.d.ts.map +1 -0
- package/dist/generated/iso/XOF.js +5 -0
- package/dist/generated/iso/XOF.js.map +1 -0
- package/dist/generated/iso/XPF.d.ts +2 -0
- package/dist/generated/iso/XPF.d.ts.map +1 -0
- package/dist/generated/iso/XPF.js +5 -0
- package/dist/generated/iso/XPF.js.map +1 -0
- package/dist/generated/iso/YER.d.ts +2 -0
- package/dist/generated/iso/YER.d.ts.map +1 -0
- package/dist/generated/iso/YER.js +5 -0
- package/dist/generated/iso/YER.js.map +1 -0
- package/dist/generated/iso/ZAR.d.ts +2 -0
- package/dist/generated/iso/ZAR.d.ts.map +1 -0
- package/dist/generated/iso/ZAR.js +5 -0
- package/dist/generated/iso/ZAR.js.map +1 -0
- package/dist/generated/iso/ZMW.d.ts +2 -0
- package/dist/generated/iso/ZMW.d.ts.map +1 -0
- package/dist/generated/iso/ZMW.js +5 -0
- package/dist/generated/iso/ZMW.js.map +1 -0
- package/dist/generated/iso/ZWG.d.ts +2 -0
- package/dist/generated/iso/ZWG.d.ts.map +1 -0
- package/dist/generated/iso/ZWG.js +5 -0
- package/dist/generated/iso/ZWG.js.map +1 -0
- package/dist/generated/iso4217-numeric.d.ts +3 -0
- package/dist/generated/iso4217-numeric.d.ts.map +1 -0
- package/dist/generated/iso4217-numeric.js +184 -0
- package/dist/generated/iso4217-numeric.js.map +1 -0
- package/dist/generated/rbnf-de.d.ts +3 -0
- package/dist/generated/rbnf-de.d.ts.map +1 -0
- package/dist/generated/rbnf-de.js +5 -0
- package/dist/generated/rbnf-de.js.map +1 -0
- package/dist/generated/rbnf-en.d.ts +3 -0
- package/dist/generated/rbnf-en.d.ts.map +1 -0
- package/dist/generated/rbnf-en.js +5 -0
- package/dist/generated/rbnf-en.js.map +1 -0
- package/dist/generated/rbnf-es.d.ts +3 -0
- package/dist/generated/rbnf-es.d.ts.map +1 -0
- package/dist/generated/rbnf-es.js +5 -0
- package/dist/generated/rbnf-es.js.map +1 -0
- package/dist/generated/rbnf-fr.d.ts +3 -0
- package/dist/generated/rbnf-fr.d.ts.map +1 -0
- package/dist/generated/rbnf-fr.js +5 -0
- package/dist/generated/rbnf-fr.js.map +1 -0
- package/dist/generated/rbnf-it.d.ts +3 -0
- package/dist/generated/rbnf-it.d.ts.map +1 -0
- package/dist/generated/rbnf-it.js +5 -0
- package/dist/generated/rbnf-it.js.map +1 -0
- package/dist/generated/rbnf-nl.d.ts +3 -0
- package/dist/generated/rbnf-nl.d.ts.map +1 -0
- package/dist/generated/rbnf-nl.js +5 -0
- package/dist/generated/rbnf-nl.js.map +1 -0
- package/dist/generated/rbnf-pt.d.ts +3 -0
- package/dist/generated/rbnf-pt.d.ts.map +1 -0
- package/dist/generated/rbnf-pt.js +5 -0
- package/dist/generated/rbnf-pt.js.map +1 -0
- package/dist/generated/territories.d.ts +6 -0
- package/dist/generated/territories.d.ts.map +1 -0
- package/dist/generated/territories.js +275 -0
- package/dist/generated/territories.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kysely.d.ts.map +1 -1
- package/dist/kysely.js +2 -2
- package/dist/kysely.js.map +1 -1
- package/dist/math.d.ts +41 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +132 -0
- package/dist/math.js.map +1 -0
- package/dist/money.d.ts +39 -57
- package/dist/money.d.ts.map +1 -1
- package/dist/money.js +118 -128
- package/dist/money.js.map +1 -1
- package/dist/parse.js +7 -7
- package/dist/parse.js.map +1 -1
- package/dist/plugins/adyen.d.ts +2 -0
- package/dist/plugins/adyen.d.ts.map +1 -1
- package/dist/plugins/adyen.js +2 -0
- package/dist/plugins/adyen.js.map +1 -1
- package/dist/plugins/all.d.ts +18 -2
- package/dist/plugins/all.d.ts.map +1 -1
- package/dist/plugins/all.js +19 -2
- package/dist/plugins/all.js.map +1 -1
- package/dist/plugins/allocate.d.ts +1 -0
- package/dist/plugins/allocate.d.ts.map +1 -1
- package/dist/plugins/allocate.js +2 -0
- package/dist/plugins/allocate.js.map +1 -1
- package/dist/plugins/braintree.d.ts +1 -0
- package/dist/plugins/braintree.d.ts.map +1 -1
- package/dist/plugins/braintree.js +2 -0
- package/dist/plugins/braintree.js.map +1 -1
- package/dist/plugins/cash.d.ts +1 -0
- package/dist/plugins/cash.d.ts.map +1 -1
- package/dist/plugins/cash.js +2 -0
- package/dist/plugins/cash.js.map +1 -1
- package/dist/plugins/checkout.d.ts +1 -0
- package/dist/plugins/checkout.d.ts.map +1 -1
- package/dist/plugins/checkout.js +2 -0
- package/dist/plugins/checkout.js.map +1 -1
- package/dist/plugins/convert.d.ts +5 -0
- package/dist/plugins/convert.d.ts.map +1 -1
- package/dist/plugins/convert.js +2 -0
- package/dist/plugins/convert.js.map +1 -1
- package/dist/plugins/core.d.ts +78 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +104 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/exact.d.ts +1 -0
- package/dist/plugins/exact.d.ts.map +1 -1
- package/dist/plugins/exact.js +2 -0
- package/dist/plugins/exact.js.map +1 -1
- package/dist/plugins/fixed-money.d.ts +31 -0
- package/dist/plugins/fixed-money.d.ts.map +1 -0
- package/dist/plugins/fixed-money.js +29 -0
- package/dist/plugins/fixed-money.js.map +1 -0
- package/dist/plugins/format.d.ts +5 -0
- package/dist/plugins/format.d.ts.map +1 -1
- package/dist/plugins/format.js +2 -0
- package/dist/plugins/format.js.map +1 -1
- package/dist/plugins/iso.d.ts +2 -0
- package/dist/plugins/iso.d.ts.map +1 -0
- package/dist/plugins/iso.js +9 -0
- package/dist/plugins/iso.js.map +1 -0
- package/dist/plugins/klarna.d.ts +1 -0
- package/dist/plugins/klarna.d.ts.map +1 -1
- package/dist/plugins/klarna.js +2 -0
- package/dist/plugins/klarna.js.map +1 -1
- package/dist/plugins/math.d.ts +20 -0
- package/dist/plugins/math.d.ts.map +1 -0
- package/dist/plugins/math.js +24 -0
- package/dist/plugins/math.js.map +1 -0
- package/dist/plugins/paypal.d.ts +5 -0
- package/dist/plugins/paypal.d.ts.map +1 -1
- package/dist/plugins/paypal.js +6 -0
- package/dist/plugins/paypal.js.map +1 -1
- package/dist/plugins/prisma.d.ts +5 -0
- package/dist/plugins/prisma.d.ts.map +1 -1
- package/dist/plugins/prisma.js +6 -0
- package/dist/plugins/prisma.js.map +1 -1
- package/dist/plugins/stripe.d.ts +5 -0
- package/dist/plugins/stripe.d.ts.map +1 -1
- package/dist/plugins/stripe.js +6 -0
- package/dist/plugins/stripe.js.map +1 -1
- package/dist/plugins/tax.d.ts +1 -0
- package/dist/plugins/tax.d.ts.map +1 -1
- package/dist/plugins/tax.js +6 -0
- package/dist/plugins/tax.js.map +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +5 -6
- package/dist/policy.js.map +1 -1
- package/dist/pricing.d.ts +52 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +100 -0
- package/dist/pricing.js.map +1 -0
- package/dist/prisma.d.ts.map +1 -1
- package/dist/prisma.js +6 -2
- package/dist/prisma.js.map +1 -1
- package/dist/provider.js +2 -2
- package/dist/provider.js.map +1 -1
- package/dist/rate-text.d.ts +6 -0
- package/dist/rate-text.d.ts.map +1 -1
- package/dist/rate-text.js +24 -1
- package/dist/rate-text.js.map +1 -1
- package/dist/rate.d.ts.map +1 -1
- package/dist/rate.js +2 -3
- package/dist/rate.js.map +1 -1
- package/dist/rbnf.d.ts +29 -0
- package/dist/rbnf.d.ts.map +1 -0
- package/dist/rbnf.js +301 -0
- package/dist/rbnf.js.map +1 -0
- package/dist/rounding.d.ts +15 -0
- package/dist/rounding.d.ts.map +1 -1
- package/dist/rounding.js +32 -0
- package/dist/rounding.js.map +1 -1
- package/dist/scale.d.ts +8 -0
- package/dist/scale.d.ts.map +1 -0
- package/dist/scale.js +34 -0
- package/dist/scale.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +4 -5
- package/dist/schema.js.map +1 -1
- package/dist/territories.d.ts +40 -0
- package/dist/territories.d.ts.map +1 -0
- package/dist/territories.js +71 -0
- package/dist/territories.js.map +1 -0
- package/dist/testing/arbitraries.d.ts.map +1 -1
- package/dist/testing/arbitraries.js +4 -4
- package/dist/testing/arbitraries.js.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/tiers.d.ts +95 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +173 -0
- package/dist/tiers.js.map +1 -0
- package/dist/valibot.d.ts.map +1 -1
- package/dist/valibot.js +4 -1
- package/dist/valibot.js.map +1 -1
- package/dist/wire.d.ts +105 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +212 -0
- package/dist/wire.js.map +1 -0
- package/dist/words/de.d.ts +4 -0
- package/dist/words/de.d.ts.map +1 -0
- package/dist/words/de.js +8 -0
- package/dist/words/de.js.map +1 -0
- package/dist/words/en.d.ts +4 -0
- package/dist/words/en.d.ts.map +1 -0
- package/dist/words/en.js +8 -0
- package/dist/words/en.js.map +1 -0
- package/dist/words/es.d.ts +4 -0
- package/dist/words/es.d.ts.map +1 -0
- package/dist/words/es.js +8 -0
- package/dist/words/es.js.map +1 -0
- package/dist/words/fr.d.ts +4 -0
- package/dist/words/fr.d.ts.map +1 -0
- package/dist/words/fr.js +8 -0
- package/dist/words/fr.js.map +1 -0
- package/dist/words/it.d.ts +4 -0
- package/dist/words/it.d.ts.map +1 -0
- package/dist/words/it.js +8 -0
- package/dist/words/it.js.map +1 -0
- package/dist/words/nl.d.ts +4 -0
- package/dist/words/nl.d.ts.map +1 -0
- package/dist/words/nl.js +8 -0
- package/dist/words/nl.js.map +1 -0
- package/dist/words/pt.d.ts +4 -0
- package/dist/words/pt.d.ts.map +1 -0
- package/dist/words/pt.js +8 -0
- package/dist/words/pt.js.map +1 -0
- package/dist/words.d.ts +63 -0
- package/dist/words.d.ts.map +1 -0
- package/dist/words.js +107 -0
- package/dist/words.js.map +1 -0
- package/dist/zod.d.ts.map +1 -1
- package/dist/zod.js +1 -1
- package/dist/zod.js.map +1 -1
- package/package.json +312 -54
- package/src/adyen-fx.ts +1 -1
- package/src/allocate.ts +4 -3
- package/src/cash.ts +26 -0
- package/src/convert.ts +2 -3
- package/src/crypto.ts +129 -0
- package/src/currencies.ts +123 -0
- package/src/currency.ts +45 -14
- package/src/decimal.ts +98 -10
- package/src/ecb.ts +75 -16
- package/src/entries/adyen-fx.ts +5 -0
- package/src/entries/boc.ts +5 -0
- package/src/entries/boe.ts +5 -0
- package/src/entries/crypto.ts +5 -0
- package/src/entries/currencies.ts +5 -0
- package/src/entries/drizzle-mysql.ts +5 -0
- package/src/entries/drizzle-pg.ts +5 -0
- package/src/entries/drizzle-sqlite.ts +5 -0
- package/src/entries/ecb.ts +5 -0
- package/src/entries/fed.ts +5 -0
- package/src/entries/fetch.ts +5 -0
- package/src/entries/finance.ts +5 -0
- package/src/entries/historic.ts +5 -0
- package/src/entries/history.ts +5 -0
- package/src/entries/hmrc.ts +5 -0
- package/src/entries/kysely.ts +5 -0
- package/src/entries/parse.ts +5 -0
- package/src/entries/pg.ts +5 -0
- package/src/entries/policy.ts +5 -0
- package/src/entries/pricing.ts +5 -0
- package/src/entries/stripe-fx.ts +5 -0
- package/src/entries/testing-arbitraries.ts +5 -0
- package/src/entries/testing-index.ts +5 -0
- package/src/entries/testing-jest.ts +5 -0
- package/src/entries/testing-vitest.ts +5 -0
- package/src/entries/valibot.ts +5 -0
- package/src/entries/wire.ts +5 -0
- package/src/entries/zod.ts +5 -0
- package/src/exact.ts +3 -3
- package/src/fetch.ts +20 -4
- package/src/finance.ts +1219 -0
- package/src/fixed-money.ts +38 -0
- package/src/fixed.ts +86 -66
- package/src/fn.ts +17 -0
- package/src/format.ts +28 -9
- package/src/generated/crypto.ts +15 -0
- package/src/generated/iso/AED.ts +5 -0
- package/src/generated/iso/AFN.ts +5 -0
- package/src/generated/iso/ALL.ts +5 -0
- package/src/generated/iso/AMD.ts +5 -0
- package/src/generated/iso/AOA.ts +5 -0
- package/src/generated/iso/ARS.ts +5 -0
- package/src/generated/iso/AUD.ts +5 -0
- package/src/generated/iso/AWG.ts +5 -0
- package/src/generated/iso/AZN.ts +5 -0
- package/src/generated/iso/BAM.ts +5 -0
- package/src/generated/iso/BBD.ts +5 -0
- package/src/generated/iso/BDT.ts +5 -0
- package/src/generated/iso/BHD.ts +5 -0
- package/src/generated/iso/BIF.ts +5 -0
- package/src/generated/iso/BMD.ts +5 -0
- package/src/generated/iso/BND.ts +5 -0
- package/src/generated/iso/BOB.ts +5 -0
- package/src/generated/iso/BOV.ts +5 -0
- package/src/generated/iso/BRL.ts +5 -0
- package/src/generated/iso/BSD.ts +5 -0
- package/src/generated/iso/BTN.ts +5 -0
- package/src/generated/iso/BWP.ts +5 -0
- package/src/generated/iso/BYN.ts +5 -0
- package/src/generated/iso/BZD.ts +5 -0
- package/src/generated/iso/CAD.ts +5 -0
- package/src/generated/iso/CDF.ts +5 -0
- package/src/generated/iso/CHE.ts +5 -0
- package/src/generated/iso/CHF.ts +5 -0
- package/src/generated/iso/CHW.ts +5 -0
- package/src/generated/iso/CLF.ts +5 -0
- package/src/generated/iso/CLP.ts +5 -0
- package/src/generated/iso/CNY.ts +5 -0
- package/src/generated/iso/COP.ts +5 -0
- package/src/generated/iso/COU.ts +5 -0
- package/src/generated/iso/CRC.ts +5 -0
- package/src/generated/iso/CUP.ts +5 -0
- package/src/generated/iso/CVE.ts +5 -0
- package/src/generated/iso/CZK.ts +5 -0
- package/src/generated/iso/DJF.ts +5 -0
- package/src/generated/iso/DKK.ts +5 -0
- package/src/generated/iso/DOP.ts +5 -0
- package/src/generated/iso/DZD.ts +5 -0
- package/src/generated/iso/EGP.ts +5 -0
- package/src/generated/iso/ERN.ts +5 -0
- package/src/generated/iso/ETB.ts +5 -0
- package/src/generated/iso/EUR.ts +5 -0
- package/src/generated/iso/FJD.ts +5 -0
- package/src/generated/iso/FKP.ts +5 -0
- package/src/generated/iso/GBP.ts +5 -0
- package/src/generated/iso/GEL.ts +5 -0
- package/src/generated/iso/GHS.ts +5 -0
- package/src/generated/iso/GIP.ts +5 -0
- package/src/generated/iso/GMD.ts +5 -0
- package/src/generated/iso/GNF.ts +5 -0
- package/src/generated/iso/GTQ.ts +5 -0
- package/src/generated/iso/GYD.ts +5 -0
- package/src/generated/iso/HKD.ts +5 -0
- package/src/generated/iso/HNL.ts +5 -0
- package/src/generated/iso/HTG.ts +5 -0
- package/src/generated/iso/HUF.ts +5 -0
- package/src/generated/iso/IDR.ts +5 -0
- package/src/generated/iso/ILS.ts +5 -0
- package/src/generated/iso/INR.ts +5 -0
- package/src/generated/iso/IQD.ts +5 -0
- package/src/generated/iso/IRR.ts +5 -0
- package/src/generated/iso/ISK.ts +5 -0
- package/src/generated/iso/JMD.ts +5 -0
- package/src/generated/iso/JOD.ts +5 -0
- package/src/generated/iso/JPY.ts +5 -0
- package/src/generated/iso/KES.ts +5 -0
- package/src/generated/iso/KGS.ts +5 -0
- package/src/generated/iso/KHR.ts +5 -0
- package/src/generated/iso/KMF.ts +5 -0
- package/src/generated/iso/KPW.ts +5 -0
- package/src/generated/iso/KRW.ts +5 -0
- package/src/generated/iso/KWD.ts +5 -0
- package/src/generated/iso/KYD.ts +5 -0
- package/src/generated/iso/KZT.ts +5 -0
- package/src/generated/iso/LAK.ts +5 -0
- package/src/generated/iso/LBP.ts +5 -0
- package/src/generated/iso/LKR.ts +5 -0
- package/src/generated/iso/LRD.ts +5 -0
- package/src/generated/iso/LSL.ts +5 -0
- package/src/generated/iso/LYD.ts +5 -0
- package/src/generated/iso/MAD.ts +5 -0
- package/src/generated/iso/MDL.ts +5 -0
- package/src/generated/iso/MGA.ts +5 -0
- package/src/generated/iso/MKD.ts +5 -0
- package/src/generated/iso/MMK.ts +5 -0
- package/src/generated/iso/MNT.ts +5 -0
- package/src/generated/iso/MOP.ts +5 -0
- package/src/generated/iso/MRU.ts +5 -0
- package/src/generated/iso/MUR.ts +5 -0
- package/src/generated/iso/MVR.ts +5 -0
- package/src/generated/iso/MWK.ts +5 -0
- package/src/generated/iso/MXN.ts +5 -0
- package/src/generated/iso/MXV.ts +5 -0
- package/src/generated/iso/MYR.ts +5 -0
- package/src/generated/iso/MZN.ts +5 -0
- package/src/generated/iso/NAD.ts +5 -0
- package/src/generated/iso/NGN.ts +5 -0
- package/src/generated/iso/NIO.ts +5 -0
- package/src/generated/iso/NOK.ts +5 -0
- package/src/generated/iso/NPR.ts +5 -0
- package/src/generated/iso/NZD.ts +5 -0
- package/src/generated/iso/OMR.ts +5 -0
- package/src/generated/iso/PAB.ts +5 -0
- package/src/generated/iso/PEN.ts +5 -0
- package/src/generated/iso/PGK.ts +5 -0
- package/src/generated/iso/PHP.ts +5 -0
- package/src/generated/iso/PKR.ts +5 -0
- package/src/generated/iso/PLN.ts +5 -0
- package/src/generated/iso/PYG.ts +5 -0
- package/src/generated/iso/QAR.ts +5 -0
- package/src/generated/iso/RON.ts +5 -0
- package/src/generated/iso/RSD.ts +5 -0
- package/src/generated/iso/RUB.ts +5 -0
- package/src/generated/iso/RWF.ts +5 -0
- package/src/generated/iso/SAR.ts +5 -0
- package/src/generated/iso/SBD.ts +5 -0
- package/src/generated/iso/SCR.ts +5 -0
- package/src/generated/iso/SDG.ts +5 -0
- package/src/generated/iso/SEK.ts +5 -0
- package/src/generated/iso/SGD.ts +5 -0
- package/src/generated/iso/SHP.ts +5 -0
- package/src/generated/iso/SLE.ts +5 -0
- package/src/generated/iso/SOS.ts +5 -0
- package/src/generated/iso/SRD.ts +5 -0
- package/src/generated/iso/SSP.ts +5 -0
- package/src/generated/iso/STN.ts +5 -0
- package/src/generated/iso/SVC.ts +5 -0
- package/src/generated/iso/SYP.ts +5 -0
- package/src/generated/iso/SZL.ts +5 -0
- package/src/generated/iso/THB.ts +5 -0
- package/src/generated/iso/TJS.ts +5 -0
- package/src/generated/iso/TMT.ts +5 -0
- package/src/generated/iso/TND.ts +5 -0
- package/src/generated/iso/TOP.ts +5 -0
- package/src/generated/iso/TRY.ts +5 -0
- package/src/generated/iso/TTD.ts +5 -0
- package/src/generated/iso/TWD.ts +5 -0
- package/src/generated/iso/TZS.ts +5 -0
- package/src/generated/iso/UAH.ts +5 -0
- package/src/generated/iso/UGX.ts +5 -0
- package/src/generated/iso/USD.ts +5 -0
- package/src/generated/iso/USN.ts +5 -0
- package/src/generated/iso/UYI.ts +5 -0
- package/src/generated/iso/UYU.ts +5 -0
- package/src/generated/iso/UYW.ts +5 -0
- package/src/generated/iso/UZS.ts +5 -0
- package/src/generated/iso/VED.ts +5 -0
- package/src/generated/iso/VES.ts +5 -0
- package/src/generated/iso/VND.ts +5 -0
- package/src/generated/iso/VUV.ts +5 -0
- package/src/generated/iso/WST.ts +5 -0
- package/src/generated/iso/XAD.ts +5 -0
- package/src/generated/iso/XAF.ts +5 -0
- package/src/generated/iso/XCD.ts +5 -0
- package/src/generated/iso/XCG.ts +5 -0
- package/src/generated/iso/XOF.ts +5 -0
- package/src/generated/iso/XPF.ts +5 -0
- package/src/generated/iso/YER.ts +5 -0
- package/src/generated/iso/ZAR.ts +5 -0
- package/src/generated/iso/ZMW.ts +5 -0
- package/src/generated/iso/ZWG.ts +5 -0
- package/src/generated/iso4217-numeric.ts +184 -0
- package/src/generated/rbnf-de.ts +5 -0
- package/src/generated/rbnf-en.ts +5 -0
- package/src/generated/rbnf-es.ts +5 -0
- package/src/generated/rbnf-fr.ts +5 -0
- package/src/generated/rbnf-it.ts +5 -0
- package/src/generated/rbnf-nl.ts +5 -0
- package/src/generated/rbnf-pt.ts +5 -0
- package/src/generated/territories.ts +277 -0
- package/src/index.ts +3 -0
- package/src/kysely.ts +4 -3
- package/src/math.ts +167 -0
- package/src/money.ts +138 -140
- package/src/parse.ts +7 -7
- package/src/plugins/adyen.ts +2 -0
- package/src/plugins/all.ts +19 -1
- package/src/plugins/allocate.ts +2 -0
- package/src/plugins/braintree.ts +2 -0
- package/src/plugins/cash.ts +2 -0
- package/src/plugins/checkout.ts +2 -0
- package/src/plugins/convert.ts +2 -0
- package/src/plugins/core.ts +195 -0
- package/src/plugins/exact.ts +2 -0
- package/src/plugins/fixed-money.ts +57 -0
- package/src/plugins/format.ts +2 -0
- package/src/plugins/iso.ts +9 -0
- package/src/plugins/klarna.ts +2 -0
- package/src/plugins/math.ts +43 -0
- package/src/plugins/paypal.ts +2 -0
- package/src/plugins/prisma.ts +2 -0
- package/src/plugins/stripe.ts +2 -0
- package/src/plugins/tax.ts +2 -0
- package/src/policy.ts +5 -8
- package/src/pricing.ts +155 -0
- package/src/prisma.ts +6 -1
- package/src/provider.ts +2 -2
- package/src/rate-text.ts +27 -1
- package/src/rate.ts +2 -2
- package/src/rbnf.ts +389 -0
- package/src/rounding.ts +34 -0
- package/src/scale.ts +42 -0
- package/src/schema.ts +4 -7
- package/src/territories.ts +102 -0
- package/src/testing/arbitraries.ts +4 -4
- package/src/testing/index.ts +1 -1
- package/src/tiers.ts +284 -0
- package/src/valibot.ts +4 -1
- package/src/wire.ts +322 -0
- package/src/words/de.ts +9 -0
- package/src/words/en.ts +9 -0
- package/src/words/es.ts +9 -0
- package/src/words/fr.ts +9 -0
- package/src/words/it.ts +9 -0
- package/src/words/nl.ts +9 -0
- package/src/words/pt.ts +9 -0
- package/src/words.ts +168 -0
- package/src/zod.ts +1 -1
- package/dist/plugins/fixed.d.ts +0 -17
- package/dist/plugins/fixed.d.ts.map +0 -1
- package/dist/plugins/fixed.js +0 -13
- package/dist/plugins/fixed.js.map +0 -1
- package/src/plugins/fixed.ts +0 -29
package/src/allocate.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseDecimal, pow10n, normalizeMinor } from './decimal.js';
|
|
1
|
+
import { faithfulDecimal, parseDecimal, pow10n, normalizeMinor } from './decimal.js';
|
|
2
2
|
import {
|
|
3
3
|
CurrencyMismatchError,
|
|
4
4
|
compare,
|
|
@@ -45,8 +45,9 @@ function weightsScaled(ws: readonly Weight[]): { ws: bigint[]; scale: number } {
|
|
|
45
45
|
if (typeof weight === 'number' && Number.isSafeInteger(weight)) {
|
|
46
46
|
return { digits: BigInt(weight), scale: 0 };
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
return parseDecimal(
|
|
49
|
+
typeof weight === 'number' ? faithfulDecimal(weight, 'pass weights as strings') : weight,
|
|
50
|
+
);
|
|
50
51
|
});
|
|
51
52
|
for (const item of parsed) {
|
|
52
53
|
if (item.digits < 0n) {
|
package/src/cash.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import { roundingPolicy } from './policy.js';
|
|
11
11
|
import { divideAndRound, divideAndRoundBigint, type RoundingMode } from './rounding.js';
|
|
12
12
|
import { currencyExponent } from './currency.js';
|
|
13
|
+
import { formatScaled } from './decimal.js';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Rounds to a multiple of `increment` (same currency): roundToIncrement(CHF 10.03, CHF 0.05) = CHF
|
|
@@ -180,4 +181,29 @@ export function currencyDigits(currency: string, options?: CurrencyDigitsOptions
|
|
|
180
181
|
return exponent;
|
|
181
182
|
}
|
|
182
183
|
|
|
184
|
+
/** Options for `cashUnit`. */
|
|
185
|
+
export interface CashUnitOptions {
|
|
186
|
+
/** The country (ISO 3166 alpha-2), which EUR needs. */
|
|
187
|
+
readonly country?: string;
|
|
188
|
+
/** Whether to use rules backed only by secondary sources (default true). */
|
|
189
|
+
readonly includeUnverified?: boolean;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* The smallest cash step, in major units, as an exact decimal string with the currency's decimals:
|
|
194
|
+
* the smallest coin in use where the cash rules know one. `cashUnit('CHF')` is '0.05',
|
|
195
|
+
* `cashUnit('DKK')` is '0.50', `cashUnit('SEK')` is '1.00' and `cashUnit('EUR', { country: 'NL' })`
|
|
196
|
+
* is '0.05'. A currency without a cash rule (or EUR without a country that has one) gives its minor
|
|
197
|
+
* unit, '0.01' for GBP. Throws for unknown codes, like `currencyExponent`.
|
|
198
|
+
*/
|
|
199
|
+
export function cashUnit(currency: string, options?: CashUnitOptions): string {
|
|
200
|
+
const exponent = currencyExponent(currency);
|
|
201
|
+
const rule = cashRule(currency, options?.country);
|
|
202
|
+
if (!rule || (options?.includeUnverified === false && !rule.verified)) {
|
|
203
|
+
return formatScaled(1, exponent);
|
|
204
|
+
}
|
|
205
|
+
// with the currency's decimals, as amounts are written everywhere else: SEK's step is '1.00'
|
|
206
|
+
return formatScaled(rule.increment, exponent);
|
|
207
|
+
}
|
|
208
|
+
|
|
183
209
|
export { CASH_RULES, type CashRule };
|
package/src/convert.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
// `ducat/convert` free functions: exact exchange rates and conversion that rounds once.
|
|
2
|
-
import { currencyExponent } from './currency.js';
|
|
3
2
|
import { exact, type Rounded } from './exact.js';
|
|
4
3
|
import { ratio, type Factor } from './decimal.js';
|
|
5
|
-
import { make, type CurrencyInput, type Money, type RoundingInput } from './money.js';
|
|
4
|
+
import { make, resolveScale, type CurrencyInput, type Money, type RoundingInput } from './money.js';
|
|
6
5
|
import { rateOf, type RateProvider } from './provider.js';
|
|
7
6
|
import {
|
|
8
7
|
convertWithPolicy,
|
|
@@ -140,7 +139,7 @@ export function convert(
|
|
|
140
139
|
if (typeof rounding === 'function') {
|
|
141
140
|
return convertWithPolicy(money, to, rate, rounding, maybeOptions);
|
|
142
141
|
}
|
|
143
|
-
const scale = maybeOptions?.scale
|
|
142
|
+
const scale = resolveScale(to, maybeOptions?.scale);
|
|
144
143
|
const minor = multiplyByRatioAtScale(money.minor, rate, scale - money.scale, rounding);
|
|
145
144
|
return make(to, minor, scale);
|
|
146
145
|
}
|
package/src/crypto.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/crypto`: crypto currencies and tokens as an opt-in table (BTC with 8 decimals,
|
|
3
|
+
* ETH with 18, SOL with 9, and common Ethereum tokens), and exact conversions to and from base
|
|
4
|
+
* units (satoshi, wei, lamport). Nothing is registered until you ask:
|
|
5
|
+
*
|
|
6
|
+
* defineCryptoCurrencies(['BTC', 'ETH']);
|
|
7
|
+
* money('0.5', 'ETH').toString() // '0.500000000000000000 ETH'
|
|
8
|
+
* toBaseUnits(money('0.00000001', 'BTC')) // 1n
|
|
9
|
+
* fromBaseUnits('1000000000000000000', 'ETH').toString() // '1.000000000000000000 ETH'
|
|
10
|
+
*
|
|
11
|
+
* Amounts beyond 2^53 base units (most ETH amounts in wei) use Money's bigint path, so they stay
|
|
12
|
+
* exact. The decimals come from each unit's defining source (see data/crypto-units.json).
|
|
13
|
+
*/
|
|
14
|
+
import { currencyExponent, defineCurrency } from './currency.js';
|
|
15
|
+
import { pow10n } from './decimal.js';
|
|
16
|
+
import { CRYPTO_UNIT_TABLE } from './generated/crypto.js';
|
|
17
|
+
import { fromMinor, type CurrencyInput, type Money } from './money.js';
|
|
18
|
+
import { RoundingError } from './rounding.js';
|
|
19
|
+
|
|
20
|
+
/** A code in the crypto table. */
|
|
21
|
+
export type CryptoCurrencyCode = keyof typeof CRYPTO_UNIT_TABLE;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Every crypto code, for the `CurrencyCode` type:
|
|
25
|
+
*
|
|
26
|
+
* declare module '@ducatjs/money' {
|
|
27
|
+
* interface CustomCurrencies extends CryptoCurrencies {}
|
|
28
|
+
* }
|
|
29
|
+
*/
|
|
30
|
+
export type CryptoCurrencies = { readonly [Code in CryptoCurrencyCode]: true };
|
|
31
|
+
|
|
32
|
+
/** One entry of the crypto table. */
|
|
33
|
+
export interface CryptoUnit {
|
|
34
|
+
readonly code: CryptoCurrencyCode;
|
|
35
|
+
readonly name: string;
|
|
36
|
+
/** Decimal places of one unit in base units: 8 for BTC (satoshi), 18 for ETH (wei). */
|
|
37
|
+
readonly decimals: number;
|
|
38
|
+
/** The base unit's name, for native currencies: 'satoshi', 'wei', 'lamport'. */
|
|
39
|
+
readonly baseUnit?: string;
|
|
40
|
+
/** The network the decimals are for. A token's decimals can differ on another network. */
|
|
41
|
+
readonly network: string;
|
|
42
|
+
/** The token's contract address on that network, for tokens. */
|
|
43
|
+
readonly contract?: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const table: Readonly<Record<string, Omit<CryptoUnit, 'code'>>> = CRYPTO_UNIT_TABLE;
|
|
47
|
+
|
|
48
|
+
/** The table entry for a code, or undefined for a code that isn't in it. */
|
|
49
|
+
export function cryptoUnit(code: string): CryptoUnit | undefined {
|
|
50
|
+
// own properties only, so 'toString' and friends are not currencies
|
|
51
|
+
if (!Object.hasOwn(table, code)) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return { code: code as CryptoCurrencyCode, ...table[code]! };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Every entry of the table, by code. */
|
|
58
|
+
export function cryptoUnits(): CryptoUnit[] {
|
|
59
|
+
return Object.keys(table).map((code) => cryptoUnit(code)!);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Registers crypto codes with `defineCurrency`, with their decimals as the exponent: all of them,
|
|
64
|
+
* or only `codes`. Registering one again is harmless; a code already defined with other decimals
|
|
65
|
+
* throws, as `defineCurrency` does.
|
|
66
|
+
*/
|
|
67
|
+
export function defineCryptoCurrencies(codes?: readonly CryptoCurrencyCode[]): void {
|
|
68
|
+
const selected: readonly string[] = codes ?? Object.keys(table);
|
|
69
|
+
|
|
70
|
+
// check every code first, so a typo registers nothing
|
|
71
|
+
for (const code of selected) {
|
|
72
|
+
if (!Object.hasOwn(table, code)) {
|
|
73
|
+
throw new RangeError(`${code} is not in the crypto currency table`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
for (const code of selected) {
|
|
78
|
+
defineCurrency(code, table[code]!.decimals);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The amount as a count of the currency's base units (satoshi for BTC, wei for ETH), always a
|
|
84
|
+
* bigint since wei amounts are rarely safe integers. The base unit is 10^-exponent of the currency
|
|
85
|
+
* (its decimals, once registered), so this works for any registered code. An amount with more
|
|
86
|
+
* decimals than that throws a RoundingError: there is no fraction of a base unit.
|
|
87
|
+
*/
|
|
88
|
+
export function toBaseUnits(money: Money): bigint {
|
|
89
|
+
const decimals = currencyExponent(money.currency);
|
|
90
|
+
const minor = BigInt(money.minor);
|
|
91
|
+
if (money.scale <= decimals) {
|
|
92
|
+
return minor * pow10n(decimals - money.scale);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// more decimals than the currency has: only exact when the extra digits are zeros
|
|
96
|
+
const divisor = pow10n(money.scale - decimals);
|
|
97
|
+
if (minor % divisor !== 0n) {
|
|
98
|
+
throw new RoundingError(
|
|
99
|
+
`${money.toString()} is not a whole number of base units (${decimals} decimals)`,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
return minor / divisor;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// A plain integer: an optional minus sign and digits, no leading zeros, nothing else.
|
|
106
|
+
const BASE_UNITS = /^-?(?:0|[1-9]\d*)$/;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Money from a count of base units: `fromBaseUnits('100000000', 'BTC')` is 1.00000000 BTC. The
|
|
110
|
+
* count is a bigint, a safe integer or a decimal string. Strings are parsed strictly, since they
|
|
111
|
+
* usually come from an API or a node: digits with an optional minus sign, and nothing else (no
|
|
112
|
+
* spaces, signs, decimal points, exponents, separators or leading zeros). Anything else throws a
|
|
113
|
+
* SyntaxError. A hexadecimal quantity from an Ethereum node goes through `BigInt('0x…')` first.
|
|
114
|
+
* The result has the currency's exponent as its scale.
|
|
115
|
+
*/
|
|
116
|
+
export function fromBaseUnits<C extends CurrencyInput>(
|
|
117
|
+
units: bigint | number | string,
|
|
118
|
+
currency: C,
|
|
119
|
+
): Money<C> {
|
|
120
|
+
const decimals = currencyExponent(currency);
|
|
121
|
+
if (typeof units === 'string') {
|
|
122
|
+
// 1000 digits is far beyond any real amount, and bounds the work for untrusted input
|
|
123
|
+
if (units.length > 1001 || !BASE_UNITS.test(units)) {
|
|
124
|
+
throw new SyntaxError(`Invalid base-unit count "${units}": expected an integer like "1000"`);
|
|
125
|
+
}
|
|
126
|
+
return fromMinor(BigInt(units), currency, decimals);
|
|
127
|
+
}
|
|
128
|
+
return fromMinor(units, currency, decimals);
|
|
129
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/currencies`: currency facts beyond the exponent. ISO 4217 numeric codes both
|
|
3
|
+
* ways, the size of the minor unit, and names and symbols per locale, which come from the runtime's
|
|
4
|
+
* `Intl` rather than a bundled table. Which currencies a territory uses is in
|
|
5
|
+
* `@ducatjs/money/territories`.
|
|
6
|
+
*/
|
|
7
|
+
import { currencyExponent } from './currency.js';
|
|
8
|
+
import { formatScaled } from './decimal.js';
|
|
9
|
+
import { ISO_NUMERIC_CODES } from './generated/iso4217-numeric.js';
|
|
10
|
+
|
|
11
|
+
// ---------------------------------------------------------------------------------------------
|
|
12
|
+
// Numeric codes
|
|
13
|
+
// ---------------------------------------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The ISO 4217 numeric code of an active currency, three digits as published: `'978'` for EUR,
|
|
17
|
+
* `'008'` for ALL. Card networks, ISO 8583 and some ISO 20022 messages carry currencies this way.
|
|
18
|
+
* `undefined` for a code ISO doesn't list (a custom or withdrawn currency).
|
|
19
|
+
*/
|
|
20
|
+
export function numericCode(currency: string): string | undefined {
|
|
21
|
+
return Object.hasOwn(ISO_NUMERIC_CODES, currency) ? ISO_NUMERIC_CODES[currency] : undefined;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let currenciesByNumeric: Map<string, string> | undefined;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The active ISO 4217 currency with a numeric code: `currencyFromNumeric('978')` and
|
|
28
|
+
* `currencyFromNumeric(978)` are `'EUR'`, and `'008'`, `'8'` and `8` are all `'ALL'`. `undefined`
|
|
29
|
+
* for a number ISO doesn't assign; a value that isn't a whole number from 0 to 999 throws a
|
|
30
|
+
* RangeError.
|
|
31
|
+
*/
|
|
32
|
+
export function currencyFromNumeric(numeric: string | number): string | undefined {
|
|
33
|
+
const text = typeof numeric === 'number' ? String(numeric) : numeric.trim();
|
|
34
|
+
if (!/^\d{1,3}$/.test(text)) {
|
|
35
|
+
throw new RangeError(`Not an ISO 4217 numeric code: ${String(numeric)}`);
|
|
36
|
+
}
|
|
37
|
+
if (currenciesByNumeric === undefined) {
|
|
38
|
+
currenciesByNumeric = new Map();
|
|
39
|
+
for (const [currency, code] of Object.entries(ISO_NUMERIC_CODES)) {
|
|
40
|
+
currenciesByNumeric.set(code, currency);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return currenciesByNumeric.get(text.padStart(3, '0'));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// ---------------------------------------------------------------------------------------------
|
|
47
|
+
// Minor unit
|
|
48
|
+
// ---------------------------------------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The size of the currency's minor unit, in major units, as an exact decimal string: `'0.01'` for
|
|
52
|
+
* EUR, `'1'` for JPY (no minor unit), `'0.001'` for KWD and BHD. It follows the exponent, so a
|
|
53
|
+
* currency registered with `defineCurrency` works too; an unknown code throws, as
|
|
54
|
+
* `currencyExponent` does. For the smallest coin, see `cashUnit` in `@ducatjs/money/cash`.
|
|
55
|
+
*/
|
|
56
|
+
export function minorUnit(currency: string): string {
|
|
57
|
+
return formatScaled(1, currencyExponent(currency));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// ---------------------------------------------------------------------------------------------
|
|
61
|
+
// Names and symbols, from Intl
|
|
62
|
+
// ---------------------------------------------------------------------------------------------
|
|
63
|
+
|
|
64
|
+
const displayNames = /* @__PURE__ */ new Map<string, Intl.DisplayNames>();
|
|
65
|
+
const symbolFormats = /* @__PURE__ */ new Map<string, Intl.NumberFormat>();
|
|
66
|
+
|
|
67
|
+
function cached<T>(cache: Map<string, T>, key: string, build: () => T): T {
|
|
68
|
+
let value = cache.get(key);
|
|
69
|
+
if (value === undefined) {
|
|
70
|
+
// a handful of locales in practice; the bound keeps a server that sees many from growing
|
|
71
|
+
if (cache.size >= 64) {
|
|
72
|
+
cache.clear();
|
|
73
|
+
}
|
|
74
|
+
value = build();
|
|
75
|
+
cache.set(key, value);
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The currency's name in a locale, from the runtime's `Intl.DisplayNames`: `currencyName('EUR',
|
|
82
|
+
* 'en')` is 'Euro' and `currencyName('EUR', 'de')` is 'Euro'; `currencyName('CHF', 'fr')` is 'franc
|
|
83
|
+
* suisse'. `undefined` when the runtime has no name for the code. Names follow the runtime's CLDR
|
|
84
|
+
* data, so they can differ between runtimes and versions.
|
|
85
|
+
*/
|
|
86
|
+
export function currencyName(currency: string, locale: string): string | undefined {
|
|
87
|
+
const names = cached(
|
|
88
|
+
displayNames,
|
|
89
|
+
locale,
|
|
90
|
+
() => new Intl.DisplayNames(locale, { type: 'currency', fallback: 'none' }),
|
|
91
|
+
);
|
|
92
|
+
return names.of(currency);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Options for `currencySymbol`. */
|
|
96
|
+
export interface CurrencySymbolOptions {
|
|
97
|
+
/**
|
|
98
|
+
* 'symbol' (default) is the symbol the locale uses where it must not be ambiguous ('US$' in
|
|
99
|
+
* en-CA, 'CA$' in en-US); 'narrow' is the shortest form ('$'), as `Intl.NumberFormat`'s
|
|
100
|
+
* `narrowSymbol`.
|
|
101
|
+
*/
|
|
102
|
+
readonly display?: 'symbol' | 'narrow';
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The currency's symbol in a locale, from the runtime's `Intl.NumberFormat`: `currencySymbol('EUR',
|
|
107
|
+
* 'en-US')` is '€', `currencySymbol('USD', 'en-CA')` is 'US$', and `currencySymbol('USD', 'en-CA',
|
|
108
|
+
* { display: 'narrow' })` is '$'. A currency without a symbol in that locale gives its code.
|
|
109
|
+
*/
|
|
110
|
+
export function currencySymbol(
|
|
111
|
+
currency: string,
|
|
112
|
+
locale: string,
|
|
113
|
+
options?: CurrencySymbolOptions,
|
|
114
|
+
): string {
|
|
115
|
+
const display = options?.display === 'narrow' ? 'narrowSymbol' : 'symbol';
|
|
116
|
+
const format = cached(
|
|
117
|
+
symbolFormats,
|
|
118
|
+
`${locale}\u0000${currency}\u0000${display}`,
|
|
119
|
+
() => new Intl.NumberFormat(locale, { style: 'currency', currency, currencyDisplay: display }),
|
|
120
|
+
);
|
|
121
|
+
const part = format.formatToParts(0).find((candidate) => candidate.type === 'currency');
|
|
122
|
+
return part?.value ?? currency;
|
|
123
|
+
}
|
package/src/currency.ts
CHANGED
|
@@ -12,9 +12,34 @@ export interface CustomCurrencies {}
|
|
|
12
12
|
/** A known currency code: ISO 4217, or one added to `CustomCurrencies`. */
|
|
13
13
|
export type CurrencyCode = IsoCurrencyCode | (keyof CustomCurrencies & string);
|
|
14
14
|
|
|
15
|
-
const custom = new Map<string, number>();
|
|
16
15
|
const iso = ISO_EXPONENTS as Readonly<Record<string, number>>;
|
|
17
16
|
|
|
17
|
+
// The exponents of the currencies this program can use. `@ducatjs/money/iso/<CODE>` and
|
|
18
|
+
// `defineCurrency` add codes to `known` one at a time; `@ducatjs/money/iso` (which every entry except
|
|
19
|
+
// `/fn` imports) makes the ISO table literal its prototype rather than copying it. That keeps the
|
|
20
|
+
// lookup as fast as reading the literal directly: V8 folds a load through a stable prototype, while
|
|
21
|
+
// a copy of 165 keys, or a null-prototype object, is a slow dictionary (#243 doubled fromMinor's
|
|
22
|
+
// time that way). `known` has a prototype, so a value counts only when it's a number: `toString`
|
|
23
|
+
// is a function and `__proto__` an object. A number someone puts on Object.prototype would count,
|
|
24
|
+
// as it did when main read the ISO literal directly; the alternative is an own-property check on
|
|
25
|
+
// every lookup.
|
|
26
|
+
const known: Record<string, number> = {};
|
|
27
|
+
|
|
28
|
+
function exponentOf(code: string): number | undefined {
|
|
29
|
+
const exponent = known[code];
|
|
30
|
+
return typeof exponent === 'number' ? exponent : undefined;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** @internal Registers an ISO 4217 code; the generated `iso/<CODE>` modules call it. */
|
|
34
|
+
export function isoCurrency(code: string, exponent: number): void {
|
|
35
|
+
known[code] = exponent;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** @internal Registers every ISO 4217 code, for `@ducatjs/money/iso`. */
|
|
39
|
+
export function registerIsoCurrencies(): void {
|
|
40
|
+
Object.setPrototypeOf(known, iso);
|
|
41
|
+
}
|
|
42
|
+
|
|
18
43
|
/**
|
|
19
44
|
* Registers a currency that is not in ISO 4217 (crypto, loyalty points, withdrawn codes you still
|
|
20
45
|
* hold balances in). ISO codes cannot be redefined: use an explicit `scale` for extra precision.
|
|
@@ -26,31 +51,37 @@ export function defineCurrency(code: string, exponent: number): void {
|
|
|
26
51
|
if (typeof iso[code] === 'number') {
|
|
27
52
|
throw new TypeError(`${code} is an ISO 4217 currency and cannot be redefined`);
|
|
28
53
|
}
|
|
29
|
-
|
|
54
|
+
// `known` has a prototype, where `__proto__` is a setter and `toString` a method
|
|
55
|
+
if (code in Object.prototype) {
|
|
56
|
+
throw new TypeError(`${code} can't be a currency code`);
|
|
57
|
+
}
|
|
58
|
+
const prev = exponentOf(code);
|
|
30
59
|
if (prev !== undefined && prev !== exponent) {
|
|
31
60
|
throw new TypeError(`${code} is already defined with exponent ${prev}`);
|
|
32
61
|
}
|
|
33
|
-
|
|
62
|
+
known[code] = exponent;
|
|
34
63
|
}
|
|
35
64
|
|
|
36
65
|
/** The minor-unit exponent of a currency (EUR 2, JPY 0, KWD 3). Throws for unknown codes. */
|
|
37
66
|
export function currencyExponent(code: string): number {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (customExponent !== undefined) {
|
|
44
|
-
return customExponent;
|
|
45
|
-
}
|
|
67
|
+
const exponent = exponentOf(code);
|
|
68
|
+
return exponent === undefined ? unknownCurrency(code) : exponent;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function unknownCurrency(code: string): never {
|
|
46
72
|
throw new RangeError(
|
|
47
|
-
|
|
73
|
+
// true wherever it's thrown: with the root entry every ISO code is registered already
|
|
74
|
+
`Unknown currency "${code}" (ISO codes with /fn alone: import @ducatjs/money/iso; others: defineCurrency)`,
|
|
48
75
|
);
|
|
49
76
|
}
|
|
50
77
|
|
|
51
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Whether the code is registered: an ISO 4217 code (every one wherever an entry other than `/fn` is
|
|
80
|
+
* imported; in a `/fn`-only program, the ones imported from `@ducatjs/money/iso`), or a code from
|
|
81
|
+
* `defineCurrency`.
|
|
82
|
+
*/
|
|
52
83
|
export function isCurrency(code: string): code is CurrencyCode {
|
|
53
|
-
return
|
|
84
|
+
return exponentOf(code) !== undefined;
|
|
54
85
|
}
|
|
55
86
|
|
|
56
87
|
export {
|
package/src/decimal.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
// Exact decimal-string handling. No floating point is used on amounts: numbers given as factors are
|
|
2
2
|
// converted through their shortest round-trip decimal representation (String(x)), never multiplied.
|
|
3
3
|
|
|
4
|
+
import type { Fixed } from './fixed.js';
|
|
5
|
+
|
|
4
6
|
/** The largest minor-unit count held as a number (2^53 - 1); larger values are bigints. */
|
|
5
7
|
const MAX_SAFE_MINOR = Number.MAX_SAFE_INTEGER;
|
|
6
|
-
const MAXN = BigInt(MAX_SAFE_MINOR);
|
|
8
|
+
const MAXN = /* @__PURE__ */ BigInt(MAX_SAFE_MINOR);
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* An exact rational factor num/den (den > 0). `n`/`d` hold the same values as numbers when both are
|
|
@@ -18,8 +20,11 @@ export interface Ratio {
|
|
|
18
20
|
readonly d: number;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Anything accepted where a multiplier, rate or percentage is expected. A `Fixed` is read exactly,
|
|
25
|
+
* as its scaled integer over 10^scale.
|
|
26
|
+
*/
|
|
27
|
+
export type Factor = number | bigint | string | Ratio | Fixed;
|
|
23
28
|
|
|
24
29
|
const POW10N: bigint[] = [];
|
|
25
30
|
/** 10^exponent as a bigint, cached. */
|
|
@@ -108,7 +113,7 @@ export const MAX_DECIMAL_SCALE = 1000;
|
|
|
108
113
|
|
|
109
114
|
/** Parses a decimal string, allowing exponent notation ("1e-7", as produced by String(1e-7)). */
|
|
110
115
|
export function parseDecimal(input: string): { digits: bigint; scale: number } {
|
|
111
|
-
const match = EXP_RE.exec(input
|
|
116
|
+
const match = EXP_RE.exec(input);
|
|
112
117
|
if (!match) {
|
|
113
118
|
throw new SyntaxError(`Invalid decimal string "${input}"`);
|
|
114
119
|
}
|
|
@@ -127,6 +132,53 @@ export function parseDecimal(input: string): { digits: bigint; scale: number } {
|
|
|
127
132
|
return { digits: sign === '-' ? -digits : digits, scale };
|
|
128
133
|
}
|
|
129
134
|
|
|
135
|
+
/**
|
|
136
|
+
* A double holds 15 significant decimal digits faithfully (DBL_DIG): a number whose shortest form
|
|
137
|
+
* has no more than that is the decimal its author wrote. 0.1 + 0.2 reads back as
|
|
138
|
+
* 0.30000000000000004 and 1 / 0.52 as 1.9230769230769231 (17 digits): those are float artefacts.
|
|
139
|
+
*/
|
|
140
|
+
export const MAX_FAITHFUL_DIGITS = 15;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* A number's shortest decimal form, which must have at most 15 significant digits (see
|
|
144
|
+
* MAX_FAITHFUL_DIGITS). `fix` says what to do instead, for the error message.
|
|
145
|
+
*/
|
|
146
|
+
export function faithfulDecimal(value: number, fix: string): string {
|
|
147
|
+
// The shortest form has at most 15 digits exactly when rounding to 15 digits gives the same
|
|
148
|
+
// double back: shortest means the fewest digits that round-trip.
|
|
149
|
+
// Safe integers are exact whatever their digit count, and NaN and the infinities pass through
|
|
150
|
+
// for the caller's parser to reject. (Today's callers take safe integers on a path of their own.)
|
|
151
|
+
if (
|
|
152
|
+
!Number.isSafeInteger(value) &&
|
|
153
|
+
Number.isFinite(value) &&
|
|
154
|
+
Number(value.toPrecision(MAX_FAITHFUL_DIGITS)) !== value
|
|
155
|
+
) {
|
|
156
|
+
throw new RangeError(
|
|
157
|
+
`${value} has more than ${MAX_FAITHFUL_DIGITS} significant digits; ${fix}`,
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
return String(value);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Returns `scale` if it is a valid scale: an integer from 0 to MAX_DECIMAL_SCALE. Scales are never
|
|
165
|
+
* negative: round to tens or hundreds with an increment (`roundToIncrement`, a rounding policy).
|
|
166
|
+
*/
|
|
167
|
+
export function checkScale(scale: number): number {
|
|
168
|
+
// On hot paths (Fixed, ExactMoney, policies), so one comparison does most of the work: `>>> 0`
|
|
169
|
+
// leaves an integer from 0 to 2^32 - 1 unchanged and changes negatives, fractions, NaN and the
|
|
170
|
+
// infinities.
|
|
171
|
+
if (scale >>> 0 !== scale || scale > MAX_DECIMAL_SCALE) {
|
|
172
|
+
invalidScale(scale);
|
|
173
|
+
}
|
|
174
|
+
return scale;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Kept out of checkScale, so the check stays small enough to inline.
|
|
178
|
+
function invalidScale(scale: number): never {
|
|
179
|
+
throw new RangeError(`Invalid scale ${scale}: use an integer from 0 to ${MAX_DECIMAL_SCALE}`);
|
|
180
|
+
}
|
|
181
|
+
|
|
130
182
|
function gcd(left: bigint, right: bigint): bigint {
|
|
131
183
|
if (left < 0n) {
|
|
132
184
|
left = -left;
|
|
@@ -165,12 +217,25 @@ function makeRatio(num: bigint, den: bigint): Ratio {
|
|
|
165
217
|
return { num, den, n: safeNumberOrNaN(num), d: safeNumberOrNaN(den) };
|
|
166
218
|
}
|
|
167
219
|
|
|
168
|
-
|
|
220
|
+
/**
|
|
221
|
+
* The error for a value that isn't a factor. Untyped code passes all sorts here (a Fixed, a
|
|
222
|
+
* `{ num: 1, den: 2 }` of numbers, null), and without this check they fail later with an unrelated
|
|
223
|
+
* BigInt error, or are returned as if they were a Ratio.
|
|
224
|
+
*/
|
|
225
|
+
function notAFactor(value: unknown): TypeError {
|
|
226
|
+
return new TypeError(
|
|
227
|
+
`Expected a number, bigint, decimal string, Ratio or Fixed, got ${typeof value} ${String(value)}`,
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const cache = /* @__PURE__ */ new Map<string, Ratio>();
|
|
169
232
|
const INT_RATIOS: Ratio[] = [];
|
|
170
233
|
|
|
171
234
|
/**
|
|
172
235
|
* Builds an exact ratio. `ratio('1.075')`, `ratio(3, 4)`, `ratio(10n)`, `ratio('1/3')`.
|
|
173
|
-
* Numbers are taken at their shortest decimal representation: `ratio(0.1)` is exactly 1/10.
|
|
236
|
+
* Numbers are taken at their shortest decimal representation: `ratio(0.1)` is exactly 1/10. One
|
|
237
|
+
* with more than 15 significant digits (`1 / 0.52` is 1.9230769230769231) throws a RangeError,
|
|
238
|
+
* since a float artefact can't be told from a decimal someone wrote; pass a string instead.
|
|
174
239
|
* Pre-build ratios you use in hot loops; strings are also cached (up to 1024 entries).
|
|
175
240
|
*/
|
|
176
241
|
export function ratio(value: Factor, den?: Factor): Ratio {
|
|
@@ -187,7 +252,27 @@ export function ratio(value: Factor, den?: Factor): Ratio {
|
|
|
187
252
|
);
|
|
188
253
|
}
|
|
189
254
|
if (typeof value === 'object') {
|
|
190
|
-
|
|
255
|
+
// A Ratio from ratio() passes straight through: the hot path for factors built once. A
|
|
256
|
+
// hand-made { num, den } of bigints is rebuilt, so it is reduced and has `n` and `d`.
|
|
257
|
+
const asRatio = value as Partial<Ratio> | null;
|
|
258
|
+
if (typeof asRatio?.num === 'bigint' && typeof asRatio.den === 'bigint') {
|
|
259
|
+
return typeof asRatio.n === 'number' && typeof asRatio.d === 'number'
|
|
260
|
+
? (asRatio as Ratio)
|
|
261
|
+
: makeRatio(asRatio.num, asRatio.den);
|
|
262
|
+
}
|
|
263
|
+
// A Fixed, read through its scaled form rather than `instanceof`, so the core doesn't load
|
|
264
|
+
// `/fixed`. The scale is checked because a lookalike object could carry any value.
|
|
265
|
+
const scaled = (value as Partial<Fixed> | null)?.value;
|
|
266
|
+
const scale = (value as Partial<Fixed> | null)?.scale;
|
|
267
|
+
if (
|
|
268
|
+
(typeof scaled === 'bigint' || Number.isSafeInteger(scaled)) &&
|
|
269
|
+
typeof scale === 'number' &&
|
|
270
|
+
scale >>> 0 === scale &&
|
|
271
|
+
scale <= MAX_DECIMAL_SCALE
|
|
272
|
+
) {
|
|
273
|
+
return makeRatio(BigInt(scaled as number | bigint), pow10n(scale));
|
|
274
|
+
}
|
|
275
|
+
throw notAFactor(value);
|
|
191
276
|
}
|
|
192
277
|
if (typeof value === 'number') {
|
|
193
278
|
if (Number.isSafeInteger(value)) {
|
|
@@ -199,16 +284,19 @@ export function ratio(value: Factor, den?: Factor): Ratio {
|
|
|
199
284
|
if (!Number.isFinite(value)) {
|
|
200
285
|
throw new RangeError(`Invalid factor ${value}`);
|
|
201
286
|
}
|
|
202
|
-
value =
|
|
287
|
+
value = faithfulDecimal(value, 'pass it as a string');
|
|
203
288
|
}
|
|
204
289
|
if (typeof value === 'bigint') {
|
|
205
290
|
return makeRatio(value, 1n);
|
|
206
291
|
}
|
|
292
|
+
if (typeof value !== 'string') {
|
|
293
|
+
throw notAFactor(value);
|
|
294
|
+
}
|
|
207
295
|
let cached = cache.get(value);
|
|
208
296
|
if (cached === undefined) {
|
|
209
297
|
const slash = value.indexOf('/');
|
|
210
298
|
if (slash > 0) {
|
|
211
|
-
cached = ratio(value.slice(0, slash)
|
|
299
|
+
cached = ratio(value.slice(0, slash), value.slice(slash + 1));
|
|
212
300
|
} else {
|
|
213
301
|
const { digits, scale } = parseDecimal(value);
|
|
214
302
|
cached = makeRatio(digits, pow10n(scale));
|
|
@@ -242,7 +330,7 @@ export function ratioToDecimal(value: Ratio): string | null {
|
|
|
242
330
|
}
|
|
243
331
|
|
|
244
332
|
// Zero padding for the fraction digits, built once: indexing it is faster than padStart.
|
|
245
|
-
const ZPAD = Array.from({ length: 16 }, (_, length) => '0'.repeat(length));
|
|
333
|
+
const ZPAD = /* @__PURE__ */ Array.from({ length: 16 }, (_, length) => '0'.repeat(length));
|
|
246
334
|
|
|
247
335
|
/** Formats an integer at `scale` as a plain decimal string ("-0.05"). */
|
|
248
336
|
export function formatScaled(minor: number | bigint, scale: number): string {
|