@inlang/paraglide-js
Version:
[](https://inlang.com)
68 lines • 2.63 kB
TypeScript
/**
* 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