1.1.0 • Published 6 months ago

@effector-storage/keyv v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

Keyv adapter

bundlejs

Adapter to persist store in multiple backends, using Keyv library.

Install

Depending on your package manager

# using `pnpm` ↓
$ pnpm add effector-storage @effector-storage/keyv

# using `yarn` ↓
$ yarn add effector-storage @effector-storage/keyv

# using `npm` ↓
$ npm install --save effector-storage @effector-storage/keyv

Also, you need to install required adapters for Keyv.

Usage

Import persist function from '@effector-storage/keyv' module, and it will just work:

import { persist } from '@effector-storage/keyv'

// persist store `$counter` with key 'counter'
persist({
  store: $counter,
  key: 'counter',
  with: 'redis://user:pass@localhost:6379',
})

⚠️ Note, that Keyv is asynchronous.

Two (or more) different stores, persisted with the same key, will be synchronized (synchronously!), even if not connected with each other directly — each store will receive updates from another one.

Formulae

import { persist } from '@effector-storage/keyv'
  • persist({ store, ...options }): Subscription
  • persist({ source, target, ...options }): Subscription

Options

  • ... all the common options from effector-storage's persist function.
  • with?: (string | Keyv | Keyv.Options): Connection string for Keyv library, or Keyv instance, or Keyv options. Default = undefined (in that case in-memory Map is used as a storage)
  • ttl?: (number): TTL for stored value in milliseconds. Default = undefined

Adapter

import { adapter } from '@effector-storage/keyv'
  • adapter(options?): StorageAdapter

Options

  • with?: (string | Keyv | Keyv.Options): Connection string for Keyv library, or Keyv instance, or Keyv options. Default = undefined (in that case in-memory Map is used as a storage)
  • ttl?: (number): TTL for stored value in milliseconds. Default = undefined

Gotchas

Keyv is server-side library only (at least until version 5 is landed).

FAQ

How do I use custom serialization / deserialization?

Adapter doesn't provide extra serialization options, but you can use Keyv options to achieve that:

persist({
  store: $counter,
  key: 'counter',
  with: {
    uri: 'redis://user:pass@localhost:6379',
    serialize: JSON.stringify,
    deserialize: JSON.parse,
  },
})

or use separate Keyv instance:

const keyv = new Keyv('redis://user:pass@localhost:6379', {
  serialize: JSON.stringify,
  deserialize: JSON.parse,
})

persist({
  store: $counter,
  key: 'counter',
  with: keyv,
})

Please, read Keyv documentation for more details.

1.1.0

6 months ago

1.0.0

7 months ago