@@ -188,58 +188,38 @@ export class Storage {
188
188
189
189
async setCustomSignals ( customSignals : CustomSignals ) : Promise < void > {
190
190
const db = await this . openDbPromise ;
191
- return new Promise ( ( resolve , reject ) => {
192
- const transaction = db . transaction ( [ APP_NAMESPACE_STORE ] , 'readwrite' ) ;
193
- const objectStore = transaction . objectStore ( APP_NAMESPACE_STORE ) ;
194
- const compositeKey = this . createCompositeKey ( 'custom_signals' ) ;
195
- try {
196
- const storedSignalsRequest = objectStore . get ( compositeKey ) ;
197
- storedSignalsRequest . onerror = event => {
198
- reject ( toFirebaseError ( event , ErrorCode . STORAGE_GET ) ) ;
199
- } ;
200
- storedSignalsRequest . onsuccess = event => {
201
- const storedSignals =
202
- ( event . target as IDBRequest ) . result ?. value || { } ;
203
- const combinedSignals = {
204
- ...storedSignals ,
205
- ...customSignals
206
- } ;
207
- // Filter out key-value assignments with null values since they are signals being unset
208
- const signalsToUpdate = Object . fromEntries (
209
- Object . entries ( combinedSignals ) . filter ( ( [ _ , v ] ) => v !== null )
210
- ) ;
211
- if ( signalsToUpdate ) {
212
- const setSignalsRequest = objectStore . put ( {
213
- compositeKey,
214
- value : signalsToUpdate
215
- } ) ;
216
- setSignalsRequest . onerror = event => {
217
- reject ( toFirebaseError ( event , ErrorCode . STORAGE_SET ) ) ;
218
- } ;
219
- setSignalsRequest . onsuccess = event => {
220
- const result = ( event . target as IDBRequest ) . result ;
221
- if ( result ) {
222
- resolve ( result . value ) ;
223
- } else {
224
- resolve ( undefined ) ;
225
- }
226
- } ;
227
- }
228
- } ;
229
- } catch ( e ) {
230
- reject (
231
- ERROR_FACTORY . create ( ErrorCode . STORAGE_SET , {
232
- originalErrorMessage : ( e as Error ) ?. message
233
- } )
234
- ) ;
235
- }
236
- } ) ;
191
+ const transaction = db . transaction ( [ APP_NAMESPACE_STORE ] , 'readwrite' ) ;
192
+ const storedSignals = await this . getWithTransaction < CustomSignals > (
193
+ 'custom_signals' ,
194
+ transaction
195
+ ) ;
196
+ const combinedSignals = {
197
+ ...storedSignals ,
198
+ ...customSignals
199
+ } ;
200
+ // Filter out key-value assignments with null values since they are signals being unset
201
+ const signalsToUpdate = Object . fromEntries (
202
+ Object . entries ( combinedSignals ) . filter ( ( [ _ , v ] ) => v !== null )
203
+ ) ;
204
+ return this . setWithTransaction < CustomSignals > (
205
+ 'custom_signals' ,
206
+ signalsToUpdate ,
207
+ transaction
208
+ ) ;
237
209
}
238
210
239
- async get < T > ( key : ProjectNamespaceKeyFieldValue ) : Promise < T | undefined > {
240
- const db = await this . openDbPromise ;
211
+ /**
212
+ * Gets a value from the database using the provided transaction.
213
+ *
214
+ * @param key The key of the value to get.
215
+ * @param transaction The transaction to use for the operation.
216
+ * @returns The value associated with the key, or undefined if no such value exists.
217
+ */
218
+ async getWithTransaction < T > (
219
+ key : ProjectNamespaceKeyFieldValue ,
220
+ transaction : IDBTransaction
221
+ ) : Promise < T | undefined > {
241
222
return new Promise ( ( resolve , reject ) => {
242
- const transaction = db . transaction ( [ APP_NAMESPACE_STORE ] , 'readonly' ) ;
243
223
const objectStore = transaction . objectStore ( APP_NAMESPACE_STORE ) ;
244
224
const compositeKey = this . createCompositeKey ( key ) ;
245
225
try {
@@ -265,10 +245,20 @@ export class Storage {
265
245
} ) ;
266
246
}
267
247
268
- async set < T > ( key : ProjectNamespaceKeyFieldValue , value : T ) : Promise < void > {
269
- const db = await this . openDbPromise ;
248
+ /**
249
+ * Sets a value in the database using the provided transaction.
250
+ *
251
+ * @param key The key of the value to set.
252
+ * @param value The value to set.
253
+ * @param transaction The transaction to use for the operation.
254
+ * @returns A promise that resolves when the operation is complete.
255
+ */
256
+ async setWithTransaction < T > (
257
+ key : ProjectNamespaceKeyFieldValue ,
258
+ value : T ,
259
+ transaction : IDBTransaction
260
+ ) : Promise < void > {
270
261
return new Promise ( ( resolve , reject ) => {
271
- const transaction = db . transaction ( [ APP_NAMESPACE_STORE ] , 'readwrite' ) ;
272
262
const objectStore = transaction . objectStore ( APP_NAMESPACE_STORE ) ;
273
263
const compositeKey = this . createCompositeKey ( key ) ;
274
264
try {
@@ -292,6 +282,18 @@ export class Storage {
292
282
} ) ;
293
283
}
294
284
285
+ async get < T > ( key : ProjectNamespaceKeyFieldValue ) : Promise < T | undefined > {
286
+ const db = await this . openDbPromise ;
287
+ const transaction = db . transaction ( [ APP_NAMESPACE_STORE ] , 'readonly' ) ;
288
+ return this . getWithTransaction < T > ( key , transaction ) ;
289
+ }
290
+
291
+ async set < T > ( key : ProjectNamespaceKeyFieldValue , value : T ) : Promise < void > {
292
+ const db = await this . openDbPromise ;
293
+ const transaction = db . transaction ( [ APP_NAMESPACE_STORE ] , 'readwrite' ) ;
294
+ return this . setWithTransaction < T > ( key , value , transaction ) ;
295
+ }
296
+
295
297
async delete ( key : ProjectNamespaceKeyFieldValue ) : Promise < void > {
296
298
const db = await this . openDbPromise ;
297
299
return new Promise ( ( resolve , reject ) => {
0 commit comments