const VIRTUAL_MODULE_ID = "astro:prefetch"; const RESOLVED_VIRTUAL_MODULE_ID = "\0" + VIRTUAL_MODULE_ID; const prefetchInternalModuleFsSubpath = "astro/dist/prefetch/index.js"; const prefetchCode = `import { init } from 'astro/virtual-modules/prefetch.js';init()`; function astroPrefetch({ settings }) { const prefetchOption = settings.config.prefetch; const prefetch = prefetchOption ? typeof prefetchOption === "object" ? prefetchOption : {} : void 0; if (prefetch && settings.scripts.every((s) => s.content !== prefetchCode)) { settings.scripts.push({ stage: "page", content: `import { init } from 'astro/virtual-modules/prefetch.js';init()` }); } 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) { 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 }; } } }; } export { astroPrefetch as default };