@mango-js/scripts
Version:
Scripts required for building and testing Mango applications
2 lines (1 loc) • 2.43 kB
JavaScript
import f from"fs/promises";import e from"path";import l from"chalk";import{fileURLToPath as k}from"url";import{EventEmitter as v}from"events";import{Parcel as E,createWorkerFarm as R}from"@parcel/core";import A from"@parcel/fs";import h from"chokidar";import"ora";import S from"../util/detectLocales.js";const{NodeFS:T,MemoryFS:C}=A,N=k(import.meta.url),w=e.dirname(N),{npm_package_config_devServer_port:O=4e3,npm_package_config_browsers:x="> 0%",npm_package_config_cdn:D="self"}=process.env,U=/^\+pages?\.(jsx|tsx|js|ts)$/,B=/^\+(get|post|put|patch|delete)\.(js|ts)$/,a=process.cwd(),n=e.join(a,"src"),g=e.join(n,"index.html"),d=e.join(a,"dist"),_=e.join(a,"public"),H=e.join(n,"routes"),b=e.join(n,"locales"),W=e.join(a,".cache"),I=e.join(w,"..",".parcelrc"),m=R(),s=new T,y=new C(m),$=s.watch.bind(s);s.watch=async(o,t,r)=>{let u;return await $(o,(j,F)=>{clearTimeout(u),u=setTimeout(()=>t(j,F),100)},r)};const[z,G,M]=await S(b);let L=!1,P=!1;const c=new E({entries:g,config:I,cacheDir:W,workerFarm:m,inputFS:s,outputFS:y,defaultTargetOptions:{distDir:d,engines:{browsers:[x]},shouldOptimize:!1,outputFormat:"global",isLibrary:!1,publicUrl:"/",shouldScopeHoist:!1},env:{NODE_ENV:"development",SRC_PATH:n,OUT_PATH:d,PUBLIC_PATH:_,LOCALES:z.join(","),RTL_LOCALES:G.join(","),DEFAULT_LOCALE:M,CDN:D,PORT:O},additionalReporters:[{packageName:"@mango-js/parcel-reporter-development",resolveFrom:w}]});let i=0;const p=new v,V=c._build.bind(c);c._startNextBuild=async function(){i++;let o=i;for(;o!==1;)await new Promise(t=>p.once("ready",t)),o--;try{await m.callAllWorkers("clearConfigCache",[]);const t=new AbortController,r=await V({signal:t.signal});return i--,p.emit("ready"),r}catch(t){throw i--,p.emit("ready"),t}};const q=async()=>{try{await f.access(g)}catch{console.error(l.red.bold("\u2716 \u{1F6A8} No index.html file found in src directory")),process.exit(1)}await y.mkdirp(d,{recursive:!0}),await f.mkdir(_,{recursive:!0}),h.watch(H).on("ready",()=>{L=!0}).on("all",(o,t)=>{if(L){const r=e.basename(t);(U.test(r)||B.test(r))&&(o==="add"||o==="unlink")&&console.warn(l.yellow.bold("\u{1F9ED} Routes changed. Restart the development server to apply changes."))}}),h.watch(b).on("ready",()=>{P=!0}).on("all",(o,t)=>{if(P){const r=e.basename(t);e.extname(r)===".json"&&(o==="add"||o==="unlink")&&console.warn(l.yellow.bold("\u{1F310} Locales changed. Restart the development server to apply changes."))}}),await c.watch()};q();