Home / File/ routing.ts — astro Source File

routing.ts — astro Source File

Architecture documentation for routing.ts, a typescript file in the astro codebase. 4 imports, 0 dependents.

File typescript CoreAstro RenderingEngine 4 imports 4 functions

Entity Profile

Dependency Diagram

graph LR
  023064dd_a580_49f4_740a_68db4b2f69c1["routing.ts"]
  c923dac6_4ccb_a783_dee2_4bc95f0ebcf1["../core/routing/index.js"]
  023064dd_a580_49f4_740a_68db4b2f69c1 --> c923dac6_4ccb_a783_dee2_4bc95f0ebcf1
  e0205085_880d_1a58_2ee7_5e674a68b052["../core/routing/priority.js"]
  023064dd_a580_49f4_740a_68db4b2f69c1 --> e0205085_880d_1a58_2ee7_5e674a68b052
  10d4e39f_edb6_3e34_aa93_ae1211e7da05["../types/public/internal.js"]
  023064dd_a580_49f4_740a_68db4b2f69c1 --> 10d4e39f_edb6_3e34_aa93_ae1211e7da05
  0a7232f9_1027_cf2d_cc88_6e09a54bf913["./pipeline.js"]
  023064dd_a580_49f4_740a_68db4b2f69c1 --> 0a7232f9_1027_cf2d_cc88_6e09a54bf913
  style 023064dd_a580_49f4_740a_68db4b2f69c1 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { routeIsRedirect } from '../core/routing/index.js';
import { routeComparator } from '../core/routing/priority.js';
import type { RouteData, SSRManifest } from '../types/public/internal.js';
import type { RunnablePipeline } from '../vite-plugin-app/pipeline.js';

type GetSortedPreloadedMatchesParams = {
	pipeline: RunnablePipeline;
	matches: RouteData[];
	manifest: SSRManifest;
};
export function getSortedPreloadedMatches({
	pipeline,
	matches,
	manifest,
}: GetSortedPreloadedMatchesParams) {
	return preloadAndSetPrerenderStatus({
		pipeline,
		matches,
		manifest,
	})
		.sort((a, b) => routeComparator(a.route, b.route))
		.sort((a, b) => prioritizePrerenderedMatchesComparator(a.route, b.route));
}

type PreloadAndSetPrerenderStatusParams = {
	pipeline: RunnablePipeline;
	matches: RouteData[];
	manifest: SSRManifest;
};

type PreloadAndSetPrerenderStatusResult = {
	filePath: URL;
	route: RouteData;
};

function preloadAndSetPrerenderStatus({
	matches,
	manifest,
}: PreloadAndSetPrerenderStatusParams): PreloadAndSetPrerenderStatusResult[] {
	const preloaded = new Array<PreloadAndSetPrerenderStatusResult>();
	for (const route of matches) {
		const filePath = new URL(`./${route.component}`, manifest.rootDir);
		if (routeIsRedirect(route)) {
			preloaded.push({
				route,
				filePath,
			});
			continue;
		}

		preloaded.push({ route, filePath });
	}
	return preloaded;
}

function prioritizePrerenderedMatchesComparator(a: RouteData, b: RouteData): number {
	if (areRegexesEqual(a.pattern, b.pattern)) {
		if (a.prerender !== b.prerender) {
			return a.prerender ? -1 : 1;
		}
		return a.component < b.component ? -1 : 1;
	}
	return 0;
}

function areRegexesEqual(regexp1: RegExp, regexp2: RegExp) {
	return regexp1.source === regexp2.source && regexp1.global === regexp2.global;
}

Domain

Subdomains

Dependencies

  • ../core/routing/index.js
  • ../core/routing/priority.js
  • ../types/public/internal.js
  • ./pipeline.js

Frequently Asked Questions

What does routing.ts do?
routing.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RenderingEngine subdomain.
What functions are defined in routing.ts?
routing.ts defines 4 function(s): areRegexesEqual, getSortedPreloadedMatches, preloadAndSetPrerenderStatus, prioritizePrerenderedMatchesComparator.
What does routing.ts depend on?
routing.ts imports 4 module(s): ../core/routing/index.js, ../core/routing/priority.js, ../types/public/internal.js, ./pipeline.js.
Where is routing.ts in the architecture?
routing.ts is located at packages/astro/src/prerender/routing.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/prerender).

Analyze Your Own Codebase

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

Try Supermodel Free