--- a/web/src/format.ts 2026-03-02 09:14:03.000000000 +0000 +++ b/web/src/format.ts 2026-03-02 10:41:55.000000000 +0000 @@ -1,16 +1,18 @@ export interface Money { amount: number; currency: string; + locale?: string; } const GROUPING = 3; +const DEFAULT_LOCALE = "en-GB"; export function formatMinor(minor: number, currency: string): string { const sign = minor < 0 ? "-" : ""; const abs = Math.abs(minor); const whole = Math.trunc(abs / 100); const cents = abs % 100; return sign + group(whole) + "." + pad(cents) + " " + currency; } function pad(value: number): string { @@ -26,12 +28,16 @@ count += 1; if (count % GROUPING === 0 && digits.length > 0) { out.unshift(","); } } return out.join(""); } export function parseMinor(text: string): number { const cleaned = text.replace(/[^0-9-]/g, ""); - return Number.parseInt(cleaned, 10); + const parsed = Number.parseInt(cleaned, 10); + if (Number.isNaN(parsed)) { + throw new RangeError("parseMinor: no digits in " + JSON.stringify(text)); + } + return parsed; }