import path from 'path' import { createServer as createViteServer, cachedRead, ServerConfig, ServerPlugin } from 'vite' import { resolveConfig, SiteConfig, resolveSiteData } from './config' import { createMarkdownToVueRenderFn } from './markdownToVue' import { APP_PATH, SITE_DATA_REQUEST_PATH } from './resolver' const debug = require('debug')('vitepress:serve') const debugHmr = require('debug')('vitepress:hmr') function createVitePressPlugin({ configPath, site: initialSiteData }: SiteConfig): ServerPlugin { return ({ app, root, watcher, resolver }) => { const markdownToVue = createMarkdownToVueRenderFn(root) // hot reload .md files as .vue files watcher.on('change', async (file) => { if (file.endsWith('.md')) { debugHmr(`reloading ${file}`) const content = await cachedRead(null, file) const timestamp = Date.now() const { pageData, vueSrc } = markdownToVue( content.toString(), file, timestamp, // do not inject pageData on HMR // it leads to vite to think