Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 1x 1x 1x 3x 3x 3x 3x 3x 3x 2x 2x 7x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import type { NextRequest } from "next/server";
import { NextResponse, userAgentFromString } from "next/server";
import {
DEFAULT_LOCALE,
isLocale,
LOCALE_COOKIE,
parseAcceptLanguage,
} from "utils";
const PUBLIC_FILE = /\.(.*)$/;
export function middleware(request: NextRequest): NextResponse | void {
const isApiRoute = request.nextUrl.pathname.startsWith("/api");
const isNextRoute = request.nextUrl.pathname.startsWith("/_next");
const isPublicFile = PUBLIC_FILE.test(request.nextUrl.pathname);
const userAgent = request.headers.get("User-Agent");
if (!userAgent) return;
const userAgentObject = userAgentFromString(userAgent);
const ignoreMiddleware = [
isNextRoute,
isApiRoute,
isPublicFile,
userAgentObject.isBot,
!userAgentObject.browser.name,
];
if (ignoreMiddleware.some((condition) => condition)) return;
const acceptLanguage = request.headers.get("Accept-Language");
const userLocales = parseAcceptLanguage(acceptLanguage ?? "");
const locale = userLocales.find(isLocale) ?? DEFAULT_LOCALE;
const localeCookie = request.cookies.get(LOCALE_COOKIE)?.value;
const localeCookieValue = localeCookie ?? locale;
const response = NextResponse.next();
if (!localeCookie) {
response.cookies.set(LOCALE_COOKIE, localeCookieValue);
}
return response;
}
|