UNPKG

@resolid/react-router-hono

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