feat: content prop types for markdoc!
This commit is contained in:
parent
eb750e96bd
commit
2220c1ab52
2 changed files with 36 additions and 13 deletions
|
@ -5,24 +5,27 @@ import { parseFrontmatter } from './utils.js';
|
|||
import { fileURLToPath } from 'node:url';
|
||||
import fs from 'node:fs';
|
||||
|
||||
const contentEntryType = {
|
||||
extensions: ['.mdoc'],
|
||||
async getEntryInfo({ fileUrl, contents }: { fileUrl: URL; contents: string }) {
|
||||
const parsed = parseFrontmatter(contents, fileURLToPath(fileUrl));
|
||||
return {
|
||||
data: parsed.data,
|
||||
body: parsed.content,
|
||||
slug: parsed.data.slug,
|
||||
rawData: parsed.matter,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
export default function markdoc(): AstroIntegration {
|
||||
return {
|
||||
name: '@astrojs/markdoc',
|
||||
hooks: {
|
||||
'astro:config:setup': async ({ updateConfig, config, addContentEntryType, command }: any) => {
|
||||
const contentEntryType = {
|
||||
extensions: ['.mdoc'],
|
||||
async getEntryInfo({ fileUrl, contents }: { fileUrl: URL; contents: string }) {
|
||||
const parsed = parseFrontmatter(contents, fileURLToPath(fileUrl));
|
||||
return {
|
||||
data: parsed.data,
|
||||
body: parsed.content,
|
||||
slug: parsed.data.slug,
|
||||
rawData: parsed.matter,
|
||||
};
|
||||
},
|
||||
contentModuleTypes: await fs.promises.readFile(
|
||||
new URL('../template/content-module-types.d.ts', import.meta.url),
|
||||
'utf-8'
|
||||
),
|
||||
};
|
||||
addContentEntryType(contentEntryType);
|
||||
|
||||
const markdocConfigUrl = new URL('./markdoc.config', config.srcDir);
|
||||
|
|
20
packages/integrations/markdoc/template/content-module-types.d.ts
vendored
Normal file
20
packages/integrations/markdoc/template/content-module-types.d.ts
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
declare module 'astro:content' {
|
||||
type ComponentRenderer =
|
||||
| import('astro').ComponentInstance['default']
|
||||
| {
|
||||
component: import('astro').ComponentInstance['default'];
|
||||
props?(params: {
|
||||
attributes: Record<string, any>;
|
||||
getTreeNode(): import('@markdoc/markdoc').Tag;
|
||||
}): Record<string, any>;
|
||||
};
|
||||
|
||||
interface Render {
|
||||
'.mdoc': Promise<{
|
||||
Content(props: {
|
||||
config?: import('@markdoc/markdoc').Config;
|
||||
components?: Record<string, ComponentRenderer>;
|
||||
}): import('astro').MarkdownInstance<{}>['Content'];
|
||||
}>;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue