37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
import "#nitro-internal-pollyfills";
|
|
import { useNitroApp } from "nitropack/runtime";
|
|
import { getRouteRulesForPath } from "nitropack/runtime/internal/index";
|
|
import { toNodeListener } from "h3";
|
|
import { parseQuery, withQuery } from "ufo";
|
|
import { ISR_URL_PARAM } from "./consts.mjs";
|
|
const nitroApp = useNitroApp();
|
|
const handler = toNodeListener(nitroApp.h3App);
|
|
const listener = function(req, res) {
|
|
const isrRoute = req.headers["x-now-route-matches"];
|
|
if (isrRoute) {
|
|
const { [ISR_URL_PARAM]: url } = parseQuery(isrRoute);
|
|
if (url && typeof url === "string") {
|
|
const routeRules = getRouteRulesForPath(url);
|
|
if (routeRules.isr) {
|
|
req.url = url;
|
|
}
|
|
}
|
|
} else {
|
|
const queryIndex = req.url.indexOf("?");
|
|
const urlQueryIndex = queryIndex === -1 ? -1 : req.url.indexOf(`${ISR_URL_PARAM}=`, queryIndex);
|
|
if (urlQueryIndex !== -1) {
|
|
const { [ISR_URL_PARAM]: url, ...params } = parseQuery(
|
|
req.url.slice(queryIndex)
|
|
);
|
|
if (url && typeof url === "string") {
|
|
const routeRules = getRouteRulesForPath(url);
|
|
if (routeRules.isr) {
|
|
req.url = withQuery(url, params);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return handler(req, res);
|
|
};
|
|
export default listener;
|