@ducatjs/money 0.1.0 → 0.2.1

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 (253) hide show
  1. package/NOTICE +73 -0
  2. package/README.md +479 -62
  3. package/data/cash-rounding.json +123 -2
  4. package/data/cldr-cash.json +101 -0
  5. package/data/historic.json +78 -0
  6. package/data/iso4217-list-three.xml +1185 -0
  7. package/dist/adyen-fx.d.ts.map +1 -1
  8. package/dist/adyen-fx.js +22 -4
  9. package/dist/adyen-fx.js.map +1 -1
  10. package/dist/boc.d.ts +31 -0
  11. package/dist/boc.d.ts.map +1 -0
  12. package/dist/boc.js +114 -0
  13. package/dist/boc.js.map +1 -0
  14. package/dist/boe.d.ts +33 -0
  15. package/dist/boe.d.ts.map +1 -0
  16. package/dist/boe.js +114 -0
  17. package/dist/boe.js.map +1 -0
  18. package/dist/cash.d.ts +30 -1
  19. package/dist/cash.d.ts.map +1 -1
  20. package/dist/cash.js +50 -2
  21. package/dist/cash.js.map +1 -1
  22. package/dist/convert.d.ts +10 -9
  23. package/dist/convert.d.ts.map +1 -1
  24. package/dist/convert.js +13 -3
  25. package/dist/convert.js.map +1 -1
  26. package/dist/drizzle/mysql.d.ts +105 -0
  27. package/dist/drizzle/mysql.d.ts.map +1 -0
  28. package/dist/drizzle/mysql.js +60 -0
  29. package/dist/drizzle/mysql.js.map +1 -0
  30. package/dist/drizzle/pg.d.ts +103 -0
  31. package/dist/drizzle/pg.d.ts.map +1 -0
  32. package/dist/drizzle/pg.js +60 -0
  33. package/dist/drizzle/pg.js.map +1 -0
  34. package/dist/drizzle/sqlite.d.ts +102 -0
  35. package/dist/drizzle/sqlite.d.ts.map +1 -0
  36. package/dist/drizzle/sqlite.js +59 -0
  37. package/dist/drizzle/sqlite.js.map +1 -0
  38. package/dist/ecb.d.ts +37 -2
  39. package/dist/ecb.d.ts.map +1 -1
  40. package/dist/ecb.js +148 -10
  41. package/dist/ecb.js.map +1 -1
  42. package/dist/fed.d.ts +35 -0
  43. package/dist/fed.d.ts.map +1 -0
  44. package/dist/fed.js +134 -0
  45. package/dist/fed.js.map +1 -0
  46. package/dist/fetch.d.ts +45 -0
  47. package/dist/fetch.d.ts.map +1 -1
  48. package/dist/fetch.js +167 -24
  49. package/dist/fetch.js.map +1 -1
  50. package/dist/fn.d.ts +8 -1
  51. package/dist/fn.d.ts.map +1 -1
  52. package/dist/fn.js +8 -1
  53. package/dist/fn.js.map +1 -1
  54. package/dist/generated/cash.d.ts +2 -0
  55. package/dist/generated/cash.d.ts.map +1 -1
  56. package/dist/generated/cash.js +101 -0
  57. package/dist/generated/cash.js.map +1 -1
  58. package/dist/generated/historic.d.ts +337 -0
  59. package/dist/generated/historic.d.ts.map +1 -0
  60. package/dist/generated/historic.js +66 -0
  61. package/dist/generated/historic.js.map +1 -0
  62. package/dist/historic.d.ts +40 -0
  63. package/dist/historic.d.ts.map +1 -0
  64. package/dist/historic.js +43 -0
  65. package/dist/historic.js.map +1 -0
  66. package/dist/history.d.ts +96 -0
  67. package/dist/history.d.ts.map +1 -0
  68. package/dist/history.js +213 -0
  69. package/dist/history.js.map +1 -0
  70. package/dist/hmrc.d.ts +28 -0
  71. package/dist/hmrc.d.ts.map +1 -0
  72. package/dist/hmrc.js +108 -0
  73. package/dist/hmrc.js.map +1 -0
  74. package/dist/index.d.ts +1 -1
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +1 -1
  77. package/dist/index.js.map +1 -1
  78. package/dist/kysely.d.ts +120 -0
  79. package/dist/kysely.d.ts.map +1 -0
  80. package/dist/kysely.js +309 -0
  81. package/dist/kysely.js.map +1 -0
  82. package/dist/money.d.ts +93 -9
  83. package/dist/money.d.ts.map +1 -1
  84. package/dist/money.js +135 -9
  85. package/dist/money.js.map +1 -1
  86. package/dist/parse.d.ts +45 -1
  87. package/dist/parse.d.ts.map +1 -1
  88. package/dist/parse.js +290 -3
  89. package/dist/parse.js.map +1 -1
  90. package/dist/pg.d.ts +100 -0
  91. package/dist/pg.d.ts.map +1 -0
  92. package/dist/pg.js +343 -0
  93. package/dist/pg.js.map +1 -0
  94. package/dist/plugins/adyen.d.ts +1 -1
  95. package/dist/plugins/adyen.d.ts.map +1 -1
  96. package/dist/plugins/adyen.js.map +1 -1
  97. package/dist/plugins/all.d.ts +8 -1
  98. package/dist/plugins/all.d.ts.map +1 -1
  99. package/dist/plugins/all.js +8 -1
  100. package/dist/plugins/all.js.map +1 -1
  101. package/dist/plugins/allocate.d.ts +1 -1
  102. package/dist/plugins/allocate.d.ts.map +1 -1
  103. package/dist/plugins/allocate.js.map +1 -1
  104. package/dist/plugins/braintree.d.ts +1 -1
  105. package/dist/plugins/braintree.d.ts.map +1 -1
  106. package/dist/plugins/braintree.js.map +1 -1
  107. package/dist/plugins/cash.d.ts +1 -1
  108. package/dist/plugins/cash.d.ts.map +1 -1
  109. package/dist/plugins/cash.js.map +1 -1
  110. package/dist/plugins/checkout.d.ts +1 -1
  111. package/dist/plugins/checkout.d.ts.map +1 -1
  112. package/dist/plugins/checkout.js.map +1 -1
  113. package/dist/plugins/convert.d.ts +5 -5
  114. package/dist/plugins/convert.d.ts.map +1 -1
  115. package/dist/plugins/convert.js.map +1 -1
  116. package/dist/plugins/exact.d.ts +1 -1
  117. package/dist/plugins/exact.d.ts.map +1 -1
  118. package/dist/plugins/exact.js.map +1 -1
  119. package/dist/plugins/fixed.d.ts +1 -1
  120. package/dist/plugins/fixed.d.ts.map +1 -1
  121. package/dist/plugins/fixed.js.map +1 -1
  122. package/dist/plugins/format.d.ts +1 -1
  123. package/dist/plugins/format.d.ts.map +1 -1
  124. package/dist/plugins/format.js.map +1 -1
  125. package/dist/plugins/klarna.d.ts +1 -1
  126. package/dist/plugins/klarna.d.ts.map +1 -1
  127. package/dist/plugins/klarna.js.map +1 -1
  128. package/dist/plugins/paypal.d.ts +1 -1
  129. package/dist/plugins/paypal.d.ts.map +1 -1
  130. package/dist/plugins/paypal.js +0 -4
  131. package/dist/plugins/paypal.js.map +1 -1
  132. package/dist/plugins/prisma.d.ts +1 -1
  133. package/dist/plugins/prisma.d.ts.map +1 -1
  134. package/dist/plugins/prisma.js +0 -4
  135. package/dist/plugins/prisma.js.map +1 -1
  136. package/dist/plugins/stripe.d.ts +1 -1
  137. package/dist/plugins/stripe.d.ts.map +1 -1
  138. package/dist/plugins/stripe.js +0 -4
  139. package/dist/plugins/stripe.js.map +1 -1
  140. package/dist/plugins/tax.d.ts +6 -6
  141. package/dist/plugins/tax.d.ts.map +1 -1
  142. package/dist/plugins/tax.js.map +1 -1
  143. package/dist/policy.d.ts +34 -0
  144. package/dist/policy.d.ts.map +1 -0
  145. package/dist/policy.js +90 -0
  146. package/dist/policy.js.map +1 -0
  147. package/dist/prisma.d.ts +25 -14
  148. package/dist/prisma.d.ts.map +1 -1
  149. package/dist/prisma.js +29 -19
  150. package/dist/prisma.js.map +1 -1
  151. package/dist/provider.d.ts +21 -7
  152. package/dist/provider.d.ts.map +1 -1
  153. package/dist/provider.js +51 -11
  154. package/dist/provider.js.map +1 -1
  155. package/dist/rate-text.d.ts +38 -0
  156. package/dist/rate-text.d.ts.map +1 -0
  157. package/dist/rate-text.js +143 -0
  158. package/dist/rate-text.js.map +1 -0
  159. package/dist/rate.d.ts +61 -5
  160. package/dist/rate.d.ts.map +1 -1
  161. package/dist/rate.js +133 -33
  162. package/dist/rate.js.map +1 -1
  163. package/dist/rounding.js +1 -1
  164. package/dist/rounding.js.map +1 -1
  165. package/dist/schema.d.ts +43 -0
  166. package/dist/schema.d.ts.map +1 -0
  167. package/dist/schema.js +77 -0
  168. package/dist/schema.js.map +1 -0
  169. package/dist/sql.d.ts +54 -0
  170. package/dist/sql.d.ts.map +1 -0
  171. package/dist/sql.js +131 -0
  172. package/dist/sql.js.map +1 -0
  173. package/dist/tax.d.ts +13 -9
  174. package/dist/tax.d.ts.map +1 -1
  175. package/dist/tax.js +20 -4
  176. package/dist/tax.js.map +1 -1
  177. package/dist/testing/arbitraries.d.ts +43 -0
  178. package/dist/testing/arbitraries.d.ts.map +1 -0
  179. package/dist/testing/arbitraries.js +98 -0
  180. package/dist/testing/arbitraries.js.map +1 -0
  181. package/dist/testing/index.d.ts +67 -0
  182. package/dist/testing/index.d.ts.map +1 -0
  183. package/dist/testing/index.js +159 -0
  184. package/dist/testing/index.js.map +1 -0
  185. package/dist/testing/jest.d.ts +2 -0
  186. package/dist/testing/jest.d.ts.map +1 -0
  187. package/dist/testing/jest.js +15 -0
  188. package/dist/testing/jest.js.map +1 -0
  189. package/dist/testing/vitest.d.ts +7 -0
  190. package/dist/testing/vitest.d.ts.map +1 -0
  191. package/dist/testing/vitest.js +12 -0
  192. package/dist/testing/vitest.js.map +1 -0
  193. package/dist/valibot.d.ts +33 -0
  194. package/dist/valibot.d.ts.map +1 -0
  195. package/dist/valibot.js +61 -0
  196. package/dist/valibot.js.map +1 -0
  197. package/dist/zod.d.ts +36 -0
  198. package/dist/zod.d.ts.map +1 -0
  199. package/dist/zod.js +58 -0
  200. package/dist/zod.js.map +1 -0
  201. package/package.json +116 -5
  202. package/src/adyen-fx.ts +25 -4
  203. package/src/boc.ts +136 -0
  204. package/src/boe.ts +131 -0
  205. package/src/cash.ts +70 -2
  206. package/src/convert.ts +33 -15
  207. package/src/drizzle/mysql.ts +78 -0
  208. package/src/drizzle/pg.ts +78 -0
  209. package/src/drizzle/sqlite.ts +70 -0
  210. package/src/ecb.ts +179 -13
  211. package/src/fed.ts +146 -0
  212. package/src/fetch.ts +207 -28
  213. package/src/fn.ts +14 -0
  214. package/src/generated/cash.ts +103 -0
  215. package/src/generated/historic.ts +67 -0
  216. package/src/historic.ts +77 -0
  217. package/src/history.ts +333 -0
  218. package/src/hmrc.ts +125 -0
  219. package/src/index.ts +4 -0
  220. package/src/kysely.ts +588 -0
  221. package/src/money.ts +210 -12
  222. package/src/parse.ts +371 -4
  223. package/src/pg.ts +410 -0
  224. package/src/plugins/adyen.ts +3 -2
  225. package/src/plugins/all.ts +10 -0
  226. package/src/plugins/allocate.ts +3 -2
  227. package/src/plugins/braintree.ts +3 -2
  228. package/src/plugins/cash.ts +3 -2
  229. package/src/plugins/checkout.ts +3 -2
  230. package/src/plugins/convert.ts +6 -6
  231. package/src/plugins/exact.ts +3 -2
  232. package/src/plugins/fixed.ts +3 -2
  233. package/src/plugins/format.ts +3 -2
  234. package/src/plugins/klarna.ts +3 -2
  235. package/src/plugins/paypal.ts +3 -2
  236. package/src/plugins/prisma.ts +3 -2
  237. package/src/plugins/stripe.ts +3 -2
  238. package/src/plugins/tax.ts +11 -11
  239. package/src/policy.ts +124 -0
  240. package/src/prisma.ts +91 -10
  241. package/src/provider.ts +81 -16
  242. package/src/rate-text.ts +151 -0
  243. package/src/rate.ts +205 -36
  244. package/src/rounding.ts +1 -1
  245. package/src/schema.ts +119 -0
  246. package/src/sql.ts +178 -0
  247. package/src/tax.ts +40 -9
  248. package/src/testing/arbitraries.ts +134 -0
  249. package/src/testing/index.ts +247 -0
  250. package/src/testing/jest.ts +18 -0
  251. package/src/testing/vitest.ts +18 -0
  252. package/src/valibot.ts +87 -0
  253. package/src/zod.ts +78 -0
