@ducatjs/money 0.0.0 → 0.2.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 (398) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +51 -0
  3. package/README.md +1034 -3
  4. package/assets/CREDITS.md +12 -0
  5. package/data/adyen-fx.json +19 -0
  6. package/data/adyen.json +171 -0
  7. package/data/braintree.json +223 -0
  8. package/data/cash-rounding.json +520 -0
  9. package/data/checkout.json +230 -0
  10. package/data/cldr-cash.json +101 -0
  11. package/data/historic.json +78 -0
  12. package/data/iso4217-list-one.xml +1956 -0
  13. package/data/iso4217-list-three.xml +1185 -0
  14. package/data/klarna.json +95 -0
  15. package/data/paypal.json +65 -0
  16. package/data/stripe-fx.json +17 -0
  17. package/data/stripe.json +285 -0
  18. package/dist/adyen-fx.d.ts +25 -0
  19. package/dist/adyen-fx.d.ts.map +1 -0
  20. package/dist/adyen-fx.js +140 -0
  21. package/dist/adyen-fx.js.map +1 -0
  22. package/dist/adyen.d.ts +25 -0
  23. package/dist/adyen.d.ts.map +1 -0
  24. package/dist/adyen.js +34 -0
  25. package/dist/adyen.js.map +1 -0
  26. package/dist/allocate.d.ts +72 -0
  27. package/dist/allocate.d.ts.map +1 -0
  28. package/dist/allocate.js +314 -0
  29. package/dist/allocate.js.map +1 -0
  30. package/dist/bag.d.ts +58 -0
  31. package/dist/bag.d.ts.map +1 -0
  32. package/dist/bag.js +122 -0
  33. package/dist/bag.js.map +1 -0
  34. package/dist/boc.d.ts +31 -0
  35. package/dist/boc.d.ts.map +1 -0
  36. package/dist/boc.js +114 -0
  37. package/dist/boc.js.map +1 -0
  38. package/dist/boe.d.ts +33 -0
  39. package/dist/boe.d.ts.map +1 -0
  40. package/dist/boe.js +114 -0
  41. package/dist/boe.js.map +1 -0
  42. package/dist/braintree.d.ts +34 -0
  43. package/dist/braintree.d.ts.map +1 -0
  44. package/dist/braintree.js +45 -0
  45. package/dist/braintree.js.map +1 -0
  46. package/dist/cash.d.ts +64 -0
  47. package/dist/cash.d.ts.map +1 -0
  48. package/dist/cash.js +134 -0
  49. package/dist/cash.js.map +1 -0
  50. package/dist/checkout.d.ts +42 -0
  51. package/dist/checkout.d.ts.map +1 -0
  52. package/dist/checkout.js +52 -0
  53. package/dist/checkout.js.map +1 -0
  54. package/dist/convert.d.ts +52 -0
  55. package/dist/convert.d.ts.map +1 -0
  56. package/dist/convert.js +65 -0
  57. package/dist/convert.js.map +1 -0
  58. package/dist/currency.d.ts +22 -0
  59. package/dist/currency.d.ts.map +1 -0
  60. package/dist/currency.js +38 -0
  61. package/dist/currency.js.map +1 -0
  62. package/dist/decimal.d.ts +52 -0
  63. package/dist/decimal.d.ts.map +1 -0
  64. package/dist/decimal.js +251 -0
  65. package/dist/decimal.js.map +1 -0
  66. package/dist/drizzle/mysql.d.ts +105 -0
  67. package/dist/drizzle/mysql.d.ts.map +1 -0
  68. package/dist/drizzle/mysql.js +60 -0
  69. package/dist/drizzle/mysql.js.map +1 -0
  70. package/dist/drizzle/pg.d.ts +103 -0
  71. package/dist/drizzle/pg.d.ts.map +1 -0
  72. package/dist/drizzle/pg.js +60 -0
  73. package/dist/drizzle/pg.js.map +1 -0
  74. package/dist/drizzle/sqlite.d.ts +102 -0
  75. package/dist/drizzle/sqlite.d.ts.map +1 -0
  76. package/dist/drizzle/sqlite.js +59 -0
  77. package/dist/drizzle/sqlite.js.map +1 -0
  78. package/dist/ecb.d.ts +52 -0
  79. package/dist/ecb.d.ts.map +1 -0
  80. package/dist/ecb.js +285 -0
  81. package/dist/ecb.js.map +1 -0
  82. package/dist/exact.d.ts +62 -0
  83. package/dist/exact.d.ts.map +1 -0
  84. package/dist/exact.js +147 -0
  85. package/dist/exact.js.map +1 -0
  86. package/dist/fed.d.ts +35 -0
  87. package/dist/fed.d.ts.map +1 -0
  88. package/dist/fed.js +134 -0
  89. package/dist/fed.js.map +1 -0
  90. package/dist/fetch.d.ts +103 -0
  91. package/dist/fetch.d.ts.map +1 -0
  92. package/dist/fetch.js +222 -0
  93. package/dist/fetch.js.map +1 -0
  94. package/dist/fixed.d.ts +121 -0
  95. package/dist/fixed.d.ts.map +1 -0
  96. package/dist/fixed.js +420 -0
  97. package/dist/fixed.js.map +1 -0
  98. package/dist/fn.d.ts +34 -0
  99. package/dist/fn.d.ts.map +1 -0
  100. package/dist/fn.js +37 -0
  101. package/dist/fn.js.map +1 -0
  102. package/dist/format.d.ts +13 -0
  103. package/dist/format.d.ts.map +1 -0
  104. package/dist/format.js +90 -0
  105. package/dist/format.js.map +1 -0
  106. package/dist/generated/adyen.d.ts +3 -0
  107. package/dist/generated/adyen.d.ts.map +1 -0
  108. package/dist/generated/adyen.js +144 -0
  109. package/dist/generated/adyen.js.map +1 -0
  110. package/dist/generated/braintree.d.ts +3 -0
  111. package/dist/generated/braintree.d.ts.map +1 -0
  112. package/dist/generated/braintree.js +140 -0
  113. package/dist/generated/braintree.js.map +1 -0
  114. package/dist/generated/cash.d.ts +14 -0
  115. package/dist/generated/cash.d.ts.map +1 -0
  116. package/dist/generated/cash.js +465 -0
  117. package/dist/generated/cash.js.map +1 -0
  118. package/dist/generated/checkout.d.ts +3 -0
  119. package/dist/generated/checkout.d.ts.map +1 -0
  120. package/dist/generated/checkout.js +151 -0
  121. package/dist/generated/checkout.js.map +1 -0
  122. package/dist/generated/historic.d.ts +337 -0
  123. package/dist/generated/historic.d.ts.map +1 -0
  124. package/dist/generated/historic.js +66 -0
  125. package/dist/generated/historic.js.map +1 -0
  126. package/dist/generated/iso4217.d.ts +174 -0
  127. package/dist/generated/iso4217.d.ts.map +1 -0
  128. package/dist/generated/iso4217.js +175 -0
  129. package/dist/generated/iso4217.js.map +1 -0
  130. package/dist/generated/kernel.d.ts +17 -0
  131. package/dist/generated/kernel.d.ts.map +1 -0
  132. package/dist/generated/kernel.js +208 -0
  133. package/dist/generated/kernel.js.map +1 -0
  134. package/dist/generated/klarna.d.ts +3 -0
  135. package/dist/generated/klarna.d.ts.map +1 -0
  136. package/dist/generated/klarna.js +21 -0
  137. package/dist/generated/klarna.js.map +1 -0
  138. package/dist/generated/paypal.d.ts +3 -0
  139. package/dist/generated/paypal.d.ts.map +1 -0
  140. package/dist/generated/paypal.js +31 -0
  141. package/dist/generated/paypal.js.map +1 -0
  142. package/dist/generated/stripe.d.ts +8 -0
  143. package/dist/generated/stripe.d.ts.map +1 -0
  144. package/dist/generated/stripe.js +150 -0
  145. package/dist/generated/stripe.js.map +1 -0
  146. package/dist/historic.d.ts +40 -0
  147. package/dist/historic.d.ts.map +1 -0
  148. package/dist/historic.js +43 -0
  149. package/dist/historic.js.map +1 -0
  150. package/dist/history.d.ts +96 -0
  151. package/dist/history.d.ts.map +1 -0
  152. package/dist/history.js +213 -0
  153. package/dist/history.js.map +1 -0
  154. package/dist/hmrc.d.ts +28 -0
  155. package/dist/hmrc.d.ts.map +1 -0
  156. package/dist/hmrc.js +108 -0
  157. package/dist/hmrc.js.map +1 -0
  158. package/dist/index.d.ts +11 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +11 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/klarna.d.ts +31 -0
  163. package/dist/klarna.d.ts.map +1 -0
  164. package/dist/klarna.js +38 -0
  165. package/dist/klarna.js.map +1 -0
  166. package/dist/kysely.d.ts +120 -0
  167. package/dist/kysely.d.ts.map +1 -0
  168. package/dist/kysely.js +309 -0
  169. package/dist/kysely.js.map +1 -0
  170. package/dist/money.d.ts +302 -0
  171. package/dist/money.d.ts.map +1 -0
  172. package/dist/money.js +703 -0
  173. package/dist/money.js.map +1 -0
  174. package/dist/parse.d.ts +55 -0
  175. package/dist/parse.d.ts.map +1 -0
  176. package/dist/parse.js +419 -0
  177. package/dist/parse.js.map +1 -0
  178. package/dist/paypal.d.ts +41 -0
  179. package/dist/paypal.d.ts.map +1 -0
  180. package/dist/paypal.js +58 -0
  181. package/dist/paypal.js.map +1 -0
  182. package/dist/pg.d.ts +100 -0
  183. package/dist/pg.d.ts.map +1 -0
  184. package/dist/pg.js +343 -0
  185. package/dist/pg.js.map +1 -0
  186. package/dist/plugins/adyen.d.ts +15 -0
  187. package/dist/plugins/adyen.d.ts.map +1 -0
  188. package/dist/plugins/adyen.js +10 -0
  189. package/dist/plugins/adyen.js.map +1 -0
  190. package/dist/plugins/all.d.ts +29 -0
  191. package/dist/plugins/all.d.ts.map +1 -0
  192. package/dist/plugins/all.js +30 -0
  193. package/dist/plugins/all.js.map +1 -0
  194. package/dist/plugins/allocate.d.ts +20 -0
  195. package/dist/plugins/allocate.d.ts.map +1 -0
  196. package/dist/plugins/allocate.js +26 -0
  197. package/dist/plugins/allocate.js.map +1 -0
  198. package/dist/plugins/braintree.d.ts +12 -0
  199. package/dist/plugins/braintree.d.ts.map +1 -0
  200. package/dist/plugins/braintree.js +12 -0
  201. package/dist/plugins/braintree.js.map +1 -0
  202. package/dist/plugins/cash.d.ts +19 -0
  203. package/dist/plugins/cash.d.ts.map +1 -0
  204. package/dist/plugins/cash.js +16 -0
  205. package/dist/plugins/cash.js.map +1 -0
  206. package/dist/plugins/checkout.d.ts +21 -0
  207. package/dist/plugins/checkout.d.ts.map +1 -0
  208. package/dist/plugins/checkout.js +16 -0
  209. package/dist/plugins/checkout.js.map +1 -0
  210. package/dist/plugins/convert.d.ts +19 -0
  211. package/dist/plugins/convert.d.ts.map +1 -0
  212. package/dist/plugins/convert.js +13 -0
  213. package/dist/plugins/convert.js.map +1 -0
  214. package/dist/plugins/exact.d.ts +15 -0
  215. package/dist/plugins/exact.d.ts.map +1 -0
  216. package/dist/plugins/exact.js +13 -0
  217. package/dist/plugins/exact.js.map +1 -0
  218. package/dist/plugins/fixed.d.ts +17 -0
  219. package/dist/plugins/fixed.d.ts.map +1 -0
  220. package/dist/plugins/fixed.js +13 -0
  221. package/dist/plugins/fixed.js.map +1 -0
  222. package/dist/plugins/format.d.ts +9 -0
  223. package/dist/plugins/format.d.ts.map +1 -0
  224. package/dist/plugins/format.js +16 -0
  225. package/dist/plugins/format.js.map +1 -0
  226. package/dist/plugins/klarna.d.ts +10 -0
  227. package/dist/plugins/klarna.d.ts.map +1 -0
  228. package/dist/plugins/klarna.js +10 -0
  229. package/dist/plugins/klarna.js.map +1 -0
  230. package/dist/plugins/paypal.d.ts +14 -0
  231. package/dist/plugins/paypal.d.ts.map +1 -0
  232. package/dist/plugins/paypal.js +16 -0
  233. package/dist/plugins/paypal.js.map +1 -0
  234. package/dist/plugins/prisma.d.ts +8 -0
  235. package/dist/plugins/prisma.d.ts.map +1 -0
  236. package/dist/plugins/prisma.js +13 -0
  237. package/dist/plugins/prisma.js.map +1 -0
  238. package/dist/plugins/stripe.d.ts +14 -0
  239. package/dist/plugins/stripe.d.ts.map +1 -0
  240. package/dist/plugins/stripe.js +16 -0
  241. package/dist/plugins/stripe.js.map +1 -0
  242. package/dist/plugins/tax.d.ts +20 -0
  243. package/dist/plugins/tax.d.ts.map +1 -0
  244. package/dist/plugins/tax.js +18 -0
  245. package/dist/plugins/tax.js.map +1 -0
  246. package/dist/policy.d.ts +34 -0
  247. package/dist/policy.d.ts.map +1 -0
  248. package/dist/policy.js +90 -0
  249. package/dist/policy.js.map +1 -0
  250. package/dist/prisma.d.ts +77 -0
  251. package/dist/prisma.d.ts.map +1 -0
  252. package/dist/prisma.js +76 -0
  253. package/dist/prisma.js.map +1 -0
  254. package/dist/processor.d.ts +28 -0
  255. package/dist/processor.d.ts.map +1 -0
  256. package/dist/processor.js +118 -0
  257. package/dist/processor.js.map +1 -0
  258. package/dist/provider.d.ts +103 -0
  259. package/dist/provider.d.ts.map +1 -0
  260. package/dist/provider.js +280 -0
  261. package/dist/provider.js.map +1 -0
  262. package/dist/rate-text.d.ts +38 -0
  263. package/dist/rate-text.d.ts.map +1 -0
  264. package/dist/rate-text.js +143 -0
  265. package/dist/rate-text.js.map +1 -0
  266. package/dist/rate.d.ts +175 -0
  267. package/dist/rate.d.ts.map +1 -0
  268. package/dist/rate.js +371 -0
  269. package/dist/rate.js.map +1 -0
  270. package/dist/rounding-error.d.ts +9 -0
  271. package/dist/rounding-error.d.ts.map +1 -0
  272. package/dist/rounding-error.js +9 -0
  273. package/dist/rounding-error.js.map +1 -0
  274. package/dist/rounding.d.ts +50 -0
  275. package/dist/rounding.d.ts.map +1 -0
  276. package/dist/rounding.js +87 -0
  277. package/dist/rounding.js.map +1 -0
  278. package/dist/schema.d.ts +43 -0
  279. package/dist/schema.d.ts.map +1 -0
  280. package/dist/schema.js +77 -0
  281. package/dist/schema.js.map +1 -0
  282. package/dist/sql.d.ts +54 -0
  283. package/dist/sql.d.ts.map +1 -0
  284. package/dist/sql.js +131 -0
  285. package/dist/sql.js.map +1 -0
  286. package/dist/stripe-fx.d.ts +22 -0
  287. package/dist/stripe-fx.d.ts.map +1 -0
  288. package/dist/stripe-fx.js +30 -0
  289. package/dist/stripe-fx.js.map +1 -0
  290. package/dist/stripe.d.ts +36 -0
  291. package/dist/stripe.d.ts.map +1 -0
  292. package/dist/stripe.js +39 -0
  293. package/dist/stripe.js.map +1 -0
  294. package/dist/tax.d.ts +33 -0
  295. package/dist/tax.d.ts.map +1 -0
  296. package/dist/tax.js +55 -0
  297. package/dist/tax.js.map +1 -0
  298. package/dist/testing/arbitraries.d.ts +43 -0
  299. package/dist/testing/arbitraries.d.ts.map +1 -0
  300. package/dist/testing/arbitraries.js +98 -0
  301. package/dist/testing/arbitraries.js.map +1 -0
  302. package/dist/testing/index.d.ts +67 -0
  303. package/dist/testing/index.d.ts.map +1 -0
  304. package/dist/testing/index.js +159 -0
  305. package/dist/testing/index.js.map +1 -0
  306. package/dist/testing/jest.d.ts +2 -0
  307. package/dist/testing/jest.d.ts.map +1 -0
  308. package/dist/testing/jest.js +15 -0
  309. package/dist/testing/jest.js.map +1 -0
  310. package/dist/testing/vitest.d.ts +7 -0
  311. package/dist/testing/vitest.d.ts.map +1 -0
  312. package/dist/testing/vitest.js +12 -0
  313. package/dist/testing/vitest.js.map +1 -0
  314. package/dist/valibot.d.ts +33 -0
  315. package/dist/valibot.d.ts.map +1 -0
  316. package/dist/valibot.js +61 -0
  317. package/dist/valibot.js.map +1 -0
  318. package/dist/zod.d.ts +36 -0
  319. package/dist/zod.d.ts.map +1 -0
  320. package/dist/zod.js +58 -0
  321. package/dist/zod.js.map +1 -0
  322. package/package.json +280 -5
  323. package/src/adyen-fx.ts +175 -0
  324. package/src/adyen.ts +46 -0
  325. package/src/allocate.ts +393 -0
  326. package/src/bag.ts +170 -0
  327. package/src/boc.ts +136 -0
  328. package/src/boe.ts +131 -0
  329. package/src/braintree.ts +71 -0
  330. package/src/cash.ts +183 -0
  331. package/src/checkout.ts +77 -0
  332. package/src/convert.ts +177 -0
  333. package/src/currency.ts +61 -0
  334. package/src/decimal.ts +283 -0
  335. package/src/drizzle/mysql.ts +78 -0
  336. package/src/drizzle/pg.ts +78 -0
  337. package/src/drizzle/sqlite.ts +70 -0
  338. package/src/ecb.ts +328 -0
  339. package/src/exact.ts +182 -0
  340. package/src/fed.ts +146 -0
  341. package/src/fetch.ts +306 -0
  342. package/src/fixed.ts +558 -0
  343. package/src/fn.ts +94 -0
  344. package/src/format.ts +106 -0
  345. package/src/generated/adyen.ts +144 -0
  346. package/src/generated/braintree.ts +140 -0
  347. package/src/generated/cash.ts +478 -0
  348. package/src/generated/checkout.ts +151 -0
  349. package/src/generated/historic.ts +67 -0
  350. package/src/generated/iso4217.ts +179 -0
  351. package/src/generated/kernel.ts +230 -0
  352. package/src/generated/klarna.ts +21 -0
  353. package/src/generated/paypal.ts +31 -0
  354. package/src/generated/stripe.ts +150 -0
  355. package/src/historic.ts +77 -0
  356. package/src/history.ts +333 -0
  357. package/src/hmrc.ts +125 -0
  358. package/src/index.ts +41 -0
  359. package/src/klarna.ts +54 -0
  360. package/src/kysely.ts +588 -0
  361. package/src/money.ts +979 -0
  362. package/src/parse.ts +511 -0
  363. package/src/paypal.ts +93 -0
  364. package/src/pg.ts +410 -0
  365. package/src/plugins/adyen.ts +25 -0
  366. package/src/plugins/all.ts +57 -0
  367. package/src/plugins/allocate.ts +53 -0
  368. package/src/plugins/braintree.ts +23 -0
  369. package/src/plugins/cash.ts +33 -0
  370. package/src/plugins/checkout.ts +32 -0
  371. package/src/plugins/convert.ts +49 -0
  372. package/src/plugins/exact.ts +23 -0
  373. package/src/plugins/fixed.ts +28 -0
  374. package/src/plugins/format.ts +28 -0
  375. package/src/plugins/klarna.ts +21 -0
  376. package/src/plugins/paypal.ts +29 -0
  377. package/src/plugins/prisma.ts +24 -0
  378. package/src/plugins/stripe.ts +29 -0
  379. package/src/plugins/tax.ts +40 -0
  380. package/src/policy.ts +124 -0
  381. package/src/prisma.ts +199 -0
  382. package/src/processor.ts +181 -0
  383. package/src/provider.ts +389 -0
  384. package/src/rate-text.ts +151 -0
  385. package/src/rate.ts +546 -0
  386. package/src/rounding-error.ts +8 -0
  387. package/src/rounding.ts +122 -0
  388. package/src/schema.ts +119 -0
  389. package/src/sql.ts +178 -0
  390. package/src/stripe-fx.ts +49 -0
  391. package/src/stripe.ts +69 -0
  392. package/src/tax.ts +102 -0
  393. package/src/testing/arbitraries.ts +134 -0
  394. package/src/testing/index.ts +247 -0
  395. package/src/testing/jest.ts +18 -0
  396. package/src/testing/vitest.ts +18 -0
  397. package/src/valibot.ts +87 -0
  398. package/src/zod.ts +78 -0
