This commit is contained in:
Mythie
2025-01-07 12:45:53 +11:00
parent 866b036484
commit 84ad7a6c2b
6 changed files with 58 additions and 28 deletions

View File

@ -6,4 +6,4 @@
/build/
# Vite
vite.config.ts.timestamp*
vite.config.*.timestamp*

View File

@ -1,10 +1,9 @@
{
"name": "@documenso/remix",
"type": "module",
"private": true,
"scripts": {
"build": "cross-env NODE_ENV=production react-router build",
"dev": "tsx watch --ignore \"vite.config.ts*\" server/main.ts",
"dev": "tsx watch --ignore \"vite.config.{ts,mts,js,mjs}*\" server/main.ts",
"start": "cross-env NODE_ENV=production node dist/server/index.js",
"typecheck": "react-router typegen && tsc"
},

View File

@ -3,15 +3,17 @@ import { type HttpBindings } from '@hono/node-server';
import { Hono } from 'hono';
import { reactRouter } from 'remix-hono/handler';
type Bindings = HttpBindings;
import { IS_APP_WEB } from '@documenso/lib/constants/app';
const app = new Hono<{ Bindings: Bindings }>();
console.log({ IS_APP_WEB });
type Bindings = HttpBindings;
const isProduction = process.env.NODE_ENV === 'production';
const viteDevServer = isProduction
? undefined
: await import('vite').then(async (vite) =>
: import('vite').then(async (vite) =>
vite.createServer({
server: { middlewareMode: true },
}),
@ -23,23 +25,29 @@ const reactRouterMiddleware = remember('reactRouterMiddleware', async () =>
build: isProduction
? // @ts-expect-error build/server/index.js is a build artifact
await import('../build/server/index.js')
: async () => viteDevServer!.ssrLoadModule('virtual:react-router/server-build'),
: async () => (await viteDevServer)!.ssrLoadModule('virtual:react-router/server-build'),
}),
);
// app.get('/', (c) => c.text('Hello, world!'));
if (viteDevServer) {
app.use('*', async (c, next) => {
return new Promise((resolve) => {
viteDevServer.middlewares(c.env.incoming, c.env.outgoing, () => resolve(next()));
export const getApp = async () => {
const app = new Hono<{ Bindings: Bindings }>();
const resolvedDevServer = await viteDevServer;
// app.get('/', (c) => c.text('Hello, world!'));
if (resolvedDevServer) {
app.use('*', async (c, next) => {
return new Promise((resolve) => {
resolvedDevServer.middlewares(c.env.incoming, c.env.outgoing, () => resolve(next()));
});
});
}
app.use('*', async (c, next) => {
const middleware = await reactRouterMiddleware;
return middleware(c, next);
});
}
app.use('*', async (c, next) => {
const middleware = await reactRouterMiddleware;
return middleware(c, next);
});
export default app;
return app;
};

View File

@ -1,7 +1,16 @@
import { serve } from '@hono/node-server';
import app from './app';
import { getApp } from './app';
serve(app, (info) => {
console.log(`Server is running on http://localhost:${info.port}`);
async function main() {
const app = await getApp();
serve(app, (info) => {
console.log(`Server is running on http://localhost:${info.port}`);
});
}
main().catch((error) => {
console.error('Failed to start server:', error);
process.exit(1);
});

View File

@ -6,20 +6,33 @@
".react-router/types/**/*"
],
"compilerOptions": {
"lib": ["DOM", "DOM.Iterable", "ES2022"],
"types": ["node", "vite/client"],
"lib": [
"DOM",
"DOM.Iterable",
"ES2022"
],
"types": [
"node",
"vite/client"
],
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "bundler",
"jsx": "react-jsx",
"rootDirs": [".", "./.react-router/types"],
"rootDirs": [
".",
"./.react-router/types"
],
"baseUrl": ".",
"paths": {
"~/*": ["./app/*"]
"~/*": [
"./app/*"
]
},
"esModuleInterop": true,
"verbatimModuleSyntax": true,
"noEmit": true,
"moduleDetection": "force",
"resolveJsonModule": true,
"skipLibCheck": true,
"strict": true

View File

@ -1,3 +1,4 @@
// @ts-expect-error This is just due to our root config, it's a non-issue
import { reactRouter } from '@react-router/dev/vite';
import autoprefixer from 'autoprefixer';
import tailwindcss from 'tailwindcss';