simplify code

This commit is contained in:
Simon Knott 2025-02-05 09:59:22 +01:00
parent f11bc7c8fd
commit 11c1819a46
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC

View file

@ -696,8 +696,14 @@ export abstract class BrowserContext extends SdkObject {
for (const { name, value } of (originState.localStorage || [])) for (const { name, value } of (originState.localStorage || []))
localStorage.setItem(name, value); localStorage.setItem(name, value);
function idbRequestToPromise<T extends IDBOpenDBRequest | IDBRequest>(request: T) {
return new Promise<T['result']>((resolve, reject) => {
request.addEventListener('success', () => resolve(request.result));
request.addEventListener('error', () => reject(request.error));
});
}
await Promise.all((originState.indexedDB ?? []).map(async dbInfo => { await Promise.all((originState.indexedDB ?? []).map(async dbInfo => {
await new Promise<void>((resolve, reject) => {
const openRequest = indexedDB.open(dbInfo.name, dbInfo.version); const openRequest = indexedDB.open(dbInfo.name, dbInfo.version);
openRequest.addEventListener('upgradeneeded', () => { openRequest.addEventListener('upgradeneeded', () => {
const db = openRequest.result; const db = openRequest.result;
@ -707,25 +713,21 @@ export abstract class BrowserContext extends SdkObject {
objectStore.createIndex(index.name, index.keyPathArray ?? index.keyPath!, { unique: index.unique, multiEntry: index.multiEntry }); objectStore.createIndex(index.name, index.keyPathArray ?? index.keyPath!, { unique: index.unique, multiEntry: index.multiEntry });
} }
}); });
openRequest.addEventListener('success', async () => {
const db = openRequest.result; const db = await idbRequestToPromise(openRequest);
const transaction = db.transaction(db.objectStoreNames, 'readwrite'); const transaction = db.transaction(db.objectStoreNames, 'readwrite');
await Promise.all(dbInfo.stores.flatMap(store => { await Promise.all(dbInfo.stores.flatMap(store => {
const objectStore = transaction.objectStore(store.name); const objectStore = transaction.objectStore(store.name);
return store.records.map(record => new Promise((resolve, reject) => { return store.records.map(async record => {
const request = objectStore.add( await idbRequestToPromise(
objectStore.add(
record.value as any, // protocol says string, but this got deserialized above record.value as any, // protocol says string, but this got deserialized above
objectStore.keyPath === null ? record.key : undefined objectStore.keyPath === null ? record.key : undefined
)
); );
request.addEventListener('success', resolve);
request.addEventListener('error', reject);
}));
}));
transaction.addEventListener('complete', () => resolve());
transaction.addEventListener('error', () => reject(transaction.error));
});
}); });
})); }));
}));
} }
await frame.evaluateExpression(_restoreStorageState.toString(), { isFunction: true, world: 'utility' }, originState); await frame.evaluateExpression(_restoreStorageState.toString(), { isFunction: true, world: 'utility' }, originState);