Spaces:
Sleeping
Sleeping
File size: 769 Bytes
7aec436 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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;
|