full site update
This commit is contained in:
72
node_modules/astro/dist/vite-plugin-astro-server/route.js
generated
vendored
72
node_modules/astro/dist/vite-plugin-astro-server/route.js
generated
vendored
@@ -1,33 +1,36 @@
|
||||
import { loadActions } from "../actions/loadActions.js";
|
||||
import {
|
||||
clientLocalsSymbol,
|
||||
DEFAULT_404_COMPONENT,
|
||||
NOOP_MIDDLEWARE_HEADER,
|
||||
REROUTE_DIRECTIVE_HEADER,
|
||||
REWRITE_DIRECTIVE_HEADER_KEY,
|
||||
clientLocalsSymbol
|
||||
REWRITE_DIRECTIVE_HEADER_KEY
|
||||
} from "../core/constants.js";
|
||||
import { AstroErrorData, isAstroError } from "../core/errors/index.js";
|
||||
import { req } from "../core/messages.js";
|
||||
import { loadMiddleware } from "../core/middleware/loadMiddleware.js";
|
||||
import { RenderContext } from "../core/render-context.js";
|
||||
import { routeIsRedirect } from "../core/redirects/index.js";
|
||||
import { getProps } from "../core/render/index.js";
|
||||
import { RenderContext } from "../core/render-context.js";
|
||||
import { createRequest } from "../core/request.js";
|
||||
import { redirectTemplate } from "../core/routing/3xx.js";
|
||||
import { matchAllRoutes } from "../core/routing/index.js";
|
||||
import { isRoute404, isRoute500 } from "../core/routing/match.js";
|
||||
import { PERSIST_SYMBOL } from "../core/session.js";
|
||||
import { getSortedPreloadedMatches } from "../prerender/routing.js";
|
||||
import { writeSSRResult, writeWebResponse } from "./response.js";
|
||||
function isLoggedRequest(url) {
|
||||
return url !== "/favicon.ico";
|
||||
}
|
||||
function getCustom404Route(manifestData) {
|
||||
const route404 = /^\/404\/?$/;
|
||||
return manifestData.routes.find((r) => route404.test(r.route));
|
||||
return manifestData.routes.find((r) => isRoute404(r.route));
|
||||
}
|
||||
function getCustom500Route(manifestData) {
|
||||
const route500 = /^\/500\/?$/;
|
||||
return manifestData.routes.find((r) => route500.test(r.route));
|
||||
return manifestData.routes.find((r) => isRoute500(r.route));
|
||||
}
|
||||
async function matchRoute(pathname, manifestData, pipeline) {
|
||||
async function matchRoute(pathname, routesList, pipeline) {
|
||||
const { config, logger, routeCache, serverLike, settings } = pipeline;
|
||||
const matches = matchAllRoutes(pathname, manifestData);
|
||||
const matches = matchAllRoutes(pathname, routesList);
|
||||
const preloadedMatches = await getSortedPreloadedMatches({ pipeline, matches, settings });
|
||||
for await (const { preloadedComponent, route: maybeRoute, filePath } of preloadedMatches) {
|
||||
try {
|
||||
@@ -37,7 +40,8 @@ async function matchRoute(pathname, manifestData, pipeline) {
|
||||
routeCache,
|
||||
pathname,
|
||||
logger,
|
||||
serverLike
|
||||
serverLike,
|
||||
base: config.base
|
||||
});
|
||||
return {
|
||||
route: maybeRoute,
|
||||
@@ -55,7 +59,7 @@ async function matchRoute(pathname, manifestData, pipeline) {
|
||||
}
|
||||
const altPathname = pathname.replace(/\/index\.html$/, "/").replace(/\.html$/, "");
|
||||
if (altPathname !== pathname) {
|
||||
return await matchRoute(altPathname, manifestData, pipeline);
|
||||
return await matchRoute(altPathname, routesList, pipeline);
|
||||
}
|
||||
if (matches.length) {
|
||||
const possibleRoutes = matches.flatMap((route) => route.component);
|
||||
@@ -68,7 +72,7 @@ async function matchRoute(pathname, manifestData, pipeline) {
|
||||
${AstroErrorData.NoMatchingStaticPathFound.hint(possibleRoutes)}`
|
||||
);
|
||||
}
|
||||
const custom404 = getCustom404Route(manifestData);
|
||||
const custom404 = getCustom404Route(routesList);
|
||||
if (custom404) {
|
||||
const filePath = new URL(`./${custom404.component}`, config.root);
|
||||
const preloadedComponent = await pipeline.preload(custom404, filePath);
|
||||
@@ -88,7 +92,7 @@ async function handleRoute({
|
||||
pathname,
|
||||
body,
|
||||
pipeline,
|
||||
manifestData,
|
||||
routesList,
|
||||
incomingRequest,
|
||||
incomingResponse
|
||||
}) {
|
||||
@@ -101,19 +105,20 @@ async function handleRoute({
|
||||
let renderContext;
|
||||
let mod = void 0;
|
||||
let route;
|
||||
const actions = await loadActions(loader);
|
||||
pipeline.setActions(actions);
|
||||
const middleware = (await loadMiddleware(loader)).onRequest;
|
||||
const locals = Reflect.get(incomingRequest, clientLocalsSymbol);
|
||||
const { preloadedComponent } = matchedRoute;
|
||||
route = matchedRoute.route;
|
||||
request = createRequest({
|
||||
base: config.base,
|
||||
url,
|
||||
headers: incomingRequest.headers,
|
||||
method: incomingRequest.method,
|
||||
body,
|
||||
logger,
|
||||
clientAddress: incomingRequest.socket.remoteAddress,
|
||||
staticLike: config.output === "static" || route.prerender
|
||||
isPrerendered: route.prerender,
|
||||
routePattern: route.component
|
||||
});
|
||||
for (const [name, value] of Object.entries(config.server.headers ?? {})) {
|
||||
if (value) incomingResponse.setHeader(name, value);
|
||||
@@ -125,7 +130,9 @@ async function handleRoute({
|
||||
pathname,
|
||||
middleware: isDefaultPrerendered404(matchedRoute.route) ? void 0 : middleware,
|
||||
request,
|
||||
routeData: route
|
||||
routeData: route,
|
||||
clientAddress: incomingRequest.socket.remoteAddress,
|
||||
actions
|
||||
});
|
||||
let response;
|
||||
let statusCode = 200;
|
||||
@@ -145,7 +152,7 @@ async function handleRoute({
|
||||
!response.headers.has(NOOP_MIDDLEWARE_HEADER) && !isReroute ? response.status : statusCodedMatched ?? response.status
|
||||
);
|
||||
} catch (err) {
|
||||
const custom500 = getCustom500Route(manifestData);
|
||||
const custom500 = getCustom500Route(routesList);
|
||||
if (!custom500) {
|
||||
throw err;
|
||||
}
|
||||
@@ -155,6 +162,8 @@ async function handleRoute({
|
||||
renderContext.props.error = err;
|
||||
response = await renderContext.render(preloaded500Component);
|
||||
statusCode = 500;
|
||||
} finally {
|
||||
renderContext.session?.[PERSIST_SYMBOL]();
|
||||
}
|
||||
if (isLoggedRequest(pathname)) {
|
||||
const timeEnd = performance.now();
|
||||
@@ -169,8 +178,10 @@ async function handleRoute({
|
||||
})
|
||||
);
|
||||
}
|
||||
if (statusCode === 404 && response.headers.get(REROUTE_DIRECTIVE_HEADER) !== "no") {
|
||||
const fourOhFourRoute = await matchRoute("/404", manifestData, pipeline);
|
||||
if (statusCode === 404 && // If the body isn't null, that means the user sets the 404 status
|
||||
// but uses the current route to handle the 404
|
||||
response.body === null && response.headers.get(REROUTE_DIRECTIVE_HEADER) !== "no") {
|
||||
const fourOhFourRoute = await matchRoute("/404", routesList, pipeline);
|
||||
if (fourOhFourRoute) {
|
||||
renderContext = await RenderContext.create({
|
||||
locals,
|
||||
@@ -178,7 +189,8 @@ async function handleRoute({
|
||||
pathname,
|
||||
middleware: isDefaultPrerendered404(fourOhFourRoute.route) ? void 0 : middleware,
|
||||
request,
|
||||
routeData: fourOhFourRoute.route
|
||||
routeData: fourOhFourRoute.route,
|
||||
clientAddress: incomingRequest.socket.remoteAddress
|
||||
});
|
||||
response = await renderContext.render(fourOhFourRoute.preloadedComponent);
|
||||
}
|
||||
@@ -198,6 +210,24 @@ async function handleRoute({
|
||||
return;
|
||||
}
|
||||
if (response.status < 400 && response.status >= 300) {
|
||||
if (response.status >= 300 && response.status < 400 && routeIsRedirect(route) && !config.build.redirects && pipeline.settings.buildOutput === "static") {
|
||||
const location = response.headers.get("location");
|
||||
response = new Response(
|
||||
redirectTemplate({
|
||||
status: response.status,
|
||||
absoluteLocation: location,
|
||||
relativeLocation: location,
|
||||
from: pathname
|
||||
}),
|
||||
{
|
||||
status: 200,
|
||||
headers: {
|
||||
...response.headers,
|
||||
"content-type": "text/html"
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
await writeSSRResult(request, response, incomingResponse);
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user