kjelsrud.dev/node_modules/astro/dist/vite-plugin-astro-server/request.js

84 lines
2.7 KiB
JavaScript
Raw Normal View History

2023-07-19 21:31:30 +02:00
import { collectErrorMetadata } from "../core/errors/dev/index.js";
import { createSafeError } from "../core/errors/index.js";
import { error } from "../core/logger/core.js";
import * as msg from "../core/messages.js";
import { removeTrailingForwardSlash } from "../core/path.js";
import { eventError, telemetry } from "../events/index.js";
import { isServerLikeOutput } from "../prerender/utils.js";
import { runWithErrorHandling } from "./controller.js";
import { handle500Response } from "./response.js";
import { handleRoute, matchRoute } from "./route.js";
async function handleRequest({
env,
manifestData,
controller,
incomingRequest,
incomingResponse,
manifest
}) {
const { settings, loader: moduleLoader } = env;
const { config } = settings;
const origin = `${moduleLoader.isHttps() ? "https" : "http"}://${incomingRequest.headers.host}`;
const buildingToSSR = isServerLikeOutput(config);
const url = new URL(origin + incomingRequest.url);
let pathname;
if (config.trailingSlash === "never" && !incomingRequest.url) {
pathname = "";
} else {
pathname = decodeURI(url.pathname);
}
url.pathname = removeTrailingForwardSlash(config.base) + url.pathname;
if (!buildingToSSR && pathname !== "/_image") {
const allSearchParams = Array.from(url.searchParams);
for (const [key] of allSearchParams) {
url.searchParams.delete(key);
}
}
let body = void 0;
if (!(incomingRequest.method === "GET" || incomingRequest.method === "HEAD")) {
let bytes = [];
await new Promise((resolve) => {
incomingRequest.on("data", (part) => {
bytes.push(part);
});
incomingRequest.on("end", resolve);
});
body = Buffer.concat(bytes);
}
await runWithErrorHandling({
controller,
pathname,
async run() {
const matchedRoute = await matchRoute(pathname, env, manifestData);
const resolvedPathname = (matchedRoute == null ? void 0 : matchedRoute.resolvedPathname) ?? pathname;
return await handleRoute({
matchedRoute,
url,
pathname: resolvedPathname,
body,
origin,
env,
manifestData,
incomingRequest,
incomingResponse,
manifest
});
},
onError(_err) {
const err = createSafeError(_err);
try {
env.loader.fixStacktrace(err);
} catch {
}
const errorWithMetadata = collectErrorMetadata(err, config.root);
telemetry.record(eventError({ cmd: "dev", err: errorWithMetadata, isFatal: false }));
error(env.logging, null, msg.formatErrorMessage(errorWithMetadata));
handle500Response(moduleLoader, incomingResponse, errorWithMetadata);
return err;
}
});
}
export {
handleRequest
};