versacompiler 2.0.7 → 2.1.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 (40) hide show
  1. package/dist/compiler/compile.js +25 -2332
  2. package/dist/compiler/error-reporter.js +38 -467
  3. package/dist/compiler/linter.js +1 -72
  4. package/dist/compiler/minify.js +1 -229
  5. package/dist/compiler/minifyTemplate.js +1 -0
  6. package/dist/compiler/module-resolution-optimizer.js +1 -821
  7. package/dist/compiler/parser.js +1 -203
  8. package/dist/compiler/performance-monitor.js +56 -192
  9. package/dist/compiler/tailwindcss.js +1 -39
  10. package/dist/compiler/transform-optimizer.js +1 -392
  11. package/dist/compiler/transformTStoJS.js +1 -16
  12. package/dist/compiler/transforms.js +1 -550
  13. package/dist/compiler/typescript-compiler.js +2 -172
  14. package/dist/compiler/typescript-error-parser.js +10 -281
  15. package/dist/compiler/typescript-manager.js +2 -273
  16. package/dist/compiler/typescript-sync-validator.js +31 -295
  17. package/dist/compiler/typescript-worker-pool.js +1 -842
  18. package/dist/compiler/typescript-worker-thread.cjs +22 -466
  19. package/dist/compiler/typescript-worker.js +1 -339
  20. package/dist/compiler/vuejs.js +37 -392
  21. package/dist/hrm/VueHRM.js +1 -353
  22. package/dist/hrm/errorScreen.js +1 -83
  23. package/dist/hrm/getInstanciaVue.js +1 -313
  24. package/dist/hrm/initHRM.js +1 -141
  25. package/dist/main.js +7 -347
  26. package/dist/servicios/browserSync.js +2 -503
  27. package/dist/servicios/file-watcher.js +4 -379
  28. package/dist/servicios/logger.js +3 -63
  29. package/dist/servicios/readConfig.js +53 -430
  30. package/dist/utils/excluded-modules.js +1 -36
  31. package/dist/utils/module-resolver.js +1 -466
  32. package/dist/utils/promptUser.js +2 -48
  33. package/dist/utils/proxyValidator.js +1 -68
  34. package/dist/utils/resolve-bin.js +1 -48
  35. package/dist/utils/utils.js +1 -21
  36. package/dist/utils/vue-types-setup.js +241 -435
  37. package/dist/wrappers/eslint-node.js +3 -1
  38. package/dist/wrappers/oxlint-node.js +1 -120
  39. package/dist/wrappers/tailwind-node.js +1 -92
  40. package/package.json +103 -108
