50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
import Vue from 'vue'
|
|
import Vuex from 'vuex'
|
|
|
|
Vue.use(Vuex)
|
|
|
|
let store = {};
|
|
|
|
(function updateModules () {
|
|
store = normalizeRoot(require('../store/index.js'), 'store/index.js')
|
|
|
|
// If store is an exported method = classic mode (deprecated)
|
|
|
|
// Enforce store modules
|
|
store.modules = store.modules || {}
|
|
|
|
// If the environment supports hot reloading...
|
|
})()
|
|
|
|
// createStore
|
|
export const createStore = store instanceof Function ? store : () => {
|
|
return new Vuex.Store(Object.assign({
|
|
strict: (process.env.NODE_ENV !== 'production')
|
|
}, store))
|
|
}
|
|
|
|
function normalizeRoot (moduleData, filePath) {
|
|
moduleData = moduleData.default || moduleData
|
|
|
|
if (moduleData.commit) {
|
|
throw new Error(`[nuxt] ${filePath} should export a method that returns a Vuex instance.`)
|
|
}
|
|
|
|
if (typeof moduleData !== 'function') {
|
|
// Avoid TypeError: setting a property that has only a getter when overwriting top level keys
|
|
moduleData = Object.assign({}, moduleData)
|
|
}
|
|
return normalizeModule(moduleData, filePath)
|
|
}
|
|
|
|
function normalizeModule (moduleData, filePath) {
|
|
if (moduleData.state && typeof moduleData.state !== 'function') {
|
|
console.warn(`'state' should be a method that returns an object in ${filePath}`)
|
|
|
|
const state = Object.assign({}, moduleData.state)
|
|
// Avoid TypeError: setting a property that has only a getter when overwriting top level keys
|
|
moduleData = Object.assign({}, moduleData, { state: () => state })
|
|
}
|
|
return moduleData
|
|
}
|