UNPKG

vite-plugin-react-server

Version:
75 lines (71 loc) 1.95 kB
import { stashedPages } from "./config/resolvePages.js"; type ResolvePageOptions = { pageModule: Record<string, any>; path: string; url: string; exportName: string; }; type ResolvePageResult = | { type: "success"; key: string; Page: any } | { type: "error"; error: Error } | { type: "skip" }; export async function resolvePage({ pageModule, path, url, exportName, }: ResolvePageOptions): Promise<ResolvePageResult> { if(stashedPages.length > 0 && stashedPages.includes(path)){ return { type: "success", key: path, Page: pageModule, } } if (!pageModule) { return { type: "error", error: new Error(`pageModule is ${typeof pageModule}`), }; } const keys = typeof pageModule === "object" && pageModule != null ? Object.keys(pageModule) : []; const found = keys.find((v) => v === exportName || v === url || v === path); if (found) { if (typeof pageModule[found] === "function") { return { type: "success", key: found, Page: pageModule[found], }; } else { if ( typeof pageModule === "object" && pageModule != null && Object.keys(pageModule).includes("type") ) return pageModule as ResolvePageResult; return { type: "error", [exportName]: () => found, error: pageModule[found]["error"], }; } } if (keys.includes("type")) return pageModule as ResolvePageResult; return { type: "error", error: new Error( `Could not find Page export "${exportName}" in "${path}". ${ typeof pageModule === "object" && pageModule != null ? keys.length ? "Available exports: " + keys.join(", ") : "The object was defined but has no properties. \"" + JSON.stringify(pageModule) + "\"" : "typeof pageModule =" + typeof pageModule }`, { cause: pageModule } ), }; }