Home / Function/ createVitePluginAstroServer() — astro Function Reference

createVitePluginAstroServer() — astro Function Reference

Architecture documentation for the createVitePluginAstroServer() function in plugin.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  f37e40d9_91be_474f_4432_079e992c2d5c["createVitePluginAstroServer()"]
  75a8e8ea_e89a_9f2f_f147_95a5b4ca1f90["plugin.ts"]
  f37e40d9_91be_474f_4432_079e992c2d5c -->|defined in| 75a8e8ea_e89a_9f2f_f147_95a5b4ca1f90
  style f37e40d9_91be_474f_4432_079e992c2d5c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/vite-plugin-astro-server/plugin.ts lines 41–126

export default function createVitePluginAstroServer({
	settings,
	logger,
}: AstroPluginOptions): vite.Plugin {
	return {
		name: 'astro:server',
		applyToEnvironment(environment) {
			return environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.ssr;
		},
		async configureServer(viteServer) {
			// Cloudflare handles its own requests
			// TODO: let this handle non-runnable environments that don't intercept requests
			if (!isRunnableDevEnvironment(viteServer.environments[ASTRO_VITE_ENVIRONMENT_NAMES.ssr])) {
				return;
			}
			const environment = viteServer.environments[
				ASTRO_VITE_ENVIRONMENT_NAMES.ssr
			] as RunnableDevEnvironment;
			const loader = createViteLoader(viteServer, environment);
			const { default: createAstroServerApp } =
				await environment.runner.import<
					typeof import('../vite-plugin-app/createAstroServerApp.js')
				>(ASTRO_DEV_SERVER_APP_ID);
			const controller = createController({ loader });
			const { handler } = await createAstroServerApp(controller, settings, loader, logger);
			const { manifest } = await environment.runner.import<{
				manifest: SSRManifest;
			}>(SERIALIZED_MANIFEST_ID);
			const localStorage = new AsyncLocalStorage();

			function handleUnhandledRejection(rejection: any) {
				const error = AstroError.is(rejection)
					? rejection
					: new AstroError({
							...AstroErrorData.UnhandledRejection,
							message: AstroErrorData.UnhandledRejection.message(rejection?.stack || rejection),
						});
				const store = localStorage.getStore();
				if (store instanceof IncomingMessage) {
					setRouteError(controller.state, store.url!, error);
				}
				const { errorWithMetadata } = recordServerError(loader, manifest, logger, error);
				setTimeout(
					async () => loader.webSocketSend(await getViteErrorPayload(errorWithMetadata)),
					200,
				);
			}

			process.on('unhandledRejection', handleUnhandledRejection);
			viteServer.httpServer?.on('close', () => {
				process.off('unhandledRejection', handleUnhandledRejection);
			});

			return () => {
				// Push this middleware to the front of the stack so that it can intercept responses.
				// fix(#6067): always inject this to ensure zombie base handling is killed after restarts
				viteServer.middlewares.stack.unshift({
					route: '',
					handle: baseMiddleware(settings, logger),
				});
				viteServer.middlewares.stack.unshift({
					route: '',
					handle: trailingSlashMiddleware(settings),
				});
				// Prevent serving files outside srcDir/publicDir (e.g., /README.md at project root)
				viteServer.middlewares.stack.unshift({
					route: '',
					handle: routeGuardMiddleware(settings),
				});

				// Note that this function has a name so other middleware can find it.
				viteServer.middlewares.use(async function astroDevHandler(request, response) {
					if (request.url === undefined || !request.method) {
						response.writeHead(500, 'Incomplete request');
						response.end();
						return;
					}

					localStorage.run(request, () => {
						handler(request, response);
					});

Domain

Subdomains

Frequently Asked Questions

What does createVitePluginAstroServer() do?
createVitePluginAstroServer() is a function in the astro codebase, defined in packages/astro/src/vite-plugin-astro-server/plugin.ts.
Where is createVitePluginAstroServer() defined?
createVitePluginAstroServer() is defined in packages/astro/src/vite-plugin-astro-server/plugin.ts at line 41.

Analyze Your Own Codebase

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

Try Supermodel Free