Vuex - Long Term Memory

Vuex - Long Term Memory

Async modular persistence for Vuex store.

Documentation: https://thomaash.github.io/vuex-ltm/

Simple example

import Vue from "vue"
import Vuex from "vuex"
import {
LTM,
dummyFilter,
localStorageWrapper,
replace,
saveAll,
simplyExecute
} from "vuex-ltm"

const ltm = new LTM({
// Persist immediatelly (even multiple times per second).
execute: simplyExecute,
// Persist all mutations.
filter: dummyFilter,
// Replace the state in Vuex when loading.
merge: replace,
// Persist the whole state.
reduce: saveAll,
// Persist into the localStorage as the 'app-state' item.
storage: localStorageWrapper("app-state", localStorage)
})

Vue.use(Vuex)
const store = new Vuex.Store({
state: {},
plugins: [ltm.plugin]
})

Better example

import Vue from 'vue'
import Vuex from 'vuex'
import {
LTM,
chromeSyncStorage,
deepMerge,
executeWithDelay,
localStorage,
mutationFilter,
pickModules
} from 'vuex-ltm'

const ltm = new LTM({
// Persist 2 seconds after the last change (prevents bursts).
execute: executeWithDelay(2000),
// Persist only after select mutations.
filter: mutationFilter(['mutation-type-1', 'mutation-type-2']),
// Merge the persisted state with the defaults in Vuex.
merge: deepMerge,
// Persist only some modules.
reduce: pickModules(['sync']),
// Persist into the chrome.storage.sync if in extension or into localStorage otherwise (dev/demo).
storage: chrome && chrome.storage && chrome.storage.sync
? chromeSyncStorage('app-state')
: localStorage('app-state'),
})

Vue.use(Vuex)
const store = new Vuex.Store({
state: {},
modules: {
local: …,
sync:
},
plugins: [ltm.plugin]
})

// You can also wait for the persisted state to be loaded (preferably with some nice spinner or something).
// Otherwise you'll have the defaults in Vuex before the persisted state is loaded.
;(async () => {
await ltm.ready
new Vue({
store,
render: h => h(App)
}).$mount('#app')
})()

License

This project is dual licensed under Apache 2.0 and ISC. Pick whichever you like more.

Async modular persistence for Vuex store.

Documentation: https://thomaash.github.io/vuex-ltm/

Simple example

import Vue from "vue"
import Vuex from "vuex"
import {
LTM,
dummyFilter,
localStorageWrapper,
replace,
saveAll,
simplyExecute
} from "vuex-ltm"

const ltm = new LTM({
// Persist immediatelly (even multiple times per second).
execute: simplyExecute,
// Persist all mutations.
filter: dummyFilter,
// Replace the state in Vuex when loading.
merge: replace,
// Persist the whole state.
reduce: saveAll,
// Persist into the localStorage as the 'app-state' item.
storage: localStorageWrapper("app-state", localStorage)
})

Vue.use(Vuex)
const store = new Vuex.Store({
state: {},
plugins: [ltm.plugin]
})

Better example

import Vue from 'vue'
import Vuex from 'vuex'
import {
LTM,
chromeSyncStorage,
deepMerge,
executeWithDelay,
localStorage,
mutationFilter,
pickModules
} from 'vuex-ltm'

const ltm = new LTM({
// Persist 2 seconds after the last change (prevents bursts).
execute: executeWithDelay(2000),
// Persist only after select mutations.
filter: mutationFilter(['mutation-type-1', 'mutation-type-2']),
// Merge the persisted state with the defaults in Vuex.
merge: deepMerge,
// Persist only some modules.
reduce: pickModules(['sync']),
// Persist into the chrome.storage.sync if in extension or into localStorage otherwise (dev/demo).
storage: chrome && chrome.storage && chrome.storage.sync
? chromeSyncStorage('app-state')
: localStorage('app-state'),
})

Vue.use(Vuex)
const store = new Vuex.Store({
state: {},
modules: {
local: …,
sync:
},
plugins: [ltm.plugin]
})

// You can also wait for the persisted state to be loaded (preferably with some nice spinner or something).
// Otherwise you'll have the defaults in Vuex before the persisted state is loaded.
;(async () => {
await ltm.ready
new Vue({
store,
render: h => h(App)
}).$mount('#app')
})()

License

This project is dual licensed under Apache 2.0 and ISC. Pick whichever you like more.