da-proj 1.0.0
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/README.md +410 -0
- package/package.json +51 -0
- package/src/README.md +190 -0
- package/src/commands/init.ts +236 -0
- package/src/commands/pull.ts +119 -0
- package/src/commands/push.ts +68 -0
- package/src/commands/secrets.ts +251 -0
- package/src/commands/setup-github-sync.ts +194 -0
- package/src/commands/sync-status.ts +131 -0
- package/src/commands/sync.ts +159 -0
- package/src/generators/mdx.ts +46 -0
- package/src/generators/readme.ts +45 -0
- package/src/generators/schema.ts +69 -0
- package/src/generators/workflow.ts +69 -0
- package/src/index.ts +98 -0
- package/src/types/index.ts +47 -0
- package/src/utils/config.ts +52 -0
- package/src/utils/github-config.ts +67 -0
- package/src/utils/github.ts +297 -0
- package/src/utils/logger.ts +20 -0
package/README.md
ADDED
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
# da-proj
|
|
2
|
+
|
|
3
|
+
> 🚀 **Automatiza tu portfolio de desarrollador** - CLI tool que simplifica la gestión de metadata de proyectos y sincronización con tu portfolio web.
|
|
4
|
+
|
|
5
|
+
## ¿Por qué da-proj?
|
|
6
|
+
|
|
7
|
+
Como desarrollador, mantener tu portfolio actualizado puede ser tedioso. Cada vez que terminas un proyecto, necesitas:
|
|
8
|
+
|
|
9
|
+
- Crear metadata estructurada
|
|
10
|
+
- Configurar GitHub Actions
|
|
11
|
+
- Sincronizar con tu portfolio web
|
|
12
|
+
- Gestionar API keys en múltiples dispositivos
|
|
13
|
+
|
|
14
|
+
**da-proj hace todo esto por ti** con comandos simples e interactivos.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## ✨ Características
|
|
19
|
+
|
|
20
|
+
### 📝 Generación Automática de Metadata
|
|
21
|
+
|
|
22
|
+
- Crea archivos `.project-metadata.mdx` con formato estructurado
|
|
23
|
+
- Valida con JSON Schema automáticamente
|
|
24
|
+
- Incluye toda la información de tu proyecto (título, tecnologías, imágenes, etc.)
|
|
25
|
+
|
|
26
|
+
### 🔄 Sincronización con Portfolio
|
|
27
|
+
|
|
28
|
+
- GitHub Actions workflow pre-configurado
|
|
29
|
+
- Sincroniza automáticamente cuando haces push
|
|
30
|
+
- Notifica a tu API de portfolio con los cambios
|
|
31
|
+
|
|
32
|
+
### 🔐 Gestión de API Keys
|
|
33
|
+
|
|
34
|
+
- Configura GitHub Secrets fácilmente desde la terminal
|
|
35
|
+
- Múltiples perfiles para diferentes portfolios
|
|
36
|
+
- Sincronización de configuración entre dispositivos vía GitHub
|
|
37
|
+
|
|
38
|
+
### 📁 Organización de Imágenes
|
|
39
|
+
|
|
40
|
+
- Carpeta `proj-images/` lista para usar
|
|
41
|
+
- README con guías de optimización
|
|
42
|
+
- Estructura consistente en todos tus proyectos
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 🚀 Inicio Rápido
|
|
47
|
+
|
|
48
|
+
### Instalación
|
|
49
|
+
|
|
50
|
+
No necesitas instalar nada. Usa directamente con `npx` o `bunx`:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Con npm
|
|
54
|
+
npx da-proj --init
|
|
55
|
+
|
|
56
|
+
# Con bun (recomendado)
|
|
57
|
+
bunx da-proj --init
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
O instala globalmente:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install -g da-proj
|
|
64
|
+
# o
|
|
65
|
+
bun install -g da-proj
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Uso Básico
|
|
69
|
+
|
|
70
|
+
#### 1. Inicializar un Proyecto
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
cd tu-proyecto
|
|
74
|
+
bunx da-proj --init
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
El CLI te guiará con preguntas interactivas:
|
|
78
|
+
|
|
79
|
+
- 📌 Título del proyecto
|
|
80
|
+
- 🏷️ Categoría (Web Development, AI/ML, Mobile, etc.)
|
|
81
|
+
- ⭐ Tipo (featured o small)
|
|
82
|
+
- 📊 Estado (active, in-progress, archived)
|
|
83
|
+
- 💻 Tecnologías utilizadas
|
|
84
|
+
- 🔗 URLs de demo y repositorio
|
|
85
|
+
- 🖼️ Rutas de imágenes
|
|
86
|
+
|
|
87
|
+
#### 2. Configurar GitHub Secrets
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
bunx da-proj --secrets
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Esto te permite:
|
|
94
|
+
|
|
95
|
+
- Crear/seleccionar perfiles de portfolio
|
|
96
|
+
- Configurar `PORTFOLIO_API_URL` y `PORTFOLIO_API_KEY`
|
|
97
|
+
- Guardar perfiles para reutilizar en otros proyectos
|
|
98
|
+
|
|
99
|
+
#### 3. Sincronizar Configuración (Opcional)
|
|
100
|
+
|
|
101
|
+
Si trabajas en múltiples dispositivos:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Primera vez: Configurar GitHub sync
|
|
105
|
+
bunx da-proj --setup-github-sync
|
|
106
|
+
|
|
107
|
+
# Subir configuración
|
|
108
|
+
bunx da-proj --push
|
|
109
|
+
|
|
110
|
+
# En otro dispositivo: Descargar configuración
|
|
111
|
+
bunx da-proj --pull
|
|
112
|
+
|
|
113
|
+
# Ver estado de sincronización
|
|
114
|
+
bunx da-proj --sync-status
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 📂 Archivos Generados
|
|
120
|
+
|
|
121
|
+
Después de ejecutar `--init`, se crearán:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
tu-proyecto/
|
|
125
|
+
├── .project-metadata.mdx # ✨ Metadata del proyecto
|
|
126
|
+
├── .project-schema.json # 📋 Schema de validación
|
|
127
|
+
├── .github/
|
|
128
|
+
│ └── workflows/
|
|
129
|
+
│ └── sync-portfolio.yml # 🔄 GitHub Actions workflow
|
|
130
|
+
├── proj-images/ # 🖼️ Carpeta para imágenes
|
|
131
|
+
│ ├── README.md # 📖 Guía de imágenes
|
|
132
|
+
│ └── .gitkeep
|
|
133
|
+
└── README.md # 📄 README profesional (si no existe)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Ejemplo de `.project-metadata.mdx`
|
|
137
|
+
|
|
138
|
+
```mdx
|
|
139
|
+
---
|
|
140
|
+
title: "Mi App Increíble"
|
|
141
|
+
category: "Web Development"
|
|
142
|
+
type: "featured"
|
|
143
|
+
status: "active"
|
|
144
|
+
technologies:
|
|
145
|
+
- React
|
|
146
|
+
- TypeScript
|
|
147
|
+
- Node.js
|
|
148
|
+
- PostgreSQL
|
|
149
|
+
images:
|
|
150
|
+
cover: /proj-images/cover.png
|
|
151
|
+
gallery:
|
|
152
|
+
- /proj-images/screenshot1.png
|
|
153
|
+
- /proj-images/screenshot2.png
|
|
154
|
+
repository: https://github.com/usuario/mi-app
|
|
155
|
+
demo: https://mi-app.vercel.app
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
# Mi App Increíble
|
|
159
|
+
|
|
160
|
+
## Descripción
|
|
161
|
+
|
|
162
|
+
Una aplicación web moderna que resuelve [problema específico]...
|
|
163
|
+
|
|
164
|
+
## Características Principales
|
|
165
|
+
|
|
166
|
+
- ✅ Feature 1
|
|
167
|
+
- ✅ Feature 2
|
|
168
|
+
- ✅ Feature 3
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 🔧 Comandos Disponibles
|
|
174
|
+
|
|
175
|
+
### Comandos Principales
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# Inicializar metadata del proyecto
|
|
179
|
+
bunx da-proj --init
|
|
180
|
+
|
|
181
|
+
# Configurar GitHub secrets
|
|
182
|
+
bunx da-proj --secrets
|
|
183
|
+
|
|
184
|
+
# Sincronizar configuración (export/import manual)
|
|
185
|
+
bunx da-proj --sync
|
|
186
|
+
|
|
187
|
+
# Mostrar ayuda
|
|
188
|
+
bunx da-proj --help
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Comandos de GitHub Sync
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# Configurar sincronización vía GitHub
|
|
195
|
+
bunx da-proj --setup-github-sync
|
|
196
|
+
|
|
197
|
+
# Subir configuración local a GitHub
|
|
198
|
+
bunx da-proj --push
|
|
199
|
+
|
|
200
|
+
# Descargar configuración desde GitHub
|
|
201
|
+
bunx da-proj --pull
|
|
202
|
+
|
|
203
|
+
# Ver estado de sincronización
|
|
204
|
+
bunx da-proj --sync-status
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 🔐 Configuración de GitHub Secrets
|
|
210
|
+
|
|
211
|
+
### Opción 1: Usando el CLI (Recomendado)
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
bunx da-proj --secrets
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
El CLI te guiará para:
|
|
218
|
+
|
|
219
|
+
1. Verificar que GitHub CLI esté instalado
|
|
220
|
+
2. Crear o seleccionar un perfil
|
|
221
|
+
3. Configurar automáticamente los secrets en tu repo
|
|
222
|
+
|
|
223
|
+
### Opción 2: Manual
|
|
224
|
+
|
|
225
|
+
1. Ve a tu repositorio en GitHub
|
|
226
|
+
2. Settings → Secrets and variables → Actions
|
|
227
|
+
3. Agrega estos secrets:
|
|
228
|
+
- `PORTFOLIO_API_URL`: URL de tu API de portfolio
|
|
229
|
+
- `PORTFOLIO_API_KEY`: Tu API key
|
|
230
|
+
|
|
231
|
+
📖 **Guía detallada:** Ver [docs/SETUP-SECRETS.md](docs/SETUP-SECRETS.md)
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 🌐 Sincronización entre Dispositivos
|
|
236
|
+
|
|
237
|
+
### ¿Por qué sincronizar?
|
|
238
|
+
|
|
239
|
+
Si trabajas en múltiples computadoras (PC de escritorio, laptop, etc.), puedes sincronizar tus perfiles de portfolio usando GitHub.
|
|
240
|
+
|
|
241
|
+
### Configuración (Una sola vez)
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# En tu primera PC
|
|
245
|
+
bunx da-proj --setup-github-sync
|
|
246
|
+
# → Crea un repo privado "da-proj-secrets"
|
|
247
|
+
|
|
248
|
+
bunx da-proj --push
|
|
249
|
+
# → Sube tu configuración
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Uso en Otros Dispositivos
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# En tu laptop
|
|
256
|
+
bunx da-proj --setup-github-sync
|
|
257
|
+
# → Conecta al repo existente
|
|
258
|
+
|
|
259
|
+
bunx da-proj --pull
|
|
260
|
+
# → Descarga todos tus perfiles
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
📖 **Guía completa:** Ver [docs/GITHUB-SYNC.md](docs/GITHUB-SYNC.md)
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 🎯 Casos de Uso
|
|
268
|
+
|
|
269
|
+
### Freelancer con Múltiples Clientes
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
# Crear perfiles para cada cliente
|
|
273
|
+
bunx da-proj --secrets
|
|
274
|
+
# → Perfil "cliente-acme" con su portfolio
|
|
275
|
+
# → Perfil "cliente-tech" con su portfolio
|
|
276
|
+
# → Perfil "personal" con tu portfolio
|
|
277
|
+
|
|
278
|
+
# En cada proyecto, selecciona el perfil apropiado
|
|
279
|
+
cd proyecto-acme
|
|
280
|
+
bunx da-proj --secrets # Selecciona "cliente-acme"
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Desarrollador con Portfolio Personal
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# Una sola vez
|
|
287
|
+
bunx da-proj --secrets
|
|
288
|
+
# → Crea perfil "main"
|
|
289
|
+
|
|
290
|
+
# En cada nuevo proyecto
|
|
291
|
+
cd nuevo-proyecto
|
|
292
|
+
bunx da-proj --init # Genera metadata
|
|
293
|
+
bunx da-proj --secrets # Usa perfil "main"
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Equipo Compartiendo Configuración
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
# Líder del equipo
|
|
300
|
+
bunx da-proj --setup-github-sync
|
|
301
|
+
bunx da-proj --push
|
|
302
|
+
|
|
303
|
+
# Miembros del equipo
|
|
304
|
+
bunx da-proj --setup-github-sync # Conecta al repo compartido
|
|
305
|
+
bunx da-proj --pull # Descarga configuración
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 🛠️ Desarrollo
|
|
311
|
+
|
|
312
|
+
### Requisitos
|
|
313
|
+
|
|
314
|
+
- Bun runtime (recomendado) o Node.js 18+
|
|
315
|
+
- Git repository inicializado
|
|
316
|
+
- GitHub CLI (para comandos de secrets y sync)
|
|
317
|
+
|
|
318
|
+
### Setup Local
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# Clonar el repositorio
|
|
322
|
+
git clone https://github.com/tu-usuario/da-proj.git
|
|
323
|
+
cd da-proj
|
|
324
|
+
|
|
325
|
+
# Instalar dependencias
|
|
326
|
+
bun install
|
|
327
|
+
|
|
328
|
+
# Ejecutar en modo desarrollo
|
|
329
|
+
bun run dev --init
|
|
330
|
+
|
|
331
|
+
# Compilar
|
|
332
|
+
bun run build
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Estructura del Proyecto
|
|
336
|
+
|
|
337
|
+
```
|
|
338
|
+
da-proj/
|
|
339
|
+
├── src/
|
|
340
|
+
│ ├── commands/ # Comandos del CLI
|
|
341
|
+
│ │ ├── init.ts # Inicializar proyecto
|
|
342
|
+
│ │ ├── secrets.ts # Configurar GitHub secrets
|
|
343
|
+
│ │ ├── sync.ts # Sincronización manual
|
|
344
|
+
│ │ ├── setup-github-sync.ts
|
|
345
|
+
│ │ ├── push.ts
|
|
346
|
+
│ │ ├── pull.ts
|
|
347
|
+
│ │ └── sync-status.ts
|
|
348
|
+
│ ├── generators/ # Generadores de archivos
|
|
349
|
+
│ ├── utils/ # Utilidades
|
|
350
|
+
│ │ ├── github.ts # GitHub CLI/API
|
|
351
|
+
│ │ ├── github-config.ts
|
|
352
|
+
│ │ └── config.ts
|
|
353
|
+
│ ├── types/ # TypeScript types
|
|
354
|
+
│ └── index.ts # Entry point
|
|
355
|
+
├── docs/ # Documentación
|
|
356
|
+
└── package.json
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 📚 Documentación
|
|
362
|
+
|
|
363
|
+
- [Setup de Secrets](docs/SETUP-SECRETS.md) - Guía detallada de configuración
|
|
364
|
+
- [GitHub Sync](docs/GITHUB-SYNC.md) - Sincronización entre dispositivos
|
|
365
|
+
- [Workflow Explicado](docs/WORKFLOW-EXPLICADO.md) - Cómo funciona GitHub Actions
|
|
366
|
+
- [Arquitectura](src/README.md) - Estructura del código
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## 🤝 Contribuir
|
|
371
|
+
|
|
372
|
+
Las contribuciones son bienvenidas! Por favor:
|
|
373
|
+
|
|
374
|
+
1. Fork el proyecto
|
|
375
|
+
2. Crea una rama para tu feature (`git checkout -b feature/amazing-feature`)
|
|
376
|
+
3. Commit tus cambios (`git commit -m 'Add amazing feature'`)
|
|
377
|
+
4. Push a la rama (`git push origin feature/amazing-feature`)
|
|
378
|
+
5. Abre un Pull Request
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## 📝 Changelog
|
|
383
|
+
|
|
384
|
+
Ver [CHANGELOG.md](CHANGELOG.md) para historial de cambios.
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## 📄 Licencia
|
|
389
|
+
|
|
390
|
+
MIT © Dereck Angeles
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## 💬 Soporte
|
|
395
|
+
|
|
396
|
+
¿Tienes preguntas o problemas?
|
|
397
|
+
|
|
398
|
+
- 📧 Email: tu-email@ejemplo.com
|
|
399
|
+
- 🐛 Issues: [GitHub Issues](https://github.com/tu-usuario/da-proj/issues)
|
|
400
|
+
- 📖 Docs: [Documentación completa](docs/)
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
<div align="center">
|
|
405
|
+
|
|
406
|
+
**💼 Hecho con ❤️ para automatizar portfolios de desarrolladores**
|
|
407
|
+
|
|
408
|
+
⭐ Si te gusta este proyecto, dale una estrella en GitHub!
|
|
409
|
+
|
|
410
|
+
</div>
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "da-proj",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool to setup portfolio project metadata with automatic GitHub Actions sync",
|
|
5
|
+
"bin": {
|
|
6
|
+
"da-proj": "./src/index.ts"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"files": [
|
|
10
|
+
"src/**/*.ts",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"prepublishOnly": "bun run build",
|
|
15
|
+
"build": "bun build src/index.ts --compile --outfile create-project-meta",
|
|
16
|
+
"dev": "bun run src/index.ts",
|
|
17
|
+
"generate-key": "bun run scripts/generate-api-key.ts",
|
|
18
|
+
"generate-key:ps": "pwsh -File scripts/generate-api-key.ps1",
|
|
19
|
+
"generate-key:node": "node scripts/generate-api-key.js"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@inquirer/prompts": "^8.2.0",
|
|
23
|
+
"gray-matter": "^4.0.3"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"bun-types": "latest"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"portfolio",
|
|
30
|
+
"cli",
|
|
31
|
+
"metadata",
|
|
32
|
+
"github-actions",
|
|
33
|
+
"project-setup",
|
|
34
|
+
"mdx",
|
|
35
|
+
"automation",
|
|
36
|
+
"developer-tools"
|
|
37
|
+
],
|
|
38
|
+
"author": "Dereck Angeles - dereckangeles15071998@gmail.com",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/DereckAn/da-proj.git"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/DereckAn/da-proj#readme",
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/DereckAn/da-proj/issues"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=18.0.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
package/src/README.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Arquitectura del Proyecto
|
|
2
|
+
|
|
3
|
+
## Estructura de Carpetas
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
src/
|
|
7
|
+
├── commands/ # Comandos del CLI
|
|
8
|
+
│ ├── init.ts # Comando --init (inicializar proyecto)
|
|
9
|
+
│ └── secrets.ts # Comando --secrets (configurar GitHub secrets)
|
|
10
|
+
│
|
|
11
|
+
├── generators/ # Generadores de archivos
|
|
12
|
+
│ ├── mdx.ts # Genera .project-metadata.mdx
|
|
13
|
+
│ ├── readme.ts # Genera README.md
|
|
14
|
+
│ ├── schema.ts # Genera .project-schema.json
|
|
15
|
+
│ └── workflow.ts # Genera GitHub Actions workflow
|
|
16
|
+
│
|
|
17
|
+
├── utils/ # Utilidades compartidas
|
|
18
|
+
│ ├── config.ts # Manejo de configuración global
|
|
19
|
+
│ ├── github.ts # Funciones de GitHub CLI
|
|
20
|
+
│ └── logger.ts # Logger con colores
|
|
21
|
+
│
|
|
22
|
+
├── types/ # Definiciones de tipos TypeScript
|
|
23
|
+
│ └── index.ts # Todos los tipos e interfaces
|
|
24
|
+
│
|
|
25
|
+
└── index.ts # Punto de entrada principal
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Flujo de Ejecución
|
|
29
|
+
|
|
30
|
+
### Comando `--init`
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
index.ts
|
|
34
|
+
└─> initCommand() [commands/init.ts]
|
|
35
|
+
├─> Recopila información del usuario (prompts)
|
|
36
|
+
├─> Crea ProjectMetadata
|
|
37
|
+
├─> generateMDX() [generators/mdx.ts]
|
|
38
|
+
├─> generateWorkflow() [generators/workflow.ts]
|
|
39
|
+
├─> generateReadme() [generators/readme.ts]
|
|
40
|
+
├─> generateSchema() [generators/schema.ts]
|
|
41
|
+
└─> Escribe archivos al disco
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Comando `--secrets`
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
index.ts
|
|
48
|
+
└─> secretsCommand() [commands/secrets.ts]
|
|
49
|
+
├─> checkGitHubCLI() [utils/github.ts]
|
|
50
|
+
├─> getExistingSecrets() [utils/github.ts]
|
|
51
|
+
├─> readGlobalConfig() [utils/config.ts]
|
|
52
|
+
├─> Selecciona o crea perfil
|
|
53
|
+
├─> saveGlobalConfig() [utils/config.ts]
|
|
54
|
+
└─> setGitHubSecret() [utils/github.ts]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Módulos
|
|
58
|
+
|
|
59
|
+
### commands/
|
|
60
|
+
Contiene la lógica de cada comando del CLI. Cada comando es independiente y puede ser ejecutado por separado.
|
|
61
|
+
|
|
62
|
+
**Responsabilidades:**
|
|
63
|
+
- Interactuar con el usuario (prompts)
|
|
64
|
+
- Orquestar llamadas a utils y generators
|
|
65
|
+
- Manejar errores específicos del comando
|
|
66
|
+
|
|
67
|
+
### generators/
|
|
68
|
+
Funciones puras que generan contenido de archivos. No tienen efectos secundarios.
|
|
69
|
+
|
|
70
|
+
**Responsabilidades:**
|
|
71
|
+
- Generar strings con el contenido de archivos
|
|
72
|
+
- Formatear metadata en diferentes formatos (MDX, YAML, JSON)
|
|
73
|
+
|
|
74
|
+
### utils/
|
|
75
|
+
Funciones de utilidad compartidas entre comandos.
|
|
76
|
+
|
|
77
|
+
**Responsabilidades:**
|
|
78
|
+
- Interactuar con APIs externas (GitHub CLI)
|
|
79
|
+
- Leer/escribir configuración
|
|
80
|
+
- Logging y formateo de mensajes
|
|
81
|
+
|
|
82
|
+
### types/
|
|
83
|
+
Definiciones de tipos TypeScript compartidas en todo el proyecto.
|
|
84
|
+
|
|
85
|
+
**Responsabilidades:**
|
|
86
|
+
- Definir interfaces y tipos
|
|
87
|
+
- Mantener consistencia de tipos
|
|
88
|
+
|
|
89
|
+
## Agregar Nuevos Comandos
|
|
90
|
+
|
|
91
|
+
Para agregar un nuevo comando (ej: `--update`):
|
|
92
|
+
|
|
93
|
+
1. **Crear el comando:**
|
|
94
|
+
```typescript
|
|
95
|
+
// src/commands/update.ts
|
|
96
|
+
export async function updateCommand() {
|
|
97
|
+
// Tu lógica aquí
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
2. **Agregar al index.ts:**
|
|
102
|
+
```typescript
|
|
103
|
+
import { updateCommand } from "./commands/update.js";
|
|
104
|
+
|
|
105
|
+
// En parseArgs:
|
|
106
|
+
options: {
|
|
107
|
+
// ...
|
|
108
|
+
update: { type: "boolean", short: "u" },
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// En main():
|
|
112
|
+
if (args.values.update) {
|
|
113
|
+
await updateCommand();
|
|
114
|
+
process.exit(0);
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
3. **Actualizar help:**
|
|
119
|
+
```typescript
|
|
120
|
+
${colors.bright}OPTIONS:${colors.reset}
|
|
121
|
+
// ...
|
|
122
|
+
-u, --update Update existing metadata
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Agregar Nuevos Generadores
|
|
126
|
+
|
|
127
|
+
Para agregar un nuevo generador (ej: `CONTRIBUTING.md`):
|
|
128
|
+
|
|
129
|
+
1. **Crear el generador:**
|
|
130
|
+
```typescript
|
|
131
|
+
// src/generators/contributing.ts
|
|
132
|
+
export function generateContributing(): string {
|
|
133
|
+
return `# Contributing Guide...`;
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
2. **Usar en comando:**
|
|
138
|
+
```typescript
|
|
139
|
+
// src/commands/init.ts
|
|
140
|
+
import { generateContributing } from "../generators/contributing.js";
|
|
141
|
+
|
|
142
|
+
// En initCommand():
|
|
143
|
+
await writeFile("CONTRIBUTING.md", generateContributing());
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Principios de Diseño
|
|
147
|
+
|
|
148
|
+
### 1. Separación de Responsabilidades
|
|
149
|
+
Cada módulo tiene una responsabilidad clara y única.
|
|
150
|
+
|
|
151
|
+
### 2. Funciones Puras
|
|
152
|
+
Los generators son funciones puras sin efectos secundarios.
|
|
153
|
+
|
|
154
|
+
### 3. Composición
|
|
155
|
+
Los comandos componen funciones de utils y generators.
|
|
156
|
+
|
|
157
|
+
### 4. Tipos Fuertes
|
|
158
|
+
Todo está tipado con TypeScript para mayor seguridad.
|
|
159
|
+
|
|
160
|
+
### 5. Modularidad
|
|
161
|
+
Fácil agregar nuevos comandos, generators o utils sin modificar código existente.
|
|
162
|
+
|
|
163
|
+
## Testing (Futuro)
|
|
164
|
+
|
|
165
|
+
Estructura sugerida para tests:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
tests/
|
|
169
|
+
├── commands/
|
|
170
|
+
│ ├── init.test.ts
|
|
171
|
+
│ └── secrets.test.ts
|
|
172
|
+
├── generators/
|
|
173
|
+
│ ├── mdx.test.ts
|
|
174
|
+
│ └── workflow.test.ts
|
|
175
|
+
└── utils/
|
|
176
|
+
├── config.test.ts
|
|
177
|
+
└── github.test.ts
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Dependencias
|
|
181
|
+
|
|
182
|
+
- `@inquirer/prompts`: Prompts interactivos
|
|
183
|
+
- `gray-matter`: Parsing de MDX (solo en workflow generado)
|
|
184
|
+
- `bun`: Runtime
|
|
185
|
+
|
|
186
|
+
## Notas
|
|
187
|
+
|
|
188
|
+
- Todos los imports usan `.js` extension (requerido por ES modules)
|
|
189
|
+
- El shebang `#!/usr/bin/env bun` está solo en `src/index.ts`
|
|
190
|
+
- La configuración global se guarda en `~/.da-proj-config.json`
|