@@ -48,36 +48,34 @@ export const getNextPageParam: GetPreviousPageParamFunction<
4848
4949type GenericObject = { [ key : string ] : unknown } ;
5050
51+ function isGenericObject ( value : unknown ) : value is GenericObject {
52+ return typeof value === "object" && value !== null && ! Array . isArray ( value ) ;
53+ }
54+
5155export const toCamelCase = ( obj : GenericObject ) : GenericObject => {
5256 const newObj : GenericObject = { } ;
5357 for ( const key in obj ) {
5458 if ( Object . hasOwn ( obj , key ) ) {
55- if ( key . includes ( '_' ) ) {
56- const newKey = key . replace ( / _ ( [ a - z ] ) / g, ( g ) => g [ 1 ] . toUpperCase ( ) ) ;
57- newObj [ newKey ] = obj [ key ] ;
59+ const newKey = key . replace ( / _ ( [ a - z ] ) / g, ( g ) => g [ 1 ] . toUpperCase ( ) ) ;
60+ const value = obj [ key ]
61+ if ( isGenericObject ( value ) ) {
62+ newObj [ newKey ] = toCamelCase ( value ) ;
5863 } else {
59- newObj [ key ] = obj [ key ] ;
64+ newObj [ newKey ] = value ;
6065 }
6166 }
6267 }
6368 return newObj ;
6469} ;
6570
71+ const camelToSnake = ( key : string ) : string => key . replace ( / ( [ a - z ] ) ( [ A - Z ] ) / g, "$1_$2" ) . toLowerCase ( ) ;
72+
6673export const toSnakeCase = ( obj : GenericObject ) : GenericObject => {
6774 const newObj : GenericObject = { } ;
68- for ( const key in obj ) {
69- if ( Object . hasOwn ( obj , key ) ) {
70- let newKey = key . match ( / ( [ A - Z ] ) / g)
71- ? key
72- . match ( / ( [ A - Z ] ) / g) !
73- . reduce (
74- ( str , c ) => str . replace ( new RegExp ( c ) , `_${ c . toLowerCase ( ) } ` ) ,
75- key ,
76- )
77- : key ;
78- newKey = newKey . substring ( key . slice ( 0 , 1 ) . match ( / ( [ A - Z ] ) / g) ? 1 : 0 ) ;
79- newObj [ newKey ] = obj [ key ] ;
80- }
75+
76+ for ( const [ key , value ] of Object . entries ( obj ) ) {
77+ const newKey = camelToSnake ( key ) ;
78+ newObj [ newKey ] = isGenericObject ( value ) && value !== null ? toSnakeCase ( value ) : value ;
8179 }
8280 return newObj ;
8381} ;
0 commit comments