Dinero.js v2 API Reference
Complete API reference for the Dinero.js v2 compatibility layer.
Overview
The @genkin/dinero-v2 package provides compatibility with Dinero.js v2 API, including generic type support.
Factory Function
dinero(options)
Create a Dinero v2 instance.
Parameters:
options(DineroOptions<number>): Configuration options
Returns: Dinero<number>
Example:
import { dinero } from '@genkin/dinero-v2';
import { USD } from '@genkin/dinero-v2/currencies';
const price = dinero({ amount: 1000, currency: USD, scale: 2 });
Generic Factory
createDinero(options)
Create a generic Dinero factory.
Parameters:
options(CreateDineroOptions<T>): Factory options
Returns: DineroFactory<T>
Example:
import { createDinero } from '@genkin/dinero-v2';
import { bigintCalculator } from '@genkin/core';
const bigintDinero = createDinero({ calculator: bigintCalculator });
const price = bigintDinero({ amount: 1000n, currency: USD_BIGINT, scale: 2n });
Operations
Arithmetic
add(augend, addend)
Add two Dinero instances.
import { dinero, add } from '@genkin/dinero-v2';
import { USD } from '@genkin/dinero-v2/currencies';
const a = dinero({ amount: 1000, currency: USD, scale: 2 });
const b = dinero({ amount: 500, currency: USD, scale: 2 });
const sum = add(a, b);
subtract(minuend, subtrahend)
Subtract one Dinero from another.
import { dinero, subtract } from '@genkin/dinero-v2';
const a = dinero({ amount: 1000, currency: USD, scale: 2 });
const b = dinero({ amount: 300, currency: USD, scale: 2 });
const diff = subtract(a, b);
multiply(dinero, multiplier)
Multiply a Dinero by a number.
import { dinero, multiply } from '@genkin/dinero-v2';
const price = dinero({ amount: 1000, currency: USD, scale: 2 });
const doubled = multiply(price, 2);
allocate(dinero, ratios)
Distribute across ratios.
import { dinero, allocate } from '@genkin/dinero-v2';
const total = dinero({ amount: 10000, currency: USD, scale: 2 });
const parts = allocate(total, [25, 75]);
Comparison
compare(left, right)
Compare two Dinero instances.
Returns: -1 | 0 | 1
import { dinero, compare } from '@genkin/dinero-v2';
const a = dinero({ amount: 500, currency: USD, scale: 2 });
const b = dinero({ amount: 1000, currency: USD, scale: 2 });
console.log(compare(a, b)); // -1
equal(left, right)
Check equality.
import { dinero, equal } from '@genkin/dinero-v2';
const a = dinero({ amount: 1000, currency: USD, scale: 2 });
const b = dinero({ amount: 1000, currency: USD, scale: 2 });
console.log(equal(a, b)); // true
lessThan(left, right)
Check if less than.
import { dinero, lessThan } from '@genkin/dinero-v2';
const a = dinero({ amount: 500, currency: USD, scale: 2 });
const b = dinero({ amount: 1000, currency: USD, scale: 2 });
console.log(lessThan(a, b)); // true
greaterThan(left, right)
Check if greater than.
import { dinero, greaterThan } from '@genkin/dinero-v2';
const a = dinero({ amount: 1000, currency: USD, scale: 2 });
const b = dinero({ amount: 500, currency: USD, scale: 2 });
console.log(greaterThan(a, b)); // true
isZero(dinero)
Check if zero.
import { dinero, isZero } from '@genkin/dinero-v2';
const zero = dinero({ amount: 0, currency: USD, scale: 2 });
console.log(isZero(zero)); // true
isPositive(dinero)
Check if positive.
import { dinero, isPositive } from '@genkin/dinero-v2';
const positive = dinero({ amount: 1000, currency: USD, scale: 2 });
console.log(isPositive(positive)); // true
isNegative(dinero)
Check if negative.
import { dinero, isNegative } from '@genkin/dinero-v2';
const negative = dinero({ amount: -1000, currency: USD, scale: 2 });
console.log(isNegative(negative)); // true
minimum(dineros)
Find minimum.
import { dinero, minimum } from '@genkin/dinero-v2';
const amounts = [
dinero({ amount: 1000, currency: USD, scale: 2 }),
dinero({ amount: 500, currency: USD, scale: 2 })
];
const min = minimum(amounts);
maximum(dineros)
Find maximum.
import { dinero, maximum } from '@genkin/dinero-v2';
const amounts = [
dinero({ amount: 1000, currency: USD, scale: 2 }),
dinero({ amount: 500, currency: USD, scale: 2 })
];
const max = maximum(amounts);
Conversion
convert(dinero, currency, rates)
Convert to another currency.
import { dinero, convert } from '@genkin/dinero-v2';
import { USD, EUR } from '@genkin/dinero-v2/currencies';
const usd = dinero({ amount: 10000, currency: USD, scale: 2 });
const eur = convert(usd, EUR, { EUR: { amount: 89, scale: 2 } });
normalizeScale(dineros)
Normalize scale across instances.
import { dinero, normalizeScale } from '@genkin/dinero-v2';
const amounts = [
dinero({ amount: 100, currency: USD, scale: 1 }),
dinero({ amount: 1000, currency: USD, scale: 2 })
];
const normalized = normalizeScale(amounts);
transformScale(dinero, newScale)
Change the scale.
import { dinero, transformScale } from '@genkin/dinero-v2';
const amount = dinero({ amount: 1000, currency: USD, scale: 2 });
const highScale = transformScale(amount, 4);
trimScale(dinero)
Remove trailing zeros from scale.
import { dinero, trimScale } from '@genkin/dinero-v2';
const amount = dinero({ amount: 10000, currency: USD, scale: 4 });
const trimmed = trimScale(amount); // scale: 2
Inspection
toSnapshot(dinero)
Get snapshot of Dinero instance.
import { dinero, toSnapshot } from '@genkin/dinero-v2';
const price = dinero({ amount: 1000, currency: USD, scale: 2 });
const snapshot = toSnapshot(price);
// { amount: 1000, currency: USD, scale: 2 }
toDecimal(dinero)
Get decimal representation.
import { dinero, toDecimal } from '@genkin/dinero-v2';
const price = dinero({ amount: 1000, currency: USD, scale: 2 });
console.log(toDecimal(price)); // "10"
toUnits(dinero)
Get array of units.
import { dinero, toUnits } from '@genkin/dinero-v2';
const price = dinero({ amount: 1050, currency: USD, scale: 2 });
console.log(toUnits(price)); // [10, 50]
Predicates
haveSameCurrency(dineros)
Check if all have same currency.
import { dinero, haveSameCurrency } from '@genkin/dinero-v2';
const amounts = [
dinero({ amount: 1000, currency: USD, scale: 2 }),
dinero({ amount: 500, currency: USD, scale: 2 })
];
console.log(haveSameCurrency(amounts)); // true
haveSameAmount(dineros)
Check if all have same amount.
import { dinero, haveSameAmount } from '@genkin/dinero-v2';
const amounts = [
dinero({ amount: 1000, currency: USD, scale: 2 }),
dinero({ amount: 1000, currency: EUR, scale: 2 })
];
console.log(haveSameAmount(amounts)); // true
hasSubUnits(dinero)
Check if has fractional parts.
import { dinero, hasSubUnits } from '@genkin/dinero-v2';
const withCents = dinero({ amount: 1050, currency: USD, scale: 2 });
console.log(hasSubUnits(withCents)); // true
Types
Dinero<TAmount>
Generic Dinero instance type.
interface Dinero<TAmount> {
readonly amount: TAmount;
readonly currency: Currency<TAmount>;
readonly scale: TAmount;
}
DineroOptions<TAmount>
Options for creating Dinero instances.
interface DineroOptions<TAmount> {
amount: TAmount;
currency: Currency<TAmount>;
scale: TAmount;
}
Currency<TAmount>
Currency type for Dinero v2.
interface Currency<TAmount> {
code: string;
base: TAmount;
exponent: TAmount;
}