versacompiler 1.0.4 → 2.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.
Files changed (41) hide show
  1. package/README.md +357 -145
  2. package/dist/compiler/compile.js +1120 -0
  3. package/dist/compiler/error-reporter.js +467 -0
  4. package/dist/compiler/linter.js +72 -0
  5. package/dist/{services → compiler}/minify.js +40 -31
  6. package/dist/compiler/parser.js +30 -0
  7. package/dist/compiler/tailwindcss.js +39 -0
  8. package/dist/compiler/transformTStoJS.js +16 -0
  9. package/dist/compiler/transforms.js +544 -0
  10. package/dist/compiler/typescript-error-parser.js +282 -0
  11. package/dist/compiler/typescript-sync-validator.js +230 -0
  12. package/dist/compiler/typescript-worker-thread.cjs +457 -0
  13. package/dist/compiler/typescript-worker.js +309 -0
  14. package/dist/compiler/typescript.js +382 -0
  15. package/dist/compiler/vuejs.js +296 -0
  16. package/dist/hrm/VueHRM.js +353 -0
  17. package/dist/hrm/errorScreen.js +23 -1
  18. package/dist/hrm/getInstanciaVue.js +313 -0
  19. package/dist/hrm/initHRM.js +140 -0
  20. package/dist/main.js +287 -0
  21. package/dist/servicios/browserSync.js +177 -0
  22. package/dist/servicios/chokidar.js +178 -0
  23. package/dist/servicios/logger.js +33 -0
  24. package/dist/servicios/readConfig.js +429 -0
  25. package/dist/utils/module-resolver.js +506 -0
  26. package/dist/utils/promptUser.js +48 -0
  27. package/dist/utils/resolve-bin.js +29 -0
  28. package/dist/utils/utils.js +21 -48
  29. package/dist/wrappers/eslint-node.js +145 -0
  30. package/dist/wrappers/oxlint-node.js +120 -0
  31. package/dist/wrappers/tailwind-node.js +92 -0
  32. package/package.json +62 -15
  33. package/dist/hrm/devMode.js +0 -249
  34. package/dist/hrm/instanciaVue.js +0 -35
  35. package/dist/hrm/setupHMR.js +0 -57
  36. package/dist/index.js +0 -873
  37. package/dist/services/acorn.js +0 -29
  38. package/dist/services/linter.js +0 -55
  39. package/dist/services/typescript.js +0 -89
  40. package/dist/services/vueLoader.js +0 -324
  41. package/dist/services/vuejs.js +0 -259
