@ducatjs/money 0.2.2 → 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 +17 -8
- package/README.md +346 -43
- 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 +65 -48
- 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 +116 -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/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 +74 -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 +136 -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/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/tiers.ts
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
// Tiered (graduated) and volume pricing, in the style of Stripe's price tiers: exact arithmetic, one
|
|
2
|
+
// rounding for the total, and a breakdown per tier whose amounts sum exactly to that total.
|
|
3
|
+
import { currencyExponent } from './currency.js';
|
|
4
|
+
import { pow10n, ratio, ratioToDecimal, type Factor, type Ratio } from './decimal.js';
|
|
5
|
+
import { ExactMoney } from './exact.js';
|
|
6
|
+
import {
|
|
7
|
+
CurrencyMismatchError,
|
|
8
|
+
make,
|
|
9
|
+
multiplyByRatio,
|
|
10
|
+
type Money,
|
|
11
|
+
type RoundingInput,
|
|
12
|
+
} from './money.js';
|
|
13
|
+
import { DEFAULT_ROUNDING } from './rounding.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A quantity, exactly and not negative: an integer, bigint, decimal string ('1.5' for metered
|
|
17
|
+
* usage), 'a/b' string ('250/3'), `ratio()` or `Fixed`. A non-integer number is read at its
|
|
18
|
+
* shortest decimal form, as factors are.
|
|
19
|
+
*/
|
|
20
|
+
export type Quantity = Factor;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* One price tier. It covers quantities above the previous tier's `upTo`, up to and including its
|
|
24
|
+
* own. The last tier may be open: `upTo` 'inf', `null` or `Infinity`.
|
|
25
|
+
*/
|
|
26
|
+
export interface PriceTier<C extends string> {
|
|
27
|
+
/** The tier's upper bound, inclusive; 'inf', `null` or `Infinity` for no limit. */
|
|
28
|
+
readonly upTo: Quantity | 'inf' | null;
|
|
29
|
+
/** The price per unit in this tier; it may have more decimals than the currency ('0.0025'). */
|
|
30
|
+
readonly unitAmount?: Money<C>;
|
|
31
|
+
/** A fixed amount charged once when the quantity falls in (or, graduated, reaches) this tier. */
|
|
32
|
+
readonly flatAmount?: Money<C>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* How tiers price a quantity:
|
|
37
|
+
* - 'graduated': each tier prices the units that fall in it, and the charges add up (Stripe's
|
|
38
|
+
* `tiers_mode: 'graduated'`);
|
|
39
|
+
* - 'volume': the tier the whole quantity falls in prices every unit (`tiers_mode: 'volume'`).
|
|
40
|
+
*/
|
|
41
|
+
export type TiersMode = 'graduated' | 'volume';
|
|
42
|
+
|
|
43
|
+
/** Options for `tieredPrice`. */
|
|
44
|
+
export interface TieredPriceOptions<C extends string> {
|
|
45
|
+
readonly mode: TiersMode;
|
|
46
|
+
/** The tiers, in increasing `upTo` order. */
|
|
47
|
+
readonly tiers: readonly PriceTier<C>[];
|
|
48
|
+
/**
|
|
49
|
+
* How the total is rounded: a mode, to the currency's exponent, or a rounding policy (default
|
|
50
|
+
* 'halfExpand').
|
|
51
|
+
*/
|
|
52
|
+
readonly rounding?: RoundingInput;
|
|
53
|
+
/**
|
|
54
|
+
* What a quantity past a bounded last tier does: 'throw' (the default), or 'cap', which charges
|
|
55
|
+
* as if the quantity were the last tier's `upTo`, so nothing more is charged past it. The cap is
|
|
56
|
+
* on the quantity that chooses (and, by default, is charged by) the tier: a `chargeQuantity` is
|
|
57
|
+
* not capped, and the last tier's unit amount applies to all of it.
|
|
58
|
+
*/
|
|
59
|
+
readonly beyondLastTier?: 'throw' | 'cap';
|
|
60
|
+
/**
|
|
61
|
+
* In 'volume' mode, the quantity the chosen tier's `unitAmount` is multiplied by, when it isn't
|
|
62
|
+
* the quantity that chose the tier: tiers by meter count, say, priced per unit used. The tier's
|
|
63
|
+
* `flatAmount` is still charged once. Graduated tiers split the quantity across tiers, so there is
|
|
64
|
+
* no one tier to apply to another quantity, and this throws there.
|
|
65
|
+
*/
|
|
66
|
+
readonly chargeQuantity?: Quantity;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** One line of a tiered price's breakdown: a tier the quantity reached. */
|
|
70
|
+
export interface TierLine<C extends string> {
|
|
71
|
+
/** The tier's index in `tiers`. */
|
|
72
|
+
readonly tier: number;
|
|
73
|
+
/** The units priced in this tier, as a decimal string ('num/den' when it doesn't terminate). */
|
|
74
|
+
readonly quantity: string;
|
|
75
|
+
/** The exact charge: quantity × unit amount + flat amount. */
|
|
76
|
+
readonly exact: ExactMoney<C>;
|
|
77
|
+
/**
|
|
78
|
+
* The charge rounded so that the lines sum exactly to the total: each line is the rounded
|
|
79
|
+
* running total minus the rounded running total before it.
|
|
80
|
+
*/
|
|
81
|
+
readonly amount: Money<C>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** The result of `tieredPrice`. */
|
|
85
|
+
export interface TieredPrice<C extends string> {
|
|
86
|
+
/** The exact total, rounded once. */
|
|
87
|
+
readonly total: Money<C>;
|
|
88
|
+
/** The exact total. */
|
|
89
|
+
readonly exact: ExactMoney<C>;
|
|
90
|
+
/**
|
|
91
|
+
* The tiers the quantity reached, in order (one in 'volume' mode), even when one charges nothing
|
|
92
|
+
* (quantity 0 in a tier without a flat amount); their `amount`s sum to `total`.
|
|
93
|
+
*/
|
|
94
|
+
readonly lines: TierLine<C>[];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** The quantity as an exact ratio, checked to be non-negative. */
|
|
98
|
+
function quantityRatio(quantity: Quantity, name: string): Ratio {
|
|
99
|
+
const value = ratio(quantity);
|
|
100
|
+
if (value.num < 0n) {
|
|
101
|
+
throw new RangeError(`Invalid ${name} ${decimalOf(value)}; it must not be negative`);
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** left < right for ratios with positive denominators. */
|
|
107
|
+
function isLess(left: Ratio, right: Ratio): boolean {
|
|
108
|
+
return left.num * right.den < right.num * left.den;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** A ratio as a decimal string when it terminates, else as 'num/den'. */
|
|
112
|
+
function decimalOf(value: Ratio): string {
|
|
113
|
+
return ratioToDecimal(value) ?? `${value.num}/${value.den}`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function subtractRatio(left: Ratio, right: Ratio): Ratio {
|
|
117
|
+
return ratio(left.num * right.den - right.num * left.den, left.den * right.den);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** num/den major units rounded once, at the currency's exponent or the policy's scale. */
|
|
121
|
+
function roundExact<C extends string>(amount: ExactMoney<C>, rounding: RoundingInput): Money<C> {
|
|
122
|
+
const unit = make(amount.currency, 1, 0);
|
|
123
|
+
const factor = ratio(amount.num, amount.den);
|
|
124
|
+
return multiplyByRatio(unit, factor, rounding, currencyExponent(amount.currency));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function exactOf<C extends string>(money: Money<C>): ExactMoney<C> {
|
|
128
|
+
return new ExactMoney(money.currency, BigInt(money.minor), pow10n(money.scale));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The price of `quantity` under tiered pricing, exactly, with the total rounded once and a
|
|
133
|
+
* breakdown per tier. Tier bounds are inclusive (`upTo: 10` covers the 10th unit), as Stripe's are.
|
|
134
|
+
* Quantity 0 falls in the first tier, so its flat amount (a base fee) is charged; in 'graduated'
|
|
135
|
+
* mode a later tier's flat amount is charged once the quantity goes past the tier before it.
|
|
136
|
+
*
|
|
137
|
+
* tieredPrice(1500, {
|
|
138
|
+
* mode: 'graduated',
|
|
139
|
+
* tiers: [
|
|
140
|
+
* { upTo: 1000, unitAmount: money('0.10', 'EUR') },
|
|
141
|
+
* { upTo: 'inf', unitAmount: money('0.08', 'EUR') },
|
|
142
|
+
* ],
|
|
143
|
+
* }).total // 140.00 EUR
|
|
144
|
+
*/
|
|
145
|
+
export function tieredPrice<C extends string>(
|
|
146
|
+
quantity: Quantity,
|
|
147
|
+
options: TieredPriceOptions<C>,
|
|
148
|
+
): TieredPrice<C> {
|
|
149
|
+
const { mode, tiers } = options;
|
|
150
|
+
const rounding = options.rounding ?? DEFAULT_ROUNDING;
|
|
151
|
+
const beyondLastTier = options.beyondLastTier ?? 'throw';
|
|
152
|
+
if (mode !== 'graduated' && mode !== 'volume') {
|
|
153
|
+
throw new RangeError(`Invalid tiers mode ${String(mode)}`);
|
|
154
|
+
}
|
|
155
|
+
if (beyondLastTier !== 'throw' && beyondLastTier !== 'cap') {
|
|
156
|
+
throw new RangeError(`Invalid beyondLastTier ${String(beyondLastTier)}; use 'throw' or 'cap'`);
|
|
157
|
+
}
|
|
158
|
+
if (options.chargeQuantity !== undefined && mode !== 'volume') {
|
|
159
|
+
throw new TypeError("chargeQuantity needs mode 'volume': graduated tiers split the quantity");
|
|
160
|
+
}
|
|
161
|
+
if (tiers.length === 0) {
|
|
162
|
+
throw new RangeError('tieredPrice needs at least one tier');
|
|
163
|
+
}
|
|
164
|
+
let amount = quantityRatio(quantity, 'quantity');
|
|
165
|
+
|
|
166
|
+
// The currency comes from the tiers' amounts, which must all share it.
|
|
167
|
+
let currency: C | undefined;
|
|
168
|
+
for (const tier of tiers) {
|
|
169
|
+
for (const price of [tier.unitAmount, tier.flatAmount]) {
|
|
170
|
+
if (price === undefined) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (currency === undefined) {
|
|
174
|
+
currency = price.currency;
|
|
175
|
+
} else if (price.currency !== currency) {
|
|
176
|
+
throw new CurrencyMismatchError(currency, price.currency);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (currency === undefined) {
|
|
181
|
+
throw new RangeError('The tiers need a unitAmount or a flatAmount');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Bounds: increasing, positive, and open only last.
|
|
185
|
+
const bounds: (Ratio | undefined)[] = [];
|
|
186
|
+
let previous: Ratio = ratio(0);
|
|
187
|
+
tiers.forEach((tier, index) => {
|
|
188
|
+
const upTo = tier.upTo;
|
|
189
|
+
if (upTo === 'inf' || upTo === null || upTo === Infinity) {
|
|
190
|
+
if (index !== tiers.length - 1) {
|
|
191
|
+
throw new RangeError(
|
|
192
|
+
`Tier ${index} is open (upTo ${String(upTo)}), but only the last tier can be`,
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
bounds.push(undefined);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const bound = quantityRatio(upTo, 'upTo');
|
|
199
|
+
if (!isLess(previous, bound)) {
|
|
200
|
+
const after = index === 0 ? 'above 0' : `above tier ${index - 1}'s ${decimalOf(previous)}`;
|
|
201
|
+
throw new RangeError(
|
|
202
|
+
`Tier bounds must increase: tier ${index}'s upTo ${decimalOf(bound)} is not ${after}`,
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
bounds.push(bound);
|
|
206
|
+
previous = bound;
|
|
207
|
+
});
|
|
208
|
+
const lastBound = bounds[bounds.length - 1];
|
|
209
|
+
if (lastBound !== undefined && isLess(lastBound, amount)) {
|
|
210
|
+
if (beyondLastTier === 'throw') {
|
|
211
|
+
throw new RangeError(
|
|
212
|
+
`The quantity ${decimalOf(amount)} is beyond the last tier (upTo ${decimalOf(lastBound)}); pass { beyondLastTier: 'cap' } to charge nothing past it`,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
amount = lastBound;
|
|
216
|
+
}
|
|
217
|
+
const chargeAmount =
|
|
218
|
+
options.chargeQuantity === undefined
|
|
219
|
+
? undefined
|
|
220
|
+
: quantityRatio(options.chargeQuantity, 'chargeQuantity');
|
|
221
|
+
|
|
222
|
+
const zero = new ExactMoney(currency, 0n, 1n);
|
|
223
|
+
const charge = (tier: PriceTier<C>, units: Ratio): ExactMoney<C> => {
|
|
224
|
+
let result = zero;
|
|
225
|
+
if (tier.unitAmount !== undefined) {
|
|
226
|
+
result = result.add(exactOf(tier.unitAmount).multiply(units));
|
|
227
|
+
}
|
|
228
|
+
if (tier.flatAmount !== undefined) {
|
|
229
|
+
result = result.add(exactOf(tier.flatAmount));
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
// The tiers that charge, with the units each prices.
|
|
235
|
+
const charged: { tier: number; units: Ratio }[] = [];
|
|
236
|
+
let lower: Ratio = ratio(0);
|
|
237
|
+
for (let i = 0; i < tiers.length; i++) {
|
|
238
|
+
const upper = bounds[i];
|
|
239
|
+
const isInTier = upper === undefined || !isLess(upper, amount);
|
|
240
|
+
if (mode === 'volume') {
|
|
241
|
+
if (isInTier) {
|
|
242
|
+
charged.push({ tier: i, units: chargeAmount ?? amount });
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
} else {
|
|
246
|
+
// the first tier always charges (quantity 0 is in it); a later one once the quantity is past
|
|
247
|
+
// the tier before it
|
|
248
|
+
if (i > 0 && !isLess(lower, amount)) {
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
const top = isInTier ? amount : upper;
|
|
252
|
+
charged.push({ tier: i, units: subtractRatio(top, lower) });
|
|
253
|
+
if (isInTier) {
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
lower = upper;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Lines round their running totals, so they sum exactly to the rounded total.
|
|
261
|
+
const lines: TierLine<C>[] = [];
|
|
262
|
+
let running = zero;
|
|
263
|
+
let roundedBefore = make(currency, 0, 0);
|
|
264
|
+
let roundedRunning = roundedBefore;
|
|
265
|
+
for (const { tier, units } of charged) {
|
|
266
|
+
const lineExact = charge(tiers[tier]!, units);
|
|
267
|
+
running = running.add(lineExact);
|
|
268
|
+
roundedRunning = roundExact(running, rounding);
|
|
269
|
+
const lineAmount = make(
|
|
270
|
+
currency,
|
|
271
|
+
BigInt(roundedRunning.minor) -
|
|
272
|
+
BigInt(roundedBefore.minor) * pow10n(roundedRunning.scale - roundedBefore.scale),
|
|
273
|
+
roundedRunning.scale,
|
|
274
|
+
);
|
|
275
|
+
lines.push({
|
|
276
|
+
tier,
|
|
277
|
+
quantity: decimalOf(units),
|
|
278
|
+
exact: lineExact,
|
|
279
|
+
amount: lineAmount,
|
|
280
|
+
});
|
|
281
|
+
roundedBefore = roundedRunning;
|
|
282
|
+
}
|
|
283
|
+
return { total: roundedRunning, exact: running, lines };
|
|
284
|
+
}
|
package/src/valibot.ts
CHANGED
|
@@ -15,7 +15,10 @@ import {
|
|
|
15
15
|
|
|
16
16
|
export type { MoneyFor, MoneySchemaOptions } from './schema.js';
|
|
17
17
|
|
|
18
|
-
const jsonShape =
|
|
18
|
+
const jsonShape = /* @__PURE__ */ valibot.object({
|
|
19
|
+
amount: valibot.string(),
|
|
20
|
+
currency: valibot.string(),
|
|
21
|
+
});
|
|
19
22
|
|
|
20
23
|
/** The schema type both functions return: the JSON shape, then a transformation. */
|
|
21
24
|
export type MoneySchema<TOutput> = valibot.SchemaWithPipe<
|
package/src/wire.ts
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/wire`: Money to and from common wire formats, exactly in both directions:
|
|
3
|
+
* - `google.type.Money` (`currencyCode`, `units`, `nanos`), used by Google APIs and many gRPC
|
|
4
|
+
* services;
|
|
5
|
+
* - ISO 20022 amounts (`<InstdAmt Ccy="EUR">12.34</InstdAmt>`): a non-negative decimal with at
|
|
6
|
+
* most 5 decimals and 18 digits;
|
|
7
|
+
* - `{ value, currency }` with an integer count of ISO 4217 minor units, the JSON several
|
|
8
|
+
* processors and ledgers use.
|
|
9
|
+
*
|
|
10
|
+
* Every reader checks the format strictly, and every writer throws rather than send a value the
|
|
11
|
+
* format can't hold.
|
|
12
|
+
*/
|
|
13
|
+
import { currencyExponent } from './currency.js';
|
|
14
|
+
import { formatScaled, parseDecimal } from './decimal.js';
|
|
15
|
+
import { fromMinor, toScale, type CurrencyInput, type Money } from './money.js';
|
|
16
|
+
import { fromProcessorAmount, toProcessorAmount } from './processor.js';
|
|
17
|
+
import { RoundingError, type RoundingMode } from './rounding.js';
|
|
18
|
+
|
|
19
|
+
const NANOS_PER_UNIT = 1_000_000_000n;
|
|
20
|
+
const MAX_INT64 = 2n ** 63n - 1n;
|
|
21
|
+
const MIN_INT64 = -(2n ** 63n);
|
|
22
|
+
const CURRENCY_CODE = /^[A-Z]{3}$/;
|
|
23
|
+
|
|
24
|
+
/** Options for the readers: the scale of the Money they return, and how to round to it. */
|
|
25
|
+
export interface WireReadOptions {
|
|
26
|
+
/** The result's scale (default: the currency's ISO exponent). */
|
|
27
|
+
readonly scale?: number;
|
|
28
|
+
/** How to round when the value has more decimals than that (default 'unnecessary': throw). */
|
|
29
|
+
readonly rounding?: RoundingMode;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** `value` (an integer count of 10^-from units) as Money at the requested scale. */
|
|
33
|
+
function atScale<C extends string>(
|
|
34
|
+
format: string,
|
|
35
|
+
value: bigint,
|
|
36
|
+
from: number,
|
|
37
|
+
currency: C,
|
|
38
|
+
options: WireReadOptions | undefined,
|
|
39
|
+
): Money<C> {
|
|
40
|
+
const exact = fromMinor(value, currency, from);
|
|
41
|
+
const scale = options?.scale ?? currencyExponent(currency);
|
|
42
|
+
try {
|
|
43
|
+
return toScale(exact, scale, options?.rounding ?? 'unnecessary');
|
|
44
|
+
} catch (error) {
|
|
45
|
+
if (error instanceof RoundingError) {
|
|
46
|
+
throw new RoundingError(
|
|
47
|
+
`${format} ${formatScaled(exact.minor, exact.scale)} ${currency} has more than ${scale} decimals; pass { rounding } or { scale }`,
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** `money` as an integer count of 10^-scale units, or undefined when that would drop digits. */
|
|
55
|
+
function exactAt(money: Money, scale: number): bigint | undefined {
|
|
56
|
+
const minor = BigInt(money.minor);
|
|
57
|
+
if (money.scale <= scale) {
|
|
58
|
+
return minor * 10n ** BigInt(scale - money.scale);
|
|
59
|
+
}
|
|
60
|
+
const divisor = 10n ** BigInt(money.scale - scale);
|
|
61
|
+
return minor % divisor === 0n ? minor / divisor : undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// ---------------------------------------------------------------------------------------------
|
|
65
|
+
// google.type.Money
|
|
66
|
+
// ---------------------------------------------------------------------------------------------
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* `google.type.Money` in its proto3 JSON form: `units` is an int64, which proto3 JSON writes as a
|
|
70
|
+
* string, and `nanos` the billionths, with the same sign as `units`.
|
|
71
|
+
*/
|
|
72
|
+
export interface GoogleMoney {
|
|
73
|
+
readonly currencyCode: string;
|
|
74
|
+
readonly units: string;
|
|
75
|
+
readonly nanos: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Money as `google.type.Money`: `toGoogleMoney(money('-1.75', 'EUR'))` is `{ currencyCode: 'EUR',
|
|
80
|
+
* units: '-1', nanos: -750000000 }`. Throws a RoundingError for an amount with more than 9
|
|
81
|
+
* decimals (unless `rounding` is given), and a RangeError when the whole units don't fit in an
|
|
82
|
+
* int64 or the code isn't three capital letters, as the format requires.
|
|
83
|
+
*/
|
|
84
|
+
export function toGoogleMoney(money: Money, rounding: RoundingMode = 'unnecessary'): GoogleMoney {
|
|
85
|
+
if (!CURRENCY_CODE.test(money.currency)) {
|
|
86
|
+
throw new RangeError(`google.type.Money needs an ISO 4217 code, got ${money.currency}`);
|
|
87
|
+
}
|
|
88
|
+
let total = exactAt(money, 9);
|
|
89
|
+
if (total === undefined) {
|
|
90
|
+
if (rounding === 'unnecessary') {
|
|
91
|
+
throw new RoundingError(
|
|
92
|
+
`${money.toString()} has more than 9 decimals, the most google.type.Money holds; pass a rounding mode`,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
total = BigInt(toScale(money, 9, rounding).minor);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// bigint division and remainder truncate toward zero, so units and nanos share the sign
|
|
99
|
+
const units = total / NANOS_PER_UNIT;
|
|
100
|
+
const nanos = Number(total % NANOS_PER_UNIT);
|
|
101
|
+
if (units > MAX_INT64 || units < MIN_INT64) {
|
|
102
|
+
throw new RangeError(`${money.toString()} doesn't fit in google.type.Money (int64 units)`);
|
|
103
|
+
}
|
|
104
|
+
// `+ 0` turns -0 into 0
|
|
105
|
+
return { currencyCode: money.currency, units: String(units), nanos: nanos + 0 };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** What `fromGoogleMoney` accepts: the proto3 JSON form, or units as a number or bigint. */
|
|
109
|
+
export interface GoogleMoneyInput {
|
|
110
|
+
readonly currencyCode: string;
|
|
111
|
+
readonly units?: string | number | bigint;
|
|
112
|
+
readonly nanos?: number;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Reads `google.type.Money`, exactly: `fromGoogleMoney({ currencyCode: 'EUR', units: '12', nanos:
|
|
117
|
+
* 340000000 })` is 12.34 EUR. Missing `units` or `nanos` mean 0, as in proto3. The value is checked
|
|
118
|
+
* as the format defines it: `units` an int64, `nanos` from -999,999,999 to 999,999,999 with the
|
|
119
|
+
* same sign as a non-zero `units`. A malformed value throws a RangeError. The result has the
|
|
120
|
+
* currency's exponent; more decimals throw a RoundingError unless `options` says what to do.
|
|
121
|
+
*/
|
|
122
|
+
export function fromGoogleMoney<C extends CurrencyInput>(
|
|
123
|
+
value: GoogleMoneyInput & { readonly currencyCode: C },
|
|
124
|
+
options?: WireReadOptions,
|
|
125
|
+
): Money<C> {
|
|
126
|
+
const invalid = (reason: string): never => {
|
|
127
|
+
throw new RangeError(`Invalid google.type.Money: ${reason}`);
|
|
128
|
+
};
|
|
129
|
+
if (value === null || typeof value !== 'object') {
|
|
130
|
+
return invalid('expected an object');
|
|
131
|
+
}
|
|
132
|
+
const { currencyCode, units = 0, nanos = 0 } = value;
|
|
133
|
+
if (typeof currencyCode !== 'string' || !CURRENCY_CODE.test(currencyCode)) {
|
|
134
|
+
return invalid(`currencyCode ${JSON.stringify(currencyCode)}`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
let wholeUnits: bigint;
|
|
138
|
+
if (typeof units === 'bigint') {
|
|
139
|
+
wholeUnits = units;
|
|
140
|
+
} else if (typeof units === 'number' && Number.isSafeInteger(units)) {
|
|
141
|
+
wholeUnits = BigInt(units);
|
|
142
|
+
} else if (typeof units === 'string' && /^-?\d{1,19}$/.test(units)) {
|
|
143
|
+
wholeUnits = BigInt(units);
|
|
144
|
+
} else {
|
|
145
|
+
return invalid(`units ${JSON.stringify(String(units))}`);
|
|
146
|
+
}
|
|
147
|
+
if (wholeUnits > MAX_INT64 || wholeUnits < MIN_INT64) {
|
|
148
|
+
return invalid(`units ${wholeUnits} is beyond int64`);
|
|
149
|
+
}
|
|
150
|
+
if (!Number.isInteger(nanos) || nanos > 999_999_999 || nanos < -999_999_999) {
|
|
151
|
+
return invalid(`nanos ${nanos}`);
|
|
152
|
+
}
|
|
153
|
+
if ((wholeUnits > 0n && nanos < 0) || (wholeUnits < 0n && nanos > 0)) {
|
|
154
|
+
return invalid(`units ${wholeUnits} and nanos ${nanos} have different signs`);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const total = wholeUnits * NANOS_PER_UNIT + BigInt(nanos);
|
|
158
|
+
return atScale('google.type.Money', total, 9, currencyCode, options);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ---------------------------------------------------------------------------------------------
|
|
162
|
+
// ISO 20022
|
|
163
|
+
// ---------------------------------------------------------------------------------------------
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* An ISO 20022 amount, as in `<InstdAmt Ccy="EUR">12.34</InstdAmt>`: `Ccy` is the attribute and
|
|
167
|
+
* `value` the element's text.
|
|
168
|
+
*/
|
|
169
|
+
export interface Iso20022Amount {
|
|
170
|
+
readonly Ccy: string;
|
|
171
|
+
readonly value: string;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// ActiveOrHistoricCurrencyAndAmount: xs:decimal, fractionDigits 5, totalDigits 18, minInclusive 0
|
|
175
|
+
const ISO_20022_AMOUNT = /^(\d+)(?:\.(\d+))?$/;
|
|
176
|
+
const ISO_20022_MAX_DECIMALS = 5;
|
|
177
|
+
const ISO_20022_MAX_DIGITS = 18;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Whether a decimal's value fits the schema's facets. XSD counts digits in the value, not the text,
|
|
181
|
+
* so leading zeros and trailing fractional zeros don't count: '0012.3400' has 4 digits, 2 decimals.
|
|
182
|
+
*/
|
|
183
|
+
function fitsIso20022(integer: string, fraction: string): boolean {
|
|
184
|
+
const decimals = fraction.replace(/0+$/, '');
|
|
185
|
+
const whole = integer.replace(/^0+/, '');
|
|
186
|
+
return (
|
|
187
|
+
decimals.length <= ISO_20022_MAX_DECIMALS &&
|
|
188
|
+
whole.length + decimals.length <= ISO_20022_MAX_DIGITS
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Options for `toIso20022Amount`. */
|
|
193
|
+
export interface Iso20022WriteOptions {
|
|
194
|
+
/**
|
|
195
|
+
* The number of decimals to write (default: the currency's ISO exponent), at most 5. The payment
|
|
196
|
+
* networks' rules (CBPR+, HVPS+) require the currency's minor unit, so give another only for
|
|
197
|
+
* messages that allow it.
|
|
198
|
+
*/
|
|
199
|
+
readonly scale?: number;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Money as an ISO 20022 amount: `toIso20022Amount(money('12.34', 'EUR'))` is `{ Ccy: 'EUR', value:
|
|
204
|
+
* '12.34' }`. It is written with the currency's decimals, as the payment networks' rules (CBPR+,
|
|
205
|
+
* HVPS+) require for ActiveCurrencyAndAmount: 12.3400 EUR at scale 4 is written '12.34', and JPY
|
|
206
|
+
* '1000'. More decimals than that throw a RoundingError unless `rounding` is given. The schema
|
|
207
|
+
* types allow at most 5 decimals and 18 digits, and no negative amounts: the direction is carried
|
|
208
|
+
* elsewhere in the message (a credit/debit indicator). An amount that doesn't fit throws a
|
|
209
|
+
* RangeError.
|
|
210
|
+
*/
|
|
211
|
+
export function toIso20022Amount(
|
|
212
|
+
money: Money,
|
|
213
|
+
rounding: RoundingMode = 'unnecessary',
|
|
214
|
+
options?: Iso20022WriteOptions,
|
|
215
|
+
): Iso20022Amount {
|
|
216
|
+
if (!CURRENCY_CODE.test(money.currency)) {
|
|
217
|
+
throw new RangeError(`ISO 20022 amounts need an ISO 4217 code, got ${money.currency}`);
|
|
218
|
+
}
|
|
219
|
+
const scale = options?.scale ?? currencyExponent(money.currency);
|
|
220
|
+
if (!Number.isInteger(scale) || scale < 0 || scale > ISO_20022_MAX_DECIMALS) {
|
|
221
|
+
throw new RangeError(`ISO 20022 amounts have 0 to 5 decimals, not ${scale}`);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
let amount: Money;
|
|
225
|
+
try {
|
|
226
|
+
amount = toScale(money, scale, rounding);
|
|
227
|
+
} catch (error) {
|
|
228
|
+
if (error instanceof RoundingError) {
|
|
229
|
+
throw new RoundingError(
|
|
230
|
+
`${money.toString()} has more than ${scale} decimals for an ISO 20022 ${money.currency} amount; pass a rounding mode`,
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
if (amount.minor < 0) {
|
|
236
|
+
throw new RangeError(
|
|
237
|
+
`ISO 20022 amounts can't be negative (${money.toString()}); use the credit/debit indicator`,
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
const value = formatScaled(amount.minor, amount.scale);
|
|
241
|
+
const [integer = '', fraction = ''] = value.split('.');
|
|
242
|
+
if (!fitsIso20022(integer, fraction)) {
|
|
243
|
+
throw new RangeError(`${money.toString()} has more than 18 digits, the most ISO 20022 allows`);
|
|
244
|
+
}
|
|
245
|
+
return { Ccy: money.currency, value };
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Reads an ISO 20022 amount, exactly: `fromIso20022Amount({ Ccy: 'EUR', value: '12.34' })` is
|
|
250
|
+
* 12.34 EUR. The text is checked as the schema defines it: plain digits with an optional decimal
|
|
251
|
+
* point, at most 5 decimals and 18 digits (not counting leading or trailing zeros, as XSD
|
|
252
|
+
* counts them), no sign, exponent or spaces (XML whitespace around the
|
|
253
|
+
* element's text should be trimmed by the XML reader). Anything else throws a SyntaxError. The
|
|
254
|
+
* result has the currency's exponent; more decimals throw a RoundingError unless `options` says what
|
|
255
|
+
* to do (KWD's 3 decimals fit; 12.345 EUR needs `{ scale: 3 }` or a rounding mode).
|
|
256
|
+
*/
|
|
257
|
+
export function fromIso20022Amount<C extends CurrencyInput>(
|
|
258
|
+
amount: { readonly Ccy: C; readonly value: string },
|
|
259
|
+
options?: WireReadOptions,
|
|
260
|
+
): Money<C> {
|
|
261
|
+
const { Ccy: currency, value } = amount ?? ({} as never);
|
|
262
|
+
if (typeof currency !== 'string' || !CURRENCY_CODE.test(currency)) {
|
|
263
|
+
throw new SyntaxError(`Invalid ISO 20022 currency ${JSON.stringify(currency)}`);
|
|
264
|
+
}
|
|
265
|
+
const match = typeof value === 'string' ? ISO_20022_AMOUNT.exec(value) : null;
|
|
266
|
+
if (match === null || !fitsIso20022(match[1]!, match[2] ?? '')) {
|
|
267
|
+
throw new SyntaxError(
|
|
268
|
+
`Invalid ISO 20022 amount ${JSON.stringify(value)}: at most 18 digits, 5 of them decimals`,
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
const parsed = parseDecimal(value);
|
|
272
|
+
return atScale('ISO 20022 amount', parsed.digits, parsed.scale, currency, options);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// ---------------------------------------------------------------------------------------------
|
|
276
|
+
// { value, currency } in minor units
|
|
277
|
+
// ---------------------------------------------------------------------------------------------
|
|
278
|
+
|
|
279
|
+
/** An integer count of the currency's ISO 4217 minor units: `{ value: 1234, currency: 'EUR' }`. */
|
|
280
|
+
export interface MinorUnitAmount {
|
|
281
|
+
readonly value: number;
|
|
282
|
+
readonly currency: string;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Money as `{ value, currency }` in ISO 4217 minor units: `toMinorUnits(money('12.34', 'EUR'))` is
|
|
287
|
+
* `{ value: 1234, currency: 'EUR' }`, and JPY 500 is `{ value: 500, currency: 'JPY' }`. The same
|
|
288
|
+
* shape as Adyen's `amount`, at the ISO exponent; use the processor's own view (`toAdyen`,
|
|
289
|
+
* `toCheckout`, ...) where its exponents differ from ISO. Throws a RoundingError for an amount with
|
|
290
|
+
* more decimals than the currency (unless `rounding` is given), and a RangeError beyond 2^53 - 1
|
|
291
|
+
* minor units, which JSON numbers can't hold exactly.
|
|
292
|
+
*/
|
|
293
|
+
export function toMinorUnits(
|
|
294
|
+
money: Money,
|
|
295
|
+
rounding: RoundingMode = 'unnecessary',
|
|
296
|
+
): MinorUnitAmount {
|
|
297
|
+
const exponent = currencyExponent(money.currency);
|
|
298
|
+
return {
|
|
299
|
+
value: toProcessorAmount('ISO 4217 minor units', money, exponent, 1, rounding),
|
|
300
|
+
currency: money.currency,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Reads `{ value, currency }` in ISO 4217 minor units: `fromMinorUnits({ value: 1234, currency:
|
|
306
|
+
* 'EUR' })` is 12.34 EUR. `value` must be a safe integer (or a bigint); anything else throws a
|
|
307
|
+
* RangeError.
|
|
308
|
+
*/
|
|
309
|
+
export function fromMinorUnits<C extends CurrencyInput>(amount: {
|
|
310
|
+
readonly value: number | bigint;
|
|
311
|
+
readonly currency: C;
|
|
312
|
+
}): Money<C> {
|
|
313
|
+
if (amount === null || typeof amount !== 'object' || typeof amount.currency !== 'string') {
|
|
314
|
+
throw new RangeError('Expected { value, currency }');
|
|
315
|
+
}
|
|
316
|
+
return fromProcessorAmount(
|
|
317
|
+
'ISO 4217 minor units',
|
|
318
|
+
amount.value,
|
|
319
|
+
amount.currency,
|
|
320
|
+
currencyExponent(amount.currency),
|
|
321
|
+
);
|
|
322
|
+
}
|
package/src/words/de.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/words/de`: German spell-out rules from CLDR, for `spellOut` and
|
|
3
|
+
* `amountInWords` in `@ducatjs/money/words`.
|
|
4
|
+
*/
|
|
5
|
+
import { RULES } from '../generated/rbnf-de.js';
|
|
6
|
+
import type { SpelloutRules } from '../rbnf.js';
|
|
7
|
+
|
|
8
|
+
/** German spell-out rules (CLDR 49). */
|
|
9
|
+
export const german: SpelloutRules = { locale: 'de', rules: RULES };
|
package/src/words/en.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/words/en`: English spell-out rules from CLDR, for `spellOut` and
|
|
3
|
+
* `amountInWords` in `@ducatjs/money/words`.
|
|
4
|
+
*/
|
|
5
|
+
import { RULES } from '../generated/rbnf-en.js';
|
|
6
|
+
import type { SpelloutRules } from '../rbnf.js';
|
|
7
|
+
|
|
8
|
+
/** English spell-out rules (CLDR 49). */
|
|
9
|
+
export const english: SpelloutRules = { locale: 'en', rules: RULES };
|
package/src/words/es.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/words/es`: Spanish spell-out rules from CLDR, for `spellOut` and
|
|
3
|
+
* `amountInWords` in `@ducatjs/money/words`.
|
|
4
|
+
*/
|
|
5
|
+
import { RULES } from '../generated/rbnf-es.js';
|
|
6
|
+
import type { SpelloutRules } from '../rbnf.js';
|
|
7
|
+
|
|
8
|
+
/** Spanish spell-out rules (CLDR 49). */
|
|
9
|
+
export const spanish: SpelloutRules = { locale: 'es', rules: RULES };
|
package/src/words/fr.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/words/fr`: French spell-out rules from CLDR, for `spellOut` and
|
|
3
|
+
* `amountInWords` in `@ducatjs/money/words`.
|
|
4
|
+
*/
|
|
5
|
+
import { RULES } from '../generated/rbnf-fr.js';
|
|
6
|
+
import type { SpelloutRules } from '../rbnf.js';
|
|
7
|
+
|
|
8
|
+
/** French spell-out rules (CLDR 49). */
|
|
9
|
+
export const french: SpelloutRules = { locale: 'fr', rules: RULES };
|
package/src/words/it.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/words/it`: Italian spell-out rules from CLDR, for `spellOut` and
|
|
3
|
+
* `amountInWords` in `@ducatjs/money/words`.
|
|
4
|
+
*/
|
|
5
|
+
import { RULES } from '../generated/rbnf-it.js';
|
|
6
|
+
import type { SpelloutRules } from '../rbnf.js';
|
|
7
|
+
|
|
8
|
+
/** Italian spell-out rules (CLDR 49). */
|
|
9
|
+
export const italian: SpelloutRules = { locale: 'it', rules: RULES };
|
package/src/words/nl.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/words/nl`: Dutch spell-out rules from CLDR, for `spellOut` and
|
|
3
|
+
* `amountInWords` in `@ducatjs/money/words`.
|
|
4
|
+
*/
|
|
5
|
+
import { RULES } from '../generated/rbnf-nl.js';
|
|
6
|
+
import type { SpelloutRules } from '../rbnf.js';
|
|
7
|
+
|
|
8
|
+
/** Dutch spell-out rules (CLDR 49). */
|
|
9
|
+
export const dutch: SpelloutRules = { locale: 'nl', rules: RULES };
|