astroPrefetch() — astro Function Reference
Architecture documentation for the astroPrefetch() function in vite-plugin-prefetch.ts from the astro codebase.
Entity Profile
Dependency Diagram
graph TD 6a380e60_23fd_da7f_b5cc_44cd6752dd4f["astroPrefetch()"] 7d0db979_04e5_6208_3779_565d025f4ceb["vite-plugin-prefetch.ts"] 6a380e60_23fd_da7f_b5cc_44cd6752dd4f -->|defined in| 7d0db979_04e5_6208_3779_565d025f4ceb style 6a380e60_23fd_da7f_b5cc_44cd6752dd4f fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/astro/src/prefetch/vite-plugin-prefetch.ts lines 9–79
export default function astroPrefetch({ settings }: { settings: AstroSettings }): vite.Plugin {
const prefetchOption = settings.config.prefetch;
const prefetch = prefetchOption
? typeof prefetchOption === 'object'
? prefetchOption
: {}
: undefined;
// Check against existing scripts as this plugin could be called multiple times
if (prefetch && settings.scripts.every((s) => s.content !== prefetchCode)) {
// Inject prefetch script to all pages
settings.scripts.push({
stage: 'page',
content: `import { init } from 'astro/virtual-modules/prefetch.js';init()`,
});
}
// Throw a normal error instead of an AstroError as Vite captures this in the plugin lifecycle
// and would generate a different stack trace itself through esbuild.
const throwPrefetchNotEnabledError = () => {
throw new Error('You need to enable the `prefetch` Astro config to import `astro:prefetch`');
};
return {
name: 'astro:prefetch',
resolveId: {
filter: {
id: new RegExp(`^${VIRTUAL_MODULE_ID}$`),
},
handler() {
if (!prefetch) throwPrefetchNotEnabledError();
return RESOLVED_VIRTUAL_MODULE_ID;
},
},
load: {
filter: {
id: new RegExp(`^${RESOLVED_VIRTUAL_MODULE_ID}$`),
},
handler() {
if (!prefetch) throwPrefetchNotEnabledError();
return { code: `export { prefetch } from "astro/virtual-modules/prefetch.js";` };
},
},
transform: {
filter: {
// NOTE: Handle replacing the specifiers even if prefetch is disabled so View Transitions
// can import the internal module and not hit runtime issues.
id: new RegExp(`${prefetchInternalModuleFsSubpath}`),
},
handler(code) {
// We perform a simple replacement with padding so that the code offset is not changed and
// we don't have to generate a sourcemap. This has the assumption that the replaced string
// will always be shorter than the search string to work.
code = code
.replace(
'__PREFETCH_PREFETCH_ALL__', // length: 25
`${JSON.stringify(prefetch?.prefetchAll)}`.padEnd(25),
)
.replace(
'__PREFETCH_DEFAULT_STRATEGY__', // length: 29
`${JSON.stringify(prefetch?.defaultStrategy)}`.padEnd(29),
)
.replace(
'__EXPERIMENTAL_CLIENT_PRERENDER__', // length: 33
`${JSON.stringify(settings.config.experimental.clientPrerender)}`.padEnd(33),
);
return { code, map: null };
},
},
};
}
Domain
Subdomains
Source
Frequently Asked Questions
What does astroPrefetch() do?
astroPrefetch() is a function in the astro codebase, defined in packages/astro/src/prefetch/vite-plugin-prefetch.ts.
Where is astroPrefetch() defined?
astroPrefetch() is defined in packages/astro/src/prefetch/vite-plugin-prefetch.ts at line 9.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free