UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 45.5 kB
{"version":3,"file":"oneServe.js","names":[],"sources":["esm/server/oneServe.js"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { join, posix } from \"node:path\";\nimport {\n CSS_PRELOAD_JS_POSTFIX_REGEX,\n LOADER_JS_POSTFIX_UNCACHED,\n PRELOAD_JS_POSTFIX_REGEX\n} from \"../constants\";\nimport {\n compileManifest,\n getSubdomain,\n getURLfromRequestURL,\n runMiddlewares\n} from \"../createHandleRequest\";\nimport { getPathFromLoaderPath } from \"../utils/cleanUrl\";\nimport { getRouterRootFromOneOptions } from \"../utils/getRouterRootFromOneOptions\";\nimport { toAbsoluteUrl } from \"../utils/toAbsolute\";\nimport { toServerOutputPath } from \"../utils/toServerOutputPath\";\nimport { getRouteExportsFromEntry } from \"./routeExportsFromEntry\";\nimport { setSSRLoaderData } from \"./ssrLoaderData\";\nimport { getFetchStaticHtml } from \"./staticHtmlFetcher\";\nconst debugRouter = process.env.ONE_DEBUG_ROUTER;\nconst MODULE_CACHE_MAX = 500;\nfunction setBounded(map, key, value, max) {\n if (map.has(key)) {\n map.set(key, value);\n return;\n }\n if (map.size >= max) {\n const firstKey = map.keys().next().value;\n if (firstKey !== void 0) map.delete(firstKey);\n }\n map.set(key, value);\n}\nfunction forwardHeaders(response, context) {\n const setCookies = response.headers.getSetCookie?.();\n if (setCookies?.length) {\n for (const cookie of setCookies) {\n context.header(\"set-cookie\", cookie, { append: true });\n }\n }\n response.headers.forEach((value, key) => {\n if (key === \"set-cookie\") return;\n context.header(key, value);\n });\n}\nasync function readStaticHtml(htmlPath, outDir = \"dist\") {\n const fetchStaticHtml = getFetchStaticHtml();\n if (fetchStaticHtml) {\n const html = await fetchStaticHtml(htmlPath);\n if (html) return html;\n }\n try {\n return await readFile(join(`${outDir}/client`, htmlPath), \"utf-8\");\n } catch {\n return null;\n }\n}\nasync function oneServe(oneOptions, buildInfo, app, options) {\n const outDir = buildInfo.outDir || \"dist\";\n const { resolveAPIRoute, resolveLoaderRoute, resolvePageRoute } = await import(\"../createHandleRequest\");\n const { isResponse } = await import(\"../utils/isResponse\");\n const { isStatusRedirect } = await import(\"../utils/isStatus\");\n const { resolveResponse } = await import(\"../vite/resolveResponse\");\n const isAPIRequest = /* @__PURE__ */ new WeakMap();\n const redirects = oneOptions.web?.redirects;\n if (redirects) {\n for (const redirect of redirects) {\n app.get(redirect.source, (context) => {\n const destinationUrl = redirect.destination.replace(/:\\w+/g, (param) => {\n const paramName = param.substring(1);\n return context.req.param(paramName) || \"\";\n });\n if (debugRouter) {\n console.info(`[one] \\u21AA redirect ${context.req.path} \\u2192 ${destinationUrl}`);\n }\n return context.redirect(destinationUrl, redirect.permanent ? 301 : 302);\n });\n }\n }\n if (!buildInfo) {\n throw new Error(`No build info found, have you run build?`);\n }\n const { routeToBuildInfo, routeMap } = buildInfo;\n function findNearestNotFoundPath(urlPath) {\n let cur = urlPath;\n while (cur) {\n const parent = cur.lastIndexOf(\"/\") > 0 ? cur.slice(0, cur.lastIndexOf(\"/\")) : \"\";\n if (routeMap[`${parent}/+not-found`]) {\n return `${parent}/+not-found`;\n }\n if (!parent) break;\n cur = parent;\n }\n return \"/+not-found\";\n }\n function make404LoaderJs(path, logReason) {\n const nfPath = findNearestNotFoundPath(path);\n if (logReason) {\n console.error(`[one] 404 loader for ${path}: ${logReason}`);\n }\n return `export function loader(){return{__oneError:404,__oneErrorMessage:'Not Found',__oneNotFoundPath:${JSON.stringify(nfPath)}}}`;\n }\n const serverOptions = {\n ...oneOptions,\n root: \".\"\n };\n const apiCJS = oneOptions.build?.api?.outputFormat === \"cjs\";\n const routerRoot = getRouterRootFromOneOptions(oneOptions);\n const useStreaming = !process.env.ONE_BUFFERED_SSR;\n const htmlHeaders = { \"content-type\": \"text/html\" };\n const ssrHtmlHeaders = { \"content-type\": \"text/html\", \"cache-control\": \"no-cache\" };\n const loaderCache = /* @__PURE__ */ new Map();\n const moduleImportCache = /* @__PURE__ */ new Map();\n const loaderCacheFnMap = /* @__PURE__ */ new Map();\n const pendingLoaderResults = /* @__PURE__ */ new Map();\n async function importRouteModule(lazyKey, serverPath) {\n if (lazyKey && options?.lazyRoutes?.pages?.[lazyKey]) {\n return await options.lazyRoutes.pages[lazyKey]();\n }\n if (lazyKey) {\n const entry = await loadServerEntry();\n const exported = await getRouteExportsFromEntry(entry, routerRoot, lazyKey);\n if (exported) return exported;\n }\n return await import(toAbsoluteUrl(toServerOutputPath(serverPath || lazyKey || \"\", outDir)));\n }\n function resolveLoaderSync(serverPath, lazyKey) {\n const cacheKey = lazyKey || serverPath || \"\";\n const cached = loaderCache.get(cacheKey);\n if (cached !== void 0) return cached;\n return (async () => {\n let routeExported;\n if (moduleImportCache.has(cacheKey)) {\n routeExported = moduleImportCache.get(cacheKey);\n } else {\n routeExported = await importRouteModule(lazyKey, serverPath);\n setBounded(moduleImportCache, cacheKey, routeExported, MODULE_CACHE_MAX);\n }\n const loader = routeExported?.loader || null;\n setBounded(loaderCache, cacheKey, loader, MODULE_CACHE_MAX);\n const loaderCacheFn = routeExported?.loaderCache ?? null;\n setBounded(loaderCacheFnMap, cacheKey, loaderCacheFn, MODULE_CACHE_MAX);\n return loader;\n })();\n }\n async function importAndRunLoader(routeId, serverPath, lazyKey, loaderProps) {\n if (!serverPath && !lazyKey) {\n return { loaderData: void 0, routeId };\n }\n const cacheMapKey = lazyKey || serverPath || \"\";\n const loaderCacheFn = loaderCacheFnMap.get(cacheMapKey);\n let coalFullKey;\n let coalTtl = 0;\n if (loaderCacheFn) {\n const cacheResult = loaderCacheFn(loaderProps?.params, loaderProps?.request);\n const cacheKey = typeof cacheResult === \"string\" ? cacheResult : cacheResult?.key;\n coalTtl = typeof cacheResult === \"string\" ? 0 : cacheResult?.ttl ?? 0;\n if (cacheKey != null) {\n coalFullKey = routeId + \"\\0\" + cacheKey;\n const existing = pendingLoaderResults.get(coalFullKey);\n if (existing && (!existing.expires || Date.now() < existing.expires)) {\n const loaderData = await existing.promise;\n return { loaderData, routeId };\n }\n }\n }\n try {\n const loaderOrPromise = resolveLoaderSync(serverPath, lazyKey);\n const loader = loaderOrPromise instanceof Promise ? await loaderOrPromise : loaderOrPromise;\n if (!loader) {\n return { loaderData: void 0, routeId };\n }\n if (coalFullKey) {\n const promise = loader(loaderProps);\n const entry = { promise, expires: 0 };\n pendingLoaderResults.set(coalFullKey, entry);\n promise.then(\n () => {\n entry.expires = coalTtl > 0 ? Date.now() + coalTtl : 0;\n if (coalTtl <= 0) {\n Promise.resolve().then(() => pendingLoaderResults.delete(coalFullKey));\n }\n },\n () => {\n pendingLoaderResults.delete(coalFullKey);\n }\n );\n const loaderData2 = await promise;\n return { loaderData: loaderData2, routeId };\n }\n const loaderData = await loader(loaderProps);\n return { loaderData, routeId };\n } catch (err) {\n if (isResponse(err)) {\n throw err;\n }\n if (err?.code === \"ENOENT\") {\n return { loaderData: void 0, routeId, isEnoent: true };\n }\n console.error(`[one] Error running loader for ${routeId}:`, err);\n return { loaderData: void 0, routeId };\n }\n }\n let render = null;\n let renderStream = null;\n let renderLoading = null;\n let entryLoading = null;\n function loadServerEntry() {\n if (!entryLoading) {\n entryLoading = options?.lazyRoutes?.serverEntry ? options.lazyRoutes.serverEntry() : import(toAbsoluteUrl(\n `${serverOptions.root}/${outDir}/server/_virtual_one-entry.${typeof oneOptions.build?.server === \"object\" && oneOptions.build.server.outputFormat === \"cjs\" ? \"c\" : \"\"}js`\n ));\n }\n return entryLoading;\n }\n function ensureRenderLoaded() {\n if (render) return;\n if (renderLoading) return renderLoading;\n renderLoading = (async () => {\n const entry = await loadServerEntry();\n render = entry.default.render;\n renderStream = entry.default.renderStream;\n })();\n return renderLoading;\n }\n const clientDir = join(process.cwd(), outDir, \"client\");\n const requestHandlers = {\n async handleStaticFile(filePath) {\n try {\n const fullPath = join(clientDir, filePath);\n const content = await readFile(fullPath, \"utf-8\");\n return new Response(content, {\n headers: { \"Content-Type\": \"text/javascript\" }\n });\n } catch {\n return null;\n }\n },\n async handleAPI({ route }) {\n if (options?.lazyRoutes?.api?.[route.page]) {\n return await options.lazyRoutes.api[route.page]();\n }\n const fileName = route.page.slice(1).replace(/\\[/g, \"_\").replace(/\\]/g, \"_\");\n const apiFile = posix.join(outDir, \"api\", fileName + (apiCJS ? \".cjs\" : \".js\"));\n return await import(toAbsoluteUrl(apiFile));\n },\n async loadMiddleware(route) {\n if (options?.lazyRoutes?.middlewares?.[route.contextKey]) {\n return await options.lazyRoutes.middlewares[route.contextKey]();\n }\n return await import(toAbsoluteUrl(route.contextKey));\n },\n async handleLoader({ route, loaderProps }) {\n const routeFile = route.routeFile || route.file;\n const serverPath = toServerOutputPath(route.file, outDir);\n let loader;\n try {\n const loaderResult = resolveLoaderSync(serverPath, routeFile);\n loader = loaderResult instanceof Promise ? await loaderResult : loaderResult;\n } catch (err) {\n if (err?.code === \"ERR_MODULE_NOT_FOUND\") {\n return null;\n }\n throw err;\n }\n if (!loader) {\n return null;\n }\n let json;\n try {\n json = await loader(loaderProps);\n } catch (err) {\n if (err?.code === \"ENOENT\") {\n return make404LoaderJs(\n loaderProps?.path || \"/\",\n `ENOENT ${err?.path || err}`\n );\n }\n throw err;\n }\n if (isResponse(json)) {\n throw json;\n }\n return `export function loader() { return ${JSON.stringify(json)} }`;\n },\n async handlePage({ route, url, loaderProps }) {\n const buildInfo2 = routeToBuildInfo[route.file];\n if (route.type === \"ssr\") {\n if (!buildInfo2) {\n console.error(`Error in route`, route);\n throw new Error(\n `No buildinfo found for ${url}, route: ${route.file}, in keys:\n ${Object.keys(routeToBuildInfo).join(\"\\n \")}`\n );\n }\n try {\n const layoutRoutes = route.layouts || [];\n const layoutLoaderPromises = [];\n const noLoaderResults = [];\n for (const layout of layoutRoutes) {\n const serverPath = layout.loaderServerPath || layout.contextKey;\n const cacheKey = layout.contextKey || serverPath || \"\";\n const cachedLoader = loaderCache.get(cacheKey);\n if (cachedLoader === null) {\n noLoaderResults.push({ loaderData: void 0, routeId: layout.contextKey });\n } else {\n layoutLoaderPromises.push(\n importAndRunLoader(\n layout.contextKey,\n serverPath,\n layout.contextKey,\n loaderProps\n )\n );\n }\n }\n const pageLoaderPromise = importAndRunLoader(\n route.file,\n buildInfo2.serverJsPath,\n route.file,\n loaderProps\n );\n let layoutResults;\n let pageResult;\n try {\n if (layoutLoaderPromises.length === 0) {\n layoutResults = noLoaderResults;\n pageResult = await pageLoaderPromise;\n } else {\n const [asyncLayoutResults, pr] = await Promise.all([\n Promise.all(layoutLoaderPromises),\n pageLoaderPromise\n ]);\n layoutResults = [...noLoaderResults, ...asyncLayoutResults];\n pageResult = pr;\n }\n } catch (err) {\n if (isResponse(err)) {\n return err;\n }\n throw err;\n }\n if (pageResult.isEnoent) {\n const nfPath = findNearestNotFoundPath(loaderProps?.path || \"/\");\n const nfHtml = routeMap[nfPath];\n if (nfHtml) {\n try {\n const html = await readFile(\n join(process.cwd(), `${outDir}/client`, nfHtml),\n \"utf-8\"\n );\n return new Response(html, {\n headers: { \"content-type\": \"text/html\" },\n status: 404\n });\n } catch {\n }\n }\n return new Response(\"404 Not Found\", { status: 404 });\n }\n const matchPathname = loaderProps?.path || \"/\";\n const matchParams = loaderProps?.params || {};\n const matches = new Array(layoutResults.length + 1);\n for (let i = 0; i < layoutResults.length; i++) {\n const result = layoutResults[i];\n matches[i] = {\n routeId: result.routeId,\n pathname: matchPathname,\n params: matchParams,\n loaderData: result.loaderData\n };\n }\n matches[layoutResults.length] = {\n routeId: pageResult.routeId,\n pathname: matchPathname,\n params: matchParams,\n loaderData: pageResult.loaderData\n };\n const loaderData = pageResult.loaderData;\n for (const layout of layoutRoutes) {\n const key = layout.contextKey;\n const loaderFn = loaderCache.get(key);\n if (loaderFn) {\n const result = layoutResults.find((r) => r.routeId === key);\n if (result) {\n setSSRLoaderData(loaderFn, result.loaderData);\n }\n }\n }\n const pageLoaderFn = loaderCache.get(route.file);\n if (pageLoaderFn) {\n setSSRLoaderData(pageLoaderFn, pageResult.loaderData);\n }\n globalThis[\"__vxrnresetState\"]?.();\n const renderProps = {\n mode: route.type,\n loaderData,\n loaderProps,\n path: loaderProps?.path || \"/\",\n preloads: buildInfo2.criticalPreloads || buildInfo2.preloads,\n deferredPreloads: buildInfo2.deferredPreloads,\n css: buildInfo2.css,\n cssContents: buildInfo2.cssContents,\n matches\n };\n const _rl = ensureRenderLoaded();\n if (_rl) await _rl;\n const status = route.isNotFound ? 404 : 200;\n const responseHeaders = route.isNotFound ? htmlHeaders : ssrHtmlHeaders;\n if (useStreaming) {\n const stream = await renderStream(renderProps);\n return new Response(stream, {\n headers: responseHeaders,\n status\n });\n }\n const rendered = await render(renderProps);\n return new Response(rendered, {\n headers: responseHeaders,\n status\n });\n } catch (err) {\n if (isResponse(err)) {\n return err;\n }\n console.error(`[one] Error rendering SSR route ${route.file}\n\n${err?.[\"stack\"] ?? err}\n\nurl: ${url}`);\n }\n } else {\n const layoutRoutes = route.layouts || [];\n const needsSpaShell = route.type === \"spa\" && layoutRoutes.some(\n (layout) => layout.layoutRenderMode === \"ssg\" || layout.layoutRenderMode === \"ssr\"\n );\n if (needsSpaShell) {\n try {\n const layoutResults = await Promise.all(\n layoutRoutes.map((layout) => {\n const serverPath = layout.loaderServerPath || layout.contextKey;\n return importAndRunLoader(\n layout.contextKey,\n serverPath,\n layout.contextKey,\n loaderProps\n );\n })\n );\n const matches = layoutResults.map((result) => ({\n routeId: result.routeId,\n pathname: loaderProps?.path || \"/\",\n params: loaderProps?.params || {},\n loaderData: result.loaderData\n }));\n globalThis[\"__vxrnresetState\"]?.();\n const _rl3 = ensureRenderLoaded();\n if (_rl3) await _rl3;\n const rendered = await render({\n mode: \"spa-shell\",\n // don't pass loaderData for spa-shell - the page loader runs on client\n // passing {} here would make useLoaderState think data is preloaded\n loaderData: void 0,\n loaderProps,\n path: loaderProps?.path || \"/\",\n preloads: buildInfo2?.criticalPreloads || buildInfo2?.preloads,\n deferredPreloads: buildInfo2?.deferredPreloads,\n css: buildInfo2?.css,\n cssContents: buildInfo2?.cssContents,\n matches\n });\n return new Response(rendered, {\n headers: htmlHeaders,\n status: route.isNotFound ? 404 : 200\n });\n } catch (err) {\n if (isResponse(err)) {\n return err;\n }\n console.error(\n `[one] Error rendering spa-shell for ${route.file}\n${err?.[\"stack\"] ?? err}\nurl: ${url}`\n );\n }\n }\n const isDynamicRoute = Object.keys(route.routeKeys).length > 0;\n const routeCleanPath = route.urlCleanPath.replace(/\\?/g, \"\");\n const notFoundKey = route.isNotFound ? route.page.replace(/\\[([^\\]]+)\\]/g, \":$1\") : null;\n const htmlPath = notFoundKey ? routeMap[notFoundKey] : isDynamicRoute ? routeMap[routeCleanPath] || routeMap[url.pathname] : routeMap[url.pathname] || routeMap[buildInfo2?.cleanPath];\n if (htmlPath) {\n const html = await readStaticHtml(htmlPath, outDir);\n if (html) {\n const headers = new Headers();\n headers.set(\"content-type\", \"text/html\");\n return new Response(html, {\n headers,\n status: route.isNotFound ? 404 : 200\n });\n }\n }\n if (isDynamicRoute) {\n const notFoundRoute = findNearestNotFoundPath(url.pathname);\n const notFoundHtmlPath = routeMap[notFoundRoute];\n if (notFoundHtmlPath) {\n const notFoundHtml = await readStaticHtml(notFoundHtmlPath, outDir);\n if (notFoundHtml) {\n const notFoundMarker = `<script>window.__one404=${JSON.stringify({ originalPath: url.pathname, notFoundPath: notFoundRoute })}</script>`;\n const injectedHtml = notFoundHtml.includes(\"</head>\") ? notFoundHtml.replace(\"</head>\", `${notFoundMarker}</head>`) : notFoundHtml.replace(\"<body\", `${notFoundMarker}<body`);\n const headers = new Headers();\n headers.set(\"content-type\", \"text/html\");\n return new Response(injectedHtml, {\n headers,\n status: 404\n });\n }\n }\n return new Response(\"404 Not Found\", { status: 404 });\n }\n }\n }\n };\n function createHonoHandler(route) {\n const isDynamicOrNotFound = route.page.endsWith(\"/+not-found\") || Object.keys(route.routeKeys).length > 0;\n return async (context, next) => {\n try {\n const request = context.req.raw;\n if (isDynamicOrNotFound) {\n if (options?.serveStaticAssets) {\n const staticAssetResponse = await options.serveStaticAssets({\n context\n });\n if (staticAssetResponse) {\n return await runMiddlewares(\n requestHandlers,\n request,\n route,\n async () => staticAssetResponse\n );\n }\n }\n }\n const reqPath = context.req.path;\n if (reqPath.endsWith(\".js\") || reqPath.endsWith(\".css\")) {\n return next();\n }\n if (route.type === \"ssr\" && !route.middlewares?.length && !reqPath.endsWith(LOADER_JS_POSTFIX_UNCACHED)) {\n if (debugRouter) {\n console.info(`[one] \\u26A1 ${reqPath} \\u2192 matched page route: ${route.page} (ssr)`);\n }\n const pathname = reqPath;\n const rawUrl = request.url;\n const qIdx = rawUrl.indexOf(\"?\");\n const search = qIdx >= 0 ? rawUrl.slice(qIdx) : \"\";\n const params = {};\n const match = route.compiledRegex.exec(pathname);\n if (match?.groups) {\n for (const [key, value] of Object.entries(match.groups)) {\n const namedKey = route.routeKeys[key];\n params[namedKey] = value;\n }\n }\n const loaderProps = {\n path: pathname,\n search,\n subdomain: getSubdomain(getURLfromRequestURL(request)),\n request,\n params\n };\n const url2 = getURLfromRequestURL(request);\n const response2 = await resolveResponse(async () => {\n try {\n return await requestHandlers.handlePage({\n request,\n route,\n url: url2,\n loaderProps\n });\n } catch (err) {\n if (isResponse(err)) {\n return err;\n }\n throw err;\n }\n });\n if (response2) {\n if (isResponse(response2)) {\n if (isStatusRedirect(response2.status)) {\n const location = `${response2.headers.get(\"location\") || \"\"}`;\n forwardHeaders(response2, context);\n return context.redirect(location, response2.status);\n }\n return response2;\n }\n return next();\n }\n return next();\n }\n const url = getURLfromRequestURL(request);\n const response = await (() => {\n if (url.pathname.endsWith(LOADER_JS_POSTFIX_UNCACHED)) {\n const originalUrl = getPathFromLoaderPath(url.pathname);\n if (route.type === \"ssg\" && Object.keys(route.routeKeys).length > 0) {\n if (!routeMap[originalUrl]) {\n return new Response(\n make404LoaderJs(originalUrl, \"ssg route not in routeMap\"),\n {\n headers: { \"Content-Type\": \"text/javascript\" }\n }\n );\n }\n }\n const finalUrl = new URL(originalUrl, url.origin);\n finalUrl.search = url.search;\n const cleanedRequest = new Request(finalUrl, request);\n return resolveLoaderRoute(requestHandlers, cleanedRequest, finalUrl, route);\n }\n switch (route.type) {\n case \"api\": {\n if (debugRouter) {\n console.info(\n `[one] \\u26A1 ${url.pathname} \\u2192 matched API route: ${route.page}`\n );\n }\n return resolveAPIRoute(requestHandlers, request, url, route);\n }\n case \"ssg\":\n case \"spa\":\n case \"ssr\": {\n if (debugRouter) {\n console.info(\n `[one] \\u26A1 ${url.pathname} \\u2192 matched page route: ${route.page} (${route.type})`\n );\n }\n return resolvePageRoute(requestHandlers, request, url, route);\n }\n }\n })();\n if (response) {\n if (isResponse(response)) {\n if (isStatusRedirect(response.status)) {\n const location = `${response.headers.get(\"location\") || \"\"}`;\n forwardHeaders(response, context);\n return context.redirect(location, response.status);\n }\n if (isAPIRequest.get(request)) {\n try {\n if (!response.headers.has(\"cache-control\") && !response.headers.has(\"Cache-Control\")) {\n response.headers.set(\"cache-control\", \"no-store\");\n }\n return response;\n } catch (err) {\n console.info(\n `Error updating cache header on api route \"${context.req.path}\" to no-store, it is ${response.headers.get(\"cache-control\")}, continue`,\n err\n );\n }\n }\n if (!response.headers.has(\"cache-control\") && !response.headers.has(\"Cache-Control\")) {\n if (route.type === \"ssg\" || route.type === \"spa\") {\n response.headers.set(\n \"cache-control\",\n \"public, s-maxage=60, stale-while-revalidate=120\"\n );\n } else {\n response.headers.set(\"cache-control\", \"no-cache\");\n }\n }\n return response;\n }\n return next();\n }\n } catch (err) {\n console.error(` [one] Error handling request: ${err[\"stack\"]}`);\n }\n return next();\n };\n }\n const compiledManifest = compileManifest(buildInfo.manifest);\n for (const route of compiledManifest.apiRoutes) {\n app.get(route.urlPath, createHonoHandler(route));\n app.put(route.urlPath, createHonoHandler(route));\n app.post(route.urlPath, createHonoHandler(route));\n app.delete(route.urlPath, createHonoHandler(route));\n app.patch(route.urlPath, createHonoHandler(route));\n app.options(route.urlPath, createHonoHandler(route));\n if (route.urlPath !== route.urlCleanPath) {\n app.get(route.urlCleanPath, createHonoHandler(route));\n app.put(route.urlCleanPath, createHonoHandler(route));\n app.post(route.urlCleanPath, createHonoHandler(route));\n app.delete(route.urlCleanPath, createHonoHandler(route));\n app.patch(route.urlCleanPath, createHonoHandler(route));\n app.options(route.urlCleanPath, createHonoHandler(route));\n }\n }\n for (const route of compiledManifest.pageRoutes) {\n app.get(route.urlPath, createHonoHandler(route));\n if (route.urlPath !== route.urlCleanPath) {\n app.get(route.urlCleanPath, createHonoHandler(route));\n }\n }\n const { preloads, cssPreloads } = buildInfo;\n app.get(\"*\", async (c, next) => {\n if (PRELOAD_JS_POSTFIX_REGEX.test(c.req.path)) {\n if (!preloads[c.req.path]) {\n c.header(\"Content-Type\", \"text/javascript\");\n c.status(200);\n return c.body(``);\n }\n }\n if (CSS_PRELOAD_JS_POSTFIX_REGEX.test(c.req.path)) {\n if (!cssPreloads?.[c.req.path]) {\n c.header(\"Content-Type\", \"text/javascript\");\n c.status(200);\n return c.body(`export default Promise.resolve()`);\n }\n }\n if (c.req.path.endsWith(LOADER_JS_POSTFIX_UNCACHED)) {\n const request = c.req.raw;\n const url = getURLfromRequestURL(request);\n const originalUrl = getPathFromLoaderPath(c.req.path);\n for (const route of compiledManifest.pageRoutes) {\n if (route.file === \"\") {\n continue;\n }\n if (!route.compiledRegex.test(originalUrl)) {\n continue;\n }\n if (route.type === \"ssg\" && Object.keys(route.routeKeys).length > 0 && !routeMap[originalUrl]) {\n c.header(\"Content-Type\", \"text/javascript\");\n c.status(200);\n return c.body(make404LoaderJs(originalUrl, \"ssg route not in routeMap\"));\n }\n const loaderRoute = {\n ...route,\n routeFile: route.file,\n // preserve original for lazy route lookup\n file: route.loaderServerPath || c.req.path\n };\n const finalUrl = new URL(originalUrl, url.origin);\n finalUrl.search = url.search;\n const cleanedRequest = new Request(finalUrl, request);\n try {\n const resolved = await resolveLoaderRoute(\n requestHandlers,\n cleanedRequest,\n finalUrl,\n loaderRoute\n );\n return resolved;\n } catch (err) {\n if (err?.code === \"ERR_MODULE_NOT_FOUND\") {\n c.header(\"Content-Type\", \"text/javascript\");\n c.status(200);\n return c.body(`export function loader() { return undefined }`);\n }\n console.error(`Error running loader: ${err}`);\n return next();\n }\n }\n }\n return next();\n });\n}\nexport {\n oneServe\n};\n//# sourceMappingURL=oneServe.js.map\n"],"mappings":"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"}