diff options
author | 2025-06-05 14:25:23 +0000 | |
---|---|---|
committer | 2025-06-05 14:25:23 +0000 | |
commit | e586d7d704d475afe3373a1de6ae20d504f79d6d (patch) | |
tree | 7e3fa24807cebd48a86bd40f866d792181191ee9 /packages/integrations/markdoc/src/index.ts | |
download | astro-e586d7d704d475afe3373a1de6ae20d504f79d6d.tar.gz astro-e586d7d704d475afe3373a1de6ae20d504f79d6d.tar.zst astro-e586d7d704d475afe3373a1de6ae20d504f79d6d.zip |
Sync from a8e1c0a7402940e0fc5beef669522b315052df1blatest
Diffstat (limited to 'packages/integrations/markdoc/src/index.ts')
-rw-r--r-- | packages/integrations/markdoc/src/index.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/packages/integrations/markdoc/src/index.ts b/packages/integrations/markdoc/src/index.ts new file mode 100644 index 000000000..d328d4a8d --- /dev/null +++ b/packages/integrations/markdoc/src/index.ts @@ -0,0 +1,49 @@ +import type { AstroConfig, AstroIntegration, ContentEntryType, HookParameters } from 'astro'; +import { getContentEntryType } from './content-entry-type.js'; +import { + type MarkdocConfigResult, + SUPPORTED_MARKDOC_CONFIG_FILES, + loadMarkdocConfig, +} from './load-config.js'; +import type { MarkdocIntegrationOptions } from './options.js'; + +type SetupHookParams = HookParameters<'astro:config:setup'> & { + // `contentEntryType` is not a public API + // Add type defs here + addContentEntryType: (contentEntryType: ContentEntryType) => void; +}; + +export default function markdocIntegration(options?: MarkdocIntegrationOptions): AstroIntegration { + let markdocConfigResult: MarkdocConfigResult | undefined; + let astroConfig: AstroConfig; + return { + name: '@astrojs/markdoc', + hooks: { + 'astro:config:setup': async (params) => { + const { updateConfig, addContentEntryType } = params as SetupHookParams; + astroConfig = params.config; + + markdocConfigResult = await loadMarkdocConfig(astroConfig); + + addContentEntryType( + await getContentEntryType({ markdocConfigResult, astroConfig, options }), + ); + + updateConfig({ + vite: { + ssr: { + external: ['@astrojs/markdoc/prism', '@astrojs/markdoc/shiki'], + }, + }, + }); + }, + 'astro:server:setup': async ({ server }) => { + server.watcher.on('all', (_event, entry) => { + if (SUPPORTED_MARKDOC_CONFIG_FILES.some((f) => entry.endsWith(f))) { + server.restart(); + } + }); + }, + }, + }; +} |