UNPKG

vite-plugin-react-server

Version:
112 lines (109 loc) 2.79 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { resolvePage } from '../resolvePage.js'; import { resolveProps } from '../resolveProps.js'; import { createRscStream } from './createRscStream.js'; async function createHandler({ getCss, root, cssFiles = [], cssModules = /* @__PURE__ */ new Map(), onCssFile, logger, loader, Html, CssCollector, pagePath, propsPath, pageExportName, propsExportName, inlineCss, moduleBase, preserveModulesRoot: _preserveModulesRoot, moduleBasePath, moduleRootPath, moduleBaseURL, route, pipableStreamOptions }) { const controller = new AbortController(); const loadWithCss = async (id) => { try { const mod = await loader(id); const pageCss = await Promise.resolve(getCss(id)); Array.from(pageCss.entries()).forEach(([css, linkOrContent]) => { cssModules.set(css, linkOrContent); if (typeof onCssFile === "function") { onCssFile(css, id); } }); return mod; } catch (e) { if (e.message?.includes("module runner has been closed")) { return { type: "skip" }; } else { return { type: "error", error: e }; } } }; const PropsModule = await resolveProps({ propsModule: propsPath ? await loadWithCss(propsPath) : { [propsExportName]: (url2) => ({ url: url2 }) }, path: String(propsPath), exportName: propsExportName, url: route }); if (PropsModule.type !== "success") { return PropsModule; } const PageModule = await resolvePage({ pageModule: pagePath ? await loadWithCss(pagePath) : { [pageExportName]: () => null }, path: String(pagePath), exportName: pageExportName, url: route }); if (PageModule.type !== "success") { return PageModule; } if (cssFiles) { cssFiles.forEach((css) => cssModules.set(typeof css === "string" ? css : css.path, css)); cssFiles = Array.from(cssModules.values()); } const url = typeof moduleBaseURL === "string" && moduleBaseURL !== "" ? new URL(route, moduleBaseURL).href : route; const stream = createRscStream({ Html, CssCollector, Page: PageModule[pageExportName], props: PropsModule[propsExportName], moduleRootPath, moduleBasePath, moduleBaseURL, logger, cssFiles: Array.from(cssModules.values()), route, url, pipableStreamOptions, htmlProps: {}, root, loader, inlineCss }); if (!stream) { return { type: "skip" }; } const assets = { css: cssFiles, bootstrapModules: pipableStreamOptions?.bootstrapModules ?? [] }; return { type: "success", controller, stream, assets, route }; } export { createHandler }; //# sourceMappingURL=createHandler.js.map