From 0acd96fdde38aefa6356858f039e6fb9e679c2d8 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:31:14 +0530 Subject: [PATCH] wip --- src/node/plugins/dynamicRoutesPlugin.ts | 26 ++++++++++++------------- src/node/plugins/staticDataPlugin.ts | 4 ++-- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/node/plugins/dynamicRoutesPlugin.ts b/src/node/plugins/dynamicRoutesPlugin.ts index 11f4b64e3d20..324a4a4f4a40 100644 --- a/src/node/plugins/dynamicRoutesPlugin.ts +++ b/src/node/plugins/dynamicRoutesPlugin.ts @@ -3,11 +3,11 @@ import path from 'node:path' import c from 'picocolors' import { glob } from 'tinyglobby' import { + EnvironmentModuleNode, loadConfigFromFile, normalizePath, type Logger, - type Plugin, - type ViteDevServer + type Plugin } from 'vite' import { type SiteConfig, type UserConfig } from '../siteConfig' import { resolveRewrites } from './rewritesPlugin' @@ -96,15 +96,9 @@ export type ResolvedRouteConfig = UserRouteConfig & { export const dynamicRoutesPlugin = async ( config: SiteConfig ): Promise => { - let server: ViteDevServer - return { name: 'vitepress:dynamic-routes', - configureServer(_server) { - server = _server - }, - resolveId(id) { if (!id.endsWith('.md')) return const normalizedId = id.startsWith(config.srcDir) @@ -139,28 +133,32 @@ export const dynamicRoutesPlugin = async ( } // params are injected with special markers and extracted as part of - // __pageData in ../markdownTovue.ts + // __pageData in ../markdownToVue.ts return `__VP_PARAMS_START${JSON.stringify( params )}__VP_PARAMS_END__${baseContent}` } }, - async handleHotUpdate(ctx) { - routeModuleCache.delete(ctx.file) - const mods = config.dynamicRoutes.fileToModulesMap[ctx.file] + async hotUpdate(ctx) { + const file = ctx.file + const modules: EnvironmentModuleNode[] = [] + + const mods = config.dynamicRoutes.fileToModulesMap[file] if (mods) { // path loader module or deps updated, reset loaded routes - if (!ctx.file.endsWith('.md')) { + if (!file.endsWith('.md')) { Object.assign( config, await resolvePages(config.srcDir, config.userConfig, config.logger) ) } for (const id of mods) { - ctx.modules.push(server.moduleGraph.getModuleById(id)!) + modules.push(this.environment.moduleGraph.getModuleById(id)!) } } + + return modules.length > 0 ? [...ctx.modules, ...modules] : undefined } } } diff --git a/src/node/plugins/staticDataPlugin.ts b/src/node/plugins/staticDataPlugin.ts index 6e420ec24ccd..d4e424fbfe8c 100644 --- a/src/node/plugins/staticDataPlugin.ts +++ b/src/node/plugins/staticDataPlugin.ts @@ -70,7 +70,7 @@ export const staticDataPlugin: Plugin = { if (existing) { ;({ watch, load } = existing) } else { - // use vite's load config util as a away to load Node.js file with + // use vite's load config util as a way to load Node.js file with // TS & native ESM support const res = await loadConfigFromFile({} as any, id.replace(/\?.*$/, '')) @@ -125,8 +125,8 @@ export const staticDataPlugin: Plugin = { hotUpdate(ctx) { const file = ctx.file - const modules: EnvironmentModuleNode[] = [] + // dependency of data loader changed // (note the dep array includes the loader file itself) if (file in depToLoaderModuleIdMap) {