gatsby-transformer-cloudinary
Version:
Transform local files into Cloudinary-managed assets for Gatsby sites.
52 lines (41 loc) • 1.19 kB
JavaScript
const { uploadImageNodeToCloudinary } = require('./upload');
const { createImageNode } = require('./create-image-node');
const ALLOWED_MEDIA_TYPES = ['image/png', 'image/jpeg', 'image/gif'];
exports.createAssetNodeFromFile = async (gatsbyUtils, pluginOptions) => {
const {
node,
actions: { createNode, createParentChildLink },
createNodeId,
createContentDigest,
reporter,
} = gatsbyUtils;
const { uploadSourceInstanceNames } = pluginOptions || {};
if (!ALLOWED_MEDIA_TYPES.includes(node.internal.mediaType)) {
return;
}
if (
uploadSourceInstanceNames &&
!uploadSourceInstanceNames.includes(node.sourceInstanceName)
) {
return;
}
const cloudinaryUploadResult = await uploadImageNodeToCloudinary({
node,
reporter,
});
const imageNode = createImageNode({
cloudinaryUploadResult,
parentNode: node,
createContentDigest,
createNode,
createNodeId,
});
// Add the new node to Gatsby’s data layer.
createNode(imageNode);
// Tell Gatsby to add `childCloudinaryAsset` to the parent `File` node.
createParentChildLink({
parent: node,
child: imageNode,
});
return imageNode;
};