82 lines
2.8 KiB
JavaScript
82 lines
2.8 KiB
JavaScript
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
|
|
};
|