forked from mui/material-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
theme-provider.js
43 lines (38 loc) · 1.25 KB
/
theme-provider.js
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
/**
* @param {import('jscodeshift').FileInfo} file
* @param {import('jscodeshift').API} api
*/
export default function transformer(file, api, options) {
const j = api.jscodeshift;
const root = j(file.source);
const printOptions = options.printOptions || {
quote: 'single',
};
root
.find(j.ImportDeclaration)
.filter(({ node }) => node.source.value.match(/^@material-ui\/core\/?(styles)?$/))
.forEach((path) => {
let previousVarName;
path.node.specifiers.forEach((node) => {
if (!node.imported && node.local.name === 'MuiThemeProvider') {
// default specifier
previousVarName = node.local.name;
node.local.name = 'ThemeProvider';
}
if (node.imported && node.imported.name === 'MuiThemeProvider') {
previousVarName = node.local.name;
node.local = null;
node.imported.name = 'ThemeProvider';
}
});
if (previousVarName) {
root.findJSXElements(previousVarName).forEach(({ node }) => {
node.openingElement.name.name = 'ThemeProvider';
if (node.closingElement) {
node.closingElement.name.name = 'ThemeProvider';
}
});
}
});
return root.toSource(printOptions);
}