UNPKG

one

Version:

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

1 lines • 36.9 kB
{"version":3,"file":"workerHandler.js","names":[],"sources":["esm/server/workerHandler.js"],"sourcesContent":["import {\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 isPageRequestMethod,\n resolveAPIRoute,\n resolveLoaderRoute,\n resolvePageRoute\n} from \"../createHandleRequest\";\nimport { stripGroupSegmentsFromPath } from \"../router/matchers\";\nimport { getPathFromLoaderPath } from \"../utils/cleanUrl\";\nimport { getRouterRootFromOneOptions } from \"../utils/getRouterRootFromOneOptions\";\nimport { isResponse } from \"../utils/isResponse\";\nimport { resolveResponse } from \"../vite/resolveResponse\";\nimport { getRouteExportsFromEntry } from \"./routeExportsFromEntry\";\nimport { setSSRLoaderData } from \"./ssrLoaderData\";\nimport { getFetchStaticHtml } from \"./staticHtmlFetcher\";\nfunction createWorkerHandler(options) {\n const { oneOptions } = options;\n const disableModuleCache = !!options.disableModuleCache;\n const routerRoot = getRouterRootFromOneOptions(oneOptions);\n let currentLazyRoutes = options.lazyRoutes;\n let compiledManifest = compileManifest(options.buildInfo.manifest);\n let routeToBuildInfo = options.buildInfo.routeToBuildInfo;\n let routeMap = options.buildInfo.routeMap;\n let currentPreloads = options.buildInfo.preloads;\n let currentCssPreloads = options.buildInfo.cssPreloads;\n const debugRouter = process.env.ONE_DEBUG_ROUTER;\n const redirects = oneOptions.web?.redirects;\n let compiledRedirects = null;\n if (redirects?.length) {\n compiledRedirects = redirects.map((r) => {\n const regexSource = r.source.replace(/:(\\w+)/g, (_, name) => `(?<${name}>[^/]+)`);\n return {\n regex: new RegExp(`^${regexSource}$`),\n destination: r.destination,\n permanent: r.permanent || false\n };\n });\n }\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 let render = null;\n let renderStream = null;\n let renderLoading = null;\n let renderGeneration = 0;\n let entryLoading = null;\n function loadServerEntry() {\n if (!entryLoading) entryLoading = currentLazyRoutes.serverEntry();\n return entryLoading;\n }\n function ensureRenderLoaded() {\n if (render) return;\n if (renderLoading) return renderLoading;\n const gen = ++renderGeneration;\n renderLoading = (async () => {\n const entry = await loadServerEntry();\n if (gen !== renderGeneration) return;\n render = entry.default.render;\n renderStream = entry.default.renderStream || null;\n })();\n return renderLoading;\n }\n function findNearestNotFoundPath(urlPath) {\n let cur = urlPath;\n while (cur) {\n const parent = cur.lastIndexOf(\"/\") > 0 ? cur.slice(0, cur.lastIndexOf(\"/\")) : \"\";\n const candidate = `${parent}/+not-found`;\n if (routeMap ? routeMap[candidate] : compiledManifest.pageRoutes.some(\n (route) => route.isNotFound && stripGroupSegmentsFromPath(route.page) === candidate\n )) {\n return candidate;\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) console.error(`[one] 404 loader for ${path}: ${logReason}`);\n return `export function loader(){return{__oneError:404,__oneErrorMessage:'Not Found',__oneNotFoundPath:${JSON.stringify(nfPath)}}}`;\n }\n async function readStaticHtml(htmlPath) {\n const fetchStaticHtml = getFetchStaticHtml();\n if (fetchStaticHtml) return await fetchStaticHtml(htmlPath);\n if (debugRouter) {\n console.warn(`[one/worker] no fetchStaticHtml set, cannot read ${htmlPath}`);\n }\n return null;\n }\n function resolveLoaderSync(lazyKey) {\n const cacheKey = lazyKey || \"\";\n if (!disableModuleCache) {\n const cached = loaderCache.get(cacheKey);\n if (cached !== void 0) return cached;\n }\n return (async () => {\n let routeExported;\n if (!disableModuleCache && moduleImportCache.has(cacheKey)) {\n routeExported = moduleImportCache.get(cacheKey);\n } else if (currentLazyRoutes.pages?.[cacheKey]) {\n routeExported = await currentLazyRoutes.pages[cacheKey]();\n if (!disableModuleCache) moduleImportCache.set(cacheKey, routeExported);\n } else {\n routeExported = lazyKey ? await getRouteExportsFromEntry(await loadServerEntry(), routerRoot, lazyKey) : null;\n if (!routeExported) {\n console.warn(`[one/worker] no lazy route for ${cacheKey}`);\n if (!disableModuleCache) loaderCache.set(cacheKey, null);\n return null;\n }\n if (!disableModuleCache) moduleImportCache.set(cacheKey, routeExported);\n }\n const loader = routeExported?.loader || null;\n if (!disableModuleCache) {\n loaderCache.set(cacheKey, loader);\n loaderCacheFnMap.set(cacheKey, routeExported?.loaderCache ?? null);\n }\n return loader;\n })();\n }\n async function importAndRunLoader(routeId, lazyKey, loaderProps) {\n if (!lazyKey) return { loaderData: void 0, routeId };\n const cacheMapKey = lazyKey;\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(lazyKey);\n const loader = loaderOrPromise instanceof Promise ? await loaderOrPromise : loaderOrPromise;\n if (!loader) return { loaderData: void 0, routeId };\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 () => pendingLoaderResults.delete(coalFullKey)\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)) throw err;\n if (err?.code === \"ENOENT\")\n return { loaderData: void 0, routeId, isEnoent: true };\n console.error(`[one] Error running loader for ${routeId}:`, err);\n return { loaderData: void 0, routeId };\n }\n }\n const requestHandlers = {\n async handleStaticFile() {\n return null;\n },\n async handleAPI({ route }) {\n if (currentLazyRoutes.api[route.page]) {\n return await currentLazyRoutes.api[route.page]();\n }\n console.warn(`[one/worker] no lazy API route for ${route.page}`);\n return null;\n },\n async loadMiddleware(route) {\n if (currentLazyRoutes.middlewares[route.contextKey]) {\n return await currentLazyRoutes.middlewares[route.contextKey]();\n }\n console.warn(`[one/worker] no lazy middleware for ${route.contextKey}`);\n return null;\n },\n async handleLoader({ route, loaderProps }) {\n const routeFile = route.routeFile || route.file;\n let loader;\n try {\n const loaderResult = resolveLoaderSync(routeFile);\n loader = loaderResult instanceof Promise ? await loaderResult : loaderResult;\n } catch (err) {\n if (err?.code === \"ERR_MODULE_NOT_FOUND\") return null;\n throw err;\n }\n if (!loader) return null;\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)) throw json;\n return `export function loader() { return ${JSON.stringify(json)} }`;\n },\n async handlePage({ route, url, loaderProps }) {\n const routeBuildInfo = routeToBuildInfo[route.file];\n if (route.type === \"ssr\") {\n if (!routeBuildInfo) {\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 cacheKey = layout.contextKey || \"\";\n const cachedLoader = loaderCache.get(cacheKey);\n if (cachedLoader === null) {\n noLoaderResults.push({\n loaderData: void 0,\n routeId: layout.contextKey\n });\n } else {\n layoutLoaderPromises.push(\n importAndRunLoader(layout.contextKey, layout.contextKey, loaderProps)\n );\n }\n }\n const pageLoaderPromise = importAndRunLoader(\n route.file,\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)) return err;\n throw err;\n }\n if (pageResult.isEnoent) {\n const nfPath = findNearestNotFoundPath(loaderProps?.path || \"/\");\n const nfHtml = routeMap?.[nfPath];\n if (nfHtml) {\n const html = await readStaticHtml(nfHtml);\n if (html) {\n return new Response(html, {\n headers: { \"content-type\": \"text/html\" },\n status: 404\n });\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) setSSRLoaderData(loaderFn, result.loaderData);\n }\n }\n const pageLoaderFn = loaderCache.get(route.file);\n if (pageLoaderFn) setSSRLoaderData(pageLoaderFn, pageResult.loaderData);\n globalThis[\"__vxrnresetState\"]?.();\n const renderProps = {\n mode: route.type,\n loaderData,\n loaderProps,\n path: loaderProps?.path || \"/\",\n preloads: routeBuildInfo.criticalPreloads || routeBuildInfo.preloads,\n deferredPreloads: routeBuildInfo.deferredPreloads,\n css: routeBuildInfo.css,\n cssContents: routeBuildInfo.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, { headers: responseHeaders, status });\n }\n const rendered = await render(renderProps);\n return new Response(rendered, { headers: responseHeaders, status });\n } catch (err) {\n if (isResponse(err)) return err;\n console.error(\n `[one] Error rendering SSR route ${route.file}\n${err?.[\"stack\"] ?? err}\nurl: ${url}`\n );\n return null;\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(\n (layout) => importAndRunLoader(layout.contextKey, layout.contextKey, loaderProps)\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 _rl = ensureRenderLoaded();\n if (_rl) await _rl;\n const spaRouteBuildInfo = routeToBuildInfo[route.file];\n const rendered = await render({\n mode: \"spa-shell\",\n loaderData: void 0,\n loaderProps,\n path: loaderProps?.path || \"/\",\n preloads: spaRouteBuildInfo?.criticalPreloads || spaRouteBuildInfo?.preloads,\n deferredPreloads: spaRouteBuildInfo?.deferredPreloads,\n css: spaRouteBuildInfo?.css,\n cssContents: spaRouteBuildInfo?.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)) return err;\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?.[routeBuildInfo?.cleanPath];\n if (htmlPath) {\n const html = await readStaticHtml(htmlPath);\n if (html) {\n return new Response(html, {\n headers: htmlHeaders,\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);\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 return new Response(injectedHtml, {\n headers: htmlHeaders,\n status: 404\n });\n }\n }\n return new Response(\"404 Not Found\", { status: 404 });\n }\n return null;\n }\n }\n };\n function setCacheHeaders(response, route, isAPI) {\n if (!response.headers.has(\"cache-control\") && !response.headers.has(\"Cache-Control\")) {\n try {\n if (isAPI) {\n response.headers.set(\"cache-control\", \"no-store\");\n } else 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 } catch {\n }\n }\n return response;\n }\n async function handleRequest(request, env, executionCtx) {\n const url = getURLfromRequestURL(request);\n const pathname = url.pathname;\n const method = request.method;\n if (compiledRedirects) {\n for (const redirect of compiledRedirects) {\n const match = redirect.regex.exec(pathname);\n if (match) {\n let destination = redirect.destination;\n if (match.groups) {\n for (const [name, value] of Object.entries(match.groups)) {\n destination = destination.replace(`:${name}`, value);\n }\n }\n if (debugRouter) console.info(`[one] \\u21AA redirect ${pathname} \\u2192 ${destination}`);\n return new Response(null, {\n status: redirect.permanent ? 301 : 302,\n headers: {\n location: new URL(destination, url.origin).toString()\n }\n });\n }\n }\n }\n if (PRELOAD_JS_POSTFIX_REGEX.test(pathname)) {\n if (!currentPreloads[pathname]) {\n return new Response(\"\", {\n headers: { \"Content-Type\": \"text/javascript\" }\n });\n }\n return null;\n }\n if (CSS_PRELOAD_JS_POSTFIX_REGEX.test(pathname)) {\n if (!currentCssPreloads?.[pathname]) {\n return new Response(\"export default Promise.resolve()\", {\n headers: { \"Content-Type\": \"text/javascript\" }\n });\n }\n return null;\n }\n if (pathname.endsWith(LOADER_JS_POSTFIX_UNCACHED)) {\n const originalUrl = getPathFromLoaderPath(pathname);\n for (const route of compiledManifest.pageRoutes) {\n if (route.file === \"\") continue;\n if (!route.compiledRegex.test(originalUrl)) continue;\n if (route.type === \"ssg\" && Object.keys(route.routeKeys).length > 0 && routeMap && !routeMap[originalUrl]) {\n return new Response(make404LoaderJs(originalUrl, \"ssg route not in routeMap\"), {\n headers: { \"Content-Type\": \"text/javascript\" }\n });\n }\n if (route.hasLoader === false) {\n return new Response(\"export function loader() { return undefined }\", {\n headers: { \"Content-Type\": \"text/javascript\" }\n });\n }\n const loaderRoute = {\n ...route,\n routeFile: route.file,\n file: route.loaderServerPath || pathname\n };\n const finalUrl = new URL(originalUrl, url.origin);\n finalUrl.search = url.search;\n const cleanedRequest = new Request(finalUrl, request);\n try {\n return await resolveLoaderRoute(\n requestHandlers,\n cleanedRequest,\n finalUrl,\n loaderRoute\n );\n } catch (err) {\n if (err?.code === \"ERR_MODULE_NOT_FOUND\") {\n return new Response(\"export function loader() { return undefined }\", {\n headers: { \"Content-Type\": \"text/javascript\" }\n });\n }\n console.error(`Error running loader: ${err}`);\n return null;\n }\n }\n return null;\n }\n if (pathname.endsWith(\".js\") || pathname.endsWith(\".css\")) {\n return null;\n }\n for (const route of compiledManifest.apiRoutes) {\n if (route.compiledRegex.test(pathname)) {\n if (debugRouter)\n console.info(`[one] \\u26A1 ${pathname} \\u2192 matched API route: ${route.page}`);\n const response = await resolveAPIRoute(\n requestHandlers,\n request,\n url,\n route,\n env,\n executionCtx\n );\n if (response && isResponse(response)) {\n return setCacheHeaders(response, route, true);\n }\n return null;\n }\n }\n if (isPageRequestMethod(method)) {\n for (const route of compiledManifest.pageRoutes) {\n if (!route.compiledRegex.test(pathname)) continue;\n if (debugRouter) {\n console.info(\n `[one] \\u26A1 ${pathname} \\u2192 matched page route: ${route.page} (${route.type})`\n );\n }\n if (route.type === \"ssr\" && !route.middlewares?.length) {\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 params[route.routeKeys[key]] = value;\n }\n }\n const loaderProps = {\n path: pathname,\n search: url.search,\n subdomain: getSubdomain(url),\n request,\n params\n };\n const response = await resolveResponse(async () => {\n try {\n return await requestHandlers.handlePage({\n request,\n route,\n url,\n loaderProps\n });\n } catch (err) {\n if (isResponse(err)) return err;\n throw err;\n }\n });\n if (response && isResponse(response)) {\n return setCacheHeaders(response, route, false);\n }\n return null;\n }\n try {\n const response = await resolvePageRoute(requestHandlers, request, url, route);\n if (response && isResponse(response)) {\n return setCacheHeaders(response, route, false);\n }\n } catch (err) {\n console.error(` [one] Error handling request: ${err[\"stack\"]}`);\n }\n return null;\n }\n }\n return null;\n }\n function updateRoutes(newBuildInfo, newLazyRoutes) {\n compiledManifest = compileManifest(newBuildInfo.manifest);\n routeToBuildInfo = newBuildInfo.routeToBuildInfo;\n routeMap = newBuildInfo.routeMap;\n currentPreloads = newBuildInfo.preloads;\n currentCssPreloads = newBuildInfo.cssPreloads;\n if (newLazyRoutes) currentLazyRoutes = newLazyRoutes;\n loaderCache.clear();\n moduleImportCache.clear();\n loaderCacheFnMap.clear();\n pendingLoaderResults.clear();\n render = null;\n renderStream = null;\n renderLoading = null;\n entryLoading = null;\n }\n return { handleRequest, updateRoutes };\n}\nexport {\n createWorkerHandler\n};\n//# sourceMappingURL=workerHandler.js.map\n"],"mappings":"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"}