(sourceEvent: FetchEvent, result: any)
| 233 | return headers; |
| 234 | } |
| 235 | async function handleSingleFlight(sourceEvent: FetchEvent, result: any): Promise<Response> { |
| 236 | let revalidate: string[]; |
| 237 | let url = new URL(sourceEvent.request.headers.get("referer")!).toString(); |
| 238 | if (result instanceof Response) { |
| 239 | if (result.headers.has("X-Revalidate")) |
| 240 | revalidate = result.headers.get("X-Revalidate")!.split(","); |
| 241 | if (result.headers.has("Location")) |
| 242 | url = new URL( |
| 243 | result.headers.get("Location")!, |
| 244 | new URL(sourceEvent.request.url).origin + import.meta.env.BASE_URL, |
| 245 | ).toString(); |
| 246 | } |
| 247 | const event = { ...sourceEvent } as PageEvent; |
| 248 | event.request = new Request(url, { |
| 249 | headers: createSingleFlightHeaders(sourceEvent), |
| 250 | }); |
| 251 | return await provideRequestEvent(event, async () => { |
| 252 | await createPageEvent(event); |
| 253 | App || (App = (await import("solid-start:app")).default); |
| 254 | /* @ts-expect-error */ |
| 255 | event.router.dataOnly = revalidate || true; |
| 256 | /* @ts-expect-error */ |
| 257 | event.router.previousUrl = sourceEvent.request.headers.get("referer"); |
| 258 | try { |
| 259 | renderToString(() => { |
| 260 | /* @ts-expect-error */ |
| 261 | sharedConfig.context.event = event; |
| 262 | App(); |
| 263 | }); |
| 264 | } catch (e) { |
| 265 | console.log(e); |
| 266 | } |
| 267 | |
| 268 | /* @ts-expect-error */ |
| 269 | const body = event.router.data; |
| 270 | if (!body) return result; |
| 271 | let containsKey = false; |
| 272 | for (const key in body) { |
| 273 | if (body[key] === undefined) delete body[key]; |
| 274 | else containsKey = true; |
| 275 | } |
| 276 | if (!containsKey) return result; |
| 277 | if (!(result instanceof Response)) { |
| 278 | body["_$value"] = result; |
| 279 | result = new Response(null, { status: 200 }); |
| 280 | } else if ((result as any).customBody) { |
| 281 | body["_$value"] = (result as any).customBody(); |
| 282 | } |
| 283 | result.customBody = () => body; |
| 284 | result.headers.set("X-Single-Flight", "true"); |
| 285 | return result; |
| 286 | }); |
| 287 | } |
no test coverage detected
searching dependent graphs…