Библиотека idb-keyval является легковесной оберткой над IndexedDB, предназначенной для упрощения работы с хранилищем ключ-значение в браузере. Основная архитектурная идея состоит в предоставлении минимального API, которое позволяет использовать IndexedDB без необходимости прямого взаимодействия с его сложным асинхронным API.
Основные компоненты:
Хранилище (Store) Объект
Store представляет конкретное хранилище в IndexedDB. Он
создается с помощью конструктора:
import { Store } from 'idb-keyval';
const myStore = new Store('my-database', 'my-store');
Здесь 'my-database' — имя базы данных,
'my-store' — имя object store. При отсутствии этих
параметров используются значения по умолчанию.
Асинхронные функции CRUD Библиотека предоставляет набор функций для работы с данными:
get(key, store) — получает значение по ключу.set(key, value, store) — записывает значение по
ключу.del(key, store) — удаляет запись по ключу.clear(store) — очищает все данные хранилища.keys(store) — возвращает массив всех ключей.update(key, updater, store) — обновляет значение по
ключу с помощью функции-обработчика.Эти функции используют Promises для асинхронной
работы, что полностью избавляет от необходимости писать сложные
обработчики событий (onsuccess, onerror)
стандартного IndexedDB API.
Все операции над данными в idb-keyval проходят через следующие шаги:
Открытие базы данных Если база данных с
указанным именем отсутствует, создается новая. Этот процесс выполняется
через indexedDB.open, а сама библиотека оборачивает событие
onsuccess в Promise.
Создание object store При первом открытии базы
данных автоматически создается object store с ключом
keyPath, если он не задан явно. Это обеспечивает
совместимость с API функций библиотеки.
Транзакции Для каждой операции создается
короткая транзакция типа readonly или
readwrite:
readonly используется для чтения (get,
keys).readwrite используется для изменения данных
(set, del, clear,
update).Асинхронная обработка ошибок Все ошибки
IndexedDB автоматически обрабатываются и пробрасываются в отклонение
Promise. Это делает API idb-keyval безопасным для использования без
необходимости явной проверки event.target.error.
idb-keyval отличается минимализмом и небольшим размером:
Исходный код библиотеки построен как модуль ES6 и содержит следующие элементы:
Store и
создание базового хранилища.get, set, del,
clear, keys, update) с указанием
параметра store.Store.Все функции максимально лаконичны, в среднем по 5–15 строк кода каждая, что позволяет легко отслеживать поток данных и логику работы.
Store и базовые методы
транзакций.idb-keyval — это пример максимально минималистичной и эффективной
обертки над IndexedDB. Архитектура основана на простом объекте
Store и коротких асинхронных транзакциях. Небольшой размер
библиотеки и отсутствие зависимостей делают её идеальным решением для
проектов, где требуется лёгкое, но надежное хранилище ключ-значение в
браузере.