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! 🚀**
|