r3q 0.2.1
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/CHANGELOG.md +28 -0
- package/README.md +320 -0
- package/logo.png +0 -0
- package/package.json +28 -0
- package/reports/02-01-2026_23-10.md +181 -0
- package/requrl.js +135 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
|
|
4
|
+
|
|
5
|
+
O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
|
|
6
|
+
e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).
|
|
7
|
+
|
|
8
|
+
## [0.2.0] - 2024-XX-XX
|
|
9
|
+
|
|
10
|
+
### Adicionado
|
|
11
|
+
- ✨ README.md completo com documentação detalhada
|
|
12
|
+
- 📝 CHANGELOG.md para rastreamento de versões
|
|
13
|
+
- 🔧 .gitignore com configurações padrão
|
|
14
|
+
|
|
15
|
+
### Documentação
|
|
16
|
+
- 📚 Seção "Como Funciona" explicando a arquitetura interna
|
|
17
|
+
- 🧪 Seção "Como Testar" com exemplos práticos
|
|
18
|
+
- 📖 API Reference completa para todos os métodos HTTP
|
|
19
|
+
- 💻 Exemplos de uso para todos os métodos (GET, POST, PUT, DELETE, PATCH)
|
|
20
|
+
|
|
21
|
+
## [0.1.0] - Versão Inicial
|
|
22
|
+
|
|
23
|
+
### Adicionado
|
|
24
|
+
- ✨ Ferramenta CLI JS-cURL (requrl)
|
|
25
|
+
- 🚀 Suporte para métodos HTTP: GET, POST, PUT, DELETE, PATCH
|
|
26
|
+
- 🎨 Saída colorida e formatada no terminal
|
|
27
|
+
- 🔧 Detecção automática de tipo de conteúdo (JSON/texto)
|
|
28
|
+
- 📦 Zero dependências (usa apenas APIs nativas do Node.js)
|
package/README.md
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://i.imgur.com/kGxA3FO.png" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
> **Uma ferramenta CLI poderosa para fazer requisições HTTP usando sintaxe JavaScript pura!**
|
|
6
|
+
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
[](https://nodejs.org/)
|
|
9
|
+
|
|
10
|
+
## 📖 Sobre o Projeto
|
|
11
|
+
|
|
12
|
+
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!
|
|
13
|
+
|
|
14
|
+
### ✨ Por que usar requrl?
|
|
15
|
+
|
|
16
|
+
- 🎯 **Sintaxe JavaScript familiar** - Use `await`, objetos, arrays, tudo que você já conhece
|
|
17
|
+
- 🚀 **Rápido e direto** - Execute requisições complexas em uma única linha
|
|
18
|
+
- 🎨 **Saída colorida e formatada** - Resultados bonitos e legíveis no terminal
|
|
19
|
+
- 🔧 **Flexível** - Suporta todos os métodos HTTP (GET, POST, PUT, DELETE, PATCH)
|
|
20
|
+
- 📦 **Zero dependências** - Usa apenas APIs nativas do Node.js
|
|
21
|
+
|
|
22
|
+
## 🚀 Instalação
|
|
23
|
+
|
|
24
|
+
### Instalação Local para Desenvolvimento (Recomendado para testar)
|
|
25
|
+
|
|
26
|
+
Se você clonou ou baixou este repositório, pode instalar localmente:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Usando npm
|
|
30
|
+
npm link
|
|
31
|
+
|
|
32
|
+
# Ou usando bun
|
|
33
|
+
bun link
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Isso criará os comandos `requrl` e `jscurl` globalmente apontando para este diretório.
|
|
37
|
+
|
|
38
|
+
### Instalação Global (Quando publicado no npm)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install -g @purecore/requrl
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Ou usando `bun`:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
bun install -g @purecore/requrl
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Uso Direto (Sem instalação)
|
|
51
|
+
|
|
52
|
+
Você também pode usar diretamente com Node.js:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
node requrl.js "await req.get('https://api.github.com/users/octocat')"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 💻 Como Usar
|
|
59
|
+
|
|
60
|
+
### Uso Básico
|
|
61
|
+
|
|
62
|
+
Após a instalação, você pode usar o comando `jscurl` ou `requrl`:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# GET simples
|
|
66
|
+
jscurl "await req.get('https://api.github.com/users/octocat')"
|
|
67
|
+
|
|
68
|
+
# POST com body
|
|
69
|
+
jscurl "await req.post('https://api.example.com/users', { name: 'João', age: 30 })"
|
|
70
|
+
|
|
71
|
+
# Com headers customizados
|
|
72
|
+
jscurl "await req.get('https://api.example.com/data', { headers: { 'Authorization': 'Bearer token123' } })"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Exemplos Completos
|
|
76
|
+
|
|
77
|
+
#### 1. GET Request Simples
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
jscurl "await req.get('https://jsonplaceholder.typicode.com/posts/1')"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
#### 2. POST Request com JSON
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
jscurl "await req.post('https://jsonplaceholder.typicode.com/posts', { title: 'Meu Post', body: 'Conteúdo do post', userId: 1 })"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### 3. PUT Request
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
jscurl "await req.put('https://jsonplaceholder.typicode.com/posts/1', { id: 1, title: 'Título Atualizado', body: 'Novo conteúdo', userId: 1 })"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### 4. DELETE Request
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
jscurl "await req.delete('https://jsonplaceholder.typicode.com/posts/1')"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### 5. PATCH Request
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
jscurl "await req.patch('https://jsonplaceholder.typicode.com/posts/1', { title: 'Apenas título atualizado' })"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### 6. Com Headers Customizados
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
jscurl "await req.get('https://api.github.com/user', { headers: { 'Authorization': 'token ghp_xxxxxxxxxxxx', 'Accept': 'application/vnd.github.v3+json' } })"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### 7. Com Opções Adicionais do Fetch
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
jscurl "await req.get('https://api.example.com/data', { headers: { 'X-Custom-Header': 'valor' }, redirect: 'follow' })"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 🏗️ Como Funciona
|
|
120
|
+
|
|
121
|
+
O requrl funciona de forma inteligente e elegante:
|
|
122
|
+
|
|
123
|
+
1. **Parser de Código JavaScript**: O comando recebe uma string contendo código JavaScript válido
|
|
124
|
+
2. **AsyncFunction**: Usa `AsyncFunction` do JavaScript para executar código assíncrono dinamicamente
|
|
125
|
+
3. **Objeto `req`**: Expõe métodos HTTP simplificados (`get`, `post`, `put`, `delete`, `patch`)
|
|
126
|
+
4. **Fetch API Nativa**: Utiliza a API `fetch` nativa do Node.js (disponível a partir do Node.js 18+)
|
|
127
|
+
5. **Formatação Inteligente**: Detecta automaticamente o tipo de conteúdo e formata a resposta (JSON ou texto)
|
|
128
|
+
6. **Saída Colorida**: Usa códigos ANSI para colorir e formatar a saída no terminal
|
|
129
|
+
|
|
130
|
+
### Arquitetura Interna
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
┌─────────────────┐
|
|
134
|
+
│ Terminal CLI │
|
|
135
|
+
│ (jscurl cmd) │
|
|
136
|
+
└────────┬────────┘
|
|
137
|
+
│
|
|
138
|
+
▼
|
|
139
|
+
┌─────────────────┐
|
|
140
|
+
│ Code Parser │
|
|
141
|
+
│ (AsyncFunction) │
|
|
142
|
+
└────────┬────────┘
|
|
143
|
+
│
|
|
144
|
+
▼
|
|
145
|
+
┌─────────────────┐
|
|
146
|
+
│ req Object │
|
|
147
|
+
│ (HTTP Methods) │
|
|
148
|
+
└────────┬────────┘
|
|
149
|
+
│
|
|
150
|
+
▼
|
|
151
|
+
┌─────────────────┐
|
|
152
|
+
│ Fetch API │
|
|
153
|
+
│ (Native Node) │
|
|
154
|
+
└────────┬────────┘
|
|
155
|
+
│
|
|
156
|
+
▼
|
|
157
|
+
┌─────────────────┐
|
|
158
|
+
│ Formatter │
|
|
159
|
+
│ (Colors/JSON) │
|
|
160
|
+
└─────────────────┘
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## 🧪 Como Testar
|
|
164
|
+
|
|
165
|
+
### Testes Manuais
|
|
166
|
+
|
|
167
|
+
Você pode testar a ferramenta com APIs públicas:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Teste com JSONPlaceholder
|
|
171
|
+
jscurl "await req.get('https://jsonplaceholder.typicode.com/posts/1')"
|
|
172
|
+
|
|
173
|
+
# Teste com GitHub API
|
|
174
|
+
jscurl "await req.get('https://api.github.com/users/octocat')"
|
|
175
|
+
|
|
176
|
+
# Teste POST
|
|
177
|
+
jscurl "await req.post('https://jsonplaceholder.typicode.com/posts', { title: 'Test', body: 'Test body', userId: 1 })"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Estrutura de Resposta
|
|
181
|
+
|
|
182
|
+
A ferramenta retorna um objeto padronizado:
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
{
|
|
186
|
+
status: 200,
|
|
187
|
+
statusText: 'OK',
|
|
188
|
+
headers: { /* todos os headers da resposta */ },
|
|
189
|
+
data: { /* corpo da resposta (JSON ou texto) */ }
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Tratamento de Erros
|
|
194
|
+
|
|
195
|
+
Em caso de erro, a resposta incluirá:
|
|
196
|
+
|
|
197
|
+
```javascript
|
|
198
|
+
{
|
|
199
|
+
error: "Mensagem de erro descritiva"
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 🔧 Desenvolvimento
|
|
204
|
+
|
|
205
|
+
### Pré-requisitos
|
|
206
|
+
|
|
207
|
+
- Node.js 18+ (para suporte nativo ao `fetch`)
|
|
208
|
+
- npm ou bun
|
|
209
|
+
|
|
210
|
+
### Estrutura do Projeto
|
|
211
|
+
|
|
212
|
+
```text
|
|
213
|
+
jscurl/
|
|
214
|
+
├── requrl.js # Código principal
|
|
215
|
+
├── package.json # Configurações do pacote
|
|
216
|
+
└── README.md # Este arquivo
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Como Foi Feito
|
|
220
|
+
|
|
221
|
+
O requrl foi desenvolvido com foco em simplicidade e poder:
|
|
222
|
+
|
|
223
|
+
1. **Shebang Line**: `#!/usr/bin/env node` permite executar o arquivo diretamente
|
|
224
|
+
2. **Bin Configuration**: O `package.json` define os comandos `requrl` e `jscurl` no campo `bin`
|
|
225
|
+
3. **AsyncFunction**: Permite executar código JavaScript assíncrono dinamicamente, incluindo `await`
|
|
226
|
+
4. **Fetch API**: Aproveita a API `fetch` nativa do Node.js 18+, eliminando dependências externas
|
|
227
|
+
5. **Detecção de Tipo**: Analisa o header `Content-Type` para decidir entre `JSON.parse()` ou `text()`
|
|
228
|
+
6. **Cores ANSI**: Implementa um sistema simples de cores para melhorar a legibilidade
|
|
229
|
+
|
|
230
|
+
### Características Técnicas
|
|
231
|
+
|
|
232
|
+
- ✅ **Zero Dependencies**: Usa apenas APIs nativas do Node.js
|
|
233
|
+
- ✅ **ES Modules**: Suporta `import/export` (tipo: "module")
|
|
234
|
+
- ✅ **Type Detection**: Detecta automaticamente JSON vs texto
|
|
235
|
+
- ✅ **Error Handling**: Tratamento robusto de erros com mensagens claras
|
|
236
|
+
- ✅ **Flexible Options**: Suporta todas as opções do `fetch` API
|
|
237
|
+
|
|
238
|
+
## 📚 API Reference
|
|
239
|
+
|
|
240
|
+
### `req.get(url, options?)`
|
|
241
|
+
|
|
242
|
+
Faz uma requisição GET.
|
|
243
|
+
|
|
244
|
+
**Parâmetros:**
|
|
245
|
+
|
|
246
|
+
- `url` (string): URL da requisição
|
|
247
|
+
- `options` (object, opcional): Opções adicionais (headers, etc.)
|
|
248
|
+
|
|
249
|
+
**Exemplo:**
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
jscurl "await req.get('https://api.example.com/data', { headers: { 'Authorization': 'Bearer token' } })"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### `req.post(url, body?, options?)`
|
|
256
|
+
|
|
257
|
+
Faz uma requisição POST.
|
|
258
|
+
|
|
259
|
+
**Parâmetros:**
|
|
260
|
+
|
|
261
|
+
- `url` (string): URL da requisição
|
|
262
|
+
- `body` (any, opcional): Corpo da requisição (será convertido para JSON se for objeto)
|
|
263
|
+
- `options` (object, opcional): Opções adicionais
|
|
264
|
+
|
|
265
|
+
**Exemplo:**
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
jscurl "await req.post('https://api.example.com/users', { name: 'João' })"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### `req.put(url, body?, options?)`
|
|
272
|
+
|
|
273
|
+
Faz uma requisição PUT.
|
|
274
|
+
|
|
275
|
+
### `req.delete(url, options?)`
|
|
276
|
+
|
|
277
|
+
Faz uma requisição DELETE.
|
|
278
|
+
|
|
279
|
+
### `req.patch(url, body?, options?)`
|
|
280
|
+
|
|
281
|
+
Faz uma requisição PATCH.
|
|
282
|
+
|
|
283
|
+
## 🤝 Contribuindo
|
|
284
|
+
|
|
285
|
+
Contribuições são bem-vindas! Sinta-se à vontade para:
|
|
286
|
+
|
|
287
|
+
1. Fazer fork do projeto
|
|
288
|
+
2. Criar uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
|
|
289
|
+
3. Commit suas mudanças (`git commit -m '✨ feat: Adiciona AmazingFeature'`)
|
|
290
|
+
4. Push para a branch (`git push origin feature/AmazingFeature`)
|
|
291
|
+
5. Abrir um Pull Request
|
|
292
|
+
|
|
293
|
+
## 📝 Changelog
|
|
294
|
+
|
|
295
|
+
Veja todas as mudanças no [CHANGELOG.md](./CHANGELOG.md).
|
|
296
|
+
|
|
297
|
+
## 📄 Licença
|
|
298
|
+
|
|
299
|
+
Este projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.
|
|
300
|
+
|
|
301
|
+
## 👤 Autor
|
|
302
|
+
|
|
303
|
+
suissAI
|
|
304
|
+
|
|
305
|
+
## 🙏 Agradecimentos
|
|
306
|
+
|
|
307
|
+
- Node.js pela API `fetch` nativa
|
|
308
|
+
- Comunidade JavaScript por toda a inspiração
|
|
309
|
+
- Todos os contribuidores que ajudam a melhorar este projeto
|
|
310
|
+
|
|
311
|
+
## 🔗 Fontes de Informação
|
|
312
|
+
|
|
313
|
+
- [Node.js Fetch API Documentation](https://nodejs.org/api/globals.html#fetch)
|
|
314
|
+
- [MDN Web Docs - Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
|
|
315
|
+
- [npm Package.json Bin Field](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#bin)
|
|
316
|
+
- [ANSI Color Codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
⭐ **Gostou do projeto? Dê uma estrela!** ⭐
|
package/logo.png
ADDED
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "r3q",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "cURL easy to use",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "requrl.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"requrl": "requrl.js",
|
|
9
|
+
"jscurl": "requrl.js",
|
|
10
|
+
"r3q": "requrl.js"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
14
|
+
"install-local": "npm link"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"curl",
|
|
18
|
+
"http",
|
|
19
|
+
"https",
|
|
20
|
+
"request",
|
|
21
|
+
"fetch",
|
|
22
|
+
"api",
|
|
23
|
+
"javascript",
|
|
24
|
+
"cli"
|
|
25
|
+
],
|
|
26
|
+
"author": "suissAI",
|
|
27
|
+
"license": "MIT"
|
|
28
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Relatório de Implementação - README.md e Documentação
|
|
2
|
+
|
|
3
|
+
**Data:** 02/01/2026 23:10
|
|
4
|
+
**Projeto:** @purecore/requrl (JS-cURL)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 📋 O que foi feito
|
|
9
|
+
|
|
10
|
+
### 1. Criação do README.md Completo
|
|
11
|
+
|
|
12
|
+
Foi criado um README.md abrangente e profissional com as seguintes seções:
|
|
13
|
+
|
|
14
|
+
- **Cabeçalho com badges**: Licença MIT e versão do Node.js
|
|
15
|
+
- **Sobre o Projeto**: Descrição clara do propósito e benefícios
|
|
16
|
+
- **Instalação**: Instruções para instalação global e local
|
|
17
|
+
- **Como Usar**: Exemplos práticos para todos os métodos HTTP
|
|
18
|
+
- **Como Funciona**: Explicação detalhada da arquitetura interna
|
|
19
|
+
- **Como Testar**: Guia de testes manuais e estrutura de resposta
|
|
20
|
+
- **Desenvolvimento**: Informações técnicas sobre o projeto
|
|
21
|
+
- **API Reference**: Documentação completa de todos os métodos
|
|
22
|
+
- **Contribuindo**: Guia para contribuidores
|
|
23
|
+
- **Changelog**: Link para o arquivo de changelog
|
|
24
|
+
- **Fontes de Informação**: Links para documentações utilizadas
|
|
25
|
+
|
|
26
|
+
### 2. Criação do .gitignore
|
|
27
|
+
|
|
28
|
+
Arquivo `.gitignore` criado com as seguintes exclusões:
|
|
29
|
+
- `node_modules/`
|
|
30
|
+
- `dist/`
|
|
31
|
+
- `*.log`
|
|
32
|
+
- `.DS_Store`
|
|
33
|
+
- `.env` e `.env.local`
|
|
34
|
+
|
|
35
|
+
### 3. Criação do CHANGELOG.md
|
|
36
|
+
|
|
37
|
+
Arquivo de changelog inicial criado seguindo o padrão [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/), incluindo:
|
|
38
|
+
- Versão atual (0.2.0) com as mudanças de documentação
|
|
39
|
+
- Versão inicial (0.1.0) com as funcionalidades base
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🎯 Por que foi feito
|
|
44
|
+
|
|
45
|
+
### Objetivo Principal
|
|
46
|
+
|
|
47
|
+
O projeto JS-cURL é uma ferramenta CLI poderosa, mas estava sem documentação adequada. A criação do README.md foi necessária para:
|
|
48
|
+
|
|
49
|
+
1. **Facilitar a adoção**: Desenvolvedores precisam entender rapidamente o que a ferramenta faz e como usá-la
|
|
50
|
+
2. **Melhorar a experiência do usuário**: Exemplos práticos ajudam os usuários a começar rapidamente
|
|
51
|
+
3. **Documentar a arquitetura**: Explicar "Como Funciona" ajuda desenvolvedores a entenderem o código
|
|
52
|
+
4. **Padronizar o projeto**: Seguir boas práticas de documentação de projetos open source
|
|
53
|
+
5. **Facilitar contribuições**: Um README completo atrai e ajuda novos contribuidores
|
|
54
|
+
|
|
55
|
+
### Benefícios Específicos
|
|
56
|
+
|
|
57
|
+
- **Profissionalismo**: Um README bem estruturado transmite qualidade e cuidado
|
|
58
|
+
- **Redução de suporte**: Documentação clara reduz perguntas e issues
|
|
59
|
+
- **Onboarding rápido**: Novos usuários podem começar em minutos
|
|
60
|
+
- **Manutenibilidade**: Documentação técnica ajuda na manutenção futura
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 🛠️ Como foi feito
|
|
65
|
+
|
|
66
|
+
### Estrutura do README
|
|
67
|
+
|
|
68
|
+
O README foi estruturado seguindo as melhores práticas de documentação de projetos open source:
|
|
69
|
+
|
|
70
|
+
1. **Badges no topo**: Informações visuais rápidas (licença, versão)
|
|
71
|
+
2. **Descrição clara**: Explicação do problema que resolve e benefícios
|
|
72
|
+
3. **Instalação simples**: Comandos copy-paste prontos
|
|
73
|
+
4. **Exemplos práticos**: Casos de uso reais para cada método HTTP
|
|
74
|
+
5. **Documentação técnica**: Seções "Como Funciona" e "Desenvolvimento"
|
|
75
|
+
6. **API Reference**: Documentação completa de todos os métodos
|
|
76
|
+
7. **Links úteis**: Changelog, contribuição, fontes
|
|
77
|
+
|
|
78
|
+
### Técnicas Utilizadas
|
|
79
|
+
|
|
80
|
+
#### 1. Análise do Código Fonte
|
|
81
|
+
- Leitura completa do `requrl.js` para entender a funcionalidade
|
|
82
|
+
- Análise do `package.json` para entender configurações e binários
|
|
83
|
+
- Identificação de todos os métodos HTTP suportados
|
|
84
|
+
|
|
85
|
+
#### 2. Estruturação de Conteúdo
|
|
86
|
+
- Uso de emojis para melhorar a legibilidade visual
|
|
87
|
+
- Hierarquia clara de informações (do básico ao avançado)
|
|
88
|
+
- Exemplos progressivos (do simples ao complexo)
|
|
89
|
+
|
|
90
|
+
#### 3. Documentação Técnica
|
|
91
|
+
- Diagrama ASCII da arquitetura interna
|
|
92
|
+
- Explicação do fluxo de execução
|
|
93
|
+
- Detalhamento das características técnicas
|
|
94
|
+
|
|
95
|
+
#### 4. Formatação Markdown
|
|
96
|
+
- Uso de code blocks com syntax highlighting
|
|
97
|
+
- Tabelas para organização de informações
|
|
98
|
+
- Links internos e externos
|
|
99
|
+
|
|
100
|
+
### Padrões Seguidos
|
|
101
|
+
|
|
102
|
+
- **Conventional Commits**: Preparado para commits com emojis
|
|
103
|
+
- **Semantic Versioning**: Referência no CHANGELOG
|
|
104
|
+
- **Keep a Changelog**: Formato padrão para changelog
|
|
105
|
+
- **README Best Practices**: Estrutura recomendada pela comunidade
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 📊 Resultados
|
|
110
|
+
|
|
111
|
+
### Arquivos Criados
|
|
112
|
+
|
|
113
|
+
1. ✅ `README.md` - 300+ linhas de documentação completa
|
|
114
|
+
2. ✅ `.gitignore` - Configuração padrão para Node.js
|
|
115
|
+
3. ✅ `CHANGELOG.md` - Histórico de versões estruturado
|
|
116
|
+
|
|
117
|
+
### Métricas
|
|
118
|
+
|
|
119
|
+
- **Seções no README**: 12 seções principais
|
|
120
|
+
- **Exemplos de código**: 7 exemplos práticos
|
|
121
|
+
- **Métodos documentados**: 5 métodos HTTP (GET, POST, PUT, DELETE, PATCH)
|
|
122
|
+
- **Links de referência**: 4 fontes de informação
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 🔍 Análise Técnica
|
|
127
|
+
|
|
128
|
+
### Pontos Fortes do README
|
|
129
|
+
|
|
130
|
+
1. **Completude**: Cobre todos os aspectos do projeto
|
|
131
|
+
2. **Clareza**: Linguagem simples e direta
|
|
132
|
+
3. **Praticidade**: Exemplos copy-paste prontos
|
|
133
|
+
4. **Profissionalismo**: Estrutura e formatação profissional
|
|
134
|
+
5. **Manutenibilidade**: Fácil de atualizar e expandir
|
|
135
|
+
|
|
136
|
+
### Melhorias Futuras Possíveis
|
|
137
|
+
|
|
138
|
+
1. Adicionar screenshots/GIFs mostrando o uso
|
|
139
|
+
2. Criar seção de FAQ (Perguntas Frequentes)
|
|
140
|
+
3. Adicionar exemplos de integração com outras ferramentas
|
|
141
|
+
4. Criar guia de troubleshooting
|
|
142
|
+
5. Adicionar badges de build status, downloads, etc.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 📚 Fontes de Informação Utilizadas
|
|
147
|
+
|
|
148
|
+
1. **Node.js Documentation**
|
|
149
|
+
- [Fetch API](https://nodejs.org/api/globals.html#fetch)
|
|
150
|
+
- [Package.json Bin Field](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#bin)
|
|
151
|
+
|
|
152
|
+
2. **MDN Web Docs**
|
|
153
|
+
- [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
|
|
154
|
+
|
|
155
|
+
3. **Padrões da Comunidade**
|
|
156
|
+
- [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/)
|
|
157
|
+
- [Semantic Versioning](https://semver.org/lang/pt-BR/)
|
|
158
|
+
|
|
159
|
+
4. **Documentação do Projeto**
|
|
160
|
+
- Análise do código fonte `requrl.js`
|
|
161
|
+
- Configurações do `package.json`
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## ✅ Conclusão
|
|
166
|
+
|
|
167
|
+
O README.md foi criado com sucesso, seguindo as melhores práticas de documentação de projetos open source. O documento é completo, claro e prático, facilitando a adoção da ferramenta por novos usuários e contribuidores.
|
|
168
|
+
|
|
169
|
+
O projeto agora possui:
|
|
170
|
+
- ✅ Documentação profissional e completa
|
|
171
|
+
- ✅ Guia de instalação e uso
|
|
172
|
+
- ✅ Exemplos práticos para todos os casos de uso
|
|
173
|
+
- ✅ Documentação técnica da arquitetura
|
|
174
|
+
- ✅ Changelog estruturado
|
|
175
|
+
- ✅ Configuração adequada do .gitignore
|
|
176
|
+
|
|
177
|
+
**Status:** ✅ Concluído com sucesso
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
*Relatório gerado automaticamente em 02/01/2026 23:10*
|
package/requrl.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* requrl: Uma ferramenta CLI para fazer requisições HTTP usando sintaxe JavaScript.
|
|
5
|
+
* Uso: requrl "await req.get('https://api.github.com/users/octocat')"
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { inspect } from "util";
|
|
9
|
+
|
|
10
|
+
// Configuração de cores para o terminal
|
|
11
|
+
const colors = {
|
|
12
|
+
reset: "\x1b[0m",
|
|
13
|
+
bright: "\x1b[1m",
|
|
14
|
+
green: "\x1b[32m",
|
|
15
|
+
yellow: "\x1b[33m",
|
|
16
|
+
blue: "\x1b[34m",
|
|
17
|
+
magenta: "\x1b[35m",
|
|
18
|
+
cyan: "\x1b[36m",
|
|
19
|
+
red: "\x1b[31m",
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Formata a saída para ser legível e colorida
|
|
24
|
+
*/
|
|
25
|
+
function logResult(data) {
|
|
26
|
+
console.log(`${colors.cyan}--- Resultado ---${colors.reset}`);
|
|
27
|
+
console.log(
|
|
28
|
+
inspect(data, {
|
|
29
|
+
showHidden: false,
|
|
30
|
+
depth: null,
|
|
31
|
+
colors: true,
|
|
32
|
+
compact: false,
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Objeto de requisição simplificado
|
|
39
|
+
*/
|
|
40
|
+
const req = {
|
|
41
|
+
async _handle(method, url, options = {}) {
|
|
42
|
+
try {
|
|
43
|
+
const { body, headers, ...rest } = options;
|
|
44
|
+
|
|
45
|
+
const config = {
|
|
46
|
+
method,
|
|
47
|
+
headers: {
|
|
48
|
+
"Content-Type": "application/json",
|
|
49
|
+
"User-Agent": "requrl-Tool",
|
|
50
|
+
...headers,
|
|
51
|
+
},
|
|
52
|
+
...rest,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
if (body) {
|
|
56
|
+
config.body = typeof body === "object" ? JSON.stringify(body) : body;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
console.log(
|
|
60
|
+
`${colors.yellow}Enviando ${method} para ${url}...${colors.reset}`
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
const response = await fetch(url, config);
|
|
64
|
+
const contentType = response.headers.get("content-type");
|
|
65
|
+
|
|
66
|
+
let data;
|
|
67
|
+
if (contentType && contentType.includes("application/json")) {
|
|
68
|
+
data = await response.json();
|
|
69
|
+
} else {
|
|
70
|
+
data = await response.text();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
status: response.status,
|
|
75
|
+
statusText: response.statusText,
|
|
76
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
77
|
+
data,
|
|
78
|
+
};
|
|
79
|
+
} catch (error) {
|
|
80
|
+
return { error: error.message };
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
get(url, opts) {
|
|
85
|
+
return this._handle("GET", url, opts);
|
|
86
|
+
},
|
|
87
|
+
post(url, body, opts) {
|
|
88
|
+
return this._handle("POST", url, { body, ...opts });
|
|
89
|
+
},
|
|
90
|
+
put(url, body, opts) {
|
|
91
|
+
return this._handle("PUT", url, { body, ...opts });
|
|
92
|
+
},
|
|
93
|
+
delete(url, opts) {
|
|
94
|
+
return this._handle("DELETE", url, opts);
|
|
95
|
+
},
|
|
96
|
+
patch(url, body, opts) {
|
|
97
|
+
return this._handle("PATCH", url, { body, ...opts });
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
async function run() {
|
|
102
|
+
const code = process.argv[2];
|
|
103
|
+
|
|
104
|
+
if (!code) {
|
|
105
|
+
console.log(`${colors.bright}requrl CLI${colors.reset}`);
|
|
106
|
+
console.log(`Uso: requrl "await req.post('url', { dado: 1 })"`);
|
|
107
|
+
console.log(` jscurl "await req.post('url', { dado: 1 })"`);
|
|
108
|
+
process.exit(0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
try {
|
|
112
|
+
// Criamos uma função assíncrona para permitir o uso de 'await' no código do usuário
|
|
113
|
+
const AsyncFunction = Object.getPrototypeOf(
|
|
114
|
+
async function () {}
|
|
115
|
+
).constructor;
|
|
116
|
+
const execute = new AsyncFunction(
|
|
117
|
+
"req",
|
|
118
|
+
`
|
|
119
|
+
try {
|
|
120
|
+
const result = ${code.startsWith("await") ? code : "await " + code};
|
|
121
|
+
return result;
|
|
122
|
+
} catch (e) {
|
|
123
|
+
return { error: e.message };
|
|
124
|
+
}
|
|
125
|
+
`
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
const result = await execute(req);
|
|
129
|
+
logResult(result);
|
|
130
|
+
} catch (err) {
|
|
131
|
+
console.error(`${colors.red}Erro de Sintaxe:${colors.reset}`, err.message);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
run();
|