package/dist/kysely.js ADDED
@@ -0,0 +1,309 @@
1
+ /**
2
+ * `@ducatjs/money/kysely`: Money in Kysely queries, without the plugin having to understand query
3
+ * shapes. A money value is selected as a self-describing JSON object built in SQL (marked, with the
4
+ * amount as exact text and the currency), and `MoneyResultPlugin` turns exactly those objects into
5
+ * Money, wherever they appear: unions, CTEs, subqueries, nested JSON, every `stream()` chunk, and
6
+ * under `CamelCasePlugin`. A raw column is never typed as Money.
7
+ *
8
+ * const money = moneyHelpers('postgres');
9
+ * const db = new Kysely<Database>({ dialect, plugins: [new MoneyResultPlugin()] });
10
+ *
11
+ * await db.insertInto('payments').values({ id: 1, ...setMoney(fee, 'amount_minor', 'currency') });
12
+ * await db
13
+ * .selectFrom('payments')
14
+ * .select((eb) => money.selectMoney(eb, 'amount_minor', 'currency').as('fee'))
15
+ * .where((eb) => money.compareMoney(eb, 'amount_minor', 'currency', '>=', fee))
16
+ * .execute();
17
+ */
18
+ import { sql, } from 'kysely';
19
+ import { currencyExponent } from './currency.js';
20
+ import { CurrencyMismatchError } from './money.js';
21
+ import { checkCurrency, checkDecimalSize, checkIsoScale, decimalFromDriver, DEFAULT_DECIMAL_SIZE, decimalToDriver, minorFromDriver, minorToDriver, } from './sql.js';
22
+ export { DEFAULT_DECIMAL_SIZE } from './sql.js';
23
+ /** Marks a column's currency as fixed: `selectMoney(eb, 'total_minor', fixed('EUR'))`. */
24
+ export function fixed(currency) {
25
+ // an unknown code fails here, where the column is described, not on the first query
26
+ currencyExponent(currency);
27
+ return { fixed: currency };
28
+ }
29
+ function isFixed(currency) {
30
+ return typeof currency === 'object' && currency !== null && 'fixed' in currency;
31
+ }
32
+ const COMPARISONS = new Set(['=', '<>', '<', '<=', '>', '>=']);
33
+ // The marker key of the JSON objects the helpers build. Its value carries a random nonce chosen
34
+ // when this module loads, so data that merely looks like a marker (a user's JSON column, a text
35
+ // value) is never read as money: forging one needs the nonce, which only appears in query text.
36
+ const MARKER = '$ducat';
37
+ const NONCE = Array.from(globalThis.crypto.getRandomValues(new Uint8Array(16)), (byte) => byte.toString(16).padStart(2, '0')).join('');
38
+ const MINOR_MARKER = `${NONCE}:minor`;
39
+ const DECIMAL_MARKER = `${NONCE}:decimal`;
40
+ // nested JSON deeper than this is left as it is, so a hostile document can't exhaust the stack
41
+ const MAX_DEPTH = 64;
42
+ function markerFor(storage) {
43
+ return storage === 'minor' ? MINOR_MARKER : DECIMAL_MARKER;
44
+ }
45
+ export function setMoney(money, amount, currency) {
46
+ if (isFixed(currency)) {
47
+ return { [amount]: minorToDriver(money, currency.fixed).toString() };
48
+ }
49
+ return { [amount]: minorToDriver(money, undefined).toString(), [currency]: money.currency };
50
+ }
51
+ export function setDecimalMoney(money, amount, currency, size = DEFAULT_DECIMAL_SIZE) {
52
+ const decimal = decimalForColumn(money, isFixed(currency) ? currency.fixed : undefined, size);
53
+ if (isFixed(currency)) {
54
+ return { [amount]: decimal };
55
+ }
56
+ return { [amount]: decimal, [currency]: money.currency };
57
+ }
58
+ /**
59
+ * The decimal for a NUMERIC(p, s) column, or a throw if the column would round or clamp it: its
60
+ * scale must hold the currency's exponent, and the value must fit its integer digits.
61
+ */
62
+ function decimalForColumn(money, currency, size) {
63
+ checkDecimalSize(money.currency, size);
64
+ return decimalToDriver(money, currency, size);
65
+ }
66
+ function jsonObjectWith(functionName) {
67
+ return (fields) => {
68
+ const parts = fields.map(([key, value]) => sql `${sql.lit(key)}, ${value}`);
69
+ return sql `${sql.raw(functionName)}(${sql.join(parts)})`;
70
+ };
71
+ }
72
+ // MySQL compares a DECIMAL with a string as doubles, so parameters are cast to its widest DECIMAL
73
+ const MYSQL_DECIMAL_INTEGER_DIGITS = 35;
74
+ const MYSQL_DECIMAL_SCALE = 30;
75
+ const DIALECTS = {
76
+ postgres: {
77
+ // jsonb, which has equality, so UNION, DISTINCT and GROUP BY work on money values
78
+ jsonObject: jsonObjectWith('jsonb_build_object'),
79
+ asText: (expression) => sql `cast(${expression} as text)`,
80
+ minorParameter: (minor) => sql `cast(${minor.toString()} as bigint)`,
81
+ decimalParameter: (decimal) => sql `cast(${decimal} as numeric)`,
82
+ hasNumericDecimals: true,
83
+ },
84
+ mysql: {
85
+ jsonObject: jsonObjectWith('json_object'),
86
+ asText: (expression) => sql `cast(${expression} as char)`,
87
+ // a string compared with a BIGINT is compared as a double, which loses digits beyond 2^53
88
+ minorParameter: (minor) => sql `cast(${minor.toString()} as signed)`,
89
+ decimalParameter: (decimal) => {
90
+ const [integerPart, fraction = ''] = decimal.replace('-', '').split('.');
91
+ const fits = integerPart.length <= MYSQL_DECIMAL_INTEGER_DIGITS &&
92
+ fraction.length <= MYSQL_DECIMAL_SCALE;
93
+ if (!fits) {
94
+ throw new RangeError(`${decimal} is beyond MySQL's widest DECIMAL(65,30)`);
95
+ }
96
+ return sql `cast(${decimal} as decimal(65, 30))`;
97
+ },
98
+ hasNumericDecimals: true,
99
+ },
100
+ sqlite: {
101
+ jsonObject: jsonObjectWith('json_object'),
102
+ asText: (expression) => sql `cast(${expression} as text)`,
103
+ // a bound bigint is an INTEGER, which compares as a number even against a column without
104
+ // affinity (a CTE or subquery column), where a string would compare as text
105
+ minorParameter: (minor) => sql `${minor}`,
106
+ decimalParameter: (decimal) => sql `${decimal}`,
107
+ hasNumericDecimals: false,
108
+ },
109
+ };
110
+ /** The read, filter and sum helpers for one SQL dialect. */
111
+ export function moneyHelpers(dialect) {
112
+ const dialectSql = DIALECTS[dialect];
113
+ if (dialectSql === undefined) {
114
+ throw new RangeError(`Unknown dialect "${String(dialect)}"; use postgres, mysql or sqlite`);
115
+ }
116
+ function currencyExpression(eb, currency) {
117
+ if (isFixed(currency)) {
118
+ return sql.lit(currency.fixed);
119
+ }
120
+ return eb.ref(currency);
121
+ }
122
+ function select(storage, eb, amount, currency) {
123
+ const amountRef = eb.ref(amount);
124
+ const object = dialectSql.jsonObject([
125
+ [MARKER, sql.lit(markerFor(storage))],
126
+ ['amount', dialectSql.asText(amountRef)],
127
+ ['currency', currencyExpression(eb, currency)],
128
+ ]);
129
+ // a NULL amount stays NULL rather than becoming a marker without an amount
130
+ return sql `case when ${amountRef} is null then null else ${object} end`;
131
+ }
132
+ function compare(storage, eb, amount, currency, operator, money, size = DEFAULT_DECIMAL_SIZE) {
133
+ if (!COMPARISONS.has(operator)) {
134
+ throw new RangeError(`Unsupported comparison "${operator}"`);
135
+ }
136
+ const isEquality = operator === '=' || operator === '<>';
137
+ if (storage === 'decimal' && !dialectSql.hasNumericDecimals && !isEquality) {
138
+ throw new RangeError('SQLite stores decimals as TEXT, which orders as text; compare minor units instead');
139
+ }
140
+ if (isFixed(currency)) {
141
+ checkCurrency(money, currency.fixed);
142
+ }
143
+ let value;
144
+ if (storage === 'minor') {
145
+ value = dialectSql.minorParameter(minorToDriver(money, undefined));
146
+ }
147
+ else {
148
+ value = dialectSql.decimalParameter(decimalForColumn(money, undefined, size));
149
+ }
150
+ const amountCondition = eb(eb.ref(amount), operator, value);
151
+ if (isFixed(currency)) {
152
+ return amountCondition;
153
+ }
154
+ const currencyRef = eb.ref(currency);
155
+ if (operator === '<>') {
156
+ return eb.or([eb(currencyRef, '<>', money.currency), amountCondition]);
157
+ }
158
+ return eb.and([eb(currencyRef, '=', money.currency), amountCondition]);
159
+ }
160
+ function sum(storage, eb, amount, currency) {
161
+ if (storage === 'decimal' && !dialectSql.hasNumericDecimals) {
162
+ throw new RangeError("SQLite's sum() over TEXT decimals is a REAL; sum minor units instead");
163
+ }
164
+ const amountRef = eb.ref(amount);
165
+ const fields = [
166
+ [MARKER, sql.lit(markerFor(storage))],
167
+ ['amount', dialectSql.asText(sql `sum(${amountRef})`)],
168
+ ];
169
+ if (isFixed(currency)) {
170
+ fields.push(['currency', sql.lit(currency.fixed)]);
171
+ }
172
+ else {
173
+ const currencyRef = eb.ref(currency);
174
+ // only rows with an amount count: a row with a NULL amount adds nothing to the sum
175
+ const currencyOfAmount = sql `case when ${amountRef} is not null then ${currencyRef} end`;
176
+ fields.push(['currency', sql `min(${currencyOfAmount})`]);
177
+ // more than one currency, or an amount without one: the reader throws
178
+ const withoutCurrency = sql `count(case when ${amountRef} is not null and ${currencyRef} is null then 1 end)`;
179
+ const isMixed = sql `${withoutCurrency} > 0 or count(distinct ${currencyOfAmount}) > 1`;
180
+ fields.push(['mixed', sql `case when ${isMixed} then 1 else 0 end`]);
181
+ }
182
+ const object = dialectSql.jsonObject(fields);
183
+ return sql `case when count(${amountRef}) = 0 then null else ${object} end`;
184
+ }
185
+ return {
186
+ selectMoney: ((eb, amount, currency) => select('minor', eb, amount, currency)),
187
+ selectDecimalMoney: ((eb, amount, currency) => select('decimal', eb, amount, currency)),
188
+ compareMoney: (eb, amount, currency, operator, money) => compare('minor', eb, amount, currency, operator, money),
189
+ compareDecimalMoney: (eb, amount, currency, operator, money, size) => compare('decimal', eb, amount, currency, operator, money, size),
190
+ sumMoney: ((eb, amount, currency) => sum('minor', eb, amount, currency)),
191
+ sumDecimalMoney: ((eb, amount, currency) => sum('decimal', eb, amount, currency)),
192
+ };
193
+ }
194
+ // ---------------------------------------------------------------------------------------------
195
+ // The result plugin
196
+ // ---------------------------------------------------------------------------------------------
197
+ const SELECT_KEYS = ['$ducat', 'amount', 'currency'];
198
+ const SUM_KEYS = ['$ducat', 'amount', 'currency', 'mixed'];
199
+ function hasExactly(value, keys) {
200
+ const own = Object.keys(value);
201
+ return own.length === keys.length && keys.every((key) => Object.hasOwn(value, key));
202
+ }
203
+ /**
204
+ * Whether the object is a marker built by this module: exactly the expected keys, with this
205
+ * process's nonce. Anything else, however similar, is ordinary data.
206
+ */
207
+ function isMarker(value) {
208
+ const marker = value[MARKER];
209
+ if (marker !== MINOR_MARKER && marker !== DECIMAL_MARKER) {
210
+ return false;
211
+ }
212
+ return hasExactly(value, SELECT_KEYS) || hasExactly(value, SUM_KEYS);
213
+ }
214
+ /** Money from one marker object, validating every field. */
215
+ function moneyFromMarker(marker) {
216
+ const { amount, currency, mixed } = marker;
217
+ if (mixed === 1 || mixed === true) {
218
+ throw new CurrencyMismatchError('one currency', 'several, or an amount without a currency');
219
+ }
220
+ if (typeof currency !== 'string') {
221
+ throw new TypeError(`A money value needs a currency, got ${String(currency)}`);
222
+ }
223
+ if (marker[MARKER] === MINOR_MARKER) {
224
+ return minorFromDriver(amount, currency);
225
+ }
226
+ const parsed = decimalFromDriver(amount, currency);
227
+ checkIsoScale(parsed);
228
+ return parsed;
229
+ }
230
+ function isPlainObject(value) {
231
+ if (typeof value !== 'object' || value === null) {
232
+ return false;
233
+ }
234
+ const prototype = Object.getPrototypeOf(value);
235
+ return prototype === Object.prototype || prototype === null;
236
+ }
237
+ /** A marker returned as text (SQLite's json_object, MySQL's JSON as a string), or undefined. */
238
+ function markerFromText(text) {
239
+ // cheap test first: only text carrying this process's nonce can be a marker
240
+ if (!text.includes(NONCE)) {
241
+ return undefined;
242
+ }
243
+ let parsed;
244
+ try {
245
+ parsed = JSON.parse(text);
246
+ }
247
+ catch {
248
+ return undefined;
249
+ }
250
+ return isPlainObject(parsed) && isMarker(parsed) ? parsed : undefined;
251
+ }
252
+ /** The value with every money marker in it replaced by Money; other values are left as they are. */
253
+ function convertMarkers(value, depth) {
254
+ if (depth > MAX_DEPTH) {
255
+ return value;
256
+ }
257
+ if (typeof value === 'string') {
258
+ const marker = markerFromText(value);
259
+ return marker === undefined ? value : moneyFromMarker(marker);
260
+ }
261
+ if (Array.isArray(value)) {
262
+ let changed;
263
+ for (let i = 0; i < value.length; i++) {
264
+ const converted = convertMarkers(value[i], depth + 1);
265
+ if (converted !== value[i]) {
266
+ changed ??= value.slice();
267
+ changed[i] = converted;
268
+ }
269
+ }
270
+ return changed ?? value;
271
+ }
272
+ if (!isPlainObject(value)) {
273
+ return value;
274
+ }
275
+ if (isMarker(value)) {
276
+ return moneyFromMarker(value);
277
+ }
278
+ let changed;
279
+ for (const key of Object.keys(value)) {
280
+ const converted = convertMarkers(value[key], depth + 1);
281
+ if (converted !== value[key]) {
282
+ // fromEntries defines own properties, so a "__proto__" key from JSON.parse stays a key
283
+ changed ??= Object.fromEntries(Object.entries(value));
284
+ changed[key] = converted;
285
+ }
286
+ }
287
+ return changed ?? value;
288
+ }
289
+ /**
290
+ * A Kysely plugin that turns the values built by `moneyHelpers` into Money, in every row and in
291
+ * JSON nested inside rows. It keeps no state between queries and doesn't touch the query, so it
292
+ * works with streams, prepared and repeated queries, and other plugins. For nested JSON that
293
+ * SQLite returns as text (`jsonArrayFrom`), put `ParseJSONResultsPlugin` before it.
294
+ */
295
+ export class MoneyResultPlugin {
296
+ /** Leaves the query as it is. */
297
+ transformQuery(args) {
298
+ return args.node;
299
+ }
300
+ /** Converts the money values in every row. */
301
+ async transformResult(args) {
302
+ const rows = convertMarkers(args.result.rows, 0);
303
+ if (rows === args.result.rows) {
304
+ return args.result;
305
+ }
306
+ return { ...args.result, rows };
307
+ }
308
+ }
309
+ //# sourceMappingURL=kysely.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kysely.js","sourceRoot":"","sources":["../src/kysely.ts"],"names":[],"mappings":"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"}
package/dist/money.d.ts CHANGED
@@ -9,6 +9,48 @@ export interface MoneyJSON<C extends string = string> {
9
9
  readonly amount: string;
10
10
  readonly currency: C;
11
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;
12
54
  /** Thrown when two amounts in different currencies are combined. */
13
55
  export declare class CurrencyMismatchError extends TypeError {
14
56
  name: string;
@@ -50,13 +92,14 @@ declare class Money<C extends string = string> {
50
92
  * this * factor, rounded to this scale. `factor` is exact: integer, decimal string ('1.075'),
51
93
  * bigint or ratio().
52
94
  */
53
- multiply(factor: Factor, rounding?: RoundingMode): Money<C>;
54
- /** this / divisor, rounded to this scale */
55
- divide(divisor: Factor, rounding?: RoundingMode): Money<C>;
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>;
56
98
  negate(): Money<C>;
57
99
  abs(): Money<C>;
58
- /** Rounds to the currency's exponent (or `scale`). */
100
+ /** Rounds to the currency's exponent (or `scale`), or to a rounding policy. */
59
101
  round(rounding: RoundingMode, scale?: number): Money<C>;
102
+ round(policy: RoundingPolicy): Money<C>;
60
103
  /** Changes the scale; decreasing it rounds (default 'halfExpand'). */
61
104
  toScale(scale: number, rounding?: RoundingMode): Money<C>;
62
105
  /** -1, 0 or 1; throws on currency mismatch */
@@ -74,6 +117,17 @@ declare class Money<C extends string = string> {
74
117
  min(...others: Money<C>[]): Money<C>;
75
118
  max(...others: Money<C>[]): Money<C>;
76
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;
77
131
  /** Exact decimal string in major units: "12.34" */
78
132
  toDecimal(): string;
79
133
  /** Minor units as a bigint (BIGINT columns) */
@@ -84,6 +138,18 @@ declare class Money<C extends string = string> {
84
138
  export type { Money };
85
139
  /** Whether a value is a Money from this package. */
86
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>;
87
153
  /** Options for `extendMoney`. */
88
154
  export interface ExtendMoneyOptions {
89
155
  /**
@@ -161,16 +227,18 @@ export declare function abs<C extends string>(money: Money<C>): Money<C>;
161
227
  * bigint, or a `ratio()`. Rounding defaults to 'halfExpand' (ties away from zero); pass
162
228
  * 'unnecessary' to throw instead.
163
229
  */
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>;
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>;
169
235
  /**
170
236
  * Rounds to the currency's exponent (or `scale`): `round(money('1.005', 'EUR', {scale: 3}),
171
237
  * 'halfEven')`.
172
238
  */
173
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>;
174
242
  /**
175
243
  * Changes the scale; increasing it is always exact, decreasing it rounds (default 'halfExpand').
176
244
  */
@@ -181,6 +249,12 @@ export declare function compare<C extends string>(money: Money<C>, other: Money<
181
249
  * Same currency and same value (1.0 EUR at scale 1 equals 1.00 EUR). Different currencies: false.
182
250
  */
183
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;
184
258
  /** money < other (same currency; any scale). */
185
259
  export declare const lessThan: <C extends string>(money: Money<C>, other: Money<NoInfer<C>>) => boolean;
186
260
  /** money <= other */
@@ -207,6 +281,16 @@ export declare function clamp<C extends string>(money: Money<C>, lo: Money<NoInf
207
281
  * Exact decimal string in major units: "12.34", "-0.05", "1000" (JPY). For NUMERIC/DECIMAL columns.
208
282
  */
209
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;
210
294
  /** Minor units as a bigint (always safe; use for BIGINT columns). */
211
295
  export declare function toMinor(money: Money): bigint;
212
296
  /** Minor units as a number; throws if not a safe integer. */
@@ -1 +1 @@
1
- {"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../src/money.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../src/money.ts"],"names":[],"mappings":"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"}