da-proj 1.0.0 → 1.1.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/README.md +27 -0
- package/package.json +1 -1
- package/src/README.md +190 -190
- package/src/commands/init.ts +331 -236
- package/src/commands/secrets.ts +251 -251
- package/src/commands/sync.ts +159 -159
- package/src/generators/mdx.ts +51 -46
- package/src/generators/readme.ts +45 -45
- package/src/generators/schema.ts +77 -69
- package/src/generators/workflow.ts +69 -69
- package/src/index.ts +109 -97
- package/src/types/index.ts +48 -47
- package/src/utils/config.ts +52 -52
- package/src/utils/github.ts +297 -297
- package/src/utils/logger.ts +23 -20
package/README.md
CHANGED
|
@@ -356,12 +356,39 @@ da-proj/
|
|
|
356
356
|
└── package.json
|
|
357
357
|
```
|
|
358
358
|
|
|
359
|
+
### Publicar en NPM
|
|
360
|
+
|
|
361
|
+
Este proyecto usa GitHub Actions para publicar automáticamente en npm cuando cambias la versión en `package.json`.
|
|
362
|
+
|
|
363
|
+
**Proceso rápido:**
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
# 1. Actualizar versión
|
|
367
|
+
npm version patch # o minor, o major
|
|
368
|
+
|
|
369
|
+
# 2. Actualizar CHANGELOG.md con los cambios
|
|
370
|
+
|
|
371
|
+
# 3. Commit y push
|
|
372
|
+
git add package.json CHANGELOG.md
|
|
373
|
+
git commit -m "chore: bump version to X.X.X"
|
|
374
|
+
git push origin main
|
|
375
|
+
|
|
376
|
+
# 4. El workflow automáticamente:
|
|
377
|
+
# - Detecta el cambio de versión
|
|
378
|
+
# - Compila el paquete
|
|
379
|
+
# - Publica en npm
|
|
380
|
+
# - Crea un git tag
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
📖 **Guía completa:** Ver [docs/NPM-PUBLISH.md](docs/NPM-PUBLISH.md)
|
|
384
|
+
|
|
359
385
|
---
|
|
360
386
|
|
|
361
387
|
## 📚 Documentación
|
|
362
388
|
|
|
363
389
|
- [Setup de Secrets](docs/SETUP-SECRETS.md) - Guía detallada de configuración
|
|
364
390
|
- [GitHub Sync](docs/GITHUB-SYNC.md) - Sincronización entre dispositivos
|
|
391
|
+
- [Publicación en NPM](docs/NPM-PUBLISH.md) - Automatización de publicaciones
|
|
365
392
|
- [Workflow Explicado](docs/WORKFLOW-EXPLICADO.md) - Cómo funciona GitHub Actions
|
|
366
393
|
- [Arquitectura](src/README.md) - Estructura del código
|
|
367
394
|
|
package/package.json
CHANGED
package/src/README.md
CHANGED
|
@@ -1,190 +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`
|
|
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`
|