custom-menu-cli
Version:
Menu interativo baseado em JSON para execução de comandos no terminal
194 lines (144 loc) • 5.46 kB
Markdown
# Custom Menu CLI


Esta é uma ferramenta de interface de linha de comando (CLI) que cria um menu interativo com base em um arquivo JSON. Ele foi projetado para simplificar a execução de comandos frequentes em um terminal.
## Funcionalidades
- Menu interativo no terminal.
- Estrutura do menu definida por um arquivo JSON.
- Fácil de configurar e usar.
- Suporte para execução de comandos com confirmação.
## Lançamentos
Você pode encontrar todas as versões lançadas e os executáveis standalone pré-compilados na página de [Releases do GitHub](https://github.com/mateusmed/custom-menu-cli/releases).
## Instalação
Para instalar esta ferramenta globalmente, execute o seguinte comando:
```bash
npm install -g custom-menu-cli
```
## Uso
Existem três maneiras principais de utilizar esta ferramenta:
### 1. Como Executável (Build de Release)
Você pode gerar executáveis para Linux, macOS e Windows. Após o build, os arquivos estarão na pasta `dist/`.
Primeiro, gere os arquivos com o comando:
```bash
npm run build
```
Depois, execute o arquivo correspondente ao seu sistema operacional, passando opcionalmente o caminho para um arquivo de menu. Se nenhum caminho for fornecido, ele procurará por um `menu.json` no diretório atual.
```bash
# No Linux/macOS
./dist/custom-menu-linux [caminho/para/seu/menu.json]
# No Windows
.\dist\custom-menu-win.exe [caminho\para\seu\menu.json]
```
### 2. Globalmente via NPM
Instale o pacote globalmente para usar o comando `custom-menu-cli` em qualquer lugar do seu sistema.
```bash
npm install -g custom-menu-cli
```
Depois de instalado, execute o comando:
```bash
custom-menu-cli [caminho/para/seu/menu.json]
```
### 3. Programaticamente via `require`
Você pode importar a função `runCli` em seus próprios projetos Node.js para integrar a funcionalidade do menu.
Primeiro, adicione o pacote como uma dependência do seu projeto:
```bash
npm install custom-menu-cli
```
Depois, use-o em seu código:
```javascript
const { runCli } = require('custom-menu-cli');
async function iniciarMeuMenuCustomizado() {
console.log("Iniciando menu customizado...");
// Opcionalmente, passe o caminho para o seu arquivo menu.json
await runCli('./caminho/para/seu/menu.json');
console.log("Menu customizado finalizado.");
}
iniciarMeuMenuCustomizado();
```
### 4. Geração de Menu Baseada em Pastas
O `custom-menu-cli` agora suporta a geração de menus a partir de uma pasta estruturada contendo arquivos JSON. Isso permite uma melhor organização e modularidade das suas definições de menu.
**Estrutura de Exemplo (`test_menus/`):**
```
test_menus/
├── 1-project-a/
│ ├── 1.1-down-service.json
│ ├── 1.2-up-service.json
│ └── 1.3-restart-project-a.json
├── 2-restart-all.json
└── 3-restart-project-a-nested.json
```
Cada arquivo `.json` dentro da pasta (e suas subpastas) representa uma opção de menu. Os diretórios são automaticamente convertidos em opções do tipo `navigation`.
**Como usar:**
Basta passar o caminho para a sua pasta de menu como argumento:
```bash
custom-menu-cli ./caminho/para/sua/pasta_de_menu
```
O CLI irá automaticamente descobrir e combinar todos os arquivos JSON válidos em uma única estrutura de menu.
## Estrutura do JSON
O arquivo JSON que define o menu tem a seguinte estrutura:
```json
{
"name": "custom-menu-cli",
"description": "JSON-based terminal menu",
"options": [
{
"id": "1",
"name": "Projeto A",
"type": "navigation",
"options": [
{
"id": "1.1",
"name": "Down Service",
"type": "action",
"command": "echo 'Down A'",
"confirm": true
},
{
"id": "1.2",
"name": "Up Service",
"type": "action",
"command": "echo 'Up A'"
},
{
"id": "1.3",
"name": "Restart Project A (from inside)",
"type": "custom-action",
"idList": ["1.1", "1.2"],
"confirm": true
}
]
},
{
"id": "2",
"name": "Restart All",
"type": "custom-action",
"idList": ["1.1", "1.2"],
"confirm": true
},
{
"id": "3",
"name": "Restart Project A (Nested)",
"type": "custom-action",
"idList": ["1.3"],
"confirm": true
}
]
}
```
### Campos
- `name`: O nome do menu.
- `description`: Uma breve descrição do menu.
- `options`: Um array de opções do menu.
- `id`: Um identificador único para a opção.
- `name`: O texto que será exibido para a opção.
- `type`: O tipo de opção. Pode ser `action` (executa um comando), `navigation` (abre um submenu) ou `custom-action` (executa uma lista de comandos de outras ações).
- `command`: O comando a ser executado (se o tipo for `action`).
- `idList`: Uma lista de ids de outras ações a serem executados (se o tipo for `custom-action`).
- `confirm`: Um booleano que indica se uma confirmação deve ser solicitada antes de executar o comando.
- `options`: Um array de sub-opções (se o tipo for `navigation`).
## Licença
Este projeto está licenciado sob a Licença MIT.
## Autor
- **Mateus Medeiros**
- GitHub: [@mateusmed](https://github.com/mateusmed)
- LinkedIn: [Mateus Medeiros](https://www.linkedin.com/in/mateus-med/)