diff options
Diffstat (limited to 'src/lib/hmr-stores.js')
| -rw-r--r-- | src/lib/hmr-stores.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lib/hmr-stores.js b/src/lib/hmr-stores.js new file mode 100644 index 0000000..9cd6d0e --- /dev/null +++ b/src/lib/hmr-stores.js @@ -0,0 +1,29 @@ +// Customized HMR-safe stores +// Based off https://github.com/svitejs/svite/blob/ddec6b9/packages/playground/hmr/src/stores/hmr-stores.js +import { writable } from 'svelte/store' + +/** + * @type { Record<string, import('svelte/store').Writable<any>> } + */ +let stores = {} + +/** + * @template T + * @param { string } id + * @param { T } initialValue + * @returns { import('svelte/store').Writable<T> } + */ +export function getStore(id, initialValue) { + return stores[id] || (stores[id] = writable(initialValue)) +} + +// preserve the store across HMR updates +if (import.meta.hot) { + if (import.meta.hot.data.stores) { + stores = import.meta.hot.data.stores + } + import.meta.hot.accept() + import.meta.hot.dispose(() => { + import.meta.hot.data.stores = stores + }) +} |
