@studiocms/markdoc
Version:
Add MarkDoc Support to your StudioCMS project with ease!
75 lines (73 loc) • 2.27 kB
JavaScript
import { addVirtualImports, createResolver } from "astro-integration-kit";
import { definePlugin } from "studiocms/plugins";
import { shared } from "./lib/shared.js";
function internalMarkDocIntegration(packageIdentifier, options) {
const { resolve } = createResolver(import.meta.url);
const internalRenderer = resolve("./lib/render.js");
const resolvedOptions = {
type: options?.type || "html",
argParse: options?.argParse,
transformConfig: options?.transformConfig
};
return {
name: packageIdentifier,
hooks: {
"astro:config:setup": (params) => {
addVirtualImports(params, {
name: packageIdentifier,
imports: {
"studiocms:markdoc/renderer": `
import { renderMarkDoc as _render } from '${internalRenderer}';
export const renderMarkDoc = _render;
export default renderMarkDoc;
`
}
});
},
"astro:config:done": () => {
shared.markDocConfig = resolvedOptions;
}
}
};
}
function studiocmsMarkDoc(options) {
const { resolve } = createResolver(import.meta.url);
const packageIdentifier = "@studiocms/markdoc";
const renderer = resolve("./components/render.js");
const editor = resolve("./components/editor.astro");
const resolvedOptions = {
type: options?.type || "html",
argParse: options?.argParse,
transformConfig: options?.transformConfig
};
return definePlugin({
identifier: packageIdentifier,
name: "StudioCMS MarkDoc",
studiocmsMinimumVersion: "0.1.0-beta.21",
requires: ["@studiocms/md"],
hooks: {
"studiocms:astro:config": ({ addIntegrations }) => {
addIntegrations(internalMarkDocIntegration(packageIdentifier, resolvedOptions));
},
"studiocms:config:setup": ({ setRendering }) => {
setRendering({
pageTypes: [
// Define the MarkDoc page type
{
identifier: "studiocms/markdoc",
label: "MarkDoc",
pageContentComponent: editor,
rendererComponent: renderer
}
]
});
}
}
});
}
var index_default = studiocmsMarkDoc;
export {
index_default as default,
internalMarkDocIntegration,
studiocmsMarkDoc
};