full site update

This commit is contained in:
2025-07-24 18:46:24 +02:00
parent bfe2b90d8d
commit 37a6e0ab31
6912 changed files with 540482 additions and 361712 deletions

View File

@@ -1,15 +1,16 @@
import { extname } from "node:path";
import { fileURLToPath } from "node:url";
import { bold } from "kleur/colors";
import { normalizePath } from "vite";
import { isEndpoint, isPage, isServerLikeOutput } from "../core/util.js";
import { rootRelativePath } from "../core/viteUtils.js";
import { runHookRouteSetup } from "../integrations/hooks.js";
import { getPrerenderDefault } from "../prerender/utils.js";
import { scan } from "./scan.js";
import { warnMissingAdapter } from "../core/dev/adapter-validation.js";
import { getRoutePrerenderOption } from "../core/routing/manifest/prerender.js";
import { isEndpoint, isPage } from "../core/util.js";
import { normalizePath, rootRelativePath } from "../core/viteUtils.js";
import { createDefaultAstroMetadata } from "../vite-plugin-astro/metadata.js";
const KNOWN_FILE_EXTENSIONS = [".astro", ".js", ".ts"];
function astroScannerPlugin({
settings,
logger
logger,
routesList
}) {
return {
name: "astro:scanner",
@@ -26,8 +27,14 @@ function astroScannerPlugin({
const fileIsPage = isPage(fileURL, settings);
const fileIsEndpoint = isEndpoint(fileURL, settings);
if (!(fileIsPage || fileIsEndpoint)) return;
const pageOptions = await getPageOptions(code, id, fileURL, settings, logger);
if (!pageOptions.prerender && isServerLikeOutput(settings.config) && code.includes("getStaticPaths") && // this should only be valid for `.astro`, `.js` and `.ts` files
const route = routesList.routes.find((r) => {
const filePath = new URL(`./${r.component}`, settings.config.root);
return normalizePath(fileURLToPath(filePath)) === filename;
});
if (!route) {
return;
}
if (!route.prerender && code.includes("getStaticPaths") && // this should only be valid for `.astro`, `.js` and `.ts` files
KNOWN_FILE_EXTENSIONS.includes(extname(filename))) {
logger.warn(
"router",
@@ -43,31 +50,38 @@ function astroScannerPlugin({
meta: {
...meta,
astro: {
...meta.astro ?? { hydratedComponents: [], clientOnlyComponents: [], scripts: [] },
pageOptions
...meta.astro ?? createDefaultAstroMetadata(),
pageOptions: {
prerender: route.prerender
}
}
}
};
},
// Handle hot updates to update the prerender option
async handleHotUpdate(ctx) {
const filename = normalizePath(ctx.file);
let fileURL;
try {
fileURL = new URL(`file://${filename}`);
} catch {
return;
}
const fileIsPage = isPage(fileURL, settings);
const fileIsEndpoint = isEndpoint(fileURL, settings);
if (!(fileIsPage || fileIsEndpoint)) return;
const route = routesList.routes.find((r) => {
const filePath = new URL(`./${r.component}`, settings.config.root);
return normalizePath(fileURLToPath(filePath)) === filename;
});
if (!route) {
return;
}
await getRoutePrerenderOption(await ctx.read(), route, settings, logger);
warnMissingAdapter(logger, settings);
}
};
}
async function getPageOptions(code, id, fileURL, settings, logger) {
const fileUrlStr = fileURL.toString();
const injectedRoute = settings.resolvedInjectedRoutes.find(
(route2) => route2.resolvedEntryPoint && fileUrlStr === route2.resolvedEntryPoint.toString()
);
const pageOptions = injectedRoute?.prerender != null ? { prerender: injectedRoute.prerender } : await scan(code, id, settings);
const route = {
component: rootRelativePath(settings.config.root, fileURL, false),
prerender: pageOptions.prerender
};
await runHookRouteSetup({ route, settings, logger });
pageOptions.prerender = route.prerender;
if (typeof pageOptions.prerender === "undefined") {
pageOptions.prerender = getPrerenderDefault(settings.config);
}
return pageOptions;
}
export {
astroScannerPlugin as default
};