UNPKG

@studiocms/md

Version:

Add Markdown Support to your StudioCMS project with ease!

86 lines (85 loc) 2.97 kB
import { addVirtualImports, createResolver } from "astro-integration-kit"; import { definePlugin } from "studiocms/plugins"; import { shared } from "./lib/shared.js"; import { MarkdownSchema } from "./types.js"; const packageIdentifier = "@studiocms/md"; function internalMarkdownIntegration(options) { const { resolve } = createResolver(import.meta.url); const internalRenderer = resolve("./lib/markdown-prerender.js"); const parseResult = MarkdownSchema.safeParse(options); if (!parseResult.success) { throw new Error(`Invalid markdown options: ${parseResult.error.message}`); } const resolvedOptions = parseResult.data; let resolvedCalloutTheme; if (resolvedOptions?.flavor === "studiocms" && typeof resolvedOptions.callouts === "string") { resolvedCalloutTheme = resolve(`./styles/md-remark-callouts/${resolvedOptions.callouts}.css`); } else { resolvedCalloutTheme = void 0; } return { name: packageIdentifier, hooks: { "astro:config:setup": (params) => { addVirtualImports(params, { name: packageIdentifier, imports: { "studiocms:md/config": ` export const config = ${JSON.stringify(resolvedOptions)}; export default config; `, "studiocms:md/pre-render": ` export { preRender } from '${internalRenderer}'; `, "studiocms:md/styles": ` import '${resolve("./styles/md-remark-headings.css")}'; ${resolvedCalloutTheme ? `import '${resolvedCalloutTheme}';` : ""} ` } }); if (resolvedOptions?.flavor === "studiocms") { params.injectScript("page-ssr", `import "studiocms:md/styles";`); } }, "astro:config:done": ({ config }) => { shared.mdConfig = resolvedOptions; shared.astroMDRemark = config.markdown; } } }; } function studiocmsMD(options) { const { resolve } = createResolver(import.meta.url); const parseResult = MarkdownSchema.safeParse(options); if (!parseResult.success) { throw new Error(`Invalid markdown options: ${parseResult.error.message}`); } const resolvedOptions = parseResult.data; const markdownPageType = { identifier: "studiocms/markdown", label: "Markdown", rendererComponent: resolve("./components/render.js"), pageContentComponent: resolve("./components/markdown-editor.astro") }; return definePlugin({ identifier: packageIdentifier, name: "StudioCMS Markdown", studiocmsMinimumVersion: "0.1.0-beta.21", hooks: { "studiocms:astro:config": ({ addIntegrations }) => { addIntegrations(internalMarkdownIntegration(resolvedOptions)); }, "studiocms:config:setup": ({ setRendering }) => { setRendering({ pageTypes: [markdownPageType] }); } } }); } var index_default = studiocmsMD; export { index_default as default, internalMarkdownIntegration, studiocmsMD };