UNPKG

gatsby-mdx-remote

Version:

A plugin to transform nodes with mdx content and frontmatter into mdx File nodes for consumption by the gatsby-plugin-mdx plugin

92 lines 4.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.onCreateNode = exports.createResolvers = exports.onPreInit = void 0; const createMdxNode_js_1 = require("./createMdxNode.js"); const gatsby_source_filesystem_1 = require("gatsby-source-filesystem"); // Node API reference: https://www.gatsbyjs.com/docs/node-apis/ const pluginName = "gatsby-mdx-remote"; const onPreInit = () => console.log(`Loaded ${pluginName}`); exports.onPreInit = onPreInit; const createResolvers = async ({ actions, cache, createNodeId, createResolvers, store, reporter }, options) => { const { createNode } = actions; const frontmatterSharpRemoteImageUrlArrayField = typeof options.frontmatterSharpRemoteImageUrlArrayField === "string" ? options.frontmatterSharpRemoteImageUrlArrayField : undefined; const imageListResolver = { Mdx: { ...((frontmatterSharpRemoteImageUrlArrayField && { [frontmatterSharpRemoteImageUrlArrayField]: { type: `[File]`, resolve: async (source, _args, _context, _info) => { return Array.isArray(source.frontmatter[frontmatterSharpRemoteImageUrlArrayField]) ? source.frontmatter[frontmatterSharpRemoteImageUrlArrayField].map((url) => (0, gatsby_source_filesystem_1.createRemoteFileNode)({ url, createNode, createNodeId, cache, })) : []; }, }, }) || {}), markdownImageList: { type: `[File]`, resolve: async (source, _args, _context, _info) => { return Array.isArray(source.frontmatter["markdownImageList"]) ? source.frontmatter["markdownImageList"].map((url) => (0, gatsby_source_filesystem_1.createRemoteFileNode)({ url, createNode, createNodeId, cache, })) : []; }, }, }, }; const mdxTypeResolvers = { Query: { ...((options.mdxNodeTypes && typeof options.mdxNodeTypes === "object" && !Array.isArray(options.mdxNodeTypes) && Object.keys(options.mdxNodeTypes).reduce((typeNames, typeName) => ({ ...typeNames, [`mdx${typeName}`]: { type: [typeName], resolve: async (source, args, context, info) => { const { entries } = await context.nodeModel.findAll({ type: typeName }); return entries; }, }, }), {})) || {}), }, }; createResolvers({ ...imageListResolver, ...mdxTypeResolvers, }); }; exports.createResolvers = createResolvers; const onCreateNode = async (sourceArgs, options) => { // FIXME: Inprovement opportunity: Guard the imput const pluginOptions = options; const { node, actions, getNode, } = sourceArgs; const { createParentChildLink } = actions; if (node.internal.type === "Mdx") { const parentFileNode = node.parent && getNode(node.parent); const grandParentContentNode = parentFileNode && parentFileNode?.parent && getNode(parentFileNode.parent); grandParentContentNode && createParentChildLink({ parent: grandParentContentNode, child: node }); } if (!options["mdxNodeTypes"]) { throw new Error("This plugin requires mdxNodeTypes to be defined"); } const configuredMdxNodeTypes = (pluginOptions.mdxNodeTypes && Object.keys(pluginOptions.mdxNodeTypes)) || []; const isConfiguredType = configuredMdxNodeTypes && configuredMdxNodeTypes.indexOf(node.internal.type) !== -1; if (isConfiguredType) { await (0, createMdxNode_js_1.createMdxFileNode)(node, pluginOptions.mdxNodeTypes[node.internal.type], sourceArgs); } }; exports.onCreateNode = onCreateNode; //# sourceMappingURL=gatsby-node.js.map