@@ -47,20 +47,36 @@ function saveToIndexedDB(data: Uint8Array): void {
4747 req . onupgradeneeded = ( ) => req . result . createObjectStore ( IDB_STORE ) ;
4848 req . onsuccess = ( ) => {
4949 const tx = req . result . transaction ( IDB_STORE , "readwrite" ) ;
50- tx . objectStore ( IDB_STORE ) . put ( data , IDB_KEY ) ;
50+ const putReq = tx . objectStore ( IDB_STORE ) . put ( data , IDB_KEY ) ;
51+ putReq . onerror = ( ) => console . error ( "[sqlite-bridge] IndexedDB put failed:" , putReq . error ) ;
52+ tx . onerror = ( ) => console . error ( "[sqlite-bridge] IndexedDB transaction failed:" , tx . error ) ;
5153 } ;
54+ req . onerror = ( ) => console . error ( "[sqlite-bridge] IndexedDB open failed:" , req . error ) ;
5255}
5356
5457let saveTimer : ReturnType < typeof setTimeout > | null = null ;
58+
59+ function flushSave ( ) : void {
60+ if ( ! db || ! saveTimer ) return ;
61+ clearTimeout ( saveTimer ) ;
62+ saveTimer = null ;
63+ const data = db . export ( ) ;
64+ saveToIndexedDB ( new Uint8Array ( data ) ) ;
65+ }
66+
5567function debouncedSave ( ) : void {
5668 if ( ! db ) return ;
5769 if ( saveTimer ) clearTimeout ( saveTimer ) ;
5870 saveTimer = setTimeout ( ( ) => {
71+ saveTimer = null ;
5972 const data = db ! . export ( ) ;
6073 saveToIndexedDB ( new Uint8Array ( data ) ) ;
6174 } , 500 ) ;
6275}
6376
77+ // Flush pending saves before the service worker terminates
78+ globalThis . addEventListener ( "unload" , flushSave ) ;
79+
6480// ---------------------------------------------------------------------------
6581// Parameter binding
6682// ---------------------------------------------------------------------------
@@ -117,15 +133,18 @@ const bridge = {
117133 if ( ! db ) throw new Error ( "Database not initialized — call init_database() first" ) ;
118134
119135 const stmt = db . prepare ( sql ) ;
120- stmt . bind ( bindParams ( params ) ) ;
121-
122- const rows : Record < string , unknown > [ ] = [ ] ;
123- while ( stmt . step ( ) ) {
124- const row = stmt . getAsObject ( ) ;
125- rows . push ( row as Record < string , unknown > ) ;
136+ try {
137+ stmt . bind ( bindParams ( params ) ) ;
138+
139+ const rows : Record < string , unknown > [ ] = [ ] ;
140+ while ( stmt . step ( ) ) {
141+ const row = stmt . getAsObject ( ) ;
142+ rows . push ( row as Record < string , unknown > ) ;
143+ }
144+ return rows ;
145+ } finally {
146+ stmt . free ( ) ;
126147 }
127- stmt . free ( ) ;
128- return rows ;
129148 } ,
130149
131150 async execute (
0 commit comments