{"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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"}