UNPKG

@prg/gatsby-source-something-whatever

Version:

something something whatever who gives a crap.

72 lines (54 loc) 1.77 kB
import { createRemoteFileNode } from 'gatsby-source-filesystem'; import { formatMsg } from './util'; import { PLUGIN_NAME, TYPE_PREFIX, IMAGE } from './constants'; export const downloadImagesAndCreateFileNodes = async (helpers, PARENT_TYPE) => { const { actions: { createNode, touchNode }, createNodeId, store, cache, getNodes, reporter, } = helpers; const imageNodes = getNodes().filter( node => node.internal.owner === PLUGIN_NAME && node.internal.type === `${TYPE_PREFIX}${IMAGE}` ); let newNodesCount = 0; const images = await Promise.all( imageNodes.map(async node => { try { const url = node.src.split('?')[0]; const imageDataCacheKey = `${TYPE_PREFIX}__${IMAGE}__${url}`; const cacheRemoteData = await cache.get(imageDataCacheKey); // Avoid downloading the asset again if it's been cached if (cacheRemoteData) { touchNode({ nodeId: cacheRemoteData.fileNodeID }); return cacheRemoteData.fileNodeID; } newNodesCount = newNodesCount + 1; const fileNode = await createRemoteFileNode({ url, parentNodeId: node.id, store, cache, createNode, createNodeId, reporter, }); await cache.set(imageDataCacheKey, { fileNodeID: fileNode.id }); if (fileNode) { node.localFile___NODE = fileNode.id; } return node; } catch (error) { helpers.reporter.panicOnBuild(`An error occurred in ${PLUGIN_NAME}.`) console.log(`error`, error); return Promise.resolve(); } }) ); console.log(formatMsg(`Downloaded ${newNodesCount} new image files.`)); return images; };