forked from vuejs/vuepress
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoverrideCSS.js
69 lines (60 loc) · 2.21 KB
/
overrideCSS.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
const path = require('path')
const {
fs, logger, chalk,
datatypes: {
isPlainObject,
assertTypes,
isString
}
} = require('@vuepress/shared-utils')
module.exports = (options, context) => ({
name: '@vuepress/internal-override-css',
async ready () {
const { sourceDir, writeTemp } = context
const overridePath = path.resolve(sourceDir, '.vuepress/override.styl')
const hasUserOverride = fs.existsSync(overridePath)
if (hasUserOverride) {
logger.tip(`${chalk.magenta('override.styl')} has been deprecated from v1.0.0, using ${chalk.cyan('config.palette')} instead.\n`)
}
// palette API.
const themePalette = context.themePalette
const { palette: userPalette } = context.siteConfig
const themePaletteContent = resolvePaletteContent(themePalette)
const userPaletteContent = resolvePaletteContent(userPalette)
// user's palette can override theme's palette.
const paletteContent = themePaletteContent + userPaletteContent
await writeTemp('palette.styl', paletteContent)
// style.styl API.
const stylePath = path.resolve(sourceDir, '.vuepress/style.styl').replace(/\\/g, '/')
const hasUserStyle = fs.existsSync(stylePath)
await writeTemp('style.styl', hasUserStyle ? `@import(${JSON.stringify(stylePath)})` : ``)
// Temporary tip, will be removed at next release.
if (hasUserOverride && !hasUserStyle) {
logger.tip(
`${chalk.magenta('override.styl')} has been split into 2 APIs, we recommend you upgrade to continue.\n` +
` See: ${chalk.magenta('https://vuepress.vuejs.org/default-theme-config/#simple-css-override')}`
)
}
}
})
function resolvePaletteContent (palette) {
const { valid, warnMsg } = assertTypes(palette, [String, Object])
if (!valid) {
if (palette !== undefined) {
logger.warn(
`[vuepress] Invalid value for "palette": ${warnMsg}`
)
}
return ''
}
if (isString(palette)) {
if (fs.existsSync(palette)) {
return `@import(${JSON.stringify(palette)})\n`
}
return ''
} else if (isPlainObject(palette)) {
return Object.keys(palette).map(variableName => {
return `${variableName} = ${palette[variableName]}`
}).join('\n') + '\n'
}
}