Home / Function/ generateEdgeMiddleware() — astro Function Reference

generateEdgeMiddleware() — astro Function Reference

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

Entity Profile

Dependency Diagram

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

Relationship Graph

Source Code

packages/integrations/vercel/src/serverless/middleware.ts lines 27–92

export async function generateEdgeMiddleware(
	astroMiddlewareEntryPointPath: URL,
	root: URL,
	vercelEdgeMiddlewareHandlerPath: URL,
	outPath: URL,
	middlewareSecret: string,
	logger: AstroIntegrationLogger,
): Promise<URL> {
	const code = edgeMiddlewareTemplate(
		astroMiddlewareEntryPointPath,
		vercelEdgeMiddlewareHandlerPath,
		middlewareSecret,
		logger,
	);
	// https://vercel.com/docs/concepts/functions/edge-middleware#create-edge-middleware
	const bundledFilePath = fileURLToPath(outPath);
	const esbuild = await import('esbuild');
	try {
		await esbuild.build({
			stdin: {
				contents: code,
				resolveDir: fileURLToPath(root),
			},
			// Vercel Edge runtime targets ESNext, because Cloudflare Workers update v8 weekly
			// https://github.com/vercel/vercel/blob/1006f2ae9d67ea4b3cbb1073e79d14d063d42436/packages/next/scripts/build-edge-function-template.js
			target: 'esnext',
			platform: 'browser',
			// esbuild automatically adds the browser, import and default conditions
			// https://esbuild.github.io/api/#conditions
			// https://runtime-keys.proposal.wintercg.org/#edge-light
			conditions: ['edge-light', 'workerd', 'worker'],
			outfile: bundledFilePath,
			allowOverwrite: true,
			format: 'esm',
			bundle: true,
			minify: false,
			// ensure node built-in modules are namespaced with `node:`
			plugins: [
				{
					name: 'esbuild-namespace-node-built-in-modules',
					setup(build) {
						const filter = new RegExp(builtinModules.map((mod) => `(^${mod}$)`).join('|'));
						build.onResolve(
							{
								filter,
							},
							(args) => ({
								path: 'node:' + args.path,
								external: true,
							}),
						);
					},
				},
			],
		});
	} catch (err) {
		if ((err as Error).message.includes('Could not resolve "node:')) {
			logger.error(
				`Vercel does not allow the use of Node.js built-ins in edge functions. Please ensure your middleware code and 3rd-party packages don’t use Node built-ins.`,
			);
		}

		throw err;
	}
	return pathToFileURL(bundledFilePath);
}

Domain

Subdomains

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free