1.1.7 • Published 1 year ago

vuex-ltm v1.1.7

Weekly downloads
26
License
(Apache-2.0 OR IS...
Repository
github
Last release
1 year 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

1 year ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.16

4 years ago

1.0.15

4 years ago

1.0.14

4 years ago

1.0.13

4 years ago

1.0.12

5 years ago

1.0.11

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

6 years ago