@genesisx/react-archetype
Version:
React-archetype is a cli tool (or a generator) that will generate apps based on the rendering pattern (CSR,SSR, SSG, ISR etc) of your choice.
35 lines (32 loc) • 32.7 kB
JavaScript
;var Vo=Object.create;var Te=Object.defineProperty;var Yo=Object.getOwnPropertyDescriptor;var Ho=Object.getOwnPropertyNames;var Uo=Object.getPrototypeOf,Xo=Object.prototype.hasOwnProperty;var k=(e,t)=>{for(var o in t)Te(e,o,{get:t[o],enumerable:!0})},qo=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ho(t))!Xo.call(e,n)&&n!==o&&Te(e,n,{get:()=>t[n],enumerable:!(r=Yo(t,n))||r.enumerable});return e};var a=(e,t,o)=>(o=e!=null?Vo(Uo(e)):{},qo(t||!e||!e.__esModule?Te(o,"default",{value:e,enumerable:!0}):o,e));var bo=a(require("inquirer")),Go=a(require("inquirer-directory")),Jo=a(require("yargs/yargs")),Fo=a(require("chalk")),Mo=a(require("node-emoji"));var X={};k(X,{addCustomPackagesToDependencies:()=>Ut,getExistingApps:()=>Qt,getNextPort:()=>Et,handleArchetypeConfig:()=>St,handlePnpmWorkspace:()=>vt,handleWorkspaces:()=>Ft,loadRenamedCache:()=>oo,renamePackagesMenu:()=>Ht,renameTemplates:()=>ro,setPackagesVersion:()=>Kt});var m={};k(m,{OFFICIAL_PACKAGE_NAME:()=>R,OFFICIAL_PACKAGE_VERSION:()=>$,TEMPLATE_EXT:()=>Zo,appConstants:()=>_,appTypes:()=>Ee,commandTypes:()=>v,customPackages:()=>er,customPackagesDescription:()=>tr,destinationPathContants:()=>Re,ignoreDirs:()=>Oe,infoArgText:()=>_e,mfeTypes:()=>Se,nextArchTypes:()=>ke,nextVersion:()=>zo,reactArchTypes:()=>Ce,sourcePathContants:()=>De,viteArchTypes:()=>Qo,webpackArchTypes:()=>we});var Ee={REACT:"react",NEXT:"next"},ke={ssr:"SSR (Server Side Rendering)",ssg:"SSG (Static Site Generation)",isr:"ISR (Incremental Static Regeneration)"},Ce={csr:"CSR (Client Side Rendering) with Webpack",ssr:"SSR (Server Side Rendering) with Webpack",csr_with_vite:"CSR (Client Side Rendering) with Vite",ssr_with_vite:"SSR (Server Side Rendering) with Vite"},we={csr:"CSR (Client Side Rendering) with Webpack",ssr:"SSR (Server Side Rendering) with Webpack"},Qo={csr_with_vite:"CSR (Client Side Rendering) with Vite",ssr_with_vite:"SSR (Server Side Rendering) with Vite"},Se=["Remote","Host"],zo="14",Oe=["modules",".vscode","storybook","packages","dist","build","node_modules","libs"],v={NPM:"npm",YARN:"yarn",PNPM:"pnpm"},De={TEMPLATES_DIR:"templates",BASE_DIR:"base",COMMON_DIR:"common",REACT_DIR:"react",NEXT_DIR:"next",ESSENTIALS_DIR:"essentials",VITE_CSR_DIR:"csr_with_vite",VITE_SSR_DIR:"ssr_with_vite",SRC_DIR:"src",STORYBOOK_DIR:"storybook",TSCONFIG_DIR:"tsconfig",JEST_DIR:"jest",UTILS_DIR:"utils",TEMP_DIR:"temp",PUBLIC_DIR:"public"},_={UNIVERSAL_REACT:"universal-react",PACKAGE_JSON:"package.json",VSCODE_DIR:".vscode",PACKAGES_DIR:"packages",CONFIG_DIR:"config",YARN_LOCK:"yarn.lock",PACKAGE_LOCK:"package-lock.json",PNPM_LOCK:"pnpm-lock.yaml",NODE_MODULES:"node_modules",HUSKY_RC:".huskyrc.json",NEXT_ENV:"next-env.d.ts",NEXT_CONFIG:"next.config.mjs",VITE_CONFIG:"vite.config.ts",JEST_CONFIG:"jest.config.js",JEST_SETUP:"jest.setup.js",ESLINTRC:".eslintrc.js",BASE:"base.json",ESLINT_PRESET:"eslint-preset.js",TSCONFIG_TEST:"tsconfig.test.json",TSCONFIG:"tsconfig.json",PNPM_WORKSPACE_YAML:"pnpm-workspace.yaml",ARCHETYPE_CONFIG:"archetype.json"},Zo="__template__",Re={DOCS_DIR:"docs",WEB_DIR:"web",APPS_DIR:"apps",PAGES_DIR:"pages",COMPONENTS_DIR:"components"},er={config:"config",hooks:"hooks",lintconfig:"lintconfig",services:"services",tsconfig:"tsconfig",utils:"utils"},tr={config:"Define your Jest and performance configurations here",hooks:"Create your custom hooks here",lintconfig:"Define your ESLint configurations here",services:"Define your services here",tsconfig:"Define your TypeScript configurations here",utils:"Create your custom utilities here"},R="@genesisx/react-archetype",_e=`
Usage:
- ${R} : to generate or create a new app in an already existing monorepo project or in an empty folder
- ${R} [argument] : to get info
where [agrument] is one of:
--list, -l, --info, -i, --version, -v, --no-install, -ni
Options:
-v, --version :prints the version of [${R}] installed or the version used in a project
-i, --info :prints this information
-ni, --no-install :prevents the generator from installing dependencies after creating the app
`,$="2.1.4-beta0.1";var g={};k(g,{copyDir:()=>tt,createDir:()=>mr,deleteFile:()=>lr,dirFileExists:()=>N,isAbsolute:()=>xe,isEmptyDir:()=>gr,removeDir:()=>pr,renameSync:()=>cr,writeFile:()=>ot,writeJsonFile:()=>fr});var F=a(require("chalk")),w=a(require("fs-extra")),et=a(require("os")),Z=a(require("path"));var u={};k(u,{currentDateTime:()=>P,displayNextSteps:()=>sr,fileYielder:()=>ze,getLatestVersion:()=>ar,getListOfDirectories:()=>z,handleEmptyCwd:()=>nr,identifyMonorepoWorkspace:()=>rr,identifyPackageManager:()=>Ne,isPnpm:()=>or,paImport:()=>ir});var d=a(require("chalk")),Q=a(require("fs-extra")),qe=a(require("inquirer")),A=a(require("node-emoji")),C=a(require("path")),Qe=require("url");var P=()=>{let e=new Date;return e.getMonth()+1+"/"+e.getDate()+"/"+e.getFullYear()+" "+e.getHours()+":"+e.getMinutes()+":"+e.getSeconds()},or=e=>e==="pnpm";function*ze(e){let t=Q.default.readdirSync(e,{withFileTypes:!0});for(let o of t)o.isDirectory()?yield*ze(C.default.join(e,o.name)):yield C.default.join(e,o.name)}function*Xe(e){let t=Q.default.readdirSync(e,{withFileTypes:!0});for(let o of t)o.isDirectory()&&(yield C.default.join(e,o.name))}function z(e,t){let o=[];if(t)for(let r of Xe(e)){let n=C.default.basename(r);!Oe.includes(n)&&!n.startsWith(".")&&o.push(n)}else for(let r of Xe(e))o.push(C.default.basename(r));return o}function rr(e,t){try{let o=N(C.default.join(e,"nx.json"))||t.nx!==void 0,r=N(C.default.join(e,"turbo.json"))||t.turbo!==void 0,n=N(C.default.join(e,"lerna.json"))||t.lerna!==void 0;switch(!0){case o:return"nx";case r:return"turbo";case n:return"lerna";default:return""}}catch(o){return console.error(o),""}}var Ne=e=>{let t=C.default.join(e,_.PACKAGE_LOCK),o=C.default.join(e,_.PNPM_LOCK),r=C.default.join(e,_.YARN_LOCK);switch(!0){case N(r):return{command:v.YARN,fileName:_.YARN_LOCK};case N(o):return{command:v.PNPM,fileName:_.PNPM_LOCK};case N(t):return{command:v.NPM,fileName:_.PACKAGE_LOCK};default:return{command:"",fileName:""}}},nr=async()=>{console.info(d.default.greenBright(`
${d.default.bold("We recommend having a monorepo structure for:")}
${A.default.get("chart_with_upwards_trend")} Easier ${d.default.bold.cyanBright("SCALABILITY")}
${A.default.get("books")} Code ${d.default.bold.cyanBright("REUSABILITY")}
${A.default.get("handshake")} Improved ${d.default.bold.cyanBright("COLLABORATION")}
${A.default.get("wrench")} Streamlined ${d.default.bold.cyanBright("MAINTENANCE")}
`)),console.log(),console.info(`
${d.default.bold.greenBright("For more info on monorepo, visit: ")} ${d.default.bold.cyanBright("https://circleci.com/blog/monorepo-dev-practices/")}
`.trimStart());let e=[{type:"confirm",name:"createMonorepo",message:"Would you like to use a monorepo workspace?",default:!0}];(await qe.default.prompt(e)).createMonorepo&&(console.info(d.default.greenBright(`
${d.default.bold("To create a monorepo workspace, follow the below steps:")}
1. Install the GenesisX's create workspace package - ${A.default.get("package")} ${d.default.bold.cyanBright("[yarn add -g @genesisx/create-workspace]")}
2. Run the plugin in a blank directory - ${A.default.get("rocket")} ${d.default.bold.cyanBright("[npx @genesisx/create-workspace]")}
3. Provide a suitable name for your workspace ${A.default.get("pencil2")} ${d.default.bold.cyanBright("(eg. test-workspace)")}
4. Select the plugins you want to install ${A.default.get("heavy_plus_sign")} ${d.default.bold.cyanBright("(Press ENTER to skip)")}
`)),console.log(),console.info(d.default.bold.greenBright(`Once your workspace is ready, you can try running - ${d.default.bold.cyanBright(`[npx ${R}]`)}`.trimStart())),process.exit(1))},sr=e=>{let{parentDir:t,pkgManager:o,appName:r,noInstall:n,monorepo:s}=e,c=t?`${t}/${r}`:r;console.log(),console.info(d.default.bgGreenBright.white.bold(" NEXT STEPS ")),console.log();let i=s?null:`Change directory - ${A.default.get("cd")} ${d.default.bold.cyanBright(`cd ${c}`)}`,p=n?`Install the dependencies - ${A.default.get("package")} ${d.default.bold.cyanBright(`${o} install`)}`:null,l="";if(s)switch(o){case"npm":l=`Serve the app - ${A.default.get("rocket")} ${d.default.bold.cyanBright(`${o} run dev -w=${r}`)}`;break;case"pnpm":l=`Serve the app - ${A.default.get("rocket")} ${d.default.bold.cyanBright(`${o} --filter ${r} dev`)}`;break;case"yarn":l=`Serve the app - ${A.default.get("rocket")} ${d.default.bold.cyanBright(`${o} workspace ${r} dev`)}`;break;default:break}else l=`Serve the app - ${A.default.get("rocket")} ${d.default.bold.cyanBright(`${o==="npm"?"npm run dev":`${o} dev`}`)}`;let h=[i,p,l].filter(f=>f!==null),y="";h.forEach((f,D)=>{f&&(y+=`${D+1}. ${f}
`)}),console.info(d.default.greenBright(y))};async function ar(e){try{let t=await fetch(`https://registry.npmjs.org/${e}`);if(!t.ok)throw new Error("Network response was not ok.");return(await t.json())["dist-tags"].latest}catch(t){console.error(d.default.redBright("Error fetching latest version:",t)),process.exit(1)}}async function ir(e){if(process.platform==="win32"&&xe(e)&&(e=(0,Qe.pathToFileURL)(e).href),e.endsWith(".json"))try{let t=process.platform==="win32"?new URL(e):e,o=await Q.default.readFile(t,"utf-8");return JSON.parse(o)}catch(t){throw new Error(`Error reading or parsing JSON file at ${e}: ${t.message}`)}else try{let t=await import(e);return t.default??t}catch(t){throw new Error(`Error importing module at ${e}: ${t.message}`)}}function N(e){return w.default.existsSync(e)}function Ze(e){return w.default.lstatSync(e).isDirectory()}function cr(e,t){try{w.default.renameSync(e,t)}catch(o){throw console.error(F.default.red(`${o}: Failed renmaing process.`)),o}}function pr(e){try{w.default.rmSync(e,{recursive:!0,force:!0})}catch(t){throw console.error(F.default.red("error removing directory")),t}}function lr(e){try{w.default.unlinkSync(e)}catch(t){throw console.error(F.default.red("error removing file")),t}}function mr(e){try{w.default.mkdirSync(e)}catch(t){throw console.error(F.default.red("error creating directory")),t}}function tt(e,t,o=[],r=[]){if(!Ze(e))throw new Error("Source path is not a directory.");if(o.length>0&&r.length>0)throw new Error("You cannot provide both exclusions and inclusions.");w.default.readdirSync(e).forEach(s=>{let c=Z.default.join(e,s),i=Z.default.join(t,s);o.some(p=>p instanceof RegExp?p.test(s):s===p)||r.length>0&&!r.some(p=>p instanceof RegExp?p.test(s):s===p)||(Ze(c)?(w.default.ensureDirSync(i),tt(c,i,o,r)):w.default.copySync(c,i))})}function ot(e,t){w.default.writeFileSync(e,t)}function fr(e,t){try{ot(e,JSON.stringify(t,null,2)+et.default.EOL)}catch(o){throw console.error(F.default.red(`[${P()}] - Error copying file ${e}. ${o}`)),o}}function gr(e){try{return w.default.readdirSync(e).length===0}catch{return!1}}function xe(e){return Z.default.isAbsolute(e)}var O={};k(O,{baseTemplatePath:()=>Or,commonDirPath:()=>j,configTemplatePath:()=>Ir,essentialsTemplatePath:()=>Rr,nextTemplatePath:()=>rt,reactTemplatePath:()=>Sr,sourcePackagesPath:()=>xr,srcTemplatePath:()=>_r,storybookPath:()=>Nr,tempDirPath:()=>Dr,templatesPath:()=>ee});var S=a(require("path"));var{TEMPLATES_DIR:dr,NEXT_DIR:hr,BASE_DIR:ur,REACT_DIR:yr,COMMON_DIR:Pr,TEMP_DIR:Ar,ESSENTIALS_DIR:Tr,SRC_DIR:Er,STORYBOOK_DIR:kr}=De,{PACKAGES_DIR:Cr,CONFIG_DIR:wr}=_,ee=S.default.join(__dirname,"generator",dr),rt=S.default.join(ee,hr),Sr=S.default.join(ee,yr),Or=S.default.join(rt,ur),j=S.default.join(ee,Pr),Dr=S.default.join(j,Ar),Rr=S.default.join(j,Tr),_r=S.default.join(j,Er),Nr=S.default.join(j,kr),xr=S.default.join(j,Cr),Ir=S.default.join(j,wr);var M={};k(M,{applyCommandType:()=>br,isObject:()=>vr,mergeJsons:()=>$r,replaceString:()=>jr});var nt=a(require("deepmerge")),vr=e=>!!e&&typeof e=="object"&&!Array.isArray(e),$r=(e,t)=>(0,nt.default)(e,t);function jr(e,t,o=""){let r=new RegExp(t,"gi"),n=JSON.stringify(e).replace(r,o);return JSON.parse(n)}function br(e,t){let o=JSON.stringify(e),r=/{commandType}/gi,n=o.replace(r,t);return t==="npm"&&(n=o.replace(r,`${t} run`)),JSON.parse(n)}var te={};k(te,{initializeGitRepo:()=>Jr,isGitInitialized:()=>Gr});var Ie=a(require("chalk")),st=require("child_process"),at=a(require("fs")),it=a(require("node-emoji")),ve=a(require("path"));var Gr=e=>{let t=e?.monorepo?"":e.appName;try{let o=ve.default.join(process.cwd(),t,".git");return at.default.statSync(o).isDirectory()}catch{return!1}},Jr=e=>{let t="git init",o=e?.monorepo?"":e.appName;(0,st.exec)(t,{cwd:ve.default.join(process.cwd(),o)},(r,n)=>{r&&(console.error(Ie.default.red(`[${P()}] Error: Failed to intialized git repo. ${r}`)),process.exit(1)),console.log(Ie.default.green(`[${P()}] - ${it.default.get("white_check_mark")} ${n}`))})};var re={};k(re,{installPackages:()=>Lr});var T=a(require("chalk")),lt=a(require("child_process")),V=a(require("node-emoji")),mt=a(require("path")),ft=a(require("util"));var oe={};k(oe,{spinnerInit:()=>W});var ct=require("cli-spinner");var $e=["\u2581\u2583\u2584\u2585\u2586\u2587\u2588\u2587\u2586\u2585\u2584\u2583","\u280B\u2819\u2839\u2838\u283C\u2834\u2826\u2827\u2807\u280F"];var W=new ct.Spinner("%s"),Mr=Math.floor(Math.random()*$e.length);W.setSpinnerString($e[Mr]).setSpinnerTitle(" : ");var pt=ft.default.promisify(lt.default.exec);async function Lr(e){let{pkgManager:t,monorepo:o,appName:r}=e,n=mt.default.join(process.cwd(),r),s=o?{}:{cwd:n},c=t;try{console.info(T.default.cyanBright.bold(`${V.default.get("bulb")} Using [${c.toUpperCase()}] as package manager.`)),W.start(),console.info(T.default.cyanBright(`[${P()}] - ${V.default.get("rocket")} Installing dependencies...`));let{stderr:i}=await pt(`${c} install`,s);i&&(i.includes("warning")||console.error(`[${T.default.yellow(P())}] - ${T.default.red(i)}`)),console.info(T.default.greenBright(`[${P()}] - ${V.default.get("+1")} Dependencies installed successfully`))}catch{if(c==="npm"){console.error(T.default.red("Error installing dependencies with npm")),console.info(T.default.yellow(`[${P()}] - Retrying installation with the force flag...`));try{let{stderr:p}=await pt(`${c} install --force`,s);p&&(p.includes("warning")||console.error(`[${T.default.yellow(P())}] - ${T.default.red(p)}`)),console.info(T.default.greenBright(`[${P()}] - ${V.default.get("+1")} Dependencies installed successfully`))}catch{console.error(T.default.red("Error installing dependencies with force flag")),process.exit(1)}}else console.error(T.default.red("Error installing dependencies")),process.exit(1)}finally{W.stop(!0)}}var ne={};k(ne,{commonQuestionsProjectSetup:()=>Br});var dt=a(require("path"));var gt=dt.default.join(process.cwd(),Re.APPS_DIR),je=[];N(gt)?je=z(gt,!1):je=z(process.cwd(),!1);var Br=(e,t,o)=>[{type:"input",name:"itemName",message:"What would you like to name your app?",default:"my_app",validate:r=>je.includes(r)?`${r} already exists. Please provide a different name...`:!0},{type:"list",name:"appType",message:"What would you like to create today? (Use arrow keys to navigate)",choices:Object.keys(Ee)},{when:r=>r.appType==="NEXT",type:"confirm",name:"isAppRouter",message:"Do you want to use the new Next.js App Router?",default:!0},{when:r=>r.appType==="NEXT"&&!1,type:"list",name:"archType",message:"What type of next rendering pattern do you want to use?",choices:Object.values(ke)},{when:r=>r.appType==="REACT",type:"list",name:"archType",message:"What type of react rendering pattern do you want to use?",choices:Object.values(Ce)},{when:r=>!Object.entries(we).some(([,n])=>n===r.archType)&&!r.isAppRouter,name:"isMfe",type:"confirm",message:"Do you want to setup Module Federation for your app?",default:!0},{when:r=>r.isMfe===!0,name:"mfeType",type:"list",message:"What kind of micro frontend is this app going to be?",choices:Se},{when:r=>r.appsDir===!1&&!e&&t&&!o.includes("apps"),type:"list",name:"parentDir",message:"Where would you like to create your app?",choices:o},{when:e||t&&Ne(process.cwd()).command==="",type:"list",name:"cmdType",message:"Which package manager would you like to use?",choices:Object.keys(v)}];var se={};k(se,{handleArgs:()=>Wr});var Y=a(require("chalk")),Pt=require("child_process"),Ge=a(require("node-emoji"));var ht=()=>{try{let e=/^(v)?(\d+\.)?(\d+\.)?(\d+)(-.+)?$/;if($&&e.test($))$.includes("beta")?console.info(Y.default.yellow(`v${$}`)):console.info(`v${$}`);else{let t=(0,Pt.execSync)(`npm ls -g ${R} --depth=0 --json`).toString(),r=JSON.parse(t).dependencies[R]?.version;r&&e.test(r)&&(r.includes("beta")?console.info(Y.default.yellow(`v${r}`)):console.info(`v${r}`))}}catch{console.error(`The package "${R}" is not installed.`)}process.exit(1)},be=()=>{console.info(_e),process.exit(1)},Kr=()=>{console.error(Y.default.red(`[${P()}] - ${Ge.default.get("no_entry_sign")} Invalid argument`)),be(),process.exit(1)},ut=()=>{console.warn(Y.default.yellow(`[${P()}] - ${Ge.default.get("warning")} --no-install flag has been set and dependencies will not be installed`))},yt={"--version":ht,"-v":ht,"--info":be,"-i":be,"--no-install":ut,"-ni":ut},Wr=e=>{if(!(e in yt)){Kr();return}let t=yt[e];t()};var ae={};k(ae,{installPackageManagerIfNeeded:()=>Hr});var H=require("child_process"),At=a(require("inquirer")),I=a(require("chalk")),Je=a(require("node-emoji"));function Vr(e){try{return e==="pnpm"?(0,H.execSync)("pnpm --version",{stdio:"ignore"}):e==="yarn"&&(0,H.execSync)("yarn --version",{stdio:"ignore"}),!0}catch{return!1}}async function Yr(e){try{e==="pnpm"?(0,H.execSync)("npm install -g pnpm",{stdio:"inherit"}):e==="yarn"&&(0,H.execSync)("npm install -g yarn",{stdio:"inherit"}),console.log(),console.info(I.default.bgGreenBright.bold(` ${e.toUpperCase()} installed successfully... `)),console.log()}catch(t){console.error(`Error occurred while installing ${e}: ${t.message}`),process.exit(1)}}async function Hr(e){Vr(e)||(console.log(),(await At.default.prompt([{type:"confirm",name:"install",message:I.default.yellowBright(`${e.toUpperCase()} is not installed. Do you want us to install it for you?`),default:!0}])).install?await Yr(e):(console.info(I.default.greenBright(`
${I.default.bold(`Please install ${e.toUpperCase()} manually, by following the steps below:`)}
1. Install the package manager using npm - ${Je.default.get("package")} ${I.default.bold.cyanBright(`[npm install -g ${e}]`)}
2. After installing the package manager, run the plugin again - ${Je.default.get("rocket")} ${I.default.bold.cyanBright("[npx @genesisx/create-workspace]")}
`)),console.log(),console.info(I.default.greenBright(`
OR Visit the official ${e.toUpperCase()} website: ${e==="pnpm"?"https://pnpm.io/installation/":"https://classic.yarnpkg.com/lang/en/docs/install/"}`.trimStart())),process.exit(0)))}var Tt=a(require("path")),{destinationPathContants:Ur}=m,{getListOfDirectories:Xr}=u,qr=()=>{let t=Tt.default.join(process.cwd(),Ur.APPS_DIR);return 4e3+Xr(t,!1).length||4e3},Et=qr;var U=a(require("chalk")),Ct=a(require("fs")),wt=a(require("path")),{writeJsonFile:kt,dirFileExists:Qr}=g,{currentDateTime:Fe}=u,{appConstants:zr}=m,Zr=e=>{let{appName:t,appType:o,archType:r,customPackages:n,customBasePath:s}=e,c=wt.default.join(process.cwd(),zr.ARCHETYPE_CONFIG),i={apps:{},packages:{},basePath:""},p=i;try{if(Qr(c)){if(i=JSON.parse(Ct.default.readFileSync(c).toString()),n.length>0){let l=n.filter(h=>h!==null);l.map(h=>{if(h in i.packages)p=i;else{let y={[t]:{appType:o,archType:r}},f=l.reduce((D,J)=>(D[J]=J,D),{});p={...i,apps:{...i.apps,...y},packages:{...i.packages,...f}}}})}else{let l={[t]:{appType:o,archType:r}};p={...i,apps:{...i.apps,...l}}}kt(c,p),console.log(U.default.green(`[${Fe()}] File archetype.json updated successfully`)),console.log()}else{i.apps[t]={appType:o,archType:r};let l=n.filter(h=>h!==null);i.packages=l.reduce((h,y)=>(h[y]=y,h),{}),i.basePath=s,kt(c,i),console.log(U.default.green(`[${Fe()}] File archetype.json created successfully`))}}catch(l){console.error(U.default.red(`[${Fe()}] Error while modifying the archetype.json file`)),console.error(U.default.red(l));return}},St=Zr;var xt=a(require("path")),It=a(require("fs")),ie=a(require("js-yaml"));var{writeFile:Ot,dirFileExists:en}=g,{appConstants:tn}=m,Dt=!1,Rt=!1,_t=!1,Nt=!1,on=e=>{let t=xt.default.join(process.cwd(),tn.PNPM_WORKSPACE_YAML);Dt=!en(t);let o=`${e}/*`,r="packages/*",n={packages:[o,r]};if(Dt)Ot(t,ie.default.dump(n));else{let s=null;try{s=ie.default.load(It.default.readFileSync(t,"utf8"))}catch(c){console.log("Error: ",c)}if(s||(s={}),Rt=!s?.packages,Rt)s={...s,...n};else{let c=s.packages??[];_t=!c.includes(o),Nt=!c.includes(r),_t&&c.push(o),Nt&&c.push(r),s.packages=c}Ot(t,ie.default.dump(s))}};var vt=on;var Gt=a(require("path")),Jt=a(require("fs"));var{writeJsonFile:rn}=g,{appConstants:nn}=m,$t=!1,jt=!1,bt=!1,sn=e=>{let t=Gt.default.join(process.cwd(),nn.PACKAGE_JSON),o=`${e}/*`,r="packages/*",n={workspaces:[o,r]},s=JSON.parse(Jt.default.readFileSync(t,"utf8"));if($t=!s?.workspaces,$t)s={...s,...n};else{let c=s.workspaces||[];jt=!c.includes(o),bt=!c.includes(r),jt&&c.push(o),bt&&c.push(r),s.workspaces=c}rn(t,s)};var Ft=sn;var Me=a(require("fs")),ce=a(require("path")),{writeJsonFile:Mt}=g,{appConstants:{PACKAGE_JSON:Lt,PACKAGES_DIR:an}}=m,{isPnpm:cn,getLatestVersion:pn,getListOfDirectories:ln}=u,Bt=async(e,t)=>{let o=async(l,h)=>{if(h==="{latest}")try{let y=await pn(l);return[l,y]}catch(y){return console.error(`Error fetching latest version for ${l}:`,y.message),[l,h]}else if(h==="{workspacePrefix}"){let y=cn(t)?"workspace:*":"*";return[l,y]}else return[l,h]},r=async l=>l?await Promise.all(l.map(([h,y])=>o(h,y))):[],n=e?.dependencies&&Object.entries(e.dependencies),s=e?.devDependencies&&Object.entries(e.devDependencies),c=await r(n),i=await r(s);return{...e,dependencies:Object.fromEntries(c),devDependencies:Object.fromEntries(i)}},mn=async e=>{let t=process.cwd(),{appName:o,parentDir:r,pkgManager:n,monorepo:s}=e,c=ce.default.join(t,an);s&&ln(c,!1).forEach(async y=>{let f=ce.default.join(c,y,Lt),D=JSON.parse(Me.default.readFileSync(f,"utf8")),J=await Bt(D,n);Mt(f,J)});let i=ce.default.join(r,o,Lt),p=JSON.parse(Me.default.readFileSync(i,"utf8")),l=await Bt(p,n);Mt(i,l)},Kt=mn;var Wt=a(require("fs")),Vt=a(require("inquirer")),Yt=a(require("path")),{writeJsonFile:fn}=g,{appConstants:gn}=m;async function dn(e){let t=Yt.default.join(process.cwd(),gn.ARCHETYPE_CONFIG),o=JSON.parse(Wt.default.readFileSync(t,"utf8")),r=o.packages,n=e.customPackages.map(i=>({when:e.customPackagesRename,type:"input",name:`rename-${i}`,message:`Rename ${i} to:`,default:i})),s=await Vt.default.prompt(n);e.customPackages.forEach(i=>{i!==null&&i in r&&(r[i]=s[`rename-${i}`])});let c={...o,packages:{...r}};fn(t,c)}var Ht=dn;var le=a(require("fs")),L=a(require("path")),{writeJsonFile:hn}=g,{appConstants:pe}=m,un=e=>{let t=L.default.join(process.cwd(),pe.PACKAGES_DIR),o=JSON.parse(le.default.readFileSync(L.default.join(process.cwd(),pe.ARCHETYPE_CONFIG),"utf8")),r=Object.keys(o.packages),n=L.default.join(e,pe.PACKAGE_JSON),s=JSON.parse(le.default.readFileSync(n,"utf8"));r.length>0&&r.map(c=>{let i=o.packages[c];if(!i){console.error(`No package found for key ${c}`);return}if(s.dependencies&&!(c in s.dependencies)){let p=L.default.join(t,i),h=JSON.parse(le.default.readFileSync(L.default.join(p,pe.PACKAGE_JSON),"utf8")).name;h&&(s.dependencies[h]="{workspacePrefix}",hn(n,s))}})},Ut=un;var me=a(require("chalk")),Xt=a(require("fs")),qt=a(require("path")),{dirFileExists:yn}=g,{appConstants:Pn}=m,An=()=>{let e=qt.default.join(process.cwd(),Pn.ARCHETYPE_CONFIG);if(yn(e)){let o=JSON.parse(Xt.default.readFileSync(e,"utf8")).apps,r=Object.keys(o);if(!o||!r||r.length===0){console.log(me.default.bold.bgRedBright(" NO EXISTING APPS ")),console.log();return}else{let n=Object.values(o).map(i=>i.appType),s=Object.values(o).map(i=>i.archType),c=r.map((i,p)=>({"App Name":i,"App Type":n[p],"Arch Type":s[p]}));console.log(me.default.bold.bgGreenBright.white(" EXISTING APPS ")),console.table(c),console.log();return}}else{console.log(me.default.bold.bgRedBright(" NO EXISTING APPS ")),console.log();return}},Qt=An;var Zt=a(require("fs")),eo=a(require("path")),{fileYielder:Tn}=u,{renameSync:En,writeFile:kn}=g,{TEMPLATE_EXT:zt}=m,{templatesPath:Cn}=O,wn="renamedCache.json",to=eo.default.join(__dirname,"..",wn),fe=!1,oo=()=>{try{let e=Zt.default.readFileSync(to,"utf8");fe=JSON.parse(e)}catch{}return fe},Sn=()=>{let e=JSON.stringify(fe);kn(to,e)},ro=(e=Cn)=>{for(let t of Tn(e))if(t?.endsWith(zt)){let o=t.replace(zt,"");En(t,o)}fe=!0,Sn()};var G=a(require("path"));var ge=a(require("chalk")),no=a(require("child_process")),B=a(require("path")),so=a(require("util")),{nextTemplatePath:ao}=O,{dirFileExists:io,deleteFile:co,copyDir:po}=g,On=so.default.promisify(no.default.exec),{currentDateTime:Dn}=u,{appConstants:{NEXT_CONFIG:lo,PACKAGE_JSON:Rn},nextVersion:Le}=m,mo=async e=>{let{appName:t,parentDir:o,pkgManager:r,isAppRouter:n}=e,s=`--ts --src-dir --tailwind --eslint --use-${r} ${n?"--app":"--no-app"} --import-alias=@/*`,c=`npx create-next-app@${Le} ${t} ${s}`,i=B.default.join(o,t),p=B.default.join(i,lo);try{let{stderr:l}=await On(c,{cwd:o});l&&(l.includes("warning")||console.error(`[${ge.default.yellow(Dn())}] - ${ge.default.red(l)}`)),io(p)&&co(p),po(ao,i,[`v${Le}`,Rn])}catch{console.log(ge.default.redBright("Error creating Nextjs app")),process.exit(1)}},fo=async e=>{let{appName:t,parentDir:o,mfeType:r}=e,n=r;try{let s=B.default.join(o,t),c=B.default.join(ao,`v${Le}`,n.toLowerCase()),i=B.default.join(s,lo);io(i)&&co(i),po(c,s)}catch(s){console.log("Error: ",s)}};var _n=async e=>{await mo(e),e.isMfe&&await fo(e),console.log()},go=_n;var de=a(require("chalk")),ho=a(require("child_process")),b=a(require("path")),uo=a(require("util")),Nn=uo.default.promisify(ho.default.exec),{currentDateTime:xn}=u,{dirFileExists:In,copyDir:Be,deleteFile:vn}=g,{appConstants:{VITE_CONFIG:$n,PACKAGE_JSON:jn},viteArchTypes:bn,mfeTypes:Gn}=m,{reactTemplatePath:yo}=O,Po=async e=>{let{appName:t,archType:o,parentDir:r,mfeType:n}=e,s=n;try{let c=b.default.join(r,t),i=b.default.join(yo,o),p=b.default.join(i,s.toLowerCase()),l=b.default.join(c,$n);In(l)&&vn(l),Be(p,c)}catch(c){console.log("Error: ",c)}},Ao=async e=>{let{appName:t,archType:o,parentDir:r}=e,n=b.default.join(r,t),s=b.default.join(yo,o),c=`npx create-vite@latest ${t} --template react-ts`;try{if(o in bn){let{stderr:i}=await Nn(c,{cwd:r});i&&(i.includes("warning")||console.error(`[${de.default.yellow(xn())}] - ${de.default.red(i)}`)),Be(s,n,[...Gn.map(p=>p.toLowerCase()),jn])}else Be(s,n)}catch{console.log(de.default.redBright("Error creating React app")),process.exit(1)}};var Jn=async e=>{await Ao(e),e.isMfe&&await Po(e),console.log()},To=Jn;var K=a(require("chalk")),We=a(require("fs")),Ve=a(require("node-emoji")),x=a(require("path")),{appConstants:{CONFIG_DIR:Fn,PACKAGE_JSON:Eo,PACKAGES_DIR:ko,TSCONFIG:Co,TSCONFIG_TEST:wo,ESLINTRC:So},appTypes:{NEXT:Mn,REACT:Ln}}=m,{copyDir:q,writeJsonFile:Bn,createDir:Kn,dirFileExists:Wn}=g,{getListOfDirectories:Vn,paImport:Yn,currentDateTime:Hn}=u,{essentialsTemplatePath:Ke,configTemplatePath:Un,sourcePackagesPath:Oo}=O,{spinnerInit:Do}=oe,{applyCommandType:Xn}=M,Ye=process.cwd(),qn=async e=>{try{let t=x.default.join(Ye,ko);t||Kn(t);let o=x.default.join(Ye,ko);for(let r of Vn(Oo,!1)){let n=x.default.join(o,r),s=x.default.join(Oo,r);if(!Wn(n)){q(s,n);let c=await Yn(x.default.join(n,Eo));c=Xn(c,e),Bn(x.default.join(n,Eo),c)}}}catch(t){console.log(K.default.white.bold.bgRedBright(" ERROR OCCURRED WHILE GENERATING COMMON PACKAGES DIRECTORY ")),console.log(t)}};var Ro=!1,Qn=e=>{let{appName:t,parentDir:o}=e,r=new RegExp("tsconfig"),n=new RegExp("eslint"),s=x.default.join(Ye,o,t),c=We.default.readdirSync(s).some(p=>r.test(p)),i=We.default.readdirSync(s).some(p=>n.test(p));q(Ke,s,[Co,wo,So]),c||q(Ke,s,[],[Co,wo]),i||q(Ke,s,[],[So])};var zn=async e=>{try{let{appName:t,parentDir:o,pkgManager:r,monorepo:n}=e,s=x.default.join(o,t);n&&await qn(r),q(Un,x.default.join(s,Fn)),Qn(e)}catch(t){console.log(K.default.white.bold.bgRedBright(" ERROR OCCURED WHILE GENERATING COMMON DIRECTORY ")),console.log(t)}},Zn=async e=>{try{let{appType:t}=e;Do.start(),console.info(K.default.cyanBright(`[${Ve.default.get("hammer")} It might take a couple of minutes to set up your app...]`)),t===Mn?await go(e):t===Ln&&await To(e),await zn(e),console.info(K.default.greenBright(`[${Hn()}] - ${Ve.default.get("+1")} App generated successfully.`))}catch(t){console.log(K.default.white.bold.bgRedBright(" ERROR OCCURED WHILE GENERATING APP ")),console.error(t)}finally{Do.stop(!0)}},_o=Zn;var{setPackagesVersion:es}=X,{appConstants:{PACKAGE_JSON:he}}=m,{writeJsonFile:ts}=g,{mergeJsons:ue,replaceString:os,applyCommandType:rs}=M,{commonDirPath:ns,templatesPath:ss}=O,{paImport:He}=u,as=process.cwd(),is=async e=>{let{appName:t,appType:o,archType:r,parentDir:n,pkgManager:s,isMfe:c}=e,i=G.default.join(as,n,t),p=G.default.join(ss,o,r),l=await He(G.default.join(p,he)),h=await He(G.default.join(ns,he)),f=await He(G.default.join(i,he));if(f=ue(f,l),f=ue(f,h),f.name=t,c){let D=o==="next"?"next":"react_with_vite",J={react_with_vite:{dependencies:{"@originjs/vite-plugin-federation":"{latest}","vite-tsconfig-paths":"{latest}"},scripts:{}},next:{dependencies:{"@module-federation/nextjs-mf":"{latest}","@module-federation/utilities":"{latest}",webpack:"{latest}"},scripts:{dev:"cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next dev",build:"cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next build",start:"cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true NEXT_PUBLIC_NODE_ENV next start"}}},{dependencies:Ko,scripts:Wo}=J[D];f=ue(f,{dependencies:Ko,scripts:Wo})}if(f=os(f,"{commandType} env-var && "),Ro){let D='eslint "src/**/*.{js,jsx,ts,tsx}"';f=ue(f,{scripts:{lint:D,"lint:fix":`${D} --fix`}})}f=rs(f,s),ts(G.default.join(i,he),f),await es(e)},No=is;var{loadRenamedCache:cs,renameTemplates:ps,handlePnpmWorkspace:ls,handleWorkspaces:ms}=X,{displayNextSteps:fs,isPnpm:gs}=u,{isGitInitialized:ds,initializeGitRepo:hs}=te,{installPackages:us}=re,ys=async e=>{let{monorepo:t,pkgManager:o,parentDir:r,noInstall:n}=e;!cs()&&ps(),t&&(gs(o)?ls(r):ms(r)),console.log(),await _o(e),await No(e),!n&&await us(e),console.log(),!ds(e)&&hs(e),console.log(),fs(e),console.log(),process.exit(0)},xo=ys;var vo=require("@code-shaper/shaper-utils");var $o=a(require("chalk")),ye=a(require("fs-extra")),jo=a(require("inquirer")),Pe=a(require("path")),{commonQuestionsProjectSetup:Ps}=ne,{isEmptyDir:As,createDir:Ts,dirFileExists:Es}=g,{getListOfDirectories:ks,identifyMonorepoWorkspace:Cs,identifyPackageManager:ws,handleEmptyCwd:Ss}=u,{installPackageManagerIfNeeded:Os}=ae,{reactArchTypes:Io,appConstants:{PACKAGE_JSON:Ds},destinationPathContants:{APPS_DIR:Ue}}=m,Ae={id:"generator",name:"generator",description:"generates a react/next application",generate:Rs},E;async function Rs(e,t){try{let o=!!As(e),r=Pe.default.join(e,Ds),n,s,c=!1;if(!o&&ye.default.existsSync(r)){let f=JSON.parse(ye.default.readFileSync(r).toString());n=Cs(e,f)||void 0,s=ws(e).command||void 0}else(o||!ye.default.existsSync(r))&&(c=!0);c&&await Ss();let i=Ps(c,!!n,ks(e,!0));E=await jo.default.prompt(i,t);let{itemName:p,appType:l,archType:h,cmdType:y}=E;n&&!Es(Pe.default.join(e,Ue))&&Ts(Pe.default.join(e,Ue)),E.appName=vo.cc.snakeCase(p),E.parentDir=o||c?"":Ue,E.appType=l==="REACT"?"react":"next",E.archType=E.appType==="react"?Object.keys(Io).find(f=>Io[f]===h):"",E.monorepo=n||!1,E.pkgManager=s||y.toLowerCase(),E.noInstall=process.argv.slice(2)[0]==="--no-install"||process.argv.slice(2)[0]==="-ni",E.pkgManager!=="npm"&&await Os(E.pkgManager),await xo(E)}catch(o){console.log($o.default.white.bold.bgRedBright(" ERROR OCCURED WHILE GENERATING APP ")),console.log(o)}return Promise.resolve()}var{currentDateTime:_s}=u,{handleArgs:Ns}=se,{OFFICIAL_PACKAGE_NAME:Lo}=m,xs={};function Is(e){let{id:t}=e;xs[t]=e}Is(Ae);var vs={id:Lo,name:"ReactArchetype",description:"generates React Archetype artifacts",run:async e=>Ae?Ae.generate(process.cwd(),e):Promise.resolve()},Bo={};function $s(e){let{id:t}=e;Bo[t]=e}$s(vs);async function js(e,t){let o;e?o=e:o=Lo;let r=Bo[o];return r?r.run(t):(console.error(`Plugin ${o} not found`),Promise.resolve())}var bs={run:js};bo.default.registerPrompt("directory",Go.default);async function Gs(){let e=process.argv.slice(2),t=await(0,Jo.default)().parse(e),{_:o,$0:r,...n}=t;e.length>1&&(console.error(Fo.default.red(`[${_s()}] - ${Mo.default.get("no_entry_sign")} Invalid number of arguments. Expected 0 or 1, but got ${e.length}`)),process.exit(1)),e.length&&Ns(e[0]);let s;o.length>0&&typeof o[0]=="string"&&(s=o[0]),await bs.run(s,n)}Gs().catch(e=>console.error("Error:",e));