legends810/testingnew
0
1import type { AppLoadContext } from '@remix-run/cloudflare';2import { RemixServer } from '@remix-run/react';3import { isbot } from 'isbot';4import { renderToReadableStream } from 'react-dom/server';5import { renderHeadToString } from 'remix-island';6import { Head } from './root';7import { themeStore } from '~/lib/stores/theme';8 9export default async function handleRequest(10 request: Request,11 responseStatusCode: number,12 responseHeaders: Headers,13 remixContext: any,14 _loadContext: AppLoadContext,15) {16 // await initializeModelList({});17 18 const readable = await renderToReadableStream(<RemixServer context={remixContext} url={request.url} />, {19 signal: request.signal,20 onError(error: unknown) {21 console.error(error);22 responseStatusCode = 500;23 },24 });25 26 const body = new ReadableStream({27 start(controller) {28 const head = renderHeadToString({ request, remixContext, Head });29 30 controller.enqueue(31 new Uint8Array(32 new TextEncoder().encode(33 `<!DOCTYPE html><html lang="en" data-theme="${themeStore.value}"><head>${head}</head><body><div id="root" class="w-full h-full">`,34 ),35 ),36 );37 38 const reader = readable.getReader();39 40 function read() {41 reader42 .read()43 .then(({ done, value }) => {44 if (done) {45 controller.enqueue(new Uint8Array(new TextEncoder().encode('</div></body></html>')));46 controller.close();47 48 return;49 }50 51 controller.enqueue(value);52 read();53 })54 .catch((error) => {55 controller.error(error);56 readable.cancel();57 });58 }59 read();60 },61 62 cancel() {63 readable.cancel();64 },65 });66 67 if (isbot(request.headers.get('user-agent') || '')) {68 await readable.allReady;69 }70 71 responseHeaders.set('Content-Type', 'text/html');72 73 responseHeaders.set('Cross-Origin-Embedder-Policy', 'require-corp');74 responseHeaders.set('Cross-Origin-Opener-Policy', 'same-origin');75 76 return new Response(body, {77 headers: responseHeaders,78 status: responseStatusCode,79 });80}81 