{"version":3,"file":"createDevHandleRequest.js","names":[],"sources":["esm/createDevHandleRequest.js"],"sourcesContent":["import { LOADER_JS_POSTFIX_UNCACHED } from \"./constants\";\nimport {\n  compileManifest,\n  getURLfromRequestURL,\n  isPageRequestMethod,\n  isStaticAssetRequestPath,\n  resolveAPIRoute,\n  resolveLoaderRoute,\n  resolvePageRoute,\n  runMiddlewares\n} from \"./createHandleRequest\";\nimport { getPathFromLoaderPath } from \"./utils/cleanUrl\";\nimport { getManifest } from \"./vite/getManifest\";\nconst debugRouter = process.env.ONE_DEBUG_ROUTER;\nfunction createHandleRequest(handlers, {\n  routerRoot,\n  ignoredRouteFiles,\n  routePaths\n}) {\n  const manifest = getManifest({ routerRoot, ignoredRouteFiles, routePaths });\n  if (!manifest) {\n    throw new Error(`No routes manifest`);\n  }\n  const compiledManifest = compileManifest(manifest);\n  return {\n    manifest,\n    handler: async function handleRequest(request) {\n      const url = getURLfromRequestURL(request);\n      const { pathname } = url;\n      if (pathname === \"/__vxrnhmr\" || pathname.startsWith(\"/@vite/\") || pathname.startsWith(\"/@fs/\") || pathname.startsWith(\"/@id/\") || pathname.startsWith(\"/node_modules/\") || pathname.startsWith(\"/debugger-frontend\") || pathname.startsWith(\"/inspector\")) {\n        return null;\n      }\n      const looksLikeStaticFile = isStaticAssetRequestPath(pathname);\n      if (handlers.handleAPI) {\n        const apiRoute = compiledManifest.apiRoutes.find((route) => {\n          return route.compiledRegex.test(pathname);\n        });\n        if (apiRoute) {\n          if (debugRouter) {\n            console.info(`[one] \\u26A1 ${pathname} \\u2192 matched API route: ${apiRoute.page}`);\n          }\n          return await resolveAPIRoute(handlers, request, url, apiRoute);\n        }\n      }\n      if (!isPageRequestMethod(request.method)) {\n        return null;\n      }\n      if (handlers.handleLoader) {\n        const isClientRequestingNewRoute = pathname.endsWith(LOADER_JS_POSTFIX_UNCACHED);\n        if (isClientRequestingNewRoute) {\n          const platformParam = url.searchParams.get(\"platform\");\n          const isNativePlatform = platformParam === \"ios\" || platformParam === \"android\" || platformParam === \"native\";\n          if (isNativePlatform && handlers.handleStaticFile) {\n            const nativeLoaderPath = pathname.replace(/\\.js$/, \".native.js\");\n            const staticResponse = await handlers.handleStaticFile(nativeLoaderPath);\n            if (staticResponse) {\n              return staticResponse;\n            }\n          }\n          const originalUrl = getPathFromLoaderPath(pathname);\n          for (const route of compiledManifest.pageRoutes) {\n            if (route.file === \"\") {\n              continue;\n            }\n            const finalUrl = new URL(originalUrl, url.origin);\n            finalUrl.search = url.search;\n            if (!route.compiledRegex.test(finalUrl.pathname)) {\n              continue;\n            }\n            if (route.hasLoader === false) {\n              const emptyBody2 = isNativePlatform ? \"exports.loader=function(){return undefined}\" : \"export function loader() { return undefined }\";\n              return new Response(emptyBody2, {\n                headers: { \"Content-Type\": \"text/javascript\" }\n              });\n            }\n            const cleanedRequest = new Request(finalUrl, request);\n            return resolveLoaderRoute(handlers, cleanedRequest, finalUrl, route);\n          }\n          const emptyBody = isNativePlatform ? \"exports.loader=function(){return{}}\" : \"export {}\";\n          return new Response(emptyBody, {\n            headers: { \"Content-Type\": \"text/javascript\" }\n          });\n        }\n      }\n      if (handlers.handlePage) {\n        for (const route of compiledManifest.pageRoutes) {\n          if (!route.compiledRegex.test(pathname)) {\n            continue;\n          }\n          const isDynamicRoute = Object.keys(route.routeKeys).length > 0;\n          const isNotFoundRoute = route.page.endsWith(\"/+not-found\");\n          if (looksLikeStaticFile && isNotFoundRoute) {\n            if (debugRouter) {\n              console.info(\n                `[one] \\u26A1 ${pathname} \\u2192 bare 404 for static probe on ${route.page}`\n              );\n            }\n            if (!route.middlewares?.length) {\n              return null;\n            }\n            return await runMiddlewares(handlers, request, route, async () => {\n              return new Response(null, {\n                status: 404,\n                headers: { \"Content-Type\": \"text/plain\" }\n              });\n            });\n          }\n          if (looksLikeStaticFile && isDynamicRoute) {\n            if (debugRouter) {\n              console.info(\n                `[one] \\u26A1 ${pathname} \\u2192 skipping dynamic route ${route.page} for static asset`\n              );\n            }\n            continue;\n          }\n          if (debugRouter) {\n            console.info(\n              `[one] \\u26A1 ${pathname} \\u2192 matched page route: ${route.page} (${route.type})`\n            );\n          }\n          return resolvePageRoute(handlers, request, url, route);\n        }\n      }\n      return null;\n    }\n  };\n}\nexport {\n  createHandleRequest\n};\n//# sourceMappingURL=createDevHandleRequest.js.map\n"],"mappings":"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"}