@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.
Files changed (1332) hide show
  1. package/NOTICE +47 -11
  2. package/README.md +346 -44
  3. package/data/cldr-territories.json +2791 -0
  4. package/data/crypto-units.json +68 -0
  5. package/data/rbnf/de.txt +243 -0
  6. package/data/rbnf/en.txt +166 -0
  7. package/data/rbnf/es.txt +261 -0
  8. package/data/rbnf/fr.txt +159 -0
  9. package/data/rbnf/it.txt +502 -0
  10. package/data/rbnf/nl.txt +103 -0
  11. package/data/rbnf/pt.txt +171 -0
  12. package/dist/adyen-fx.js +1 -1
  13. package/dist/adyen-fx.js.map +1 -1
  14. package/dist/allocate.d.ts.map +1 -1
  15. package/dist/allocate.js +2 -3
  16. package/dist/allocate.js.map +1 -1
  17. package/dist/cash.d.ts +15 -0
  18. package/dist/cash.d.ts.map +1 -1
  19. package/dist/cash.js +17 -0
  20. package/dist/cash.js.map +1 -1
  21. package/dist/convert.d.ts.map +1 -1
  22. package/dist/convert.js +2 -3
  23. package/dist/convert.js.map +1 -1
  24. package/dist/crypto.d.ts +54 -0
  25. package/dist/crypto.d.ts.map +1 -0
  26. package/dist/crypto.js +89 -0
  27. package/dist/crypto.js.map +1 -0
  28. package/dist/currencies.d.ts +43 -0
  29. package/dist/currencies.d.ts.map +1 -0
  30. package/dist/currencies.js +91 -0
  31. package/dist/currencies.js.map +1 -0
  32. package/dist/currency.d.ts +9 -1
  33. package/dist/currency.d.ts.map +1 -1
  34. package/dist/currency.js +41 -14
  35. package/dist/currency.js.map +1 -1
  36. package/dist/decimal.d.ts +25 -3
  37. package/dist/decimal.d.ts.map +1 -1
  38. package/dist/decimal.js +78 -8
  39. package/dist/decimal.js.map +1 -1
  40. package/dist/ecb.d.ts +23 -8
  41. package/dist/ecb.d.ts.map +1 -1
  42. package/dist/ecb.js +46 -15
  43. package/dist/ecb.js.map +1 -1
  44. package/dist/entries/adyen-fx.d.ts +3 -0
  45. package/dist/entries/adyen-fx.d.ts.map +1 -0
  46. package/dist/entries/adyen-fx.js +5 -0
  47. package/dist/entries/adyen-fx.js.map +1 -0
  48. package/dist/entries/boc.d.ts +3 -0
  49. package/dist/entries/boc.d.ts.map +1 -0
  50. package/dist/entries/boc.js +5 -0
  51. package/dist/entries/boc.js.map +1 -0
  52. package/dist/entries/boe.d.ts +3 -0
  53. package/dist/entries/boe.d.ts.map +1 -0
  54. package/dist/entries/boe.js +5 -0
  55. package/dist/entries/boe.js.map +1 -0
  56. package/dist/entries/crypto.d.ts +3 -0
  57. package/dist/entries/crypto.d.ts.map +1 -0
  58. package/dist/entries/crypto.js +5 -0
  59. package/dist/entries/crypto.js.map +1 -0
  60. package/dist/entries/currencies.d.ts +3 -0
  61. package/dist/entries/currencies.d.ts.map +1 -0
  62. package/dist/entries/currencies.js +5 -0
  63. package/dist/entries/currencies.js.map +1 -0
  64. package/dist/entries/drizzle-mysql.d.ts +3 -0
  65. package/dist/entries/drizzle-mysql.d.ts.map +1 -0
  66. package/dist/entries/drizzle-mysql.js +5 -0
  67. package/dist/entries/drizzle-mysql.js.map +1 -0
  68. package/dist/entries/drizzle-pg.d.ts +3 -0
  69. package/dist/entries/drizzle-pg.d.ts.map +1 -0
  70. package/dist/entries/drizzle-pg.js +5 -0
  71. package/dist/entries/drizzle-pg.js.map +1 -0
  72. package/dist/entries/drizzle-sqlite.d.ts +3 -0
  73. package/dist/entries/drizzle-sqlite.d.ts.map +1 -0
  74. package/dist/entries/drizzle-sqlite.js +5 -0
  75. package/dist/entries/drizzle-sqlite.js.map +1 -0
  76. package/dist/entries/ecb.d.ts +3 -0
  77. package/dist/entries/ecb.d.ts.map +1 -0
  78. package/dist/entries/ecb.js +5 -0
  79. package/dist/entries/ecb.js.map +1 -0
  80. package/dist/entries/fed.d.ts +3 -0
  81. package/dist/entries/fed.d.ts.map +1 -0
  82. package/dist/entries/fed.js +5 -0
  83. package/dist/entries/fed.js.map +1 -0
  84. package/dist/entries/fetch.d.ts +3 -0
  85. package/dist/entries/fetch.d.ts.map +1 -0
  86. package/dist/entries/fetch.js +5 -0
  87. package/dist/entries/fetch.js.map +1 -0
  88. package/dist/entries/finance.d.ts +3 -0
  89. package/dist/entries/finance.d.ts.map +1 -0
  90. package/dist/entries/finance.js +5 -0
  91. package/dist/entries/finance.js.map +1 -0
  92. package/dist/entries/historic.d.ts +3 -0
  93. package/dist/entries/historic.d.ts.map +1 -0
  94. package/dist/entries/historic.js +5 -0
  95. package/dist/entries/historic.js.map +1 -0
  96. package/dist/entries/history.d.ts +3 -0
  97. package/dist/entries/history.d.ts.map +1 -0
  98. package/dist/entries/history.js +5 -0
  99. package/dist/entries/history.js.map +1 -0
  100. package/dist/entries/hmrc.d.ts +3 -0
  101. package/dist/entries/hmrc.d.ts.map +1 -0
  102. package/dist/entries/hmrc.js +5 -0
  103. package/dist/entries/hmrc.js.map +1 -0
  104. package/dist/entries/kysely.d.ts +3 -0
  105. package/dist/entries/kysely.d.ts.map +1 -0
  106. package/dist/entries/kysely.js +5 -0
  107. package/dist/entries/kysely.js.map +1 -0
  108. package/dist/entries/parse.d.ts +3 -0
  109. package/dist/entries/parse.d.ts.map +1 -0
  110. package/dist/entries/parse.js +5 -0
  111. package/dist/entries/parse.js.map +1 -0
  112. package/dist/entries/pg.d.ts +3 -0
  113. package/dist/entries/pg.d.ts.map +1 -0
  114. package/dist/entries/pg.js +5 -0
  115. package/dist/entries/pg.js.map +1 -0
  116. package/dist/entries/policy.d.ts +3 -0
  117. package/dist/entries/policy.d.ts.map +1 -0
  118. package/dist/entries/policy.js +5 -0
  119. package/dist/entries/policy.js.map +1 -0
  120. package/dist/entries/pricing.d.ts +3 -0
  121. package/dist/entries/pricing.d.ts.map +1 -0
  122. package/dist/entries/pricing.js +5 -0
  123. package/dist/entries/pricing.js.map +1 -0
  124. package/dist/entries/stripe-fx.d.ts +3 -0
  125. package/dist/entries/stripe-fx.d.ts.map +1 -0
  126. package/dist/entries/stripe-fx.js +5 -0
  127. package/dist/entries/stripe-fx.js.map +1 -0
  128. package/dist/entries/testing-arbitraries.d.ts +3 -0
  129. package/dist/entries/testing-arbitraries.d.ts.map +1 -0
  130. package/dist/entries/testing-arbitraries.js +5 -0
  131. package/dist/entries/testing-arbitraries.js.map +1 -0
  132. package/dist/entries/testing-index.d.ts +3 -0
  133. package/dist/entries/testing-index.d.ts.map +1 -0
  134. package/dist/entries/testing-index.js +5 -0
  135. package/dist/entries/testing-index.js.map +1 -0
  136. package/dist/entries/testing-jest.d.ts +3 -0
  137. package/dist/entries/testing-jest.d.ts.map +1 -0
  138. package/dist/entries/testing-jest.js +5 -0
  139. package/dist/entries/testing-jest.js.map +1 -0
  140. package/dist/entries/testing-vitest.d.ts +3 -0
  141. package/dist/entries/testing-vitest.d.ts.map +1 -0
  142. package/dist/entries/testing-vitest.js +5 -0
  143. package/dist/entries/testing-vitest.js.map +1 -0
  144. package/dist/entries/valibot.d.ts +3 -0
  145. package/dist/entries/valibot.d.ts.map +1 -0
  146. package/dist/entries/valibot.js +5 -0
  147. package/dist/entries/valibot.js.map +1 -0
  148. package/dist/entries/wire.d.ts +3 -0
  149. package/dist/entries/wire.d.ts.map +1 -0
  150. package/dist/entries/wire.js +5 -0
  151. package/dist/entries/wire.js.map +1 -0
  152. package/dist/entries/zod.d.ts +3 -0
  153. package/dist/entries/zod.d.ts.map +1 -0
  154. package/dist/entries/zod.js +5 -0
  155. package/dist/entries/zod.js.map +1 -0
  156. package/dist/exact.d.ts.map +1 -1
  157. package/dist/exact.js +3 -3
  158. package/dist/exact.js.map +1 -1
  159. package/dist/fetch.d.ts +7 -1
  160. package/dist/fetch.d.ts.map +1 -1
  161. package/dist/fetch.js +11 -2
  162. package/dist/fetch.js.map +1 -1
  163. package/dist/finance.d.ts +296 -0
  164. package/dist/finance.d.ts.map +1 -0
  165. package/dist/finance.js +825 -0
  166. package/dist/finance.js.map +1 -0
  167. package/dist/fixed-money.d.ts +12 -0
  168. package/dist/fixed-money.d.ts.map +1 -0
  169. package/dist/fixed-money.js +32 -0
  170. package/dist/fixed-money.js.map +1 -0
  171. package/dist/fixed.d.ts +26 -9
  172. package/dist/fixed.d.ts.map +1 -1
  173. package/dist/fixed.js +75 -49
  174. package/dist/fixed.js.map +1 -1
  175. package/dist/fn.d.ts +17 -1
  176. package/dist/fn.d.ts.map +1 -1
  177. package/dist/fn.js +17 -1
  178. package/dist/fn.js.map +1 -1
  179. package/dist/format.d.ts.map +1 -1
  180. package/dist/format.js +28 -9
  181. package/dist/format.js.map +1 -1
  182. package/dist/generated/crypto.d.ts +58 -0
  183. package/dist/generated/crypto.d.ts.map +1 -0
  184. package/dist/generated/crypto.js +15 -0
  185. package/dist/generated/crypto.js.map +1 -0
  186. package/dist/generated/iso/AED.d.ts +2 -0
  187. package/dist/generated/iso/AED.d.ts.map +1 -0
  188. package/dist/generated/iso/AED.js +5 -0
  189. package/dist/generated/iso/AED.js.map +1 -0
  190. package/dist/generated/iso/AFN.d.ts +2 -0
  191. package/dist/generated/iso/AFN.d.ts.map +1 -0
  192. package/dist/generated/iso/AFN.js +5 -0
  193. package/dist/generated/iso/AFN.js.map +1 -0
  194. package/dist/generated/iso/ALL.d.ts +2 -0
  195. package/dist/generated/iso/ALL.d.ts.map +1 -0
  196. package/dist/generated/iso/ALL.js +5 -0
  197. package/dist/generated/iso/ALL.js.map +1 -0
  198. package/dist/generated/iso/AMD.d.ts +2 -0
  199. package/dist/generated/iso/AMD.d.ts.map +1 -0
  200. package/dist/generated/iso/AMD.js +5 -0
  201. package/dist/generated/iso/AMD.js.map +1 -0
  202. package/dist/generated/iso/AOA.d.ts +2 -0
  203. package/dist/generated/iso/AOA.d.ts.map +1 -0
  204. package/dist/generated/iso/AOA.js +5 -0
  205. package/dist/generated/iso/AOA.js.map +1 -0
  206. package/dist/generated/iso/ARS.d.ts +2 -0
  207. package/dist/generated/iso/ARS.d.ts.map +1 -0
  208. package/dist/generated/iso/ARS.js +5 -0
  209. package/dist/generated/iso/ARS.js.map +1 -0
  210. package/dist/generated/iso/AUD.d.ts +2 -0
  211. package/dist/generated/iso/AUD.d.ts.map +1 -0
  212. package/dist/generated/iso/AUD.js +5 -0
  213. package/dist/generated/iso/AUD.js.map +1 -0
  214. package/dist/generated/iso/AWG.d.ts +2 -0
  215. package/dist/generated/iso/AWG.d.ts.map +1 -0
  216. package/dist/generated/iso/AWG.js +5 -0
  217. package/dist/generated/iso/AWG.js.map +1 -0
  218. package/dist/generated/iso/AZN.d.ts +2 -0
  219. package/dist/generated/iso/AZN.d.ts.map +1 -0
  220. package/dist/generated/iso/AZN.js +5 -0
  221. package/dist/generated/iso/AZN.js.map +1 -0
  222. package/dist/generated/iso/BAM.d.ts +2 -0
  223. package/dist/generated/iso/BAM.d.ts.map +1 -0
  224. package/dist/generated/iso/BAM.js +5 -0
  225. package/dist/generated/iso/BAM.js.map +1 -0
  226. package/dist/generated/iso/BBD.d.ts +2 -0
  227. package/dist/generated/iso/BBD.d.ts.map +1 -0
  228. package/dist/generated/iso/BBD.js +5 -0
  229. package/dist/generated/iso/BBD.js.map +1 -0
  230. package/dist/generated/iso/BDT.d.ts +2 -0
  231. package/dist/generated/iso/BDT.d.ts.map +1 -0
  232. package/dist/generated/iso/BDT.js +5 -0
  233. package/dist/generated/iso/BDT.js.map +1 -0
  234. package/dist/generated/iso/BHD.d.ts +2 -0
  235. package/dist/generated/iso/BHD.d.ts.map +1 -0
  236. package/dist/generated/iso/BHD.js +5 -0
  237. package/dist/generated/iso/BHD.js.map +1 -0
  238. package/dist/generated/iso/BIF.d.ts +2 -0
  239. package/dist/generated/iso/BIF.d.ts.map +1 -0
  240. package/dist/generated/iso/BIF.js +5 -0
  241. package/dist/generated/iso/BIF.js.map +1 -0
  242. package/dist/generated/iso/BMD.d.ts +2 -0
  243. package/dist/generated/iso/BMD.d.ts.map +1 -0
  244. package/dist/generated/iso/BMD.js +5 -0
  245. package/dist/generated/iso/BMD.js.map +1 -0
  246. package/dist/generated/iso/BND.d.ts +2 -0
  247. package/dist/generated/iso/BND.d.ts.map +1 -0
  248. package/dist/generated/iso/BND.js +5 -0
  249. package/dist/generated/iso/BND.js.map +1 -0
  250. package/dist/generated/iso/BOB.d.ts +2 -0
  251. package/dist/generated/iso/BOB.d.ts.map +1 -0
  252. package/dist/generated/iso/BOB.js +5 -0
  253. package/dist/generated/iso/BOB.js.map +1 -0
  254. package/dist/generated/iso/BOV.d.ts +2 -0
  255. package/dist/generated/iso/BOV.d.ts.map +1 -0
  256. package/dist/generated/iso/BOV.js +5 -0
  257. package/dist/generated/iso/BOV.js.map +1 -0
  258. package/dist/generated/iso/BRL.d.ts +2 -0
  259. package/dist/generated/iso/BRL.d.ts.map +1 -0
  260. package/dist/generated/iso/BRL.js +5 -0
  261. package/dist/generated/iso/BRL.js.map +1 -0
  262. package/dist/generated/iso/BSD.d.ts +2 -0
  263. package/dist/generated/iso/BSD.d.ts.map +1 -0
  264. package/dist/generated/iso/BSD.js +5 -0
  265. package/dist/generated/iso/BSD.js.map +1 -0
  266. package/dist/generated/iso/BTN.d.ts +2 -0
  267. package/dist/generated/iso/BTN.d.ts.map +1 -0
  268. package/dist/generated/iso/BTN.js +5 -0
  269. package/dist/generated/iso/BTN.js.map +1 -0
  270. package/dist/generated/iso/BWP.d.ts +2 -0
  271. package/dist/generated/iso/BWP.d.ts.map +1 -0
  272. package/dist/generated/iso/BWP.js +5 -0
  273. package/dist/generated/iso/BWP.js.map +1 -0
  274. package/dist/generated/iso/BYN.d.ts +2 -0
  275. package/dist/generated/iso/BYN.d.ts.map +1 -0
  276. package/dist/generated/iso/BYN.js +5 -0
  277. package/dist/generated/iso/BYN.js.map +1 -0
  278. package/dist/generated/iso/BZD.d.ts +2 -0
  279. package/dist/generated/iso/BZD.d.ts.map +1 -0
  280. package/dist/generated/iso/BZD.js +5 -0
  281. package/dist/generated/iso/BZD.js.map +1 -0
  282. package/dist/generated/iso/CAD.d.ts +2 -0
  283. package/dist/generated/iso/CAD.d.ts.map +1 -0
  284. package/dist/generated/iso/CAD.js +5 -0
  285. package/dist/generated/iso/CAD.js.map +1 -0
  286. package/dist/generated/iso/CDF.d.ts +2 -0
  287. package/dist/generated/iso/CDF.d.ts.map +1 -0
  288. package/dist/generated/iso/CDF.js +5 -0
  289. package/dist/generated/iso/CDF.js.map +1 -0
  290. package/dist/generated/iso/CHE.d.ts +2 -0
  291. package/dist/generated/iso/CHE.d.ts.map +1 -0
  292. package/dist/generated/iso/CHE.js +5 -0
  293. package/dist/generated/iso/CHE.js.map +1 -0
  294. package/dist/generated/iso/CHF.d.ts +2 -0
  295. package/dist/generated/iso/CHF.d.ts.map +1 -0
  296. package/dist/generated/iso/CHF.js +5 -0
  297. package/dist/generated/iso/CHF.js.map +1 -0
  298. package/dist/generated/iso/CHW.d.ts +2 -0
  299. package/dist/generated/iso/CHW.d.ts.map +1 -0
  300. package/dist/generated/iso/CHW.js +5 -0
  301. package/dist/generated/iso/CHW.js.map +1 -0
  302. package/dist/generated/iso/CLF.d.ts +2 -0
  303. package/dist/generated/iso/CLF.d.ts.map +1 -0
  304. package/dist/generated/iso/CLF.js +5 -0
  305. package/dist/generated/iso/CLF.js.map +1 -0
  306. package/dist/generated/iso/CLP.d.ts +2 -0
  307. package/dist/generated/iso/CLP.d.ts.map +1 -0
  308. package/dist/generated/iso/CLP.js +5 -0
  309. package/dist/generated/iso/CLP.js.map +1 -0
  310. package/dist/generated/iso/CNY.d.ts +2 -0
  311. package/dist/generated/iso/CNY.d.ts.map +1 -0
  312. package/dist/generated/iso/CNY.js +5 -0
  313. package/dist/generated/iso/CNY.js.map +1 -0
  314. package/dist/generated/iso/COP.d.ts +2 -0
  315. package/dist/generated/iso/COP.d.ts.map +1 -0
  316. package/dist/generated/iso/COP.js +5 -0
  317. package/dist/generated/iso/COP.js.map +1 -0
  318. package/dist/generated/iso/COU.d.ts +2 -0
  319. package/dist/generated/iso/COU.d.ts.map +1 -0
  320. package/dist/generated/iso/COU.js +5 -0
  321. package/dist/generated/iso/COU.js.map +1 -0
  322. package/dist/generated/iso/CRC.d.ts +2 -0
  323. package/dist/generated/iso/CRC.d.ts.map +1 -0
  324. package/dist/generated/iso/CRC.js +5 -0
  325. package/dist/generated/iso/CRC.js.map +1 -0
  326. package/dist/generated/iso/CUP.d.ts +2 -0
  327. package/dist/generated/iso/CUP.d.ts.map +1 -0
  328. package/dist/generated/iso/CUP.js +5 -0
  329. package/dist/generated/iso/CUP.js.map +1 -0
  330. package/dist/generated/iso/CVE.d.ts +2 -0
  331. package/dist/generated/iso/CVE.d.ts.map +1 -0
  332. package/dist/generated/iso/CVE.js +5 -0
  333. package/dist/generated/iso/CVE.js.map +1 -0
  334. package/dist/generated/iso/CZK.d.ts +2 -0
  335. package/dist/generated/iso/CZK.d.ts.map +1 -0
  336. package/dist/generated/iso/CZK.js +5 -0
  337. package/dist/generated/iso/CZK.js.map +1 -0
  338. package/dist/generated/iso/DJF.d.ts +2 -0
  339. package/dist/generated/iso/DJF.d.ts.map +1 -0
  340. package/dist/generated/iso/DJF.js +5 -0
  341. package/dist/generated/iso/DJF.js.map +1 -0
  342. package/dist/generated/iso/DKK.d.ts +2 -0
  343. package/dist/generated/iso/DKK.d.ts.map +1 -0
  344. package/dist/generated/iso/DKK.js +5 -0
  345. package/dist/generated/iso/DKK.js.map +1 -0
  346. package/dist/generated/iso/DOP.d.ts +2 -0
  347. package/dist/generated/iso/DOP.d.ts.map +1 -0
  348. package/dist/generated/iso/DOP.js +5 -0
  349. package/dist/generated/iso/DOP.js.map +1 -0
  350. package/dist/generated/iso/DZD.d.ts +2 -0
  351. package/dist/generated/iso/DZD.d.ts.map +1 -0
  352. package/dist/generated/iso/DZD.js +5 -0
  353. package/dist/generated/iso/DZD.js.map +1 -0
  354. package/dist/generated/iso/EGP.d.ts +2 -0
  355. package/dist/generated/iso/EGP.d.ts.map +1 -0
  356. package/dist/generated/iso/EGP.js +5 -0
  357. package/dist/generated/iso/EGP.js.map +1 -0
  358. package/dist/generated/iso/ERN.d.ts +2 -0
  359. package/dist/generated/iso/ERN.d.ts.map +1 -0
  360. package/dist/generated/iso/ERN.js +5 -0
  361. package/dist/generated/iso/ERN.js.map +1 -0
  362. package/dist/generated/iso/ETB.d.ts +2 -0
  363. package/dist/generated/iso/ETB.d.ts.map +1 -0
  364. package/dist/generated/iso/ETB.js +5 -0
  365. package/dist/generated/iso/ETB.js.map +1 -0
  366. package/dist/generated/iso/EUR.d.ts +2 -0
  367. package/dist/generated/iso/EUR.d.ts.map +1 -0
  368. package/dist/generated/iso/EUR.js +5 -0
  369. package/dist/generated/iso/EUR.js.map +1 -0
  370. package/dist/generated/iso/FJD.d.ts +2 -0
  371. package/dist/generated/iso/FJD.d.ts.map +1 -0
  372. package/dist/generated/iso/FJD.js +5 -0
  373. package/dist/generated/iso/FJD.js.map +1 -0
  374. package/dist/generated/iso/FKP.d.ts +2 -0
  375. package/dist/generated/iso/FKP.d.ts.map +1 -0
  376. package/dist/generated/iso/FKP.js +5 -0
  377. package/dist/generated/iso/FKP.js.map +1 -0
  378. package/dist/generated/iso/GBP.d.ts +2 -0
  379. package/dist/generated/iso/GBP.d.ts.map +1 -0
  380. package/dist/generated/iso/GBP.js +5 -0
  381. package/dist/generated/iso/GBP.js.map +1 -0
  382. package/dist/generated/iso/GEL.d.ts +2 -0
  383. package/dist/generated/iso/GEL.d.ts.map +1 -0
  384. package/dist/generated/iso/GEL.js +5 -0
  385. package/dist/generated/iso/GEL.js.map +1 -0
  386. package/dist/generated/iso/GHS.d.ts +2 -0
  387. package/dist/generated/iso/GHS.d.ts.map +1 -0
  388. package/dist/generated/iso/GHS.js +5 -0
  389. package/dist/generated/iso/GHS.js.map +1 -0
  390. package/dist/generated/iso/GIP.d.ts +2 -0
  391. package/dist/generated/iso/GIP.d.ts.map +1 -0
  392. package/dist/generated/iso/GIP.js +5 -0
  393. package/dist/generated/iso/GIP.js.map +1 -0
  394. package/dist/generated/iso/GMD.d.ts +2 -0
  395. package/dist/generated/iso/GMD.d.ts.map +1 -0
  396. package/dist/generated/iso/GMD.js +5 -0
  397. package/dist/generated/iso/GMD.js.map +1 -0
  398. package/dist/generated/iso/GNF.d.ts +2 -0
  399. package/dist/generated/iso/GNF.d.ts.map +1 -0
  400. package/dist/generated/iso/GNF.js +5 -0
  401. package/dist/generated/iso/GNF.js.map +1 -0
  402. package/dist/generated/iso/GTQ.d.ts +2 -0
  403. package/dist/generated/iso/GTQ.d.ts.map +1 -0
  404. package/dist/generated/iso/GTQ.js +5 -0
  405. package/dist/generated/iso/GTQ.js.map +1 -0
  406. package/dist/generated/iso/GYD.d.ts +2 -0
  407. package/dist/generated/iso/GYD.d.ts.map +1 -0
  408. package/dist/generated/iso/GYD.js +5 -0
  409. package/dist/generated/iso/GYD.js.map +1 -0
  410. package/dist/generated/iso/HKD.d.ts +2 -0
  411. package/dist/generated/iso/HKD.d.ts.map +1 -0
  412. package/dist/generated/iso/HKD.js +5 -0
  413. package/dist/generated/iso/HKD.js.map +1 -0
  414. package/dist/generated/iso/HNL.d.ts +2 -0
  415. package/dist/generated/iso/HNL.d.ts.map +1 -0
  416. package/dist/generated/iso/HNL.js +5 -0
  417. package/dist/generated/iso/HNL.js.map +1 -0
  418. package/dist/generated/iso/HTG.d.ts +2 -0
  419. package/dist/generated/iso/HTG.d.ts.map +1 -0
  420. package/dist/generated/iso/HTG.js +5 -0
  421. package/dist/generated/iso/HTG.js.map +1 -0
  422. package/dist/generated/iso/HUF.d.ts +2 -0
  423. package/dist/generated/iso/HUF.d.ts.map +1 -0
  424. package/dist/generated/iso/HUF.js +5 -0
  425. package/dist/generated/iso/HUF.js.map +1 -0
  426. package/dist/generated/iso/IDR.d.ts +2 -0
  427. package/dist/generated/iso/IDR.d.ts.map +1 -0
  428. package/dist/generated/iso/IDR.js +5 -0
  429. package/dist/generated/iso/IDR.js.map +1 -0
  430. package/dist/generated/iso/ILS.d.ts +2 -0
  431. package/dist/generated/iso/ILS.d.ts.map +1 -0
  432. package/dist/generated/iso/ILS.js +5 -0
  433. package/dist/generated/iso/ILS.js.map +1 -0
  434. package/dist/generated/iso/INR.d.ts +2 -0
  435. package/dist/generated/iso/INR.d.ts.map +1 -0
  436. package/dist/generated/iso/INR.js +5 -0
  437. package/dist/generated/iso/INR.js.map +1 -0
  438. package/dist/generated/iso/IQD.d.ts +2 -0
  439. package/dist/generated/iso/IQD.d.ts.map +1 -0
  440. package/dist/generated/iso/IQD.js +5 -0
  441. package/dist/generated/iso/IQD.js.map +1 -0
  442. package/dist/generated/iso/IRR.d.ts +2 -0
  443. package/dist/generated/iso/IRR.d.ts.map +1 -0
  444. package/dist/generated/iso/IRR.js +5 -0
  445. package/dist/generated/iso/IRR.js.map +1 -0
  446. package/dist/generated/iso/ISK.d.ts +2 -0
  447. package/dist/generated/iso/ISK.d.ts.map +1 -0
  448. package/dist/generated/iso/ISK.js +5 -0
  449. package/dist/generated/iso/ISK.js.map +1 -0
  450. package/dist/generated/iso/JMD.d.ts +2 -0
  451. package/dist/generated/iso/JMD.d.ts.map +1 -0
  452. package/dist/generated/iso/JMD.js +5 -0
  453. package/dist/generated/iso/JMD.js.map +1 -0
  454. package/dist/generated/iso/JOD.d.ts +2 -0
  455. package/dist/generated/iso/JOD.d.ts.map +1 -0
  456. package/dist/generated/iso/JOD.js +5 -0
  457. package/dist/generated/iso/JOD.js.map +1 -0
  458. package/dist/generated/iso/JPY.d.ts +2 -0
  459. package/dist/generated/iso/JPY.d.ts.map +1 -0
  460. package/dist/generated/iso/JPY.js +5 -0
  461. package/dist/generated/iso/JPY.js.map +1 -0
  462. package/dist/generated/iso/KES.d.ts +2 -0
  463. package/dist/generated/iso/KES.d.ts.map +1 -0
  464. package/dist/generated/iso/KES.js +5 -0
  465. package/dist/generated/iso/KES.js.map +1 -0
  466. package/dist/generated/iso/KGS.d.ts +2 -0
  467. package/dist/generated/iso/KGS.d.ts.map +1 -0
  468. package/dist/generated/iso/KGS.js +5 -0
  469. package/dist/generated/iso/KGS.js.map +1 -0
  470. package/dist/generated/iso/KHR.d.ts +2 -0
  471. package/dist/generated/iso/KHR.d.ts.map +1 -0
  472. package/dist/generated/iso/KHR.js +5 -0
  473. package/dist/generated/iso/KHR.js.map +1 -0
  474. package/dist/generated/iso/KMF.d.ts +2 -0
  475. package/dist/generated/iso/KMF.d.ts.map +1 -0
  476. package/dist/generated/iso/KMF.js +5 -0
  477. package/dist/generated/iso/KMF.js.map +1 -0
  478. package/dist/generated/iso/KPW.d.ts +2 -0
  479. package/dist/generated/iso/KPW.d.ts.map +1 -0
  480. package/dist/generated/iso/KPW.js +5 -0
  481. package/dist/generated/iso/KPW.js.map +1 -0
  482. package/dist/generated/iso/KRW.d.ts +2 -0
  483. package/dist/generated/iso/KRW.d.ts.map +1 -0
  484. package/dist/generated/iso/KRW.js +5 -0
  485. package/dist/generated/iso/KRW.js.map +1 -0
  486. package/dist/generated/iso/KWD.d.ts +2 -0
  487. package/dist/generated/iso/KWD.d.ts.map +1 -0
  488. package/dist/generated/iso/KWD.js +5 -0
  489. package/dist/generated/iso/KWD.js.map +1 -0
  490. package/dist/generated/iso/KYD.d.ts +2 -0
  491. package/dist/generated/iso/KYD.d.ts.map +1 -0
  492. package/dist/generated/iso/KYD.js +5 -0
  493. package/dist/generated/iso/KYD.js.map +1 -0
  494. package/dist/generated/iso/KZT.d.ts +2 -0
  495. package/dist/generated/iso/KZT.d.ts.map +1 -0
  496. package/dist/generated/iso/KZT.js +5 -0
  497. package/dist/generated/iso/KZT.js.map +1 -0
  498. package/dist/generated/iso/LAK.d.ts +2 -0
  499. package/dist/generated/iso/LAK.d.ts.map +1 -0
  500. package/dist/generated/iso/LAK.js +5 -0
  501. package/dist/generated/iso/LAK.js.map +1 -0
  502. package/dist/generated/iso/LBP.d.ts +2 -0
  503. package/dist/generated/iso/LBP.d.ts.map +1 -0
  504. package/dist/generated/iso/LBP.js +5 -0
  505. package/dist/generated/iso/LBP.js.map +1 -0
  506. package/dist/generated/iso/LKR.d.ts +2 -0
  507. package/dist/generated/iso/LKR.d.ts.map +1 -0
  508. package/dist/generated/iso/LKR.js +5 -0
  509. package/dist/generated/iso/LKR.js.map +1 -0
  510. package/dist/generated/iso/LRD.d.ts +2 -0
  511. package/dist/generated/iso/LRD.d.ts.map +1 -0
  512. package/dist/generated/iso/LRD.js +5 -0
  513. package/dist/generated/iso/LRD.js.map +1 -0
  514. package/dist/generated/iso/LSL.d.ts +2 -0
  515. package/dist/generated/iso/LSL.d.ts.map +1 -0
  516. package/dist/generated/iso/LSL.js +5 -0
  517. package/dist/generated/iso/LSL.js.map +1 -0
  518. package/dist/generated/iso/LYD.d.ts +2 -0
  519. package/dist/generated/iso/LYD.d.ts.map +1 -0
  520. package/dist/generated/iso/LYD.js +5 -0
  521. package/dist/generated/iso/LYD.js.map +1 -0
  522. package/dist/generated/iso/MAD.d.ts +2 -0
  523. package/dist/generated/iso/MAD.d.ts.map +1 -0
  524. package/dist/generated/iso/MAD.js +5 -0
  525. package/dist/generated/iso/MAD.js.map +1 -0
  526. package/dist/generated/iso/MDL.d.ts +2 -0
  527. package/dist/generated/iso/MDL.d.ts.map +1 -0
  528. package/dist/generated/iso/MDL.js +5 -0
  529. package/dist/generated/iso/MDL.js.map +1 -0
  530. package/dist/generated/iso/MGA.d.ts +2 -0
  531. package/dist/generated/iso/MGA.d.ts.map +1 -0
  532. package/dist/generated/iso/MGA.js +5 -0
  533. package/dist/generated/iso/MGA.js.map +1 -0
  534. package/dist/generated/iso/MKD.d.ts +2 -0
  535. package/dist/generated/iso/MKD.d.ts.map +1 -0
  536. package/dist/generated/iso/MKD.js +5 -0
  537. package/dist/generated/iso/MKD.js.map +1 -0
  538. package/dist/generated/iso/MMK.d.ts +2 -0
  539. package/dist/generated/iso/MMK.d.ts.map +1 -0
  540. package/dist/generated/iso/MMK.js +5 -0
  541. package/dist/generated/iso/MMK.js.map +1 -0
  542. package/dist/generated/iso/MNT.d.ts +2 -0
  543. package/dist/generated/iso/MNT.d.ts.map +1 -0
  544. package/dist/generated/iso/MNT.js +5 -0
  545. package/dist/generated/iso/MNT.js.map +1 -0
  546. package/dist/generated/iso/MOP.d.ts +2 -0
  547. package/dist/generated/iso/MOP.d.ts.map +1 -0
  548. package/dist/generated/iso/MOP.js +5 -0
  549. package/dist/generated/iso/MOP.js.map +1 -0
  550. package/dist/generated/iso/MRU.d.ts +2 -0
  551. package/dist/generated/iso/MRU.d.ts.map +1 -0
  552. package/dist/generated/iso/MRU.js +5 -0
  553. package/dist/generated/iso/MRU.js.map +1 -0
  554. package/dist/generated/iso/MUR.d.ts +2 -0
  555. package/dist/generated/iso/MUR.d.ts.map +1 -0
  556. package/dist/generated/iso/MUR.js +5 -0
  557. package/dist/generated/iso/MUR.js.map +1 -0
  558. package/dist/generated/iso/MVR.d.ts +2 -0
  559. package/dist/generated/iso/MVR.d.ts.map +1 -0
  560. package/dist/generated/iso/MVR.js +5 -0
  561. package/dist/generated/iso/MVR.js.map +1 -0
  562. package/dist/generated/iso/MWK.d.ts +2 -0
  563. package/dist/generated/iso/MWK.d.ts.map +1 -0
  564. package/dist/generated/iso/MWK.js +5 -0
  565. package/dist/generated/iso/MWK.js.map +1 -0
  566. package/dist/generated/iso/MXN.d.ts +2 -0
  567. package/dist/generated/iso/MXN.d.ts.map +1 -0
  568. package/dist/generated/iso/MXN.js +5 -0
  569. package/dist/generated/iso/MXN.js.map +1 -0
  570. package/dist/generated/iso/MXV.d.ts +2 -0
  571. package/dist/generated/iso/MXV.d.ts.map +1 -0
  572. package/dist/generated/iso/MXV.js +5 -0
  573. package/dist/generated/iso/MXV.js.map +1 -0
  574. package/dist/generated/iso/MYR.d.ts +2 -0
  575. package/dist/generated/iso/MYR.d.ts.map +1 -0
  576. package/dist/generated/iso/MYR.js +5 -0
  577. package/dist/generated/iso/MYR.js.map +1 -0
  578. package/dist/generated/iso/MZN.d.ts +2 -0
  579. package/dist/generated/iso/MZN.d.ts.map +1 -0
  580. package/dist/generated/iso/MZN.js +5 -0
  581. package/dist/generated/iso/MZN.js.map +1 -0
  582. package/dist/generated/iso/NAD.d.ts +2 -0
  583. package/dist/generated/iso/NAD.d.ts.map +1 -0
  584. package/dist/generated/iso/NAD.js +5 -0
  585. package/dist/generated/iso/NAD.js.map +1 -0
  586. package/dist/generated/iso/NGN.d.ts +2 -0
  587. package/dist/generated/iso/NGN.d.ts.map +1 -0
  588. package/dist/generated/iso/NGN.js +5 -0
  589. package/dist/generated/iso/NGN.js.map +1 -0
  590. package/dist/generated/iso/NIO.d.ts +2 -0
  591. package/dist/generated/iso/NIO.d.ts.map +1 -0
  592. package/dist/generated/iso/NIO.js +5 -0
  593. package/dist/generated/iso/NIO.js.map +1 -0
  594. package/dist/generated/iso/NOK.d.ts +2 -0
  595. package/dist/generated/iso/NOK.d.ts.map +1 -0
  596. package/dist/generated/iso/NOK.js +5 -0
  597. package/dist/generated/iso/NOK.js.map +1 -0
  598. package/dist/generated/iso/NPR.d.ts +2 -0
  599. package/dist/generated/iso/NPR.d.ts.map +1 -0
  600. package/dist/generated/iso/NPR.js +5 -0
  601. package/dist/generated/iso/NPR.js.map +1 -0
  602. package/dist/generated/iso/NZD.d.ts +2 -0
  603. package/dist/generated/iso/NZD.d.ts.map +1 -0
  604. package/dist/generated/iso/NZD.js +5 -0
  605. package/dist/generated/iso/NZD.js.map +1 -0
  606. package/dist/generated/iso/OMR.d.ts +2 -0
  607. package/dist/generated/iso/OMR.d.ts.map +1 -0
  608. package/dist/generated/iso/OMR.js +5 -0
  609. package/dist/generated/iso/OMR.js.map +1 -0
  610. package/dist/generated/iso/PAB.d.ts +2 -0
  611. package/dist/generated/iso/PAB.d.ts.map +1 -0
  612. package/dist/generated/iso/PAB.js +5 -0
  613. package/dist/generated/iso/PAB.js.map +1 -0
  614. package/dist/generated/iso/PEN.d.ts +2 -0
  615. package/dist/generated/iso/PEN.d.ts.map +1 -0
  616. package/dist/generated/iso/PEN.js +5 -0
  617. package/dist/generated/iso/PEN.js.map +1 -0
  618. package/dist/generated/iso/PGK.d.ts +2 -0
  619. package/dist/generated/iso/PGK.d.ts.map +1 -0
  620. package/dist/generated/iso/PGK.js +5 -0
  621. package/dist/generated/iso/PGK.js.map +1 -0
  622. package/dist/generated/iso/PHP.d.ts +2 -0
  623. package/dist/generated/iso/PHP.d.ts.map +1 -0
  624. package/dist/generated/iso/PHP.js +5 -0
  625. package/dist/generated/iso/PHP.js.map +1 -0
  626. package/dist/generated/iso/PKR.d.ts +2 -0
  627. package/dist/generated/iso/PKR.d.ts.map +1 -0
  628. package/dist/generated/iso/PKR.js +5 -0
  629. package/dist/generated/iso/PKR.js.map +1 -0
  630. package/dist/generated/iso/PLN.d.ts +2 -0
  631. package/dist/generated/iso/PLN.d.ts.map +1 -0
  632. package/dist/generated/iso/PLN.js +5 -0
  633. package/dist/generated/iso/PLN.js.map +1 -0
  634. package/dist/generated/iso/PYG.d.ts +2 -0
  635. package/dist/generated/iso/PYG.d.ts.map +1 -0
  636. package/dist/generated/iso/PYG.js +5 -0
  637. package/dist/generated/iso/PYG.js.map +1 -0
  638. package/dist/generated/iso/QAR.d.ts +2 -0
  639. package/dist/generated/iso/QAR.d.ts.map +1 -0
  640. package/dist/generated/iso/QAR.js +5 -0
  641. package/dist/generated/iso/QAR.js.map +1 -0
  642. package/dist/generated/iso/RON.d.ts +2 -0
  643. package/dist/generated/iso/RON.d.ts.map +1 -0
  644. package/dist/generated/iso/RON.js +5 -0
  645. package/dist/generated/iso/RON.js.map +1 -0
  646. package/dist/generated/iso/RSD.d.ts +2 -0
  647. package/dist/generated/iso/RSD.d.ts.map +1 -0
  648. package/dist/generated/iso/RSD.js +5 -0
  649. package/dist/generated/iso/RSD.js.map +1 -0
  650. package/dist/generated/iso/RUB.d.ts +2 -0
  651. package/dist/generated/iso/RUB.d.ts.map +1 -0
  652. package/dist/generated/iso/RUB.js +5 -0
  653. package/dist/generated/iso/RUB.js.map +1 -0
  654. package/dist/generated/iso/RWF.d.ts +2 -0
  655. package/dist/generated/iso/RWF.d.ts.map +1 -0
  656. package/dist/generated/iso/RWF.js +5 -0
  657. package/dist/generated/iso/RWF.js.map +1 -0
  658. package/dist/generated/iso/SAR.d.ts +2 -0
  659. package/dist/generated/iso/SAR.d.ts.map +1 -0
  660. package/dist/generated/iso/SAR.js +5 -0
  661. package/dist/generated/iso/SAR.js.map +1 -0
  662. package/dist/generated/iso/SBD.d.ts +2 -0
  663. package/dist/generated/iso/SBD.d.ts.map +1 -0
  664. package/dist/generated/iso/SBD.js +5 -0
  665. package/dist/generated/iso/SBD.js.map +1 -0
  666. package/dist/generated/iso/SCR.d.ts +2 -0
  667. package/dist/generated/iso/SCR.d.ts.map +1 -0
  668. package/dist/generated/iso/SCR.js +5 -0
  669. package/dist/generated/iso/SCR.js.map +1 -0
  670. package/dist/generated/iso/SDG.d.ts +2 -0
  671. package/dist/generated/iso/SDG.d.ts.map +1 -0
  672. package/dist/generated/iso/SDG.js +5 -0
  673. package/dist/generated/iso/SDG.js.map +1 -0
  674. package/dist/generated/iso/SEK.d.ts +2 -0
  675. package/dist/generated/iso/SEK.d.ts.map +1 -0
  676. package/dist/generated/iso/SEK.js +5 -0
  677. package/dist/generated/iso/SEK.js.map +1 -0
  678. package/dist/generated/iso/SGD.d.ts +2 -0
  679. package/dist/generated/iso/SGD.d.ts.map +1 -0
  680. package/dist/generated/iso/SGD.js +5 -0
  681. package/dist/generated/iso/SGD.js.map +1 -0
  682. package/dist/generated/iso/SHP.d.ts +2 -0
  683. package/dist/generated/iso/SHP.d.ts.map +1 -0
  684. package/dist/generated/iso/SHP.js +5 -0
  685. package/dist/generated/iso/SHP.js.map +1 -0
  686. package/dist/generated/iso/SLE.d.ts +2 -0
  687. package/dist/generated/iso/SLE.d.ts.map +1 -0
  688. package/dist/generated/iso/SLE.js +5 -0
  689. package/dist/generated/iso/SLE.js.map +1 -0
  690. package/dist/generated/iso/SOS.d.ts +2 -0
  691. package/dist/generated/iso/SOS.d.ts.map +1 -0
  692. package/dist/generated/iso/SOS.js +5 -0
  693. package/dist/generated/iso/SOS.js.map +1 -0
  694. package/dist/generated/iso/SRD.d.ts +2 -0
  695. package/dist/generated/iso/SRD.d.ts.map +1 -0
  696. package/dist/generated/iso/SRD.js +5 -0
  697. package/dist/generated/iso/SRD.js.map +1 -0
  698. package/dist/generated/iso/SSP.d.ts +2 -0
  699. package/dist/generated/iso/SSP.d.ts.map +1 -0
  700. package/dist/generated/iso/SSP.js +5 -0
  701. package/dist/generated/iso/SSP.js.map +1 -0
  702. package/dist/generated/iso/STN.d.ts +2 -0
  703. package/dist/generated/iso/STN.d.ts.map +1 -0
  704. package/dist/generated/iso/STN.js +5 -0
  705. package/dist/generated/iso/STN.js.map +1 -0
  706. package/dist/generated/iso/SVC.d.ts +2 -0
  707. package/dist/generated/iso/SVC.d.ts.map +1 -0
  708. package/dist/generated/iso/SVC.js +5 -0
  709. package/dist/generated/iso/SVC.js.map +1 -0
  710. package/dist/generated/iso/SYP.d.ts +2 -0
  711. package/dist/generated/iso/SYP.d.ts.map +1 -0
  712. package/dist/generated/iso/SYP.js +5 -0
  713. package/dist/generated/iso/SYP.js.map +1 -0
  714. package/dist/generated/iso/SZL.d.ts +2 -0
  715. package/dist/generated/iso/SZL.d.ts.map +1 -0
  716. package/dist/generated/iso/SZL.js +5 -0
  717. package/dist/generated/iso/SZL.js.map +1 -0
  718. package/dist/generated/iso/THB.d.ts +2 -0
  719. package/dist/generated/iso/THB.d.ts.map +1 -0
  720. package/dist/generated/iso/THB.js +5 -0
  721. package/dist/generated/iso/THB.js.map +1 -0
  722. package/dist/generated/iso/TJS.d.ts +2 -0
  723. package/dist/generated/iso/TJS.d.ts.map +1 -0
  724. package/dist/generated/iso/TJS.js +5 -0
  725. package/dist/generated/iso/TJS.js.map +1 -0
  726. package/dist/generated/iso/TMT.d.ts +2 -0
  727. package/dist/generated/iso/TMT.d.ts.map +1 -0
  728. package/dist/generated/iso/TMT.js +5 -0
  729. package/dist/generated/iso/TMT.js.map +1 -0
  730. package/dist/generated/iso/TND.d.ts +2 -0
  731. package/dist/generated/iso/TND.d.ts.map +1 -0
  732. package/dist/generated/iso/TND.js +5 -0
  733. package/dist/generated/iso/TND.js.map +1 -0
  734. package/dist/generated/iso/TOP.d.ts +2 -0
  735. package/dist/generated/iso/TOP.d.ts.map +1 -0
  736. package/dist/generated/iso/TOP.js +5 -0
  737. package/dist/generated/iso/TOP.js.map +1 -0
  738. package/dist/generated/iso/TRY.d.ts +2 -0
  739. package/dist/generated/iso/TRY.d.ts.map +1 -0
  740. package/dist/generated/iso/TRY.js +5 -0
  741. package/dist/generated/iso/TRY.js.map +1 -0
  742. package/dist/generated/iso/TTD.d.ts +2 -0
  743. package/dist/generated/iso/TTD.d.ts.map +1 -0
  744. package/dist/generated/iso/TTD.js +5 -0
  745. package/dist/generated/iso/TTD.js.map +1 -0
  746. package/dist/generated/iso/TWD.d.ts +2 -0
  747. package/dist/generated/iso/TWD.d.ts.map +1 -0
  748. package/dist/generated/iso/TWD.js +5 -0
  749. package/dist/generated/iso/TWD.js.map +1 -0
  750. package/dist/generated/iso/TZS.d.ts +2 -0
  751. package/dist/generated/iso/TZS.d.ts.map +1 -0
  752. package/dist/generated/iso/TZS.js +5 -0
  753. package/dist/generated/iso/TZS.js.map +1 -0
  754. package/dist/generated/iso/UAH.d.ts +2 -0
  755. package/dist/generated/iso/UAH.d.ts.map +1 -0
  756. package/dist/generated/iso/UAH.js +5 -0
  757. package/dist/generated/iso/UAH.js.map +1 -0
  758. package/dist/generated/iso/UGX.d.ts +2 -0
  759. package/dist/generated/iso/UGX.d.ts.map +1 -0
  760. package/dist/generated/iso/UGX.js +5 -0
  761. package/dist/generated/iso/UGX.js.map +1 -0
  762. package/dist/generated/iso/USD.d.ts +2 -0
  763. package/dist/generated/iso/USD.d.ts.map +1 -0
  764. package/dist/generated/iso/USD.js +5 -0
  765. package/dist/generated/iso/USD.js.map +1 -0
  766. package/dist/generated/iso/USN.d.ts +2 -0
  767. package/dist/generated/iso/USN.d.ts.map +1 -0
  768. package/dist/generated/iso/USN.js +5 -0
  769. package/dist/generated/iso/USN.js.map +1 -0
  770. package/dist/generated/iso/UYI.d.ts +2 -0
  771. package/dist/generated/iso/UYI.d.ts.map +1 -0
  772. package/dist/generated/iso/UYI.js +5 -0
  773. package/dist/generated/iso/UYI.js.map +1 -0
  774. package/dist/generated/iso/UYU.d.ts +2 -0
  775. package/dist/generated/iso/UYU.d.ts.map +1 -0
  776. package/dist/generated/iso/UYU.js +5 -0
  777. package/dist/generated/iso/UYU.js.map +1 -0
  778. package/dist/generated/iso/UYW.d.ts +2 -0
  779. package/dist/generated/iso/UYW.d.ts.map +1 -0
  780. package/dist/generated/iso/UYW.js +5 -0
  781. package/dist/generated/iso/UYW.js.map +1 -0
  782. package/dist/generated/iso/UZS.d.ts +2 -0
  783. package/dist/generated/iso/UZS.d.ts.map +1 -0
  784. package/dist/generated/iso/UZS.js +5 -0
  785. package/dist/generated/iso/UZS.js.map +1 -0
  786. package/dist/generated/iso/VED.d.ts +2 -0
  787. package/dist/generated/iso/VED.d.ts.map +1 -0
  788. package/dist/generated/iso/VED.js +5 -0
  789. package/dist/generated/iso/VED.js.map +1 -0
  790. package/dist/generated/iso/VES.d.ts +2 -0
  791. package/dist/generated/iso/VES.d.ts.map +1 -0
  792. package/dist/generated/iso/VES.js +5 -0
  793. package/dist/generated/iso/VES.js.map +1 -0
  794. package/dist/generated/iso/VND.d.ts +2 -0
  795. package/dist/generated/iso/VND.d.ts.map +1 -0
  796. package/dist/generated/iso/VND.js +5 -0
  797. package/dist/generated/iso/VND.js.map +1 -0
  798. package/dist/generated/iso/VUV.d.ts +2 -0
  799. package/dist/generated/iso/VUV.d.ts.map +1 -0
  800. package/dist/generated/iso/VUV.js +5 -0
  801. package/dist/generated/iso/VUV.js.map +1 -0
  802. package/dist/generated/iso/WST.d.ts +2 -0
  803. package/dist/generated/iso/WST.d.ts.map +1 -0
  804. package/dist/generated/iso/WST.js +5 -0
  805. package/dist/generated/iso/WST.js.map +1 -0
  806. package/dist/generated/iso/XAD.d.ts +2 -0
  807. package/dist/generated/iso/XAD.d.ts.map +1 -0
  808. package/dist/generated/iso/XAD.js +5 -0
  809. package/dist/generated/iso/XAD.js.map +1 -0
  810. package/dist/generated/iso/XAF.d.ts +2 -0
  811. package/dist/generated/iso/XAF.d.ts.map +1 -0
  812. package/dist/generated/iso/XAF.js +5 -0
  813. package/dist/generated/iso/XAF.js.map +1 -0
  814. package/dist/generated/iso/XCD.d.ts +2 -0
  815. package/dist/generated/iso/XCD.d.ts.map +1 -0
  816. package/dist/generated/iso/XCD.js +5 -0
  817. package/dist/generated/iso/XCD.js.map +1 -0
  818. package/dist/generated/iso/XCG.d.ts +2 -0
  819. package/dist/generated/iso/XCG.d.ts.map +1 -0
  820. package/dist/generated/iso/XCG.js +5 -0
  821. package/dist/generated/iso/XCG.js.map +1 -0
  822. package/dist/generated/iso/XOF.d.ts +2 -0
  823. package/dist/generated/iso/XOF.d.ts.map +1 -0
  824. package/dist/generated/iso/XOF.js +5 -0
  825. package/dist/generated/iso/XOF.js.map +1 -0
  826. package/dist/generated/iso/XPF.d.ts +2 -0
  827. package/dist/generated/iso/XPF.d.ts.map +1 -0
  828. package/dist/generated/iso/XPF.js +5 -0
  829. package/dist/generated/iso/XPF.js.map +1 -0
  830. package/dist/generated/iso/YER.d.ts +2 -0
  831. package/dist/generated/iso/YER.d.ts.map +1 -0
  832. package/dist/generated/iso/YER.js +5 -0
  833. package/dist/generated/iso/YER.js.map +1 -0
  834. package/dist/generated/iso/ZAR.d.ts +2 -0
  835. package/dist/generated/iso/ZAR.d.ts.map +1 -0
  836. package/dist/generated/iso/ZAR.js +5 -0
  837. package/dist/generated/iso/ZAR.js.map +1 -0
  838. package/dist/generated/iso/ZMW.d.ts +2 -0
  839. package/dist/generated/iso/ZMW.d.ts.map +1 -0
  840. package/dist/generated/iso/ZMW.js +5 -0
  841. package/dist/generated/iso/ZMW.js.map +1 -0
  842. package/dist/generated/iso/ZWG.d.ts +2 -0
  843. package/dist/generated/iso/ZWG.d.ts.map +1 -0
  844. package/dist/generated/iso/ZWG.js +5 -0
  845. package/dist/generated/iso/ZWG.js.map +1 -0
  846. package/dist/generated/iso4217-numeric.d.ts +3 -0
  847. package/dist/generated/iso4217-numeric.d.ts.map +1 -0
  848. package/dist/generated/iso4217-numeric.js +184 -0
  849. package/dist/generated/iso4217-numeric.js.map +1 -0
  850. package/dist/generated/rbnf-de.d.ts +3 -0
  851. package/dist/generated/rbnf-de.d.ts.map +1 -0
  852. package/dist/generated/rbnf-de.js +5 -0
  853. package/dist/generated/rbnf-de.js.map +1 -0
  854. package/dist/generated/rbnf-en.d.ts +3 -0
  855. package/dist/generated/rbnf-en.d.ts.map +1 -0
  856. package/dist/generated/rbnf-en.js +5 -0
  857. package/dist/generated/rbnf-en.js.map +1 -0
  858. package/dist/generated/rbnf-es.d.ts +3 -0
  859. package/dist/generated/rbnf-es.d.ts.map +1 -0
  860. package/dist/generated/rbnf-es.js +5 -0
  861. package/dist/generated/rbnf-es.js.map +1 -0
  862. package/dist/generated/rbnf-fr.d.ts +3 -0
  863. package/dist/generated/rbnf-fr.d.ts.map +1 -0
  864. package/dist/generated/rbnf-fr.js +5 -0
  865. package/dist/generated/rbnf-fr.js.map +1 -0
  866. package/dist/generated/rbnf-it.d.ts +3 -0
  867. package/dist/generated/rbnf-it.d.ts.map +1 -0
  868. package/dist/generated/rbnf-it.js +5 -0
  869. package/dist/generated/rbnf-it.js.map +1 -0
  870. package/dist/generated/rbnf-nl.d.ts +3 -0
  871. package/dist/generated/rbnf-nl.d.ts.map +1 -0
  872. package/dist/generated/rbnf-nl.js +5 -0
  873. package/dist/generated/rbnf-nl.js.map +1 -0
  874. package/dist/generated/rbnf-pt.d.ts +3 -0
  875. package/dist/generated/rbnf-pt.d.ts.map +1 -0
  876. package/dist/generated/rbnf-pt.js +5 -0
  877. package/dist/generated/rbnf-pt.js.map +1 -0
  878. package/dist/generated/territories.d.ts +6 -0
  879. package/dist/generated/territories.d.ts.map +1 -0
  880. package/dist/generated/territories.js +275 -0
  881. package/dist/generated/territories.js.map +1 -0
  882. package/dist/index.d.ts +1 -0
  883. package/dist/index.d.ts.map +1 -1
  884. package/dist/index.js +2 -0
  885. package/dist/index.js.map +1 -1
  886. package/dist/kysely.d.ts.map +1 -1
  887. package/dist/kysely.js +2 -2
  888. package/dist/kysely.js.map +1 -1
  889. package/dist/math.d.ts +41 -0
  890. package/dist/math.d.ts.map +1 -0
  891. package/dist/math.js +132 -0
  892. package/dist/math.js.map +1 -0
  893. package/dist/money.d.ts +39 -57
  894. package/dist/money.d.ts.map +1 -1
  895. package/dist/money.js +118 -128
  896. package/dist/money.js.map +1 -1
  897. package/dist/parse.js +7 -7
  898. package/dist/parse.js.map +1 -1
  899. package/dist/plugins/adyen.d.ts +2 -0
  900. package/dist/plugins/adyen.d.ts.map +1 -1
  901. package/dist/plugins/adyen.js +2 -0
  902. package/dist/plugins/adyen.js.map +1 -1
  903. package/dist/plugins/all.d.ts +18 -2
  904. package/dist/plugins/all.d.ts.map +1 -1
  905. package/dist/plugins/all.js +19 -2
  906. package/dist/plugins/all.js.map +1 -1
  907. package/dist/plugins/allocate.d.ts +1 -0
  908. package/dist/plugins/allocate.d.ts.map +1 -1
  909. package/dist/plugins/allocate.js +2 -0
  910. package/dist/plugins/allocate.js.map +1 -1
  911. package/dist/plugins/braintree.d.ts +1 -0
  912. package/dist/plugins/braintree.d.ts.map +1 -1
  913. package/dist/plugins/braintree.js +2 -0
  914. package/dist/plugins/braintree.js.map +1 -1
  915. package/dist/plugins/cash.d.ts +1 -0
  916. package/dist/plugins/cash.d.ts.map +1 -1
  917. package/dist/plugins/cash.js +2 -0
  918. package/dist/plugins/cash.js.map +1 -1
  919. package/dist/plugins/checkout.d.ts +1 -0
  920. package/dist/plugins/checkout.d.ts.map +1 -1
  921. package/dist/plugins/checkout.js +2 -0
  922. package/dist/plugins/checkout.js.map +1 -1
  923. package/dist/plugins/convert.d.ts +5 -0
  924. package/dist/plugins/convert.d.ts.map +1 -1
  925. package/dist/plugins/convert.js +2 -0
  926. package/dist/plugins/convert.js.map +1 -1
  927. package/dist/plugins/core.d.ts +78 -0
  928. package/dist/plugins/core.d.ts.map +1 -0
  929. package/dist/plugins/core.js +104 -0
  930. package/dist/plugins/core.js.map +1 -0
  931. package/dist/plugins/exact.d.ts +1 -0
  932. package/dist/plugins/exact.d.ts.map +1 -1
  933. package/dist/plugins/exact.js +2 -0
  934. package/dist/plugins/exact.js.map +1 -1
  935. package/dist/plugins/fixed-money.d.ts +31 -0
  936. package/dist/plugins/fixed-money.d.ts.map +1 -0
  937. package/dist/plugins/fixed-money.js +29 -0
  938. package/dist/plugins/fixed-money.js.map +1 -0
  939. package/dist/plugins/format.d.ts +5 -0
  940. package/dist/plugins/format.d.ts.map +1 -1
  941. package/dist/plugins/format.js +2 -0
  942. package/dist/plugins/format.js.map +1 -1
  943. package/dist/plugins/iso.d.ts +2 -0
  944. package/dist/plugins/iso.d.ts.map +1 -0
  945. package/dist/plugins/iso.js +9 -0
  946. package/dist/plugins/iso.js.map +1 -0
  947. package/dist/plugins/klarna.d.ts +1 -0
  948. package/dist/plugins/klarna.d.ts.map +1 -1
  949. package/dist/plugins/klarna.js +2 -0
  950. package/dist/plugins/klarna.js.map +1 -1
  951. package/dist/plugins/math.d.ts +20 -0
  952. package/dist/plugins/math.d.ts.map +1 -0
  953. package/dist/plugins/math.js +24 -0
  954. package/dist/plugins/math.js.map +1 -0
  955. package/dist/plugins/paypal.d.ts +5 -0
  956. package/dist/plugins/paypal.d.ts.map +1 -1
  957. package/dist/plugins/paypal.js +6 -0
  958. package/dist/plugins/paypal.js.map +1 -1
  959. package/dist/plugins/prisma.d.ts +5 -0
  960. package/dist/plugins/prisma.d.ts.map +1 -1
  961. package/dist/plugins/prisma.js +6 -0
  962. package/dist/plugins/prisma.js.map +1 -1
  963. package/dist/plugins/stripe.d.ts +5 -0
  964. package/dist/plugins/stripe.d.ts.map +1 -1
  965. package/dist/plugins/stripe.js +6 -0
  966. package/dist/plugins/stripe.js.map +1 -1
  967. package/dist/plugins/tax.d.ts +1 -0
  968. package/dist/plugins/tax.d.ts.map +1 -1
  969. package/dist/plugins/tax.js +6 -0
  970. package/dist/plugins/tax.js.map +1 -1
  971. package/dist/policy.d.ts.map +1 -1
  972. package/dist/policy.js +5 -6
  973. package/dist/policy.js.map +1 -1
  974. package/dist/pricing.d.ts +52 -0
  975. package/dist/pricing.d.ts.map +1 -0
  976. package/dist/pricing.js +100 -0
  977. package/dist/pricing.js.map +1 -0
  978. package/dist/prisma.d.ts.map +1 -1
  979. package/dist/prisma.js +6 -2
  980. package/dist/prisma.js.map +1 -1
  981. package/dist/provider.js +2 -2
  982. package/dist/provider.js.map +1 -1
  983. package/dist/rate-text.d.ts +6 -0
  984. package/dist/rate-text.d.ts.map +1 -1
  985. package/dist/rate-text.js +24 -1
  986. package/dist/rate-text.js.map +1 -1
  987. package/dist/rate.d.ts.map +1 -1
  988. package/dist/rate.js +2 -3
  989. package/dist/rate.js.map +1 -1
  990. package/dist/rbnf.d.ts +29 -0
  991. package/dist/rbnf.d.ts.map +1 -0
  992. package/dist/rbnf.js +301 -0
  993. package/dist/rbnf.js.map +1 -0
  994. package/dist/rounding.d.ts +15 -0
  995. package/dist/rounding.d.ts.map +1 -1
  996. package/dist/rounding.js +32 -0
  997. package/dist/rounding.js.map +1 -1
  998. package/dist/scale.d.ts +8 -0
  999. package/dist/scale.d.ts.map +1 -0
  1000. package/dist/scale.js +34 -0
  1001. package/dist/scale.js.map +1 -0
  1002. package/dist/schema.d.ts.map +1 -1
  1003. package/dist/schema.js +4 -5
  1004. package/dist/schema.js.map +1 -1
  1005. package/dist/territories.d.ts +40 -0
  1006. package/dist/territories.d.ts.map +1 -0
  1007. package/dist/territories.js +71 -0
  1008. package/dist/territories.js.map +1 -0
  1009. package/dist/testing/arbitraries.d.ts.map +1 -1
  1010. package/dist/testing/arbitraries.js +4 -4
  1011. package/dist/testing/arbitraries.js.map +1 -1
  1012. package/dist/testing/index.js +1 -1
  1013. package/dist/testing/index.js.map +1 -1
  1014. package/dist/tiers.d.ts +95 -0
  1015. package/dist/tiers.d.ts.map +1 -0
  1016. package/dist/tiers.js +173 -0
  1017. package/dist/tiers.js.map +1 -0
  1018. package/dist/valibot.d.ts.map +1 -1
  1019. package/dist/valibot.js +4 -1
  1020. package/dist/valibot.js.map +1 -1
  1021. package/dist/wire.d.ts +105 -0
  1022. package/dist/wire.d.ts.map +1 -0
  1023. package/dist/wire.js +212 -0
  1024. package/dist/wire.js.map +1 -0
  1025. package/dist/words/de.d.ts +4 -0
  1026. package/dist/words/de.d.ts.map +1 -0
  1027. package/dist/words/de.js +8 -0
  1028. package/dist/words/de.js.map +1 -0
  1029. package/dist/words/en.d.ts +4 -0
  1030. package/dist/words/en.d.ts.map +1 -0
  1031. package/dist/words/en.js +8 -0
  1032. package/dist/words/en.js.map +1 -0
  1033. package/dist/words/es.d.ts +4 -0
  1034. package/dist/words/es.d.ts.map +1 -0
  1035. package/dist/words/es.js +8 -0
  1036. package/dist/words/es.js.map +1 -0
  1037. package/dist/words/fr.d.ts +4 -0
  1038. package/dist/words/fr.d.ts.map +1 -0
  1039. package/dist/words/fr.js +8 -0
  1040. package/dist/words/fr.js.map +1 -0
  1041. package/dist/words/it.d.ts +4 -0
  1042. package/dist/words/it.d.ts.map +1 -0
  1043. package/dist/words/it.js +8 -0
  1044. package/dist/words/it.js.map +1 -0
  1045. package/dist/words/nl.d.ts +4 -0
  1046. package/dist/words/nl.d.ts.map +1 -0
  1047. package/dist/words/nl.js +8 -0
  1048. package/dist/words/nl.js.map +1 -0
  1049. package/dist/words/pt.d.ts +4 -0
  1050. package/dist/words/pt.d.ts.map +1 -0
  1051. package/dist/words/pt.js +8 -0
  1052. package/dist/words/pt.js.map +1 -0
  1053. package/dist/words.d.ts +63 -0
  1054. package/dist/words.d.ts.map +1 -0
  1055. package/dist/words.js +107 -0
  1056. package/dist/words.js.map +1 -0
  1057. package/dist/zod.d.ts.map +1 -1
  1058. package/dist/zod.js +1 -1
  1059. package/dist/zod.js.map +1 -1
  1060. package/package.json +312 -54
  1061. package/src/adyen-fx.ts +1 -1
  1062. package/src/allocate.ts +4 -3
  1063. package/src/cash.ts +26 -0
  1064. package/src/convert.ts +2 -3
  1065. package/src/crypto.ts +129 -0
  1066. package/src/currencies.ts +123 -0
  1067. package/src/currency.ts +45 -14
  1068. package/src/decimal.ts +98 -10
  1069. package/src/ecb.ts +75 -16
  1070. package/src/entries/adyen-fx.ts +5 -0
  1071. package/src/entries/boc.ts +5 -0
  1072. package/src/entries/boe.ts +5 -0
  1073. package/src/entries/crypto.ts +5 -0
  1074. package/src/entries/currencies.ts +5 -0
  1075. package/src/entries/drizzle-mysql.ts +5 -0
  1076. package/src/entries/drizzle-pg.ts +5 -0
  1077. package/src/entries/drizzle-sqlite.ts +5 -0
  1078. package/src/entries/ecb.ts +5 -0
  1079. package/src/entries/fed.ts +5 -0
  1080. package/src/entries/fetch.ts +5 -0
  1081. package/src/entries/finance.ts +5 -0
  1082. package/src/entries/historic.ts +5 -0
  1083. package/src/entries/history.ts +5 -0
  1084. package/src/entries/hmrc.ts +5 -0
  1085. package/src/entries/kysely.ts +5 -0
  1086. package/src/entries/parse.ts +5 -0
  1087. package/src/entries/pg.ts +5 -0
  1088. package/src/entries/policy.ts +5 -0
  1089. package/src/entries/pricing.ts +5 -0
  1090. package/src/entries/stripe-fx.ts +5 -0
  1091. package/src/entries/testing-arbitraries.ts +5 -0
  1092. package/src/entries/testing-index.ts +5 -0
  1093. package/src/entries/testing-jest.ts +5 -0
  1094. package/src/entries/testing-vitest.ts +5 -0
  1095. package/src/entries/valibot.ts +5 -0
  1096. package/src/entries/wire.ts +5 -0
  1097. package/src/entries/zod.ts +5 -0
  1098. package/src/exact.ts +3 -3
  1099. package/src/fetch.ts +20 -4
  1100. package/src/finance.ts +1219 -0
  1101. package/src/fixed-money.ts +38 -0
  1102. package/src/fixed.ts +86 -66
  1103. package/src/fn.ts +17 -0
  1104. package/src/format.ts +28 -9
  1105. package/src/generated/crypto.ts +15 -0
  1106. package/src/generated/iso/AED.ts +5 -0
  1107. package/src/generated/iso/AFN.ts +5 -0
  1108. package/src/generated/iso/ALL.ts +5 -0
  1109. package/src/generated/iso/AMD.ts +5 -0
  1110. package/src/generated/iso/AOA.ts +5 -0
  1111. package/src/generated/iso/ARS.ts +5 -0
  1112. package/src/generated/iso/AUD.ts +5 -0
  1113. package/src/generated/iso/AWG.ts +5 -0
  1114. package/src/generated/iso/AZN.ts +5 -0
  1115. package/src/generated/iso/BAM.ts +5 -0
  1116. package/src/generated/iso/BBD.ts +5 -0
  1117. package/src/generated/iso/BDT.ts +5 -0
  1118. package/src/generated/iso/BHD.ts +5 -0
  1119. package/src/generated/iso/BIF.ts +5 -0
  1120. package/src/generated/iso/BMD.ts +5 -0
  1121. package/src/generated/iso/BND.ts +5 -0
  1122. package/src/generated/iso/BOB.ts +5 -0
  1123. package/src/generated/iso/BOV.ts +5 -0
  1124. package/src/generated/iso/BRL.ts +5 -0
  1125. package/src/generated/iso/BSD.ts +5 -0
  1126. package/src/generated/iso/BTN.ts +5 -0
  1127. package/src/generated/iso/BWP.ts +5 -0
  1128. package/src/generated/iso/BYN.ts +5 -0
  1129. package/src/generated/iso/BZD.ts +5 -0
  1130. package/src/generated/iso/CAD.ts +5 -0
  1131. package/src/generated/iso/CDF.ts +5 -0
  1132. package/src/generated/iso/CHE.ts +5 -0
  1133. package/src/generated/iso/CHF.ts +5 -0
  1134. package/src/generated/iso/CHW.ts +5 -0
  1135. package/src/generated/iso/CLF.ts +5 -0
  1136. package/src/generated/iso/CLP.ts +5 -0
  1137. package/src/generated/iso/CNY.ts +5 -0
  1138. package/src/generated/iso/COP.ts +5 -0
  1139. package/src/generated/iso/COU.ts +5 -0
  1140. package/src/generated/iso/CRC.ts +5 -0
  1141. package/src/generated/iso/CUP.ts +5 -0
  1142. package/src/generated/iso/CVE.ts +5 -0
  1143. package/src/generated/iso/CZK.ts +5 -0
  1144. package/src/generated/iso/DJF.ts +5 -0
  1145. package/src/generated/iso/DKK.ts +5 -0
  1146. package/src/generated/iso/DOP.ts +5 -0
  1147. package/src/generated/iso/DZD.ts +5 -0
  1148. package/src/generated/iso/EGP.ts +5 -0
  1149. package/src/generated/iso/ERN.ts +5 -0
  1150. package/src/generated/iso/ETB.ts +5 -0
  1151. package/src/generated/iso/EUR.ts +5 -0
  1152. package/src/generated/iso/FJD.ts +5 -0
  1153. package/src/generated/iso/FKP.ts +5 -0
  1154. package/src/generated/iso/GBP.ts +5 -0
  1155. package/src/generated/iso/GEL.ts +5 -0
  1156. package/src/generated/iso/GHS.ts +5 -0
  1157. package/src/generated/iso/GIP.ts +5 -0
  1158. package/src/generated/iso/GMD.ts +5 -0
  1159. package/src/generated/iso/GNF.ts +5 -0
  1160. package/src/generated/iso/GTQ.ts +5 -0
  1161. package/src/generated/iso/GYD.ts +5 -0
  1162. package/src/generated/iso/HKD.ts +5 -0
  1163. package/src/generated/iso/HNL.ts +5 -0
  1164. package/src/generated/iso/HTG.ts +5 -0
  1165. package/src/generated/iso/HUF.ts +5 -0
  1166. package/src/generated/iso/IDR.ts +5 -0
  1167. package/src/generated/iso/ILS.ts +5 -0
  1168. package/src/generated/iso/INR.ts +5 -0
  1169. package/src/generated/iso/IQD.ts +5 -0
  1170. package/src/generated/iso/IRR.ts +5 -0
  1171. package/src/generated/iso/ISK.ts +5 -0
  1172. package/src/generated/iso/JMD.ts +5 -0
  1173. package/src/generated/iso/JOD.ts +5 -0
  1174. package/src/generated/iso/JPY.ts +5 -0
  1175. package/src/generated/iso/KES.ts +5 -0
  1176. package/src/generated/iso/KGS.ts +5 -0
  1177. package/src/generated/iso/KHR.ts +5 -0
  1178. package/src/generated/iso/KMF.ts +5 -0
  1179. package/src/generated/iso/KPW.ts +5 -0
  1180. package/src/generated/iso/KRW.ts +5 -0
  1181. package/src/generated/iso/KWD.ts +5 -0
  1182. package/src/generated/iso/KYD.ts +5 -0
  1183. package/src/generated/iso/KZT.ts +5 -0
  1184. package/src/generated/iso/LAK.ts +5 -0
  1185. package/src/generated/iso/LBP.ts +5 -0
  1186. package/src/generated/iso/LKR.ts +5 -0
  1187. package/src/generated/iso/LRD.ts +5 -0
  1188. package/src/generated/iso/LSL.ts +5 -0
  1189. package/src/generated/iso/LYD.ts +5 -0
  1190. package/src/generated/iso/MAD.ts +5 -0
  1191. package/src/generated/iso/MDL.ts +5 -0
  1192. package/src/generated/iso/MGA.ts +5 -0
  1193. package/src/generated/iso/MKD.ts +5 -0
  1194. package/src/generated/iso/MMK.ts +5 -0
  1195. package/src/generated/iso/MNT.ts +5 -0
  1196. package/src/generated/iso/MOP.ts +5 -0
  1197. package/src/generated/iso/MRU.ts +5 -0
  1198. package/src/generated/iso/MUR.ts +5 -0
  1199. package/src/generated/iso/MVR.ts +5 -0
  1200. package/src/generated/iso/MWK.ts +5 -0
  1201. package/src/generated/iso/MXN.ts +5 -0
  1202. package/src/generated/iso/MXV.ts +5 -0
  1203. package/src/generated/iso/MYR.ts +5 -0
  1204. package/src/generated/iso/MZN.ts +5 -0
  1205. package/src/generated/iso/NAD.ts +5 -0
  1206. package/src/generated/iso/NGN.ts +5 -0
  1207. package/src/generated/iso/NIO.ts +5 -0
  1208. package/src/generated/iso/NOK.ts +5 -0
  1209. package/src/generated/iso/NPR.ts +5 -0
  1210. package/src/generated/iso/NZD.ts +5 -0
  1211. package/src/generated/iso/OMR.ts +5 -0
  1212. package/src/generated/iso/PAB.ts +5 -0
  1213. package/src/generated/iso/PEN.ts +5 -0
  1214. package/src/generated/iso/PGK.ts +5 -0
  1215. package/src/generated/iso/PHP.ts +5 -0
  1216. package/src/generated/iso/PKR.ts +5 -0
  1217. package/src/generated/iso/PLN.ts +5 -0
  1218. package/src/generated/iso/PYG.ts +5 -0
  1219. package/src/generated/iso/QAR.ts +5 -0
  1220. package/src/generated/iso/RON.ts +5 -0
  1221. package/src/generated/iso/RSD.ts +5 -0
  1222. package/src/generated/iso/RUB.ts +5 -0
  1223. package/src/generated/iso/RWF.ts +5 -0
  1224. package/src/generated/iso/SAR.ts +5 -0
  1225. package/src/generated/iso/SBD.ts +5 -0
  1226. package/src/generated/iso/SCR.ts +5 -0
  1227. package/src/generated/iso/SDG.ts +5 -0
  1228. package/src/generated/iso/SEK.ts +5 -0
  1229. package/src/generated/iso/SGD.ts +5 -0
  1230. package/src/generated/iso/SHP.ts +5 -0
  1231. package/src/generated/iso/SLE.ts +5 -0
  1232. package/src/generated/iso/SOS.ts +5 -0
  1233. package/src/generated/iso/SRD.ts +5 -0
  1234. package/src/generated/iso/SSP.ts +5 -0
  1235. package/src/generated/iso/STN.ts +5 -0
  1236. package/src/generated/iso/SVC.ts +5 -0
  1237. package/src/generated/iso/SYP.ts +5 -0
  1238. package/src/generated/iso/SZL.ts +5 -0
  1239. package/src/generated/iso/THB.ts +5 -0
  1240. package/src/generated/iso/TJS.ts +5 -0
  1241. package/src/generated/iso/TMT.ts +5 -0
  1242. package/src/generated/iso/TND.ts +5 -0
  1243. package/src/generated/iso/TOP.ts +5 -0
  1244. package/src/generated/iso/TRY.ts +5 -0
  1245. package/src/generated/iso/TTD.ts +5 -0
  1246. package/src/generated/iso/TWD.ts +5 -0
  1247. package/src/generated/iso/TZS.ts +5 -0
  1248. package/src/generated/iso/UAH.ts +5 -0
  1249. package/src/generated/iso/UGX.ts +5 -0
  1250. package/src/generated/iso/USD.ts +5 -0
  1251. package/src/generated/iso/USN.ts +5 -0
  1252. package/src/generated/iso/UYI.ts +5 -0
  1253. package/src/generated/iso/UYU.ts +5 -0
  1254. package/src/generated/iso/UYW.ts +5 -0
  1255. package/src/generated/iso/UZS.ts +5 -0
  1256. package/src/generated/iso/VED.ts +5 -0
  1257. package/src/generated/iso/VES.ts +5 -0
  1258. package/src/generated/iso/VND.ts +5 -0
  1259. package/src/generated/iso/VUV.ts +5 -0
  1260. package/src/generated/iso/WST.ts +5 -0
  1261. package/src/generated/iso/XAD.ts +5 -0
  1262. package/src/generated/iso/XAF.ts +5 -0
  1263. package/src/generated/iso/XCD.ts +5 -0
  1264. package/src/generated/iso/XCG.ts +5 -0
  1265. package/src/generated/iso/XOF.ts +5 -0
  1266. package/src/generated/iso/XPF.ts +5 -0
  1267. package/src/generated/iso/YER.ts +5 -0
  1268. package/src/generated/iso/ZAR.ts +5 -0
  1269. package/src/generated/iso/ZMW.ts +5 -0
  1270. package/src/generated/iso/ZWG.ts +5 -0
  1271. package/src/generated/iso4217-numeric.ts +184 -0
  1272. package/src/generated/rbnf-de.ts +5 -0
  1273. package/src/generated/rbnf-en.ts +5 -0
  1274. package/src/generated/rbnf-es.ts +5 -0
  1275. package/src/generated/rbnf-fr.ts +5 -0
  1276. package/src/generated/rbnf-it.ts +5 -0
  1277. package/src/generated/rbnf-nl.ts +5 -0
  1278. package/src/generated/rbnf-pt.ts +5 -0
  1279. package/src/generated/territories.ts +277 -0
  1280. package/src/index.ts +3 -0
  1281. package/src/kysely.ts +4 -3
  1282. package/src/math.ts +167 -0
  1283. package/src/money.ts +138 -140
  1284. package/src/parse.ts +7 -7
  1285. package/src/plugins/adyen.ts +2 -0
  1286. package/src/plugins/all.ts +19 -1
  1287. package/src/plugins/allocate.ts +2 -0
  1288. package/src/plugins/braintree.ts +2 -0
  1289. package/src/plugins/cash.ts +2 -0
  1290. package/src/plugins/checkout.ts +2 -0
  1291. package/src/plugins/convert.ts +2 -0
  1292. package/src/plugins/core.ts +195 -0
  1293. package/src/plugins/exact.ts +2 -0
  1294. package/src/plugins/fixed-money.ts +57 -0
  1295. package/src/plugins/format.ts +2 -0
  1296. package/src/plugins/iso.ts +9 -0
  1297. package/src/plugins/klarna.ts +2 -0
  1298. package/src/plugins/math.ts +43 -0
  1299. package/src/plugins/paypal.ts +2 -0
  1300. package/src/plugins/prisma.ts +2 -0
  1301. package/src/plugins/stripe.ts +2 -0
  1302. package/src/plugins/tax.ts +2 -0
  1303. package/src/policy.ts +5 -8
  1304. package/src/pricing.ts +155 -0
  1305. package/src/prisma.ts +6 -1
  1306. package/src/provider.ts +2 -2
  1307. package/src/rate-text.ts +27 -1
  1308. package/src/rate.ts +2 -2
  1309. package/src/rbnf.ts +389 -0
  1310. package/src/rounding.ts +34 -0
  1311. package/src/scale.ts +42 -0
  1312. package/src/schema.ts +4 -7
  1313. package/src/territories.ts +102 -0
  1314. package/src/testing/arbitraries.ts +4 -4
  1315. package/src/testing/index.ts +1 -1
  1316. package/src/tiers.ts +284 -0
  1317. package/src/valibot.ts +4 -1
  1318. package/src/wire.ts +322 -0
  1319. package/src/words/de.ts +9 -0
  1320. package/src/words/en.ts +9 -0
  1321. package/src/words/es.ts +9 -0
  1322. package/src/words/fr.ts +9 -0
  1323. package/src/words/it.ts +9 -0
  1324. package/src/words/nl.ts +9 -0
  1325. package/src/words/pt.ts +9 -0
  1326. package/src/words.ts +168 -0
  1327. package/src/zod.ts +1 -1
  1328. package/dist/plugins/fixed.d.ts +0 -17
  1329. package/dist/plugins/fixed.d.ts.map +0 -1
  1330. package/dist/plugins/fixed.js +0 -13
  1331. package/dist/plugins/fixed.js.map +0 -1
  1332. 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 { MAX_DECIMAL_SCALE } from './decimal.js';
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 !== undefined &&
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' }).toMinor());
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' }).toMinor());
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
  }
@@ -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