import { patchOverlay } from "../core/errors/overlay.js"; import { createViteLoader } from "../core/module-loader/index.js"; import { createDevelopmentEnvironment } from "../core/render/dev/index.js"; import { createRouteManifest } from "../core/routing/index.js"; import { baseMiddleware } from "./base.js"; import { createController } from "./controller.js"; import { handleRequest } from "./request.js"; function createVitePluginAstroServer({ settings, logging, fs: fsMod }) { return { name: "astro:server", configureServer(viteServer) { const loader = createViteLoader(viteServer); const manifest = createDevelopmentManifest(settings); const env = createDevelopmentEnvironment(manifest, settings, logging, loader); let manifestData = createRouteManifest({ settings, fsMod }, logging); const controller = createController({ loader }); function rebuildManifest(needsManifestRebuild) { env.routeCache.clearAll(); if (needsManifestRebuild) { manifestData = createRouteManifest({ settings }, logging); } } viteServer.watcher.on("add", rebuildManifest.bind(null, true)); viteServer.watcher.on("unlink", rebuildManifest.bind(null, true)); viteServer.watcher.on("change", rebuildManifest.bind(null, false)); return () => { if (settings.config.base !== "/") { viteServer.middlewares.stack.unshift({ route: "", handle: baseMiddleware(settings, logging) }); } viteServer.middlewares.use(async function astroDevHandler(request, response) { if (request.url === void 0 || !request.method) { response.writeHead(500, "Incomplete request"); response.end(); return; } handleRequest({ env, manifestData, controller, incomingRequest: request, incomingResponse: response, manifest }); }); }; }, transform(code, id, opts = {}) { if (opts.ssr) return; if (!id.includes("vite/dist/client/client.mjs")) return; return patchOverlay(code); } }; } function createDevelopmentManifest(settings) { return { compressHTML: settings.config.compressHTML, assets: /* @__PURE__ */ new Set(), entryModules: {}, routes: [], adapterName: "", markdown: settings.config.markdown, clientDirectives: settings.clientDirectives, renderers: [], base: settings.config.base, assetsPrefix: settings.config.build.assetsPrefix, site: settings.config.site ? new URL(settings.config.base, settings.config.site).toString() : settings.config.site, componentMetadata: /* @__PURE__ */ new Map() }; } export { createDevelopmentManifest, createVitePluginAstroServer as default };