UNPKG

elysia-react-router

Version:

Use React Router v7 or Remix with Elysia with HMR support!

64 lines (61 loc) 1.76 kB
import { join } from 'node:path'; import { Elysia } from 'elysia'; import { createRequestHandler } from 'react-router'; import { s as staticPlugin } from './index-DOjPtrHA.js'; import 'fs/promises'; import 'path'; import 'events'; async function reactRouter(options) { const cwd = process.env.REMIX_ROOT ?? process.cwd(); const mode = options?.mode ?? process.env.NODE_ENV ?? "development"; const buildDirectory = join(cwd, options?.buildDirectory ?? "build"); const serverBuildPath = join( buildDirectory, "server", options?.serverBuildFile ?? "index.js" ); const elysia = new Elysia({ name: "elysia-react-router", seed: options }); let vite; if (mode !== "production") { vite = await import('vite').then((vite2) => { return vite2.createServer({ ...options?.vite, server: { ...options?.vite?.server, middlewareMode: true } }); }); } if (vite) { elysia.use( (await import('./index-BaAb0WX3.js')).connect(vite.middlewares) ); } else if (options?.production?.assets !== false) { elysia.use( staticPlugin({ prefix: "/", assets: join(options?.buildDirectory ?? "build", "client"), maxAge: 31536e3, ...options?.production?.assets }) ); } elysia.all( "*", async function processReactRouterSSR(context) { const handler = createRequestHandler( vite ? await vite.ssrLoadModule("virtual:react-router/server-build") : await import(serverBuildPath), mode ); const loadContext = await options?.getLoadContext?.(context); return handler(context.request, loadContext); }, { parse: "none" } ); return elysia; } export { reactRouter };