@studiocms/md
Version:
Add Markdown Support to your StudioCMS project with ease!
86 lines (85 loc) • 2.97 kB
JavaScript
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
};