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
JavaScript
;
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