Chore: Small todo about coerce boolean (#1789)

* fix: coerce boolean types negative number is false

* strict coerce
This commit is contained in:
Alex Christoffer Rasmussen
2025-09-24 19:52:55 +02:00
parent 343697dc93
commit 971c6c66f0
2 changed files with 23 additions and 10 deletions
@@ -145,16 +145,25 @@ describe('coerce unknown value to a boolean', () => {
expect(coerceBoolean('')).toStrictEqual(false);
});
test('true numbers', () => {
expect(coerceBoolean(1)).toStrictEqual(true);
expect(coerceBoolean(2)).toStrictEqual(true);
expect(coerceBoolean(100000)).toStrictEqual(true);
test('invalid strings', () => {
expect(() => coerceBoolean('bla')).toThrowError('Invalid value received');
expect(() => coerceBoolean(' ')).toThrowError('Invalid value received');
});
test.todo('false numbers', () => {
test('true numbers', () => {
expect(coerceBoolean(1)).toStrictEqual(true);
});
test('false numbers', () => {
expect(coerceBoolean(0)).toStrictEqual(false);
expect(coerceBoolean(-1)).toStrictEqual(false);
expect(coerceBoolean(-10000)).toStrictEqual(false);
});
test('invalid numbers', () => {
expect(() => coerceBoolean(0.5)).toThrowError('Invalid value received');
expect(() => coerceBoolean(-1)).toThrowError('Invalid value received');
expect(() => coerceBoolean(2)).toThrowError('Invalid value received');
expect(() => coerceBoolean(NaN)).toThrowError('Invalid value received');
expect(() => coerceBoolean(Infinity)).toThrowError('Invalid value received');
});
test('booleans', () => {
+7 -3
View File
@@ -33,8 +33,8 @@ export function coerceString(value: unknown): string {
* @throws {Error} Throws an error if the value is null or undefined.
*/
export function coerceBoolean(value: unknown): boolean {
if (value === undefined || typeof value === 'object') {
throw new Error('Invalid value received');
if (typeof value === 'boolean') {
return value;
}
if (typeof value === 'string') {
const lowerCaseValue = value.toLocaleLowerCase();
@@ -52,7 +52,11 @@ export function coerceBoolean(value: unknown): boolean {
throw new Error('Invalid value received');
}
}
return Boolean(value);
if (typeof value === 'number') {
if (value === 0) return false;
if (value === 1) return true;
}
throw new Error('Invalid value received');
}
/**