40 lines
1.1 KiB
Plaintext
40 lines
1.1 KiB
Plaintext
function routeIsRedirect(route) {
|
|
return route?.type === "redirect";
|
|
}
|
|
function routeIsFallback(route) {
|
|
return route?.type === "fallback";
|
|
}
|
|
function redirectRouteGenerate(redirectRoute, data) {
|
|
const routeData = redirectRoute.redirectRoute;
|
|
const route = redirectRoute.redirect;
|
|
if (typeof routeData !== "undefined") {
|
|
return routeData?.generate(data) || routeData?.pathname || "/";
|
|
} else if (typeof route === "string") {
|
|
let target = route;
|
|
for (const param of Object.keys(data)) {
|
|
const paramValue = data[param];
|
|
target = target.replace(`[${param}]`, paramValue);
|
|
target = target.replace(`[...${param}]`, paramValue);
|
|
}
|
|
return target;
|
|
} else if (typeof route === "undefined") {
|
|
return "/";
|
|
}
|
|
return route.destination;
|
|
}
|
|
function redirectRouteStatus(redirectRoute, method = "GET") {
|
|
const routeData = redirectRoute.redirectRoute;
|
|
if (routeData && typeof redirectRoute.redirect === "object") {
|
|
return redirectRoute.redirect.status;
|
|
} else if (method !== "GET") {
|
|
return 308;
|
|
}
|
|
return 301;
|
|
}
|
|
export {
|
|
redirectRouteGenerate,
|
|
redirectRouteStatus,
|
|
routeIsFallback,
|
|
routeIsRedirect
|
|
};
|