TypeScript
Public
Promise-Based IndexedDB Key-Value Store
Store structured values in IndexedDB with a small promise-based wrapper.
#typescript
#indexeddb
#browser-api
#storage
TypeScript
const databaseName = 'app-cache';
const storeName = 'key-value';
function openDatabase(): Promise<IDBDatabase> {
return new Promise((resolve, reject) => {
const request = indexedDB.open(databaseName, 1);
request.addEventListener('upgradeneeded', () => {
const database = request.result;
if (!database.objectStoreNames.contains(storeName)) {
database.createObjectStore(storeName);
}
});
request.addEventListener('success', () => {
resolve(request.result);
});
request.addEventListener('error', () => {
reject(request.error);
});
});
}
export async function setValue<T>(
key: IDBValidKey,
value: T,
): Promise<void> {
const database = await openDatabase();
await new Promise<void>((resolve, reject) => {
const transaction = database.transaction(
storeName,
'readwrite',
);
transaction.objectStore(storeName).put(value, key);
transaction.addEventListener('complete', () => resolve());
transaction.addEventListener('error', () => reject(transaction.error));
});
database.close();
}