UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

153 lines (151 loc) • 6.18 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const require_locale = require('./locale.cjs'); const require_ui_router = require('./router.cjs'); const require_ui_api = require('./api.cjs'); const require_ui_auth = require('./auth.cjs'); const require_ui_router_defaults = require('./router-defaults.cjs'); const require_ui_router_error = require('./router-error.cjs'); let react_jsx_runtime = require("react/jsx-runtime"); let _tanstack_react_router = require("@tanstack/react-router"); let _tanstack_react_query = require("@tanstack/react-query"); let _tanstack_react_router_ssr_server = require("@tanstack/react-router/ssr/server"); //#region src/ui/router-server.tsx /** * SSR router factory — creates request-scoped server routers and server-side * API/auth clients per request. Mirrors the client router shape for * hydration consistency. The app injects its generated route tree and (for * a byte-identical child surface) its error component. */ function createServerRouterModule(options = {}) { const defaultRouteTree = options.defaultRouteTree; const createRouter = (opts) => { const context = opts?.context; const queryClient = context?.queryClient ?? require_ui_router_defaults.defaultQueryClient(); const history = opts?.history ?? (0, _tanstack_react_router.createMemoryHistory)(); const cspNonce = context?.cspNonce; return { router: (0, _tanstack_react_router.createRouter)({ routeTree: opts?.routeTree ?? defaultRouteTree, history, basepath: opts?.basepath, context: { queryClient, runtimeConfig: context?.runtimeConfig, apiClient: context?.apiClient, authClient: context?.authClient ?? require_ui_auth.createAuthClient({ runtimeConfig: context?.runtimeConfig, cspNonce: context?.cspNonce }), session: context?.session, cspNonce, locale: context?.locale, pluginNav: context?.pluginNav }, ...cspNonce ? { ssr: { nonce: cspNonce } } : {}, defaultPreload: "intent", scrollRestoration: true, defaultStructuralSharing: true, defaultPreloadStaleTime: 0, defaultErrorComponent: require_ui_router_error.RouterError, defaultOnCatch: (error, errorInfo) => { console.error("[SSR] Router error boundary caught:", error, { componentStack: errorInfo.componentStack }); }, defaultNotFoundComponent: require_ui_router_defaults.defaultNotFoundComponent, defaultPendingComponent: require_ui_router_defaults.defaultPendingComponent, defaultPendingMinMs: 0, dehydrate: () => { if (typeof window === "undefined") return { queryClientState: (0, _tanstack_react_query.dehydrate)(queryClient) }; return { queryClientState: {} }; }, hydrate: (dehydrated) => { if (typeof window !== "undefined" && dehydrated?.queryClientState) (0, _tanstack_react_query.hydrate)(queryClient, dehydrated.queryClientState); } }), queryClient }; }; const buildRouter = options.createRouter ?? createRouter; const getRouteHead = async (pathname, context) => { const history = (0, _tanstack_react_router.createMemoryHistory)({ initialEntries: [pathname] }); const queryClient = new _tanstack_react_query.QueryClient(); const runtimeConfig = context?.runtimeConfig; if (!runtimeConfig?.hostUrl || !runtimeConfig.rpcBase) throw new Error("Missing runtime config for route head generation"); const router = (0, _tanstack_react_router.createRouter)({ routeTree: context?.routeTree ?? defaultRouteTree, history, context: { queryClient, runtimeConfig, apiClient: context?.apiClient ?? require_ui_api.createApiClient({ hostUrl: runtimeConfig.hostUrl, rpcBase: runtimeConfig.rpcBase }), authClient: context?.authClient ?? require_ui_auth.createAuthClient({ runtimeConfig, cspNonce: context?.cspNonce }), session: context?.session, locale: context?.locale } }); return require_ui_router.collectHeadData(router); }; const renderToStream = async (request, renderOptions) => { const url = new URL(request.url); const history = (0, _tanstack_react_router.createMemoryHistory)({ initialEntries: [url.pathname + url.search] }); let queryClientRef = null; const response = await (0, _tanstack_react_router_ssr_server.createRequestHandler)({ request, createRouter: () => { const localQueryClient = queryClientRef ?? options.createQueryClient?.() ?? require_ui_router_defaults.defaultQueryClient(); const built = buildRouter({ history, routeTree: renderOptions.routeTree, basepath: renderOptions.basepath, context: { queryClient: localQueryClient, runtimeConfig: renderOptions.runtimeConfig, apiClient: renderOptions.apiClient, authClient: require_ui_auth.createAuthClient({ runtimeConfig: renderOptions.runtimeConfig, headers: request.headers, cspNonce: renderOptions.cspNonce }), session: renderOptions.session, cspNonce: renderOptions.cspNonce, pluginNav: renderOptions.pluginNav, locale: options.locale ? require_locale.resolveLocale({ ...options.locale, cookie: request.headers.get("cookie") ?? "", browserLocales: require_locale.readAcceptLanguage(request.headers.get("accept-language")) }) : void 0 } }); queryClientRef = built.queryClient ?? localQueryClient; return built.router; } })(({ request, responseHeaders, router }) => (0, _tanstack_react_router_ssr_server.renderRouterToStream)({ request, responseHeaders, router, children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_tanstack_react_query.QueryClientProvider, { client: queryClientRef, children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_tanstack_react_router_ssr_server.RouterServer, { router }) }) })); if (options.locale) response.headers.append("Vary", "Cookie, Accept-Language"); return { stream: response.body, statusCode: response.status, headers: response.headers }; }; return { createRouter, getRouteHead, renderToStream }; } //#endregion exports.createServerRouterModule = createServerRouterModule; //# sourceMappingURL=router-server.cjs.map