UNPKG

playwright-indexeddb

Version:

Access and manipulate IndexedDB within Playwright tests

146 lines (145 loc) 6.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PlaywrightIndexedDB = void 0; class PlaywrightIndexedDB { constructor(page, options) { this.page = page; this.dbName = options.dbName; this.storeName = options.storeName; this.version = options.version || 1; } async getAllItems() { return this.page.evaluate(({ dbName, storeName }) => { return new Promise((resolve, reject) => { const request = indexedDB.open(dbName); request.onerror = () => reject(new Error("Failed to open database")); request.onsuccess = () => { const db = request.result; try { const transaction = db.transaction(storeName, "readonly"); const store = transaction.objectStore(storeName); const getRequest = store.getAll(); getRequest.onsuccess = () => { db.close(); resolve(getRequest.result); }; getRequest.onerror = () => reject(getRequest.error); } catch (e) { db.close(); reject(e); } }; }); }, { dbName: this.dbName, storeName: this.storeName }); } async getItem(key) { return this.page.evaluate( // eslint-disable-next-line @typescript-eslint/no-explicit-any function (params) { return new Promise((resolve, reject) => { const request = indexedDB.open(params.dbName); request.onerror = () => reject(new Error("Failed to open database")); request.onsuccess = () => { const db = request.result; try { const transaction = db.transaction(params.storeName, "readonly"); const store = transaction.objectStore(params.storeName); const getRequest = store.get(params.key); getRequest.onsuccess = () => { db.close(); resolve(getRequest.result || null); }; getRequest.onerror = () => reject(getRequest.error); } catch (e) { db.close(); reject(e); } }; }); }, { dbName: this.dbName, storeName: this.storeName, key }); } async putItem(item, key) { await this.page.evaluate( // eslint-disable-next-line @typescript-eslint/no-explicit-any function (params) { return new Promise((resolve, reject) => { const request = indexedDB.open(params.dbName); request.onerror = () => reject(new Error("Failed to open database")); request.onsuccess = (event) => { const db = event.target.result; try { const transaction = db.transaction(params.storeName, "readwrite"); const store = transaction.objectStore(params.storeName); const putRequest = params.key !== undefined ? store.put(params.item, params.key) : store.put(params.item); putRequest.onsuccess = () => { db.close(); resolve(); }; putRequest.onerror = () => reject(putRequest.error); } catch (e) { db.close(); reject(e); } }; }); }, { dbName: this.dbName, storeName: this.storeName, item, key }); } async deleteItem(key) { await this.page.evaluate( // eslint-disable-next-line @typescript-eslint/no-explicit-any function (params) { return new Promise((resolve, reject) => { const request = indexedDB.open(params.dbName); request.onerror = () => reject(new Error("Failed to open database")); request.onsuccess = () => { const db = request.result; try { const transaction = db.transaction(params.storeName, "readwrite"); const store = transaction.objectStore(params.storeName); const deleteRequest = store.delete(params.key); deleteRequest.onsuccess = () => { db.close(); resolve(); }; deleteRequest.onerror = () => reject(deleteRequest.error); } catch (e) { db.close(); reject(e); } }; }); }, { dbName: this.dbName, storeName: this.storeName, key }); } async clear() { await this.page.evaluate(({ dbName, storeName }) => { return new Promise((resolve, reject) => { const request = indexedDB.open(dbName); request.onerror = () => reject(new Error("Failed to open database")); request.onsuccess = () => { const db = request.result; try { const transaction = db.transaction(storeName, "readwrite"); const store = transaction.objectStore(storeName); const clearRequest = store.clear(); clearRequest.onsuccess = () => { db.close(); resolve(); }; clearRequest.onerror = () => reject(clearRequest.error); } catch (e) { db.close(); reject(e); } }; }); }, { dbName: this.dbName, storeName: this.storeName }); } } exports.PlaywrightIndexedDB = PlaywrightIndexedDB;