kjelsrud.dev/node_modules/astro/dist/vite-plugin-astro-server/plugin.js
2023-07-19 21:31:30 +02:00

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
};