Home / Function/ createRoutesList() — astro Function Reference

createRoutesList() — astro Function Reference

Architecture documentation for the createRoutesList() function in create.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  980f5a1b_85ee_0217_7a04_888abfb8f70f["createRoutesList()"]
  a7eed989_9f2b_5163_ecdf_85920a8b973f["create.ts"]
  980f5a1b_85ee_0217_7a04_888abfb8f70f -->|defined in| a7eed989_9f2b_5163_ecdf_85920a8b973f
  769abfe3_0dff_1eda_a9cd_919cc8ae8621["createFileBasedRoutes()"]
  980f5a1b_85ee_0217_7a04_888abfb8f70f -->|calls| 769abfe3_0dff_1eda_a9cd_919cc8ae8621
  45eeb620_478e_aa03_8346_e477fdcca943["createInjectedRoutes()"]
  980f5a1b_85ee_0217_7a04_888abfb8f70f -->|calls| 45eeb620_478e_aa03_8346_e477fdcca943
  e28e398f_3a64_8e35_e7de_2406040de612["createRedirectRoutes()"]
  980f5a1b_85ee_0217_7a04_888abfb8f70f -->|calls| e28e398f_3a64_8e35_e7de_2406040de612
  6d3eab18_f149_cd0f_b9bf_e3324684390e["detectRouteCollision()"]
  980f5a1b_85ee_0217_7a04_888abfb8f70f -->|calls| 6d3eab18_f149_cd0f_b9bf_e3324684390e
  1238e67c_a57d_fa2d_67fb_033b7f31b2ba["getParts()"]
  980f5a1b_85ee_0217_7a04_888abfb8f70f -->|calls| 1238e67c_a57d_fa2d_67fb_033b7f31b2ba
  90f88b4e_4baf_d6d3_95c6_44a6828c3fbc["replaceOrKeep()"]
  980f5a1b_85ee_0217_7a04_888abfb8f70f -->|calls| 90f88b4e_4baf_d6d3_95c6_44a6828c3fbc
  style 980f5a1b_85ee_0217_7a04_888abfb8f70f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/core/routing/manifest/create.ts lines 485–782

export async function createRoutesList(
	params: CreateRouteManifestParams,
	logger: Logger,
	{
		dev = false,
		skipBuildOutputAssignment = false,
	}: {
		dev?: boolean;
		/**
		 * When `true`, the assignment of `settings.buildOutput` is skipped.
		 * Usually, that's needed when this function has already been called.
		 */
		skipBuildOutputAssignment?: boolean;
	} = {},
): Promise<RoutesList> {
	const { settings } = params;
	const { config } = settings;
	// Create a map of all routes so redirects can refer to any route
	const routeMap = new Map();

	const fileBasedRoutes = createFileBasedRoutes(params, logger);
	for (const route of fileBasedRoutes) {
		routeMap.set(route.route, route);
	}

	const injectedRoutes = createInjectedRoutes(params);
	for (const route of injectedRoutes) {
		routeMap.set(route.route, route);
	}

	const redirectRoutes = createRedirectRoutes(params, routeMap);

	// we remove the file based routes that were deemed redirects
	const filteredFiledBasedRoutes = fileBasedRoutes.filter((fileBasedRoute) => {
		const isRedirect = redirectRoutes.findIndex((rd) => rd.route === fileBasedRoute.route);
		return isRedirect < 0;
	});

	const routes: RouteData[] = [
		...[...filteredFiledBasedRoutes, ...injectedRoutes, ...redirectRoutes].sort(routeComparator),
	];

	if (skipBuildOutputAssignment !== true) {
		settings.buildOutput = getPrerenderDefault(config) ? 'static' : 'server';
	}

	// Check the prerender option for each route
	const limit = pLimit(10);
	let promises = [];
	for (const route of routes) {
		promises.push(
			limit(async () => {
				if (route.type !== 'page' && route.type !== 'endpoint' && route.type !== 'redirect') return;
				// External redirects aren't taken into account
				if (route.type === 'redirect' && !route.redirectRoute) return;
				const localFs = params.fsMod ?? nodeFs;
				const content = await localFs.promises.readFile(
					fileURLToPath(
						new URL(
							// The destination redirect might be a prerendered
							route.type === 'redirect' && route.redirectRoute
								? route.redirectRoute.component
								: route.component,
							settings.config.root,
						),
					),
					'utf-8',
				);

				await getRoutePrerenderOption(content, route, settings, logger);
			}),
		);
	}
	await Promise.all(promises);

	// Report route collisions
	for (const [index, higherRoute] of routes.entries()) {
		for (const lowerRoute of routes.slice(index + 1)) {
			detectRouteCollision(higherRoute, lowerRoute, config, logger);
		}
	}

Domain

Subdomains

Frequently Asked Questions

What does createRoutesList() do?
createRoutesList() is a function in the astro codebase, defined in packages/astro/src/core/routing/manifest/create.ts.
Where is createRoutesList() defined?
createRoutesList() is defined in packages/astro/src/core/routing/manifest/create.ts at line 485.
What does createRoutesList() call?
createRoutesList() calls 6 function(s): createFileBasedRoutes, createInjectedRoutes, createRedirectRoutes, detectRouteCollision, getParts, replaceOrKeep.

Analyze Your Own Codebase

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

Try Supermodel Free