Spaces:
Sleeping
Sleeping
| import {writable} from 'svelte/store'; | |
| import merge from './merge'; | |
| import serialize from './serialize'; | |
| const writablePersistentStore = (key, defaultValue) => { | |
| let value = JSON.parse(JSON.stringify(defaultValue)); | |
| const localValue = JSON.parse(localStorage.getItem(key)); | |
| if (localValue) { | |
| value = merge(localValue, value); | |
| } | |
| const store = writable(value, () => { | |
| const unsubscribe = store.subscribe(value => { | |
| const serialized = serialize(value, defaultValue); | |
| if (serialized === null) { | |
| localStorage.removeItem(key); | |
| } else { | |
| localStorage.setItem(key, JSON.stringify(serialized)); | |
| } | |
| }); | |
| return unsubscribe; | |
| }); | |
| return store; | |
| }; | |
| export default writablePersistentStore; | |