UNPKG

@studiocms/mdx

Version:

Add MDX Support to your StudioCMS project with ease!

78 lines (76 loc) 2.45 kB
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 };