fbredius/storybook

View on GitHub
lib/codemod/src/transforms/move-builtin-addons.js

Summary

Maintainability
A
1 hr
Test Coverage
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' });
}