42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import { routeIsRedirect } from "../core/routing/helpers.js";
|
|
import { routeComparator } from "../core/routing/priority.js";
|
|
function getSortedPreloadedMatches({ matches, manifest }) {
|
|
return preloadAndSetPrerenderStatus({
|
|
matches,
|
|
manifest
|
|
}).sort((a, b) => routeComparator(a.route, b.route)).sort((a, b) => prioritizePrerenderedMatchesComparator(a.route, b.route));
|
|
}
|
|
function preloadAndSetPrerenderStatus({
|
|
matches,
|
|
manifest
|
|
}) {
|
|
const preloaded = new Array();
|
|
for (const route of matches) {
|
|
const filePath = new URL(`./${route.component}`, manifest.rootDir);
|
|
if (routeIsRedirect(route)) {
|
|
preloaded.push({
|
|
route,
|
|
filePath
|
|
});
|
|
continue;
|
|
}
|
|
preloaded.push({ 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
|
|
};
|