Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/cermakjiri/idb-stores

Strongly typed IndexedDB stores with Zod. Store can present arbitrary an object schema.
https://github.com/cermakjiri/idb-stores

Last synced: about 1 month ago
JSON representation

Strongly typed IndexedDB stores with Zod. Store can present arbitrary an object schema.

Awesome Lists containing this project

README

        

# idb-stores

Strongly typed IndexedDB stores with [Zod](https://zod.dev). Store can present arbitrary an object schema.

## Features

- Type-safe IndexedDB.
- Runtime validations against Zod schemas.
- Create multiple IndexedDB databases, each with multiple stores.
- Mocked store for non-browser env (SSR).

## Getting started

```sh
yarn add idb-stores
```

```ts
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 }]
})();
```