one
Version:
One is a React framework for web, iOS, and Android apps.
1 lines • 10.7 kB
Source Map (JSON)
{"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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"}