@ducatjs/money 0.0.0 → 0.1.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 (285) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +51 -0
  3. package/README.md +617 -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 +399 -0
  9. package/data/checkout.json +230 -0
  10. package/data/iso4217-list-one.xml +1956 -0
  11. package/data/klarna.json +95 -0
  12. package/data/paypal.json +65 -0
  13. package/data/stripe-fx.json +17 -0
  14. package/data/stripe.json +285 -0
  15. package/dist/adyen-fx.d.ts +25 -0
  16. package/dist/adyen-fx.d.ts.map +1 -0
  17. package/dist/adyen-fx.js +122 -0
  18. package/dist/adyen-fx.js.map +1 -0
  19. package/dist/adyen.d.ts +25 -0
  20. package/dist/adyen.d.ts.map +1 -0
  21. package/dist/adyen.js +34 -0
  22. package/dist/adyen.js.map +1 -0
  23. package/dist/allocate.d.ts +72 -0
  24. package/dist/allocate.d.ts.map +1 -0
  25. package/dist/allocate.js +314 -0
  26. package/dist/allocate.js.map +1 -0
  27. package/dist/bag.d.ts +58 -0
  28. package/dist/bag.d.ts.map +1 -0
  29. package/dist/bag.js +122 -0
  30. package/dist/bag.js.map +1 -0
  31. package/dist/braintree.d.ts +34 -0
  32. package/dist/braintree.d.ts.map +1 -0
  33. package/dist/braintree.js +45 -0
  34. package/dist/braintree.js.map +1 -0
  35. package/dist/cash.d.ts +35 -0
  36. package/dist/cash.d.ts.map +1 -0
  37. package/dist/cash.js +86 -0
  38. package/dist/cash.js.map +1 -0
  39. package/dist/checkout.d.ts +42 -0
  40. package/dist/checkout.d.ts.map +1 -0
  41. package/dist/checkout.js +52 -0
  42. package/dist/checkout.js.map +1 -0
  43. package/dist/convert.d.ts +51 -0
  44. package/dist/convert.d.ts.map +1 -0
  45. package/dist/convert.js +55 -0
  46. package/dist/convert.js.map +1 -0
  47. package/dist/currency.d.ts +22 -0
  48. package/dist/currency.d.ts.map +1 -0
  49. package/dist/currency.js +38 -0
  50. package/dist/currency.js.map +1 -0
  51. package/dist/decimal.d.ts +52 -0
  52. package/dist/decimal.d.ts.map +1 -0
  53. package/dist/decimal.js +251 -0
  54. package/dist/decimal.js.map +1 -0
  55. package/dist/ecb.d.ts +17 -0
  56. package/dist/ecb.d.ts.map +1 -0
  57. package/dist/ecb.js +147 -0
  58. package/dist/ecb.js.map +1 -0
  59. package/dist/exact.d.ts +62 -0
  60. package/dist/exact.d.ts.map +1 -0
  61. package/dist/exact.js +147 -0
  62. package/dist/exact.js.map +1 -0
  63. package/dist/fetch.d.ts +58 -0
  64. package/dist/fetch.d.ts.map +1 -0
  65. package/dist/fetch.js +79 -0
  66. package/dist/fetch.js.map +1 -0
  67. package/dist/fixed.d.ts +121 -0
  68. package/dist/fixed.d.ts.map +1 -0
  69. package/dist/fixed.js +420 -0
  70. package/dist/fixed.js.map +1 -0
  71. package/dist/fn.d.ts +27 -0
  72. package/dist/fn.d.ts.map +1 -0
  73. package/dist/fn.js +30 -0
  74. package/dist/fn.js.map +1 -0
  75. package/dist/format.d.ts +13 -0
  76. package/dist/format.d.ts.map +1 -0
  77. package/dist/format.js +90 -0
  78. package/dist/format.js.map +1 -0
  79. package/dist/generated/adyen.d.ts +3 -0
  80. package/dist/generated/adyen.d.ts.map +1 -0
  81. package/dist/generated/adyen.js +144 -0
  82. package/dist/generated/adyen.js.map +1 -0
  83. package/dist/generated/braintree.d.ts +3 -0
  84. package/dist/generated/braintree.d.ts.map +1 -0
  85. package/dist/generated/braintree.js +140 -0
  86. package/dist/generated/braintree.js.map +1 -0
  87. package/dist/generated/cash.d.ts +12 -0
  88. package/dist/generated/cash.d.ts.map +1 -0
  89. package/dist/generated/cash.js +364 -0
  90. package/dist/generated/cash.js.map +1 -0
  91. package/dist/generated/checkout.d.ts +3 -0
  92. package/dist/generated/checkout.d.ts.map +1 -0
  93. package/dist/generated/checkout.js +151 -0
  94. package/dist/generated/checkout.js.map +1 -0
  95. package/dist/generated/iso4217.d.ts +174 -0
  96. package/dist/generated/iso4217.d.ts.map +1 -0
  97. package/dist/generated/iso4217.js +175 -0
  98. package/dist/generated/iso4217.js.map +1 -0
  99. package/dist/generated/kernel.d.ts +17 -0
  100. package/dist/generated/kernel.d.ts.map +1 -0
  101. package/dist/generated/kernel.js +208 -0
  102. package/dist/generated/kernel.js.map +1 -0
  103. package/dist/generated/klarna.d.ts +3 -0
  104. package/dist/generated/klarna.d.ts.map +1 -0
  105. package/dist/generated/klarna.js +21 -0
  106. package/dist/generated/klarna.js.map +1 -0
  107. package/dist/generated/paypal.d.ts +3 -0
  108. package/dist/generated/paypal.d.ts.map +1 -0
  109. package/dist/generated/paypal.js +31 -0
  110. package/dist/generated/paypal.js.map +1 -0
  111. package/dist/generated/stripe.d.ts +8 -0
  112. package/dist/generated/stripe.d.ts.map +1 -0
  113. package/dist/generated/stripe.js +150 -0
  114. package/dist/generated/stripe.js.map +1 -0
  115. package/dist/index.d.ts +11 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +11 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/klarna.d.ts +31 -0
  120. package/dist/klarna.d.ts.map +1 -0
  121. package/dist/klarna.js +38 -0
  122. package/dist/klarna.js.map +1 -0
  123. package/dist/money.d.ts +218 -0
  124. package/dist/money.d.ts.map +1 -0
  125. package/dist/money.js +577 -0
  126. package/dist/money.js.map +1 -0
  127. package/dist/parse.d.ts +11 -0
  128. package/dist/parse.d.ts.map +1 -0
  129. package/dist/parse.js +132 -0
  130. package/dist/parse.js.map +1 -0
  131. package/dist/paypal.d.ts +41 -0
  132. package/dist/paypal.d.ts.map +1 -0
  133. package/dist/paypal.js +58 -0
  134. package/dist/paypal.js.map +1 -0
  135. package/dist/plugins/adyen.d.ts +15 -0
  136. package/dist/plugins/adyen.d.ts.map +1 -0
  137. package/dist/plugins/adyen.js +10 -0
  138. package/dist/plugins/adyen.js.map +1 -0
  139. package/dist/plugins/all.d.ts +22 -0
  140. package/dist/plugins/all.d.ts.map +1 -0
  141. package/dist/plugins/all.js +23 -0
  142. package/dist/plugins/all.js.map +1 -0
  143. package/dist/plugins/allocate.d.ts +20 -0
  144. package/dist/plugins/allocate.d.ts.map +1 -0
  145. package/dist/plugins/allocate.js +26 -0
  146. package/dist/plugins/allocate.js.map +1 -0
  147. package/dist/plugins/braintree.d.ts +12 -0
  148. package/dist/plugins/braintree.d.ts.map +1 -0
  149. package/dist/plugins/braintree.js +12 -0
  150. package/dist/plugins/braintree.js.map +1 -0
  151. package/dist/plugins/cash.d.ts +19 -0
  152. package/dist/plugins/cash.d.ts.map +1 -0
  153. package/dist/plugins/cash.js +16 -0
  154. package/dist/plugins/cash.js.map +1 -0
  155. package/dist/plugins/checkout.d.ts +21 -0
  156. package/dist/plugins/checkout.d.ts.map +1 -0
  157. package/dist/plugins/checkout.js +16 -0
  158. package/dist/plugins/checkout.js.map +1 -0
  159. package/dist/plugins/convert.d.ts +20 -0
  160. package/dist/plugins/convert.d.ts.map +1 -0
  161. package/dist/plugins/convert.js +13 -0
  162. package/dist/plugins/convert.js.map +1 -0
  163. package/dist/plugins/exact.d.ts +15 -0
  164. package/dist/plugins/exact.d.ts.map +1 -0
  165. package/dist/plugins/exact.js +13 -0
  166. package/dist/plugins/exact.js.map +1 -0
  167. package/dist/plugins/fixed.d.ts +17 -0
  168. package/dist/plugins/fixed.d.ts.map +1 -0
  169. package/dist/plugins/fixed.js +13 -0
  170. package/dist/plugins/fixed.js.map +1 -0
  171. package/dist/plugins/format.d.ts +9 -0
  172. package/dist/plugins/format.d.ts.map +1 -0
  173. package/dist/plugins/format.js +16 -0
  174. package/dist/plugins/format.js.map +1 -0
  175. package/dist/plugins/klarna.d.ts +10 -0
  176. package/dist/plugins/klarna.d.ts.map +1 -0
  177. package/dist/plugins/klarna.js +10 -0
  178. package/dist/plugins/klarna.js.map +1 -0
  179. package/dist/plugins/paypal.d.ts +14 -0
  180. package/dist/plugins/paypal.d.ts.map +1 -0
  181. package/dist/plugins/paypal.js +16 -0
  182. package/dist/plugins/paypal.js.map +1 -0
  183. package/dist/plugins/prisma.d.ts +8 -0
  184. package/dist/plugins/prisma.d.ts.map +1 -0
  185. package/dist/plugins/prisma.js +13 -0
  186. package/dist/plugins/prisma.js.map +1 -0
  187. package/dist/plugins/stripe.d.ts +14 -0
  188. package/dist/plugins/stripe.d.ts.map +1 -0
  189. package/dist/plugins/stripe.js +16 -0
  190. package/dist/plugins/stripe.js.map +1 -0
  191. package/dist/plugins/tax.d.ts +21 -0
  192. package/dist/plugins/tax.d.ts.map +1 -0
  193. package/dist/plugins/tax.js +18 -0
  194. package/dist/plugins/tax.js.map +1 -0
  195. package/dist/prisma.d.ts +66 -0
  196. package/dist/prisma.d.ts.map +1 -0
  197. package/dist/prisma.js +66 -0
  198. package/dist/prisma.js.map +1 -0
  199. package/dist/processor.d.ts +28 -0
  200. package/dist/processor.d.ts.map +1 -0
  201. package/dist/processor.js +118 -0
  202. package/dist/processor.js.map +1 -0
  203. package/dist/provider.d.ts +89 -0
  204. package/dist/provider.d.ts.map +1 -0
  205. package/dist/provider.js +240 -0
  206. package/dist/provider.js.map +1 -0
  207. package/dist/rate.d.ts +119 -0
  208. package/dist/rate.d.ts.map +1 -0
  209. package/dist/rate.js +271 -0
  210. package/dist/rate.js.map +1 -0
  211. package/dist/rounding-error.d.ts +9 -0
  212. package/dist/rounding-error.d.ts.map +1 -0
  213. package/dist/rounding-error.js +9 -0
  214. package/dist/rounding-error.js.map +1 -0
  215. package/dist/rounding.d.ts +50 -0
  216. package/dist/rounding.d.ts.map +1 -0
  217. package/dist/rounding.js +87 -0
  218. package/dist/rounding.js.map +1 -0
  219. package/dist/stripe-fx.d.ts +22 -0
  220. package/dist/stripe-fx.d.ts.map +1 -0
  221. package/dist/stripe-fx.js +30 -0
  222. package/dist/stripe-fx.js.map +1 -0
  223. package/dist/stripe.d.ts +36 -0
  224. package/dist/stripe.d.ts.map +1 -0
  225. package/dist/stripe.js +39 -0
  226. package/dist/stripe.js.map +1 -0
  227. package/dist/tax.d.ts +29 -0
  228. package/dist/tax.d.ts.map +1 -0
  229. package/dist/tax.js +39 -0
  230. package/dist/tax.js.map +1 -0
  231. package/package.json +169 -5
  232. package/src/adyen-fx.ts +154 -0
  233. package/src/adyen.ts +46 -0
  234. package/src/allocate.ts +393 -0
  235. package/src/bag.ts +170 -0
  236. package/src/braintree.ts +71 -0
  237. package/src/cash.ts +115 -0
  238. package/src/checkout.ts +77 -0
  239. package/src/convert.ts +159 -0
  240. package/src/currency.ts +61 -0
  241. package/src/decimal.ts +283 -0
  242. package/src/ecb.ts +162 -0
  243. package/src/exact.ts +182 -0
  244. package/src/fetch.ts +127 -0
  245. package/src/fixed.ts +558 -0
  246. package/src/fn.ts +80 -0
  247. package/src/format.ts +106 -0
  248. package/src/generated/adyen.ts +144 -0
  249. package/src/generated/braintree.ts +140 -0
  250. package/src/generated/cash.ts +375 -0
  251. package/src/generated/checkout.ts +151 -0
  252. package/src/generated/iso4217.ts +179 -0
  253. package/src/generated/kernel.ts +230 -0
  254. package/src/generated/klarna.ts +21 -0
  255. package/src/generated/paypal.ts +31 -0
  256. package/src/generated/stripe.ts +150 -0
  257. package/src/index.ts +37 -0
  258. package/src/klarna.ts +54 -0
  259. package/src/money.ts +781 -0
  260. package/src/parse.ts +144 -0
  261. package/src/paypal.ts +93 -0
  262. package/src/plugins/adyen.ts +25 -0
  263. package/src/plugins/all.ts +47 -0
  264. package/src/plugins/allocate.ts +53 -0
  265. package/src/plugins/braintree.ts +23 -0
  266. package/src/plugins/cash.ts +33 -0
  267. package/src/plugins/checkout.ts +32 -0
  268. package/src/plugins/convert.ts +50 -0
  269. package/src/plugins/exact.ts +23 -0
  270. package/src/plugins/fixed.ts +28 -0
  271. package/src/plugins/format.ts +28 -0
  272. package/src/plugins/klarna.ts +21 -0
  273. package/src/plugins/paypal.ts +29 -0
  274. package/src/plugins/prisma.ts +24 -0
  275. package/src/plugins/stripe.ts +29 -0
  276. package/src/plugins/tax.ts +41 -0
  277. package/src/prisma.ts +118 -0
  278. package/src/processor.ts +181 -0
  279. package/src/provider.ts +324 -0
  280. package/src/rate.ts +377 -0
  281. package/src/rounding-error.ts +8 -0
  282. package/src/rounding.ts +122 -0
  283. package/src/stripe-fx.ts +49 -0
  284. package/src/stripe.ts +69 -0
  285. package/src/tax.ts +71 -0
