UNPKG

@inlang/paraglide-js

Version:

[![Inlang-ecosystem compatibility badge](https://cdn.jsdelivr.net/gh/opral/monorepo@main/inlang/assets/md-badges/inlang.svg)](https://inlang.com)

68 lines 2.63 kB
/** * Server middleware that handles locale-based routing and request processing. * * This middleware performs several key functions: * * 1. Determines the locale for the incoming request using configured strategies * 2. Handles URL localization and redirects (only for document requests) * 3. Maintains locale state using AsyncLocalStorage to prevent request interference * * When URL strategy is used: * * - The locale is extracted from the URL for all request types * - If URL doesn't match the determined locale, redirects to localized URL (only for document requests) * - De-localizes URLs before passing to server (e.g., `/fr/about` → `/about`) * * @template T - The return type of the resolve function * * @param {Request} request - The incoming request object * @param {(args: { request: Request, locale: import("./runtime.js").Locale }) => T | Promise<T>} resolve - Function to handle the request * @param {{ onRedirect:(response: Response) => void }} [callbacks] - Callbacks to handle events from middleware * @returns {Promise<Response>} * * @example * ```typescript * // Basic usage in metaframeworks like NextJS, SvelteKit, Astro, Nuxt, etc. * export const handle = async ({ event, resolve }) => { * return serverMiddleware(event.request, ({ request, locale }) => { * // let the framework further resolve the request * return resolve(request); * }); * }; * ``` * * @example * ```typescript * // Usage in a framework like Express JS or Hono * app.use(async (req, res, next) => { * const result = await serverMiddleware(req, ({ request, locale }) => { * // If a redirect happens this won't be called * return next(request); * }); * }); * ``` * * @example * ```typescript * // Usage in serverless environments like Cloudflare Workers * // ⚠️ WARNING: This should ONLY be used in serverless environments like Cloudflare Workers. * // Disabling AsyncLocalStorage in traditional server environments risks cross-request pollution where state from * // one request could leak into another concurrent request. * export default { * fetch: async (request) => { * return serverMiddleware( * request, * ({ request, locale }) => handleRequest(request, locale), * { disableAsyncLocalStorage: true } * ); * } * }; * ``` */ export function paraglideMiddleware<T>(request: Request, resolve: (args: { request: Request; locale: import("./runtime.js").Locale; }) => T | Promise<T>, callbacks?: { onRedirect: (response: Response) => void; }): Promise<Response>; //# sourceMappingURL=middleware.d.ts.map