package/README.md CHANGED
@@ -1,145 +1,357 @@
1
- # versaCompiler para archivos JS - VUE - TS
2
-
3
- ## Descripción
4
-
5
- `versaCompiler` es una potente y flexible herramienta de línea de comandos diseñada para simplificar el flujo de trabajo de desarrollo con archivos `.vue`, `.js` y `.ts`. Se especializa en la compilación, minificación y transpilación de estos archivos, optimizándolos para proyectos basados en Vue 3, con un robusto soporte para TypeScript.
6
-
7
- Una de las características destacadas de `versaCompiler` es su implementación de Hot Module Replacement (HMR), que permite a los desarrolladores ver los cambios en tiempo real sin necesidad de recargar toda la página, agilizando significativamente el proceso de desarrollo y depuración.
8
-
9
- ## Instalación
10
-
11
- Puedes integrar `versaCompiler` en tu proyecto de dos maneras:
12
-
13
- 1. **Clonando el repositorio (para desarrollo o contribución):**
14
-
15
- ```sh
16
- git clone https://github.com/kriollo/versaCompiler.git
17
- cd versaCompiler
18
- npm install
19
- ```
20
-
21
- 2. **Instalándolo como una dependencia de NPM (recomendado para usar en tus proyectos):**
22
- ```sh
23
- npm install versaCompiler --save-dev
24
- ```
25
- _(Nota: Este comando funcionará una vez que el paquete sea publicado en NPM.)_
26
-
27
- ## Configuración de `tsconfig.json`
28
-
29
- Para que `versaCompiler` funcione correctamente en tu proyecto, tu archivo `tsconfig.json` debe incluir ciertas configuraciones. Estas opciones le indican a TypeScript cómo compilar tus archivos y a `versaCompiler` dónde encontrarlos y dónde colocar el resultado.
30
-
31
- A continuación, un ejemplo de una configuración recomendada para tu `tsconfig.json` cuando usas `versaCompiler`:
32
-
33
- ```json
34
- {
35
- "compilerOptions": {
36
- "baseUrl": ".", // Directorio base para resolver nombres de módulos no absolutos
37
- "paths": {
38
- "@/*": ["src/*"] // Ejemplo: Alias para el directorio 'src'
39
- },
40
- "sourceRoot": "./src", // Especifica el directorio raíz de los archivos fuente de tu proyecto
41
- "outDir": "./dist" // Directorio donde `versaCompiler` guardará los
42
- },
43
- "versaCompile": {
44
- // Configuración específica para `versaCompiler`
45
- "proxyConfig": {
46
- "proxyUrl": "http://localhost:3000", // Opcional: URL para el proxy de BrowserSync (ej. tu servidor backend local)
47
- "assetsOmit": false // Opcional: Poner en `true` para omitir logs de assets estáticos en BrowserSync
48
- },
49
- "tailwindcss": {
50
- // Opcional: Configuración para la integración con TailwindCSS
51
- "inputCSS": "./src/assets/css/tailwind.css", // Ruta a tu archivo principal de TailwindCSS
52
- "outputCSS": "./public/css/style.css" // Ruta para el archivo CSS de Tailwind compilado
53
- }
54
- }
55
- }
56
- ```
57
-
58
- Asegúrate de que `compilerOptions.paths` refleje la estructura de alias de tu proyecto. `sourceRoot` debe apuntar a tu carpeta de desarrollo (usualmente `src`), y `outDir` a la carpeta donde quieres que `versaCompiler` guarde los archivos compilados de tu proyecto.
59
-
60
- La sección `versaCompile.proxyConfig` permite configurar un servidor proxy para `browser-sync` y controlar el log de assets. La sección `versaCompile.tailwindcss` permite integrar la compilación de TailwindCSS si la usas en tu proyecto.
61
-
62
- ## Uso (Instalador desde NPM)
63
-
64
- Una vez que `versaCompiler` está instalado (ya sea clonado o como dependencia NPM) y tu `tsconfig.json` está configurado, puedes ejecutar el compilador desde la raíz del repositorio de `versaCompiler` (si lo clonaste) o desde tu proyecto (si lo instalaste como dependencia y tienes un script para ello).
65
-
66
- ### Ejecución del Compilador
67
-
68
- Para iniciar el proceso de compilación, usa el siguiente comando desde la raíz del directorio de `versaCompiler` (donde se encuentra la carpeta `dist`):
69
-
70
- ```sh
71
- npx versacompiler
72
- ```
73
-
74
- Este comando iniciará `versaCompiler` en modo de observación por defecto. Observará los cambios en los archivos `.js`, `.ts` y `.vue` dentro del directorio `src` (según la configuración de `sourceRoot` en tu `tsconfig.json`) y los recompilará automáticamente.
75
-
76
- ### Parámetros de Ejecución
77
-
78
- Puedes modificar el comportamiento del compilador con los siguientes parámetros:
79
-
80
- - **Sin Parámetros**: Activa el modo de observación (comportamiento por defecto).
81
- ```sh
82
- npx versacompiler
83
- ```
84
- - `--all`: Compila todos los archivos en el `sourceRoot` de una vez, en lugar de solo observar cambios.
85
- ```sh
86
- npx versacompiler --all
87
- ```
88
- - `--prod`: Realiza la compilación en modo producción. Esto generalmente incluye la minificación del código (usando `OxcMinify`) y la eliminación de comentarios para optimizar los archivos para el despliegue.
89
- ```sh
90
- npx versacompiler --prod
91
- ```
92
-
93
- También puedes combinar parámetros:
94
-
95
- ```sh
96
- npx versacompiler --all --prod
97
- ```
98
-
99
- Este comando compilará todos los archivos en modo producción.
100
-
101
- ## Funcionalidades
102
-
103
- ### Compilación de Archivos
104
-
105
- - **JavaScript**: Compila archivos `.js` y los coloca en el directorio `public`.
106
- - **TypeScript**: Transpila archivos `.ts` a `.js` utilizando las opciones definidas en `tsconfig.json`.
107
- - **Vue**: Procesa archivos `.vue`, compila sus scripts, plantillas y estilos, y los convierte en módulos JavaScript.
108
-
109
- ### Minificación
110
-
111
- Si se ejecuta con el parámetro `--prod`, el código se minifica utilizando `OxcMinify`.
112
-
113
- ### Observación de Archivos
114
-
115
- El compilador observa los cambios en los archivos `.js`, `.ts` y `.vue` en el directorio `src` y recompila automáticamente los archivos modificados.
116
-
117
- ### Vue Loader
118
-
119
- - **Sanitización de Rutas**: Sanitiza las rutas de los módulos para prevenir ataques de traversal de directorios.
120
- - **Manejo de Errores**: Muestra mensajes de error en el contenedor y envía los errores a Sentry si está configurado.
121
- - **Hot Module Replacement (HMR)**: Implementa HMR para recargar componentes Vue y archivos JS sin recargar toda la página.
122
- - **Árbol de Componentes**: Construye un árbol de componentes para manejar el HMR.
123
- - **Recarga de Componentes**: Recarga componentes Vue y archivos JS dinámicamente.
124
-
125
- ## Dependencias
126
-
127
- - **VueJS**: API (vue/compiler-sfc) para pasar de archivo .vue a javascript.
128
- - **TypeScript**: API (transpileModule) para pasar de typescript a javascript.
129
- - **OxcMinify**: API (minify) para limpiar, ordenar y comprimir el código.
130
- - **Acorn**: API (Parser) para validar la sintaxis de los archivos compilados.
131
- - **BrowserSync**: API (browserSync) para servir el proyecto adicional, genera WebSocket para servir HMR.
132
-
133
- ## Contribución
134
-
135
- Si deseas contribuir a este proyecto, por favor sigue los siguientes pasos:
136
-
137
- 1. Haz un fork del repositorio.
138
- 2. Crea una nueva rama (`git checkout -b feature/nueva-funcionalidad`).
139
- 3. Realiza tus cambios y haz commit (`git commit -am 'Agregar nueva funcionalidad'`).
140
- 4. Sube tus cambios a tu fork (`git push origin feature/nueva-funcionalidad`).
141
- 5. Abre un Pull Request.
142
-
143
- ## Licencia
144
-
145
- Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo `LICENSE` para más detalles.
1
+ # 🚀 VersaCompiler
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
+ [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
5
+ [![Vue.js](https://img.shields.io/badge/Vue.js-35495E?style=flat&logo=vuedotjs&logoColor=4FC08D)](https://vuejs.org/)
6
+
7
+ > **🎯 Compilador rápido y eficiente para Vue.js, TypeScript y JavaScript con Hot Module Replacement (HMR) integrado.**
8
+
9
+ **VersaCompiler** es una herramienta de compilación diseñada para proyectos Vue 3 con soporte completo para TypeScript, JavaScript y todas las funcionalidades modernas que necesitas para desarrollo web.
10
+
11
+ ## 🌟 Características Principales
12
+
13
+ - ⚡ **Compilación rápida** - Compilación paralela optimizada para velocidad
14
+ - 🔥 **Hot Module Replacement (HMR)** - Actualizaciones instantáneas durante desarrollo
15
+ - 🧩 **Soporte completo para Vue 3** - Single File Components (SFC)
16
+ - 📝 **TypeScript nativo** - Transpilación integrada sin configuración adicional
17
+ - 🔍 **Linting dual** - ESLint + OxLint para máxima cobertura
18
+ - 🎨 **TailwindCSS integrado** - Compilación automática de estilos
19
+ - 🗜️ **Minificación avanzada** - OxcMinify para builds optimizados
20
+ - 📦 **Bundling inteligente** - Agrupación de módulos configurable
21
+
22
+ ## ⚡ Instalación
23
+
24
+ ### 📦 Desde código fuente
25
+
26
+ ```bash
27
+ git clone https://github.com/kriollo/versaCompiler.git
28
+ cd versaCompiler
29
+ npm install
30
+ npm run build
31
+ ```
32
+
33
+ ### 🔗 Instalación local en tu proyecto
34
+
35
+ ```bash
36
+ # Copiar archivos compilados a tu proyecto
37
+ cp -r dist/* tu-proyecto/versacompiler/
38
+ ```
39
+
40
+ ## 🎯 Quick Start
41
+
42
+ ### 1. Configuración inicial
43
+
44
+ ```bash
45
+ # Crear archivo de configuración
46
+ versacompiler --init
47
+ ```
48
+
49
+ ### 2. Estructura de proyecto
50
+
51
+ ```
52
+ mi-proyecto/
53
+ ├── src/ # 📝 Código fuente
54
+ │ ├── components/ # 🧩 Componentes Vue
55
+ │ └── main.ts # 🚀 Punto de entrada
56
+ ├── dist/ # 📦 Archivos compilados (auto-generado)
57
+ ├── versacompile.config.ts # ⚙️ Configuración
58
+ └── package.json
59
+ ```
60
+
61
+ ### 3. Comandos básicos
62
+
63
+ ```bash
64
+ # 🔥 Desarrollo con auto-reload
65
+ versacompiler --watch
66
+
67
+ # 🏗️ Compilar todo el proyecto
68
+ versacompiler --all
69
+
70
+ # 🚀 Build para producción
71
+ versacompiler --all --prod
72
+
73
+ # 🔍 Solo verificar código (linting)
74
+ versacompiler --lint-only
75
+
76
+ # 🧹 Limpiar y recompilar
77
+ versacompiler --clean --all
78
+ ```
79
+
80
+ ## 📖 Configuración
81
+
82
+ ### 🛠️ Comandos CLI Disponibles
83
+
84
+ | Comando | Alias | Descripción |
85
+ | ------------- | ----- | -------------------------------- |
86
+ | `--watch` | `-w` | Modo observación con HMR |
87
+ | `--all` | | Compilar todos los archivos |
88
+ | `--prod` | `-p` | Modo producción con minificación |
89
+ | `--clean` | | Limpiar directorio de salida |
90
+ | `--lint-only` | | Solo ejecutar linting |
91
+ | `--verbose` | `-v` | Salida detallada |
92
+ | `--init` | | Inicializar configuración |
93
+ | `--help` | `-h` | Mostrar ayuda |
94
+
95
+ ### 🔧 Archivo de configuración
96
+
97
+ Crea un archivo `versacompile.config.ts` en la raíz de tu proyecto:
98
+
99
+ ```typescript
100
+ // Archivo de configuración de VersaCompiler
101
+ export default {
102
+ tsconfig: './tsconfig.json',
103
+ compilerOptions: {
104
+ sourceRoot: './src',
105
+ outDir: './dist',
106
+ pathsAlias: {
107
+ '@/*': ['src/*'],
108
+ 'P@/*': ['public/*'],
109
+ },
110
+ },
111
+ proxyConfig: {
112
+ proxyUrl: '',
113
+ assetsOmit: true,
114
+ },
115
+ aditionalWatch: ['./app/templates/**/*.twig'],
116
+ tailwindConfig: {
117
+ bin: './node_modules/.bin/tailwindcss',
118
+ input: './src/css/input.css',
119
+ output: './public/css/output.css',
120
+ },
121
+ linter: [
122
+ {
123
+ name: 'eslint',
124
+ bin: './node_modules/.bin/eslint',
125
+ configFile: './eslint.config.js',
126
+ fix: false,
127
+ paths: ['src/'],
128
+ },
129
+ {
130
+ name: 'oxlint',
131
+ bin: './node_modules/.bin/oxlint',
132
+ configFile: './.oxlintrc.json',
133
+ fix: false,
134
+ paths: ['src/'],
135
+ },
136
+ ],
137
+ bundlers: [
138
+ {
139
+ name: 'appLoader',
140
+ fileInput: './public/module/appLoader.js',
141
+ fileOutput: './public/module/appLoader.prod.js',
142
+ },
143
+ ],
144
+ };
145
+ ```
146
+
147
+ ### 📝 Opciones de configuración
148
+
149
+ #### `compilerOptions`
150
+
151
+ - `sourceRoot`: Directorio de archivos fuente (por defecto: `'./src'`)
152
+ - `outDir`: Directorio de salida (por defecto: `'./dist'`)
153
+ - `pathsAlias`: Aliases para imports (ej: `'@/*': ['src/*']`)
154
+
155
+ #### `proxyConfig`
156
+
157
+ - `proxyUrl`: URL del proxy para desarrollo
158
+ - `assetsOmit`: Omitir assets en el proxy
159
+
160
+ #### `tailwindConfig`
161
+
162
+ - `bin`: Ruta al binario de TailwindCSS
163
+ - `input`: Archivo CSS de entrada
164
+ - `output`: Archivo CSS de salida
165
+
166
+ #### `linter`
167
+
168
+ Array de configuraciones de linters:
169
+
170
+ - `name`: Nombre del linter (`'eslint'` o `'oxlint'`)
171
+ - `bin`: Ruta al binario del linter
172
+ - `configFile`: Archivo de configuración del linter
173
+ - `fix`: Auto-fix de errores
174
+ - `paths`: Rutas a analizar
175
+
176
+ #### `bundlers`
177
+
178
+ Array de configuraciones de bundling:
179
+
180
+ - `name`: Nombre del bundle
181
+ - `fileInput`: Archivo de entrada
182
+ - `fileOutput`: Archivo de salida
183
+
184
+ ## 🎯 Ejemplos de Uso
185
+
186
+ ### Desarrollo Local
187
+
188
+ ```bash
189
+ # Iniciar servidor de desarrollo
190
+ versacompiler --watch
191
+
192
+ # Con verbose para debugging
193
+ versacompiler --watch --verbose
194
+
195
+ # Solo linting durante desarrollo
196
+ versacompiler --lint-only
197
+ ```
198
+
199
+ ### Compilación para Producción
200
+
201
+ ```bash
202
+ # Build completo para producción
203
+ versacompiler --all --prod --clean
204
+
205
+ # Con análisis detallado
206
+ versacompiler --all --prod --verbose
207
+ ```
208
+
209
+ ### Integración CI/CD
210
+
211
+ ```bash
212
+ # Pipeline de CI
213
+ versacompiler --lint-only # Verificar código
214
+ versacompiler --all --prod # Build para producción
215
+ ```
216
+
217
+ ## 🏗️ Funcionalidades
218
+
219
+ ### 🔥 Hot Module Replacement (HMR)
220
+
221
+ - **Componentes Vue**: Actualizaciones instantáneas preservando estado
222
+ - **TypeScript/JavaScript**: Recarga inteligente de módulos
223
+ - **CSS/TailwindCSS**: Inyección de estilos sin recarga
224
+
225
+ ### 🚀 Compilación Paralela
226
+
227
+ - **Pool de workers optimizado** basado en CPU cores
228
+ - **Cache inteligente** evita recompilaciones innecesarias
229
+ - **Progress bar visual** con métricas en tiempo real
230
+
231
+ ### 🔍 Sistema de Linting Dual
232
+
233
+ - **ESLint**: Análisis de código JavaScript/TypeScript
234
+ - **OxLint**: Linter ultra-rápido escrito en Rust
235
+ - **Auto-fix**: Corrección automática de problemas
236
+
237
+ ### 📦 Minificación Optimizada
238
+
239
+ - **OxcMinify**: Minificador de última generación
240
+ - **Tree shaking**: Eliminación de código no utilizado
241
+ - **Compresión avanzada**: Optimización de tamaño
242
+
243
+ ## 🚧 Troubleshooting
244
+
245
+ ### ❌ Problemas Frecuentes
246
+
247
+ #### 🔍 Error: "Cannot resolve module"
248
+
249
+ ```bash
250
+ # Verificar configuración de aliases
251
+ versacompiler --verbose
252
+
253
+ # Limpiar cache si persiste
254
+ versacompiler --clean
255
+ ```
256
+
257
+ #### 🔥 HMR no funciona
258
+
259
+ ```typescript
260
+ // Verificar configuración en versacompile.config.ts
261
+ export default {
262
+ proxyConfig: {
263
+ proxyUrl: '', // Vacío si no usas proxy
264
+ assetsOmit: true,
265
+ },
266
+ };
267
+ ```
268
+
269
+ #### 🐌 Linting muy lento
270
+
271
+ ```bash
272
+ # Usar solo OxLint para máxima velocidad
273
+ versacompiler --lint-only --verbose
274
+ ```
275
+
276
+ ## 📚 Documentación
277
+
278
+ - 📖 [**Guía de Inicio Rápido**](./docs/getting-started.md)
279
+ - 📋 [**Configuración Avanzada**](./docs/configuration.md)
280
+ - 🎯 [**Ejemplos y Recetas**](./docs/examples.md)
281
+ - 🔧 [**API Reference**](./docs/api.md)
282
+ - 🔄 [**Guía de Migración**](./docs/migration.md)
283
+ - 🤝 [**Guía de Contribución**](./docs/contributing.md)
284
+ - ❓ [**FAQ - Preguntas Frecuentes**](./docs/faq.md)
285
+
286
+ ## 🧪 Testing
287
+
288
+ ```bash
289
+ # Ejecutar tests
290
+ npm test
291
+
292
+ # Tests con coverage
293
+ npm run test:coverage
294
+
295
+ # Tests en modo watch
296
+ npm run test:watch
297
+ ```
298
+
299
+ ## 🤝 Contribuir
300
+
301
+ ¡Las contribuciones son bienvenidas! Ver [CONTRIBUTING.md](./docs/contributing.md) para detalles.
302
+
303
+ ### 🛠️ Desarrollo Local
304
+
305
+ ```bash
306
+ git clone https://github.com/kriollo/versaCompiler.git
307
+ cd versaCompiler
308
+ npm install
309
+ npm run dev
310
+ ```
311
+
312
+ ## 📄 Licencia
313
+
314
+ MIT © [Jorge Jara H](https://github.com/kriollo)
315
+
316
+ ## 🙏 Agradecimientos
317
+
318
+ - **Vue.js Team** - Por el increíble framework
319
+ - **TypeScript Team** - Por el excelente sistema de tipos
320
+ - **Oxc Project** - Por las herramientas de desarrollo ultra-rápidas
321
+ - **Comunidad Open Source** - Por el feedback y contribuciones
322
+
323
+ ---
324
+
325
+ ## 🔧 Arquitectura Técnica
326
+
327
+ ### Compilación de Archivos
328
+
329
+ - **JavaScript**: Compila archivos `.js` y los coloca en el directorio configurado
330
+ - **TypeScript**: Transpila archivos `.ts` a `.js` utilizando las opciones definidas en `tsconfig.json`
331
+ - **Vue**: Procesa archivos `.vue`, compila sus scripts, plantillas y estilos
332
+
333
+ ### Minificación
334
+
335
+ Si se ejecuta con el parámetro `--prod`, el código se minifica utilizando `OxcMinify`.
336
+
337
+ ### Observación de Archivos
338
+
339
+ El compilador observa los cambios en los archivos `.js`, `.ts` y `.vue` en el directorio `src` y recompila automáticamente los archivos modificados.
340
+
341
+ ### Dependencias Principales
342
+
343
+ - **VueJS**: API (vue/compiler-sfc) para compilar archivos .vue
344
+ - **TypeScript**: API (transpileModule) para transpilar TypeScript
345
+ - **OxcMinify**: API (minify) para minificar código
346
+ - **Acorn**: API (Parser) para validar sintaxis
347
+ - **BrowserSync**: API (browserSync) para servidor HMR
348
+
349
+ ---
350
+
351
+ <div align="center">
352
+
353
+ **¿Te gusta VersaCompiler? ¡Dale una ⭐ en GitHub!**
354
+
355
+ [🐛 Reportar Bug](https://github.com/kriollo/versaCompiler/issues) • [✨ Feature Request](https://github.com/kriollo/versaCompiler/issues) • [💬 Discusiones](https://github.com/kriollo/versaCompiler/discussions)
356
+
357
+ </div>