@sls-next/core
Version:
Handles Next.js routing independent of provider
48 lines (47 loc) • 1.54 kB
JavaScript
import { normalise } from "./basepath";
import { dropLocaleFromPath } from "./locale";
import { matchDynamic } from "../match";
import { getRewritePath, isExternalRewrite } from "./rewrite";
export const handleApiReq = (req, uri, manifest, routesManifest, isRewrite) => {
const { apis } = manifest;
const { normalisedUri, missingExpectedBasePath } = normalise(uri, routesManifest);
if (!missingExpectedBasePath) {
const nonDynamic = apis.nonDynamic[normalisedUri];
if (nonDynamic) {
return {
isApi: true,
page: nonDynamic
};
}
}
const rewrite = !isRewrite && getRewritePath(req, uri, routesManifest);
if (rewrite) {
// Rewrites include locales even for api routes
const apiRewrite = dropLocaleFromPath(rewrite, routesManifest);
const [path, querystring] = apiRewrite.split("?");
if (isExternalRewrite(path)) {
return {
isExternal: true,
path,
querystring
};
}
const route = handleApiReq(req, path, manifest, routesManifest, true);
if (route) {
return {
...route,
querystring
};
}
return route;
}
if (!missingExpectedBasePath) {
const dynamic = matchDynamic(normalisedUri, apis.dynamic);
if (dynamic) {
return {
isApi: true,
page: dynamic
};
}
}
};