tscurl
v0.2.2
Published
cURL easy to use
Maintainers
Readme
Uma ferramenta CLI poderosa para fazer requisições HTTP usando sintaxe JavaScript pura!
📖 Sobre o Projeto
O requrl (também conhecido como jsurl) é uma ferramenta de linha de comando que permite fazer requisições HTTP usando JavaScript diretamente no terminal. Ao invés de decorar sintaxes complexas de cURL ou usar ferramentas com configurações verbosas, você pode usar JavaScript puro e familiar!
✨ Por que usar requrl?
- 🎯 Sintaxe JavaScript familiar - Use
await, objetos, arrays, tudo que você já conhece - 🚀 Rápido e direto - Execute requisições complexas em uma única linha
- 🎨 Saída colorida e formatada - Resultados bonitos e legíveis no terminal
- 🔧 Flexível - Suporta todos os métodos HTTP (GET, POST, PUT, DELETE, PATCH)
- 📦 Zero dependências - Usa apenas APIs nativas do Node.js
🚀 Instalação
Instalação Local para Desenvolvimento (Recomendado para testar)
Se você clonou ou baixou este repositório, pode instalar localmente:
# Usando npm
npm link
# Ou usando bun
bun linkIsso criará os comandos requrl e jscurl globalmente apontando para este diretório.
Instalação Global (Quando publicado no npm)
npm install -g @purecore/requrlOu usando bun:
bun install -g @purecore/requrlUso Direto (Sem instalação)
Você também pode usar diretamente com Node.js:
node requrl.js "await req.get('https://api.github.com/users/octocat')"💻 Como Usar
Uso Básico
Após a instalação, você pode usar o comando jscurl ou requrl:
# GET simples
jscurl "await req.get('https://api.github.com/users/octocat')"
# POST com body
jscurl "await req.post('https://api.example.com/users', { name: 'João', age: 30 })"
# Com headers customizados
jscurl "await req.get('https://api.example.com/data', { headers: { 'Authorization': 'Bearer token123' } })"Exemplos Completos
1. GET Request Simples
jscurl "await req.get('https://jsonplaceholder.typicode.com/posts/1')"2. POST Request com JSON
jscurl "await req.post('https://jsonplaceholder.typicode.com/posts', { title: 'Meu Post', body: 'Conteúdo do post', userId: 1 })"3. PUT Request
jscurl "await req.put('https://jsonplaceholder.typicode.com/posts/1', { id: 1, title: 'Título Atualizado', body: 'Novo conteúdo', userId: 1 })"4. DELETE Request
jscurl "await req.delete('https://jsonplaceholder.typicode.com/posts/1')"5. PATCH Request
jscurl "await req.patch('https://jsonplaceholder.typicode.com/posts/1', { title: 'Apenas título atualizado' })"6. Com Headers Customizados
jscurl "await req.get('https://api.github.com/user', { headers: { 'Authorization': 'token ghp_xxxxxxxxxxxx', 'Accept': 'application/vnd.github.v3+json' } })"7. Com Opções Adicionais do Fetch
jscurl "await req.get('https://api.example.com/data', { headers: { 'X-Custom-Header': 'valor' }, redirect: 'follow' })"🏗️ Como Funciona
O requrl funciona de forma inteligente e elegante:
- Parser de Código JavaScript: O comando recebe uma string contendo código JavaScript válido
- AsyncFunction: Usa
AsyncFunctiondo JavaScript para executar código assíncrono dinamicamente - Objeto
req: Expõe métodos HTTP simplificados (get,post,put,delete,patch) - Fetch API Nativa: Utiliza a API
fetchnativa do Node.js (disponível a partir do Node.js 18+) - Formatação Inteligente: Detecta automaticamente o tipo de conteúdo e formata a resposta (JSON ou texto)
- Saída Colorida: Usa códigos ANSI para colorir e formatar a saída no terminal
Arquitetura Interna
┌─────────────────┐
│ Terminal CLI │
│ (jscurl cmd) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Code Parser │
│ (AsyncFunction) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ req Object │
│ (HTTP Methods) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Fetch API │
│ (Native Node) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Formatter │
│ (Colors/JSON) │
└─────────────────┘🧪 Como Testar
Testes Manuais
Você pode testar a ferramenta com APIs públicas:
# Teste com JSONPlaceholder
jscurl "await req.get('https://jsonplaceholder.typicode.com/posts/1')"
# Teste com GitHub API
jscurl "await req.get('https://api.github.com/users/octocat')"
# Teste POST
jscurl "await req.post('https://jsonplaceholder.typicode.com/posts', { title: 'Test', body: 'Test body', userId: 1 })"Estrutura de Resposta
A ferramenta retorna um objeto padronizado:
{
status: 200,
statusText: 'OK',
headers: { /* todos os headers da resposta */ },
data: { /* corpo da resposta (JSON ou texto) */ }
}Tratamento de Erros
Em caso de erro, a resposta incluirá:
{
error: "Mensagem de erro descritiva"
}🔧 Desenvolvimento
Pré-requisitos
- Node.js 18+ (para suporte nativo ao
fetch) - npm ou bun
Estrutura do Projeto
jscurl/
├── requrl.js # Código principal
├── package.json # Configurações do pacote
└── README.md # Este arquivoComo Foi Feito
O requrl foi desenvolvido com foco em simplicidade e poder:
- Shebang Line:
#!/usr/bin/env nodepermite executar o arquivo diretamente - Bin Configuration: O
package.jsondefine os comandosrequrlejscurlno campobin - AsyncFunction: Permite executar código JavaScript assíncrono dinamicamente, incluindo
await - Fetch API: Aproveita a API
fetchnativa do Node.js 18+, eliminando dependências externas - Detecção de Tipo: Analisa o header
Content-Typepara decidir entreJSON.parse()outext() - Cores ANSI: Implementa um sistema simples de cores para melhorar a legibilidade
Características Técnicas
- ✅ Zero Dependencies: Usa apenas APIs nativas do Node.js
- ✅ ES Modules: Suporta
import/export(tipo: "module") - ✅ Type Detection: Detecta automaticamente JSON vs texto
- ✅ Error Handling: Tratamento robusto de erros com mensagens claras
- ✅ Flexible Options: Suporta todas as opções do
fetchAPI
📚 API Reference
req.get(url, options?)
Faz uma requisição GET.
Parâmetros:
url(string): URL da requisiçãooptions(object, opcional): Opções adicionais (headers, etc.)
Exemplo:
jscurl "await req.get('https://api.example.com/data', { headers: { 'Authorization': 'Bearer token' } })"req.post(url, body?, options?)
Faz uma requisição POST.
Parâmetros:
url(string): URL da requisiçãobody(any, opcional): Corpo da requisição (será convertido para JSON se for objeto)options(object, opcional): Opções adicionais
Exemplo:
jscurl "await req.post('https://api.example.com/users', { name: 'João' })"req.put(url, body?, options?)
Faz uma requisição PUT.
req.delete(url, options?)
Faz uma requisição DELETE.
req.patch(url, body?, options?)
Faz uma requisição PATCH.
🤝 Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para:
- Fazer fork do projeto
- Criar uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m '✨ feat: Adiciona AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abrir um Pull Request
📝 Changelog
Veja todas as mudanças no CHANGELOG.md.
📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
👤 Autor
suissAI
🙏 Agradecimentos
- Node.js pela API
fetchnativa - Comunidade JavaScript por toda a inspiração
- Todos os contribuidores que ajudam a melhorar este projeto
🔗 Fontes de Informação
⭐ Gostou do projeto? Dê uma estrela! ⭐
