@resolid/react-router-hono
Version:
React Router Hono Server
1 lines • 4.07 kB
JavaScript
import{existsSync as e}from"node:fs";import{basename as t,dirname as n,join as r,relative as i}from"node:path";import{searchForWorkspaceRoot as a}from"vite";import{exit as o}from"node:process";import s from"esbuild";import c from"fast-glob";import{cp as l,mkdir as u,readFile as d,readdir as f,realpath as p,rm as m,stat as h,symlink as g,writeFile as _}from"node:fs/promises";const v=async({entryFile:e=`server.ts`,includeFiles:t=[],nodeVersion:a=22,bundleLoader:u={},buildManifest:f,reactRouterConfig:p,viteConfig:h,buildStart:g,buildBundleEnd:_})=>{let v=h.root,x=p.appDirectory,S=i(v,p.buildDirectory),C=h.build.assetsDir??`assets`,w=JSON.parse(await d(r(v,`package.json`),`utf8`)),T=y({...w.dependencies},h.ssr.external),E=r(p.buildDirectory,`server`),D=f?.serverBundles??{site:{id:`site`,file:i(v,r(E,p.serverBuildFile))}},O=t?.length>0?await c(t,{cwd:v}):[],k=await g();for(let t in D){let i=D[t].id,c=r(v,D[t].file),d=n(c);await b(r(d,`package.json`),w,T,a),console.log(`Bundle file for ${i}...`);let f=r(d,`server.mjs`);await s.build({outfile:f,entryPoints:[r(x,e)],alias:{"virtual:react-router/server-build":c},define:{"process.env.NODE_ENV":JSON.stringify(`production`),"import.meta.env.NODE_ENV":JSON.stringify(`production`),"import.meta.env.RESOLID_BUILD_DIR":JSON.stringify(S),"import.meta.env.RESOLID_ASSETS_DIR":JSON.stringify(C),...h.define},banner:{js:`import { createRequire } from 'module';const require = createRequire(import.meta.url);`},platform:`node`,target:`node${a}`,format:`esm`,external:[`vite`,...Object.keys(T)],bundle:!0,charset:`utf8`,legalComments:`none`,minify:!1,loader:{".aac":`file`,".css":`file`,".eot":`file`,".flac":`file`,".gif":`file`,".jpeg":`file`,".jpg":`file`,".mp3":`file`,".mp4":`file`,".ogg":`file`,".otf":`file`,".png":`file`,".svg":`file`,".ttf":`file`,".wav":`file`,".webm":`file`,".webp":`file`,".woff":`file`,".woff2":`file`,...u}}).catch(e=>{console.error(e),o(1)}),await m(r(n(c),C),{force:!0,recursive:!0}),await m(c,{force:!0});for(let e of O)await l(e,r(E,e),{recursive:!0});await _?.(k,i,f,T)}},y=(e,t)=>{let n=Array.isArray(t)?t.filter(e=>![`react-router`,`react-router-dom`,`@react-router/architect`,`@react-router/cloudflare`,`@react-router/dev`,`@react-router/express`,`@react-router/node`,`@react-router/serve`].includes(e)):t;return Object.keys(e).filter(e=>n===void 0||n===!0?!1:n.includes(e)).reduce((t,n)=>(t[n]=e[n]??``,t),{})},b=async(e,t,n,r)=>{let i={name:t.name,type:t.type,scripts:{postinstall:t.scripts?.postinstall??``},dependencies:n,engines:{node:`${r}.x`}};await _(e,JSON.stringify(i,null,2),`utf8`)},x=async(e,t=!1)=>{let n=r(...e);return t&&await m(n,{recursive:!0,force:!0}),await u(n,{recursive:!0}),n},S=e=>{if(e?.routeIdToServerBundleId){let t=Object.values(e.routes).filter(e=>e.id!=`root`).map(t=>{let n=[...C(e.routes,t.parentId),t.path].join(`/`);return{id:t.id,path:`/${n}`}}),n={};for(let r in e?.routeIdToServerBundleId){let i=e?.routeIdToServerBundleId[r];n[i]||(n[i]=[]);for(let e of t)e.id==r&&n[i].push(e.path)}let r={};for(let e in n){let t=n[e];t.sort((e,t)=>e.length<t.length?-1:1);for(let n of t)!r[n]&&!Object.keys(r).find(t=>r[t].bundleId==e&&n.startsWith(r[t].path))&&(r[n]={path:n,bundleId:e})}let i=Object.values(r).map(e=>({path:e.path.endsWith(`/`)?e.path.slice(0,-1):e.path,bundleId:e.bundleId}));return i.sort((e,t)=>e.path.length>t.path.length?-1:1),i}return[{path:``,bundleId:`site`}]},C=(e,t)=>{if(t==null)return[];let n=[],r=t=>{let i=e[t];i.parentId&&r(i.parentId),i.path&&n.push(i.path)};return r(t),n},w=async(o,s,c)=>{let d=a(o),{nodeFileTrace:m}=await import(`@vercel/nft`),_=await m([o],{base:d,cache:c}),v=Array.from(_.fileList).map(e=>r(d,e)),y=n(v[0]);for(let e of v.slice(1))for(;!e.startsWith(y);)y=n(y);for(let a of v){let c=r(s,i(y,a)),d=await p(a),m=d!==a,_=(await h(a)).isDirectory();if(await u(n(c),{recursive:!0}),a==o){let e=n(o),i=n(c);for(let n of(await f(e)).filter(e=>e!=t(o)))await l(r(e,n),r(i,n),{recursive:!0})}m?e(c)||await g(i(n(c),r(s,i(y,d))),c,_?`dir`:`file`):_||await l(a,c)}return i(y,o)};export{S as i,w as n,x as r,v as t};