playwright-indexeddb
Version:
Access and manipulate IndexedDB within Playwright tests
146 lines (145 loc) • 6.44 kB
JavaScript
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;
;