@@ -0,0 +1,218 @@
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
+ /** Thrown when two amounts in different currencies are combined. */
13
+ export declare class CurrencyMismatchError extends TypeError {
14
+ name: string;
15
+ readonly expected: string;
16
+ readonly actual: string;
17
+ constructor(expected: string, actual: string);
18
+ }
19
+ /**
20
+ * An immutable amount of money: an integer number of 10^-scale units of `currency`.
21
+ *
22
+ * `minor` is a JS number whenever it is a safe integer (|v| <= 2^53 - 1) and a bigint otherwise, so
23
+ * ordinary amounts never allocate a bigint, and huge or high-precision amounts never lose a digit.
24
+ * `scale` is normally the currency's ISO exponent (2 for EUR) but can be larger for sub-minor
25
+ * precision (unit prices, FX intermediates); `round()` brings it back.
26
+ *
27
+ * Instances are not frozen (Object.freeze costs 5-8x on construction in V8 and JSC; see bench/),
28
+ * but every field is readonly and no operation mutates. Create values with `money()` /
29
+ * `fromMinor()`.
30
+ *
31
+ * The class carries the core methods only. Opt-in modules (`@ducatjs/money/allocate`,
32
+ * `@ducatjs/money/tax`, `@ducatjs/money/format`, ...) add theirs when imported; see `extendMoney`.
33
+ */
34
+ declare class Money<C extends string = string> {
35
+ readonly currency: C;
36
+ readonly minor: number | bigint;
37
+ readonly scale: number;
38
+ /** @internal */
39
+ constructor(currency: C, minor: number | bigint, scale: number);
40
+ /** "12.34 EUR" */
41
+ toString(): string;
42
+ toJSON(): MoneyJSON<C>;
43
+ /** Blocks `a + b`, `a > b`, `+a`: arithmetic and comparison must go through the library. */
44
+ [Symbol.toPrimitive](hint: string): string;
45
+ /** this + other (same currency; any scale) */
46
+ add(other: Money<C>): Money<C>;
47
+ /** this - other */
48
+ subtract(other: Money<C>): Money<C>;
49
+ /**
50
+ * this * factor, rounded to this scale. `factor` is exact: integer, decimal string ('1.075'),
51
+ * bigint or ratio().
52
+ */
53
+ multiply(factor: Factor, rounding?: RoundingMode): Money<C>;
54
+ /** this / divisor, rounded to this scale */
55
+ divide(divisor: Factor, rounding?: RoundingMode): Money<C>;
56
+ negate(): Money<C>;
57
+ abs(): Money<C>;
58
+ /** Rounds to the currency's exponent (or `scale`). */
59
+ round(rounding: RoundingMode, scale?: number): Money<C>;
60
+ /** Changes the scale; decreasing it rounds (default 'halfExpand'). */
61
+ toScale(scale: number, rounding?: RoundingMode): Money<C>;
62
+ /** -1, 0 or 1; throws on currency mismatch */
63
+ compare(other: Money<C>): -1 | 0 | 1;
64
+ /** same currency and value; a different currency is simply not equal */
65
+ equals(other: Money): boolean;
66
+ lessThan(other: Money<C>): boolean;
67
+ lessThanOrEqual(other: Money<C>): boolean;
68
+ greaterThan(other: Money<C>): boolean;
69
+ greaterThanOrEqual(other: Money<C>): boolean;
70
+ isZero(): boolean;
71
+ isPositive(): boolean;
72
+ isNegative(): boolean;
73
+ sign(): -1 | 0 | 1;
74
+ min(...others: Money<C>[]): Money<C>;
75
+ max(...others: Money<C>[]): Money<C>;
76
+ clamp(lo: Money<C>, hi: Money<C>): Money<C>;
77
+ /** Exact decimal string in major units: "12.34" */
78
+ toDecimal(): string;
79
+ /** Minor units as a bigint (BIGINT columns) */
80
+ toMinor(): bigint;
81
+ /** Minor units as a number; throws beyond 2^53 */
82
+ toMinorNumber(): number;
83
+ }
84
+ export type { Money };
85
+ /** Whether a value is a Money from this package. */
86
+ export declare function isMoney(value: unknown): value is Money;
87
+ /** Options for `extendMoney`. */
88
+ export interface ExtendMoneyOptions {
89
+ /**
90
+ * Who is installing the methods, e.g. '@ducatjs/money/allocate'. Installing again under the same
91
+ * owner replaces that owner's methods, which happens when a module is loaded twice (hot reload,
92
+ * two copies of the package). Without an owner, or under a different one, an existing name
93
+ * throws.
94
+ */
95
+ readonly owner?: string;
96
+ }
97
+ /**
98
+ * Adds methods to every Money (this is how `@ducatjs/money/allocate`, `@ducatjs/money/format`, ...
99
+ * install theirs). Declare their types with `declare module '@ducatjs/money' { interface Money<C
100
+ * extends string> { ... } }`. The methods are non-enumerable, like class methods. A name that Money
101
+ * already has (one of its own methods, or one added by a different owner) throws, so two modules
102
+ * cannot silently fight over it.
103
+ */
104
+ export declare function extendMoney(methods: Record<string, (this: Money, ...args: never[]) => unknown>, options?: ExtendMoneyOptions): void;
105
+ /** @internal construct from a value that may be an unsafe bigint */
106
+ export declare function make<C extends string>(currency: C, minor: number | bigint, scale: number): Money<C>;
107
+ /** v * 10^e exactly (e >= 0) */
108
+ export declare function scaleUp(minor: number | bigint, exponent: number): number | bigint;
109
+ /** v / 10^e rounded (e >= 0) */
110
+ export declare function scaleDown(minor: number | bigint, exponent: number, mode: RoundingMode): number | bigint;
111
+ /** Options for `money()` and `fromJSON()`: the scale to keep and how to round extra decimals. */
112
+ export interface MoneyOptions {
113
+ /** Decimal places to keep (default: the currency's exponent). */
114
+ readonly scale?: number;
115
+ /** How to round input with more decimals than `scale` (default 'unnecessary': throw). */
116
+ readonly rounding?: RoundingMode;
117
+ }
118
+ /**
119
+ * Creates money from an amount in major units.
120
+ *
121
+ * money('12.34', 'EUR') // exact decimal string: the recommended form
122
+ * money(12, 'EUR') // integers are major units: 12.00 EUR
123
+ * money(12.34, 'EUR') // non-integer numbers are read at their shortest decimal form ("12.34")
124
+ * money(10n ** 30n, 'USD')
125
+ *
126
+ * Throws if the amount has more decimals than the currency (or `scale`) unless `rounding` is given,
127
+ * so `money(0.1 + 0.2, 'EUR')` throws rather than silently becoming 0.30.
128
+ */
129
+ export declare function money<C extends CurrencyInput>(amount: string | number | bigint, currency: C, options?: MoneyOptions): Money<C>;
130
+ /**
131
+ * Creates money from an integer count of minor units (cents): `fromMinor(1234, 'EUR')` is 12.34
132
+ * EUR. This is the form to read from a BIGINT column or a payment processor (but see
133
+ * `stripe`/`adyen` for processors whose exponent differs from ISO).
134
+ */
135
+ export declare function fromMinor<C extends CurrencyInput>(minor: number | bigint, currency: C, scale?: number): Money<C>;
136
+ /** Zero in a currency, at its exponent (or `scale`). */
137
+ export declare function zero<C extends CurrencyInput>(currency: C, scale?: number): Money<C>;
138
+ /**
139
+ * a + b. Mixing currencies is a type error for literal currency types and a runtime error
140
+ * otherwise.
141
+ */
142
+ export declare function add<C extends string>(money: Money<C>, other: Money<NoInfer<C>>): Money<C>;
143
+ /** a - b */
144
+ export declare function subtract<C extends string>(money: Money<C>, other: Money<NoInfer<C>>): Money<C>;
145
+ type IsUnion<T, U = T> = T extends unknown ? ([U] extends [T] ? false : true) : never;
146
+ /**
147
+ * Rejects arrays whose element type mixes several literal currencies, e.g. (Money<'EUR'> |
148
+ * Money<'USD'>)[].
149
+ */
150
+ type SingleCurrency<C extends string> = true extends IsUnion<C> ? {
151
+ readonly 'mixed currencies are not allowed': C;
152
+ } : unknown;
153
+ /** Sum of a list (same currency; any scale). An empty list needs `currency` and returns zero. */
154
+ export declare function sum<C extends string>(items: readonly Money<C>[] & SingleCurrency<C>, currency?: NoInfer<C>): Money<C>;
155
+ /** -money */
156
+ export declare function negate<C extends string>(money: Money<C>): Money<C>;
157
+ /** |money| */
158
+ export declare function abs<C extends string>(money: Money<C>): Money<C>;
159
+ /**
160
+ * m * factor, rounded to m's scale. `factor` is exact: an integer, a decimal string ('1.075'), a
161
+ * bigint, or a `ratio()`. Rounding defaults to 'halfExpand' (ties away from zero); pass
162
+ * 'unnecessary' to throw instead.
163
+ */
164
+ export declare function multiply<C extends string>(money: Money<C>, factor: Factor, rounding?: RoundingMode): Money<C>;
165
+ /** @internal m * r, rounded */
166
+ export declare function multiplyByRatio<C extends string>(money: Money<C>, factor: Ratio, rounding: RoundingMode, scale?: number): Money<C>;
167
+ /** m / divisor, rounded to m's scale (default 'halfExpand'). */
168
+ export declare function divide<C extends string>(money: Money<C>, divisor: Factor, rounding?: RoundingMode): Money<C>;
169
+ /**
170
+ * Rounds to the currency's exponent (or `scale`): `round(money('1.005', 'EUR', {scale: 3}),
171
+ * 'halfEven')`.
172
+ */
173
+ export declare function round<C extends string>(money: Money<C>, rounding: RoundingMode, scale?: number): Money<C>;
174
+ /**
175
+ * Changes the scale; increasing it is always exact, decreasing it rounds (default 'halfExpand').
176
+ */
177
+ export declare function toScale<C extends string>(money: Money<C>, scale: number, rounding?: RoundingMode): Money<C>;
178
+ /** -1, 0 or 1. Throws on currency mismatch. Works across scales and number/bigint. */
179
+ export declare function compare<C extends string>(money: Money<C>, other: Money<NoInfer<C>>): -1 | 0 | 1;
180
+ /**
181
+ * Same currency and same value (1.0 EUR at scale 1 equals 1.00 EUR). Different currencies: false.
182
+ */
183
+ export declare function equals(money: Money, other: Money): boolean;
184
+ /** money < other (same currency; any scale). */
185
+ export declare const lessThan: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
186
+ /** money <= other */
187
+ export declare const lessThanOrEqual: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
188
+ /** money > other */
189
+ export declare const greaterThan: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
190
+ /** money >= other */
191
+ export declare const greaterThanOrEqual: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
192
+ /** Whether the amount is zero. */
193
+ export declare const isZero: (money: Money) => boolean;
194
+ /** Whether the amount is greater than zero. */
195
+ export declare const isPositive: (money: Money) => boolean;
196
+ /** Whether the amount is less than zero. */
197
+ export declare const isNegative: (money: Money) => boolean;
198
+ /** 1, 0 or -1 for positive, zero and negative amounts. */
199
+ export declare const sign: (money: Money) => -1 | 0 | 1;
200
+ /** The smallest of the amounts (same currency); the first one wins ties. */
201
+ export declare function min<C extends string>(first: Money<C>, ...rest: Money<NoInfer<C>>[]): Money<C>;
202
+ /** The largest of the amounts (same currency); the first one wins ties. */
203
+ export declare function max<C extends string>(first: Money<C>, ...rest: Money<NoInfer<C>>[]): Money<C>;
204
+ /** Limits m to [lo, hi]. */
205
+ export declare function clamp<C extends string>(money: Money<C>, lo: Money<NoInfer<C>>, hi: Money<NoInfer<C>>): Money<C>;
206
+ /**
207
+ * Exact decimal string in major units: "12.34", "-0.05", "1000" (JPY). For NUMERIC/DECIMAL columns.
208
+ */
209
+ export declare function toDecimal(money: Money): string;
210
+ /** Minor units as a bigint (always safe; use for BIGINT columns). */
211
+ export declare function toMinor(money: Money): bigint;
212
+ /** Minor units as a number; throws if not a safe integer. */
213
+ export declare function toMinorNumber(money: Money): number;
214
+ /** Parses `{ amount: "12.34", currency: "EUR" }` (as produced by JSON.stringify(money)). */
215
+ export declare function fromJSON<C extends CurrencyInput = CurrencyInput>(json: MoneyJSON<C> | string, options?: MoneyOptions): Money<C>;
216
+ export type { Factor, Ratio } from './decimal.js';
217
+ export { ratio } from './decimal.js';
218
+ //# sourceMappingURL=money.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../src/money.ts"],"names":[],"mappings":"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"}