- Agregar selector de directorio multi-OS con validación y persistencia - Implementar preview en tiempo real del código generado en CommandCreator y EventCreator - Activar TypeScript strict mode y añadir snippets nativos para mejorar la experiencia de desarrollo - Crear documentación detallada sobre las nuevas funcionalidades y cambios realizados - Actualizar README con instrucciones de uso y solución de problemas comunes - Modificar archivos clave para integrar las nuevas características y mejorar la usabilidad
356 lines
9.3 KiB
Markdown
356 lines
9.3 KiB
Markdown
# 🎉 Nuevas Mejoras Implementadas
|
||
|
||
## ✨ Cambios Realizados
|
||
|
||
### 1. 📁 Selector de Directorio del Proyecto
|
||
|
||
**Problema resuelto:** Error "El directorio de comandos no existe"
|
||
|
||
**Solución implementada:**
|
||
|
||
- **Nuevo componente `ProjectSelector.vue`**: Modal para seleccionar el directorio raíz del proyecto
|
||
- **Compatible con todos los SO**: Windows, Linux (Arch/Debian), y macOS
|
||
- **Validación inteligente**: Verifica que el directorio contenga `src/commands/` y `src/events/`
|
||
- **Persistencia**: Guarda la ruta en localStorage para futuras sesiones
|
||
- **Botón en Sidebar**: Permite cambiar el directorio en cualquier momento
|
||
|
||
**Características:**
|
||
|
||
```typescript
|
||
// Nuevo comando Tauri
|
||
validate_project_path(path: String) -> Result<bool, String>
|
||
```
|
||
|
||
- ✅ Validación del directorio antes de aceptar
|
||
- ✅ Mensajes de error claros y descriptivos
|
||
- ✅ Ruta guardada se puede reutilizar
|
||
- ✅ Compatible con rutas de Windows (`C:\...`) y Unix (`/home/...`)
|
||
|
||
**Cómo usar:**
|
||
|
||
1. Al abrir la app, si no hay ruta guardada, aparece el selector automáticamente
|
||
2. Click en "📁 Seleccionar Directorio"
|
||
3. Navega a la carpeta raíz de tu proyecto Amayo
|
||
4. Click en "✅ Usar esta Ruta"
|
||
5. ¡Listo! La ruta se guarda para la próxima vez
|
||
|
||
**En el Sidebar:**
|
||
|
||
- Muestra la ruta actual del proyecto (truncada si es muy larga)
|
||
- Botón 📁 en el header para cambiar el directorio en cualquier momento
|
||
|
||
---
|
||
|
||
### 2. 📋 Preview en Tiempo Real del Código Generado
|
||
|
||
**Mejora solicitada:** Ver cómo se verá el código mientras completas los formularios
|
||
|
||
**Implementado en:**
|
||
|
||
- ✅ `CommandCreator.vue`
|
||
- ✅ `EventCreator.vue`
|
||
|
||
**Características:**
|
||
|
||
- **Preview dinámico**: Se actualiza automáticamente al cambiar cualquier campo
|
||
- **Badge "Actualización en tiempo real"**: Indica que el código se regenera en vivo
|
||
- **Scroll horizontal**: Para ver código largo sin problemas
|
||
- **Altura máxima**: 200px para no ocupar todo el espacio
|
||
- **Syntax highlighting**: Colores del tema VS Code Dark
|
||
|
||
**Ejemplo visual:**
|
||
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ 📋 Preview del Código [⚡ Tiempo real] │
|
||
├─────────────────────────────────────────┤
|
||
│ import type { Message } from "discord" │
|
||
│ import type Amayo from "../../core" │
|
||
│ │
|
||
│ export default { │
|
||
│ name: "ping", │
|
||
│ description: "Comando de latencia", │
|
||
│ type: 'message' as const, │
|
||
│ ... │
|
||
│ } │
|
||
└─────────────────────────────────────────┘
|
||
```
|
||
|
||
**Ventajas:**
|
||
|
||
- ✅ Ves exactamente cómo quedará el archivo antes de crearlo
|
||
- ✅ Detectas errores en nombres o configuración inmediatamente
|
||
- ✅ Aprendes la estructura del código al verlo generarse
|
||
- ✅ Verificas que aliases, cooldown y otros campos estén correctos
|
||
|
||
---
|
||
|
||
### 3. 🔍 Detección de Errores con TypeScript Strict + Snippets Nativos
|
||
|
||
**Mejora solicitada:** Macro proceso de detección de errores y snippets de TypeScript
|
||
|
||
**Implementado:**
|
||
|
||
#### A) TypeScript Strict Mode
|
||
|
||
```typescript
|
||
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
|
||
strict: true, // Modo estricto activado
|
||
noImplicitAny: true, // No permite 'any' implícito
|
||
strictNullChecks: true, // Verifica null/undefined
|
||
strictFunctionTypes: true, // Tipado estricto en funciones
|
||
// ... más opciones
|
||
});
|
||
```
|
||
|
||
**Beneficios:**
|
||
|
||
- ✅ Detecta errores de tipos en tiempo real
|
||
- ✅ Subraya código problemático con línea roja
|
||
- ✅ Muestra mensajes de error al pasar el mouse
|
||
- ✅ Previene bugs antes de guardar el código
|
||
|
||
#### B) Snippets de TypeScript Nativos
|
||
|
||
**Snippets agregados:**
|
||
|
||
1. **`try-catch`**: Bloque try-catch completo
|
||
```typescript
|
||
try {
|
||
// código
|
||
} catch (error) {
|
||
console.error(error);
|
||
}
|
||
```
|
||
|
||
2. **`async-function`**: Función asíncrona
|
||
```typescript
|
||
async function name(params) {
|
||
// código
|
||
}
|
||
```
|
||
|
||
3. **`discord-embed`**: Estructura completa de embed
|
||
```typescript
|
||
embeds: [{
|
||
title: "Título",
|
||
description: "Descripción",
|
||
color: 0x0099ff,
|
||
fields: [
|
||
{ name: "Campo", value: "Valor", inline: true }
|
||
],
|
||
timestamp: new Date(),
|
||
footer: { text: "Footer" }
|
||
}]
|
||
```
|
||
|
||
**Cómo usar los snippets:**
|
||
|
||
1. Escribe el nombre del snippet (ej: `try-catch`)
|
||
2. Aparece en el autocompletado con icono de snippet
|
||
3. Presiona Enter o Tab
|
||
4. El código se inserta con placeholders
|
||
5. Tab para saltar entre placeholders
|
||
|
||
**Ventajas:**
|
||
|
||
- ✅ Código más rápido con snippets predefinidos
|
||
- ✅ Menos errores con estructuras correctas
|
||
- ✅ Aprende patrones comunes de TypeScript
|
||
- ✅ Compatible con snippets de Discord.js
|
||
|
||
---
|
||
|
||
## 🔧 Cambios Técnicos
|
||
|
||
### Archivos Nuevos
|
||
|
||
1. **`src/components/ProjectSelector.vue`** (215 líneas)
|
||
- Modal de selección de directorio
|
||
- Validación de proyecto
|
||
- Persistencia en localStorage
|
||
|
||
### Archivos Modificados
|
||
|
||
1. **`src-tauri/src/lib.rs`**
|
||
- Nuevo comando: `validate_project_path()`
|
||
- Registro del plugin dialog
|
||
|
||
2. **`src-tauri/Cargo.toml`**
|
||
- Dependencia: `tauri-plugin-dialog = "2"`
|
||
|
||
3. **`src-tauri/capabilities/default.json`**
|
||
- Permiso: `dialog:default`
|
||
|
||
4. **`src/App.vue`**
|
||
- Integración de ProjectSelector
|
||
- Lógica de validación de ruta
|
||
- Función `changeProjectDirectory()`
|
||
|
||
5. **`src/components/Sidebar.vue`**
|
||
- Muestra ruta del proyecto
|
||
- Botón para cambiar directorio
|
||
- Función `truncatePath()`
|
||
|
||
6. **`src/components/CommandCreator.vue`**
|
||
- Preview en tiempo real con `computed`
|
||
- TypeScript strict mode
|
||
- Snippets nativos registrados
|
||
- Estilos para preview
|
||
|
||
7. **`src/components/EventCreator.vue`**
|
||
- Preview en tiempo real
|
||
- Mismos estilos que CommandCreator
|
||
|
||
### Nuevas Dependencias NPM
|
||
|
||
```json
|
||
{
|
||
"@tauri-apps/plugin-dialog": "^2.0.0"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Características por Sistema Operativo
|
||
|
||
### Windows
|
||
|
||
- ✅ Rutas con backslash: `C:\Users\...\amayo`
|
||
- ✅ Selector de directorios nativo de Windows
|
||
- ✅ Guardado de rutas con formato correcto
|
||
|
||
### Linux (Arch/Debian/Ubuntu)
|
||
|
||
- ✅ Rutas con slash: `/home/user/.../amayo`
|
||
- ✅ Selector de directorios GTK/Qt
|
||
- ✅ Compatible con permisos de usuario
|
||
|
||
### macOS
|
||
|
||
- ✅ Rutas estilo Unix: `/Users/.../amayo`
|
||
- ✅ Selector de directorios nativo de macOS
|
||
- ✅ Soporte para Finder
|
||
|
||
---
|
||
|
||
## 📊 Estadísticas de las Mejoras
|
||
|
||
- **Líneas de código añadidas:** ~500
|
||
- **Componentes nuevos:** 1 (ProjectSelector)
|
||
- **Comandos Tauri nuevos:** 1 (validate_project_path)
|
||
- **Snippets TypeScript:** 3 nativos
|
||
- **Validaciones:** 2 (proyecto y código)
|
||
|
||
---
|
||
|
||
## 🚀 Cómo Probar las Nuevas Funciones
|
||
|
||
### 1. Selector de Directorio
|
||
|
||
```bash
|
||
# Instalar dependencias actualizadas
|
||
cd AEditor
|
||
npm install
|
||
|
||
# Ejecutar la app
|
||
npm run dev
|
||
```
|
||
|
||
1. La app se abrirá con el selector
|
||
2. Click en "📁 Seleccionar Directorio"
|
||
3. Navega a tu proyecto Amayo
|
||
4. Verifica que aparezca ✅ si es válido
|
||
5. Click en "Usar esta Ruta"
|
||
|
||
### 2. Preview en Tiempo Real
|
||
|
||
1. Click en "➕ Nuevo Comando"
|
||
2. Completa el nombre: `test`
|
||
3. Mira el preview actualizarse automáticamente
|
||
4. Cambia la descripción
|
||
5. El preview se actualiza al instante
|
||
6. Agrega aliases o cooldown
|
||
7. El código se regenera con los cambios
|
||
|
||
### 3. Snippets y Validación
|
||
|
||
1. Abre el creador de comandos
|
||
2. En el editor Monaco, escribe `try`
|
||
3. Aparece sugerencia `try-catch`
|
||
4. Presiona Enter
|
||
5. El snippet se inserta con placeholders
|
||
6. Escribe código con error de tipos
|
||
7. Aparece línea roja y mensaje de error
|
||
|
||
---
|
||
|
||
## 🐛 Problemas Resueltos
|
||
|
||
1. ✅ **Error "El directorio de comandos no existe"**
|
||
- Ahora se puede seleccionar el directorio correcto
|
||
- Funciona en cualquier SO
|
||
|
||
2. ✅ **No se veía el código antes de crear**
|
||
- Preview en tiempo real implementado
|
||
- Se actualiza con cada cambio
|
||
|
||
3. ✅ **Faltaban snippets de TypeScript**
|
||
- 3 snippets nativos agregados
|
||
- Más fácil escribir código común
|
||
|
||
4. ✅ **No había validación de tipos**
|
||
- TypeScript strict mode activado
|
||
- Errores se muestran en tiempo real
|
||
|
||
---
|
||
|
||
## 📝 Notas Importantes
|
||
|
||
### LocalStorage
|
||
|
||
La ruta del proyecto se guarda en:
|
||
```javascript
|
||
localStorage.getItem('amayo-project-path')
|
||
```
|
||
|
||
Para limpiar la ruta guardada (si necesitas):
|
||
```javascript
|
||
localStorage.removeItem('amayo-project-path')
|
||
```
|
||
|
||
### Validación
|
||
|
||
El directorio debe tener **obligatoriamente**:
|
||
- `src/commands/` (con subdirectorios)
|
||
- `src/events/` (con archivos .ts)
|
||
|
||
Si falta alguno, la validación falla.
|
||
|
||
### Compatibilidad
|
||
|
||
- ✅ Windows 10/11
|
||
- ✅ Linux (kernel 5.x+)
|
||
- ✅ macOS 10.15+
|
||
- ✅ Rutas con espacios
|
||
- ✅ Rutas con caracteres especiales
|
||
- ✅ Symlinks
|
||
|
||
---
|
||
|
||
## 🎉 Resumen de Mejoras
|
||
|
||
| Mejora | Estado | Impacto |
|
||
|--------|--------|---------|
|
||
| Selector de directorio multi-OS | ✅ Completo | Alto |
|
||
| Preview en tiempo real | ✅ Completo | Alto |
|
||
| TypeScript strict mode | ✅ Completo | Medio |
|
||
| Snippets nativos | ✅ Completo | Medio |
|
||
| Validación de proyecto | ✅ Completo | Alto |
|
||
| Persistencia de ruta | ✅ Completo | Alto |
|
||
| Botón cambiar directorio | ✅ Completo | Medio |
|
||
|
||
---
|
||
|
||
**¡Todas las mejoras solicitadas han sido implementadas exitosamente! 🚀**
|