Skip to content

Commit 906029f

Browse files
committed
type fixes
1 parent 259dbae commit 906029f

File tree

1 file changed

+88
-42
lines changed

1 file changed

+88
-42
lines changed

DataStore.js

Lines changed: 88 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// @ts-check
2+
13
const DEFAULT_DB_NAME = 'Default DB';
24
const DEFAULT_STORE_NAME = 'data';
35

@@ -22,7 +24,7 @@ export default class DataStore {
2224
static setupDb(options) {
2325
const {
2426
name,
25-
dbVersion: version = 1,
27+
version = 1,
2628
storesToCreate = DEFAULT_STORE_NAME,
2729
onUpgradeNeeded = null,
2830
} = options;
@@ -42,7 +44,7 @@ export default class DataStore {
4244

4345
request.onupgradeneeded = (event) => {
4446
/** @type {IDBDatabase} */
45-
const db = event.target.result;
47+
const db = request.result;
4648
const existingStores = db.objectStoreNames;
4749
const dataStoreInstances = [];
4850

@@ -80,6 +82,7 @@ export default class DataStore {
8082

8183
getDb() {
8284
return new Promise((resolve, reject) => {
85+
// @ts-ignore we know this.dbName and this.version exist
8386
const request = indexedDB.open(this.dbName, this.version);
8487

8588
request.onerror = (event) => {
@@ -95,10 +98,12 @@ export default class DataStore {
9598
request.onupgradeneeded = (event) => {
9699
console.log('Upgrade needed');
97100
/** @type {IDBDatabase} */
98-
const db = event.target.result;
101+
const db = request.result;
99102
const existingStores = db.objectStoreNames;
100103

104+
// @ts-ignore we know this.storeName is a string
101105
if (!existingStores.contains(this.storeName)) {
106+
// @ts-ignore we know this.storeName is a string
102107
db.createObjectStore(this.storeName);
103108
}
104109
};
@@ -107,6 +112,7 @@ export default class DataStore {
107112

108113
/** @param {string | number} key */
109114
async getItem(key) {
115+
/** @type {IDBDatabase} */
110116
const db = await this.getDb();
111117

112118
if (typeof key === 'number') {
@@ -118,15 +124,20 @@ export default class DataStore {
118124
}
119125

120126
return new Promise((resolve, reject) => {
127+
if (!this.storeName) {
128+
reject(new Error('Store name not set'));
129+
return;
130+
}
131+
121132
const transaction = db.transaction(this.storeName, 'readonly');
122133

123-
transaction.onerror = (event) => reject(event.target.error);
134+
transaction.onerror = (event) => reject(transaction.error);
124135

125136
const store = transaction.objectStore(this.storeName);
126137

127138
const request = store.get(key);
128139

129-
request.onerror = (event) => reject(event.target.error);
140+
request.onerror = (event) => reject(request.error);
130141

131142
request.onsuccess = () => {
132143
if (request.result === undefined) {
@@ -145,6 +156,7 @@ export default class DataStore {
145156
* @param {any} value
146157
*/
147158
async setItem(key, value) {
159+
/** @type {IDBDatabase} */
148160
const db = await this.getDb();
149161

150162
if (typeof key === 'number') {
@@ -155,26 +167,34 @@ export default class DataStore {
155167
throw new Error('Key must be a string');
156168
}
157169

158-
return new Promise((resolve, reject) => {
159-
const transaction = db.transaction(this.storeName, 'readwrite');
170+
return /** @type {Promise<void>} */ (
171+
new Promise((resolve, reject) => {
172+
if (!this.storeName) {
173+
reject(new Error('Store name not set'));
174+
return;
175+
}
160176

161-
transaction.onerror = (event) => reject(event);
177+
const transaction = db.transaction(this.storeName, 'readwrite');
162178

163-
const store = transaction.objectStore(this.storeName);
179+
transaction.onerror = (event) => reject(transaction.error);
164180

165-
const request = store.put(value, key);
181+
const store = transaction.objectStore(this.storeName);
166182

167-
request.onerror = (event) => reject(event);
183+
const request = store.add(value, key);
168184

169-
request.onsuccess = () => {
170-
db.close();
171-
resolve();
172-
};
173-
});
185+
request.onerror = (event) => reject(request.error);
186+
187+
request.onsuccess = () => {
188+
db.close();
189+
resolve();
190+
};
191+
})
192+
);
174193
}
175194

176195
/** @param {string | number} key */
177196
async removeItem(key) {
197+
/** @type {IDBDatabase} */
178198
const db = await this.getDb();
179199

180200
if (typeof key === 'number') {
@@ -185,38 +205,50 @@ export default class DataStore {
185205
throw new Error('Key must be a string');
186206
}
187207

188-
return new Promise((resolve, reject) => {
189-
const transaction = db.transaction(this.storeName, 'readwrite');
208+
return /** @type {Promise<void>} */ (
209+
new Promise((resolve, reject) => {
210+
if (!this.storeName) {
211+
reject(new Error('Store name not set'));
212+
return;
213+
}
190214

191-
transaction.onerror = (event) => reject(event.target.error);
215+
const transaction = db.transaction(this.storeName, 'readwrite');
192216

193-
const store = transaction.objectStore(this.storeName);
217+
transaction.onerror = (event) => reject(transaction.error);
194218

195-
const request = store.delete(key);
219+
const store = transaction.objectStore(this.storeName);
196220

197-
request.onerror = (event) => reject(event.target.error);
221+
const request = store.delete(key);
198222

199-
request.onsuccess = () => {
200-
db.close();
201-
resolve();
202-
};
203-
});
223+
request.onerror = (event) => reject(request.error);
224+
225+
request.onsuccess = () => {
226+
db.close();
227+
resolve();
228+
};
229+
})
230+
);
204231
}
205232

206233
async keys() {
207234
/** @type {IDBDatabase} */
208235
const db = await this.getDb();
209236

210237
return new Promise((resolve, reject) => {
238+
if (!this.storeName) {
239+
reject(new Error('Store name not set'));
240+
return;
241+
}
242+
211243
const transaction = db.transaction(this.storeName, 'readonly');
212244

213-
transaction.onerror = (event) => reject(event.target.error);
245+
transaction.onerror = (event) => reject(transaction.error);
214246

215247
const store = transaction.objectStore(this.storeName);
216248

217249
const request = store.getAllKeys();
218250

219-
request.onerror = (event) => reject(event.target.error);
251+
request.onerror = (event) => reject(request.error);
220252

221253
request.onsuccess = () => {
222254
resolve(request.result);
@@ -226,18 +258,24 @@ export default class DataStore {
226258
}
227259

228260
async count() {
261+
/** @type {IDBDatabase} */
229262
const db = await this.getDb();
230263

231264
return new Promise((resolve, reject) => {
265+
if (!this.storeName) {
266+
reject(new Error('Store name not set'));
267+
return;
268+
}
269+
232270
const transaction = db.transaction(this.storeName, 'readonly');
233271

234-
transaction.onerror = (event) => reject(event.target.error);
272+
transaction.onerror = (event) => reject(transaction.error);
235273

236274
const store = transaction.objectStore(this.storeName);
237275

238276
const request = store.count();
239277

240-
request.onerror = (event) => reject(event.target.error);
278+
request.onerror = (event) => reject(request.error);
241279

242280
request.onsuccess = () => {
243281
resolve(request.result);
@@ -251,23 +289,31 @@ export default class DataStore {
251289
}
252290

253291
async clear() {
292+
/** @type {IDBDatabase} */
254293
const db = await this.getDb();
255294

256-
return new Promise((resolve, reject) => {
257-
const transaction = db.transaction(this.storeName, 'readwrite');
295+
return /** @type {Promise<void>} */ (
296+
new Promise((resolve, reject) => {
297+
if (!this.storeName) {
298+
reject(new Error('Store name not set'));
299+
return;
300+
}
258301

259-
transaction.onerror = (event) => reject(event.target.error);
302+
const transaction = db.transaction(this.storeName, 'readwrite');
260303

261-
const store = transaction.objectStore(this.storeName);
304+
transaction.onerror = (event) => reject(transaction.error);
262305

263-
const request = store.clear();
306+
const store = transaction.objectStore(this.storeName);
264307

265-
request.onerror = (event) => reject(event.target.error);
308+
const request = store.clear();
266309

267-
request.onsuccess = () => {
268-
db.close();
269-
resolve();
270-
};
271-
});
310+
request.onerror = (event) => reject(request.error);
311+
312+
request.onsuccess = () => {
313+
db.close();
314+
resolve();
315+
};
316+
})
317+
);
272318
}
273319
}

0 commit comments

Comments
 (0)