UNPKG

@tanstack/start-client-core

Version:

Modern and scalable routing for React applications

52 lines (51 loc) 2.08 kB
import { ServerFunctionSerializationAdapter } from "./ServerFunctionSerializationAdapter.js"; import { hydrate } from "@tanstack/router-core/ssr/client"; import { startInstance } from "#tanstack-start-entry"; import { hasPluginAdapters, pluginSerializationAdapters } from "#tanstack-start-plugin-adapters"; import { getRouter } from "#tanstack-router-entry"; //#region src/client/hydrateStart.ts async function hydrateStart() { const router = await getRouter(); let serializationAdapters; if (startInstance) { const startOptions = await startInstance.getOptions(); startOptions.serializationAdapters = startOptions.serializationAdapters ?? []; window.__TSS_START_OPTIONS__ = startOptions; serializationAdapters = startOptions.serializationAdapters; router.options.defaultSsr = startOptions.defaultSsr; } else { serializationAdapters = []; window.__TSS_START_OPTIONS__ = { serializationAdapters }; } if (hasPluginAdapters) serializationAdapters.push(...pluginSerializationAdapters); serializationAdapters.push(ServerFunctionSerializationAdapter); if (router.options.serializationAdapters) serializationAdapters.push(...router.options.serializationAdapters); router.update({ basepath: process.env.TSS_ROUTER_BASEPATH, serializationAdapters }); if (!router.stores.matchesId.get().length) await hydrate(router); return router; } function hydrateStartWithHmr() { const hot = import.meta.hot ?? import.meta.webpackHot; if (!hot) return hydrateStart(); const key = "tss-hydrate-start-promise"; const hotData = hot.data ??= {}; let hydrationPromise = hotData[key]; if (!hydrationPromise) { hydrationPromise = hydrateStart().catch((error) => { if (hotData[key] === hydrationPromise) hotData[key] = void 0; throw error; }); hotData[key] = hydrationPromise; } hot.dispose?.((data) => { data[key] = hotData[key]; }); return hydrationPromise; } var exportedHydrateStart = process.env.NODE_ENV !== "production" ? hydrateStartWithHmr : hydrateStart; //#endregion export { exportedHydrateStart }; //# sourceMappingURL=hydrateStart.js.map