@arki/money 0.0.0-stage → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +238 -2
- package/dist/bag.d.ts +48 -0
- package/dist/bag.d.ts.map +1 -0
- package/dist/bag.js +110 -0
- package/dist/bag.js.map +1 -0
- package/dist/currency.d.ts +64 -0
- package/dist/currency.d.ts.map +1 -0
- package/dist/currency.js +148 -0
- package/dist/currency.js.map +1 -0
- package/dist/data/iso4217.d.ts +9 -0
- package/dist/data/iso4217.d.ts.map +1 -0
- package/dist/data/iso4217.js +11 -0
- package/dist/data/iso4217.js.map +1 -0
- package/dist/drizzle/config.d.ts +27 -0
- package/dist/drizzle/config.d.ts.map +1 -0
- package/dist/drizzle/config.js +16 -0
- package/dist/drizzle/config.js.map +1 -0
- package/dist/drizzle/mysql.d.ts +36 -0
- package/dist/drizzle/mysql.d.ts.map +1 -0
- package/dist/drizzle/mysql.js +45 -0
- package/dist/drizzle/mysql.js.map +1 -0
- package/dist/drizzle/pg.d.ts +38 -0
- package/dist/drizzle/pg.d.ts.map +1 -0
- package/dist/drizzle/pg.js +49 -0
- package/dist/drizzle/pg.js.map +1 -0
- package/dist/drizzle/sqlite.d.ts +38 -0
- package/dist/drizzle/sqlite.d.ts.map +1 -0
- package/dist/drizzle/sqlite.js +45 -0
- package/dist/drizzle/sqlite.js.map +1 -0
- package/dist/drizzle.d.ts +56 -0
- package/dist/drizzle.d.ts.map +1 -0
- package/dist/drizzle.js +77 -0
- package/dist/drizzle.js.map +1 -0
- package/dist/errors.d.ts +32 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +42 -0
- package/dist/errors.js.map +1 -0
- package/dist/exact.d.ts +20 -0
- package/dist/exact.d.ts.map +1 -0
- package/dist/exact.js +23 -0
- package/dist/exact.js.map +1 -0
- package/dist/exchange.d.ts +84 -0
- package/dist/exchange.d.ts.map +1 -0
- package/dist/exchange.js +215 -0
- package/dist/exchange.js.map +1 -0
- package/dist/format.d.ts +41 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +122 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/columns.d.ts +25 -0
- package/dist/internal/columns.d.ts.map +1 -0
- package/dist/internal/columns.js +47 -0
- package/dist/internal/columns.js.map +1 -0
- package/dist/internal/units.d.ts +66 -0
- package/dist/internal/units.d.ts.map +1 -0
- package/dist/internal/units.js +205 -0
- package/dist/internal/units.js.map +1 -0
- package/dist/money.d.ts +180 -0
- package/dist/money.d.ts.map +1 -0
- package/dist/money.js +577 -0
- package/dist/money.js.map +1 -0
- package/dist/parse.d.ts +53 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +222 -0
- package/dist/parse.js.map +1 -0
- package/dist/provider.d.ts +22 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +56 -0
- package/dist/provider.js.map +1 -0
- package/dist/rational.d.ts +67 -0
- package/dist/rational.d.ts.map +1 -0
- package/dist/rational.js +169 -0
- package/dist/rational.js.map +1 -0
- package/dist/stripe.d.ts +37 -0
- package/dist/stripe.d.ts.map +1 -0
- package/dist/stripe.js +75 -0
- package/dist/stripe.js.map +1 -0
- package/dist/zod.d.ts +54 -0
- package/dist/zod.d.ts.map +1 -0
- package/dist/zod.js +96 -0
- package/dist/zod.js.map +1 -0
- package/package.json +137 -4
- package/src/bag.ts +128 -0
- package/src/currency.ts +174 -0
- package/src/data/iso4217.ts +13 -0
- package/src/drizzle/config.ts +39 -0
- package/src/drizzle/mysql.ts +61 -0
- package/src/drizzle/pg.ts +64 -0
- package/src/drizzle/sqlite.ts +61 -0
- package/src/errors.ts +61 -0
- package/src/exact.ts +29 -0
- package/src/exchange.ts +280 -0
- package/src/format.ts +148 -0
- package/src/index.ts +16 -0
- package/src/internal/columns.ts +74 -0
- package/src/internal/units.ts +223 -0
- package/src/money.ts +692 -0
- package/src/parse.ts +278 -0
- package/src/provider.ts +67 -0
- package/src/rational.ts +214 -0
- package/src/stripe.ts +84 -0
- package/src/zod.ts +123 -0
package/dist/money.d.ts
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact money. A `Money` is a whole number of units, a scale (how many of the
|
|
3
|
+
* digits are decimals) and a currency: `19.99 EUR` is `1999` units at scale 2.
|
|
4
|
+
*
|
|
5
|
+
* Rules that protect you from silent loss:
|
|
6
|
+
* - Nothing rounds unless you pass a rounding mode. An operation whose exact
|
|
7
|
+
* result does not fit throws `RoundingNecessaryError`.
|
|
8
|
+
* - Mixing currencies throws `CurrencyMismatchError`. With literal codes the
|
|
9
|
+
* compiler already rejects it: `Money<'EUR'>` cannot be added to `Money<'USD'>`.
|
|
10
|
+
* - `allocate` and `split` return parts that add back to the whole exactly.
|
|
11
|
+
* - A `Money` never becomes a float by accident: `+price` throws.
|
|
12
|
+
*
|
|
13
|
+
* Speed: units are a plain `number` while they are a safe integer (up to 90
|
|
14
|
+
* trillion in a two-decimal currency) and a `bigint` only beyond that. Values
|
|
15
|
+
* are immutable through `readonly` and a private constructor; they are not
|
|
16
|
+
* frozen, because `Object.freeze` costs more per operation than the arithmetic.
|
|
17
|
+
*/
|
|
18
|
+
import type { RoundingMode } from '@arki/math/rounding';
|
|
19
|
+
import type { Currency, CurrencyLike } from './currency.js';
|
|
20
|
+
import type { Units } from './internal/units.js';
|
|
21
|
+
export type { Units } from './internal/units.js';
|
|
22
|
+
/** An exact decimal such as `@arki/math`'s `Decimal`: `coefficient × 10^-scale`. */
|
|
23
|
+
export type DecimalLike = {
|
|
24
|
+
readonly coefficient: bigint;
|
|
25
|
+
readonly scale: number;
|
|
26
|
+
};
|
|
27
|
+
/** An exact fraction such as `@arki/math`'s `Rational`. */
|
|
28
|
+
export type RationalLike = {
|
|
29
|
+
readonly numerator: bigint;
|
|
30
|
+
readonly denominator: bigint;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* An amount in major units: `'19.99'`, `19.99`, `20n`, a `Decimal` or a `Rational`.
|
|
34
|
+
* A `number` is read as written (`19.99` is exactly 19.99); earlier float
|
|
35
|
+
* arithmetic cannot be undone, so prefer strings for computed values.
|
|
36
|
+
*/
|
|
37
|
+
export type Amount = number | string | bigint | DecimalLike | RationalLike;
|
|
38
|
+
/** A multiplier or divisor: an `Amount` or a `Factor` prepared once with `factor()`. */
|
|
39
|
+
export type FactorInput = Amount | Factor;
|
|
40
|
+
export type MoneyOptions = {
|
|
41
|
+
/** How to drop digits that do not fit. Without it, extra digits throw `RoundingNecessaryError`. */
|
|
42
|
+
rounding?: RoundingMode;
|
|
43
|
+
/** Number of decimals to keep, 0–100. Defaults to the currency's (2 for EUR). Use 4 for unit prices. */
|
|
44
|
+
scale?: number;
|
|
45
|
+
};
|
|
46
|
+
/** Who gets the leftover units when an amount does not divide evenly. */
|
|
47
|
+
export type RemainderPolicy = 'largest' | 'first' | 'last';
|
|
48
|
+
export type AllocateOptions = {
|
|
49
|
+
/**
|
|
50
|
+
* `'largest'` (default): one unit each to the parts whose exact share lost
|
|
51
|
+
* the most, earlier parts first on ties. `'first'` / `'last'`: one unit each
|
|
52
|
+
* from the start / end. Parts with a zero ratio never receive a unit.
|
|
53
|
+
*/
|
|
54
|
+
remainder?: RemainderPolicy;
|
|
55
|
+
};
|
|
56
|
+
export type MoneyJSON = {
|
|
57
|
+
amount: string;
|
|
58
|
+
currency: string;
|
|
59
|
+
};
|
|
60
|
+
/** A multiplier read once, for loops: `const vat = factor('0.19')`. */
|
|
61
|
+
export declare class Factor {
|
|
62
|
+
readonly numerator: Units;
|
|
63
|
+
/** Always positive. */
|
|
64
|
+
readonly denominator: Units;
|
|
65
|
+
private constructor();
|
|
66
|
+
}
|
|
67
|
+
/** Prepares a multiplier once so `times` skips parsing: `price.times(vat, 'halfEven')`. */
|
|
68
|
+
export declare function factor(value: Amount): Factor;
|
|
69
|
+
/** An immutable amount of money. Create one with `money()` or the `Money.*` factories. */
|
|
70
|
+
export declare class Money<C extends string = string> {
|
|
71
|
+
/** The amount as a whole number of `10^-scale` units, in canonical form: a `number` exactly when it is a safe integer. */
|
|
72
|
+
readonly units: Units;
|
|
73
|
+
/** Number of decimals the amount carries. Equals `currency.scale` unless chosen otherwise. */
|
|
74
|
+
readonly scale: number;
|
|
75
|
+
readonly currency: Currency<C>;
|
|
76
|
+
private constructor();
|
|
77
|
+
/**
|
|
78
|
+
* `Money.of('19.99', 'EUR')`. Extra digits throw `RoundingNecessaryError`
|
|
79
|
+
* unless `options.rounding` is given: `Money.of('1.005', 'EUR', { rounding: 'halfEven' })` → `1.00 EUR`.
|
|
80
|
+
* A `Money` input must be in the same currency; this also narrows `Money<string>` to `Money<'EUR'>`.
|
|
81
|
+
*/
|
|
82
|
+
static of<const C extends string>(amount: Amount | Money, currency: CurrencyLike<C>, options?: MoneyOptions): Money<C>;
|
|
83
|
+
/**
|
|
84
|
+
* From whole minor units: `Money.fromMinor(1999, 'EUR')` → `19.99 EUR`. Accepts a
|
|
85
|
+
* safe-integer `number`, a `bigint`, or an integer string (as databases return
|
|
86
|
+
* `BIGINT`). `scale` says how many decimals the units carry; it defaults to the currency's.
|
|
87
|
+
*/
|
|
88
|
+
static fromMinor<const C extends string>(units: number | bigint | string, currency: CurrencyLike<C>, scale?: number): Money<C>;
|
|
89
|
+
/** Zero in this currency. */
|
|
90
|
+
static zero<const C extends string>(currency: CurrencyLike<C>, scale?: number): Money<C>;
|
|
91
|
+
/**
|
|
92
|
+
* Reads what `toString()` writes: `'19.99 EUR'`, also `'EUR 19.99'`. Keeps the
|
|
93
|
+
* text's decimals when there are more than the currency's (`'1.2345 EUR'`
|
|
94
|
+
* stays at scale 4). Pass `currencies` to resolve custom codes.
|
|
95
|
+
*/
|
|
96
|
+
static parse(text: string, currencies?: readonly Currency[]): Money;
|
|
97
|
+
/** Reads `{ amount: '19.99', currency: 'EUR' }`, keeping the amount's decimals. Validates the shape. */
|
|
98
|
+
static fromJSON(value: unknown, currencies?: readonly Currency[]): Money;
|
|
99
|
+
/** Comparator for sorting: `prices.sort(Money.compare)`. Throws on mixed currencies. */
|
|
100
|
+
static compare(this: void, a: Money, b: Money): -1 | 0 | 1;
|
|
101
|
+
/** Exact sum. Different scales are aligned upward, never rounded. */
|
|
102
|
+
plus(other: Money<C>): Money<C>;
|
|
103
|
+
/** Exact difference. Different scales are aligned upward, never rounded. */
|
|
104
|
+
minus(other: Money<C>): Money<C>;
|
|
105
|
+
/**
|
|
106
|
+
* Multiplies and keeps this scale. `money('10.00', 'EUR').times(3)` → `30.00`.
|
|
107
|
+
* `times('1.19')` on `9.99` is `11.8881`, which does not fit two decimals, so
|
|
108
|
+
* it throws unless you pass a rounding mode: `times('1.19', 'halfEven')` → `11.89`.
|
|
109
|
+
*/
|
|
110
|
+
times(multiplier: FactorInput, rounding?: RoundingMode): Money<C>;
|
|
111
|
+
/** Divides and keeps this scale. Inexact results need a rounding mode. Zero throws `DivisionByZeroError`. */
|
|
112
|
+
dividedBy(divisor: FactorInput, rounding?: RoundingMode): Money<C>;
|
|
113
|
+
/** `money(200, 'EUR').percentage(15)` → `30.00 EUR`. Same as `times(percent / 100)`. */
|
|
114
|
+
percentage(percent: FactorInput, rounding?: RoundingMode): Money<C>;
|
|
115
|
+
negated(): Money<C>;
|
|
116
|
+
abs(): Money<C>;
|
|
117
|
+
/** Changes the number of decimals. Dropping non-zero digits needs a rounding mode. */
|
|
118
|
+
toScale(scale: number, rounding?: RoundingMode): Money<C>;
|
|
119
|
+
/**
|
|
120
|
+
* Rounds to a multiple of `step`, for cash: `chf.roundToStep('0.05', 'halfUp')`.
|
|
121
|
+
* Cash steps are set by each country's law (CHF 0.05, SEK 1, EUR 0.05 in some
|
|
122
|
+
* euro countries), so the package does not guess them. The step must fit this scale.
|
|
123
|
+
*/
|
|
124
|
+
roundToStep(step: FactorInput, rounding?: RoundingMode): Money<C>;
|
|
125
|
+
/**
|
|
126
|
+
* Splits by ratios into parts that add back to this amount exactly:
|
|
127
|
+
* `money(100, 'EUR').allocate([1, 1, 1])` → `[33.34, 33.33, 33.33]`.
|
|
128
|
+
* Ratios are non-negative numbers, bigints or decimal strings, not all zero.
|
|
129
|
+
* A negative amount is split like a positive one and each part re-signed.
|
|
130
|
+
*/
|
|
131
|
+
allocate(ratios: readonly (number | bigint | string)[], options?: AllocateOptions): Money<C>[];
|
|
132
|
+
/** Splits into `parts` equal shares that differ by at most one unit: `money(10, 'EUR').split(3)` → `[3.34, 3.33, 3.33]`. */
|
|
133
|
+
split(parts: number, options?: AllocateOptions): Money<C>[];
|
|
134
|
+
/** Compares values across scales (`1.5` equals `1.50`). Throws on mixed currencies. */
|
|
135
|
+
compareTo(other: Money<C>): -1 | 0 | 1;
|
|
136
|
+
eq(other: Money<C>): boolean;
|
|
137
|
+
lt(other: Money<C>): boolean;
|
|
138
|
+
lte(other: Money<C>): boolean;
|
|
139
|
+
gt(other: Money<C>): boolean;
|
|
140
|
+
gte(other: Money<C>): boolean;
|
|
141
|
+
isZero(): boolean;
|
|
142
|
+
isPositive(): boolean;
|
|
143
|
+
isNegative(): boolean;
|
|
144
|
+
sign(): -1 | 0 | 1;
|
|
145
|
+
/** Same currency. Never throws. */
|
|
146
|
+
hasSameCurrency(other: Money): boolean;
|
|
147
|
+
/** Units at the currency's scale: `19.99 EUR` → `1999`. Throws `RoundingNecessaryError` if sub-cent digits are not zero. */
|
|
148
|
+
toMinorUnits(): Units;
|
|
149
|
+
/** `toMinorUnits()` as a `bigint`. */
|
|
150
|
+
toMinorBigInt(): bigint;
|
|
151
|
+
/** `toMinorUnits()` as a `number`, as payment APIs want. Throws `NumericRangeError` past 2^53. */
|
|
152
|
+
toMinorNumber(): number;
|
|
153
|
+
/** Plain decimal text with exactly `scale` decimals: `'19.99'`, `'-0.50'`, `'1000'` for JPY. For databases. */
|
|
154
|
+
toDecimalString(): string;
|
|
155
|
+
/** The nearest double. For charts and display math only, never for more money math. */
|
|
156
|
+
toNumber(): number;
|
|
157
|
+
/** `'19.99 EUR'`. Locale-free; `Money.parse` reads it back. */
|
|
158
|
+
toString(): string;
|
|
159
|
+
/** `{ amount: '19.99', currency: 'EUR' }`. The amount is a string, so no digit is ever lost. */
|
|
160
|
+
toJSON(): MoneyJSON;
|
|
161
|
+
/** Throws. A `Money` never silently becomes a float. */
|
|
162
|
+
valueOf(): never;
|
|
163
|
+
[Symbol.toPrimitive](hint: string): string;
|
|
164
|
+
get [Symbol.toStringTag](): string;
|
|
165
|
+
}
|
|
166
|
+
/** Shorthand for `Money.of`: `money('19.99', 'EUR')`. */
|
|
167
|
+
export declare function money<const C extends string>(amount: Amount | Money, currency: CurrencyLike<C>, options?: MoneyOptions): Money<C>;
|
|
168
|
+
export declare function isMoney(value: unknown): value is Money;
|
|
169
|
+
/**
|
|
170
|
+
* Exact total of one currency, with one allocation for the result. An empty
|
|
171
|
+
* list needs `currency` and returns zero; otherwise it throws `InvalidArgumentError`.
|
|
172
|
+
*/
|
|
173
|
+
export declare function sum<const C extends string>(items: Iterable<Money<C>>, currency?: CurrencyLike<C>): Money<C>;
|
|
174
|
+
/** Mean of one currency. Inexact results need a rounding mode. An empty list throws `EmptyDataError`. */
|
|
175
|
+
export declare function average<const C extends string>(items: Iterable<Money<C>>, rounding?: RoundingMode): Money<C>;
|
|
176
|
+
/** The smallest value; ties return the first. */
|
|
177
|
+
export declare function min<const C extends string>(first: Money<C>, ...rest: Money<C>[]): Money<C>;
|
|
178
|
+
/** The largest value; ties return the first. */
|
|
179
|
+
export declare function max<const C extends string>(first: Money<C>, ...rest: Money<C>[]): Money<C>;
|
|
180
|
+
//# 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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"}
|