@@ -1,550 +1 @@
1
- import path from 'node:path';
2
- import { env } from 'node:process';
3
- import { logger } from '../servicios/logger.js';
4
- import { EXCLUDED_MODULES } from '../utils/excluded-modules.js';
5
- import { getModuleSubPath } from '../utils/module-resolver.js';
6
- import { analyzeAndFormatMultipleErrors } from './error-reporter.js';
7
- import { getOptimizedAliasPath, getOptimizedModulePath, } from './module-resolution-optimizer.js';
8
- import { parser } from './parser.js';
9
- // Módulos built-in de Node.js que no deben ser resueltos
10
- const NODE_BUILTIN_MODULES = new Set([
11
- 'fs',
12
- 'path',
13
- 'os',
14
- 'crypto',
15
- 'http',
16
- 'https',
17
- 'url',
18
- 'util',
19
- 'events',
20
- 'stream',
21
- 'buffer',
22
- 'child_process',
23
- 'cluster',
24
- 'dgram',
25
- 'dns',
26
- 'net',
27
- 'readline',
28
- 'repl',
29
- 'tls',
30
- 'tty',
31
- 'vm',
32
- 'zlib',
33
- 'assert',
34
- 'module',
35
- 'process',
36
- 'querystring',
37
- 'string_decoder',
38
- 'timers',
39
- 'v8',
40
- 'worker_threads',
41
- ]);
42
- /**
43
- * Determina si un moduleRequest es un módulo externo que debe ser resuelto
44
- * @param moduleRequest - El string del import (ej: 'vue', './local', '/absolute')
45
- * @param pathAlias - Objeto con los alias definidos
46
- * @returns true si es un módulo externo que debe resolverse
47
- */
48
- function isExternalModule(moduleRequest, pathAlias) {
49
- // Descartar rutas relativas y absolutas
50
- if (moduleRequest.startsWith('./') ||
51
- moduleRequest.startsWith('../') ||
52
- moduleRequest.startsWith('/')) {
53
- return false;
54
- }
55
- // Descartar rutas que parecen ser locales (contienen carpetas conocidas del proyecto)
56
- const localPaths = [
57
- 'public/',
58
- 'src/',
59
- 'dist/',
60
- 'components/',
61
- 'utils/',
62
- 'assets/',
63
- 'styles/',
64
- ];
65
- if (localPaths.some(localPath => moduleRequest.startsWith(localPath))) {
66
- return false;
67
- } // Descartar módulos built-in de Node.js (incluyendo node: prefix)
68
- const cleanModuleName = moduleRequest.replace(/^node:/, '');
69
- if (NODE_BUILTIN_MODULES.has(cleanModuleName)) {
70
- return false;
71
- } // NUEVA LÓGICA: Verificar PRIMERO si es un módulo excluido antes de verificar alias
72
- // Esto es importante porque algunos módulos excluidos pueden tener nombres que
73
- // coinciden con patrones de alias (como @vue/compiler-sfc con @/*)
74
- if (EXCLUDED_MODULES.has(moduleRequest)) {
75
- return true;
76
- } // Descartar alias conocidos
77
- for (const alias of Object.keys(pathAlias)) {
78
- const aliasPattern = alias.replace('/*', '');
79
- if (moduleRequest.startsWith(aliasPattern)) {
80
- return false;
81
- }
82
- } // Verificar si parece ser un módulo npm (no contiene extensiones de archivo)
83
- if (moduleRequest.includes('.js') ||
84
- moduleRequest.includes('.ts') ||
85
- moduleRequest.includes('.vue') ||
86
- moduleRequest.includes('.css') ||
87
- moduleRequest.includes('.json')) {
88
- return false;
89
- }
90
- // Si llegamos aquí, es probablemente un módulo externo
91
- return true;
92
- }
93
- export async function replaceAliasImportStatic(file, code) {
94
- if (!env.PATH_ALIAS || !env.PATH_DIST) {
95
- return code;
96
- }
97
- const pathAlias = JSON.parse(env.PATH_ALIAS);
98
- let resultCode = code;
99
- // Usar regex para transformar imports estáticos
100
- const importRegex = /import\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*(?:\{[^}]*\}|\*\s+as\s+\w+|\w+))*\s+from\s+)?['"`]([^'"`]+)['"`]/g;
101
- // Crear un array para procesar transformaciones async
102
- const matches = Array.from(resultCode.matchAll(importRegex));
103
- for (const match of matches) {
104
- const [, moduleRequest] = match;
105
- if (!moduleRequest)
106
- continue; // Skip if moduleRequest is undefined
107
- let newPath = null;
108
- let transformed = false; // 1. PRIMERO: Verificar si es un módulo excluido (prioridad máxima)
109
- if (!transformed && isExternalModule(moduleRequest, pathAlias)) {
110
- try {
111
- // Usar el sistema optimizado primero
112
- const optimizedPath = await getOptimizedModulePath(moduleRequest, file);
113
- if (optimizedPath === null) {
114
- // Si el optimizador retorna null, significa que es un módulo excluido
115
- continue;
116
- }
117
- if (optimizedPath) {
118
- newPath = optimizedPath;
119
- transformed = true;
120
- }
121
- else {
122
- // Fallback al sistema anterior
123
- const modulePath = getModuleSubPath(moduleRequest, file);
124
- if (modulePath === null) {
125
- continue;
126
- }
127
- if (modulePath) {
128
- newPath = modulePath;
129
- transformed = true;
130
- }
131
- }
132
- }
133
- catch (error) {
134
- if (env.VERBOSE === 'true')
135
- logger.warn(`Error resolviendo módulo ${moduleRequest}: ${error instanceof Error ? error.message : String(error)}`);
136
- }
137
- } // 2. Si no es módulo externo/excluido, verificar si es un alias conocido
138
- if (!transformed) {
139
- // Usar el sistema optimizado de alias
140
- const aliasPath = getOptimizedAliasPath(moduleRequest);
141
- if (aliasPath) {
142
- let newImportPath = aliasPath;
143
- // Transformar extensiones
144
- if (newImportPath.endsWith('.ts') ||
145
- newImportPath.endsWith('.vue')) {
146
- newImportPath = newImportPath.replace(/\.(ts|vue)$/, '.js');
147
- }
148
- else if (!/\.(js|mjs|css|json)$/.test(newImportPath)) {
149
- newImportPath += '.js';
150
- }
151
- newPath = newImportPath;
152
- transformed = true;
153
- }
154
- else {
155
- // Fallback al sistema anterior
156
- for (const [alias] of Object.entries(pathAlias)) {
157
- const aliasPattern = alias.replace('/*', '');
158
- if (moduleRequest.startsWith(aliasPattern)) {
159
- // Reemplazar el alias con la ruta del target
160
- const relativePath = moduleRequest.replace(aliasPattern, '');
161
- // Para alias que apuntan a la raíz (como @/* -> /src/*),
162
- // solo usamos PATH_DIST + relativePath
163
- let newImportPath = path.join('/', env.PATH_DIST, relativePath);
164
- // Normalizar la ruta para eliminar ./ extra y separadores de Windows
165
- newImportPath = newImportPath
166
- .replace(/\/\.\//g, '/')
167
- .replace(/\\/g, '/');
168
- if (newImportPath.endsWith('.ts') ||
169
- newImportPath.endsWith('.vue')) {
170
- newImportPath = newImportPath.replace(/\.(ts|vue)$/, '.js');
171
- }
172
- else if (!/\.(js|mjs|css|json)$/.test(newImportPath)) {
173
- newImportPath += '.js';
174
- }
175
- newPath = newImportPath;
176
- transformed = true;
177
- break;
178
- }
179
- }
180
- }
181
- }
182
- // 3. Si no es alias ni módulo externo, verificar si es ruta relativa que necesita extensión .js
183
- if (!transformed &&
184
- (moduleRequest.startsWith('./') || moduleRequest.startsWith('../'))) {
185
- let relativePath = moduleRequest;
186
- if (relativePath.endsWith('.ts') || relativePath.endsWith('.vue')) {
187
- relativePath = relativePath.replace(/\.(ts|vue)$/, '.js');
188
- newPath = relativePath;
189
- transformed = true;
190
- }
191
- else if (!/\.(js|mjs|css|json)$/.test(relativePath)) {
192
- newPath = relativePath + '.js';
193
- transformed = true;
194
- }
195
- }
196
- // 4. Reemplazar solo el path en las comillas, no toda la línea
197
- if (transformed && newPath) {
198
- // Buscar y reemplazar solo la parte entre comillas
199
- const pathRegex = new RegExp(`(['"\`])${moduleRequest.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\1`, 'g');
200
- resultCode = resultCode.replace(pathRegex, `$1${newPath}$1`);
201
- }
202
- }
203
- return resultCode;
204
- }
205
- async function replaceAliasImportDynamic(code, _imports, file) {
206
- if (!env.PATH_ALIAS || !env.PATH_DIST) {
207
- return code;
208
- }
209
- const pathAlias = JSON.parse(env.PATH_ALIAS);
210
- const pathDist = env.PATH_DIST;
211
- let resultCode = code;
212
- // Regex para imports dinámicos normales con string (solo comillas simples y dobles)
213
- const dynamicImportRegex = /import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
214
- // Regex para template literals (solo backticks)
215
- const templateLiteralRegex = /import\s*\(\s*`([^`]+)`\s*\)/g;
216
- // Manejar imports dinámicos normales con string
217
- const dynamicMatches = Array.from(resultCode.matchAll(dynamicImportRegex));
218
- for (const match of dynamicMatches) {
219
- const [, moduleRequest] = match;
220
- if (!moduleRequest)
221
- continue; // Skip if moduleRequest is undefined
222
- let newPath = null;
223
- let transformed = false; // 1. PRIMERO: Verificar si es un módulo excluido (prioridad máxima)
224
- if (!transformed && isExternalModule(moduleRequest, pathAlias)) {
225
- try {
226
- // Usar el sistema optimizado primero
227
- const optimizedPath = await getOptimizedModulePath(moduleRequest, file);
228
- if (optimizedPath === null) {
229
- // Si el optimizador retorna null, significa que es un módulo excluido
230
- continue;
231
- }
232
- if (optimizedPath) {
233
- newPath = optimizedPath;
234
- transformed = true;
235
- }
236
- else {
237
- // Fallback al sistema anterior
238
- const modulePath = getModuleSubPath(moduleRequest, file);
239
- if (modulePath === null) {
240
- continue;
241
- }
242
- if (modulePath) {
243
- newPath = modulePath;
244
- transformed = true;
245
- }
246
- }
247
- }
248
- catch (error) {
249
- if (env.VERBOSE === 'true')
250
- logger.warn(`Error resolviendo módulo dinámico ${moduleRequest}: ${error instanceof Error ? error.message : String(error)}`);
251
- }
252
- } // 2. Si no es módulo externo/excluido, verificar si es un alias conocido
253
- if (!transformed) {
254
- // Usar el sistema optimizado de alias
255
- const aliasPath = getOptimizedAliasPath(moduleRequest);
256
- if (aliasPath) {
257
- let newImportPath = aliasPath;
258
- // Transformar extensiones
259
- if (newImportPath.endsWith('.ts') ||
260
- newImportPath.endsWith('.vue')) {
261
- newImportPath = newImportPath.replace(/\.(ts|vue)$/, '.js');
262
- }
263
- else if (!/\.(js|mjs|css|json)$/.test(newImportPath)) {
264
- newImportPath += '.js';
265
- }
266
- newPath = newImportPath;
267
- transformed = true;
268
- }
269
- else {
270
- // Fallback al sistema anterior
271
- for (const [alias] of Object.entries(pathAlias)) {
272
- const aliasPattern = alias.replace('/*', '');
273
- if (moduleRequest.startsWith(aliasPattern)) {
274
- // Reemplazar el alias con la ruta del target
275
- const relativePath = moduleRequest.replace(aliasPattern, '');
276
- // Para alias que apuntan a la raíz (como @/* -> /src/*),
277
- // solo usamos PATH_DIST + relativePath
278
- let newImportPath = path.join('/', pathDist, relativePath);
279
- // Normalizar la ruta para eliminar ./ extra y separadores de Windows
280
- newImportPath = newImportPath
281
- .replace(/\/\.\//g, '/')
282
- .replace(/\\/g, '/');
283
- if (newImportPath.endsWith('.ts') ||
284
- newImportPath.endsWith('.vue')) {
285
- newImportPath = newImportPath.replace(/\.(ts|vue)$/, '.js');
286
- }
287
- else if (!/\.(js|mjs|css|json)$/.test(newImportPath)) {
288
- newImportPath += '.js';
289
- }
290
- newPath = newImportPath;
291
- transformed = true;
292
- break;
293
- }
294
- }
295
- }
296
- }
297
- // 3. Si no es alias ni módulo externo, verificar si es ruta relativa que necesita extensión .js
298
- if (!transformed &&
299
- (moduleRequest.startsWith('./') || moduleRequest.startsWith('../'))) {
300
- let relativePath = moduleRequest;
301
- if (relativePath.endsWith('.ts') || relativePath.endsWith('.vue')) {
302
- relativePath = relativePath.replace(/\.(ts|vue)$/, '.js');
303
- newPath = relativePath;
304
- transformed = true;
305
- }
306
- else if (!/\.(js|mjs|css|json)$/.test(relativePath)) {
307
- newPath = relativePath + '.js';
308
- transformed = true;
309
- }
310
- }
311
- // 4. Reemplazar solo el path en las comillas, no toda la expresión
312
- if (transformed && newPath) {
313
- // Buscar y reemplazar solo la parte entre comillas en import()
314
- const pathRegex = new RegExp(`import\\s*\\(\\s*(['"])${moduleRequest.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\1\\s*\\)`, 'g');
315
- resultCode = resultCode.replace(pathRegex, `import($1${newPath}$1)`);
316
- }
317
- }
318
- // Manejar template literals - versión mejorada
319
- resultCode = resultCode.replace(templateLiteralRegex, (match, moduleRequest) => {
320
- let transformed = false;
321
- let result = match;
322
- // 1. PRIMERO: Verificar si es un módulo excluido (prioridad máxima)
323
- if (!transformed && isExternalModule(moduleRequest, pathAlias)) {
324
- try {
325
- const modulePath = getModuleSubPath(moduleRequest, file);
326
- if (modulePath === null) {
327
- // Si getModuleSubPath retorna null, significa que es un módulo excluido
328
- // No transformar y retornar el match original
329
- return match;
330
- }
331
- if (modulePath) {
332
- result = match.replace(moduleRequest, modulePath);
333
- transformed = true;
334
- }
335
- }
336
- catch (error) {
337
- if (env.VERBOSE === 'true')
338
- logger.warn(`Error resolviendo módulo template literal ${moduleRequest}: ${error instanceof Error ? error.message : String(error)}`);
339
- }
340
- }
341
- // 2. Verificar aliases en template literals
342
- if (!transformed) {
343
- for (const [alias] of Object.entries(pathAlias)) {
344
- const aliasPattern = alias.replace('/*', '');
345
- if (moduleRequest.includes(aliasPattern)) {
346
- const relativePath = moduleRequest.replace(aliasPattern, '');
347
- // Para alias que apuntan a la raíz (como @/* -> /src/*),
348
- // solo usamos PATH_DIST + relativePath
349
- let newModuleRequest = path.join('/', pathDist, relativePath);
350
- // Normalizar la ruta para eliminar ./ extra y barras duplicadas
351
- newModuleRequest = newModuleRequest
352
- .replace(/\/\.\//g, '/')
353
- .replace(/\/+/g, '/')
354
- .replace(/\\/g, '/'); // Normalizar separadores de Windows a Unix
355
- result = match.replace(moduleRequest, newModuleRequest);
356
- transformed = true;
357
- break;
358
- }
359
- }
360
- }
361
- // 3. Si no es alias ni módulo externo, verificar si necesita transformación de extensión para rutas relativas
362
- if (!transformed) {
363
- // Para template literals que contienen rutas relativas, solo transformar extensiones
364
- let newModuleRequest = moduleRequest;
365
- if (moduleRequest.includes('./') ||
366
- moduleRequest.includes('../')) {
367
- // Transformar extensiones .ts y .vue a .js en template literals relativos
368
- newModuleRequest = moduleRequest
369
- .replace(/\.ts(\b|`)/g, '.js$1')
370
- .replace(/\.vue(\b|`)/g, '.js$1');
371
- if (newModuleRequest !== moduleRequest) {
372
- result = match.replace(moduleRequest, newModuleRequest);
373
- }
374
- }
375
- }
376
- return result;
377
- });
378
- return resultCode;
379
- }
380
- /**
381
- * Reemplaza alias en strings del código JavaScript (no solo en imports)
382
- * Maneja casos como: link.href = 'P@/vendor/sweetalert2/sweetalert2.dark.min.css';
383
- * @param code - El código JavaScript a transformar
384
- * @returns El código con los alias reemplazados en strings
385
- */
386
- async function replaceAliasInStrings(code) {
387
- if (!env.PATH_ALIAS || !env.PATH_DIST) {
388
- return code;
389
- }
390
- const pathAlias = JSON.parse(env.PATH_ALIAS);
391
- const pathDist = env.PATH_DIST;
392
- let resultCode = code; // Regex para encontrar strings que contengan posibles alias
393
- // Busca strings entre comillas simples, dobles o backticks que contengan alias
394
- const stringRegex = /(['"`])([^'"`]+)(['"`])/g;
395
- // Crear un array para procesar todas las coincidencias
396
- const matches = Array.from(resultCode.matchAll(stringRegex));
397
- for (const match of matches) {
398
- const [fullMatch, openQuote, stringContent, closeQuote] = match;
399
- // Verificar que las comillas de apertura y cierre coincidan
400
- if (openQuote !== closeQuote || !stringContent)
401
- continue; // Verificar si el string contiene algún alias
402
- let transformed = false;
403
- let newStringContent = stringContent;
404
- // Ordenar alias por longitud (más largos primero) para priorizar alias más específicos
405
- const sortedAliases = Object.entries(pathAlias).sort((a, b) => {
406
- const aliasA = a[0].replace('/*', '');
407
- const aliasB = b[0].replace('/*', '');
408
- return aliasB.length - aliasA.length;
409
- });
410
- for (const [alias, target] of sortedAliases) {
411
- const aliasPattern = alias.replace('/*', '');
412
- // Verificar coincidencia exacta del alias seguido de '/' o al final del string
413
- const aliasRegex = new RegExp(`^${aliasPattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?=/|$)`);
414
- if (aliasRegex.test(stringContent)) {
415
- // IMPORTANTE: Verificar si es un módulo excluido antes de transformar
416
- if (isExternalModule(stringContent, pathAlias)) {
417
- // Para strings que parecen ser módulos externos, verificar si están excluidos
418
- if (EXCLUDED_MODULES.has(stringContent)) {
419
- // Es un módulo excluido, no transformar
420
- continue;
421
- }
422
- }
423
- // Reemplazar el alias con la ruta del target
424
- const relativePath = stringContent.replace(aliasPattern, '');
425
- // Construir la nueva ruta basada en la configuración del target
426
- let newPath;
427
- // El target puede ser un array de strings o un string
428
- const targetArray = Array.isArray(target) ? target : [target];
429
- const targetPath = targetArray[0];
430
- if (targetPath.startsWith('/')) {
431
- // Si el target empieza con /, es una ruta absoluta desde la raíz del proyecto
432
- // Para targets como "/src/*", solo usamos PATH_DIST + relativePath
433
- // sin incluir el directorio del target en la ruta final
434
- newPath = path.join('/', pathDist, relativePath);
435
- if (env.VERBOSE === 'true') {
436
- console.log(` ✅ Ruta absoluta: pathDist="${pathDist}", relativePath="${relativePath}", newPath="${newPath}"`);
437
- }
438
- }
439
- else {
440
- // Si es una ruta relativa, verificar si ya apunta al directorio de distribución
441
- const cleanTarget = targetPath
442
- .replace('./', '')
443
- .replace('/*', '');
444
- const normalizedPathDist = pathDist.replace('./', '');
445
- if (cleanTarget === normalizedPathDist) {
446
- // Si el target es el mismo que PATH_DIST, no duplicar
447
- newPath = path.join('/', normalizedPathDist, relativePath);
448
- }
449
- else {
450
- // Si es diferente, usar PATH_DIST como base
451
- newPath = path.join('/', normalizedPathDist, cleanTarget, relativePath);
452
- }
453
- }
454
- // Normalizar la ruta para eliminar ./ extra y separadores de Windows
455
- newPath = newPath
456
- .replace(/\/\.\//g, '/')
457
- .replace(/\\/g, '/')
458
- .replace(/\/+/g, '/');
459
- // Para archivos estáticos (CSS, JS, imágenes, etc.), mantener la extensión original
460
- // No agregar .js automáticamente como hacemos con imports
461
- newStringContent = newPath;
462
- transformed = true;
463
- break;
464
- }
465
- } // Si se transformó, reemplazar en el código
466
- if (transformed) {
467
- const newFullMatch = `${openQuote}${newStringContent}${closeQuote}`;
468
- // Usar una expresión regular más específica para evitar reemplazos accidentales
469
- const escapedOriginal = fullMatch.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
470
- const specificRegex = new RegExp(escapedOriginal, 'g');
471
- resultCode = resultCode.replace(specificRegex, newFullMatch);
472
- }
473
- }
474
- return resultCode;
475
- }
476
- /**
477
- * Elimina la etiqueta "html" de una cadena de plantilla.
478
- * @param {string} data - La cadena de plantilla de la cual eliminar la etiqueta "html".
479
- * @returns {Promise<string>} - La cadena de plantilla modificada sin la etiqueta "html".
480
- */
481
- const removehtmlOfTemplateString = async (data) => {
482
- // Regex más específico que busca la etiqueta html seguida de un template literal
483
- // Debe estar al inicio de línea o después de espacios/operadores, no después de punto
484
- const htmlRegExp = /(?:^|[^.])html\s*`/g;
485
- data = data.replace(htmlRegExp, match => {
486
- // Preservar el carácter que no es punto antes de html
487
- const beforeHtml = match.charAt(0) !== 'h' ? match.charAt(0) : '';
488
- return beforeHtml + '`';
489
- });
490
- //remove ""
491
- const htmlGetterRegExp = /,\s*get\s+html\(\)\s*{\s*return\s*html\s*}/g;
492
- data = data.replace(htmlGetterRegExp, '');
493
- return data;
494
- };
495
- /**
496
- * Elimina los comentarios con la etiqueta @preserve de la cadena de datos proporcionada.
497
- * @param {string} data - La cadena de entrada que contiene el código JavaScript.
498
- * @returns {Promise<string>} - Una promesa que se resuelve con la cadena modificada sin los comentarios @preserve.
499
- */
500
- const removePreserverComent = async (data) => {
501
- const preserverRegExp = /\/\*[\s\S]*?@preserve[\s\S]*?\*\/|\/\/.*?@preserve.*?(?=\n|$)/g;
502
- data = data.replace(preserverRegExp, (match) => match.replace(/@preserve/g, ''));
503
- return data;
504
- };
505
- /**
506
- * Elimina la declaración de importación para 'code-tag' de la cadena de datos proporcionada.
507
- * @param {string} data - La cadena de entrada que contiene el código JavaScript.
508
- * @returns {Promise<string>} - Una promesa que se resuelve con la cadena modificada sin la importación de 'code-tag'.
509
- */
510
- const removeCodeTagImport = async (data) => {
511
- // remove import if exist code-tag
512
- const codeTagRegExp = /import\s+{.*}\s+from\s+['"].*code-tag.*['"];/g;
513
- data = data.replace(codeTagRegExp, '');
514
- return data;
515
- };
516
- export async function estandarizaCode(code, file) {
517
- try {
518
- const ast = await parser(file, code);
519
- if (ast && ast.errors && ast.errors.length > 0) {
520
- // Debug: mostrar la estructura del error para entender mejor qué información tenemos
521
- if (env.VERBOSE === 'true') {
522
- console.info('DEBUG - Estructura del error:', JSON.stringify(ast.errors[0], null, 2));
523
- }
524
- // Usar el nuevo sistema de reporte de errores
525
- const detailedErrorReport = analyzeAndFormatMultipleErrors(ast.errors, code, file);
526
- if (env.VERBOSE === 'true') {
527
- logger.error(detailedErrorReport);
528
- }
529
- // También mantener el mensaje simple para el sistema existente
530
- const firstError = ast.errors[0];
531
- throw new Error(firstError?.message || 'Error sin mensaje');
532
- }
533
- code = await replaceAliasImportStatic(file, code);
534
- code = await replaceAliasImportDynamic(code, ast?.module.dynamicImports, file);
535
- code = await replaceAliasInStrings(code);
536
- code = await removehtmlOfTemplateString(code);
537
- code = await removeCodeTagImport(code);
538
- if (env.isProd === 'true') {
539
- code = await removePreserverComent(code);
540
- }
541
- return { code, error: null };
542
- }
543
- catch (error) {
544
- return {
545
- code: '',
546
- error: error instanceof Error ? error.message : 'Unknown error',
547
- };
548
- }
549
- }
550
- //# sourceMappingURL=transforms.js.map
1
+ import e from"node:path";import{env as n}from"node:process";import{logger as r}from"../servicios/logger.js";import{EXCLUDED_MODULES as i}from"../utils/excluded-modules.js";import{getModuleSubPath as a}from"../utils/module-resolver.js";import{analyzeAndFormatMultipleErrors as o}from"./error-reporter.js";import{getOptimizedAliasPath as s,getOptimizedModulePath as c}from"./module-resolution-optimizer.js";import{parser as l}from"./parser.js";const u=new Set(`fs.path.os.crypto.http.https.url.util.events.stream.buffer.child_process.cluster.dgram.dns.net.readline.repl.tls.tty.vm.zlib.assert.module.process.querystring.string_decoder.timers.v8.worker_threads`.split(`.`));function d(e,n){if(e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)||[`public/`,`src/`,`dist/`,`components/`,`utils/`,`assets/`,`styles/`].some(n=>e.startsWith(n)))return!1;let r=e.replace(/^node:/,``);if(u.has(r))return!1;if(i.has(e))return!0;for(let r of Object.keys(n)){let n=r.replace(`/*`,``);if(e.startsWith(n))return!1}return!(e.includes(`.js`)||e.includes(`.ts`)||e.includes(`.vue`)||e.includes(`.css`)||e.includes(`.json`))}export async function replaceAliasImportStatic(i,o){if(!n.PATH_ALIAS||!n.PATH_DIST)return o;let l=JSON.parse(n.PATH_ALIAS),u=o,f=Array.from(u.matchAll(/import\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*(?:\{[^}]*\}|\*\s+as\s+\w+|\w+))*\s+from\s+)?['"`]([^'"`]+)['"`]/g));for(let o of f){let[,f]=o;if(!f)continue;let p=null,m=!1;if(!m&&d(f,l))try{let e=await c(f,i);if(e===null)continue;if(e)p=e,m=!0;else{let e=a(f,i);if(e===null)continue;e&&(p=e,m=!0)}}catch(e){n.VERBOSE===`true`&&r.warn(`Error resolviendo módulo ${f}: ${e instanceof Error?e.message:String(e)}`)}if(!m){let r=s(f);if(r){let e=r;e.endsWith(`.ts`)||e.endsWith(`.vue`)?e=e.replace(/\.(ts|vue)$/,`.js`):/\.(js|mjs|css|json)$/.test(e)||(e+=`.js`),p=e,m=!0}else for(let[r]of Object.entries(l)){let i=r.replace(`/*`,``);if(f.startsWith(i)){let r=f.replace(i,``),a=e.join(`/`,n.PATH_DIST,r);a=a.replace(/\/\.\//g,`/`).replace(/\\/g,`/`),a.endsWith(`.ts`)||a.endsWith(`.vue`)?a=a.replace(/\.(ts|vue)$/,`.js`):/\.(js|mjs|css|json)$/.test(a)||(a+=`.js`),p=a,m=!0;break}}}if(!m&&(f.startsWith(`./`)||f.startsWith(`../`))){let e=f;e.endsWith(`.ts`)||e.endsWith(`.vue`)?(e=e.replace(/\.(ts|vue)$/,`.js`),p=e,m=!0):/\.(js|mjs|css|json)$/.test(e)||(p=e+`.js`,m=!0)}if(m&&p){let e=RegExp(`(['"\`])${f.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}\\1`,`g`);u=u.replace(e,`$1${p}$1`)}}return u}async function p(i,o,l){if(!n.PATH_ALIAS||!n.PATH_DIST)return i;let u=JSON.parse(n.PATH_ALIAS),f=n.PATH_DIST,p=i,m=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,h=/import\s*\(\s*`([^`]+)`\s*\)/g,g=Array.from(p.matchAll(m));for(let i of g){let[,o]=i;if(!o)continue;let m=null,h=!1;if(!h&&d(o,u))try{let e=await c(o,l);if(e===null)continue;if(e)m=e,h=!0;else{let e=a(o,l);if(e===null)continue;e&&(m=e,h=!0)}}catch(e){n.VERBOSE===`true`&&r.warn(`Error resolviendo módulo dinámico ${o}: ${e instanceof Error?e.message:String(e)}`)}if(!h){let n=s(o);if(n){let e=n;e.endsWith(`.ts`)||e.endsWith(`.vue`)?e=e.replace(/\.(ts|vue)$/,`.js`):/\.(js|mjs|css|json)$/.test(e)||(e+=`.js`),m=e,h=!0}else for(let[n]of Object.entries(u)){let r=n.replace(`/*`,``);if(o.startsWith(r)){let n=o.replace(r,``),i=e.join(`/`,f,n);i=i.replace(/\/\.\//g,`/`).replace(/\\/g,`/`),i.endsWith(`.ts`)||i.endsWith(`.vue`)?i=i.replace(/\.(ts|vue)$/,`.js`):/\.(js|mjs|css|json)$/.test(i)||(i+=`.js`),m=i,h=!0;break}}}if(!h&&(o.startsWith(`./`)||o.startsWith(`../`))){let e=o;e.endsWith(`.ts`)||e.endsWith(`.vue`)?(e=e.replace(/\.(ts|vue)$/,`.js`),m=e,h=!0):/\.(js|mjs|css|json)$/.test(e)||(m=e+`.js`,h=!0)}if(h&&m){let e=RegExp(`import\\s*\\(\\s*(['"])${o.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}\\1\\s*\\)`,`g`);p=p.replace(e,`import($1${m}$1)`)}}return p=p.replace(h,(i,o)=>{let s=!1,c=i;if(!s&&d(o,u))try{let e=a(o,l);if(e===null)return i;e&&(c=i.replace(o,e),s=!0)}catch(e){n.VERBOSE===`true`&&r.warn(`Error resolviendo módulo template literal ${o}: ${e instanceof Error?e.message:String(e)}`)}if(!s)for(let[n]of Object.entries(u)){let r=n.replace(`/*`,``);if(o.includes(r)){let n=o.replace(r,``),a=e.join(`/`,f,n);a=a.replace(/\/\.\//g,`/`).replace(/\/+/g,`/`).replace(/\\/g,`/`),c=i.replace(o,a),s=!0;break}}if(!s){let e=o;(o.includes(`./`)||o.includes(`../`))&&(e=o.replace(/\.ts(\b|`)/g,`.js$1`).replace(/\.vue(\b|`)/g,`.js$1`),e!==o&&(c=i.replace(o,e)))}return c}),p}async function m(r){if(!n.PATH_ALIAS||!n.PATH_DIST)return r;let a=JSON.parse(n.PATH_ALIAS),o=n.PATH_DIST,s=r,c=Array.from(s.matchAll(/(['"`])([^'"`]+)(['"`])/g));for(let r of c){let[c,l,u,f]=r;if(l!==f||!u)continue;let p=!1,m=u,h=Object.entries(a).sort((e,n)=>{let r=e[0].replace(`/*`,``);return n[0].replace(`/*`,``).length-r.length});for(let[r,s]of h){let c=r.replace(`/*`,``);if(RegExp(`^${c.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}(?=/|$)`).test(u)){if(d(u,a)&&i.has(u))continue;let r=u.replace(c,``),l,f=(Array.isArray(s)?s:[s])[0];if(f.startsWith(`/`))l=e.join(`/`,o,r),n.VERBOSE===`true`&&console.log(` ✅ Ruta absoluta: pathDist="${o}", relativePath="${r}", newPath="${l}"`);else{let n=f.replace(`./`,``).replace(`/*`,``),i=o.replace(`./`,``);l=n===i?e.join(`/`,i,r):e.join(`/`,i,n,r)}l=l.replace(/\/\.\//g,`/`).replace(/\\/g,`/`).replace(/\/+/g,`/`),m=l,p=!0;break}}if(p){let e=`${l}${m}${f}`,n=c.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),r=new RegExp(n,`g`);s=s.replace(r,e)}}return s}export const removehtmlOfTemplateString=async e=>(e=e.replace(/(?:^|[^.])html\s*`/g,e=>(e.charAt(0)===`h`?``:e.charAt(0))+"`"),e=e.replace(/,\s*get\s+html\(\)\s*{\s*return\s*html\s*}/g,``),e);const g=async e=>(e=e.replace(/\/\*[\s\S]*?@preserve[\s\S]*?\*\/|\/\/.*?@preserve.*?(?=\n|$)/g,e=>e.replace(/@preserve/g,``)),e),_=async e=>(e=e.replace(/import\s+{.*}\s+from\s+['"].*code-tag.*['"];/g,``),e);export async function estandarizaCode(e,i){try{let a=await l(i,e);if(a&&a.errors&&a.errors.length>0){n.VERBOSE===`true`&&console.info(`DEBUG - Estructura del error:`,JSON.stringify(a.errors[0],null,2));let s=o(a.errors,e,i);n.VERBOSE===`true`&&r.error(s);let c=a.errors[0];throw Error(c?.message||`Error sin mensaje`)}return e=await replaceAliasImportStatic(i,e),e=await p(e,a?.module.dynamicImports,i),e=await m(e),e=await _(e),n.isProd===`true`&&(e=await g(e)),{code:e,error:null}}catch(e){return{code:``,error:e instanceof Error?e.message:`Unknown error`}}}