@cwagner22/react-router-hono
Version:
React Router Hono Server
1 lines • 2.09 kB
JavaScript
import {getRequestListener}from'@hono/node-server';import {minimatch}from'minimatch';import {existsSync,statSync}from'node:fs';import {relative,join}from'node:path';var D=(i,l)=>{if(!("__reactRouterPluginContext"in i))return null;let{reactRouterConfig:t,rootDirectory:r}=i.__reactRouterPluginContext,s=relative(r,t.appDirectory);return {appDir:s,entryFile:join(s,l?.entryFile??"server.ts"),buildDir:relative(r,t.buildDirectory),assetsDir:i.build?.assetsDir||"assets",feature:t.future}},w=i=>{let l="",t;return {name:"@resolid/react-router-hono-server",enforce:"post",config(r){if(t=D(r,i),!!t)return {define:{"import.meta.env.RESOLID_BUILD_DIR":JSON.stringify(t.buildDir),"import.meta.env.RESOLID_ASSETS_DIR":JSON.stringify(t.assetsDir)},ssr:{noExternal:["@resolid/react-router-hono"]}}},configResolved(r){l=r.publicDir;},async configureServer(r){if(!t)return;let s=[new RegExp(`^(?=\\/${t.appDir.replace(/^\/+|\/+$/g,"").replaceAll("/","\\/")}\\/)((?!.*\\.data(\\?|$)).*\\..*(\\?.*)?$)`),/\?import(\?.*)?$/,/^\/@.+$/,/^\/node_modules\/.*/,`/${t.appDir}/**/.*/**`,...i?.exclude??[]],p=async a=>async(o,g,u)=>{if(o.url){let e=join(l,o.url);try{if(existsSync(e)&&statSync(e).isFile())return u()}catch{}}for(let e of s)if(o.url){if(e instanceof RegExp){if(e.test(o.url))return u()}else if(minimatch(o.url?.toString(),e))return u()}let c,f=t.entryFile;if(t.feature.unstable_viteEnvironmentApi?c=(await a.environments.ssr.runner.import(f)).default:c=(await a.ssrLoadModule(f)).default,!c)return u(new Error(`Failed to find default export from ${f}`));await getRequestListener(async e=>{let n=await c.fetch(e,{incoming:o,outgoing:g});if(!(n instanceof Response))throw n;return n},{overrideGlobalObjects:false,errorHandler:e=>{let n;e instanceof Error?(n=e,a.ssrFixStacktrace(n)):typeof e=="string"?n=new Error(`The response is not an instance of "Response", but: ${e}`):n=new Error(`Unknown error: ${e}`),u(n);}})(o,g);};r.middlewares.use(await p(r));},handleHotUpdate({server:r,modules:s}){if(s.some(a=>a._ssrModule))return r.hot.send({type:"full-reload"}),[]}}};export{w as reactRouterHonoServer};