@@ -21,6 +21,24 @@ interface QueryResult {
2121 }
2222}
2323
24+ // Convert DuckDB/Arrow values to JSON-serializable types
25+ const serializeDuckDBValue = ( value : any ) : any => {
26+ if ( value === null || value === undefined ) return value
27+ if ( typeof value === 'bigint' ) return Number ( value )
28+ if ( value instanceof Date ) return value . toISOString ( )
29+ if ( value instanceof Uint8Array ) return Array . from ( value )
30+ if ( Array . isArray ( value ) ) return value . map ( serializeDuckDBValue )
31+ if ( typeof value === 'object' && value !== null ) {
32+ // Handle plain objects (structs, maps)
33+ const result : Record < string , any > = { }
34+ for ( const key of Object . keys ( value ) ) {
35+ result [ key ] = serializeDuckDBValue ( value [ key ] )
36+ }
37+ return result
38+ }
39+ return value
40+ }
41+
2442export const useDuckDBStore = defineStore ( 'duckdb' , ( ) => {
2543 // DuckDB instances
2644 const db = ref < AsyncDuckDB | null > ( null )
@@ -235,7 +253,7 @@ export const useDuckDBStore = defineStore('duckdb', () => {
235253 const rows = result . toArray ( ) . map ( row => {
236254 const obj : Record < string , any > = { }
237255 result . schema . fields . forEach ( ( field ) => {
238- obj [ field . name ] = row [ field . name ]
256+ obj [ field . name ] = serializeDuckDBValue ( row [ field . name ] )
239257 } )
240258 return obj
241259 } )
@@ -299,7 +317,7 @@ export const useDuckDBStore = defineStore('duckdb', () => {
299317 const rows = result . toArray ( ) . map ( row => {
300318 const obj : Record < string , any > = { }
301319 columns . forEach ( col => {
302- obj [ col ] = row [ col ]
320+ obj [ col ] = serializeDuckDBValue ( row [ col ] )
303321 } )
304322 return obj
305323 } )
0 commit comments