Home / Function/ handleImageRequest() — astro Function Reference

handleImageRequest() — astro Function Reference

Architecture documentation for the handleImageRequest() function in shared.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  ed295512_d229_a4d2_b12b_c573504afd00["handleImageRequest()"]
  6a8f5c45_bf5b_34c9_0e8c_3118f0ca359e["shared.ts"]
  ed295512_d229_a4d2_b12b_c573504afd00 -->|defined in| 6a8f5c45_bf5b_34c9_0e8c_3118f0ca359e
  0b5c99da_0bec_0e51_a67d_5cdfd26a1318["loadRemoteImage()"]
  ed295512_d229_a4d2_b12b_c573504afd00 -->|calls| 0b5c99da_0bec_0e51_a67d_5cdfd26a1318
  style ed295512_d229_a4d2_b12b_c573504afd00 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/assets/endpoint/shared.ts lines 23–70

export const handleImageRequest = async ({
	request,
	loadLocalImage,
}: {
	request: Request;
	loadLocalImage: (src: string, baseUrl: URL) => Promise<Buffer | undefined>;
}) => {
	const imageService = await getConfiguredImageService();

	if (!('transform' in imageService)) {
		throw new Error('Configured image service is not a local service');
	}

	const url = new URL(request.url);
	const transform = await imageService.parseURL(url, imageConfig);

	if (!transform?.src) {
		return new Response('Invalid request', { status: 400 });
	}

	let inputBuffer: Buffer | undefined = undefined;

	if (isRemotePath(transform.src)) {
		if (!isRemoteAllowed(transform.src, imageConfig)) {
			return new Response('Forbidden', { status: 403 });
		}

		inputBuffer = await loadRemoteImage(new URL(transform.src));
	} else {
		inputBuffer = await loadLocalImage(removeQueryString(transform.src), url);
	}

	if (!inputBuffer) {
		return new Response('Internal Server Error', { status: 500 });
	}

	const { data, format } = await imageService.transform(inputBuffer, transform, imageConfig);

	return new Response(data as Uint8Array<ArrayBuffer>, {
		status: 200,
		headers: {
			'Content-Type': mime.lookup(format) ?? `image/${format}`,
			'Cache-Control': 'public, max-age=31536000',
			ETag: etag(data.toString()),
			Date: new Date().toUTCString(),
		},
	});
};

Domain

Subdomains

Frequently Asked Questions

What does handleImageRequest() do?
handleImageRequest() is a function in the astro codebase, defined in packages/astro/src/assets/endpoint/shared.ts.
Where is handleImageRequest() defined?
handleImageRequest() is defined in packages/astro/src/assets/endpoint/shared.ts at line 23.
What does handleImageRequest() call?
handleImageRequest() calls 1 function(s): loadRemoteImage.

Analyze Your Own Codebase

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

Try Supermodel Free