Home / Function/ edgeMiddlewareTemplate() — astro Function Reference

edgeMiddlewareTemplate() — astro Function Reference

Architecture documentation for the edgeMiddlewareTemplate() function in middleware.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  cee34067_eb44_0e9f_9bac_447168dac12c["edgeMiddlewareTemplate()"]
  9aa7bc1a_4e9b_33e0_6f2b_0f9abc877693["middleware.ts"]
  cee34067_eb44_0e9f_9bac_447168dac12c -->|defined in| 9aa7bc1a_4e9b_33e0_6f2b_0f9abc877693
  b4b770e6_da09_a5bb_081c_1f50fe654915["generateEdgeMiddleware()"]
  b4b770e6_da09_a5bb_081c_1f50fe654915 -->|calls| cee34067_eb44_0e9f_9bac_447168dac12c
  style cee34067_eb44_0e9f_9bac_447168dac12c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/integrations/vercel/src/serverless/middleware.ts lines 94–150

function edgeMiddlewareTemplate(
	astroMiddlewareEntryPointPath: URL,
	vercelEdgeMiddlewareHandlerPath: URL,
	middlewareSecret: string,
	logger: AstroIntegrationLogger,
) {
	const middlewarePath = JSON.stringify(
		fileURLToPath(astroMiddlewareEntryPointPath).replace(/\\/g, '/'),
	);
	const filePathEdgeMiddleware = fileURLToPath(vercelEdgeMiddlewareHandlerPath);
	let handlerTemplateImport = '';
	let handlerTemplateCall = '{}';
	if (existsSync(filePathEdgeMiddleware + '.js') || existsSync(filePathEdgeMiddleware + '.ts')) {
		logger.warn(
			'Usage of `vercel-edge-middleware.js` is deprecated. You can now use the `waitUntil(promise)` function directly as `ctx.locals.waitUntil(promise)`.',
		);
		const stringified = JSON.stringify(filePathEdgeMiddleware.replace(/\\/g, '/'));
		handlerTemplateImport = `import handler from ${stringified}`;
		handlerTemplateCall = `await handler({ request, context })`;
	} else {
	}
	return `
	${handlerTemplateImport}
import { onRequest } from ${middlewarePath};
import { createContext, trySerializeLocals } from 'astro/middleware';
export default async function middleware(request, context) {
	const ctx = createContext({
		request,
		params: {}
	});
	Object.assign(ctx.locals, { vercel: { edge: context }, ...${handlerTemplateCall} });
	const { origin } = new URL(request.url);
	const next = async () => {
		const { vercel, ...locals } = ctx.locals;
		const response = await fetch(new URL('/${NODE_PATH}', request.url), {
			headers: {
				...Object.fromEntries(request.headers.entries()),
				'${ASTRO_MIDDLEWARE_SECRET_HEADER}': '${middlewareSecret}',
				'${ASTRO_PATH_HEADER}': request.url.replace(origin, ''),
				'${ASTRO_LOCALS_HEADER}': trySerializeLocals(locals)
			}
		});
		return new Response(response.body, {
			status: response.status,
			statusText: response.statusText,
			headers: response.headers,
		});
	};

	const response = await onRequest(ctx, next);
	// Append cookies from Astro.cookies
	for(const setCookieHeaderValue of ctx.cookies.headers()) {
		response.headers.append('set-cookie', setCookieHeaderValue);
	}
	return response;
}`;
}

Domain

Subdomains

Frequently Asked Questions

What does edgeMiddlewareTemplate() do?
edgeMiddlewareTemplate() is a function in the astro codebase, defined in packages/integrations/vercel/src/serverless/middleware.ts.
Where is edgeMiddlewareTemplate() defined?
edgeMiddlewareTemplate() is defined in packages/integrations/vercel/src/serverless/middleware.ts at line 94.
What calls edgeMiddlewareTemplate()?
edgeMiddlewareTemplate() is called by 1 function(s): generateEdgeMiddleware.

Analyze Your Own Codebase

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

Try Supermodel Free