mirror of
https://github.com/withastro/astro.git
synced 2024-12-16 21:46:22 -05:00
feat: restart server on markdoc config change (#7467)
* deps: vite-plugin-restart * feat: restart on markdoc config change * chore: changeset * chore: roll our own restarter! * deps: remove vite-plugin-restart * refactor: use good enough option
This commit is contained in:
parent
2726098bc8
commit
f6feff7a29
3 changed files with 20 additions and 19 deletions
5
.changeset/wet-apples-smoke.md
Normal file
5
.changeset/wet-apples-smoke.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'@astrojs/markdoc': patch
|
||||
---
|
||||
|
||||
Restart the dev server whenever your markdoc config changes.
|
|
@ -4,7 +4,7 @@ import Markdoc from '@markdoc/markdoc';
|
|||
import type { AstroConfig, AstroIntegration, ContentEntryType, HookParameters } from 'astro';
|
||||
import crypto from 'node:crypto';
|
||||
import fs from 'node:fs';
|
||||
import { fileURLToPath, pathToFileURL } from 'node:url';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import {
|
||||
hasContentFlag,
|
||||
isValidUrl,
|
||||
|
@ -15,11 +15,15 @@ import {
|
|||
} from './utils.js';
|
||||
// @ts-expect-error Cannot find module 'astro/assets' or its corresponding type declarations.
|
||||
import { emitESMImage } from 'astro/assets';
|
||||
import { bold, red, yellow } from 'kleur/colors';
|
||||
import { bold, red } from 'kleur/colors';
|
||||
import path from 'node:path';
|
||||
import type * as rollup from 'rollup';
|
||||
import { normalizePath } from 'vite';
|
||||
import { loadMarkdocConfig, type MarkdocConfigResult } from './load-config.js';
|
||||
import {
|
||||
loadMarkdocConfig,
|
||||
SUPPORTED_MARKDOC_CONFIG_FILES,
|
||||
type MarkdocConfigResult,
|
||||
} from './load-config.js';
|
||||
import { setupConfig } from './runtime.js';
|
||||
|
||||
type SetupHookParams = HookParameters<'astro:config:setup'> & {
|
||||
|
@ -45,15 +49,13 @@ export default function markdocIntegration(legacyConfig?: any): AstroIntegration
|
|||
}
|
||||
let markdocConfigResult: MarkdocConfigResult | undefined;
|
||||
let markdocConfigResultId = '';
|
||||
let astroConfig: AstroConfig;
|
||||
return {
|
||||
name: '@astrojs/markdoc',
|
||||
hooks: {
|
||||
'astro:config:setup': async (params) => {
|
||||
const {
|
||||
config: astroConfig,
|
||||
updateConfig,
|
||||
addContentEntryType,
|
||||
} = params as SetupHookParams;
|
||||
const { updateConfig, addContentEntryType } = params as SetupHookParams;
|
||||
astroConfig = params.config;
|
||||
|
||||
markdocConfigResult = await loadMarkdocConfig(astroConfig);
|
||||
if (markdocConfigResult) {
|
||||
|
@ -203,12 +205,10 @@ export const Content = createComponent({
|
|||
}
|
||||
|
||||
updateConfig({
|
||||
vite: {
|
||||
vite: {
|
||||
ssr: {
|
||||
external: ['@astrojs/markdoc/prism', '@astrojs/markdoc/shiki'],
|
||||
},
|
||||
},
|
||||
build: {
|
||||
rollupOptions,
|
||||
},
|
||||
|
@ -233,12 +233,8 @@ export const Content = createComponent({
|
|||
},
|
||||
'astro:server:setup': async ({ server }) => {
|
||||
server.watcher.on('all', (event, entry) => {
|
||||
if (prependForwardSlash(pathToFileURL(entry).pathname) === markdocConfigResultId) {
|
||||
console.log(
|
||||
yellow(
|
||||
`${bold('[Markdoc]')} Restart the dev server for config changes to take effect.`
|
||||
)
|
||||
);
|
||||
if (SUPPORTED_MARKDOC_CONFIG_FILES.some((f) => entry.endsWith(f))) {
|
||||
server.restart();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
|
|
@ -4,7 +4,7 @@ import * as fs from 'node:fs';
|
|||
import { fileURLToPath } from 'node:url';
|
||||
import type { AstroMarkdocConfig } from './config.js';
|
||||
|
||||
const SUPPORTED_MARKDOC_CONFIG_FILES = [
|
||||
export const SUPPORTED_MARKDOC_CONFIG_FILES = [
|
||||
'markdoc.config.js',
|
||||
'markdoc.config.mjs',
|
||||
'markdoc.config.mts',
|
||||
|
|
Loading…
Reference in a new issue