@this-dot/cypress-indexeddb
Version:
A Cypress.io helper library for reading and manipulating data inside IndexedDB
98 lines • 3.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.entries = exports.keys = void 0;
const helpers_1 = require("./helpers");
const open_database_1 = require("./open-database");
/**
* List keys in store
*
* @remarks The `keys` method lists the keys available in the provided store.
*
* @param store `IDBObjectStore` instance
*
* @returns Promise<IDBValidKey[]>
* @throws {Error} If it is chained off from a method that does not return an object store.
*/
function keys(store) {
const { log, consoleProps } = createMetadataLog('keys');
if (!(0, helpers_1.isIDBObjectStore)(store)) {
const error = new Error(`You tried to use the 'keys' method without calling 'getObjectStore' first`);
consoleProps.error = error;
log.error(error).end();
throw error;
}
return cy.wrap((0, open_database_1.createDatabaseConnection)(store.transaction.db.name)
.then((openDb) => getMetadata(openDb, store, 'getAllKeys'))
.then((result) => {
consoleProps.result = result;
log.end();
return result;
})
.catch((e) => {
consoleProps.error = e;
log.error(e).end();
throw e;
}));
}
exports.keys = keys;
/**
* List all entries in store
*
* @remarks The `entries` method lists all the values saved in the store.
*
* @param store `IDBObjectStore` instance
*
* @returns Promise<T[]>
* @throws {Error} If it is chained off from a method that does not return an object store.
*/
function entries(store) {
const { log, consoleProps } = createMetadataLog('entries');
if (!(0, helpers_1.isIDBObjectStore)(store)) {
const error = new Error(`You tried to use the 'entries' method without calling 'getObjectStore' first`);
consoleProps.error = error;
log.error(error).end();
throw error;
}
return cy.wrap((0, open_database_1.createDatabaseConnection)(store.transaction.db.name)
.then((openDb) => getMetadata(openDb, store, 'getAll'))
.then((result) => {
consoleProps.result = result;
log.end();
return result;
})
.catch((e) => {
consoleProps.error = e;
log.error(e).end();
throw e;
}));
}
exports.entries = entries;
function getMetadata(db, store, operation) {
return new Promise((resolve, reject) => {
const request = db
.transaction(store.name, 'readwrite')
.objectStore(store.name)[operation]();
request.onerror = (e) => {
db.close();
reject(e);
};
request.onsuccess = () => {
request.onerror = () => void 0;
db.close();
const result = request.result;
resolve(result);
};
});
}
function createMetadataLog(operation) {
const consoleProps = {};
const log = Cypress.log({
autoEnd: false,
type: 'child',
name: operation,
message: `IDBObjectStore ${operation}`,
consoleProps: () => consoleProps,
});
return { log, consoleProps };
}
//# sourceMappingURL=object-store-metadata.js.map