UNPKG

money-lib

Version:

TypeScript library to work with money

165 lines (164 loc) 4.62 kB
import { Cents, Money } from "../types"; export declare const symbolChain: unique symbol; export type ConfigV2<CC extends string, CS extends string> = { currencies: Array<{ code: CC; symbol: CS; scale: number; }>; defaultCurrency: CC; defaultRoundingMethod: "bankers" | "up" | "down" | "round"; }; type Tpl<T extends string | number> = `${T}` | ` ${T}` | `${T} ` | ` ${T} `; type CentsTpl = Tpl<"cents">; type ValueTpl = Tpl<number>; export type MoneyV2<CurrencyCode extends string, CurrencySymbol extends string, CodeTpl extends string = Tpl<CurrencyCode>, SymbolTpl extends string = Tpl<CurrencySymbol>> = Money | number | null | ValueTpl | `${ValueTpl}${CentsTpl}` | `${SymbolTpl}${ValueTpl}` | `${SymbolTpl}${ValueTpl}${CentsTpl}` | `${ValueTpl}${Lowercase<CodeTpl>}` | `${ValueTpl}${Lowercase<CodeTpl>}${CentsTpl}` | `${ValueTpl}${CentsTpl}${Lowercase<CodeTpl>}` | `${ValueTpl}${CodeTpl}` | `${ValueTpl}${CodeTpl}${CentsTpl}` | `${ValueTpl}${CentsTpl}${CodeTpl}` | { cents: number; currency: CurrencyCode; } | { decimal: number; currency: CurrencyCode; }; type MC<CC extends string, CS extends string> = MoneyV2<CC, CS> | ChainedMoneyV2<CC, CS>; export type ChainedMoneyV2<CC extends string, CS extends string> = { /** * Compare */ cmp: (m: MC<CC, CS>) => 1 | 0 | -1; /** * Equal */ eq: (m: MC<CC, CS>) => boolean; /** * Greater than */ gt: (m: MC<CC, CS>) => boolean; /** * Greater than or equal */ gte: (m: MC<CC, CS>) => boolean; /** * Less than */ lt: (m: MC<CC, CS>) => boolean; /** * Less than or equal */ lte: (m: MC<CC, CS>) => boolean; /** * Check if a Money is zero */ is0: () => boolean; /** * Check if a Money is positive */ isPos: () => boolean; /** * Check if a Money is negative */ isNeg: () => boolean; /** * Get min from multiple Money inputs */ min: (m1: MC<CC, CS>, ...m: MC<CC, CS>[]) => ChainedMoneyV2<CC, CS>; /** * Get max from multiple Money inputs */ max: (m1: MC<CC, CS>, ...m: MC<CC, CS>[]) => ChainedMoneyV2<CC, CS>; /** * Check if a Money is valid */ validate: () => boolean; /** * Split Money into a base and cents part * @example split(m) -> { base: 1, cents: 50 } */ split: () => { base: number; cents: number; }; /** * Add multiple Money inputs */ add: (m1: MC<CC, CS>, ...m: MC<CC, CS>[]) => ChainedMoneyV2<CC, CS>; /** * Subtract multiple Money inputs */ sub: (m1: MC<CC, CS>, ...m: MC<CC, CS>[]) => ChainedMoneyV2<CC, CS>; /** * Multiply Money by a number */ mul: (multiplier: number, round?: (n: number) => number) => ChainedMoneyV2<CC, CS>; /** * Divide Money by a number */ div: (divider: number, round?: (n: number) => number) => ChainedMoneyV2<CC, CS>; /** * Return the absolute value of a Money */ abs: () => ChainedMoneyV2<CC, CS>; /** * Format Money */ fmt: (ops?: { locale?: string; /** * default: true; if false, 00 cents will be omitted */ cents?: boolean; /** * default: true; if false, 1.50 will be formatted as 1.5 */ trailingZeros?: boolean; /** * default: false; if true, positive numbers will be prefixed with a plus sign */ withPlusSign?: boolean; }) => string; /** * Advanced Money formatter */ fmts: (locale?: string) => { base: string; baseFormatted: string; cents: string; currencySymbol: string; decimalSeparator: string; sign: "+" | "-" | ""; }; /** * Parse any string into Money */ parse: (s: string, currency?: string) => ChainedMoneyV2<CC, CS>; /** * Log a Money object to the console */ debug: (prefix?: string) => ChainedMoneyV2<CC, CS>; /** * Return the Money object */ json: () => Money; /** * Return the Money object as an int */ int: () => Cents; /** * Return the Money object as an int (alias for toInt) */ cents: () => Cents; /** * Return the Money object as a float */ float: () => number; number: () => number; /** * Return the Money object as a string */ centStr: () => string; /** * Return the Money object as a string */ string: () => string; [symbolChain]: true; }; export {};