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()); }