-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
50 lines (44 loc) · 1.47 KB
/
index.js
File metadata and controls
50 lines (44 loc) · 1.47 KB
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
import postcssImport from 'postcss-import'
import postcssNesting from 'postcss-nesting'
import postcssCustomMedia from 'postcss-custom-media'
import autoprefixer from 'autoprefixer'
import { getPackageInfo, deepMergeWith } from 'vituum/utils/common.js'
const { name } = getPackageInfo(import.meta.url)
/**
* @type {import('@vituum/vite-plugin-postcss/types/index').PluginUserConfig}
*/
const defaultOptions = {
import: {},
nesting: {},
customMedia: {},
autoprefixer: {},
}
/**
* @param {import('@vituum/vite-plugin-postcss/types/index').PluginUserConfig} options
* @returns {import('vite').Plugin}
*/
const plugin = (options = {}) => {
options = deepMergeWith(defaultOptions, options)
const postcssPlugins = [
postcssImport(options.import),
postcssNesting(options.nesting),
postcssCustomMedia(options.customMedia),
autoprefixer(options.autoprefixer),
]
return {
name,
enforce: 'pre',
/** @param {import('@vituum/vite-plugin-postcss/types/viteUserConfig').ViteUserConfig} userConfig */
config(userConfig) {
if (!userConfig?.css?.postcss && !userConfig?.css?.postcss?.plugins) {
userConfig.css = userConfig.css || {}
userConfig.css.postcss = userConfig.css.postcss || {}
userConfig.css.postcss.plugins = postcssPlugins
}
else if (userConfig.css.postcss.plugins) {
userConfig.css.postcss.plugins = postcssPlugins.concat(...userConfig.css.postcss.plugins)
}
},
}
}
export default plugin