create-banana 2.4.1 → 2.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
- import He from"path";import B from"fs-extra";import{select as ke}from"@inquirer/prompts";import F from"chalk";import Y from"ora";import je from"figlet";var he=async e=>{try{return await je.text(e,{font:"Big Money-se",horizontalLayout:"default",verticalLayout:"default",width:80,whitespaceBreak:!0})}catch(t){console.log("Something went wrong..."),console.dir(t)}},E=he;import we from"chalk";function Se(e,t,r){t/=100,r/=100;let i=s=>(s+e/30)%12,o=t*Math.min(r,1-r),n=s=>r-o*Math.max(-1,Math.min(i(s)-3,Math.min(9-i(s),1)));return[Math.round(255*n(0)),Math.round(255*n(8)),Math.round(255*n(4))]}function Pe(e){return e.split("").map((t,r)=>{let i=r/e.length*360,[o,n,s]=Se(i,100,50);return we.rgb(o,n,s)(t)}).join("")}var L=Pe;import j from"chalk";import z from"boxen";var S=console.log,g=[22,198,12],f,I=(e,{useEslint:t,usePrettier:r,useHusky:i})=>{f=t?"pnpm i && pnpm lint":r?"pnpm i && pnpm format":"pnpm i",f=i?`cd ${e} && git init && `+f:`cd ${e} && `+f,S(j.cyan(z(j.rgb(...g)(`
2
+ import Ae from"path";import F from"fs-extra";import{select as Te}from"@inquirer/prompts";import Y from"chalk";import U from"ora";import he from"figlet";var we=async e=>{try{return await he.text(e,{font:"Big Money-se",horizontalLayout:"default",verticalLayout:"default",width:80,whitespaceBreak:!0})}catch(t){console.log("Something went wrong..."),console.dir(t)}},I=we;import Se from"chalk";function Pe(e,t,r){t/=100,r/=100;let i=s=>(s+e/30)%12,o=t*Math.min(r,1-r),n=s=>r-o*Math.max(-1,Math.min(i(s)-3,Math.min(9-i(s),1)));return[Math.round(255*n(0)),Math.round(255*n(8)),Math.round(255*n(4))]}function ke(e){return e.split("").map((t,r)=>{let i=r/e.length*360,[o,n,s]=Pe(i,100,50);return Se.rgb(o,n,s)(t)}).join("")}var z=ke;import j from"chalk";import $ from"boxen";var P=console.log,g=[22,198,12],f,R=(e,{useEslint:t,usePrettier:r,useHusky:i})=>{f=t?"pnpm i && pnpm lint":r?"pnpm i && pnpm format":"pnpm i",f=i?`cd ${e} && git init && `+f:`cd ${e} && `+f,P(j.cyan($(j.rgb(...g)(`
3
3
  ${f}
4
- `),{title:"commands",titleAlignment:"center"})))},w,R=(e,{useHusky:t,useCommitizen:r})=>{w=t?`cd ${e} && git add .`:`cd ${e} && git init && git add .`,w+=` && ${r?"pnpm commit":'git commit -m "Initial commit"'}`,S(j.cyan(z(j.rgb(...g)(`
5
- ${w}
6
- `),{title:"commands",titleAlignment:"center"})))},x,V=(e,{useCommitizen:t})=>{t&&(D(`
4
+ `),{title:"commands",titleAlignment:"center"})))},S,V=(e,{useHusky:t,useCommitizen:r})=>{S=t?`cd ${e} && git add .`:`cd ${e} && git init && git add .`,S+=` && ${r?"pnpm commit":'git commit -m "Initial commit"'}`,P(j.cyan($(j.rgb(...g)(`
5
+ ${S}
6
+ `),{title:"commands",titleAlignment:"center"})))},D,_=(e,{useCommitizen:t})=>{t&&(b(`
7
7
  To set up Commitizen, run the following command:
8
- `),x=`cd ${e} && pnpm i -g commitizen && commitizen init cz-conventional-changelog --pnpm --save-dev --save-exact`,S(j.cyan(z(j.rgb(...g)(`
9
- ${x}
10
- `),{title:"commands",titleAlignment:"center"}))))},_=async()=>{S(L(await E("BANANA")))},D=async e=>{S(L(e))};var Te=async(e,t)=>{try{if(B.pathExistsSync(t))if(!await ke({message:`The target folder "${e}" is existing. ${F.yellow("Overwrite")}?`,choices:[{name:"Yes",value:!0},{name:"No",value:!1}]}))Y(F.rgb(...g).bold("Process canceled")).succeed(),process.exit(0);else{let i=Y("Overwriting existing folder...").start();await B.emptyDir(t),i.succeed("Existing folder overwritten.")}}catch(r){console.error(r),process.exit(1)}},U=Te;import P from"fs-extra";import k from"path";import ve from"ejs";var y=class{projectName;targetDir;pkg;fileMiddlewares;constructor(t,r){this.projectName=t,this.targetDir=r,this.pkg={},this.fileMiddlewares=[]}writePkg(t){this.pkg={...this.pkg,...t}}extendDepsPkg(t){this.pkg.dependencies={...this.pkg.dependencies,...t.dependencies}}extendDevDepsPkg(t){this.pkg.devDependencies={...this.pkg.devDependencies,...t.devDependencies}}extendScriptsPkg(t){this.pkg.scripts={...this.pkg.scripts,...t.scripts}}copy(t,r){this.fileMiddlewares.push(()=>{P.copySync(t,k.join(this.targetDir,r))})}rename(t,r){this.fileMiddlewares.push(()=>{P.renameSync(k.join(this.targetDir,t),k.join(this.targetDir,r))})}render(t,r,i){this.fileMiddlewares.push(()=>{P.outputFileSync(k.join(this.targetDir,r),ve.render(P.readFileSync(t,"utf-8"),i))})}async generate(){this.fileMiddlewares.forEach(t=>t()),P.writeFileSync(k.join(this.targetDir,"package.json"),JSON.stringify(this.pkg,null,2))}};import W from"chalk";import{input as Ce}from"@inquirer/prompts";import{select as xe}from"@inquirer/prompts";var c=async e=>await xe({message:e,choices:[{name:"Yes",value:!0},{name:"No",value:!1}]});import{checkbox as De,select as be}from"@inquirer/prompts";import $ from"chalk";var q=async e=>{let t=await De({message:`Please select the ${$.yellow("dependencies")} to include:`,choices:[{name:"Pinia",value:"pinia"},{name:"Vue-Router",value:"vue-router"},{name:"TailwindCSS",value:"tailwindcss"}]});if(e.usePinia=t.includes("pinia"),e.useVueRouter=t.includes("vue-router"),e.useTailwindcss=t.includes("tailwindcss"),e.usePinia&&(e.usePiniaPluginPersistedstate=await c(`Do you want to use ${$.yellow.bold("pinia-plugin-persistedstate")} for Pinia state persistence?`)),e.useVueRouter){let r=await be({message:`Select the ${$.yellow("Vue-Router mode")} to use:`,choices:[{name:"HTML5 Mode",value:"html5"},{name:"Hash Mode",value:"hash"}]});e.useHTML5Mode=r.includes("html5"),e.useHashMode=r.includes("hash")}};import{checkbox as Me}from"@inquirer/prompts";import b from"chalk";var K=async e=>{let t=await Me({message:`Please select the ${b.yellow("devDependencies")} to include:`,choices:[{name:"Eslint",value:"eslint"},{name:"Prettier",value:"prettier"},{name:"Commitizen",value:"commitizen"}]});e.useEslint=t.includes("eslint"),e.usePrettier=t.includes("prettier"),e.useCommitizen=t.includes("commitizen"),(e.useEslint||e.usePrettier)&&(e.useHusky=await c(`Do you want to use ${b.yellow.bold("Husky")} for Git hooks?`)),e.useHusky&&(e.useLintStaged=await c(`Do you want to use ${b.yellow.bold("lint-staged")} to run linters on staged files?`)),M.useTailwindcss&&e.usePrettier&&(e.usePrettierPluginTailwindcss=await c(`Do you want to use ${b.yellow.bold("Prettier-Plugin-Tailwindcss")} for Tailwind CSS formatting?`))};var X=async()=>await Ce({message:`Enter your ${W.yellow("project name")}:`,required:!0,validate:e=>/[\\/:*?"<>|]/.test(e)?'Project name cannot contain special characters like \\ / : * ? " < > |':!0}),M={usePinia:!1,useVueRouter:!1,useTailwindcss:!1,usePiniaPluginPersistedstate:!1,useHTML5Mode:!1,useHashMode:!1},Q={useEslint:!1,usePrettier:!1,useHusky:!1,useLintStaged:!1,useCommitizen:!1,usePrettierPluginTailwindcss:!1},Z=async()=>{let e=await c(`Do you want to use ${W.yellow.bold("TypeScript")} in your project?`);return await q(M),await K(Q),{useTypescript:e,...M,...Q}};import Ge from"fs-extra";import{fileURLToPath as Ne}from"url";var a=Ne(new URL("./template",import.meta.url));import p from"path";var ee=(e,t)=>{let r=t.useTypescript?p.join(a,"dep","base","TS"):p.join(a,"dep","base");e.writePkg(Ge.readJSONSync(p.join(r,"static","package.json"))),e.copy(p.join(r,"static"),""),e.rename("_gitignore",".gitignore"),e.render(p.join(r,"ejs","App.vue.ejs"),p.join("src","App.vue"),{...t}),e.render(p.join(r,"ejs",t.useTypescript?"main.ts.ejs":"main.js.ejs"),p.join("src",t.useTypescript?"main.ts":"main.js"),{...t}),e.render(p.join(r,"ejs","README.md.ejs"),"README.md",{projectName:e.projectName}),e.render(p.join(r,"ejs",t.useTypescript?"vite.config.ts.ejs":"vite.config.js.ejs"),t.useTypescript?"vite.config.ts":"vite.config.js",{...t}),e.render(p.join(r,"ejs","extensions.json.ejs"),p.join(".vscode","extensions.json"),{...t}),e.render(p.join(r,"ejs","settings.json.ejs"),p.join(".vscode","settings.json"),{...t}),t.useTailwindcss&&(e.render(p.join(r,"tailwindcss","App.vue.ejs"),p.join("src","App.vue"),{...t}),e.copy(p.join(r,"tailwindcss","components"),p.join("src","components")),e.copy(p.join(r,"tailwindcss","views"),p.join("src","views")))};import te from"fs-extra";import u from"path";var re=(e,t)=>{let{usePinia:r,usePiniaPluginPersistedstate:i,useTypescript:o}=t;if(!r)return;let n=o?u.join(a,"dep","pinia","TS"):u.join(a,"dep","pinia");if(e.extendDepsPkg(te.readJSONSync(u.join(n,"package.json"))),e.copy(u.join(n,o?"counter.ts":"counter.js"),u.join("src","stores",o?"counter.ts":"counter.js")),!i)return;let s=u.join(n,"pinia-plugin-persistedstate");e.extendDepsPkg(te.readJSONSync(u.join(s,"package.json"))),e.copy(u.join(s,o?"key.ts":"key.js"),u.join("src","stores",o?"key.ts":"key.js"))};import Oe from"fs-extra";import l from"path";var ie=(e,t)=>{let{useVueRouter:r,usePiniaPluginPersistedstate:i,useTypescript:o,useHTML5Mode:n,useHashMode:s}=t;if(!r)return;let m=o?l.join(a,"dep","vue-router","TS"):l.join(a,"dep","vue-router");e.extendDepsPkg(Oe.readJSONSync(l.join(m,"package.json"))),e.copy(l.join(m,"static"),"src"),e.render(l.join(m,"ejs","AboutView.vue.ejs"),l.join("src","views","AboutView.vue"),{usePiniaPluginPersistedstate:i}),e.render(l.join(m,"ejs","router",o?"index.ts.ejs":"index.js.ejs"),l.join("src","router",o?"index.ts":"index.js"),{useHTML5Mode:n,useHashMode:s})};import Le from"fs-extra";import C from"path";var oe=(e,t)=>{if(!t.useTailwindcss)return;let r=C.join(a,"dep","tailwindcss");e.extendDepsPkg(Le.readJSONSync(C.join(r,"package.json"))),e.copy(C.join(r,"src","styles"),C.join("src","styles"))};var N=async(e,t)=>(ee(e,t),re(e,t),ie(e,t),oe(e,t),t);import ne from"fs-extra";import T from"path";var se=(e,t)=>{let{useEslint:r,usePrettier:i,useTypescript:o}=t;if(!r)return;let n=o?T.join(a,"devDep","eslint","TS"):T.join(a,"devDep","eslint"),s=ne.readJSONSync(T.join(n,"package.json"));e.extendDevDepsPkg(s),e.extendScriptsPkg(s),e.render(T.join(n,o?"eslint.config.ts.ejs":"eslint.config.js.ejs"),o?"eslint.config.ts":"eslint.config.js",{usePrettier:i}),i&&e.extendDevDepsPkg(ne.readJSONSync(T.join(n,"prettierPkg.json")))};import ae from"fs-extra";import v from"path";var pe=(e,t)=>{let{usePrettier:r,usePrettierPluginTailwindcss:i}=t;if(!r)return;let o=v.join(a,"devDep","prettier"),n=ae.readJSONSync(v.join(o,"static","package.json"));e.extendDevDepsPkg(n),e.extendScriptsPkg(n),e.copy(v.join(o,"static",".prettierignore"),".prettierignore"),e.render(v.join(o,"ejs",".prettierrc.ejs"),".prettierrc",{usePrettierPluginTailwindcss:i}),i&&e.extendDevDepsPkg(ae.readJSONSync(v.join(o,"prettier-plugin-tailwindcss","package.json")))};import ze from"fs-extra";import d from"path";var ce=(e,t)=>{let{useEslint:r,usePrettier:i,useHusky:o,useLintStaged:n}=t;if(!o)return;let s=d.join(a,"devDep","husky"),m=ze.readJSONSync(d.join(s,"package.json"));e.extendDevDepsPkg(m),e.extendScriptsPkg(m),e.copy(d.join(s,"_"),d.join(".husky","_")),e.rename(d.join(".husky","_","_gitignore"),d.join(".husky","_",".gitignore")),e.render(d.join(s,"pre-commit.ejs"),d.join(".husky","pre-commit"),{useEslint:r,usePrettier:i,useLintStaged:n})};import H from"fs-extra";import G from"path";var me=(e,t)=>{let{useEslint:r,usePrettier:i,useLintStaged:o}=t;if(!o)return;let n=G.join(a,"devDep","lintStaged"),s=H.readJSONSync(G.join(n,"package.json"));e.extendDevDepsPkg(s),e.extendScriptsPkg(s);let m={};r?m=H.readJSONSync(G.join(n,"eslint.json")):i&&(m=H.readJSONSync(G.join(n,"prettier.json"))),e.writePkg(m)};import $e from"fs-extra";import ue from"path";var le=(e,t)=>{let{useCommitizen:r}=t;if(!r)return;let i=ue.join(a,"devDep","commitizen"),o=$e.readJSONSync(ue.join(i,"package.json"));e.extendScriptsPkg(o)};var O=async(e,t)=>(se(e,t),pe(e,t),ce(e,t),me(e,t),le(e,t),t);var de=async e=>{let t=await Z();return N(e,t),O(e,t),t};import{execa as A}from"execa";import J from"chalk";var fe=async e=>{if(!await c(`Do you want to ${J.yellow.bold("execute")} the above commands now?`))return;await A({shell:!0,stdio:"inherit"})`${f}`;let t=!1;e.useCommitizen&&(t=await c(`Do you want to ${J.yellow.bold("install the commitizen")} now?`),t&&await A({shell:!0,stdio:"inherit"})`${x}`),!(e.useCommitizen&&!t)&&await c(`Do you want to ${J.yellow.bold("execute the git")} commands now?`)&&await A({shell:!0,stdio:"inherit"})`${w}`};import Ae from"ora";import Je from"chalk";var ge=async()=>{await _();let e=await X(),t=He.join(process.cwd(),e);await U(e,t);let r=new y(e,t),i=await de(r),o=Ae("Generating files...").start();await r.generate(),o.succeed("Files generated successfully."),D(`
8
+ `),D=`cd ${e} && pnpm i -g commitizen && commitizen init cz-conventional-changelog --pnpm --save-dev --save-exact`,P(j.cyan($(j.rgb(...g)(`
9
+ ${D}
10
+ `),{title:"commands",titleAlignment:"center"}))))},B=async()=>{P(z(await I("BANANA")))},b=async e=>{P(z(e))};var ve=async(e,t)=>{try{if(F.pathExistsSync(t))if(!await Te({message:`The target folder "${e}" is existing. ${Y.yellow("Overwrite")}?`,choices:[{name:"Yes",value:!0},{name:"No",value:!1}]}))U(Y.rgb(...g).bold("Process canceled")).succeed(),process.exit(0);else{let i=U("Overwriting existing folder...").start();await F.emptyDir(t),i.succeed("Existing folder overwritten.")}}catch(r){console.error(r),process.exit(1)}},q=ve;import k from"fs-extra";import T from"path";import xe from"ejs";var y=class{projectName;targetDir;pkg;fileMiddlewares;constructor(t,r){this.projectName=t,this.targetDir=r,this.pkg={},this.fileMiddlewares=[]}writePkg(t){this.pkg={...this.pkg,...t}}extendDepsPkg(t){this.pkg.dependencies={...this.pkg.dependencies,...t.dependencies}}extendDevDepsPkg(t){this.pkg.devDependencies={...this.pkg.devDependencies,...t.devDependencies}}extendScriptsPkg(t){this.pkg.scripts={...this.pkg.scripts,...t.scripts}}copy(t,r){this.fileMiddlewares.push(()=>{k.copySync(t,T.join(this.targetDir,r))})}rename(t,r){this.fileMiddlewares.push(()=>{k.renameSync(T.join(this.targetDir,t),T.join(this.targetDir,r))})}render(t,r,i){this.fileMiddlewares.push(()=>{k.outputFileSync(T.join(this.targetDir,r),xe.render(k.readFileSync(t,"utf-8"),i))})}async generate(){this.fileMiddlewares.forEach(t=>t()),k.writeFileSync(T.join(this.targetDir,"package.json"),JSON.stringify(this.pkg,null,2))}};import X from"chalk";import{input as Ne}from"@inquirer/prompts";import{select as De}from"@inquirer/prompts";var c=async e=>await De({message:e,choices:[{name:"Yes",value:!0},{name:"No",value:!1}]});import{checkbox as be,select as Me}from"@inquirer/prompts";import H from"chalk";var K=async e=>{let t=await be({message:`Please select the ${H.yellow("dependencies")} to include:`,choices:[{name:"Pinia",value:"pinia"},{name:"Vue-Router",value:"vue-router"},{name:"TailwindCSS",value:"tailwindcss"}]});if(e.usePinia=t.includes("pinia"),e.useVueRouter=t.includes("vue-router"),e.useTailwindcss=t.includes("tailwindcss"),e.usePinia&&(e.usePiniaPluginPersistedstate=await c(`Do you want to use ${H.yellow.bold("pinia-plugin-persistedstate")} for Pinia state persistence?`)),e.useVueRouter){let r=await Me({message:`Select the ${H.yellow("Vue-Router mode")} to use:`,choices:[{name:"HTML5 Mode",value:"html5"},{name:"Hash Mode",value:"hash"}]});e.useHTML5Mode=r.includes("html5"),e.useHashMode=r.includes("hash")}};import{checkbox as Ce}from"@inquirer/prompts";import M from"chalk";var Q=async e=>{let t=await Ce({message:`Please select the ${M.yellow("devDependencies")} to include:`,choices:[{name:"Eslint",value:"eslint"},{name:"Prettier",value:"prettier"},{name:"Commitizen",value:"commitizen"}]});e.useEslint=t.includes("eslint"),e.usePrettier=t.includes("prettier"),e.useCommitizen=t.includes("commitizen"),(e.useEslint||e.usePrettier)&&(e.useHusky=await c(`Do you want to use ${M.yellow.bold("Husky")} for Git hooks?`)),e.useHusky&&(e.useLintStaged=await c(`Do you want to use ${M.yellow.bold("lint-staged")} to run linters on staged files?`)),C.useTailwindcss&&e.usePrettier&&(e.usePrettierPluginTailwindcss=await c(`Do you want to use ${M.yellow.bold("Prettier-Plugin-Tailwindcss")} for Tailwind CSS formatting?`))};var Z=async()=>await Ne({message:`Enter your ${X.yellow("project name")}:`,required:!0,validate:e=>/[\\/:*?"<>|]/.test(e)?'Project name cannot contain special characters like \\ / : * ? " < > |':!0}),C={usePinia:!1,useVueRouter:!1,useTailwindcss:!1,usePiniaPluginPersistedstate:!1,useHTML5Mode:!1,useHashMode:!1},W={useEslint:!1,usePrettier:!1,useHusky:!1,useLintStaged:!1,useCommitizen:!1,usePrettierPluginTailwindcss:!1},ee=async()=>{let e=await c(`Do you want to use ${X.yellow.bold("TypeScript")} in your project?`);return await K(C),await Q(W),{useTypescript:e,...C,...W}};import Oe from"fs-extra";import{fileURLToPath as Ge}from"url";var a=Ge(new URL("./template",import.meta.url));import p from"path";var te=(e,t)=>{let r=t.useTypescript?p.join(a,"dep","base","TS"):p.join(a,"dep","base");e.writePkg(Oe.readJSONSync(p.join(r,"static","package.json"))),e.copy(p.join(r,"static"),""),e.rename("_gitignore",".gitignore"),e.render(p.join(r,"ejs","App.vue.ejs"),p.join("src","App.vue"),{...t}),e.render(p.join(r,"ejs",t.useTypescript?"main.ts.ejs":"main.js.ejs"),p.join("src",t.useTypescript?"main.ts":"main.js"),{...t}),e.render(p.join(r,"ejs","README.md.ejs"),"README.md",{projectName:e.projectName}),e.render(p.join(r,"ejs",t.useTypescript?"vite.config.ts.ejs":"vite.config.js.ejs"),t.useTypescript?"vite.config.ts":"vite.config.js",{...t}),e.render(p.join(r,"ejs","extensions.json.ejs"),p.join(".vscode","extensions.json"),{...t}),e.render(p.join(r,"ejs","settings.json.ejs"),p.join(".vscode","settings.json"),{...t}),t.useTailwindcss&&(e.render(p.join(r,"tailwindcss","App.vue.ejs"),p.join("src","App.vue"),{...t}),e.copy(p.join(r,"tailwindcss","components"),p.join("src","components")),e.copy(p.join(r,"tailwindcss","views"),p.join("src","views")))};import re from"fs-extra";import u from"path";var ie=(e,t)=>{let{usePinia:r,usePiniaPluginPersistedstate:i,useTypescript:o}=t;if(!r)return;let n=o?u.join(a,"dep","pinia","TS"):u.join(a,"dep","pinia");if(e.extendDepsPkg(re.readJSONSync(u.join(n,"package.json"))),e.copy(u.join(n,o?"counter.ts":"counter.js"),u.join("src","stores",o?"counter.ts":"counter.js")),!i)return;let s=u.join(n,"pinia-plugin-persistedstate");e.extendDepsPkg(re.readJSONSync(u.join(s,"package.json"))),e.copy(u.join(s,o?"key.ts":"key.js"),u.join("src","stores",o?"key.ts":"key.js"))};import Le from"fs-extra";import m from"path";var oe=(e,t)=>{let{useTailwindcss:r,useVueRouter:i,usePiniaPluginPersistedstate:o,useTypescript:n,useHTML5Mode:s,useHashMode:l}=t;if(!i)return;let w=n?m.join(a,"dep","vue-router","TS"):m.join(a,"dep","vue-router");e.extendDepsPkg(Le.readJSONSync(m.join(w,"package.json"))),e.copy(m.join(w,"static"),"src"),e.render(m.join(w,"ejs","AboutView.vue.ejs"),m.join("src","views","AboutView.vue"),{usePiniaPluginPersistedstate:o}),e.render(m.join(w,"ejs","router",n?"index.ts.ejs":"index.js.ejs"),m.join("src","router",n?"index.ts":"index.js"),{useHTML5Mode:s,useHashMode:l}),r&&e.copy(m.join(w,"tailwindcss","TitleText.vue"),m.join("src","components","TitleText.vue"))};import ze from"fs-extra";import N from"path";var ne=(e,t)=>{if(!t.useTailwindcss)return;let r=N.join(a,"dep","tailwindcss");e.extendDepsPkg(ze.readJSONSync(N.join(r,"package.json"))),e.copy(N.join(r,"src","styles"),N.join("src","styles"))};var G=async(e,t)=>(te(e,t),ie(e,t),oe(e,t),ne(e,t),t);import se from"fs-extra";import v from"path";var ae=(e,t)=>{let{useEslint:r,usePrettier:i,useTypescript:o}=t;if(!r)return;let n=o?v.join(a,"devDep","eslint","TS"):v.join(a,"devDep","eslint"),s=se.readJSONSync(v.join(n,"package.json"));e.extendDevDepsPkg(s),e.extendScriptsPkg(s),e.render(v.join(n,o?"eslint.config.ts.ejs":"eslint.config.js.ejs"),o?"eslint.config.ts":"eslint.config.js",{usePrettier:i}),i&&e.extendDevDepsPkg(se.readJSONSync(v.join(n,"prettierPkg.json")))};import pe from"fs-extra";import x from"path";var ce=(e,t)=>{let{usePrettier:r,usePrettierPluginTailwindcss:i}=t;if(!r)return;let o=x.join(a,"devDep","prettier"),n=pe.readJSONSync(x.join(o,"static","package.json"));e.extendDevDepsPkg(n),e.extendScriptsPkg(n),e.copy(x.join(o,"static",".prettierignore"),".prettierignore"),e.render(x.join(o,"ejs",".prettierrc.ejs"),".prettierrc",{usePrettierPluginTailwindcss:i}),i&&e.extendDevDepsPkg(pe.readJSONSync(x.join(o,"prettier-plugin-tailwindcss","package.json")))};import $e from"fs-extra";import d from"path";var me=(e,t)=>{let{useEslint:r,usePrettier:i,useHusky:o,useLintStaged:n}=t;if(!o)return;let s=d.join(a,"devDep","husky"),l=$e.readJSONSync(d.join(s,"package.json"));e.extendDevDepsPkg(l),e.extendScriptsPkg(l),e.copy(d.join(s,"_"),d.join(".husky","_")),e.rename(d.join(".husky","_","_gitignore"),d.join(".husky","_",".gitignore")),e.render(d.join(s,"pre-commit.ejs"),d.join(".husky","pre-commit"),{useEslint:r,usePrettier:i,useLintStaged:n})};import A from"fs-extra";import O from"path";var ue=(e,t)=>{let{useEslint:r,usePrettier:i,useLintStaged:o}=t;if(!o)return;let n=O.join(a,"devDep","lintStaged"),s=A.readJSONSync(O.join(n,"package.json"));e.extendDevDepsPkg(s),e.extendScriptsPkg(s);let l={};r?l=A.readJSONSync(O.join(n,"eslint.json")):i&&(l=A.readJSONSync(O.join(n,"prettier.json"))),e.writePkg(l)};import He from"fs-extra";import le from"path";var de=(e,t)=>{let{useCommitizen:r}=t;if(!r)return;let i=le.join(a,"devDep","commitizen"),o=He.readJSONSync(le.join(i,"package.json"));e.extendScriptsPkg(o)};var L=async(e,t)=>(ae(e,t),ce(e,t),me(e,t),ue(e,t),de(e,t),t);var fe=async e=>{let t=await ee();return G(e,t),L(e,t),t};import{execa as J}from"execa";import E from"chalk";var ge=async e=>{if(!await c(`Do you want to ${E.yellow.bold("execute")} the above commands now?`))return;await J({shell:!0,stdio:"inherit"})`${f}`;let t=!1;e.useCommitizen&&(t=await c(`Do you want to ${E.yellow.bold("install the commitizen")} now?`),t&&await J({shell:!0,stdio:"inherit"})`${D}`),!(e.useCommitizen&&!t)&&await c(`Do you want to ${E.yellow.bold("execute the git")} commands now?`)&&await J({shell:!0,stdio:"inherit"})`${S}`};import Je from"ora";import Ee from"chalk";var ye=async()=>{await B();let e=await Z(),t=Ae.join(process.cwd(),e);await q(e,t);let r=new y(e,t),i=await fe(r),o=Je("Generating files...").start();await r.generate(),o.succeed("Files generated successfully."),b(`
11
11
  Project initialization complete. You may execute the following commands:
12
- `),I(e,i),V(e,i),D(`
12
+ `),R(e,i),_(e,i),b(`
13
13
  And initialize Git using the following commands:
14
- `),R(e,i),await fe(i),console.log(Je.rgb(...g).bold(`
14
+ `),V(e,i),await ge(i),console.log(Ee.rgb(...g).bold(`
15
15
  All commands executed successfully!
16
- `))};import{program as h}from"commander";import Ee from"path";import Ie from"fs-extra";var Re=[{flags:"--p3a, --usePinia",description:"pinia state management"},{flags:"-v, --useVueRouter",description:"vue-router for routing"},{flags:"--t9s, --useTailwindcss",description:"tailwindcss for styling"},{flags:"--p23e, --usePiniaPluginPersistedstate",description:"pinia plugin persistedstate"},{flags:"--h7e, --useHTML5Mode",description:"HTML5 mode for routing"},{flags:"--h6e, --useHashMode",description:"hash mode for routing"},{flags:"--t8t, --useTypescript",description:"typescript support"},{flags:"-e, --useEslint",description:"eslint support"},{flags:"--p6r, --usePrettier",description:"prettier support"},{flags:"--h3y, --useHusky",description:"husky support"},{flags:"-l, --useLintStaged",description:"lint-staged support"},{flags:"-c, --useCommitizen",description:"commitizen support"},{flags:"--p23s, --usePrettierPluginTailwindcss",description:"prettier plugin tailwindcss support"}];h.description("Create a new project with features you select.");Re.forEach(({flags:e,description:t})=>{h.option(e,t,!1)});h.argument("<projectName>","Name of the project to create");var Ve=e=>{e.usePinia||(e.usePiniaPluginPersistedstate=!1),!e.useEslint&&!e.usePrettier&&(e.useHusky=!1),e.useHusky||(e.useLintStaged=!1),e.useTailwindcss&&e.usePrettier||(e.usePrettierPluginTailwindcss=!1),e.useVueRouter&&!e.useHTML5Mode&&!e.useHashMode&&(e.useHTML5Mode=!0),e.useHTML5Mode&&e.useHashMode&&(e.useHashMode=!1)},ye=async()=>{h.parse();let e=h.args[0],t=Ee.join(process.cwd(),e);await Ie.emptyDir(t);let r=new y(e,t),i=h.opts();Ve(i),N(r,i),O(r,i),await r.generate()};process.argv.length>2?await ye():await ge();
16
+ `))};import{program as h}from"commander";import Ie from"path";import Re from"fs-extra";var Ve=[{flags:"--p3a, --usePinia",description:"pinia state management"},{flags:"-v, --useVueRouter",description:"vue-router for routing"},{flags:"--t9s, --useTailwindcss",description:"tailwindcss for styling"},{flags:"--p23e, --usePiniaPluginPersistedstate",description:"pinia plugin persistedstate"},{flags:"--h7e, --useHTML5Mode",description:"HTML5 mode for routing"},{flags:"--h6e, --useHashMode",description:"hash mode for routing"},{flags:"--t8t, --useTypescript",description:"typescript support"},{flags:"-e, --useEslint",description:"eslint support"},{flags:"--p6r, --usePrettier",description:"prettier support"},{flags:"--h3y, --useHusky",description:"husky support"},{flags:"-l, --useLintStaged",description:"lint-staged support"},{flags:"-c, --useCommitizen",description:"commitizen support"},{flags:"--p23s, --usePrettierPluginTailwindcss",description:"prettier plugin tailwindcss support"}];h.description("Create a new project with features you select.");Ve.forEach(({flags:e,description:t})=>{h.option(e,t,!1)});h.argument("<projectName>","Name of the project to create");var _e=e=>{e.usePinia||(e.usePiniaPluginPersistedstate=!1),!e.useEslint&&!e.usePrettier&&(e.useHusky=!1),e.useHusky||(e.useLintStaged=!1),e.useTailwindcss&&e.usePrettier||(e.usePrettierPluginTailwindcss=!1),e.useVueRouter&&!e.useHTML5Mode&&!e.useHashMode&&(e.useHTML5Mode=!0),e.useHTML5Mode&&e.useHashMode&&(e.useHashMode=!1)},je=async()=>{h.parse();let e=h.args[0],t=Ie.join(process.cwd(),e);await Re.emptyDir(t);let r=new y(e,t),i=h.opts();_e(i),G(r,i),L(r,i),await r.generate()};process.argv.length>2?await je():await ye();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-banana",
3
- "version": "2.4.1",
3
+ "version": "2.4.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/TMname1/create-banana.git"
package/readme.md CHANGED
@@ -6,7 +6,33 @@ To create a new project, run:
6
6
  pnpm create banana
7
7
  ```
8
8
 
9
- Follow the interactive prompts to key in your project name and select features
9
+ ## CLI usage
10
+
11
+ ```bash
12
+ Usage: index [options] <projectName>
13
+
14
+ Create a new project with features you select.
15
+
16
+ Arguments:
17
+ projectName Name of the project to create
18
+
19
+ Options:
20
+ --p3a, --usePinia pinia state management (default: false)
21
+ -v, --useVueRouter vue-router for routing (default: false)
22
+ --t9s, --useTailwindcss tailwindcss for styling (default: false)
23
+ --p23e, --usePiniaPluginPersistedstate pinia plugin persistedstate (default: false)
24
+ --h7e, --useHTML5Mode HTML5 mode for routing (default: false)
25
+ --h6e, --useHashMode hash mode for routing (default: false)
26
+ --t8t, --useTypescript typescript support (default: false)
27
+ -e, --useEslint eslint support (default: false)
28
+ --p6r, --usePrettier prettier support (default: false)
29
+ --h3y, --useHusky husky support (default: false)
30
+ -l, --useLintStaged lint-staged support (default: false)
31
+ -c, --useCommitizen commitizen support (default: false)
32
+ --p23s, --usePrettierPluginTailwindcss prettier plugin tailwindcss support (default: false)
33
+ -h, --help display help for command
34
+ ```
35
+
10
36
 
11
37
  # Currently implemented functions
12
38
 
@@ -26,63 +52,3 @@ Follow the interactive prompts to key in your project name and select features
26
52
  - [husky](https://typicode.github.io/husky/)
27
53
  - [lint-staged](https://github.com/lint-staged/lint-staged)
28
54
  - [commitizen](https://github.com/commitizen/cz-cli)
29
-
30
- # Project structure
31
-
32
- ```text
33
- create-tm
34
- ├─ script
35
- │ └─ build.js
36
- ├─ src
37
- │ ├─ app
38
- │ │ ├─ CLI
39
- │ │ │ ├─ depSelect.ts
40
- │ │ │ ├─ devDepSelect.ts
41
- │ │ │ ├─ input.ts
42
- │ │ │ ├─ main.ts
43
- │ │ │ └─ output.ts
44
- │ │ ├─ core
45
- │ │ │ ├─ depManger.ts
46
- │ │ │ ├─ devDepManger.ts
47
- │ │ │ ├─ execute.ts
48
- │ │ │ ├─ featsManger.ts
49
- │ │ │ └─ generator.ts
50
- │ │ └─ features
51
- │ │ ├─ dep
52
- │ │ │ ├─ base.ts
53
- │ │ │ ├─ pinia.ts
54
- │ │ │ ├─ tailwindcss.ts
55
- │ │ │ └─ vueRouter.ts
56
- │ │ └─ devDep
57
- │ │ ├─ commitizen.ts
58
- │ │ ├─ eslint.ts
59
- │ │ ├─ husky.ts
60
- │ │ ├─ lintStaged.ts
61
- │ │ └─ prettier.ts
62
- │ ├─ bin
63
- │ │ └─ index.ts
64
- │ └─ utils
65
- │ ├─ figletPrint.ts
66
- │ ├─ pathExists.ts
67
- │ ├─ prompt.ts
68
- │ ├─ rainbow.ts
69
- │ └─ URL.ts
70
- ├─ template
71
- │ ├─ dep
72
- │ │ ├─ base
73
- │ │ ├─ pinia
74
- │ │ ├─ tailwindcss
75
- │ │ └─ vue-router
76
- │ └─ devDep
77
- │ ├─ commitizen
78
- │ ├─ eslint
79
- │ ├─ husky
80
- │ ├─ lintStaged
81
- │ └─ prettier
82
- ├─ eslint.config.js
83
- ├─ LICENSE
84
- ├─ package.json
85
- ├─ pnpm-lock.yaml
86
- ├─ readme.md
87
- └─ tsconfig.json
88
- ```