elysia-remix
Version:
Use React Router v7 or Remix with Elysia with HMR support!
47 lines (44 loc) • 1.61 kB
JavaScript
import { join } from 'node:path';
import { s as staticPlugin } from './index-y01oNMeu.js';
import { Elysia } from 'elysia';
import { createRequestHandler } from 'react-router';
async function reactRouter(options) {
const cwd = process.env.REMIX_ROOT ?? process.cwd();
const mode = options?.mode ?? process.env.NODE_ENV ?? "development";
const buildDir = options?.buildDirectory ?? "build";
const buildDirectory = join(cwd, buildDir);
const serverBuildPath = join(
buildDirectory,
"server",
options?.serverBuildFile ?? "index.js"
);
let vite;
if (mode !== "production") {
vite = await import('vite').then((vite2) => {
return vite2.createServer({
...options?.vite,
server: {
...options?.vite?.server,
middlewareMode: true
}
});
});
}
const instance = vite ? (await import('./index-CpSljop9.js')).connect(vite.middlewares) : options?.production?.assets !== false ? staticPlugin({
prefix: "/",
assets: join(buildDir, "client"),
maxAge: 31536e3,
...options?.production?.assets
}) : false;
const serverModule = vite ? () => vite.ssrLoadModule("virtual:react-router/server-build") : await import(serverBuildPath);
const handler = createRequestHandler(serverModule, mode);
return new Elysia({ name: "elysia-react-router", seed: options }).use(instance).all(
"*",
async function processReactRouterSSR(context) {
const loadContext = await options?.getLoadContext?.(context);
return handler(context.request, loadContext);
},
{ parse: "none" }
);
}
export { reactRouter };