{"version":3,"file":"createApp.js","names":[],"sources":["esm/createApp.js"],"sourcesContent":["import \"./setup\";\nimport { cloneElement } from \"react\";\nimport { resolveClientLoader } from \"./clientLoaderResolver\";\nimport { Root } from \"./Root\";\nimport { render } from \"./render\";\nimport { initClientMatches } from \"./router/router\";\nimport { registerPreloadedRoute } from \"./router/useViteRoutes\";\nimport { setupSkewProtection } from \"./skewProtection\";\nimport { handleSkewError, isChunkLoadError } from \"./utils/dynamicImport\";\nimport { findRootLayout } from \"./utils/findRootLayout\";\nimport { getServerHeadInsertions } from \"./useServerHeadInsertion\";\nimport { SERVER_CONTEXT_POST_RENDER_STRING } from \"./vite/constants\";\nimport { safeJsonStringify } from \"./utils/htmlEscape\";\nimport { getServerContext, setServerContext } from \"./vite/one-server-only\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nfunction createApp(options) {\n  if (import.meta.env.SSR) {\n    let cachedServerRender;\n    let cachedRenderToStaticMarkup;\n    let cachedRenderToString;\n    let setupDone = false;\n    return {\n      options,\n      render: async (props) => {\n        const renderMode = props.mode === \"spa-shell\" ? \"spa\" : props.mode;\n        const shouldRunSetup = props.mode !== \"ssg\" && props.mode !== \"spa-shell\";\n        if (process.env.ONE_RENDER_MODE !== renderMode) {\n          process.env.ONE_RENDER_MODE = renderMode;\n        }\n        if (shouldRunSetup && !setupDone && options.getSetupPromise) {\n          await options.getSetupPromise();\n          setupDone = true;\n        }\n        if (!cachedServerRender) {\n          const sr = await import(\"./server-render\");\n          cachedServerRender = sr;\n          cachedRenderToStaticMarkup = sr.renderToStaticMarkup;\n          cachedRenderToString = sr.renderToString;\n        }\n        const renderToStaticMarkup = cachedRenderToStaticMarkup;\n        const renderToString = cachedRenderToString;\n        const {\n          loaderData,\n          loaderProps,\n          css,\n          cssContents,\n          mode,\n          loaderServerData,\n          routePreloads: routePreloads2,\n          matches\n        } = props;\n        setServerContext({\n          postRenderData: loaderServerData,\n          loaderData,\n          loaderProps,\n          mode,\n          css,\n          cssContents,\n          routePreloads: routePreloads2,\n          matches\n        });\n        let renderId;\n        const rootElement = /* @__PURE__ */ jsx(\n          Root,\n          {\n            flags: options.flags,\n            onRenderId: (id) => {\n              renderId = id;\n            },\n            routes: options.routes,\n            routerRoot: options.routerRoot,\n            linking: options.linking,\n            ...props\n          }\n        );\n        let html = await renderToString(rootElement, {\n          preloads: props.preloads\n        });\n        if (renderId) {\n          const insertions = getServerHeadInsertions(renderId);\n          if (insertions?.length) {\n            const extraHeadElements = insertions.map((insertion) => insertion()).filter(Boolean);\n            if (extraHeadElements.length) {\n              const extraHeadHTML = renderToStaticMarkup(\n                /* @__PURE__ */ jsx(Fragment, { children: extraHeadElements.map((x, i) => cloneElement(x, { key: i })) })\n              );\n              if (extraHeadHTML) {\n                html = html.replace(`</head>`, `${extraHeadHTML}</head>`);\n              }\n            }\n          }\n        }\n        const postRenderData = getServerContext()?.postRenderData;\n        if (postRenderData) {\n          html = html.replace(\n            safeJsonStringify(SERVER_CONTEXT_POST_RENDER_STRING),\n            safeJsonStringify(postRenderData)\n          );\n        }\n        return html;\n      },\n      // streaming SSR - returns ReadableStream, no post-processing\n      renderStream: async (props) => {\n        const renderMode = props.mode === \"spa-shell\" ? \"spa\" : props.mode;\n        const shouldRunSetup = props.mode !== \"ssg\" && props.mode !== \"spa-shell\";\n        if (process.env.ONE_RENDER_MODE !== renderMode) {\n          process.env.ONE_RENDER_MODE = renderMode;\n        }\n        if (shouldRunSetup && !setupDone && options.getSetupPromise) {\n          await options.getSetupPromise();\n          setupDone = true;\n        }\n        if (!cachedServerRender) {\n          const sr = await import(\"./server-render\");\n          cachedServerRender = sr;\n          cachedRenderToStaticMarkup = sr.renderToStaticMarkup;\n          cachedRenderToString = sr.renderToString;\n        }\n        const {\n          loaderData,\n          loaderProps,\n          css,\n          cssContents,\n          mode,\n          loaderServerData,\n          routePreloads: routePreloads2,\n          matches\n        } = props;\n        setServerContext({\n          postRenderData: loaderServerData,\n          loaderData,\n          loaderProps,\n          mode,\n          css,\n          cssContents,\n          routePreloads: routePreloads2,\n          matches\n        });\n        const rootElement = /* @__PURE__ */ jsx(\n          Root,\n          {\n            flags: options.flags,\n            routes: options.routes,\n            routerRoot: options.routerRoot,\n            linking: options.linking,\n            ...props\n          }\n        );\n        return cachedServerRender.renderToStream(rootElement, {\n          preloads: props.preloads\n        });\n      }\n    };\n  }\n  setupSkewProtection();\n  const serverContext = getServerContext() || {};\n  const routePreloads = serverContext.routePreloads;\n  if (serverContext.matches) {\n    const lastIndex = serverContext.matches.length - 1;\n    const restoredMatches = serverContext.matches.map((m, index) => {\n      if (index === lastIndex && m.loaderData === void 0 && serverContext.loaderData !== void 0) {\n        return { ...m, loaderData: serverContext.loaderData };\n      }\n      return m;\n    });\n    initClientMatches(restoredMatches);\n  }\n  const setupComplete = options.getSetupPromise ? options.getSetupPromise() : Promise.resolve();\n  const preloadPromises = routePreloads ? Object.entries(routePreloads).map(async ([routeKey, bundlePath]) => {\n    const mod = await import(\n      /* @vite-ignore */\n      bundlePath\n    );\n    registerPreloadedRoute(routeKey, mod);\n    return mod;\n  }) : [findRootLayout(options.routes, options.routerRoot)];\n  const one404Marker = window.__one404;\n  if (one404Marker?.notFoundPath) {\n    const currentState = window.history.state || {};\n    window.history.replaceState(\n      {\n        ...currentState,\n        __tempLocation: { pathname: one404Marker.notFoundPath, search: \"\" }\n      },\n      \"\"\n    );\n  }\n  return setupComplete.then(() => Promise.all(preloadPromises)).then(() => {\n    return resolveClientLoader(serverContext);\n  }).then(() => {\n    render(\n      /* @__PURE__ */ jsx(\n        Root,\n        {\n          isClient: true,\n          flags: options.flags,\n          routes: options.routes,\n          routerRoot: options.routerRoot,\n          linking: options.linking,\n          path: window.location.href\n        }\n      )\n    );\n  }).catch((err) => {\n    console.error(`Error during client initialization:`, err);\n    if (isChunkLoadError(err)) {\n      handleSkewError();\n    }\n  });\n}\nexport {\n  createApp\n};\n//# sourceMappingURL=createApp.js.map\n"],"mappings":"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"}