No need to create the content digest yourself

We see a lot of this type of code when looking at source plugins:

exports.sourceNodes = async ({ actions }) => {
  const { createNode } = actions;
  const data = { hello: "world" };

  createNode({
    // More fields
    internal: {
      // More fields
      contentDigest: crypto
        .createHash(`md5`)
        .update(JSON.stringify(data))
        .digest(`hex`),
    },
  });
};

It is not technically wrong, but I prefer using createContentDigest like so:

exports.sourceNodes = async ({ actions, createContentDigest }) => {
  const { createNode } = actions;
  const data = { hello: "world" };

  createNode({
    // More fields
    internal: {
      // More fields
      contentDigest: createContentDigest(data), // ๐Ÿ‘ˆ๐Ÿ‘ˆ๐Ÿ‘ˆ
    },
  });
};

internal.contentDigest is mandatory and thus part of a Minimal Viable Content Node. If this value has not changed, Gatsby uses the cached node instead of creating a new node, and for instance, onCreateNode is not called.

contentDigest: the digest for the content of this node. Helps Gatsby avoid doing extra work on data that hasnโ€™t changed. Gatsby Docs

ย 
All the best,
Queen Raae