elysia-react-router
Version:
Use React Router v7 or Remix with Elysia with HMR support!
64 lines (61 loc) • 1.76 kB
JavaScript
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 };