@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/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/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
|