Home / Class/ DevApp Class — astro Architecture

DevApp Class — astro Architecture

Architecture documentation for the DevApp class in app.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c["DevApp"]
  1c83a48e_263e_e961_abcc_b128e34eab91["app.ts"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|defined in| 1c83a48e_263e_e961_abcc_b128e34eab91
  b11b7214_f766_ed5f_8e67_7b74a2f0fafc["constructor()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| b11b7214_f766_ed5f_8e67_7b74a2f0fafc
  af94ed1d_3a06_3a75_51e7_2e0cac6a870a["createPipeline()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| af94ed1d_3a06_3a75_51e7_2e0cac6a870a
  86d2cee0_36ba_0abe_1b6e_fbadb62f3858["isDev()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| 86d2cee0_36ba_0abe_1b6e_fbadb62f3858
  e9b88d00_bbc7_b367_fbc7_b565361bd1df["updateRoutes()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| e9b88d00_bbc7_b367_fbc7_b565361bd1df
  ab5140dd_71f0_0d75_d541_dac7964b3e2d["match()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| ab5140dd_71f0_0d75_d541_dac7964b3e2d
  89732b33_f6c0_7345_6fd2_4cfb1c40d1a5["devMatch()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| 89732b33_f6c0_7345_6fd2_4cfb1c40d1a5
  8c958a17_30f5_1678_b38a_5d51a320ab3f["createRenderContext()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| 8c958a17_30f5_1678_b38a_5d51a320ab3f
  84b4e3d3_9059_983c_2845_94bc19dd377b["renderError()"]
  ec09edcb_7ea1_1684_bf75_6f5bf722dd9c -->|method| 84b4e3d3_9059_983c_2845_94bc19dd377b

Relationship Graph

Source Code

packages/astro/src/core/app/dev/app.ts lines 15–137

export class DevApp extends BaseApp<NonRunnablePipeline> {
	logger: Logger;
	resolvedPathname: string | undefined = undefined;
	constructor(manifest: SSRManifest, streaming = true, logger: Logger) {
		super(manifest, streaming, logger);
		this.logger = logger;
	}

	createPipeline(streaming: boolean, manifest: SSRManifest, logger: Logger): NonRunnablePipeline {
		return NonRunnablePipeline.create({
			logger,
			manifest,
			streaming,
		});
	}

	isDev(): boolean {
		return true;
	}

	/**
	 * Updates the routes list when files change during development.
	 * Called via HMR when new pages are added/removed.
	 */
	updateRoutes(newRoutesList: RoutesList): void {
		this.manifestData = newRoutesList;
		ensure404Route(this.manifestData);
	}

	match(request: Request): RouteData | undefined {
		return super.match(request, true);
	}

	async devMatch(pathname: string): Promise<DevMatch | undefined> {
		const matchedRoute = await matchRoute(
			pathname,
			this.manifestData,
			this.pipeline as unknown as RunnablePipeline,
			this.manifest,
		);
		if (!matchedRoute) return undefined;

		this.resolvedPathname = matchedRoute.resolvedPathname;
		return {
			routeData: matchedRoute.route,
			resolvedPathname: matchedRoute.resolvedPathname,
		};
	}

	async createRenderContext(payload: CreateRenderContext): Promise<RenderContext> {
		return super.createRenderContext({
			...payload,
			pathname: this.resolvedPathname ?? payload.pathname,
		});
	}

	async renderError(
		request: Request,
		{ locals, skipMiddleware = false, error, clientAddress, status }: RenderErrorOptions,
	): Promise<Response> {
		// we always throw when we have Astro errors around the middleware
		if (
			isAstroError(error) &&
			[MiddlewareNoDataOrNextCalled.name, MiddlewareNotAResponse.name].includes(error.name)
		) {
			throw error;
		}

		const renderRoute = async (routeData: RouteData) => {
			try {
				const preloadedComponent = await this.pipeline.getComponentByRoute(routeData);
				const renderContext = await this.createRenderContext({
					locals,
					pipeline: this.pipeline,
					pathname: await this.getPathnameFromRequest(request),
					skipMiddleware,
					request,
					routeData,
					clientAddress,
					status,
					shouldInjectCspMetaTags: false,

Domain

Frequently Asked Questions

What is the DevApp class?
DevApp is a class in the astro codebase, defined in packages/astro/src/core/app/dev/app.ts.
Where is DevApp defined?
DevApp is defined in packages/astro/src/core/app/dev/app.ts at line 15.

Analyze Your Own Codebase

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

Try Supermodel Free