pages.ts — astro Source File
Architecture documentation for pages.ts, a typescript file in the astro codebase. 8 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 6e737d15_0195_e062_7c54_997ea919572e["pages.ts"] 313916b3_64e3_9a00_0504_f5123ae24ad8["../core/routing/default.js"] 6e737d15_0195_e062_7c54_997ea919572e --> 313916b3_64e3_9a00_0504_f5123ae24ad8 c923dac6_4ccb_a783_dee2_4bc95f0ebcf1["../core/routing/index.js"] 6e737d15_0195_e062_7c54_997ea919572e --> c923dac6_4ccb_a783_dee2_4bc95f0ebcf1 e9b74c5a_8d34_34a7_e196_5e41b87214aa["../types/astro.js"] 6e737d15_0195_e062_7c54_997ea919572e --> e9b74c5a_8d34_34a7_e196_5e41b87214aa 10d4e39f_edb6_3e34_aa93_ae1211e7da05["../types/public/internal.js"] 6e737d15_0195_e062_7c54_997ea919572e --> 10d4e39f_edb6_3e34_aa93_ae1211e7da05 c0c8a87f_ca88_4ea8_585b_2040cded1231["./const.js"] 6e737d15_0195_e062_7c54_997ea919572e --> c0c8a87f_ca88_4ea8_585b_2040cded1231 cf37a168_0cc0_cca0_ac64_5e7070a871a4["./util.js"] 6e737d15_0195_e062_7c54_997ea919572e --> cf37a168_0cc0_cca0_ac64_5e7070a871a4 7216d952_4e4a_2d18_a85b_74b4ace79e2b["../core/constants.js"] 6e737d15_0195_e062_7c54_997ea919572e --> 7216d952_4e4a_2d18_a85b_74b4ace79e2b 263e522e_1aa5_ebc3_e7d6_45ebc51671f7["vite"] 6e737d15_0195_e062_7c54_997ea919572e --> 263e522e_1aa5_ebc3_e7d6_45ebc51671f7 style 6e737d15_0195_e062_7c54_997ea919572e fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import type { Plugin as VitePlugin } from 'vite';
import { DEFAULT_COMPONENTS } from '../core/routing/default.js';
import { routeIsRedirect } from '../core/routing/index.js';
import type { RoutesList } from '../types/astro.js';
import type { RouteData } from '../types/public/internal.js';
import { VIRTUAL_PAGE_MODULE_ID } from './const.js';
import { getVirtualModulePageName } from './util.js';
import { ASTRO_VITE_ENVIRONMENT_NAMES } from '../core/constants.js';
export const VIRTUAL_PAGES_MODULE_ID = 'virtual:astro:pages';
const VIRTUAL_PAGES_RESOLVED_MODULE_ID = '\0' + VIRTUAL_PAGES_MODULE_ID;
interface PagesPluginOptions {
routesList: RoutesList;
}
/**
* Filters routes for a specific build environment.
* Redirects need their target route included so the redirect response can be generated at runtime.
*/
function getRoutesForEnvironment(routes: RouteData[], isPrerender: boolean): Set<RouteData> {
const result = new Set<RouteData>();
for (const route of routes) {
if (route.prerender === isPrerender) {
result.add(route);
}
if (route.redirectRoute) {
result.add(route.redirectRoute);
}
}
return result;
}
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
Functions
Types
Dependencies
- ../core/constants.js
- ../core/routing/default.js
- ../core/routing/index.js
- ../types/astro.js
- ../types/public/internal.js
- ./const.js
- ./util.js
- vite
Source
Frequently Asked Questions
What does pages.ts do?
pages.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 pages.ts?
pages.ts defines 2 function(s): getRoutesForEnvironment, pluginPages.
What does pages.ts depend on?
pages.ts imports 8 module(s): ../core/constants.js, ../core/routing/default.js, ../core/routing/index.js, ../types/astro.js, ../types/public/internal.js, ./const.js, ./util.js, vite.
Where is pages.ts in the architecture?
pages.ts is located at packages/astro/src/vite-plugin-pages/pages.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/vite-plugin-pages).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free