Библиотека idb-keyval предоставляет высокоуровневый интерфейс для работы с IndexedDB, позволяя хранить пары «ключ–значение» без необходимости напрямую управлять транзакциями и объектными хранилищами. Она обеспечивает удобные методы для сохранения, получения, удаления и перечисления данных, а также поддерживает промисы, что делает асинхронную работу с IndexedDB значительно проще.
Базовые методы библиотеки:
set(key, value) – сохраняет значение по указанному
ключу.get(key) – извлекает значение по ключу.del(key) – удаляет значение по ключу.clear() – очищает все хранилище.keys() – возвращает массив всех ключей.entries() – возвращает массив всех пар
«ключ–значение».Idb-keyval можно подключить через npm:
import { set, get, del, keys } from 'idb-keyval';
Или использовать через CDN:
<script type="module">
import { set, get } from 'https://cdn.jsdelivr.net/npm/idb-keyval@7/dist/idb-keyval.mjs';
</script>
По умолчанию библиотека создает объектное хранилище
keyval-store в базе keyval-db. Можно создавать
свои хранилища для изоляции данных:
import { Store } from 'idb-keyval';
const customStore = new Store('custom-db', 'custom-store');
Методы библиотеки поддерживают передачу объекта Store, если нужно работать с конкретным хранилищем.
Idb-keyval поддерживает любые сериализуемые в IndexedDB типы:
объекты, массивы, строки, числа, булевы значения и даже
Blob или ArrayBuffer.
Пример сохранения объекта:
await set('user-settings', { theme: 'dark', fontSize: 14 });
const settings = await get('user-settings');
console.log(settings); // { theme: 'dark', fontSize: 14 }
Удаление и очистка данных:
await del('user-settings'); // удаляет конкретный ключ
await clear(); // очищает все хранилище
Для аудита хранимых данных в DevTools важно иметь возможность просматривать все ключи и значения.
const allKeys = await keys();
console.log(allKeys);
import { entries } from 'idb-keyval';
const allEntries = await entries();
allEntries.forEach(([key, value]) => {
console.log(key, value);
});
Этот подход позволяет быстро проверить, какие данные сохранились, и убедиться в корректности структуры хранилища.
Chrome DevTools и другие современные браузеры поддерживают IndexedDB напрямую:
keyval-db →
keyval-store).Использование entries() и keys() в коде
удобно для логирования данных перед аудитом в DevTools или для отладки
работы приложения.
keys() для получения списка
ключей и фильтровать их через JavaScript.const userKeys = (await keys()).filter(key => key.startsWith('user-'));
const previousData = await get('user-settings-v1');
const currentData = await get('user-settings');
if (JSON.stringify(previousData) !== JSON.stringify(currentData)) {
console.log('Данные изменились');
}
entries() с условием для удаления устаревших данных.const allEntries = await entries();
for (const [key, value] of allEntries) {
if (value.expired) {
await del(key);
}
}
Idb-keyval полностью поддерживает промисы, что делает возможным логирование состояния хранилища в любой момент без блокировки UI:
async function auditStore() {
const allEntries = await entries();
console.table(allEntries);
}
auditStore();
Такой метод позволяет создавать отчеты о текущем состоянии IndexedDB, анализировать структуру данных и выявлять потенциальные ошибки или дублирование.
При больших проектах может быть полезно разделять данные по контекстам:
const settingsStore = new Store('app-db', 'settings-store');
const cacheStore = new Store('app-db', 'cache-store');
Каждое хранилище можно аудировать отдельно:
console.log(await entries(settingsStore));
console.log(await entries(cacheStore));
Это обеспечивает более прозрачное управление данными и упрощает их отладку через DevTools.
Idb-keyval сочетает простоту интерфейса с мощными возможностями IndexedDB, делая аудит данных легким и удобным, позволяя контролировать и анализировать состояние хранилища как через код, так и через встроенные инструменты браузера.