// Babel plugin that adds CACHE_BUST_COMMENT to every function body.
const CACHE_BUST_COMMENT = "ThouShaltNotCache";

export default function({ types: t }) {
  return {
    visitor: {
      Function(path) {
        const bodyPath = path.get("body");
        // Handle arrow functions: () => "value"
        // Convert them to block statements: () => { return "value"; }
        if (!bodyPath.isBlockStatement()) {
          const newBody = t.blockStatement([t.returnStatement(bodyPath.node)]);
          path.set("body", newBody);
        }

        // Handle empty function bodies: function foo() {}
        // Add an empty statement so we have a first node to attach the comment to.
        if (path.get("body.body").length === 0) {
          path.get("body").pushContainer("body", t.emptyStatement());
        }

        const firstNode = path.node.body.body[0];
        t.addComment(firstNode, "leading", CACHE_BUST_COMMENT);
      },
    },
  };
};
