@@ -37,7 +37,7 @@ export interface DBSchema {
37
37
stores : { [ storename : string ] : DBStore } ;
38
38
}
39
39
40
- export function getIDBFactory ( ) : IDBFactory {
40
+ export function getIDBFactory ( ) {
41
41
return typeof window !== 'undefined' ? window . indexedDB : self . indexedDB ;
42
42
}
43
43
@@ -46,10 +46,10 @@ export class Database {
46
46
47
47
public changes : Subject < any > = new Subject ( ) ;
48
48
49
- private _idb : IDBFactory ;
49
+ private _idb ;
50
50
private _schema : DBSchema ;
51
51
52
- constructor ( @Inject ( DatabaseBackend ) idbBackend : any , @Inject ( IDB_SCHEMA ) schema : any ) {
52
+ constructor ( @Inject ( DatabaseBackend ) idbBackend : any , @Inject ( IDB_SCHEMA ) schema : DBSchema ) {
53
53
this . _schema = schema ;
54
54
this . _idb = idbBackend ;
55
55
}
@@ -270,6 +270,38 @@ export class Database {
270
270
compare ( a : any , b : any ) : number {
271
271
return this . _idb . cmp ( a , b ) ;
272
272
}
273
+
274
+ clear ( storeName : string ) {
275
+ const open$ = this . open ( this . _schema . name ) ;
276
+ return mergeMap . call ( open$ , ( db : IDBDatabase ) => {
277
+ return new Observable ( ( txnObserver : Observer < any > ) => {
278
+ const recordSchema = this . _schema . stores [ storeName ] ;
279
+ const mapper = this . _mapRecord ( recordSchema ) ;
280
+ const txn = db . transaction ( [ storeName ] , IDB_TXN_READWRITE ) ;
281
+ const objectStore = txn . objectStore ( storeName ) ;
282
+
283
+ const clearRequest = objectStore . clear ( ) ;
284
+
285
+ const onTxnError = ( err : any ) => txnObserver . error ( err ) ;
286
+ const onTxnComplete = ( ) => txnObserver . complete ( ) ;
287
+ const onClear = ( ) => txnObserver . next ( null ) ;
288
+
289
+ txn . addEventListener ( IDB_COMPLETE , onTxnComplete ) ;
290
+ txn . addEventListener ( IDB_ERROR , onTxnError ) ;
291
+
292
+ clearRequest . addEventListener ( IDB_SUCCESS , onClear ) ;
293
+ clearRequest . addEventListener ( IDB_ERROR , onTxnError ) ;
294
+
295
+ return ( ) => {
296
+ clearRequest . removeEventListener ( IDB_SUCCESS , onClear ) ;
297
+ clearRequest . removeEventListener ( IDB_ERROR , onTxnError ) ;
298
+ txn . removeEventListener ( IDB_COMPLETE , onTxnComplete ) ;
299
+ txn . removeEventListener ( IDB_ERROR , onTxnError ) ;
300
+ } ;
301
+
302
+ } ) ;
303
+ } ) ;
304
+ }
273
305
}
274
306
275
307
0 commit comments