A Svelte store that keep its value through pages and reloads
npm install @macfja/svelte-persistent-store
import { persist, createLocalStorage } from "@macfja/svelte-persistent-store"
import { writable } from "svelte/store"
let name = persist(writable("John"), createLocalStorage(), "name")
$name = "Jeanne Doe"
// if you reload the page the value of $name is 'Jeanne Doe'
import { persistBrowserSession } from "@macfja/svelte-persistent-store"
import { writable } from "svelte/store"
let title = persistBrowserSession(writable("Unsaved"), "document-name")
$title = "My Document"
// if you reload the page the value of $title is 'My Document'
import { writable } from "@macfja/svelte-persistent-store"
// Create a wriatble store, persisted in browser LocalStorage, with the key `name`
let name = writable("name", "John")
$name = "Jeanne Doe"
// if you reload the page the value of $name is 'Jeanne Doe'
There are 6 storages built-in:
createLocalStorage()
, that use window.localStorage
to save valuescreateSessionStorage()
, that use window.sessionStorage
to save valuescreateCookieStorage()
, that use document.cookie
to save valuescreateIndexedDBStorage()
, that use window.indexedDB
to save valuecreateChromeStorage()
, that use chrome.storage
to save valuescreateEncryptedStorage()
, that wrap a storage to encrypt data (and key)You can add more storages, you just need to implement the interface StorageInterface
Documentation and examples can be generated with npm run doc
, next open docs/index.html
with your favorite web browser.
(Hint: If you don't want to generate the docs, a part of the example and documentation are available here)
The persist function will return a new Store with type PersistentStore<T>
.
The full signature of persist
is:
declare function persist<T>(store: Writable<T>, storage: StorageInterface<T>, key: string): PersistentStore<T>
The persist function add a delete
function on the store.
More information about types can be found in the generated types/index.d.ts
(npm run prebuild
) or in the generated documentation (npm run doc
).
1.3.0
to 2.0.0
Data persisted in version 1.3.0
may not be deserializable with version 2.*
.
If you have persisted store that contains Javascript class with version 1.3.0
of @macfja/svelte-persistent-store
you will not be able to get the data by default.
This is due to a change of data serialization. More information here
Contributions are welcome. Please open up an issue or create PR if you would like to help out.
Read more in the Contributing file
The MIT License (MIT). Please see License File for more information.