@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/rbnf.ts
ADDED
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
// An interpreter for CLDR's rule-based number formats (RBNF, the rules behind ICU's
|
|
2
|
+
// RuleBasedNumberFormat), for whole numbers. ECMA-402 has no spell-out, so the rules are CLDR's own
|
|
3
|
+
// text, generated into src/generated/rbnf-<language>.ts, and this follows ICU's semantics for them:
|
|
4
|
+
// https://unicode-org.github.io/icu/userguide/format_parse/numbers/rbnf.html
|
|
5
|
+
//
|
|
6
|
+
// Where it can't match ICU it refuses with a RangeError: values outside ICU's int64 range (ICU
|
|
7
|
+
// writes those with a plain decimal format, not the rules), and plurals whose quotient ICU
|
|
8
|
+
// truncates to 32 bits into a different plural category. Digit grouping in fallbacks (=#,##0=)
|
|
9
|
+
// comes from the runtime's Intl, not CLDR 49.
|
|
10
|
+
//
|
|
11
|
+
// It loads neither Money nor the currency table: a language pack is plain data.
|
|
12
|
+
|
|
13
|
+
/** A language's spell-out rules, from CLDR. Import one from `@ducatjs/money/words/<language>`. */
|
|
14
|
+
export interface SpelloutRules {
|
|
15
|
+
/** The locale the rules are for, which also picks plural rules and number formats. */
|
|
16
|
+
readonly locale: string;
|
|
17
|
+
/** CLDR's RBNF rule text for the locale's spell-out rule sets. */
|
|
18
|
+
readonly rules: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** One piece of a rule's text. */
|
|
22
|
+
type Part =
|
|
23
|
+
| { readonly kind: 'text'; readonly text: string }
|
|
24
|
+
| {
|
|
25
|
+
readonly kind: 'substitution';
|
|
26
|
+
/** '<' quotient, '>' remainder, '=' the number itself, '>>>' remainder by the previous rule */
|
|
27
|
+
readonly type: '<' | '>' | '=' | '>>>';
|
|
28
|
+
/** A rule set name ('%spellout-numbering'), a decimal pattern ('#,##0'), or '' for this set */
|
|
29
|
+
readonly target: string;
|
|
30
|
+
}
|
|
31
|
+
| {
|
|
32
|
+
readonly kind: 'plural';
|
|
33
|
+
readonly type: 'cardinal' | 'ordinal';
|
|
34
|
+
readonly cases: ReadonlyMap<string, string>;
|
|
35
|
+
}
|
|
36
|
+
| {
|
|
37
|
+
readonly kind: 'optional';
|
|
38
|
+
readonly present: readonly Part[];
|
|
39
|
+
readonly omitted: readonly Part[];
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
interface Rule {
|
|
43
|
+
readonly base: bigint;
|
|
44
|
+
readonly divisor: bigint;
|
|
45
|
+
readonly parts: readonly Part[];
|
|
46
|
+
/** Whether a part is a remainder substitution (for ICU's rollback rule). */
|
|
47
|
+
readonly hasRemainder: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface RuleSet {
|
|
51
|
+
readonly name: string;
|
|
52
|
+
readonly rules: Rule[];
|
|
53
|
+
negative?: Rule;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
interface Compiled {
|
|
57
|
+
readonly locale: string;
|
|
58
|
+
readonly sets: Map<string, RuleSet>;
|
|
59
|
+
readonly plurals: Map<string, Intl.PluralRules>;
|
|
60
|
+
readonly numberFormats: Map<boolean, Intl.NumberFormat>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const compiledRules = /* @__PURE__ */ new WeakMap<SpelloutRules, Compiled>();
|
|
64
|
+
|
|
65
|
+
/** ICU's RBNF formats int64 values; past them it writes plain digits, so this refuses instead. */
|
|
66
|
+
const INT64_MAX = 2n ** 63n - 1n;
|
|
67
|
+
const MILLION = 1_000_000n;
|
|
68
|
+
|
|
69
|
+
/** The exponent of the rule's divisor: the largest e with radix^e <= base. */
|
|
70
|
+
function divisorFor(base: bigint, radix: bigint): bigint {
|
|
71
|
+
let divisor = 1n;
|
|
72
|
+
while (divisor * radix <= base) {
|
|
73
|
+
divisor *= radix;
|
|
74
|
+
}
|
|
75
|
+
return divisor;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Splits a rule's text into text, substitutions, plurals and optional parts. */
|
|
79
|
+
function parseParts(text: string): { parts: Part[]; hasRemainder: boolean } {
|
|
80
|
+
const parts: Part[] = [];
|
|
81
|
+
let hasRemainder = false;
|
|
82
|
+
let literal = '';
|
|
83
|
+
const flush = () => {
|
|
84
|
+
if (literal !== '') {
|
|
85
|
+
parts.push({ kind: 'text', text: literal });
|
|
86
|
+
literal = '';
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
for (let i = 0; i < text.length; i++) {
|
|
91
|
+
const char = text[i]!;
|
|
92
|
+
|
|
93
|
+
if (char === '[') {
|
|
94
|
+
const close = text.indexOf(']', i);
|
|
95
|
+
const inner = text.slice(i + 1, close);
|
|
96
|
+
const bar = inner.indexOf('|');
|
|
97
|
+
const present = parseParts(bar < 0 ? inner : inner.slice(0, bar));
|
|
98
|
+
const omitted = parseParts(bar < 0 ? '' : inner.slice(bar + 1));
|
|
99
|
+
hasRemainder ||= present.hasRemainder;
|
|
100
|
+
flush();
|
|
101
|
+
parts.push({ kind: 'optional', present: present.parts, omitted: omitted.parts });
|
|
102
|
+
i = close;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (char === '$' && text[i + 1] === '(') {
|
|
107
|
+
// $(cardinal,one{Million}other{Millionen})$
|
|
108
|
+
const close = text.indexOf(')$', i);
|
|
109
|
+
const body = text.slice(i + 2, close);
|
|
110
|
+
const comma = body.indexOf(',');
|
|
111
|
+
const cases = new Map<string, string>();
|
|
112
|
+
for (const match of body.slice(comma + 1).matchAll(/([\w=]+)\{([^}]*)\}/g)) {
|
|
113
|
+
cases.set(match[1]!, match[2]!);
|
|
114
|
+
}
|
|
115
|
+
flush();
|
|
116
|
+
parts.push({
|
|
117
|
+
kind: 'plural',
|
|
118
|
+
type: body.slice(0, comma) === 'ordinal' ? 'ordinal' : 'cardinal',
|
|
119
|
+
cases,
|
|
120
|
+
});
|
|
121
|
+
i = close + 1;
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (char === '<' || char === '>' || char === '=') {
|
|
126
|
+
flush();
|
|
127
|
+
if (char === '>' && text.startsWith('>>>', i)) {
|
|
128
|
+
parts.push({ kind: 'substitution', type: '>>>', target: '' });
|
|
129
|
+
hasRemainder = true;
|
|
130
|
+
i += 2;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const close = text.indexOf(char, i + 1);
|
|
134
|
+
parts.push({ kind: 'substitution', type: char, target: text.slice(i + 1, close) });
|
|
135
|
+
hasRemainder ||= char === '>';
|
|
136
|
+
i = close;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
literal += char;
|
|
141
|
+
}
|
|
142
|
+
flush();
|
|
143
|
+
return { parts, hasRemainder };
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function compile(rules: SpelloutRules): Compiled {
|
|
147
|
+
const sets = new Map<string, RuleSet>();
|
|
148
|
+
let current: RuleSet | undefined;
|
|
149
|
+
|
|
150
|
+
for (const rawLine of rules.rules.split('\n')) {
|
|
151
|
+
const line = rawLine.trim();
|
|
152
|
+
if (line === '') {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (line.startsWith('%') && line.endsWith(':')) {
|
|
156
|
+
current = { name: line.slice(0, -1), rules: [] };
|
|
157
|
+
sets.set(current.name, current);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (current === undefined) {
|
|
161
|
+
throw new SyntaxError(`RBNF rules for ${rules.locale}: a rule before any rule set`);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const colon = line.indexOf(':');
|
|
165
|
+
const descriptor = line.slice(0, colon).trim();
|
|
166
|
+
// A leading apostrophe keeps the whitespace after it (' and =%x=).
|
|
167
|
+
let body = line
|
|
168
|
+
.slice(colon + 1)
|
|
169
|
+
.replace(/;$/, '')
|
|
170
|
+
.trimStart();
|
|
171
|
+
if (body.startsWith("'")) {
|
|
172
|
+
body = body.slice(1);
|
|
173
|
+
}
|
|
174
|
+
const { parts, hasRemainder } = parseParts(body);
|
|
175
|
+
|
|
176
|
+
if (descriptor === '-x') {
|
|
177
|
+
current.negative = { base: 0n, divisor: 1n, parts, hasRemainder };
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
// Fraction, infinity and NaN rules don't apply to whole numbers.
|
|
181
|
+
const base = /^(\d+)(?:\/(\d+))?$/.exec(descriptor.replaceAll(',', ''));
|
|
182
|
+
if (base === null) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const value = BigInt(base[1]!);
|
|
186
|
+
const radix = BigInt(base[2] ?? 10);
|
|
187
|
+
current.rules.push({ base: value, divisor: divisorFor(value, radix), parts, hasRemainder });
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return { locale: rules.locale, sets, plurals: new Map(), numberFormats: new Map() };
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function compiled(rules: SpelloutRules): Compiled {
|
|
194
|
+
let result = compiledRules.get(rules);
|
|
195
|
+
if (result === undefined) {
|
|
196
|
+
result = compile(rules);
|
|
197
|
+
compiledRules.set(rules, result);
|
|
198
|
+
}
|
|
199
|
+
return result;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function ruleSet(language: Compiled, name: string): RuleSet {
|
|
203
|
+
const set = language.sets.get(name);
|
|
204
|
+
if (set === undefined) {
|
|
205
|
+
throw new RangeError(`No rule set ${name} for ${language.locale}`);
|
|
206
|
+
}
|
|
207
|
+
return set;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** The rule for a non-negative value: the last one whose base is at most the value. */
|
|
211
|
+
function ruleIndexFor(set: RuleSet, value: bigint): number {
|
|
212
|
+
let index = -1;
|
|
213
|
+
for (let i = 0; i < set.rules.length && set.rules[i]!.base <= value; i++) {
|
|
214
|
+
index = i;
|
|
215
|
+
}
|
|
216
|
+
if (index < 0) {
|
|
217
|
+
throw new RangeError(`Rule set ${set.name} has no rule for ${value}`);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// ICU's rollback: a rule whose base isn't a multiple of its divisor doesn't take values that are
|
|
221
|
+
// (1100/100 doesn't spell 1200's remainder), so the rule before it does.
|
|
222
|
+
const rule = set.rules[index]!;
|
|
223
|
+
if (
|
|
224
|
+
index > 0 &&
|
|
225
|
+
rule.hasRemainder &&
|
|
226
|
+
value % rule.divisor === 0n &&
|
|
227
|
+
rule.base % rule.divisor !== 0n
|
|
228
|
+
) {
|
|
229
|
+
return index - 1;
|
|
230
|
+
}
|
|
231
|
+
return index;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function formatDecimal(language: Compiled, pattern: string, value: bigint): string {
|
|
235
|
+
const grouping = pattern.includes(',');
|
|
236
|
+
let format = language.numberFormats.get(grouping);
|
|
237
|
+
if (format === undefined) {
|
|
238
|
+
format = new Intl.NumberFormat(language.locale, {
|
|
239
|
+
useGrouping: grouping,
|
|
240
|
+
maximumFractionDigits: 0,
|
|
241
|
+
});
|
|
242
|
+
language.numberFormats.set(grouping, format);
|
|
243
|
+
}
|
|
244
|
+
return format.format(value);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* @internal A whole number reduced, exactly, to one with the same plural category in every CLDR
|
|
249
|
+
* rule the shipped languages use (n % 10, n % 100, i % 1000000 = 0 with i != 0, and equality with
|
|
250
|
+
* values below a million; plural operands ignore the sign), small enough for `Intl.PluralRules`.
|
|
251
|
+
*/
|
|
252
|
+
export function pluralOperand(value: bigint): number {
|
|
253
|
+
const magnitude = value < 0n ? -value : value;
|
|
254
|
+
return Number(magnitude < MILLION ? magnitude : (magnitude % MILLION) + MILLION);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function pluralCategory(language: Compiled, type: 'cardinal' | 'ordinal', value: bigint): string {
|
|
258
|
+
let rules = language.plurals.get(type);
|
|
259
|
+
if (rules === undefined) {
|
|
260
|
+
rules = new Intl.PluralRules(language.locale, { type });
|
|
261
|
+
language.plurals.set(type, rules);
|
|
262
|
+
}
|
|
263
|
+
const category = rules.select(pluralOperand(value));
|
|
264
|
+
// ICU selects by the quotient cast to int32; where the cast changes the category, ICU writes
|
|
265
|
+
// another form than the number's own, so refuse
|
|
266
|
+
const int32 = BigInt.asIntN(32, value);
|
|
267
|
+
if (int32 !== value && rules.select(Number(int32)) !== category) {
|
|
268
|
+
throw new RangeError(
|
|
269
|
+
`ICU picks the ${type} plural form of ${value} from it cast to 32 bits (${int32}), ` +
|
|
270
|
+
'which gives another form: no spell-out matches ICU',
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
return category;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function applyRule(
|
|
277
|
+
language: Compiled,
|
|
278
|
+
set: RuleSet,
|
|
279
|
+
index: number,
|
|
280
|
+
rule: Rule,
|
|
281
|
+
value: bigint,
|
|
282
|
+
parts: readonly Part[],
|
|
283
|
+
): string {
|
|
284
|
+
const quotient = value / rule.divisor;
|
|
285
|
+
const remainder = value % rule.divisor;
|
|
286
|
+
let output = '';
|
|
287
|
+
|
|
288
|
+
for (const part of parts) {
|
|
289
|
+
if (part.kind === 'text') {
|
|
290
|
+
output += part.text;
|
|
291
|
+
} else if (part.kind === 'optional') {
|
|
292
|
+
// the bracketed text is left out when the value is a multiple of the divisor
|
|
293
|
+
const chosen = remainder === 0n ? part.omitted : part.present;
|
|
294
|
+
output += applyRule(language, set, index, rule, value, chosen);
|
|
295
|
+
} else if (part.kind === 'plural') {
|
|
296
|
+
const category = pluralCategory(language, part.type, quotient);
|
|
297
|
+
output += part.cases.get(category) ?? part.cases.get('other') ?? '';
|
|
298
|
+
} else if (part.type === '>>>') {
|
|
299
|
+
// the remainder, through the rule before this one rather than by the usual selection
|
|
300
|
+
const previous = set.rules[index - 1]!;
|
|
301
|
+
output += applyRule(language, set, index - 1, previous, remainder, previous.parts);
|
|
302
|
+
} else {
|
|
303
|
+
let operand = value;
|
|
304
|
+
if (part.type === '<') {
|
|
305
|
+
operand = quotient;
|
|
306
|
+
} else if (part.type === '>') {
|
|
307
|
+
operand = rule === set.negative ? value : remainder;
|
|
308
|
+
}
|
|
309
|
+
const target = part.target;
|
|
310
|
+
if (target !== '' && !target.startsWith('%')) {
|
|
311
|
+
output += formatDecimal(language, target, operand);
|
|
312
|
+
} else {
|
|
313
|
+
output += spell(language, target === '' ? set : ruleSet(language, target), operand);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return output;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function spell(language: Compiled, set: RuleSet, value: bigint): string {
|
|
321
|
+
if (value < 0n) {
|
|
322
|
+
const negative = set.negative;
|
|
323
|
+
if (negative === undefined) {
|
|
324
|
+
// As ICU does: a set without a -x rule hands the value, sign and all, to its first rule
|
|
325
|
+
// (in CLDR, always one that passes it on whole: 0: =%spellout-cardinal-masculine=)
|
|
326
|
+
const first = set.rules[0]!;
|
|
327
|
+
return applyRule(language, set, 0, first, value, first.parts);
|
|
328
|
+
}
|
|
329
|
+
return applyRule(language, set, -1, negative, -value, negative.parts);
|
|
330
|
+
}
|
|
331
|
+
const index = ruleIndexFor(set, value);
|
|
332
|
+
const rule = set.rules[index]!;
|
|
333
|
+
return applyRule(language, set, index, rule, value, rule.parts);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/** The public rule sets of a language: the names `spellOut` accepts. */
|
|
337
|
+
export function ruleSets(rules: SpelloutRules): string[] {
|
|
338
|
+
return [...compiled(rules).sets.keys()].filter((name) => !name.startsWith('%%'));
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* A whole number in words, by a language's CLDR rules: `spellOut(123, en)` is 'one hundred
|
|
343
|
+
* twenty-three'. `ruleSet` picks one of the language's public rule sets (default
|
|
344
|
+
* '%spellout-cardinal', or the masculine one where the language has no neutral cardinal):
|
|
345
|
+
* '%spellout-ordinal', '%spellout-cardinal-feminine' and the others `ruleSets` lists. Accepts a safe
|
|
346
|
+
* integer or a bigint within ±(2^63 - 1), ICU's range for the rules; from 10^18 most rule sets
|
|
347
|
+
* write digits, grouped by the runtime's `Intl`, as ICU does. Throws a RangeError outside that
|
|
348
|
+
* range, for a private ('%%') rule set, and where ICU picks a plural form by a value truncated to
|
|
349
|
+
* 32 bits that would differ from ours (in CLDR 49's rules, some English ordinals from 10^18).
|
|
350
|
+
*/
|
|
351
|
+
export function spellOut(
|
|
352
|
+
value: number | bigint,
|
|
353
|
+
rules: SpelloutRules,
|
|
354
|
+
ruleSetName?: string,
|
|
355
|
+
): string {
|
|
356
|
+
if (typeof value === 'number' && !Number.isSafeInteger(value)) {
|
|
357
|
+
throw new RangeError(`spellOut takes whole numbers, got ${value}`);
|
|
358
|
+
}
|
|
359
|
+
const whole = BigInt(value);
|
|
360
|
+
if (whole > INT64_MAX || whole < -INT64_MAX) {
|
|
361
|
+
throw new RangeError(
|
|
362
|
+
`spellOut takes whole numbers within ±(2^63 - 1), as ICU's rules do, got ${whole}`,
|
|
363
|
+
);
|
|
364
|
+
}
|
|
365
|
+
const language = compiled(rules);
|
|
366
|
+
const name = ruleSetName ?? defaultCardinal(language);
|
|
367
|
+
if (name.startsWith('%%')) {
|
|
368
|
+
throw new RangeError(`${name} is a private rule set of ${language.locale}; use a public one`);
|
|
369
|
+
}
|
|
370
|
+
return spell(language, ruleSet(language, name), whole);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function defaultCardinal(language: Compiled): string {
|
|
374
|
+
return language.sets.has('%spellout-cardinal')
|
|
375
|
+
? '%spellout-cardinal'
|
|
376
|
+
: '%spellout-cardinal-masculine';
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/** @internal The cardinal rule set for a gender, falling back to the language's default. */
|
|
380
|
+
export function cardinalFor(rules: SpelloutRules, gender: string | undefined): string {
|
|
381
|
+
const language = compiled(rules);
|
|
382
|
+
if (gender !== undefined) {
|
|
383
|
+
const name = `%spellout-cardinal-${gender}`;
|
|
384
|
+
if (language.sets.has(name)) {
|
|
385
|
+
return name;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return defaultCardinal(language);
|
|
389
|
+
}
|
package/src/rounding.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
divideAndRoundBigint as provedDivideAndRoundBigint,
|
|
3
3
|
roundTruncatedQuotient,
|
|
4
4
|
} from './generated/kernel.js';
|
|
5
|
+
import type { Ratio } from './decimal.js';
|
|
5
6
|
import { RoundingError } from './rounding-error.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -58,6 +59,39 @@ export { RoundingError };
|
|
|
58
59
|
|
|
59
60
|
const MAX_SAFE_MINOR = Number.MAX_SAFE_INTEGER;
|
|
60
61
|
|
|
62
|
+
/**
|
|
63
|
+
* @internal `value / divisor` rounded with `mode`, for a safe-integer `value` and a reduced ratio
|
|
64
|
+
* (`ratio()` makes its denominator positive): the number fast path of Fixed's divide, at the value's
|
|
65
|
+
* own scale. Money's `divide` in money.ts inlines a copy of these steps, since a call there costs it
|
|
66
|
+
* about 4% on its benchmarks; test/divide.test.ts checks that the copies agree in every mode, and
|
|
67
|
+
* both against the proved kernel. It is `value × denominator / numerator`,
|
|
68
|
+
* rounded once by `divideAndRound`, which is the same fraction the inverse ratio would give, without
|
|
69
|
+
* building that ratio (bigint arithmetic and a gcd). Returns NaN when the number path doesn't apply,
|
|
70
|
+
* so the caller takes the bigint path:
|
|
71
|
+
* - a part that is NaN marks one that isn't a safe integer (`Ratio.n` and `Ratio.d`);
|
|
72
|
+
* - `value` and `denominator` are safe integers, so a float product beyond 2^53 - 1 can't round
|
|
73
|
+
* back into the safe range, and the bound check rejects every inexact product.
|
|
74
|
+
*/
|
|
75
|
+
export function divideSafeByRatio(value: number, divisor: Ratio, mode: RoundingMode): number {
|
|
76
|
+
const numerator = divisor.n;
|
|
77
|
+
const denominator = divisor.d;
|
|
78
|
+
// `x !== x` is true only for NaN
|
|
79
|
+
if (numerator !== numerator || denominator !== denominator) {
|
|
80
|
+
return NaN;
|
|
81
|
+
}
|
|
82
|
+
let dividend = value * denominator;
|
|
83
|
+
if (!(dividend <= MAX_SAFE_MINOR && dividend >= -MAX_SAFE_MINOR)) {
|
|
84
|
+
return NaN;
|
|
85
|
+
}
|
|
86
|
+
// divideAndRound needs a positive divisor: (−p)/(−n) is the same quotient
|
|
87
|
+
let positiveDivisor = numerator;
|
|
88
|
+
if (numerator < 0) {
|
|
89
|
+
dividend = 0 - dividend;
|
|
90
|
+
positiveDivisor = 0 - numerator;
|
|
91
|
+
}
|
|
92
|
+
return divideAndRound(dividend, positiveDivisor, mode);
|
|
93
|
+
}
|
|
94
|
+
|
|
61
95
|
/**
|
|
62
96
|
* dividend / divisor rounded with `mode`, for safe-integer dividends and divisor > 0. Exact: the
|
|
63
97
|
* float quotient is only a first guess, corrected until the remainder has the dividend's sign and
|
package/src/scale.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Moving an integer between decimal scales, for Fixed. It needs neither Money nor the currency
|
|
2
|
+
// table, so the Fixed bundle carries neither. src/money.ts keeps its own copy of these helpers:
|
|
3
|
+
// calling them across modules costs Money up to 20% on its benchmarks under vitest, where every
|
|
4
|
+
// imported call goes through a getter. test/fixed.test.ts checks that the two copies agree.
|
|
5
|
+
import { normalizeMinor, POW10, pow10n } from './decimal.js';
|
|
6
|
+
import { divideAndRound, divideAndRoundBigint, type RoundingMode } from './rounding.js';
|
|
7
|
+
|
|
8
|
+
// A module-local constant, not an import: V8 reads an imported binding through an extra indirection.
|
|
9
|
+
const MAX_SAFE_MINOR = Number.MAX_SAFE_INTEGER;
|
|
10
|
+
|
|
11
|
+
/** @internal a minor amount as a bigint */
|
|
12
|
+
export const toBigInt = (minor: number | bigint): bigint =>
|
|
13
|
+
typeof minor === 'bigint' ? minor : BigInt(minor);
|
|
14
|
+
|
|
15
|
+
/** @internal v * 10^e exactly (e >= 0) */
|
|
16
|
+
export function scaleUp(minor: number | bigint, exponent: number): number | bigint {
|
|
17
|
+
if (exponent === 0) {
|
|
18
|
+
return minor;
|
|
19
|
+
}
|
|
20
|
+
if (typeof minor === 'number' && exponent <= 15) {
|
|
21
|
+
const scaled = minor * POW10[exponent]!;
|
|
22
|
+
if (scaled <= MAX_SAFE_MINOR && scaled >= -MAX_SAFE_MINOR) {
|
|
23
|
+
return scaled;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return normalizeMinor(toBigInt(minor) * pow10n(exponent));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** @internal v / 10^e rounded (e >= 0) */
|
|
30
|
+
export function scaleDown(
|
|
31
|
+
minor: number | bigint,
|
|
32
|
+
exponent: number,
|
|
33
|
+
mode: RoundingMode,
|
|
34
|
+
): number | bigint {
|
|
35
|
+
if (exponent === 0) {
|
|
36
|
+
return minor;
|
|
37
|
+
}
|
|
38
|
+
if (typeof minor === 'number' && exponent <= 15) {
|
|
39
|
+
return divideAndRound(minor, POW10[exponent]!, mode);
|
|
40
|
+
}
|
|
41
|
+
return normalizeMinor(divideAndRoundBigint(toBigInt(minor), pow10n(exponent), mode));
|
|
42
|
+
}
|
package/src/schema.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isCurrency } from './currency.js';
|
|
2
|
-
import {
|
|
2
|
+
import { checkScale } from './decimal.js';
|
|
3
3
|
import { money, type Money, type MoneyJSON } from './money.js';
|
|
4
4
|
import { Rounding, type RoundingMode } from './rounding.js';
|
|
5
5
|
|
|
@@ -27,7 +27,7 @@ export interface MoneySchemaOptions<C extends string = string> {
|
|
|
27
27
|
/** The default `maxDigits`: far beyond any real amount, small enough to be cheap to reject. */
|
|
28
28
|
export const DEFAULT_MAX_DIGITS = 50;
|
|
29
29
|
|
|
30
|
-
const MODES = new Set<unknown>(Object.values(Rounding));
|
|
30
|
+
const MODES = /* @__PURE__ */ new Set<unknown>(/* @__PURE__ */ Object.values(Rounding));
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* @internal Checks the options when the schema is built, so a mistake there throws at once
|
|
@@ -45,11 +45,8 @@ export function checkSchemaOptions(options: MoneySchemaOptions | undefined): voi
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
const scale = options.scale;
|
|
48
|
-
if (
|
|
49
|
-
scale
|
|
50
|
-
!(Number.isInteger(scale) && scale >= 0 && scale <= MAX_DECIMAL_SCALE)
|
|
51
|
-
) {
|
|
52
|
-
throw new RangeError(`Invalid scale ${scale}`);
|
|
48
|
+
if (scale !== undefined) {
|
|
49
|
+
checkScale(scale);
|
|
53
50
|
}
|
|
54
51
|
if (options.rounding !== undefined && !MODES.has(options.rounding)) {
|
|
55
52
|
throw new RangeError(`Invalid rounding mode ${String(options.rounding)}`);
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ducatjs/money/territories`: which currencies a territory uses and since when, from
|
|
3
|
+
* CLDR. A separate entry from `@ducatjs/money/currencies` because the table is most of its size
|
|
4
|
+
* (about 4.6 kB gzipped).
|
|
5
|
+
*/
|
|
6
|
+
import { CLDR_TERRITORY_CURRENCIES } from './generated/territories.js';
|
|
7
|
+
|
|
8
|
+
/** One currency a territory uses or used, from CLDR. */
|
|
9
|
+
export interface TerritoryCurrency {
|
|
10
|
+
/** The ISO 4217 code. */
|
|
11
|
+
readonly currency: string;
|
|
12
|
+
/** The first day of use ('YYYY-MM-DD'), where CLDR gives one. */
|
|
13
|
+
readonly from?: string;
|
|
14
|
+
/** The last day of use, for a currency the territory no longer uses. */
|
|
15
|
+
readonly to?: string;
|
|
16
|
+
/** false for a code that isn't legal tender there, such as a fund code (CHE, USN, CLF). */
|
|
17
|
+
readonly tender: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Options for `territoryCurrencies` and `currencyTerritories`. */
|
|
21
|
+
export interface TerritoryOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Only the currencies in use on this day, 'YYYY-MM-DD': `{ on: '2001-06-01' }` gives both EUR
|
|
24
|
+
* and DEM for Germany. Without it, every currency CLDR lists, current and past.
|
|
25
|
+
*/
|
|
26
|
+
readonly on?: string;
|
|
27
|
+
/** Whether to include codes that aren't legal tender (fund codes such as CHE); default false. */
|
|
28
|
+
readonly includeNonTender?: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const DAY = /^\d{4}-\d{2}-\d{2}$/;
|
|
32
|
+
|
|
33
|
+
function readUse(use: readonly [string, (string | null)?, (string | null)?, boolean?]) {
|
|
34
|
+
const [currency, from, to, tender] = use;
|
|
35
|
+
const entry: { currency: string; from?: string; to?: string; tender: boolean } = {
|
|
36
|
+
currency,
|
|
37
|
+
tender: tender !== false,
|
|
38
|
+
};
|
|
39
|
+
if (typeof from === 'string') {
|
|
40
|
+
entry.from = from;
|
|
41
|
+
}
|
|
42
|
+
if (typeof to === 'string') {
|
|
43
|
+
entry.to = to;
|
|
44
|
+
}
|
|
45
|
+
return entry as TerritoryCurrency;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function isWanted(use: TerritoryCurrency, options: TerritoryOptions | undefined): boolean {
|
|
49
|
+
if (!use.tender && options?.includeNonTender !== true) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const day = options?.on;
|
|
53
|
+
if (day === undefined) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
// 'YYYY-MM-DD' strings compare in date order; an unknown start counts as "always"
|
|
57
|
+
return (use.from === undefined || use.from <= day) && (use.to === undefined || day <= use.to);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function checkOptions(options: TerritoryOptions | undefined): void {
|
|
61
|
+
if (options?.on !== undefined && !DAY.test(options.on)) {
|
|
62
|
+
throw new RangeError(`Invalid day ${options.on}; expected 'YYYY-MM-DD'`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The currencies a territory (an ISO 3166 alpha-2 code such as 'DE') uses or has used, newest first,
|
|
68
|
+
* with the days CLDR gives:
|
|
69
|
+
*
|
|
70
|
+
* territoryCurrencies('DE')
|
|
71
|
+
* // [{ currency: 'EUR', from: '1999-01-01', tender: true },
|
|
72
|
+
* // { currency: 'DEM', from: '1948-06-20', to: '2002-02-28', tender: true }]
|
|
73
|
+
* territoryCurrencies('DE', { on: '1990-01-01' }) // [DEM]
|
|
74
|
+
*
|
|
75
|
+
* Fund and accounting codes (CHE, USN) are left out unless `includeNonTender` is set. A territory
|
|
76
|
+
* CLDR doesn't know gives an empty list.
|
|
77
|
+
*/
|
|
78
|
+
export function territoryCurrencies(
|
|
79
|
+
territory: string,
|
|
80
|
+
options?: TerritoryOptions,
|
|
81
|
+
): TerritoryCurrency[] {
|
|
82
|
+
checkOptions(options);
|
|
83
|
+
if (!Object.hasOwn(CLDR_TERRITORY_CURRENCIES, territory)) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
return CLDR_TERRITORY_CURRENCIES[territory]!.map(readUse).filter((use) => isWanted(use, options));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The territories that use or used a currency, in code order: `currencyTerritories('CHF')` is
|
|
91
|
+
* `['CH', 'LI']`. With `{ on }`, only those using it on that day.
|
|
92
|
+
*/
|
|
93
|
+
export function currencyTerritories(currency: string, options?: TerritoryOptions): string[] {
|
|
94
|
+
checkOptions(options);
|
|
95
|
+
const territories: string[] = [];
|
|
96
|
+
for (const [territory, uses] of Object.entries(CLDR_TERRITORY_CURRENCIES)) {
|
|
97
|
+
if (uses.some((use) => use[0] === currency && isWanted(readUse(use), options))) {
|
|
98
|
+
territories.push(territory);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return territories;
|
|
102
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import fc from 'fast-check';
|
|
8
8
|
import { currencyExponent, ISO_EXPONENTS } from '../currency.js';
|
|
9
9
|
import { MAX_DECIMAL_SCALE } from '../decimal.js';
|
|
10
|
-
import { fromMinor, money, type Money } from '../money.js';
|
|
10
|
+
import { fromMinor, money, toScaledUnits, type Money } from '../money.js';
|
|
11
11
|
|
|
12
12
|
/** A mix of exponents: the common two-decimal currencies and every unusual one. */
|
|
13
13
|
const DEFAULT_CURRENCIES = ['EUR', 'USD', 'GBP', 'JPY', 'KRW', 'KWD', 'BHD', 'TND', 'CLF'];
|
|
@@ -57,7 +57,7 @@ export interface ArbMoneyOptions<C extends string = string> {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
const BIG = 10n ** 30n;
|
|
60
|
-
const SAFE = BigInt(Number.MAX_SAFE_INTEGER);
|
|
60
|
+
const SAFE = /* @__PURE__ */ BigInt(Number.MAX_SAFE_INTEGER);
|
|
61
61
|
|
|
62
62
|
/** Minor units weighted toward the interesting places: small, near 2^53, and far beyond it. */
|
|
63
63
|
function arbMinor(min: bigint, max: bigint): fc.Arbitrary<bigint> {
|
|
@@ -120,11 +120,11 @@ export function arbMoney<C extends string = string>(
|
|
|
120
120
|
const min =
|
|
121
121
|
options.min === undefined
|
|
122
122
|
? -BIG
|
|
123
|
-
: BigInt(money(options.min, currency, { scale, rounding: 'ceil' })
|
|
123
|
+
: BigInt(toScaledUnits(money(options.min, currency, { scale, rounding: 'ceil' })));
|
|
124
124
|
const max =
|
|
125
125
|
options.max === undefined
|
|
126
126
|
? BIG
|
|
127
|
-
: BigInt(money(options.max, currency, { scale, rounding: 'floor' })
|
|
127
|
+
: BigInt(toScaledUnits(money(options.max, currency, { scale, rounding: 'floor' })));
|
|
128
128
|
if (min > max) {
|
|
129
129
|
throw new RangeError(`No ${currency} amount at scale ${scale} between min and max`);
|
|
130
130
|
}
|
package/src/testing/index.ts
CHANGED
|
@@ -209,7 +209,7 @@ export interface ExpectWithExtensions {
|
|
|
209
209
|
addSnapshotSerializer?(serializer: any): void;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
const INSPECT = Symbol.for('nodejs.util.inspect.custom');
|
|
212
|
+
const INSPECT = /* @__PURE__ */ Symbol.for('nodejs.util.inspect.custom');
|
|
213
213
|
|
|
214
214
|
/**
|
|
215
215
|
* Installs everything on a test runner's `expect`: the matchers, value equality and the snapshot
|