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