UNPKG

iles

Version:

Vite & Vue powered static site generator with partial hydration

59 lines (56 loc) 2.11 kB
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 };