astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
33 lines (32 loc) • 1.08 kB
JavaScript
async function renderRedirect(renderContext) {
const {
request: { method },
routeData
} = renderContext;
const { redirect, redirectRoute } = routeData;
const status = redirectRoute && typeof redirect === "object" ? redirect.status : method === "GET" ? 301 : 308;
const headers = { location: encodeURI(redirectRouteGenerate(renderContext)) };
return new Response(null, { status, headers });
}
function redirectRouteGenerate(renderContext) {
const {
params,
routeData: { redirect, redirectRoute }
} = renderContext;
if (typeof redirectRoute !== "undefined") {
return redirectRoute?.generate(params) || redirectRoute?.pathname || "/";
} else if (typeof redirect === "string") {
let target = redirect;
for (const param of Object.keys(params)) {
const paramValue = params[param];
target = target.replace(`[${param}]`, paramValue).replace(`[...${param}]`, paramValue);
}
return target;
} else if (typeof redirect === "undefined") {
return "/";
}
return redirect.destination;
}
export {
renderRedirect
};