astro-ghostcms/.pnpm-store/v3/files/a9/b99e5920a606713238f2453beb2...

121 lines
4.3 KiB
Plaintext
Raw Normal View History

2024-02-14 14:10:47 +00:00
import { patchOverlay } from "../core/errors/overlay.js";
import { createViteLoader } from "../core/module-loader/index.js";
import { createRouteManifest } from "../core/routing/index.js";
import { baseMiddleware } from "./base.js";
import { createController } from "./controller.js";
import DevPipeline from "./devPipeline.js";
import { handleRequest } from "./request.js";
import { AstroError, AstroErrorData } from "../core/errors/index.js";
import { getViteErrorPayload } from "../core/errors/dev/index.js";
import { AsyncLocalStorage } from "node:async_hooks";
import { IncomingMessage } from "node:http";
import { setRouteError } from "./server-state.js";
import { recordServerError } from "./error.js";
function createVitePluginAstroServer({
settings,
logger,
fs: fsMod
}) {
return {
name: "astro:server",
configureServer(viteServer) {
const loader = createViteLoader(viteServer);
const manifest = createDevelopmentManifest(settings);
const pipeline = new DevPipeline({ logger, manifest, settings, loader });
let manifestData = createRouteManifest({ settings, fsMod }, logger);
const controller = createController({ loader });
const localStorage = new AsyncLocalStorage();
function rebuildManifest(needsManifestRebuild) {
pipeline.clearRouteCache();
if (needsManifestRebuild) {
manifestData = createRouteManifest({ settings }, logger);
}
}
viteServer.watcher.on("add", rebuildManifest.bind(null, true));
viteServer.watcher.on("unlink", rebuildManifest.bind(null, true));
viteServer.watcher.on("change", rebuildManifest.bind(null, false));
function handleUnhandledRejection(rejection) {
const error = new AstroError({
...AstroErrorData.UnhandledRejection,
message: AstroErrorData.UnhandledRejection.message(rejection?.stack || rejection)
});
const store = localStorage.getStore();
if (store instanceof IncomingMessage) {
const request = store;
setRouteError(controller.state, request.url, error);
}
const { errorWithMetadata } = recordServerError(loader, settings.config, pipeline, error);
setTimeout(
async () => loader.webSocketSend(await getViteErrorPayload(errorWithMetadata)),
200
);
}
process.on("unhandledRejection", handleUnhandledRejection);
return () => {
viteServer.middlewares.stack.unshift({
route: "",
handle: baseMiddleware(settings, logger)
});
viteServer.middlewares.use(async function astroDevHandler(request, response) {
if (request.url === void 0 || !request.method) {
response.writeHead(500, "Incomplete request");
response.end();
return;
}
localStorage.run(request, () => {
handleRequest({
pipeline,
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) {
let i18nManifest = void 0;
if (settings.config.i18n) {
i18nManifest = {
fallback: settings.config.i18n.fallback,
routing: settings.config.i18n.routing,
defaultLocale: settings.config.i18n.defaultLocale,
locales: settings.config.i18n.locales
};
}
return {
trailingSlash: settings.config.trailingSlash,
buildFormat: settings.config.build.format,
compressHTML: settings.config.compressHTML,
assets: /* @__PURE__ */ new Set(),
entryModules: {},
routes: [],
adapterName: "",
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(),
i18n: i18nManifest,
middleware(_, next) {
return next();
}
};
}
export {
createDevelopmentManifest,
createVitePluginAstroServer as default
};