29 lines
1.1 KiB
JavaScript
29 lines
1.1 KiB
JavaScript
import { eventHandler, sendRedirect, setHeaders } from "h3";
|
|
import defu from "defu";
|
|
import { createRouter as createRadixRouter, toRouteMatcher } from "radix3";
|
|
import { useRuntimeConfig } from "./config.mjs";
|
|
const config = useRuntimeConfig();
|
|
const _routeRulesMatcher = toRouteMatcher(createRadixRouter({ routes: config.nitro.routeRules }));
|
|
export function createRouteRulesHandler() {
|
|
return eventHandler((event) => {
|
|
const routeRules = getRouteRules(event);
|
|
if (routeRules.headers) {
|
|
setHeaders(event, routeRules.headers);
|
|
}
|
|
if (routeRules.redirect) {
|
|
return sendRedirect(event, routeRules.redirect.to, routeRules.redirect.statusCode);
|
|
}
|
|
});
|
|
}
|
|
export function getRouteRules(event) {
|
|
event.context._nitro = event.context._nitro || {};
|
|
if (!event.context._nitro.routeRules) {
|
|
const path = new URL(event.req.url, "http://localhost").pathname;
|
|
event.context._nitro.routeRules = getRouteRulesForPath(path);
|
|
}
|
|
return event.context._nitro.routeRules;
|
|
}
|
|
export function getRouteRulesForPath(path) {
|
|
return defu({}, ..._routeRulesMatcher.matchAll(path).reverse());
|
|
}
|