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; | |