58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
|
import { runPlugin } from './runPlugin'
|
||
|
import { getBuiltInPlugins } from './getPlugins'
|
||
|
import { isObject } from './isObject'
|
||
|
|
||
|
const proxyHandler = (base = []) => ({
|
||
|
get(target, key) {
|
||
|
if (isObject(target[key])) {
|
||
|
return new Proxy(target[key], proxyHandler([...base, key]))
|
||
|
} else {
|
||
|
if (
|
||
|
[...base, key].every((x) => typeof x === 'string') &&
|
||
|
target.hasOwnProperty(key)
|
||
|
) {
|
||
|
return '$dep$' + [...base, key].join('.')
|
||
|
}
|
||
|
return target[key]
|
||
|
}
|
||
|
},
|
||
|
})
|
||
|
|
||
|
export async function getUtilityConfigMap({ cwd, resolvedConfig, postcss }) {
|
||
|
const builtInPlugins = await getBuiltInPlugins(cwd)
|
||
|
const userPlugins = Array.isArray(resolvedConfig.plugins)
|
||
|
? resolvedConfig.plugins
|
||
|
: []
|
||
|
|
||
|
try {
|
||
|
const classNameConfigMap = {}
|
||
|
const proxiedConfig = new Proxy(resolvedConfig, proxyHandler())
|
||
|
|
||
|
;[...builtInPlugins, ...userPlugins].forEach((plugin) => {
|
||
|
runPlugin(plugin, {
|
||
|
postcss,
|
||
|
config: proxiedConfig,
|
||
|
addUtilities: (utilities) => {
|
||
|
Object.keys(utilities).forEach((util) => {
|
||
|
let props = Object.keys(utilities[util])
|
||
|
if (
|
||
|
props.length === 1 &&
|
||
|
/^\.[^\s]+$/.test(util) &&
|
||
|
typeof utilities[util][props[0]] === 'string' &&
|
||
|
utilities[util][props[0]].substr(0, 5) === '$dep$'
|
||
|
) {
|
||
|
classNameConfigMap[util.substr(1)] = utilities[util][
|
||
|
props[0]
|
||
|
].substr(5)
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
})
|
||
|
})
|
||
|
|
||
|
return classNameConfigMap
|
||
|
} catch (_) {
|
||
|
return {}
|
||
|
}
|
||
|
}
|