@@ -22,7 +22,10 @@ class Database {
22
22
resolve ( ) ;
23
23
} ;
24
24
request . onerror = ( event ) => {
25
- reject ( event . target . error ?? new Error ( `IndexedDB: can't open ${ this . #name} ` ) ) ;
25
+ reject (
26
+ event . target . error ??
27
+ new Error ( `IndexedDB: can't open ${ this . #name} ` ) ,
28
+ ) ;
26
29
} ;
27
30
} ) ;
28
31
return this ;
@@ -41,7 +44,9 @@ class Database {
41
44
}
42
45
43
46
#exec( store , operation , mode = 'readwrite' ) {
44
- if ( ! this . #active) return Promise . reject ( new Error ( 'Database not connected' ) ) ;
47
+ if ( ! this . #active) {
48
+ return Promise . reject ( new Error ( 'Database not connected' ) ) ;
49
+ }
45
50
return new Promise ( ( resolve , reject ) => {
46
51
try {
47
52
const tx = this . #instance. transaction ( store , mode ) ;
@@ -68,42 +73,58 @@ class Database {
68
73
}
69
74
70
75
get ( { store, id } ) {
71
- return this . #exec( store , ( s ) => {
72
- const req = s . get ( id ) ;
73
- return new Promise ( ( resolve , reject ) => {
74
- req . onsuccess = ( ) => resolve ( req . result ) ;
75
- req . onerror = ( ) => reject ( req . error ?? new Error ( `Can't get ${ id } ` ) ) ;
76
- } ) ;
77
- } , 'readonly' ) ;
76
+ return this . #exec(
77
+ store ,
78
+ ( s ) => {
79
+ const req = s . get ( id ) ;
80
+ return new Promise ( ( resolve , reject ) => {
81
+ req . onsuccess = ( ) => resolve ( req . result ) ;
82
+ req . onerror = ( ) => reject ( req . error ?? new Error ( `Can't get ${ id } ` ) ) ;
83
+ } ) ;
84
+ } ,
85
+ 'readonly' ,
86
+ ) ;
78
87
}
79
88
80
89
select ( { store, where, limit, offset, order, filter, sort } ) {
81
- return this . #exec( store , ( s ) => {
82
- const results = [ ] ;
83
- let skipped = 0 ;
84
- return new Promise ( ( resolve , reject ) => {
85
- const req = s . openCursor ( ) ;
86
- req . onerror = ( ) => reject ( req . error ) ;
87
- req . onsuccess = ( event ) => {
88
- const cursor = event . target . result ;
89
- if ( ! cursor ) {
90
- const filtered = filter ? results . filter ( filter ) : results ;
91
- return resolve ( sort ? filtered . toSorted ( sort ) : Database . #order( filtered , order ) ) ;
92
- }
93
- const record = cursor . value ;
94
- const match = ! where || Object . entries ( where ) . every ( ( [ k , v ] ) => record [ k ] === v ) ;
95
- if ( match ) {
96
- if ( ! offset || skipped >= offset ) {
97
- results . push ( record ) ;
98
- if ( limit && results . length >= limit ) return resolve ( results ) ;
99
- } else {
100
- skipped ++ ;
90
+ return this . #exec(
91
+ store ,
92
+ ( s ) => {
93
+ const results = [ ] ;
94
+ let skipped = 0 ;
95
+ return new Promise ( ( resolve , reject ) => {
96
+ const req = s . openCursor ( ) ;
97
+ req . onerror = ( ) => reject ( req . error ) ;
98
+ req . onsuccess = ( event ) => {
99
+ const cursor = event . target . result ;
100
+ if ( ! cursor ) {
101
+ const filtered = filter ? results . filter ( filter ) : results ;
102
+ return void resolve (
103
+ sort
104
+ ? filtered . toSorted ( sort )
105
+ : Database . #order( filtered , order ) ,
106
+ ) ;
107
+ }
108
+ const record = cursor . value ;
109
+ const match =
110
+ ! where ||
111
+ Object . entries ( where ) . every ( ( [ k , v ] ) => record [ k ] === v ) ;
112
+ if ( match ) {
113
+ if ( ! offset || skipped >= offset ) {
114
+ results . push ( record ) ;
115
+ if ( limit && results . length >= limit ) {
116
+ return void resolve ( results ) ;
117
+ }
118
+ } else {
119
+ skipped ++ ;
120
+ }
101
121
}
102
- }
103
- cursor . continue ( ) ;
104
- } ;
105
- } ) ;
106
- } , 'readonly' ) ;
122
+ cursor . continue ( ) ;
123
+ } ;
124
+ } ) ;
125
+ } ,
126
+ 'readonly' ,
127
+ ) ;
107
128
}
108
129
109
130
static #order( arr , order ) {
0 commit comments