-
Notifications
You must be signed in to change notification settings - Fork 113
/
Copy pathvuetify.js
95 lines (76 loc) · 2.43 KB
/
vuetify.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Imports
// Utilities
const fs = require('fs')
const helpers = require('./helpers')
const { updateFile } = require("@vuetify/cli-plugin-utils")
function addDependencies (api) {
api.extendPackage({
dependencies: {
vuetify: '^2.2.11',
},
})
}
function renderFiles (api, { opts }) {
const ext = api.hasPlugin('typescript') ? 'ts' : 'js'
const pluginFilename = `vuetify.${ext}`
api.render({
[`./src/plugins/${pluginFilename}`]: '../templates/default/src/plugins/vuetify.js',
}, {
...opts,
typescript: api.hasPlugin('typescript'),
})
if (api.hasPlugin('typescript') && opts.useAlaCarte) {
api.render({
'./src/shims-vuetify.d.ts': '../templates/default/src/shims-vuetify.d.ts',
})
}
// Render files if we're replacing
const fs = require('fs')
const routerPath = api.resolve(`./src/router.${ext}`)
opts.router = fs.existsSync(routerPath)
if (opts.replaceComponents) {
const files = {
'./src/App.vue': `../templates/default/src/App.${ext}.vue`,
'./src/assets/logo.svg': '../templates/default/src/assets/logo.svg',
'./src/components/HelloWorld.vue': `../templates/default/src/components/HelloWorld.${ext}.vue`,
}
if (opts.router) {
files['./src/views/Home.vue'] = `../templates/default/src/views/Home.${ext}.vue`
}
api.render(files, opts)
}
}
function addImports (api) {
api.injectImports(api.entryFile, 'import vuetify from \'./plugins/vuetify\';')
api.injectRootOptions(api.entryFile, 'vuetify')
}
function setHtmlLang (api, locale) {
updateFile(api, './public/index.html', lines => {
const htmlIndex = lines.findIndex(line => line.match(/<html\s+(.+\s+)?lang=[^\s>]+(\s|>)/))
if (htmlIndex !== -1) {
lines[htmlIndex] = lines[htmlIndex].replace(/(<html\s+(.+\s+)?)(lang=)([^\s>]+)(\s|>)/, `$1$3"${locale}"$5`)
}
return lines
})
}
function updateOrCreateVueConfig (api) {
const config = api.resolve('vue.config.js')
if (!fs.existsSync(config)) {
fs.writeFileSync(config, 'module.exports = {}', 'utf8')
}
const file = require(config)
if (!file.transpileDependencies) {
file.transpileDependencies = []
}
if (!file.transpileDependencies.includes('vuetify')) {
file.transpileDependencies.push('vuetify')
}
fs.writeFileSync(config, `module.exports = ${JSON.stringify(file, 2, 2)}`, 'utf8')
}
module.exports = {
addDependencies,
addImports,
renderFiles,
setHtmlLang,
updateOrCreateVueConfig,
}