@storybook/codemod
Version:
A collection of codemod scripts written with JSCodeshift
30 lines (25 loc) • 974 B
JavaScript
export default function transformer(file, api) {
const j = api.jscodeshift;
const createImportDeclaration = (specifiers, source) =>
j.importDeclaration(specifiers.map(s => j.importSpecifier(j.identifier(s))), j.literal(source));
const deprecates = {
action: [['action'], '@storybook/addon-actions'],
linkTo: [['linkTo'], '@storybook/addon-links'],
};
const transform = j(file.source)
.find(j.ImportDeclaration)
.filter(i => i.value.source.value === '@storybook/react')
.forEach(i => {
const importStatement = i.value;
importStatement.specifiers = importStatement.specifiers.filter(specifier => {
const item = deprecates[specifier.local.name];
if (item) {
const [specifiers, moduleName] = item;
i.insertAfter(createImportDeclaration(specifiers, moduleName));
return false;
}
return specifier;
});
});
return transform.toSource({ quote: 'single' });
}