UNPKG

binhvan

Version:
3 lines (2 loc) 2.04 kB
// @bun import{watch as f}from"fs";import{readdir as g}from"fs/promises";import{parseArgs as h}from"util";import{registerEnv as m}from"mini-van-plate/shared";import l from"mini-van-plate/van-plate";var w={watchDirs:[],publicDir:"public",cacheDir:".cache",outDir:"dist",args:Bun.argv,pageModules:[]};async function p(i){try{return await g(i),!0}catch(t){return!1}}async function P(i){let t={...w,...i};m({van:l});let{values:e,positionals:[,n]}=h({args:t.args,options:{dev:{type:"boolean"},preview:{type:"boolean"},port:{type:"string"},base:{type:"string"}},allowPositionals:!0,strict:!0});if(import.meta.env.BASE_URL=e.base,await Bun.$`rm -rf ${t.cacheDir} ${t.outDir}`,await Bun.$`mkdir -p ${t.cacheDir} ${t.outDir}`,await B(t),await p(t.publicDir))await Bun.$`cp -rn ${t.publicDir}/. ${t.outDir}`.nothrow();if(e.dev)d(t,n),u(t,e.port??5000);else if(e.preview)u(t,e.port??4000)}function d(i,t){let e;async function n(r){if(await p(r))f(r,{recursive:!0},(s,a)=>{clearTimeout(e),e=setTimeout(async()=>{await Bun.$`bun ${t}`,console.log(`Detected changing ${a}`)},500)})}for(let r of i.watchDirs.concat(i.publicDir))n(r)}function u(i,t){async function e(r){let s=r.replace(/^\/|\/$/g,""),a=Bun.file(`${i.outDir}/${s}`);if(await a.exists())return a;let o=Bun.file(`${i.outDir}/${s}/index.html`);if(await o.exists())return o;let c=Bun.file(`${i.publicDir}/${s}`);if(await c.exists())return c;return null}let n=Bun.serve({port:t,async fetch(r){let s=new URL(r.url),a=await e(s.pathname);if(a)return new Response(a);return new Response(await e("404.html"),{status:404})}});console.log(`Try visiting the server via http://localhost:${n.port}`)}async function B(i){let t=await Promise.all(i.pageModules.flatMap((n)=>n.default(l)).map(async(n)=>{let r=new URL(n.pathname,Bun.pathToFileURL(`${i.cacheDir}/`));return await Bun.write(r,n.content),Bun.fileURLToPath(r)})),e=await Bun.build({entrypoints:t,root:i.cacheDir,outdir:i.outDir,minify:i.minify,external:i.external,splitting:!0});if(!e.success)for(let n of e.logs)console.error(n)}export{P as main};