1.1.7 • Published 8 months ago

@tomina/vuex-ltm-esnext v1.1.7

Weekly downloads
2
License
(Apache-2.0 OR IS...
Repository
github
Last release
8 months ago

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.

1.1.7

8 months ago

1.1.6

11 months ago

1.1.5

11 months ago

1.1.4

1 year ago

1.1.3

1 year ago

1.1.2

1 year ago

1.1.1

2 years ago

1.1.0

3 years ago

1.0.16

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago