UNPKG

next-intlayer

Version:

Simplify internationalization i18n in Next.js with context providers, hooks, locale detection, and multilingual content integration.

56 lines (54 loc) 1.92 kB
import { NextResponse } from "next/server"; //#region src/proxy/multipleProxies.ts /** * Utility to combine multiple Next.js proxies into one. * * It executes proxies in order, merges headers, and correctly handles * redirects and rewrites. * * @example * import { multipleProxies, intlayerProxy } from "next-intlayer/proxy"; * import { NextResponse } from "next/server"; * * const authMiddleware = (req: NextRequest) => { * if (!req.cookies.get("token")) { * return NextResponse.redirect(new URL("/login", req.url)); * } * return NextResponse.next(); * }; * * export default multipleProxies([ * intlayerProxy, * authMiddleware, * ]); * * @param proxies - An array of proxy functions to execute in order. * @returns A single proxy function that runs all provided proxies. */ const multipleProxies = (proxies) => async (req, event, response) => { const proxyHeader = []; for (const proxy of proxies) { const result = await proxy(req, event, response); if (!result.ok) return result; proxyHeader.push(result.headers); } const mergedHeaders = new Headers(); const transmittedHeaders = new Headers(); proxyHeader.forEach((header) => { for (const [key, value] of header.entries()) { mergedHeaders.append(key, value); if (key.startsWith("x-middleware-request-")) { const fixedKey = key.replace("x-middleware-request-", ""); transmittedHeaders.append(fixedKey, value); } } }); const redirect = mergedHeaders.get("x-middleware-request-redirect"); if (redirect) return NextResponse.redirect(new URL(redirect, req.url), { status: 307 }); const rewrite = mergedHeaders.get("x-middleware-rewrite"); if (rewrite) return NextResponse.rewrite(new URL(rewrite, req.url), { request: { headers: transmittedHeaders } }); return NextResponse.next({ request: { headers: transmittedHeaders } }); }; //#endregion export { multipleProxies }; //# sourceMappingURL=multipleProxies.mjs.map