import { RedirectComponentInstance, routeIsRedirect } from "../core/redirects/index.js"; import { preload } from "../core/render/dev/index.js"; import { getPrerenderStatus } from "./metadata.js"; async function getSortedPreloadedMatches({ env, matches, settings }) { return (await preloadAndSetPrerenderStatus({ env, matches, settings })).sort((a, b) => prioritizePrerenderedMatchesComparator(a.route, b.route)); } async function preloadAndSetPrerenderStatus({ env, matches, settings }) { const preloaded = await Promise.all( matches.map(async (route) => { const filePath = new URL(`./${route.component}`, settings.config.root); if (routeIsRedirect(route)) { return { preloadedComponent: RedirectComponentInstance, route, filePath }; } const preloadedComponent = await preload({ env, filePath }); const prerenderStatus = getPrerenderStatus({ filePath, loader: env.loader }); if (prerenderStatus !== void 0) { route.prerender = prerenderStatus; } return { preloadedComponent, route, filePath }; }) ); return preloaded; } function prioritizePrerenderedMatchesComparator(a, b) { if (areRegexesEqual(a.pattern, b.pattern)) { if (a.prerender !== b.prerender) { return a.prerender ? -1 : 1; } return a.component < b.component ? -1 : 1; } return 0; } function areRegexesEqual(regexp1, regexp2) { return regexp1.source === regexp2.source && regexp1.global === regexp2.global; } export { getSortedPreloadedMatches };