@@ -0,0 +1,302 @@
1
+ import { type CurrencyCode } from './currency.js';
2
+ import { type Factor, type Ratio } from './decimal.js';
3
+ import { type RoundingMode } from './rounding.js';
4
+ /** Currency codes accepted by constructors: known codes autocomplete, any string is allowed. */
5
+ export type CurrencyInput = CurrencyCode | (string & {});
6
+ /** The JSON form of Money: an exact decimal string in major units plus the currency code. */
7
+ export interface MoneyJSON<C extends string = string> {
8
+ /** Exact decimal string in major units, e.g. "12.34". */
9
+ readonly amount: string;
10
+ readonly currency: C;
11
+ }
12
+ /**
13
+ * A reusable rounding rule: a scale, an increment at that scale and a rounding mode, such as "CHF
14
+ * cash" (scale 2, increment 5, half up) or "4 decimals, half even". Build one with `roundingPolicy()`
15
+ * from `@ducatjs/money/policy` (or `cashPolicy()` from `@ducatjs/money/cash`) and pass it wherever
16
+ * a rounding mode is accepted: `m.multiply('1.075', policy)`, `m.round(policy)`. A policy is also
17
+ * a function that rounds an amount, so `m.with(policy)` and `amounts.map(policy)` work too.
18
+ *
19
+ * Policies are plain values passed explicitly; they are never stored on amounts or set globally.
20
+ */
21
+ export interface RoundingPolicy {
22
+ /** Rounds `money` to this policy (exactly like `round(money, policy)`). */
23
+ <C extends string>(money: Money<C>): Money<C>;
24
+ /** Decimal places of the result; `undefined` means the currency's ISO exponent. */
25
+ readonly scale: number | undefined;
26
+ /** The result is a multiple of this many 10^-scale units (1 for plain rounding, 5 for 0.05). */
27
+ readonly increment: number;
28
+ /** How to round to the increment. */
29
+ readonly rounding: RoundingMode;
30
+ /** The one currency the policy is for, if any; other currencies throw `CurrencyMismatchError`. */
31
+ readonly currency: string | undefined;
32
+ /**
33
+ * @internal money × factor, rounded once to this policy, under a key only this copy of the
34
+ * package can build. The core calls it for every operation given a policy, so the policy code
35
+ * stays out of bundles that never build one.
36
+ */
37
+ readonly [ROUND_PRODUCT]: <C extends string>(money: Money<C>, factor: Ratio) => Money<C>;
38
+ }
39
+ /**
40
+ * @internal The key a policy's rounding function is stored under. Module-private, so only
41
+ * `roundingPolicy` from this copy of the package makes values the core accepts as policies: a
42
+ * lookalike function, or a policy from a second installed copy (whose results would be that copy's
43
+ * Money), is rejected with a TypeError, as `isMoney` rejects the other copy's Money.
44
+ */
45
+ export declare const ROUND_PRODUCT: unique symbol;
46
+ /**
47
+ * @internal money × factor rounded by a policy. Anything not built by `roundingPolicy` lacks the
48
+ * private key, so calling it throws a TypeError; that is the whole check, kept this small because
49
+ * it is in every bundle.
50
+ */
51
+ export declare const roundWithPolicy: <C extends string>(money: Money<C>, factor: Ratio, policy: RoundingPolicy) => Money<C>;
52
+ /** What rounding parameters accept: a mode such as `'halfEven'`, or a `RoundingPolicy`. */
53
+ export type RoundingInput = RoundingMode | RoundingPolicy;
54
+ /** Thrown when two amounts in different currencies are combined. */
55
+ export declare class CurrencyMismatchError extends TypeError {
56
+ name: string;
57
+ readonly expected: string;
58
+ readonly actual: string;
59
+ constructor(expected: string, actual: string);
60
+ }
61
+ /**
62
+ * An immutable amount of money: an integer number of 10^-scale units of `currency`.
63
+ *
64
+ * `minor` is a JS number whenever it is a safe integer (|v| <= 2^53 - 1) and a bigint otherwise, so
65
+ * ordinary amounts never allocate a bigint, and huge or high-precision amounts never lose a digit.
66
+ * `scale` is normally the currency's ISO exponent (2 for EUR) but can be larger for sub-minor
67
+ * precision (unit prices, FX intermediates); `round()` brings it back.
68
+ *
69
+ * Instances are not frozen (Object.freeze costs 5-8x on construction in V8 and JSC; see bench/),
70
+ * but every field is readonly and no operation mutates. Create values with `money()` /
71
+ * `fromMinor()`.
72
+ *
73
+ * The class carries the core methods only. Opt-in modules (`@ducatjs/money/allocate`,
74
+ * `@ducatjs/money/tax`, `@ducatjs/money/format`, ...) add theirs when imported; see `extendMoney`.
75
+ */
76
+ declare class Money<C extends string = string> {
77
+ readonly currency: C;
78
+ readonly minor: number | bigint;
79
+ readonly scale: number;
80
+ /** @internal */
81
+ constructor(currency: C, minor: number | bigint, scale: number);
82
+ /** "12.34 EUR" */
83
+ toString(): string;
84
+ toJSON(): MoneyJSON<C>;
85
+ /** Blocks `a + b`, `a > b`, `+a`: arithmetic and comparison must go through the library. */
86
+ [Symbol.toPrimitive](hint: string): string;
87
+ /** this + other (same currency; any scale) */
88
+ add(other: Money<C>): Money<C>;
89
+ /** this - other */
90
+ subtract(other: Money<C>): Money<C>;
91
+ /**
92
+ * this * factor, rounded to this scale. `factor` is exact: integer, decimal string ('1.075'),
93
+ * bigint or ratio().
94
+ */
95
+ multiply(factor: Factor, rounding?: RoundingInput): Money<C>;
96
+ /** this / divisor, rounded to this scale (or to a policy's scale and increment) */
97
+ divide(divisor: Factor, rounding?: RoundingInput): Money<C>;
98
+ negate(): Money<C>;
99
+ abs(): Money<C>;
100
+ /** Rounds to the currency's exponent (or `scale`), or to a rounding policy. */
101
+ round(rounding: RoundingMode, scale?: number): Money<C>;
102
+ round(policy: RoundingPolicy): Money<C>;
103
+ /** Changes the scale; decreasing it rounds (default 'halfExpand'). */
104
+ toScale(scale: number, rounding?: RoundingMode): Money<C>;
105
+ /** -1, 0 or 1; throws on currency mismatch */
106
+ compare(other: Money<C>): -1 | 0 | 1;
107
+ /** same currency and value; a different currency is simply not equal */
108
+ equals(other: Money): boolean;
109
+ lessThan(other: Money<C>): boolean;
110
+ lessThanOrEqual(other: Money<C>): boolean;
111
+ greaterThan(other: Money<C>): boolean;
112
+ greaterThanOrEqual(other: Money<C>): boolean;
113
+ isZero(): boolean;
114
+ isPositive(): boolean;
115
+ isNegative(): boolean;
116
+ sign(): -1 | 0 | 1;
117
+ min(...others: Money<C>[]): Money<C>;
118
+ max(...others: Money<C>[]): Money<C>;
119
+ clamp(lo: Money<C>, hi: Money<C>): Money<C>;
120
+ /** Same currency, value and scale: 1.0 EUR is not identical to 1.00 EUR. */
121
+ identical(other: Money): boolean;
122
+ /**
123
+ * Applies `operation` to this amount and returns its result, so a rounding policy or a
124
+ * conversion reads as one step in a chain: `price.multiply('1.075').with(toCash)`.
125
+ */
126
+ with<R>(operation: (money: Money<C>) => R): R;
127
+ /** The whole major units, truncated toward zero: 12 for 12.34 EUR, -12 for -12.34 EUR. */
128
+ majorPart(): number | bigint;
129
+ /** The rest in 10^-scale units, with the amount's sign: 34 for 12.34 EUR, -34 for -12.34. */
130
+ minorPart(): number | bigint;
131
+ /** Exact decimal string in major units: "12.34" */
132
+ toDecimal(): string;
133
+ /** Minor units as a bigint (BIGINT columns) */
134
+ toMinor(): bigint;
135
+ /** Minor units as a number; throws beyond 2^53 */
136
+ toMinorNumber(): number;
137
+ }
138
+ export type { Money };
139
+ /** Whether a value is a Money from this package. */
140
+ export declare function isMoney(value: unknown): value is Money;
141
+ /**
142
+ * Whether a value is a Money in `currency`. It narrows a currency known only at run time
143
+ * (`Money<string>`, or `unknown`) to the literal type:
144
+ *
145
+ * if (isMoneyIn(price, 'EUR')) { price.add(money('1', 'EUR')) }
146
+ */
147
+ export declare function isMoneyIn<C extends CurrencyInput>(value: unknown, currency: C): value is Money<C>;
148
+ /**
149
+ * Narrows `money` to `Money<C>`, or throws a `CurrencyMismatchError` if it is in another
150
+ * currency. Use it where a different currency is a bug rather than a branch.
151
+ */
152
+ export declare function assertCurrency<C extends CurrencyInput>(money: Money, currency: C): asserts money is Money<C>;
153
+ /** Options for `extendMoney`. */
154
+ export interface ExtendMoneyOptions {
155
+ /**
156
+ * Who is installing the methods, e.g. '@ducatjs/money/allocate'. Installing again under the same
157
+ * owner replaces that owner's methods, which happens when a module is loaded twice (hot reload,
158
+ * two copies of the package). Without an owner, or under a different one, an existing name
159
+ * throws.
160
+ */
161
+ readonly owner?: string;
162
+ }
163
+ /**
164
+ * Adds methods to every Money (this is how `@ducatjs/money/allocate`, `@ducatjs/money/format`, ...
165
+ * install theirs). Declare their types with `declare module '@ducatjs/money' { interface Money<C
166
+ * extends string> { ... } }`. The methods are non-enumerable, like class methods. A name that Money
167
+ * already has (one of its own methods, or one added by a different owner) throws, so two modules
168
+ * cannot silently fight over it.
169
+ */
170
+ export declare function extendMoney(methods: Record<string, (this: Money, ...args: never[]) => unknown>, options?: ExtendMoneyOptions): void;
171
+ /** @internal construct from a value that may be an unsafe bigint */
172
+ export declare function make<C extends string>(currency: C, minor: number | bigint, scale: number): Money<C>;
173
+ /** v * 10^e exactly (e >= 0) */
174
+ export declare function scaleUp(minor: number | bigint, exponent: number): number | bigint;
175
+ /** v / 10^e rounded (e >= 0) */
176
+ export declare function scaleDown(minor: number | bigint, exponent: number, mode: RoundingMode): number | bigint;
177
+ /** Options for `money()` and `fromJSON()`: the scale to keep and how to round extra decimals. */
178
+ export interface MoneyOptions {
179
+ /** Decimal places to keep (default: the currency's exponent). */
180
+ readonly scale?: number;
181
+ /** How to round input with more decimals than `scale` (default 'unnecessary': throw). */
182
+ readonly rounding?: RoundingMode;
183
+ }
184
+ /**
185
+ * Creates money from an amount in major units.
186
+ *
187
+ * money('12.34', 'EUR') // exact decimal string: the recommended form
188
+ * money(12, 'EUR') // integers are major units: 12.00 EUR
189
+ * money(12.34, 'EUR') // non-integer numbers are read at their shortest decimal form ("12.34")
190
+ * money(10n ** 30n, 'USD')
191
+ *
192
+ * Throws if the amount has more decimals than the currency (or `scale`) unless `rounding` is given,
193
+ * so `money(0.1 + 0.2, 'EUR')` throws rather than silently becoming 0.30.
194
+ */
195
+ export declare function money<C extends CurrencyInput>(amount: string | number | bigint, currency: C, options?: MoneyOptions): Money<C>;
196
+ /**
197
+ * Creates money from an integer count of minor units (cents): `fromMinor(1234, 'EUR')` is 12.34
198
+ * EUR. This is the form to read from a BIGINT column or a payment processor (but see
199
+ * `stripe`/`adyen` for processors whose exponent differs from ISO).
200
+ */
201
+ export declare function fromMinor<C extends CurrencyInput>(minor: number | bigint, currency: C, scale?: number): Money<C>;
202
+ /** Zero in a currency, at its exponent (or `scale`). */
203
+ export declare function zero<C extends CurrencyInput>(currency: C, scale?: number): Money<C>;
204
+ /**
205
+ * a + b. Mixing currencies is a type error for literal currency types and a runtime error
206
+ * otherwise.
207
+ */
208
+ export declare function add<C extends string>(money: Money<C>, other: Money<NoInfer<C>>): Money<C>;
209
+ /** a - b */
210
+ export declare function subtract<C extends string>(money: Money<C>, other: Money<NoInfer<C>>): Money<C>;
211
+ type IsUnion<T, U = T> = T extends unknown ? ([U] extends [T] ? false : true) : never;
212
+ /**
213
+ * Rejects arrays whose element type mixes several literal currencies, e.g. (Money<'EUR'> |
214
+ * Money<'USD'>)[].
215
+ */
216
+ type SingleCurrency<C extends string> = true extends IsUnion<C> ? {
217
+ readonly 'mixed currencies are not allowed': C;
218
+ } : unknown;
219
+ /** Sum of a list (same currency; any scale). An empty list needs `currency` and returns zero. */
220
+ export declare function sum<C extends string>(items: readonly Money<C>[] & SingleCurrency<C>, currency?: NoInfer<C>): Money<C>;
221
+ /** -money */
222
+ export declare function negate<C extends string>(money: Money<C>): Money<C>;
223
+ /** |money| */
224
+ export declare function abs<C extends string>(money: Money<C>): Money<C>;
225
+ /**
226
+ * m * factor, rounded to m's scale. `factor` is exact: an integer, a decimal string ('1.075'), a
227
+ * bigint, or a `ratio()`. Rounding defaults to 'halfExpand' (ties away from zero); pass
228
+ * 'unnecessary' to throw instead.
229
+ */
230
+ export declare function multiply<C extends string>(money: Money<C>, factor: Factor, rounding?: RoundingInput): Money<C>;
231
+ /** @internal m * r, rounded with a mode (at `scale`) or with a policy (at the policy's scale) */
232
+ export declare function multiplyByRatio<C extends string>(money: Money<C>, factor: Ratio, rounding: RoundingInput, scale?: number): Money<C>;
233
+ /** m / divisor, rounded to m's scale (default 'halfExpand'), or with a rounding policy. */
234
+ export declare function divide<C extends string>(money: Money<C>, divisor: Factor, rounding?: RoundingInput): Money<C>;
235
+ /**
236
+ * Rounds to the currency's exponent (or `scale`): `round(money('1.005', 'EUR', {scale: 3}),
237
+ * 'halfEven')`.
238
+ */
239
+ export declare function round<C extends string>(money: Money<C>, rounding: RoundingMode, scale?: number): Money<C>;
240
+ /** Rounds to a policy's scale and increment: `round(money('10.03', 'CHF'), cashPolicy('CHF'))`. */
241
+ export declare function round<C extends string>(money: Money<C>, policy: RoundingPolicy): Money<C>;
242
+ /**
243
+ * Changes the scale; increasing it is always exact, decreasing it rounds (default 'halfExpand').
244
+ */
245
+ export declare function toScale<C extends string>(money: Money<C>, scale: number, rounding?: RoundingMode): Money<C>;
246
+ /** -1, 0 or 1. Throws on currency mismatch. Works across scales and number/bigint. */
247
+ export declare function compare<C extends string>(money: Money<C>, other: Money<NoInfer<C>>): -1 | 0 | 1;
248
+ /**
249
+ * Same currency and same value (1.0 EUR at scale 1 equals 1.00 EUR). Different currencies: false.
250
+ */
251
+ export declare function equals(money: Money, other: Money): boolean;
252
+ /**
253
+ * Same currency, same value *and* same scale, with number and bigint minor units counted as equal.
254
+ * `equals` treats 1.0 EUR (scale 1) and 1.00 EUR as equal; `identical` does not. For round-trip
255
+ * tests, where the scale must survive too.
256
+ */
257
+ export declare function identical(money: Money, other: Money): boolean;
258
+ /** money < other (same currency; any scale). */
259
+ export declare const lessThan: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
260
+ /** money <= other */
261
+ export declare const lessThanOrEqual: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
262
+ /** money > other */
263
+ export declare const greaterThan: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
264
+ /** money >= other */
265
+ export declare const greaterThanOrEqual: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
266
+ /** Whether the amount is zero. */
267
+ export declare const isZero: (money: Money) => boolean;
268
+ /** Whether the amount is greater than zero. */
269
+ export declare const isPositive: (money: Money) => boolean;
270
+ /** Whether the amount is less than zero. */
271
+ export declare const isNegative: (money: Money) => boolean;
272
+ /** 1, 0 or -1 for positive, zero and negative amounts. */
273
+ export declare const sign: (money: Money) => -1 | 0 | 1;
274
+ /** The smallest of the amounts (same currency); the first one wins ties. */
275
+ export declare function min<C extends string>(first: Money<C>, ...rest: Money<NoInfer<C>>[]): Money<C>;
276
+ /** The largest of the amounts (same currency); the first one wins ties. */
277
+ export declare function max<C extends string>(first: Money<C>, ...rest: Money<NoInfer<C>>[]): Money<C>;
278
+ /** Limits m to [lo, hi]. */
279
+ export declare function clamp<C extends string>(money: Money<C>, lo: Money<NoInfer<C>>, hi: Money<NoInfer<C>>): Money<C>;
280
+ /**
281
+ * Exact decimal string in major units: "12.34", "-0.05", "1000" (JPY). For NUMERIC/DECIMAL columns.
282
+ */
283
+ export declare function toDecimal(money: Money): string;
284
+ /**
285
+ * The whole major units, truncated toward zero: 12 for 12.34 EUR and -12 for -12.34 EUR. A number
286
+ * while it is a safe integer, a bigint beyond, like `minor`.
287
+ */
288
+ export declare function majorPart(money: Money): number | bigint;
289
+ /**
290
+ * What is left after `majorPart`, in 10^-scale units and with the amount's sign: 34 for 12.34
291
+ * EUR, -34 for -12.34 EUR, 5 for 1.005 EUR at scale 3.
292
+ */
293
+ export declare function minorPart(money: Money): number | bigint;
294
+ /** Minor units as a bigint (always safe; use for BIGINT columns). */
295
+ export declare function toMinor(money: Money): bigint;
296
+ /** Minor units as a number; throws if not a safe integer. */
297
+ export declare function toMinorNumber(money: Money): number;
298
+ /** Parses `{ amount: "12.34", currency: "EUR" }` (as produced by JSON.stringify(money)). */
299
+ export declare function fromJSON<C extends CurrencyInput = CurrencyInput>(json: MoneyJSON<C> | string, options?: MoneyOptions): Money<C>;
300
+ export type { Factor, Ratio } from './decimal.js';
301
+ export { ratio } from './decimal.js';
302
+ //# sourceMappingURL=money.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../src/money.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAQL,KAAK,MAAM,EACX,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAMvB,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEzD,6FAA6F;AAC7F,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAClD,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,gGAAgG;IAChG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,kGAAkG;IAClG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;CAC1F;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,MAAiB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,EAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,EACf,QAAQ,KAAK,EACb,QAAQ,cAAc,KACrB,KAAK,CAAC,CAAC,CAAyC,CAAC;AAEpD,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,CAAC;AAE1D,oEAAoE;AACpE,qBAAa,qBAAsB,SAAQ,SAAS;IACzC,IAAI,SAA2B;IACxC,SAAiB,QAAQ,EAAE,MAAM,CAAC;IAClC,SAAiB,MAAM,EAAE,MAAM,CAAC;gBACpB,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAK7C;AAED;;;;;;;;;;;;;;GAcG;AACH,cAAM,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACnC,SAAiB,QAAQ,EAAE,CAAC,CAAC;IAC7B,SAAiB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,SAAiB,KAAK,EAAE,MAAM,CAAC;IAC/B,gBAAgB;gBACJ,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM;IAK9D,kBAAkB;IAClB,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;IAGtB,4FAA4F;IAC5F,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAc1C,8CAA8C;IAC9C,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAG9B,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAGnC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;IAG5D,mFAAmF;IACnF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;IAG3D,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;IAGlB,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IAGf,+EAA+E;IAC/E,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC;IAKvC,sEAAsE;IACtE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;IAIzD,8CAA8C;IAC9C,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAGpC,wEAAwE;IACxE,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAG7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO;IAGlC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO;IAGzC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO;IAGrC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO;IAG5C,MAAM,IAAI,OAAO;IAGjB,UAAU,IAAI,OAAO;IAGrB,UAAU,IAAI,OAAO;IAGrB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAGlB,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAGpC,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAGpC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAI3C,4EAA4E;IAC5E,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAGhC;;;OAGG;IACH,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAK7C,0FAA0F;IAC1F,SAAS,IAAI,MAAM,GAAG,MAAM;IAG5B,6FAA6F;IAC7F,SAAS,IAAI,MAAM,GAAG,MAAM;IAG5B,mDAAmD;IACnD,SAAS,IAAI,MAAM;IAGnB,+CAA+C;IAC/C,OAAO,IAAI,MAAM;IAGjB,kDAAkD;IAClD,aAAa,IAAI,MAAM;CAGxB;AACD,YAAY,EAAE,KAAK,EAAE,CAAC;AAEtB,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAEjG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,aAAa,EACpD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAQ3B;AAgBD,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,EACnE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CA8BN;AAED,oEAAoE;AACpE,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EACnC,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,CAAC,CAAC,CAEV;AAID,gCAAgC;AAChC,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAWjF;AAED,gCAAgC;AAChC,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,YAAY,GACjB,MAAM,GAAG,MAAM,CAQjB;AAMD,iGAAiG;AACjG,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,aAAa,EAC3C,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAChC,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CAAC,CAAC,CAAC,CAkCV;AA+BD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,aAAa,EAC/C,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,CAAC,EACX,KAAK,CAAC,EAAE,MAAM,GACb,KAAK,CAAC,CAAC,CAAC,CAYV;AAED,wDAAwD;AACxD,wBAAgB,IAAI,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAEnF;AAiBD;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAczF;AAED,YAAY;AACZ,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAa9F;AAED,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;AACtF;;;GAGG;AACH,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,IAClC,IAAI,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,kCAAkC,EAAE,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC;AAEzF,iGAAiG;AACjG,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAClC,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACpB,KAAK,CAAC,CAAC,CAAC,CA2CV;AAED,aAAa;AACb,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAOlE;AAED,cAAc;AACd,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EACvC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,aAAgC,GACzC,KAAK,CAAC,CAAC,CAAC,CAeV;AAED,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAC9C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,aAAa,EACvB,KAAK,SAAc,GAClB,KAAK,CAAC,CAAC,CAAC,CAyBV;AAED,2FAA2F;AAC3F,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EACrC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,aAAgC,GACzC,KAAK,CAAC,CAAC,CAAC,CA6CV;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,QAAQ,EAAE,YAAY,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,KAAK,CAAC,CAAC,CAAC,CAAC;AACZ,mGAAmG;AACnG,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAY3F;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACtC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,YAA+B,GACxC,KAAK,CAAC,CAAC,CAAC,CAWV;AAMD,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAgB/F;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAS1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAI7D;AAED,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAG,OAC5D,CAAC;AAC5B,qBAAqB;AACrB,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,EAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KACvB,OAAqC,CAAC;AACzC,oBAAoB;AACpB,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAG,OAC/D,CAAC;AAC5B,qBAAqB;AACrB,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,EACjD,OAAO,KAAK,CAAC,CAAC,CAAC,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KACvB,OAAqC,CAAC;AAEzC,kCAAkC;AAClC,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,KAAG,OAA2B,CAAC;AAClE,+CAA+C;AAC/C,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,OAA0B,CAAC;AACrE,4CAA4C;AAC5C,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,OAA0B,CAAC;AACrE,0DAA0D;AAC1D,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAK5C,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAQ7F;AACD,2EAA2E;AAC3E,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAQ7F;AACD,4BAA4B;AAC5B,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACrB,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACpB,KAAK,CAAC,CAAC,CAAC,CAQV;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAUvD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAOvD;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE5C;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAKlD;AAED,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EAC9D,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,EAC3B,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CAAC,CAAC,CAAC,CAWV;AAED,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC"}