Skip to content

Commit 2d8de47

Browse files
committed
feat: type-factory-mismatch-returning-undefineds
Signed-off-by: wadii <[email protected]>
1 parent 4f7814d commit 2d8de47

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed
Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1-
import type { FlagValue } from '@openfeature/web-sdk';
1+
import type { FlagValue, JsonValue } from '@openfeature/server-sdk';
22

33
export type FlagType = 'string' | 'number' | 'object' | 'boolean';
44

5+
const toNumber = (value: unknown): number | undefined => {
6+
if (typeof value === 'number' && Number.isFinite(value)) return value;
7+
const parsed = parseFloat(value as string);
8+
return Number.isFinite(parsed) ? parsed : undefined;
9+
};
10+
511
/**
6-
* Ret a value of the specified type based on the type parameter.
12+
* Return a value of the specified type based on the type parameter.
713
*
814
* @param value - The value to be converted or validated.
915
* @param type - The target type for the conversion.
@@ -13,24 +19,25 @@ export const typeFactory = (
1319
value: string | number | boolean | null | undefined,
1420
type: FlagType,
1521
): FlagValue | undefined => {
16-
if (value === null) return undefined;
22+
if (value === null || value === undefined) return undefined;
1723
switch (type) {
1824
case 'string':
19-
return value !== null && typeof value !== 'undefined' ? `${value}` : value;
25+
return value !== null && typeof value !== 'undefined' ? String(value) : undefined;
2026
case 'number':
21-
return typeof value === 'number' ? value : parseFloat(value as string) || value;
27+
return toNumber(value);
2228
case 'boolean':
23-
return typeof value === 'boolean' ? value : false;
29+
return typeof value === 'boolean' ? value : undefined;
2430
case 'object':
31+
if (typeof value === 'object') return value as JsonValue;
2532
if (typeof value === 'string') {
2633
try {
2734
return JSON.parse(value);
2835
} catch (error) {
29-
return value;
36+
return undefined;
3037
}
3138
}
32-
return value;
39+
return undefined;
3340
default:
34-
return value;
41+
return undefined;
3542
}
3643
};

0 commit comments

Comments
 (0)