constatic
Version:
Constatic cli
3 lines (2 loc) • 6.42 kB
JavaScript
import{byeMessage as W,copy as l,createEnvEditor as K,divider as i,getCdPath as M,getPackageManager as L,instructions as T,json as q,log as S,toNpmName as Y,uiMessage as t}from"#helpers";import{searchSelect as _,theme as z,withDefaults as u}from"#prompts";import{applyScriptPresets as G}from"#shared/presets/scripts/apply.js";import{checkbox as H,input as Q,select as j}from"@inquirer/prompts";import a from"chalk";import B from"lodash.merge";import{readFile as X,writeFile as Z}from"node:fs/promises";import n from"node:path";import ee from"ora";import{readPackageJSON as $}from"pkg-types";import{Project as te}from"ts-morph";import{copyProject as ne}from"./copy.js";import{updateEnv as U}from"./env.js";import{installDeps as ae}from"./install.js";async function be(c){const g=n.join(c.cliroot,"/templates/discord/bot"),k=a.dim.underline(n.basename(c.cwd)+"/"),x=await Q(u({message:t({"en-US":`\u{1F4C1} Project name ${k}`,"pt-BR":`\u{1F4C1} Nome do projeto ${k}`})+`
`,async validate(e){const V=t({"en-US":`${e} is not a valid path`,"pt-BR":`${e} n\xE3o \xE9 um caminho v\xE1lido!`});return e?!0:V},required:!0,default:"./"}));i();const s=n.resolve(x),D=s===c.cwd,y=Y(n.basename(D?s:x));S.success(a.bgBlue(` ${y} `)),i();const N=await q.read(n.join(g,"properties.json")),o=await j(u({message:t({"en-US":"\u{1F9F0} Database preset","pt-BR":"\u{1F9F0} Predefini\xE7\xE3o de banco de dados"}),choices:[{name:t({"en-US":"None","pt-BR":"Nenhum"},a.red.dim),value:void 0},...Object.values(N.presets.databases).filter(e=>e.disabled!==!0).map(e=>({name:`${e.icon} ${e.name} ${a.dim(`(${e.hint})`)}`,value:e}))]}));i();const p=o?.isORM?await j(u({message:t({"en-US":`Select ${o.name} database preset ${o.icon} `,"pt-BR":`Selecione a predefini\xE7\xE3o de banco de dados ${o.name} ${o.icon} `}),choices:Object.values(o.databases).filter(e=>e.disabled!==!0).map(e=>({name:`${e.icon} ${e.name} ${a.dim(`(${e.hint})`)}`,value:e}))})):void 0;p&&i();const b=await H(u({message:t({"en-US":"\u2728 Extra features","pt-BR":"\u2728 Recursos extras"}),choices:[{name:t({"en-US":"\u{1F5D0} Discloud files","pt-BR":"\u{1F5D0} Arquivos Discloud"},a.greenBright),value:"discloud",checked:!0},{name:t({"en-US":"\u25CD API Server","pt-BR":"\u25CD Servidor de API"},a.cyanBright),value:"server"},{name:t({"en-US":"\u{1F5F2} Tsup compiler","pt-BR":"\u{1F5F2} Compilador tsup"},a.blueBright),value:"tsup"}],instructions:T.checkbox,required:!1}));i();const f=b.includes("server")?await j(u({message:t({"en-US":"\u{1F310} API Server","pt-BR":"\u{1F310} Servidor de API"}),choices:[...Object.values(N.presets.servers).filter(e=>e.disabled!==!0).map(e=>({name:`${e.icon} ${e.name} ${a.dim(`(${e.hint})`)}`,value:e}))]})):void 0;b.includes("server")&&i();const A=c.conf.get("discord.bot.tokens",[]),I=A.length>=1?await j(u({message:t({"en-US":"\u{1F511} Saved token","pt-BR":"\u{1F511} Token salvo"}),choices:[{name:t({"en-US":"None","pt-BR":"Nenhum"},a.red.dim),value:"none"},...A.map(e=>({name:`\u{1F916} ${a.yellow(e.name)}`,value:e.token}))]})):void 0;i();const P=c.conf.get("presets.scripts",[]),C=P.length<1?[]:await _(u({message:t({"en-US":"\u{1F5D0} Script presets","pt-BR":"\u{1F5D0} Predefini\xE7\xF5es de scripts"}),options:P.map(e=>({name:e.name,value:e})),theme:z.searchSelect,instructions:T.searchSelect}));P.length>=1&&i();const E=L(),F=a.bgWhite(` ${E} `),O=await j(u({message:t({"en-US":`\u{1F4E5} Install dependencies? ${F}`,"pt-BR":`\u{1F4E5} Instalar depend\xEAncias? ${F}`}),choices:[{name:t({"en-US":"Yes","pt-BR":"Sim"},a.greenBright),value:"yes"},{name:t({"en-US":"No","pt-BR":"N\xE3o"},a.redBright),value:"no"}]}))=="yes";i();const m=ee();m.start(t({"en-US":"The project is being generated! Please wait...","pt-BR":"O projeto est\xE1 sendo gerado! Aguarde..."}));const d=(...e)=>n.join(s,...e);await ne(n.join(g,"project"),s);const R=new te({tsConfigFilePath:d("tsconfig.json")});m.text=t({"en-US":"Creating environment variables editor","pt-BR":"Criando editor de vari\xE1veis de ambiente"});const v=await K(n.join(s,".env")),w={envSchema:R.addSourceFileAtPath(d("src/settings/env.schema.ts")),index:R.addSourceFileAtPath(d("src/index.ts"))};m.text=t({"en-US":"Reading package.json","pt-BR":"Lendo package.json"});const r=await $(d("package.json"));if(r.name=y,o){m.text=t({"en-US":"Setting up the database","pt-BR":"Configurando o banco de dados"});const e=n.join(g,"databases");B(r,o.packageJson),o.env&&await U(w.envSchema,v,o.env),o.path&&await l(n.join(e,o.path),s),p&&(B(r,p.packageJson),await l(n.join(e,p.path),s),p.env&&await U(w.envSchema,v,p.env))}if(f){m.text=t({"en-US":"Setting up the API Server...","pt-BR":"Configurando Servidor de API..."});const e=n.join(g,"servers");B(r,f.packageJson),f.env&&await U(w.envSchema,v,f.env),await l(n.join(e,f.path),s),w.index.addImportDeclaration({moduleSpecifier:"#server"})}I&&(m.text=t({"en-US":"Writing the token to the .env file...","pt-BR":"Escrevendo o token no arquivo .env..."}),v.set("BOT_TOKEN",I));const h=n.join(g,"extras");if(await l(n.join(h,"gitignore.txt"),d(".gitignore")),b.includes("discloud")){const e=n.join(h,c.isBun?"bun":"discloud");await l(n.join(e,"discloud.ignore.txt"),d(".discloudignore")),await l(n.join(e,"discloud.config.txt"),d("discloud.config")),c.isBun&&await l(n.join(e,"Dockerfile"),d("Dockerfile"))}if(b.includes("tsup")){const e=await $(n.join(h,"tsup/package.json"));B(r,e),await l(n.join(h,"tsup/tsup.config.ts"),d("tsup.config.ts"))}const J=d("src/discord/base/base.version.ts");if(await X(J,"utf-8").then(e=>e.replace("{{baseVersion}}",c.version)).then(e=>Z(J,e,"utf-8")).catch(()=>null),r.baseVersion=c.version,C.length>=1&&await G({configdir:c.configdir,presets:C,packageJson:r,distPath:s}),c.isBun){const e=await $(n.join(h,"bun/package.json"));B(r,e),r.devDependencies??={},delete r.devDependencies.tsx,delete r.devDependencies["@types/node"]}await q.write(d("package.json"),r),R.save(),v.save(),O&&(await ae({distpath:s,spinner:m,command:E}),i()),m.stop(),S.success(t({"en-US":"Project generate successfully!","pt-BR":"Projeto gerado com sucesso!"})),i(),D||S.custom(a.green("\u279E"),t({"en-US":`Use: ${M(s)}`,"pt-BR":`Use: ${M(s)}`})),O||S.custom(a.green("\u279E"),t({"en-US":"Install the dependencies","pt-BR":"Instale as depend\xEAncias"})),S.custom(a.green("\u279E"),t({"en-US":`Run ${a.underline("dev")} script`,"pt-BR":`Execute o script ${a.underline("dev")}`})),i(),console.log(W),i()}export{be as discordBotMenu};