@cwagner22/react-router-hono
Version:
React Router Hono Server
1 lines • 3.47 kB
JavaScript
import {a}from'./chunk-CCOJUBP4.js';import {nodeFileTrace}from'@vercel/nft';import {rm,mkdir,realpath,readdir,cp,writeFile}from'node:fs/promises';import {join,relative,dirname,basename}from'node:path';var q=r=>{let a$1=r.nodeVersion??22;return {name:"@resolid/react-router-hono-vercel-preset",reactRouterConfig:()=>({buildEnd:async({buildManifest:s,reactRouterConfig:t,viteConfig:o})=>{let e=o.root,i=t.appDirectory,c=t.serverBuildFile,d=join(t.buildDirectory,"client"),p=join(t.buildDirectory,"server"),I=relative(e,t.buildDirectory),f=o.build.assetsDir??"assets",l=o.ssr.external,h=s?.serverBundles??{site:{id:"site",file:relative(e,join(p,c))}};console.log("Bundle Vercel Serverless for production...");let g=join(e,".vercel");await rm(g,{recursive:true,force:true}),await mkdir(g,{recursive:true});let u=join(g,"output");await mkdir(u,{recursive:true}),await R(d,u),await J(f,s,join(u,"config.json"));for(let m in h){let v=h[m].id,y=join(e,h[m].file),P=dirname(y),$=await a(i,r?.entryFile??"server.ts",P,y,I,f,v,join(e,"package.json"),l,a$1,r.bundleLoader);await N(e,u,P,c,$,`_${v}`,a$1,r.regions,r.copyParentModules??[]);}}})}},N=async(r,a,s,t,o,e,i,c,d)=>{console.log(`Coping Vercel function files for ${e}...`);let p=join(a,"functions",`${e}.func`);await mkdir(p,{recursive:true});let I=await nodeFileTrace([o],{base:r});for(let f of I.fileList){let l=join(r,f);if(l==o)continue;let h=join(p,relative(r,l)),g=await realpath(l);if(d.find(u=>g.endsWith(u))){let u=join(g,"..");for(let m of (await readdir(u)).filter(v=>!v.startsWith("."))){let v=await realpath(join(u,m)),y=join(h,"..",m);await cp(v,y,{recursive:true});}}else await cp(g,h,{recursive:true});}await writeFile(join(p,".vc-config.json"),JSON.stringify({handler:"index.mjs",runtime:`nodejs${i}.x`,launcherType:"Nodejs",supportsResponseStreaming:true,regions:c},null,2),"utf8"),await cp(o,join(p,"index.mjs"));for(let f of (await readdir(s)).filter(l=>l!=basename(o)&&l!=t))await cp(join(s,f),join(p,f),{recursive:true});},R=async(r,a)=>{console.log("Copying assets...");let s=join(a,"static");await mkdir(s,{recursive:true}),await cp(r,s,{recursive:true,force:true}),await rm(join(s,".vite"),{recursive:true,force:true});},T=(r,a)=>{if(a==null)return [];let s=[],t=o=>{let e=r[o];e.parentId&&t(e.parentId),e.path&&s.push(e.path);};return t(a),s},k=r=>{if(r?.routeIdToServerBundleId){let a=Object.values(r.routes).filter(e=>e.id!="root").map(e=>{let i=[...T(r.routes,e.parentId),e.path].join("/");return {id:e.id,path:`/${i}`}}),s={};for(let e in r?.routeIdToServerBundleId){let i=r?.routeIdToServerBundleId[e];s[i]||(s[i]=[]);for(let c of a)c.id==e&&s[i].push(c.path);}let t={};for(let e in s){let i=s[e];i.sort((c,d)=>c.length<d.length?-1:1);for(let c of i)!t[c]&&!Object.keys(t).find(d=>t[d].bundleId==e&&c.startsWith(t[d].path))&&(t[c]={path:c,bundleId:e});}let o=Object.values(t).map(e=>({path:e.path.slice(0,-1),bundleId:e.bundleId}));return o.sort((e,i)=>e.path.length>i.path.length?-1:1),o}return [{path:"",bundleId:"site"}]},J=async(r,a,s)=>{console.log("Writing Vercel config file...");let t={version:3,routes:[]};t.routes.push({src:`^/${r}/(.*)$`,headers:{"cache-control":"public, max-age=31536000, immutable"},continue:true}),t.routes.push({handle:"filesystem"});let o=k(a);for(let e of o)e.path.length>0?t.routes.push({src:`^${e.path}.*`,dest:`_${e.bundleId}`}):t.routes.push({src:"/(.*)",dest:`_${e.bundleId}`});await writeFile(s,JSON.stringify(t,null,2),"utf8");};export{q as vercelPreset};