fix types

This commit is contained in:
Simon Knott 2025-02-04 11:09:22 +01:00
parent da0ad1ef75
commit 84c6d934b6
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC
6 changed files with 34 additions and 8 deletions

View file

@ -28,7 +28,7 @@ import { Worker } from './worker';
import { Events } from './events'; import { Events } from './events';
import { TimeoutSettings } from '../common/timeoutSettings'; import { TimeoutSettings } from '../common/timeoutSettings';
import { Waiter } from './waiter'; import { Waiter } from './waiter';
import type { Headers, WaitForEventOptions, BrowserContextOptions, StorageState, LaunchOptions } from './types'; import type { Headers, WaitForEventOptions, BrowserContextOptions, StorageState, LaunchOptions, StorageStateWithIndexedDB } from './types';
import { type URLMatch, headersObjectToArray, isRegExp, isString, urlMatchesEqual, mkdirIfNeeded } from '../utils'; import { type URLMatch, headersObjectToArray, isRegExp, isString, urlMatchesEqual, mkdirIfNeeded } from '../utils';
import type * as api from '../../types/types'; import type * as api from '../../types/types';
import type * as structs from '../../types/structs'; import type * as structs from '../../types/structs';
@ -425,7 +425,7 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
}); });
} }
async storageState(options: { path?: string } = {}): Promise<StorageState> { async storageState(options: { path?: string } = {}): Promise<StorageStateWithIndexedDB> {
const state = await this._channel.storageState(); const state = await this._channel.storageState();
if (options.path) { if (options.path) {
await mkdirIfNeeded(options.path); await mkdirIfNeeded(options.path);

View file

@ -39,6 +39,10 @@ export type StorageState = {
cookies: channels.NetworkCookie[], cookies: channels.NetworkCookie[],
origins: channels.OriginStorage[] origins: channels.OriginStorage[]
}; };
export type StorageStateWithIndexedDB = {
cookies: channels.NetworkCookie[],
origins: channels.OriginStorageWithRequiredIndexedDB[]
};
export type SetStorageState = { export type SetStorageState = {
cookies?: channels.SetNetworkCookie[], cookies?: channels.SetNetworkCookie[],
origins?: channels.OriginStorage[] origins?: channels.OriginStorage[]

View file

@ -164,6 +164,11 @@ scheme.IndexedDBDatabase = tObject({
})), })),
}); });
scheme.OriginStorage = tObject({ scheme.OriginStorage = tObject({
origin: tString,
localStorage: tArray(tType('NameValue')),
indexedDB: tOptional(tArray(tType('IndexedDBDatabase'))),
});
scheme.OriginStorageWithRequiredIndexedDB = tObject({
origin: tString, origin: tString,
localStorage: tArray(tType('NameValue')), localStorage: tArray(tType('NameValue')),
indexedDB: tArray(tType('IndexedDBDatabase')), indexedDB: tArray(tType('IndexedDBDatabase')),
@ -985,7 +990,7 @@ scheme.BrowserContextSetOfflineResult = tOptional(tObject({}));
scheme.BrowserContextStorageStateParams = tOptional(tObject({})); scheme.BrowserContextStorageStateParams = tOptional(tObject({}));
scheme.BrowserContextStorageStateResult = tObject({ scheme.BrowserContextStorageStateResult = tObject({
cookies: tArray(tType('NetworkCookie')), cookies: tArray(tType('NetworkCookie')),
origins: tArray(tType('OriginStorage')), origins: tArray(tType('OriginStorageWithRequiredIndexedDB')),
}); });
scheme.BrowserContextPauseParams = tOptional(tObject({})); scheme.BrowserContextPauseParams = tOptional(tObject({}));
scheme.BrowserContextPauseResult = tOptional(tObject({})); scheme.BrowserContextPauseResult = tOptional(tObject({}));

View file

@ -600,7 +600,7 @@ export abstract class BrowserContext extends SdkObject {
const storage = await page.mainFrame().nonStallingEvaluateInExistingContext(`(${_collectStorageScript.toString()})()`, 'utility'); const storage = await page.mainFrame().nonStallingEvaluateInExistingContext(`(${_collectStorageScript.toString()})()`, 'utility');
serializeRecords(storage.indexedDB); serializeRecords(storage.indexedDB);
if (storage.localStorage.length || storage.indexedDB?.length) if (storage.localStorage.length || storage.indexedDB?.length)
result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB } as channels.OriginStorage); result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB } as channels.OriginStorageWithRequiredIndexedDB);
originsToSave.delete(origin); originsToSave.delete(origin);
} catch { } catch {
// When failed on the live page, we'll retry on the blank page below. // When failed on the live page, we'll retry on the blank page below.
@ -621,7 +621,7 @@ export abstract class BrowserContext extends SdkObject {
const storage = await frame.evaluateExpression(`(${_collectStorageScript.toString()})()`, { world: 'utility' }); const storage = await frame.evaluateExpression(`(${_collectStorageScript.toString()})()`, { world: 'utility' });
serializeRecords(storage.indexedDB); serializeRecords(storage.indexedDB);
if (storage.localStorage.length || storage.indexedDB.length) if (storage.localStorage.length || storage.indexedDB.length)
result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB } as channels.OriginStorage); result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB } as channels.OriginStorageWithRequiredIndexedDB);
} }
await page.close(internalMetadata); await page.close(internalMetadata);
} }
@ -696,7 +696,7 @@ 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);
await Promise.all(originState.indexedDB.map(async dbInfo => { await Promise.all((originState.indexedDB ?? []).map(async dbInfo => {
await new Promise<void>((resolve, reject) => { 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', () => {

View file

@ -294,6 +294,12 @@ export type IndexedDBDatabase = {
}; };
export type OriginStorage = { export type OriginStorage = {
origin: string,
localStorage: NameValue[],
indexedDB?: IndexedDBDatabase[],
};
export type OriginStorageWithRequiredIndexedDB = {
origin: string, origin: string,
localStorage: NameValue[], localStorage: NameValue[],
indexedDB: IndexedDBDatabase[], indexedDB: IndexedDBDatabase[],
@ -1787,7 +1793,7 @@ export type BrowserContextStorageStateParams = {};
export type BrowserContextStorageStateOptions = {}; export type BrowserContextStorageStateOptions = {};
export type BrowserContextStorageStateResult = { export type BrowserContextStorageStateResult = {
cookies: NetworkCookie[], cookies: NetworkCookie[],
origins: OriginStorage[], origins: OriginStorageWithRequiredIndexedDB[],
}; };
export type BrowserContextPauseParams = {}; export type BrowserContextPauseParams = {};
export type BrowserContextPauseOptions = {}; export type BrowserContextPauseOptions = {};

View file

@ -255,6 +255,17 @@ IndexedDBDatabase:
unique: boolean unique: boolean
OriginStorage: OriginStorage:
type: object
properties:
origin: string
localStorage:
type: array
items: NameValue
indexedDB:
type: array?
items: IndexedDBDatabase
OriginStorageWithRequiredIndexedDB:
type: object type: object
properties: properties:
origin: string origin: string
@ -1217,7 +1228,7 @@ BrowserContext:
items: NetworkCookie items: NetworkCookie
origins: origins:
type: array type: array
items: OriginStorage items: OriginStorageWithRequiredIndexedDB
pause: pause:
experimental: True experimental: True