46 lines
1.7 KiB
Plaintext
46 lines
1.7 KiB
Plaintext
|
const virtualModuleId = "astro:prefetch";
|
||
|
const resolvedVirtualModuleId = "\0" + virtualModuleId;
|
||
|
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",
|
||
|
async resolveId(id) {
|
||
|
if (id === virtualModuleId) {
|
||
|
if (!prefetch)
|
||
|
throwPrefetchNotEnabledError();
|
||
|
return resolvedVirtualModuleId;
|
||
|
}
|
||
|
},
|
||
|
load(id) {
|
||
|
if (id === resolvedVirtualModuleId) {
|
||
|
if (!prefetch)
|
||
|
throwPrefetchNotEnabledError();
|
||
|
return `export { prefetch } from "astro/virtual-modules/prefetch.js";`;
|
||
|
}
|
||
|
},
|
||
|
transform(code, id) {
|
||
|
if (id.includes(prefetchInternalModuleFsSubpath)) {
|
||
|
return code.replace("__PREFETCH_PREFETCH_ALL__", JSON.stringify(prefetch?.prefetchAll)).replace("__PREFETCH_DEFAULT_STRATEGY__", JSON.stringify(prefetch?.defaultStrategy)).replace(
|
||
|
"__EXPERIMENTAL_CLIENT_PRERENDER__",
|
||
|
JSON.stringify(settings.config.experimental.clientPrerender)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
export {
|
||
|
astroPrefetch as default
|
||
|
};
|