npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tscurl

v0.2.2

Published

cURL easy to use

Readme

Uma ferramenta CLI poderosa para fazer requisições HTTP usando sintaxe JavaScript pura!

License: MIT Node.js

📖 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 link

Isso criará os comandos requrl e jscurl globalmente apontando para este diretório.

Instalação Global (Quando publicado no npm)

npm install -g @purecore/requrl

Ou usando bun:

bun install -g @purecore/requrl

Uso 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:

  1. Parser de Código JavaScript: O comando recebe uma string contendo código JavaScript válido
  2. AsyncFunction: Usa AsyncFunction do JavaScript para executar código assíncrono dinamicamente
  3. Objeto req: Expõe métodos HTTP simplificados (get, post, put, delete, patch)
  4. Fetch API Nativa: Utiliza a API fetch nativa do Node.js (disponível a partir do Node.js 18+)
  5. Formatação Inteligente: Detecta automaticamente o tipo de conteúdo e formata a resposta (JSON ou texto)
  6. 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 arquivo

Como Foi Feito

O requrl foi desenvolvido com foco em simplicidade e poder:

  1. Shebang Line: #!/usr/bin/env node permite executar o arquivo diretamente
  2. Bin Configuration: O package.json define os comandos requrl e jscurl no campo bin
  3. AsyncFunction: Permite executar código JavaScript assíncrono dinamicamente, incluindo await
  4. Fetch API: Aproveita a API fetch nativa do Node.js 18+, eliminando dependências externas
  5. Detecção de Tipo: Analisa o header Content-Type para decidir entre JSON.parse() ou text()
  6. 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 fetch API

📚 API Reference

req.get(url, options?)

Faz uma requisição GET.

Parâmetros:

  • url (string): URL da requisição
  • options (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ção
  • body (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:

  1. Fazer fork do projeto
  2. Criar uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m '✨ feat: Adiciona AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. 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 fetch nativa
  • 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!