pankod/refine

View on GitHub
packages/codemod/src/transformations/v4/metadata-to-meta.ts

Summary

Maintainability
A
1 hr
Test Coverage
import type { JSCodeshift, Collection } from "jscodeshift";

export const metaDataToMeta = (j: JSCodeshift, source: Collection) => {
  // find all JSX elements
  source.find(j.JSXElement).forEach((path) => {
    const attributes = path.node.openingElement.attributes;
    if (!attributes) return;

    // if they have a meta attribute, skip them.
    const hasMeta = attributes.some(
      (attribute) => attribute?.["name"]?.["name"] === "meta",
    );
    if (hasMeta) return;

    // if they have a metaData change it to meta.
    path.node.openingElement.attributes.forEach((attribute) => {
      if (attribute?.["name"]?.["name"] === "metaData") {
        attribute["name"]["name"] = "meta";
      }
    });
  });

  // find all call expressions
  source.find(j.CallExpression).forEach((path) => {
    // find all arguments
    path.node.arguments.forEach((argument) => {
      const properties = argument["properties"];
      if (!properties) return;

      // if they have a meta argument, skip them.
      const hasMeta = properties.some(
        (property) => property?.["key"]?.["name"] === "meta",
      );
      if (hasMeta) return;

      // if they have a metaData change it to meta.
      properties.forEach((property) => {
        if (
          property?.["shorthand"] &&
          property?.["key"]?.["name"] === "metaData"
        ) {
          property["key"]["name"] = "meta";
          property["value"]["name"] === "metaData";
          property["shorthand"] = false;
        } else {
          if (property?.["key"]?.["name"] === "metaData") {
            property["key"]["name"] = "meta";
          }
        }
      });
    });
  });
};