mirror of
https://github.com/stackblitz/bolt.new
synced 2024-11-27 22:42:21 +00:00
35 lines
1018 B
TypeScript
35 lines
1018 B
TypeScript
|
import type { AppLoadContext, EntryContext } from '@remix-run/cloudflare';
|
||
|
import { RemixServer } from '@remix-run/react';
|
||
|
import { isbot } from 'isbot';
|
||
|
import { renderToReadableStream } from 'react-dom/server';
|
||
|
|
||
|
export default async function handleRequest(
|
||
|
request: Request,
|
||
|
responseStatusCode: number,
|
||
|
responseHeaders: Headers,
|
||
|
remixContext: EntryContext,
|
||
|
_loadContext: AppLoadContext,
|
||
|
) {
|
||
|
const body = await renderToReadableStream(<RemixServer context={remixContext} url={request.url} />, {
|
||
|
signal: request.signal,
|
||
|
onError(error: unknown) {
|
||
|
console.error(error);
|
||
|
responseStatusCode = 500;
|
||
|
},
|
||
|
});
|
||
|
|
||
|
if (isbot(request.headers.get('user-agent') || '')) {
|
||
|
await body.allReady;
|
||
|
}
|
||
|
|
||
|
responseHeaders.set('Content-Type', 'text/html');
|
||
|
|
||
|
responseHeaders.set('Cross-Origin-Embedder-Policy', 'require-corp');
|
||
|
responseHeaders.set('Cross-Origin-Opener-Policy', 'same-origin');
|
||
|
|
||
|
return new Response(body, {
|
||
|
headers: responseHeaders,
|
||
|
status: responseStatusCode,
|
||
|
});
|
||
|
}
|