Home / Function/ GET() — astro Function Reference

GET() — astro Function Reference

Architecture documentation for the GET() function in generic.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  4f4f29d0_b481_fb6e_36dc_c3e280145dce["GET()"]
  f0198079_a2ca_753b_3a72_e0742f6c13ac["generic.ts"]
  4f4f29d0_b481_fb6e_36dc_c3e280145dce -->|defined in| f0198079_a2ca_753b_3a72_e0742f6c13ac
  c82d42c4_108a_7927_abe3_25b37e70cb03["loadRemoteImage()"]
  4f4f29d0_b481_fb6e_36dc_c3e280145dce -->|calls| c82d42c4_108a_7927_abe3_25b37e70cb03
  style 4f4f29d0_b481_fb6e_36dc_c3e280145dce fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/assets/endpoint/generic.ts lines 30–85

export const GET: APIRoute = async ({ request }) => {
	try {
		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) {
			throw new Error('Incorrect transform returned by `parseURL`');
		}

		let inputBuffer: ArrayBuffer | undefined = undefined;

		const isRemoteImage = isRemotePath(transform.src);

		if (isRemoteImage && isRemoteAllowed(transform.src, imageConfig) === false) {
			return new Response('Forbidden', { status: 403 });
		}

		const sourceUrl = new URL(transform.src, url.origin);

		// Have we been tricked into thinking this is local?
		if (!isRemoteImage && sourceUrl.origin !== url.origin) {
			return new Response('Forbidden', { status: 403 });
		}

		inputBuffer = await loadRemoteImage(sourceUrl, isRemoteImage ? new Headers() : request.headers);

		if (!inputBuffer) {
			return new Response('Not Found', { status: 404 });
		}

		const { data, format } = await imageService.transform(
			new Uint8Array(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(),
			},
		});
	} catch (err: unknown) {
		console.error('Could not process image request:', err);
		return new Response(`Server Error: ${err}`, { status: 500 });
	}
};

Domain

Subdomains

Frequently Asked Questions

What does GET() do?
GET() is a function in the astro codebase, defined in packages/astro/src/assets/endpoint/generic.ts.
Where is GET() defined?
GET() is defined in packages/astro/src/assets/endpoint/generic.ts at line 30.
What does GET() call?
GET() 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