iles
Version:
Vite & Vue powered static site generator with partial hydration
59 lines (56 loc) • 2.11 kB
JavaScript
import {
pathToFilename
} from "./chunk-PUZAE3UL.js";
// src/node/build/routes.ts
import { extname } from "pathe";
var DYNAMIC_PARAM = "/:";
async function getRoutesToRender(config, createApp) {
const routesToRender = /* @__PURE__ */ new Map();
const { router } = await createApp();
for (const { path, ssrProps } of await resolveRoutesToRender(router)) {
const extension = extname(path).slice(1) || ".html";
const outputFilename = pathToFilename(path, extension);
routesToRender.set(path, { path, ssrProps, outputFilename, rendered: "" });
}
return Array.from(routesToRender.values());
}
async function resolveRoutesToRender(router) {
const toResolvedPath = (route) => {
try {
return { path: router.resolve(route).fullPath, ssrProps: route.ssrProps };
} catch (error) {
throw new Error(`Could not resolve ${String(route.name)}. Params: ${JSON.stringify(route.params)}. Error: ${error.message}`);
}
};
return (await Promise.all(router.getRoutes().map(async (route) => {
const routes = route.path.includes(DYNAMIC_PARAM) ? await getDynamicPaths(route) : [route];
return routes.map(toResolvedPath);
}))).flat();
}
async function getDynamicPaths(route) {
const { components, path } = route;
const file = path;
const { default: component } = components || {};
const page = isLazy(component) ? await component().then((m) => "default" in m ? m.default : m) : component;
const variants = await page?.getStaticPaths?.({ route });
if (!variants) {
console.warn(`'getStaticPaths' is not defined for ${file} so ${path} it won't be generated.`);
return [];
}
if (!Array.isArray(variants))
throw new Error(`Expected array from 'getStaticPaths' in ${file}, got: ${JSON.stringify(variants)}`);
return variants.map(({ params, props }) => ({ name: route.name, params, ssrProps: { ...params, ...props } }));
}
function isLazy(value) {
return typeof value === "function";
}
function toArray(array) {
array = array || [];
if (Array.isArray(array))
return array;
return [array];
}
export {
getRoutesToRender,
toArray
};