Home / Function/ pluginPages() — astro Function Reference

pluginPages() — astro Function Reference

Architecture documentation for the pluginPages() function in pages.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  c316a851_4c8c_a92e_d38e_5889e65c63ae["pluginPages()"]
  6e737d15_0195_e062_7c54_997ea919572e["pages.ts"]
  c316a851_4c8c_a92e_d38e_5889e65c63ae -->|defined in| 6e737d15_0195_e062_7c54_997ea919572e
  b2f15e7c_85c3_2f88_a7bc_12f99918b35e["getRoutesForEnvironment()"]
  c316a851_4c8c_a92e_d38e_5889e65c63ae -->|calls| b2f15e7c_85c3_2f88_a7bc_12f99918b35e
  style c316a851_4c8c_a92e_d38e_5889e65c63ae fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/vite-plugin-pages/pages.ts lines 34–103

export function pluginPages({ routesList }: PagesPluginOptions): VitePlugin {
	return {
		name: '@astro/plugin-pages',
		enforce: 'post',
		applyToEnvironment(environment) {
			return (
				environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.ssr ||
				environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.prerender
			);
		},
		resolveId: {
			filter: {
				id: new RegExp(`^${VIRTUAL_PAGES_MODULE_ID}$`),
			},
			handler() {
				return VIRTUAL_PAGES_RESOLVED_MODULE_ID;
			},
		},
		load: {
			filter: {
				id: new RegExp(`^${VIRTUAL_PAGES_RESOLVED_MODULE_ID}$`),
			},
			async handler() {
				const imports: string[] = [];
				const pageMap: string[] = [];
				let i = 0;

				// Filter routes based on the build environment to reduce memory usage.
				// Each environment only builds the pages it needs:
				// - SSR environment: builds only on-demand rendered pages (prerender: false)
				// - Prerender environment: builds only static pages (prerender: true)
				// - Other environments (e.g. client): get all routes
				const envName = this.environment.name;
				const isSSR = envName === ASTRO_VITE_ENVIRONMENT_NAMES.ssr;
				const isPrerender = envName === ASTRO_VITE_ENVIRONMENT_NAMES.prerender;
				const routes =
					isSSR || isPrerender
						? getRoutesForEnvironment(routesList.routes, isPrerender)
						: new Set(routesList.routes);

				for (const route of routes) {
					if (routeIsRedirect(route)) {
						continue;
					}

					// Skip default components (404, server islands, etc.)
					if (DEFAULT_COMPONENTS.some((component) => route.component === component)) {
						continue;
					}

					const virtualModuleName = getVirtualModulePageName(
						VIRTUAL_PAGE_MODULE_ID,
						route.component,
					);
					const module = await this.resolve(virtualModuleName);
					if (module) {
						const variable = `_page${i}`;
						// use the non-resolved ID to resolve correctly the virtual module
						imports.push(`const ${variable} = () => import("${virtualModuleName}");`);
						pageMap.push(`[${JSON.stringify(route.component)}, ${variable}]`);
						i++;
					}
				}

				const pageMapCode = `const pageMap = new Map([\n    ${pageMap.join(',\n    ')}\n]);\n\nexport { pageMap };`;
				return { code: [...imports, pageMapCode].join('\n') };
			},
		},
	};
}

Domain

Subdomains

Frequently Asked Questions

What does pluginPages() do?
pluginPages() is a function in the astro codebase, defined in packages/astro/src/vite-plugin-pages/pages.ts.
Where is pluginPages() defined?
pluginPages() is defined in packages/astro/src/vite-plugin-pages/pages.ts at line 34.
What does pluginPages() call?
pluginPages() calls 1 function(s): getRoutesForEnvironment.

Analyze Your Own Codebase

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

Try Supermodel Free