1- import type { FlagValue } from '@openfeature/web -sdk' ;
1+ import type { FlagValue , JsonValue } from '@openfeature/server -sdk' ;
22
33export 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