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

81 lines 4.41 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createMdxFileNode = void 0; const gatsby_source_filesystem_1 = require("gatsby-source-filesystem"); const yaml_1 = __importDefault(require("yaml")); const extractUrlAndReplaceWithGatsbyImage_js_1 = require("./extractUrlAndReplaceWithGatsbyImage.js"); const recurseFieldContent = (nodeData, objectFieldSequence) => { if (objectFieldSequence.length === 0 || !nodeData) { return nodeData; } else { const fieldName = objectFieldSequence[0]; if (Array.isArray(nodeData)) { return recurseFieldContent(nodeData[0], objectFieldSequence); } else if (!Array.isArray(nodeData) && typeof nodeData === "object") { const fields = objectFieldSequence.slice(1); const childNodeData = nodeData[fieldName]; return recurseFieldContent(childNodeData, fields); } else { return undefined; } } }; const cacheMdxImages = async ({ pushImageUrlList, className }, content) => { const remark = (await import("remark")).remark; const urlList = []; const pushImageUrlToList = (value) => urlList.push(value); const getUrlListLength = () => urlList.length; const file = await remark().use(extractUrlAndReplaceWithGatsbyImage_js_1.extractUrlAndReplaceWithGatsbyImage, { pushImageUrlToList, getUrlListLength, className }).process(content); const mdx = "\n\n\n" + String(file); urlList.forEach((url) => pushImageUrlList(url)); return mdx; }; const createMdxFileNode = async (nodeData, typeConfig, args) => { const { actions, createNodeId, getCache } = args; const { createNode } = actions; const urlList = []; const isPreprocessImagesEnabled = typeConfig.preprocessImages === undefined || typeConfig.preprocessImages; const mdxProcessedFieldData = await getMdx(typeConfig, nodeData, isPreprocessImagesEnabled, (value) => urlList.push(value)); const frontmatter = getMdxFrontmatter(typeConfig, nodeData, urlList); const gatsbyImageImport = isPreprocessImagesEnabled && mdxProcessedFieldData && mdxProcessedFieldData.indexOf("import { GatsbyImage, getImage") === -1 && mdxProcessedFieldData.indexOf("import { getImage, GatsbyImage") === -1 ? 'import { GatsbyImage, getImage } from "gatsby-plugin-image"' : ""; const mdxContentWithFrontmatter = `${(typeConfig.mdxFrontmatterField && frontmatter) || ""}\n\n${gatsbyImageImport}\n\n${mdxProcessedFieldData}`; if (mdxContentWithFrontmatter) { return (0, gatsby_source_filesystem_1.createFileNodeFromBuffer)({ buffer: Buffer.from(mdxContentWithFrontmatter), ext: ".mdx", parentNodeId: nodeData.id, getCache: getCache, createNode: createNode, createNodeId: createNodeId, }); } }; exports.createMdxFileNode = createMdxFileNode; async function getMdx(typeConfig, nodeData, isPreprocessImagesEnabled, pushImageUrlList) { const mdxField = typeConfig.mdxField; const className = typeConfig.gatsbyImageClassName ?? ""; const mdxFields = mdxField ? mdxField.split(".") : undefined; const mdxFieldData = mdxFields && `\n${recurseFieldContent(nodeData, mdxFields) ?? ""}`; const mdxProcessedFieldData = isPreprocessImagesEnabled && mdxFieldData ? await cacheMdxImages({ pushImageUrlList, className }, mdxFieldData) : mdxFieldData; return mdxProcessedFieldData; } function getMdxFrontmatter(typeConfig, nodeData, urlList) { const frontmatterField = typeConfig.mdxFrontmatterField; const frontmatterFields = (frontmatterField && (frontmatterField.indexOf(".") !== -1 ? frontmatterField.split(".") : [frontmatterField])) || undefined; const recursedFrontmatterFieldData = frontmatterFields && recurseFieldContent(nodeData, frontmatterFields); const frontmatterFieldData = (recursedFrontmatterFieldData && typeof recursedFrontmatterFieldData !== "string" && recursedFrontmatterFieldData) || undefined; const frontmatter = frontmatterFieldData && `---\n${yaml_1.default.stringify({ ...frontmatterFieldData, markdownImageList: urlList })}---\n`; return frontmatter; } //# sourceMappingURL=createMdxNode.js.map