@studiocms/mdx
Version:
Add MDX Support to your StudioCMS project with ease!
78 lines (76 loc) • 2.45 kB
JavaScript
import { addVirtualImports, createResolver } from "astro-integration-kit";
import { definePlugin } from "studiocms/plugins";
import { shared } from "./lib/shared.js";
function internalMDXIntegration(packageIdentifier, options) {
const { resolve } = createResolver(import.meta.url);
const internalRenderer = resolve("./lib/render.js");
const resolvedOptions = {
remarkPlugins: options?.remarkPlugins || [],
rehypePlugins: options?.rehypePlugins || [],
recmaPlugins: options?.recmaPlugins || [],
remarkRehypeOptions: options?.remarkRehypeOptions || {}
};
return {
name: packageIdentifier,
hooks: {
"astro:config:setup": (params) => {
addVirtualImports(params, {
name: packageIdentifier,
imports: {
"studiocms:mdx/renderer": `
import { renderMDX as _render } from '${internalRenderer}';
export const renderMDX = _render;
export default renderMDX;
`
}
});
},
"astro:config:done": () => {
shared.mdxConfig = resolvedOptions;
}
}
};
}
function studiocmsMDX(options) {
const { resolve } = createResolver(import.meta.url);
const packageIdentifier = "@studiocms/mdx";
const renderer = resolve("./components/MDXRenderer.astro");
const editor = resolve("./components/editor.astro");
const internalRenderer = resolve("./lib/render.js");
const resolvedOptions = {
remarkPlugins: options?.remarkPlugins || [],
rehypePlugins: options?.rehypePlugins || [],
recmaPlugins: options?.recmaPlugins || [],
remarkRehypeOptions: options?.remarkRehypeOptions || {}
};
return definePlugin({
identifier: packageIdentifier,
name: "StudioCMS MDX",
studiocmsMinimumVersion: "0.1.0-beta.21",
requires: ["@studiocms/md"],
hooks: {
"studiocms:astro:config": ({ addIntegrations }) => {
addIntegrations(internalMDXIntegration(packageIdentifier, resolvedOptions));
},
"studiocms:config:setup": ({ setRendering }) => {
setRendering({
pageTypes: [
// Define the MDX page type
{
identifier: "studiocms/mdx",
label: "MDX",
pageContentComponent: editor,
rendererComponent: renderer
}
]
});
}
}
});
}
var index_default = studiocmsMDX;
export {
index_default as default,
internalMDXIntegration,
studiocmsMDX
};