ember-codemod-remove-global-styles
Version:
Codemod to localize global styles
46 lines (45 loc) • 1.51 kB
JavaScript
import postcss from 'postcss';
import { extractClasses, extractRootClass, extractSelectors, } from './get-class-to-styles/index.js';
export function getClassToStyles(file) {
const classToStyles = new Map();
function processRule(node) {
const selectors = extractSelectors(node.selector);
const clone = node.clone();
selectors.forEach((selector) => {
const containerClass = extractRootClass(selector);
if (containerClass === undefined) {
return;
}
clone.selector = selector;
const data = {
classes: extractClasses(selector),
location: {
end: node.source.end,
start: node.source.start,
},
raw: clone.toString(),
selector,
};
if (classToStyles.has(containerClass)) {
classToStyles.get(containerClass).push(data);
}
else {
classToStyles.set(containerClass, [data]);
}
});
}
const plugins = [
{
postcssPlugin: 'postcss-get-class-to-styles',
prepare() {
return {
Rule: processRule,
};
},
},
];
// @ts-expect-error: Incorrect type
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
postcss(plugins).process(file).css;
return classToStyles;
}