Strongly typed IndexedDB stores with Zod. Store can present an arbitrary object schema.
- Type-safe IndexedDB.
- Runtime validations against Zod schemas.
- Create multiple IndexedDB databases, each with multiple stores.
- Mocked store for non-browser env (SSR).
yarn add idb-stores
import { initIDB } from 'idb-stores';
import { z } from 'zod';
(async () => {
// Initialize IndexedDB database
const getStore = initIDB({
database: {
name: 'my-database',
version: 1,
},
storeSchemas: {
auth: z.object({
username: z.string().optional(),
meta: z
.array(
z.shape({
foo: z.boolean(),
}),
)
.optional(),
}),
},
});
const store = getStore('auth'); // ✅
// const store = getStore('non-existing-store-name') // ❌
await store.set('username', 'alois'); // ✅
// await store.set('username', 1234) // ❌
const username = await store.get('username'); // `username` is type of `string | undefined`
// ----
await store.set('meta', [{ foo: true }, { foo: false }]);
const meta = await store.get('meta'); // [{ foo: true }, { foo: false }]
})();