namespace-css-module-loader
Version:
Webpack CSS Module loader to namespace all rules with a single hash
40 lines (33 loc) • 1.1 kB
JavaScript
var postcss = require('postcss');
var pkg = require('./package.json');
module.exports = postcss.plugin(pkg.name, plugin);
function plugin(opts) {
opts = opts || {}
var id = opts.id || 'style'
var local = opts.rootClass ? ( '.' + opts.rootClass) : (':local(.' + id + ')')
return function(root) {
var keyframes = [];
root.walkAtRules(/(keyframes)$/, function (rule) {
keyframes.push(rule);
rule.remove();
});
var result = root.walkRules(function (rule) {
if (rule.selector.substr(0, 7) === ':global') return;
rule.selectors = rule.selectors.map(selector => {
const descendant = ':global ' + local + ' ' + selector;
const combined = ':global ' + selector.replace(/([\w-\.\#\*]+)(.*)/, '$1' + local + '$2')
if (opts.combine && opts.descendant) {
return [combined, descendant].join(', ');
} else if (opts.combine) {
return combined
} else {
return descendant
}
});
})
keyframes.map(keyframe => {
root.append(keyframe);
});
return result;
}
}