From 04fbca939f95b0e545fe2986c17567fedf1f3756 Mon Sep 17 00:00:00 2001 From: openhands Date: Fri, 6 Mar 2026 05:51:50 +0000 Subject: [PATCH] fix: \`commaNumber\` silently returns '0' for NaN and falsy values (#427) Replace truthiness guard with Number.isFinite() so NaN and Infinity are explicitly rejected rather than silently masked. Zero is now handled by toLocaleString, which returns '0' correctly. Add test cases for NaN and Infinity. --- kraiken-lib/src/format.ts | 3 ++- kraiken-lib/src/tests/format.test.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/kraiken-lib/src/format.ts b/kraiken-lib/src/format.ts index 06d906d..03e7c5e 100644 --- a/kraiken-lib/src/format.ts +++ b/kraiken-lib/src/format.ts @@ -22,7 +22,8 @@ export function compactNumber(value: number): string { /** Format number with commas (e.g. "1,234,567") */ export function commaNumber(value: number): string { - return value ? value.toLocaleString('en-US') : '0'; + if (!Number.isFinite(value)) return '0'; + return value.toLocaleString('en-US'); } /** Format a token amount with comma grouping and 2 decimal places (e.g. "1,234.56") */ diff --git a/kraiken-lib/src/tests/format.test.ts b/kraiken-lib/src/tests/format.test.ts index 4a1e621..3c8df14 100644 --- a/kraiken-lib/src/tests/format.test.ts +++ b/kraiken-lib/src/tests/format.test.ts @@ -95,10 +95,18 @@ describe('compactNumber', () => { }); describe('commaNumber', () => { - test('returns "0" for falsy input', () => { + test('returns "0" for zero', () => { expect(commaNumber(0)).toBe('0'); }); + test('returns "0" for NaN', () => { + expect(commaNumber(NaN)).toBe('0'); + }); + + test('returns "0" for Infinity', () => { + expect(commaNumber(Infinity)).toBe('0'); + }); + test('formats thousands with commas', () => { expect(commaNumber(1234)).toBe('1,234'); });