@@ -97,17 +97,15 @@ export function unflattenAttributes(
9797 for ( const [ key , value ] of Object . entries ( obj ) ) {
9898 const parts = key . split ( "." ) . reduce (
9999 ( acc , part ) => {
100- if ( part . includes ( "[" ) ) {
101- // Handling nested array indices
100+ if ( part . startsWith ( "[" ) && part . endsWith ( "] ") ) {
101+ // Handle array indices more precisely
102102 const match = part . match ( / ^ \[ ( \d + ) \] $ / ) ;
103- const number = match ?. [ 1 ] ;
104-
105- if ( number ) {
106- acc . push ( parseInt ( number ) ) ;
107- return acc ;
103+ if ( match && match [ 1 ] ) {
104+ acc . push ( parseInt ( match [ 1 ] ) ) ;
105+ } else {
106+ // Remove brackets for non-numeric array keys
107+ acc . push ( part . slice ( 1 , - 1 ) ) ;
108108 }
109-
110- acc . push ( part . replace ( "[" , "" ) . replace ( "]" , "" ) ) ;
111109 } else {
112110 acc . push ( part ) ;
113111 }
@@ -119,22 +117,25 @@ export function unflattenAttributes(
119117 let current : any = result ;
120118 for ( let i = 0 ; i < parts . length - 1 ; i ++ ) {
121119 const part = parts [ i ] ;
120+ const nextPart = parts [ i + 1 ] ;
122121
123- if ( ! part ) {
122+ if ( ! part && part !== 0 ) {
124123 continue ;
125124 }
126125
127- const nextPart = parts [ i + 1 ] ;
128- const isArray = typeof nextPart === "number" ;
129- if ( isArray && ! Array . isArray ( current [ part ] ) ) {
130- current [ part ] = [ ] ;
131- } else if ( ! isArray && current [ part ] === undefined ) {
126+ if ( typeof nextPart === "number" ) {
127+ // Ensure we create an array for numeric indices
128+ current [ part ] = Array . isArray ( current [ part ] ) ? current [ part ] : [ ] ;
129+ } else if ( current [ part ] === undefined ) {
130+ // Create an object for non-numeric paths
132131 current [ part ] = { } ;
133132 }
133+
134134 current = current [ part ] ;
135135 }
136+
136137 const lastPart = parts [ parts . length - 1 ] ;
137- if ( lastPart ) {
138+ if ( lastPart !== undefined ) {
138139 current [ lastPart ] = rehydrateNull ( value ) ;
139140 }
140141 }
0 commit comments