ui
This commit is contained in:
+60
@@ -0,0 +1,60 @@
|
||||
'use strict';
|
||||
const browserslist = require('browserslist');
|
||||
const plugins = require('./plugins');
|
||||
|
||||
/** @typedef {{lint?: boolean}} Options */
|
||||
|
||||
/**
|
||||
* @type {import('postcss').PluginCreator<Options>}
|
||||
* @param {Options} opts
|
||||
* @return {import('postcss').Plugin}
|
||||
*/
|
||||
function pluginCreator(opts = {}) {
|
||||
return {
|
||||
postcssPlugin: 'stylehacks',
|
||||
|
||||
OnceExit(css, { result }) {
|
||||
/** @type {typeof result.opts & browserslist.Options} */
|
||||
const resultOpts = result.opts || {};
|
||||
const browsers = browserslist(null, {
|
||||
stats: resultOpts.stats,
|
||||
path: __dirname,
|
||||
env: resultOpts.env,
|
||||
});
|
||||
|
||||
/** @type {import('./plugin').Plugin[]} */
|
||||
const processors = [];
|
||||
for (const Plugin of plugins) {
|
||||
const hack = new Plugin(result);
|
||||
if (!browsers.some((browser) => hack.targets.has(browser))) {
|
||||
processors.push(hack);
|
||||
}
|
||||
}
|
||||
css.walk((node) => {
|
||||
processors.forEach((proc) => {
|
||||
if (!proc.nodeTypes.has(node.type)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (opts.lint) {
|
||||
return proc.detectAndWarn(node);
|
||||
}
|
||||
|
||||
return proc.detectAndResolve(node);
|
||||
});
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/** @type {(node: import('postcss').Node) => boolean} */
|
||||
pluginCreator.detect = (node) => {
|
||||
return plugins.some((Plugin) => {
|
||||
const hack = new Plugin();
|
||||
|
||||
return hack.any(node);
|
||||
});
|
||||
};
|
||||
|
||||
pluginCreator.postcss = true;
|
||||
module.exports = pluginCreator;
|
||||
Reference in New Issue
Block a user