Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/furudean/svelte-persistent-store

Svelte store that saves and loads data from localStorage or sessionStorage
https://github.com/furudean/svelte-persistent-store

localstorage sessionstorage store svelte svelte-kit

Last synced: 28 days ago
JSON representation

Svelte store that saves and loads data from localStorage or sessionStorage

Awesome Lists containing this project

README

        

A girl

# [svelte-persistent-store](https://www.npmjs.com/package/@furudean/svelte-persistent-store)

This is a
[writable svelte store](https://svelte.dev/docs#run-time-svelte-store-writable)
that saves and loads data from `Window.localStorage` or `Window.sessionStorage`.
Works with Svelte Kit out of the box.

The store listens to events from the `Storage` interface and will sync its
internal state upon changes. This makes debugging using the developer console
easy, and it will update across sessions as well.

## Install

```bash
npm install @furudean/svelte-persistent-store
```

## Use

> **Note**: By default only
> [JSON serializable values](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description)
> are handled, but [custom serialization and deserialization functions can be
> provided](#custom-serialization-functions).

```js
import { persistent } from "@furudean/svelte-persistent-store"

const preferences = persistent({
start_value: {
foo: "bar"
},
key: "preferences", // key to save as in Storage
storage_type: "localStorage" // Storage object to use
})
```

## Custom serialization functions

Since the `Storage` interface only supports strings, data needs to be converted
to strings before saving. By default `JSON.stringify` and `JSON.parse` is used.

You can pass custom serializer and deserializer functions if you require
specific behavior when loading or saving data from `Storage`. For example, you
can handle `Date`s like this:

```js
const persistent_date = persistent({
start_value: new Date(),
key: "my-persistent-date",
storage_type: "localStorage",
serialize: (date) => date.toISOString(), // transform before saving
deserialize: (str) => new Date(str) // transform after loading
})
```