Home / Function/ vitePluginMiddleware() — astro Function Reference

vitePluginMiddleware() — astro Function Reference

Architecture documentation for the vitePluginMiddleware() function in vite-plugin.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  a82bc5dd_e403_0eb1_682e_072bcc35dd7c["vitePluginMiddleware()"]
  f79d9e6e_0575_c2b8_506e_ddbc799b5f07["vite-plugin.ts"]
  a82bc5dd_e403_0eb1_682e_072bcc35dd7c -->|defined in| f79d9e6e_0575_c2b8_506e_ddbc799b5f07
  1c00b81f_3861_41f7_beb4_5a61d419bac3["createMiddlewareImports()"]
  a82bc5dd_e403_0eb1_682e_072bcc35dd7c -->|calls| 1c00b81f_3861_41f7_beb4_5a61d419bac3
  style a82bc5dd_e403_0eb1_682e_072bcc35dd7c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/core/middleware/vite-plugin.ts lines 18–92

export function vitePluginMiddleware({ settings }: { settings: AstroSettings }): VitePlugin {
	let resolvedMiddlewareId: string | undefined = undefined;
	const hasIntegrationMiddleware =
		settings.middlewares.pre.length > 0 || settings.middlewares.post.length > 0;
	let userMiddlewareIsPresent = false;

	return {
		name: '@astro/plugin-middleware',
		applyToEnvironment(environment) {
			return (
				environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.ssr ||
				environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.astro ||
				environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.prerender
			);
		},
		resolveId: {
			filter: {
				id: new RegExp(`^${MIDDLEWARE_MODULE_ID}$`),
			},
			async handler() {
				const middlewareId = await this.resolve(
					`${decodeURI(settings.config.srcDir.pathname)}${MIDDLEWARE_PATH_SEGMENT_NAME}`,
				);
				userMiddlewareIsPresent = !!middlewareId;
				if (middlewareId) {
					resolvedMiddlewareId = middlewareId.id;
					return MIDDLEWARE_RESOLVED_MODULE_ID;
				} else if (hasIntegrationMiddleware) {
					return MIDDLEWARE_RESOLVED_MODULE_ID;
				} else {
					return NOOP_MIDDLEWARE;
				}
			},
		},
		load: {
			filter: {
				id: new RegExp(`^(${NOOP_MIDDLEWARE}|${MIDDLEWARE_RESOLVED_MODULE_ID})$`),
			},
			async handler(id) {
				if (id === NOOP_MIDDLEWARE) {
					if (!userMiddlewareIsPresent && settings.config.i18n?.routing === 'manual') {
						throw new AstroError(MissingMiddlewareForInternationalization);
					}
					return { code: 'export const onRequest = (_, next) => next()' };
				}
				if (id === MIDDLEWARE_RESOLVED_MODULE_ID) {
					if (!userMiddlewareIsPresent && settings.config.i18n?.routing === 'manual') {
						throw new AstroError(MissingMiddlewareForInternationalization);
					}

					const preMiddleware = createMiddlewareImports(settings.middlewares.pre, 'pre');
					const postMiddleware = createMiddlewareImports(settings.middlewares.post, 'post');

					const code = `
				${
					userMiddlewareIsPresent
						? `import { onRequest as userOnRequest } from '${resolvedMiddlewareId}';`
						: ''
				}
import { sequence } from 'astro:middleware';
${preMiddleware.importsCode}${postMiddleware.importsCode}

export const onRequest = sequence(
	${preMiddleware.sequenceCode}${preMiddleware.sequenceCode ? ',' : ''}
	${userMiddlewareIsPresent ? `userOnRequest${postMiddleware.sequenceCode ? ',' : ''}` : ''}
	${postMiddleware.sequenceCode}
);
`.trim();

					return { code };
				}
			},
		},
	};
}

Domain

Subdomains

Frequently Asked Questions

What does vitePluginMiddleware() do?
vitePluginMiddleware() is a function in the astro codebase, defined in packages/astro/src/core/middleware/vite-plugin.ts.
Where is vitePluginMiddleware() defined?
vitePluginMiddleware() is defined in packages/astro/src/core/middleware/vite-plugin.ts at line 18.
What does vitePluginMiddleware() call?
vitePluginMiddleware() calls 1 function(s): createMiddlewareImports.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free