-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathnuxtModule.js
70 lines (62 loc) · 1.66 KB
/
nuxtModule.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { join, resolve } from 'path'
import DruxtMenuStorybook from './nuxtStorybook'
/**
* The Nuxt.js module function.
*
* - Adds Nuxt plugin.
* - Adds Vuex store.
* - Adds Nuxt Storybook integration.
*
* The module function should not be used directly, but rather installed via your Nuxt configuration file.
*
* Options are set on the root level `druxt` Nuxt config object.
*
* @example @lang js
* // `nuxt.config.js`
* module.exports = {
* modules: [
* 'druxt-menu'
* ],
* druxt: {
* baseUrl: 'https://demo-api.druxtjs.org'
* }
* }
*
* @param {object} moduleOptions - Module options object.
*/
const DruxtMenuNuxtModule = function (moduleOptions = {}) {
// Set default options.
const options = {
baseUrl: moduleOptions.baseUrl,
...(this.options || {}).druxt || {},
menu: {
...((this.options || {}).druxt || {}).menu,
...moduleOptions,
}
}
// Register components directories.
this.nuxt.hook('components:dirs', dirs => {
dirs.push({ path: join(__dirname, 'components') })
dirs.push({ path: join(__dirname, 'components/blocks') })
})
// Add plugin.
this.addPlugin({
src: resolve(__dirname, '../templates/plugin.js'),
fileName: 'druxt-menu.js',
options
})
// Enable Vuex Store.
this.options.store = true
// Add Vuex plugin.
this.addPlugin({
src: resolve(__dirname, '../templates/store.js'),
fileName: 'store/druxt-menu.js',
options
})
// Nuxt Storybook.
this.nuxt.hook('storybook:config', async ({ stories }) => {
await DruxtMenuStorybook.call(this, { stories })
})
}
DruxtMenuNuxtModule.meta = require('../package.json')
export { DruxtMenuNuxtModule }