versacompiler 2.0.8 → 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.
- package/dist/compiler/compile.js +8 -9
- package/dist/compiler/error-reporter.js +2 -2
- package/dist/compiler/linter.js +1 -1
- package/dist/compiler/minify.js +1 -1
- package/dist/compiler/minifyTemplate.js +1 -0
- package/dist/compiler/module-resolution-optimizer.js +1 -1
- package/dist/compiler/parser.js +1 -1
- package/dist/compiler/performance-monitor.js +7 -7
- package/dist/compiler/tailwindcss.js +1 -1
- package/dist/compiler/transform-optimizer.js +1 -1
- package/dist/compiler/transformTStoJS.js +1 -1
- package/dist/compiler/transforms.js +1 -1
- package/dist/compiler/typescript-compiler.js +1 -1
- package/dist/compiler/typescript-error-parser.js +8 -8
- package/dist/compiler/typescript-manager.js +2 -2
- package/dist/compiler/typescript-sync-validator.js +2 -2
- package/dist/compiler/typescript-worker-pool.js +1 -1
- package/dist/compiler/typescript-worker-thread.cjs +3 -22
- package/dist/compiler/typescript-worker.js +1 -1
- package/dist/compiler/vuejs.js +22 -22
- package/dist/hrm/VueHRM.js +1 -1
- package/dist/hrm/initHRM.js +1 -1
- package/dist/main.js +3 -3
- package/dist/servicios/browserSync.js +2 -7
- package/dist/servicios/file-watcher.js +3 -3
- package/dist/servicios/readConfig.js +2 -54
- package/dist/utils/module-resolver.js +1 -1
- package/dist/utils/proxyValidator.js +1 -1
- package/dist/utils/resolve-bin.js +1 -1
- package/dist/utils/vue-types-setup.js +1 -1
- package/dist/wrappers/eslint-node.js +147 -1
- package/dist/wrappers/oxlint-node.js +1 -1
- package/dist/wrappers/tailwind-node.js +1 -1
- package/package.json +103 -109
package/dist/compiler/compile.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import{createHash as e}from"node:crypto";import{glob as t,mkdir as n,readFile as r,stat as i,unlink as a,writeFile as o}from"node:fs/promises";import s from"node:os";import c from"node:path";import l,{argv as u,cwd as d,env as f}from"node:process";import{logger as p,setProgressManagerGetter as m}from"../servicios/logger.js";import{promptUser as h}from"../utils/promptUser.js";import{showTimingForHumans as g}from"../utils/utils.js";m(()=>Q.getInstance());let _,v,y,b,x,S,C,w,T,E,D;class O{static instance;isInitialized=!1;loadedModules=new Set;modulePool=new Map;loadingPromises=new Map;usageStats=new Map;preloadQueue=new Set;backgroundLoader=null;HOT_MODULES=[`chalk`,`parser`];currentContext=null;constructor(){this.startBackgroundPreloading()}static getInstance(){return O.instance||=new O,O.instance}startBackgroundPreloading(){this.backgroundLoader=this.preloadCriticalModules()}async preloadCriticalModules(){try{let e=this.HOT_MODULES.map(e=>this.ensureModuleLoaded(e).catch(()=>{}));await Promise.allSettled(e)}catch{}}async preloadForContext(e,t=new Set){this.currentContext=e,this.backgroundLoader&&await this.backgroundLoader;let n=[];e===`batch`||e===`watch`?n.push(`transforms`,`vue`,`typescript`,`module-resolution-optimizer`):(t.has(`.vue`)&&n.push(`vue`),(t.has(`.ts`)||t.has(`.vue`))&&n.push(`typescript`),this.loadedModules.has(`transforms`)||n.push(`transforms`));let r=n.map(e=>this.ensureModuleLoaded(e).catch(()=>{console.warn(`Warning: No se pudo precargar módulo ${e}`)}));await Promise.allSettled(r)}async ensureModuleLoaded(e){if(this.modulePool.has(e))return this.updateUsageStats(e),this.modulePool.get(e);if(this.loadingPromises.has(e))return this.loadingPromises.get(e);let t=this.loadModuleInternal(e);this.loadingPromises.set(e,t);try{let n=await t;return this.modulePool.set(e,n),this.loadedModules.add(e),this.updateUsageStats(e),n}finally{this.loadingPromises.delete(e)}}updateUsageStats(e){let t=this.usageStats.get(e)||0;this.usageStats.set(e,t+1)}async loadModuleInternal(e){switch(e){case`chalk`:return this.loadChalk();case`parser`:return this.loadParser();case`transforms`:return this.loadTransforms();case`vue`:return this.loadVue();case`typescript`:return this.loadTypeScript();case`minify`:return this.loadMinify();case`tailwind`:return this.loadTailwind();case`linter`:return this.loadLinter();case`transform-optimizer`:return this.loadTransformOptimizer();case`module-resolution-optimizer`:return this.loadModuleResolutionOptimizer();default:throw Error(`Módulo desconocido: ${e}`)}}async loadChalk(){return _||=(await import(`chalk`)).default,_}async loadParser(){if(!x){let e=await import(`./parser.js`);x=e.getCodeFile}return x}async loadTransforms(){if(!C){let e=await import(`./transforms.js`);C=e.estandarizaCode}return C}async loadVue(){if(!T){let e=await import(`./vuejs.js`);T=e.preCompileVue}return T}async loadTypeScript(){if(!w){let e=await import(`./typescript-manager.js`);w=e.preCompileTS}return w}async loadMinify(){if(!b){let e=await import(`./minify.js`);b=e.minifyJS}return b}async loadTailwind(){if(!S){let e=await import(`./tailwindcss.js`);S=e.generateTailwindCSS}return S}async loadLinter(){if(!v||!y){let e=await import(`./linter.js`);v=e.ESLint,y=e.OxLint}return{ESLint:v,OxLint:y}}async loadTransformOptimizer(){if(!E){let e=await import(`./transform-optimizer.js`);E=e.TransformOptimizer.getInstance()}return E}async loadModuleResolutionOptimizer(){if(!D){let e=await import(`./module-resolution-optimizer.js`);D=e.ModuleResolutionOptimizer.getInstance()}return D}getPerformanceStats(){let e=Array.from(this.usageStats.entries()).sort((e,t)=>t[1]-e[1]).slice(0,5).map(([e])=>e);return{loadedModules:Array.from(this.loadedModules),usageStats:Object.fromEntries(this.usageStats),poolSize:this.modulePool.size,loadingInProgress:Array.from(this.loadingPromises.keys()),mostUsedModules:e}}cleanupUnusedModules(){let e=1;for(let[e,t]of this.usageStats)t<1&&!this.HOT_MODULES.includes(e)&&(this.modulePool.delete(e),this.loadedModules.delete(e),this.usageStats.delete(e))}reset(){this.isInitialized=!1,this.loadedModules.clear(),this.modulePool.clear(),this.loadingPromises.clear(),this.usageStats.clear(),this.preloadQueue.clear(),this.currentContext=null,this.backgroundLoader=null,this.startBackgroundPreloading()}}async function k(){return _||=(await import(`chalk`)).default,_}async function oe(){if(!v||!y){let e=await import(`./linter.js`);v=e.ESLint,y=e.OxLint}return{ESLint:v,OxLint:y}}async function se(){if(!b){let e=await import(`./minify.js`);b=e.minifyJS}return b}async function A(){if(!x){let e=await import(`./parser.js`);x=e.getCodeFile}return x}async function j(){if(!S){let e=await import(`./tailwindcss.js`);S=e.generateTailwindCSS}return S}async function M(){if(!C){let e=await import(`./transforms.js`);C=e.estandarizaCode}return C}async function ce(){if(!w){let e=await import(`./typescript-manager.js`);w=e.preCompileTS}return w}async function le(){if(!T){let e=await import(`./vuejs.js`);T=e.preCompileVue}return T}const N=[],P=[],F=[`NODE_ENV`,`isPROD`,`TAILWIND`,`ENABLE_LINTER`,`VERBOSE`,`typeCheck`,`PATH_ALIAS`,`tailwindcss`,`linter`,`tsconfigFile`];class I{cache=new Map;maxEntries=200;maxMemory=50*1024*1024;currentMemoryUsage=0;fileWatchers=new Map;dependencyGraph=new Map;reverseDependencyGraph=new Map;packageJsonPath=c.join(d(),`package.json`);nodeModulesPath=c.join(d(),`node_modules`);isWatchingDependencies=!1;async generateContentHash(t){try{let n=await r(t,`utf8`);return e(`sha256`).update(n).digest(`hex`)}catch{let n=`${t}-${Date.now()}`;return e(`sha256`).update(n).digest(`hex`)}}generateConfigHash(){try{let t={isPROD:f.isPROD||`false`,TAILWIND:f.TAILWIND||`false`,ENABLE_LINTER:f.ENABLE_LINTER||`false`,PATH_ALIAS:f.PATH_ALIAS||`{}`,tailwindcss:f.tailwindcss||`false`,linter:f.linter||`false`,tsconfigFile:f.tsconfigFile||`./tsconfig.json`},n=JSON.stringify(t,Object.keys(t).sort());return e(`sha256`).update(n).digest(`hex`).substring(0,12)}catch{return`no-config`}}generateEnvHash(){try{let t=F.map(e=>`${e}=${f[e]||``}`).join(`|`);return e(`sha256`).update(t).digest(`hex`).substring(0,12)}catch{return`no-env`}}async generateDependencyHash(){try{let t=e(`sha256`),n=c.join(d(),`package.json`),a=await r(n,`utf8`),o=JSON.parse(a),s={...o.dependencies,...o.devDependencies},l=JSON.stringify(s,Object.keys(s).sort());t.update(`package:${l}`);try{let e=c.join(d(),`package-lock.json`),n=await r(e,`utf8`),i=JSON.parse(n),a={};if(i.packages){for(let[e,t]of Object.entries(i.packages))if(e&&e!==``&&typeof t==`object`&&t){let n=e.replace(`node_modules/`,``);t.version&&(a[n]=t.version)}}t.update(`lock:${JSON.stringify(a,Object.keys(a).sort())}`)}catch{}try{let e=c.join(d(),`node_modules`),n=await i(e);t.update(`nmtime:${n.mtimeMs}`);let r=Object.keys(s).slice(0,10);for(let n of r)try{let r=c.join(e,n),a=await i(r);t.update(`${n}:${a.mtimeMs}`)}catch{t.update(`${n}:missing`)}}catch{t.update(`nmtime:none`)}return t.digest(`hex`).substring(0,16)}catch(t){return e(`sha256`).update(`error:${t instanceof Error?t.message:`unknown`}`).digest(`hex`).substring(0,16)}}async generateCacheKey(e){let t=await this.generateContentHash(e),n=this.generateConfigHash(),r=this.generateEnvHash(),i=await this.generateDependencyHash();return`${e}|${t.substring(0,12)}|${n}|${r}|${i}`}async isValid(e){let t=this.cache.get(e);if(!t)return!1;try{await i(t.outputPath);let n=await this.generateContentHash(e);if(t.contentHash!==n)return this.cache.delete(e),!1;let r=this.generateConfigHash();if(t.configHash!==r)return this.cache.delete(e),!1;let a=this.generateEnvHash();if(t.envHash!==a)return this.cache.delete(e),!1;let o=await this.generateDependencyHash();if(t.dependencyHash!==o)return this.cache.delete(e),!1;let s=await i(e);return s.mtimeMs>t.mtime?(this.cache.delete(e),!1):(t.lastUsed=Date.now(),!0)}catch{return this.cache.delete(e),!1}}async set(e,t){try{let n=await i(e),r=await this.generateContentHash(e),a=this.generateConfigHash(),o=this.generateEnvHash(),s=await this.generateDependencyHash(),c={contentHash:r,configHash:a,envHash:o,dependencyHash:s,mtime:n.mtimeMs,outputPath:t,lastUsed:Date.now(),size:n.size};this.evictIfNeeded(c.size),this.cache.set(e,c),this.currentMemoryUsage+=c.size}catch(t){console.warn(`Warning: No se pudo cachear ${e}:`,t)}}evictIfNeeded(e){for(;this.cache.size>=this.maxEntries*.8;)this.evictLRU();for(;this.currentMemoryUsage+e>this.maxMemory*.8&&this.cache.size>0;)this.evictLRU();let t=l.memoryUsage(),n=t.heapUsed/(1024*1024);if(n>200&&this.cache.size>50){let e=Math.min(this.cache.size-50,10);for(let t=0;t<e;t++)this.evictLRU()}}evictLRU(){let e=``,t=1/0;for(let[n,r]of this.cache)r.lastUsed<t&&(t=r.lastUsed,e=n);if(e){let t=this.cache.get(e);t&&(this.currentMemoryUsage-=t.size,this.cache.delete(e))}}cleanOldEntries(e=20){let t=0;for(let n=0;n<e&&this.cache.size>0;n++){let e=this.cache.size;if(this.evictLRU(),this.cache.size<e)t++;else break}return t}async load(e){try{if(f.cleanCache===`true`){this.cache.clear(),this.currentMemoryUsage=0;try{await a(e)}catch{}return}let t=await r(e,`utf-8`),n=JSON.parse(t);for(let[e,t]of Object.entries(n)){let n=t;n.contentHash&&n.outputPath&&n.mtime&&(this.cache.set(e,n),this.currentMemoryUsage+=n.size||0)}}catch{this.cache.clear(),this.currentMemoryUsage=0}}async save(e,t){try{await n(t,{recursive:!0});let r=Object.fromEntries(this.cache);await o(e,JSON.stringify(r,null,2))}catch(e){console.warn(`Warning: No se pudo guardar el cache:`,e)}}clear(){this.cache.clear(),this.currentMemoryUsage=0}getOutputPath(e){let t=this.cache.get(e);return t?.outputPath||``}getStats(){return{entries:this.cache.size,memoryUsage:this.currentMemoryUsage,hitRate:0}}async startDependencyWatching(){if(!this.isWatchingDependencies)try{let e=await import(`chokidar`);if(await this.fileExists(this.packageJsonPath)){let t=e.watch(this.packageJsonPath,{persistent:!1,ignoreInitial:!0});t.on(`change`,()=>{p.info(`📦 package.json modificado - invalidando cache de dependencias`),this.invalidateByDependencyChange()}),this.fileWatchers.set(`package.json`,t)}if(await this.fileExists(this.nodeModulesPath)){let t=e.watch(this.nodeModulesPath,{persistent:!1,ignoreInitial:!0,depth:1,ignored:/(^|[/\\])\../});t.on(`addDir`,e=>{p.info(`📦 Nueva dependencia instalada: ${e.split(/[/\\]/).pop()}`),this.invalidateByDependencyChange()}),t.on(`unlinkDir`,e=>{p.info(`📦 Dependencia eliminada: ${e.split(/[/\\]/).pop()}`),this.invalidateByDependencyChange()}),this.fileWatchers.set(`node_modules`,t)}this.isWatchingDependencies=!0,p.info(`🔍 Vigilancia de dependencias iniciada`)}catch(e){p.warn(`⚠️ No se pudo iniciar vigilancia de dependencias:`,e)}}async stopDependencyWatching(){for(let[e,t]of this.fileWatchers)try{await t.close(),p.info(`🛑 Vigilancia detenida: ${e}`)}catch(t){p.warn(`⚠️ Error cerrando watcher ${e}:`,t)}this.fileWatchers.clear(),this.isWatchingDependencies=!1}registerDependencies(e,t){let n=this.dependencyGraph.get(e);if(n)for(let t of n){let n=this.reverseDependencyGraph.get(t);n&&(n.delete(e),n.size===0&&this.reverseDependencyGraph.delete(t))}let r=new Set(t);this.dependencyGraph.set(e,r);for(let t of r)this.reverseDependencyGraph.has(t)||this.reverseDependencyGraph.set(t,new Set),this.reverseDependencyGraph.get(t).add(e)}invalidateByDependencyChange(){let e=0;for(let[t]of this.cache)this.cache.delete(t),e++;this.dependencyGraph.clear(),this.reverseDependencyGraph.clear(),this.currentMemoryUsage=0,p.info(`🗑️ Cache invalidado: ${e} archivos (cambio en dependencias)`)}invalidateCascade(e){let t=[],n=new Set([e]),r=[e];for(;r.length>0;){let e=r.shift(),t=this.reverseDependencyGraph.get(e);if(t)for(let e of t)n.has(e)||(n.add(e),r.push(e))}for(let e of n)if(this.cache.has(e)){let n=this.cache.get(e);this.currentMemoryUsage-=n.size,this.cache.delete(e),t.push(e)}return t.length>0&&p.info(`🔄 Invalidación cascada: ${t.length} archivos afectados por ${e}`),t}async fileExists(e){try{return await i(e),!0}catch{return!1}}getAdvancedStats(){return{entries:this.cache.size,memoryUsage:this.currentMemoryUsage,hitRate:0,dependencyNodes:this.dependencyGraph.size,watchingDependencies:this.isWatchingDependencies,activeWatchers:this.fileWatchers.size}}}const L=new I,R=c.join(c.resolve(f.PATH_PROY||d(),`compiler`),`.cache`),z=c.join(R,`versacompile-cache.json`);async function B(){await L.load(z),(f.WATCH_MODE===`true`||u.includes(`--watch`)||u.includes(`-w`))&&await L.startDependencyWatching()}async function ue(){await L.save(z,R)}function V(e,t,n,r=`error`,i,a){N.push({file:e,stage:t,message:n,severity:r,details:i,help:a,timestamp:Date.now()})}function H(e,t,n,r=[]){let i=P.find(t=>t.stage===e);i?(i.errors+=t,i.success+=n,i.files.push(...r)):P.push({stage:e,errors:t,success:n,files:[...r]})}async function U(e,t,n,r,i=!1){let a=e instanceof Error?e.message:e,o=e instanceof Error?e.stack:void 0;if(V(t,n,a,`error`,o),H(n,1,0,[t]),r===`individual`||r===`watch`){let e=await k(),r=c.basename(t),s=await Y(n);if(i){if(p.error(e.red(`❌ Error en etapa ${s(n)} - ${r}:`)),p.error(e.red(a)),o&&(n===`typescript`||n===`vue`)){let t=o.split(`
|
|
2
|
-
`).slice(0,5)
|
|
3
|
-
`)[0];p.error(e.red(`❌ Error en ${s(n)}: ${r}`)),p.error(e.red(` ${t}`)),p.info(e.yellow(`💡 Usa --verbose para ver detalles completos`))}}}function W(e,t){H(t,0,1,[e])}function G(){
|
|
4
|
-
`).slice(0,5)
|
|
5
|
-
`),
|
|
6
|
-
|
|
7
|
-
`+t.details:``}`;await U(Error(e),`tailwind.config.js`,`tailwind`,n,f.VERBOSE===`true`)}}let o=Date.now(),s=normalizeRuta(e),l=getOutputPath(s);if((n===`watch`||n===`individual`)&&await $(s))return f.VERBOSE===`true`&&p.info(`⏭️ Archivo omitido (cache): ${c.basename(s)}`),{success:!0,cached:!0,output:L.getOutputPath(s)||l,action:`cached`};n===`individual`&&f.VERBOSE===`true`&&p.info(`🔜 Fuente: ${s}`);let u=await me(s,l,n);if(u.error)throw Error(u.error);(n===`watch`||n===`individual`)&&await L.set(s,l);let d=Date.now(),m=g(d-o);if(n===`individual`){f.VERBOSE===`true`&&(p.info(`🔚 Destino: ${l}`),p.info(`⏱️ Tiempo: ${m}`));let e=await k();p.info(e.green(`✅ Compilación exitosa: ${c.basename(s)}`))}return{success:!0,output:l,action:u.action}}catch(t){let n=t instanceof Error?t.message:String(t);return f.VERBOSE===`true`&&p.error(`❌ Error en compilación de ${c.basename(e)}: ${n}`),{success:!1,output:``,error:n}}}let Z=0;class Q{static instance;progressActive=!1;lastProgressLine=``;logBuffer=[];originalConsoleLog;originalConsoleError;originalConsoleWarn;hasProgressLine=!1;constructor(){this.originalConsoleLog=console.log,this.originalConsoleError=console.error,this.originalConsoleWarn=console.warn}static getInstance(){return Q.instance||=new Q,Q.instance}interceptConsole(){console.log=(...e)=>{this.addLog(e.map(e=>String(e)).join(` `))},console.error=(...e)=>{this.addLog(e.map(e=>String(e)).join(` `))},console.warn=(...e)=>{this.addLog(e.map(e=>String(e)).join(` `))}}restoreConsole(){console.log=this.originalConsoleLog,console.error=this.originalConsoleError,console.warn=this.originalConsoleWarn}startProgress(){this.progressActive=!0,this.logBuffer=[],this.hasProgressLine=!1,this.interceptConsole();let e=`━`.repeat(48);l.stdout.write(`
|
|
1
|
+
import{createHash as e}from"node:crypto";import{glob as t,mkdir as n,readFile as r,stat as i,unlink as a,writeFile as o}from"node:fs/promises";import s from"node:os";import c from"node:path";import l,{argv as u,cwd as d,env as f}from"node:process";import{logger as p,setProgressManagerGetter as m}from"../servicios/logger.js";import{promptUser as h}from"../utils/promptUser.js";import{showTimingForHumans as g}from"../utils/utils.js";m(()=>Z.getInstance());async function _(e,t,n){let r=new Promise((e,r)=>setTimeout(()=>r(Error(`Timeout en ${n} (${t}ms)`)),t));return Promise.race([e,r])}let v,y,b,x,S,C,w,T,E,D,O;class k{static instance;isInitialized=!1;loadedModules=new Set;modulePool=new Map;loadingPromises=new Map;usageStats=new Map;preloadQueue=new Set;backgroundLoader=null;preloadLock=null;MAX_POOL_MEMORY=100*1024*1024;MAX_POOL_SIZE=15;HOT_MODULES=[`chalk`,`parser`];currentContext=null;constructor(){this.startBackgroundPreloading()}static getInstance(){return k.instance||(k.instance=new k),k.instance}startBackgroundPreloading(){this.backgroundLoader=this.preloadCriticalModules()}async preloadCriticalModules(){try{let e=this.HOT_MODULES.map(e=>this.ensureModuleLoaded(e).catch(()=>{}));await Promise.allSettled(e)}catch{}}async preloadForContext(e,t=new Set){if(this.preloadLock){await this.preloadLock;return}this.preloadLock=this.doPreload(e,t);try{await this.preloadLock}finally{this.preloadLock=null}}async doPreload(e,t=new Set){this.currentContext=e,this.backgroundLoader&&await this.backgroundLoader;let n=[];e===`batch`||e===`watch`?n.push(`transforms`,`vue`,`typescript`,`module-resolution-optimizer`):(t.has(`.vue`)&&n.push(`vue`),(t.has(`.ts`)||t.has(`.vue`))&&n.push(`typescript`),this.loadedModules.has(`transforms`)||n.push(`transforms`));for(let e of[[`chalk`,`parser`],[`transforms`],[`vue`,`typescript`],[`module-resolution-optimizer`],[`minify`]]){let t=e.filter(e=>n.includes(e));t.length>0&&await Promise.allSettled(t.map(async e=>{try{await this.ensureModuleLoaded(e)}catch(t){if(f.VERBOSE===`true`){let n=t instanceof Error?t.message:String(t);console.warn(`[Verbose] Warning: No se pudo precargar módulo ${e}:`,n)}}}))}}async ensureModuleLoaded(e){if(this.modulePool.has(e))return this.updateUsageStats(e),this.modulePool.get(e);if(this.loadingPromises.has(e))return this.loadingPromises.get(e);let t=this.loadModuleInternal(e);this.loadingPromises.set(e,t);try{let n=await t;return this.modulePool.set(e,n),this.loadedModules.add(e),this.updateUsageStats(e),n}finally{this.loadingPromises.delete(e)}}updateUsageStats(e){let t=this.usageStats.get(e)||0;this.usageStats.set(e,t+1)}async loadModuleInternal(e){switch(e){case`chalk`:return this.loadChalk();case`parser`:return this.loadParser();case`transforms`:return this.loadTransforms();case`vue`:return this.loadVue();case`typescript`:return this.loadTypeScript();case`minify`:return this.loadMinify();case`tailwind`:return this.loadTailwind();case`linter`:return this.loadLinter();case`transform-optimizer`:return this.loadTransformOptimizer();case`module-resolution-optimizer`:return this.loadModuleResolutionOptimizer();default:throw Error(`Módulo desconocido: ${e}`)}}async loadChalk(){return v||(v=(await import(`chalk`)).default),v}async loadParser(){return S||(S=(await import(`./parser.js`)).getCodeFile),S}async loadTransforms(){return w||(w=(await import(`./transforms.js`)).estandarizaCode),w}async loadVue(){return E||(E=(await import(`./vuejs.js`)).preCompileVue),E}async loadTypeScript(){return T||(T=(await import(`./typescript-manager.js`)).preCompileTS),T}async loadMinify(){return x||(x=(await import(`./minify.js`)).minifyWithTemplates),x}async loadTailwind(){return C||(C=(await import(`./tailwindcss.js`)).generateTailwindCSS),C}async loadLinter(){if(!y||!b){let e=await import(`./linter.js`);y=e.ESLint,b=e.OxLint}return{ESLint:y,OxLint:b}}async loadTransformOptimizer(){return D||(D=(await import(`./transform-optimizer.js`)).TransformOptimizer.getInstance()),D}async loadModuleResolutionOptimizer(){return O||(O=(await import(`./module-resolution-optimizer.js`)).ModuleResolutionOptimizer.getInstance()),O}getPerformanceStats(){let e=Array.from(this.usageStats.entries()).sort((e,t)=>t[1]-e[1]).slice(0,5).map(([e])=>e);return{loadedModules:Array.from(this.loadedModules),usageStats:Object.fromEntries(this.usageStats),poolSize:this.modulePool.size,loadingInProgress:Array.from(this.loadingPromises.keys()),mostUsedModules:e}}estimateModuleSize(e){let t={"transform-optimizer":5*1024*1024,typescript:10*1024*1024,vue:8*1024*1024,"module-resolution-optimizer":3*1024*1024,transforms:2*1024*1024,minify:2*1024*1024,linter:1*1024*1024,parser:500*1024,chalk:100*1024,default:500*1024};return t[e]??t.default}getPoolMemoryUsage(){let e=0;for(let t of this.modulePool.keys())e+=this.estimateModuleSize(t);return e}cleanupUnusedModules(){let e=this.getPoolMemoryUsage(),t=this.modulePool.size;if(e>this.MAX_POOL_MEMORY||t>this.MAX_POOL_SIZE){let n=Array.from(this.usageStats.entries()).sort((e,t)=>e[1]-t[1]).filter(([e])=>!this.HOT_MODULES.includes(e)),r=this.MAX_POOL_MEMORY*.7,i=this.MAX_POOL_SIZE*.7;for(let[e]of n){this.modulePool.delete(e),this.loadedModules.delete(e),this.usageStats.delete(e);let t=this.getPoolMemoryUsage(),n=this.modulePool.size;if(t<=r&&n<=i)break}f.VERBOSE===`true`&&console.log(`[ModuleManager] Limpieza: ${t} → ${this.modulePool.size} módulos, ${Math.round(e/1024/1024)}MB → ${Math.round(this.getPoolMemoryUsage()/1024/1024)}MB`)}}reset(){this.isInitialized=!1,this.loadedModules.clear(),this.modulePool.clear(),this.loadingPromises.clear(),this.usageStats.clear(),this.preloadQueue.clear(),this.currentContext=null,this.backgroundLoader=null,this.startBackgroundPreloading()}}async function A(){return v||(v=(await import(`chalk`)).default),v}async function j(){if(!y||!b){let e=await import(`./linter.js`);y=e.ESLint,b=e.OxLint}return{ESLint:y,OxLint:b}}async function oe(){return x||(x=(await import(`./minify.js`)).minifyWithTemplates),x}async function M(){return S||(S=(await import(`./parser.js`)).getCodeFile),S}async function N(){return C||(C=(await import(`./tailwindcss.js`)).generateTailwindCSS),C}async function se(){return w||(w=(await import(`./transforms.js`)).estandarizaCode),w}async function ce(){return T||(T=(await import(`./typescript-manager.js`)).preCompileTS),T}async function le(){return E||(E=(await import(`./vuejs.js`)).preCompileVue),E}const P=[],F=[],I=[`NODE_ENV`,`isPROD`,`TAILWIND`,`ENABLE_LINTER`,`VERBOSE`,`typeCheck`,`PATH_ALIAS`,`tailwindcss`,`linter`,`tsconfigFile`];class L{cache=new Map;maxEntries=200;maxMemory=50*1024*1024;currentMemoryUsage=0;fileWatchers=new Map;dependencyGraph=new Map;reverseDependencyGraph=new Map;packageJsonPath=c.join(d(),`package.json`);nodeModulesPath=c.join(d(),`node_modules`);isWatchingDependencies=!1;async generateContentHash(t){try{let n=await r(t,`utf8`);return e(`sha256`).update(n).digest(`hex`)}catch{let n=`${t}-${Date.now()}`;return e(`sha256`).update(n).digest(`hex`)}}generateConfigHash(){try{let t={isPROD:f.isPROD||`false`,TAILWIND:f.TAILWIND||`false`,ENABLE_LINTER:f.ENABLE_LINTER||`false`,PATH_ALIAS:f.PATH_ALIAS||`{}`,tailwindcss:f.tailwindcss||`false`,linter:f.linter||`false`,tsconfigFile:f.tsconfigFile||`./tsconfig.json`},n=JSON.stringify(t,Object.keys(t).sort());return e(`sha256`).update(n).digest(`hex`).substring(0,12)}catch{return`no-config`}}generateEnvHash(){try{let t=I.map(e=>`${e}=${f[e]||``}`).join(`|`);return e(`sha256`).update(t).digest(`hex`).substring(0,12)}catch{return`no-env`}}async generateDependencyHash(){try{let t=e(`sha256`),n=await r(c.join(d(),`package.json`),`utf8`),a=JSON.parse(n),o={...a.dependencies,...a.devDependencies},s=JSON.stringify(o,Object.keys(o).sort());t.update(`package:${s}`);try{let e=await r(c.join(d(),`package-lock.json`),`utf8`),n=JSON.parse(e),i={};if(n.packages){for(let[e,t]of Object.entries(n.packages))if(e&&e!==``&&typeof t==`object`&&t){let n=e.replace(`node_modules/`,``);t.version&&(i[n]=t.version)}}t.update(`lock:${JSON.stringify(i,Object.keys(i).sort())}`)}catch{}try{let e=c.join(d(),`node_modules`),n=await i(e);t.update(`nmtime:${n.mtimeMs}`);let r=Object.keys(o).slice(0,10);for(let n of r)try{let r=await i(c.join(e,n));t.update(`${n}:${r.mtimeMs}`)}catch{t.update(`${n}:missing`)}}catch{t.update(`nmtime:none`)}return t.digest(`hex`).substring(0,16)}catch(t){return e(`sha256`).update(`error:${t instanceof Error?t.message:`unknown`}`).digest(`hex`).substring(0,16)}}async generateCacheKey(e){let t=await this.generateContentHash(e),n=this.generateConfigHash(),r=this.generateEnvHash(),i=await this.generateDependencyHash();return`${e}|${t.substring(0,12)}|${n}|${r}|${i}`}async isValid(e){let t=this.cache.get(e);if(!t)return!1;try{await i(t.outputPath);let n=await this.generateContentHash(e);if(t.contentHash!==n)return this.cache.delete(e),!1;let r=this.generateConfigHash();if(t.configHash!==r)return this.cache.delete(e),!1;let a=this.generateEnvHash();if(t.envHash!==a)return this.cache.delete(e),!1;let o=await this.generateDependencyHash();return t.dependencyHash!==o||(await i(e)).mtimeMs>t.mtime?(this.cache.delete(e),!1):(t.lastUsed=Date.now(),!0)}catch{return this.cache.delete(e),!1}}async set(e,t){try{let n=await i(e),r={contentHash:await this.generateContentHash(e),configHash:this.generateConfigHash(),envHash:this.generateEnvHash(),dependencyHash:await this.generateDependencyHash(),mtime:n.mtimeMs,outputPath:t,lastUsed:Date.now(),size:n.size};this.evictIfNeeded(r.size),this.cache.set(e,r),this.currentMemoryUsage+=r.size}catch(t){console.warn(`Warning: No se pudo cachear ${e}:`,t)}}evictIfNeeded(e){for(;this.cache.size>=this.maxEntries*.8;)this.evictLRU();for(;this.currentMemoryUsage+e>this.maxMemory*.8&&this.cache.size>0;)this.evictLRU();if(l.memoryUsage().heapUsed/(1024*1024)>200&&this.cache.size>50){let e=Math.min(this.cache.size-50,10);for(let t=0;t<e;t++)this.evictLRU()}}evictLRU(){let e=``,t=1/0;for(let[n,r]of this.cache)r.lastUsed<t&&(t=r.lastUsed,e=n);if(e){let t=this.cache.get(e);t&&(this.currentMemoryUsage-=t.size,this.cache.delete(e))}}cleanOldEntries(e=20){let t=0;for(let n=0;n<e&&this.cache.size>0;n++){let e=this.cache.size;if(this.evictLRU(),this.cache.size<e)t++;else break}return t}async load(e){try{if(f.cleanCache===`true`){this.cache.clear(),this.currentMemoryUsage=0;try{await a(e)}catch{}return}let t=await r(e,`utf-8`),n=JSON.parse(t);for(let[e,t]of Object.entries(n)){let n=t;n.contentHash&&n.outputPath&&n.mtime&&(this.cache.set(e,n),this.currentMemoryUsage+=n.size||0)}}catch{this.cache.clear(),this.currentMemoryUsage=0}}async save(e,t){try{await n(t,{recursive:!0});let r=Object.fromEntries(this.cache);await o(e,JSON.stringify(r,null,2))}catch(e){console.warn(`Warning: No se pudo guardar el cache:`,e)}}clear(){this.cache.clear(),this.currentMemoryUsage=0}getOutputPath(e){return this.cache.get(e)?.outputPath||``}getStats(){return{entries:this.cache.size,memoryUsage:this.currentMemoryUsage,hitRate:0}}async startDependencyWatching(){if(!this.isWatchingDependencies)try{let e=await import(`chokidar`);if(await this.fileExists(this.packageJsonPath)){let t=e.watch(this.packageJsonPath,{persistent:!1,ignoreInitial:!0});t.on(`change`,()=>{p.info(`📦 package.json modificado - invalidando cache de dependencias`),this.invalidateByDependencyChange()}),this.fileWatchers.set(`package.json`,t)}if(await this.fileExists(this.nodeModulesPath)){let t=e.watch(this.nodeModulesPath,{persistent:!1,ignoreInitial:!0,depth:1,ignored:/(^|[/\\])\../});t.on(`addDir`,e=>{p.info(`📦 Nueva dependencia instalada: ${e.split(/[/\\]/).pop()}`),this.invalidateByDependencyChange()}),t.on(`unlinkDir`,e=>{p.info(`📦 Dependencia eliminada: ${e.split(/[/\\]/).pop()}`),this.invalidateByDependencyChange()}),this.fileWatchers.set(`node_modules`,t)}this.isWatchingDependencies=!0,p.info(`🔍 Vigilancia de dependencias iniciada`)}catch(e){p.warn(`⚠️ No se pudo iniciar vigilancia de dependencias:`,e)}}async stopDependencyWatching(){for(let[e,t]of this.fileWatchers)try{await t.close(),p.info(`🛑 Vigilancia detenida: ${e}`)}catch(t){p.warn(`⚠️ Error cerrando watcher ${e}:`,t)}this.fileWatchers.clear(),this.isWatchingDependencies=!1}registerDependencies(e,t){let n=this.dependencyGraph.get(e);if(n)for(let t of n){let n=this.reverseDependencyGraph.get(t);n&&(n.delete(e),n.size===0&&this.reverseDependencyGraph.delete(t))}let r=new Set(t);this.dependencyGraph.set(e,r);for(let t of r)this.reverseDependencyGraph.has(t)||this.reverseDependencyGraph.set(t,new Set),this.reverseDependencyGraph.get(t).add(e)}invalidateByDependencyChange(){let e=0;for(let[t]of this.cache)this.cache.delete(t),e++;this.dependencyGraph.clear(),this.reverseDependencyGraph.clear(),this.currentMemoryUsage=0,p.info(`🗑️ Cache invalidado: ${e} archivos (cambio en dependencias)`)}invalidateCascade(e){let t=[],n=new Set([e]),r=[e];for(;r.length>0;){let e=r.shift(),t=this.reverseDependencyGraph.get(e);if(t)for(let e of t)n.has(e)||(n.add(e),r.push(e))}for(let e of n)if(this.cache.has(e)){let n=this.cache.get(e);this.currentMemoryUsage-=n.size,this.cache.delete(e),t.push(e)}return t.length>0&&p.info(`🔄 Invalidación cascada: ${t.length} archivos afectados por ${e}`),t}async fileExists(e){try{return await i(e),!0}catch{return!1}}getAdvancedStats(){return{entries:this.cache.size,memoryUsage:this.currentMemoryUsage,hitRate:0,dependencyNodes:this.dependencyGraph.size,watchingDependencies:this.isWatchingDependencies,activeWatchers:this.fileWatchers.size}}}const R=new L,z=c.join(c.resolve(f.PATH_PROY||d(),`compiler`),`.cache`),B=c.join(z,`versacompile-cache.json`);async function ue(){await R.load(B),(f.WATCH_MODE===`true`||u.includes(`--watch`)||u.includes(`-w`))&&await R.startDependencyWatching()}async function de(){await R.save(B,z)}function V(e,t,n,r=`error`,i,a){P.push({file:e,stage:t,message:n,severity:r,details:i,help:a,timestamp:Date.now()})}function H(e,t,n,r=[]){let i=F.find(t=>t.stage===e);i?(i.errors+=t,i.success+=n,i.files.push(...r)):F.push({stage:e,errors:t,success:n,files:[...r]})}async function U(e,t,n,r,i=!1){let a=e instanceof Error?e.message:e,o=e instanceof Error?e.stack:void 0;if(V(t,n,a,`error`,o),H(n,1,0,[t]),r===`individual`||r===`watch`){let e=await A(),r=c.basename(t),s=await J(n);if(i)p.error(e.red(`❌ Error en etapa ${s(n)} - ${r}:`)),p.error(e.red(a)),o&&(n===`typescript`||n===`vue`)&&o.split(`
|
|
2
|
+
`).slice(0,5).forEach(t=>{t.trim()&&p.error(e.gray(` ${t.trim()}`))});else{let t=a.split(`
|
|
3
|
+
`)[0];p.error(e.red(`❌ Error en ${s(n)}: ${r}`)),p.error(e.red(` ${t}`)),p.info(e.yellow(`💡 Usa --verbose para ver detalles completos`))}}}function W(e,t){H(t,0,1,[e])}function G(){P.length=0,F.length=0}async function K(e=!1,t){let n=await A();if(P.length===0&&F.length===0){p.info(n.green(`✅ No hay errores de compilación para mostrar.`)),t&&p.info(n.bold(`\n⏱️ TIEMPO TOTAL DE COMPILACIÓN: ${t}`));return}let r=`━`.repeat(40);if(p.info(``),p.info(n.bold.cyan(`📊 Resumen de Compilación`)),p.info(n.gray(r)),t&&(p.info(n.bold(`⏱️ Tiempo Total: ${n.green(t)}`)),p.info(``)),F.length>0){p.info(n.bold.blue(`🔧 Estadísticas por Etapa:`));for(let e of F){let t=e.success+e.errors,r=t>0?Math.round(e.success/t*100):0,i=_e(e.stage),a=e.errors===0?n.green:n.red,o=$(r,20);p.info(` ${i} ${n.bold(e.stage)}`),p.info(` ${a(`●`)} ${e.success}/${t} archivos ${a(`(${r}%)`)}`),p.info(` ${o}`),e.errors>0&&p.info(` ${n.red(`⚠`)} ${e.errors} ${e.errors===1?`error`:`errores`}`),p.info(``)}}if(P.length>0){p.info(n.red(`\n❌ Se encontraron ${P.length} errores:`));let t=new Map;P.forEach(e=>{t.has(e.file)||t.set(e.file,[]),t.get(e.file).push(e)});let r=1;for(let[i,a]of t){let t=c.basename(i),o=a.filter(e=>e.severity===`error`).length,s=a.filter(e=>e.severity===`warning`).length;p.info(n.cyan(`\n📄 ${r}. ${t}`)),p.info(n.gray(` Ruta: ${i}`)),p.info(n.yellow(` ${o} errores, ${s} advertencias`));for(let t of a){let r=t.severity===`error`?`❌`:`⚠️`,i=await J(t.stage);p.info(` ${r} [${i(t.stage)}] ${t.message}`),e&&t.details&&t.details.split(`
|
|
4
|
+
`).slice(0,5).forEach(e=>{e.trim()&&p.info(n.gray(` ${e.trim()}`))}),t.help&&p.info(n.blue(` 💡 ${t.help}`))}r++}let i=P.filter(e=>e.severity===`error`).length,a=P.filter(e=>e.severity===`warning`).length,o=t.size,s=`═`.repeat(50);p.info(``),p.info(n.bold.cyan(s)),p.info(n.bold.cyan(` 📊 RESUMEN FINAL`)),p.info(n.bold.cyan(s)),p.info(``),p.info(n.bold(`🎯 Resultados:`)),p.info(` 📁 Archivos afectados: ${n.cyan.bold(o)}`),p.info(` ${i>0?n.red(`●`):n.green(`○`)} Errores: ${i>0?n.red.bold(i):n.green.bold(`0`)}`),p.info(` ${a>0?n.yellow(`●`):n.green(`○`)} Advertencias: ${a>0?n.yellow.bold(a):n.green.bold(`0`)}`),p.info(``),i>0?(p.info(n.red.bold(`🚨 COMPILACIÓN COMPLETADA CON ERRORES`)),p.info(n.red(` Por favor revisa y corrige los problemas anteriores.`))):a>0?(p.info(n.yellow.bold(`⚠️ COMPILACIÓN COMPLETADA CON ADVERTENCIAS`)),p.info(n.yellow(` Considera revisar las advertencias anteriores.`))):(p.info(n.green.bold(`✅ COMPILACIÓN EXITOSA`)),p.info(n.green(` ¡Todos los archivos se compilaron sin problemas!`))),p.info(``),p.info(n.bold.cyan(s))}else{let e=`═`.repeat(50);p.info(``),p.info(n.bold.green(e)),p.info(n.bold.green(` ✨ ÉXITO`)),p.info(n.bold.green(e)),p.info(``),p.info(n.green.bold(`🎉 COMPILACIÓN COMPLETADA EXITOSAMENTE`)),p.info(n.green(` ¡No se encontraron errores ni advertencias!`)),p.info(``),p.info(n.bold.green(e))}p.info(``)}async function q(e){let t=await A(),n=new Map;e.forEach(e=>{n.has(e.file)||n.set(e.file,[]),n.get(e.file).push(e)});let r=e.filter(e=>e.severity===`error`).length,i=e.filter(e=>e.severity===`warning`).length,a=n.size;p.info(t.bold.rgb(255,120,120)(`╭─────────────────────────────────────────────────────────────╮`)),p.info(t.bold.rgb(255,120,120)(`│ `)+t.bold.white(`🔍 LINTER REPORT`)+t.bold.rgb(255,120,120)(` │`)),p.info(t.bold.rgb(255,120,120)(`╰─────────────────────────────────────────────────────────────╯`));let o=r>0?t.red(`●`):t.green(`○`),s=i>0?t.yellow(`●`):t.green(`○`);if(p.info(``),p.info(t.bold(`📊 Summary:`)),p.info(` ${o} ${t.bold(r)} ${t.red(`errors`)}`),p.info(` ${s} ${t.bold(i)} ${t.yellow(`warnings`)}`),p.info(` 📁 ${t.bold(a)} ${t.cyan(`files`)}`),p.info(``),r===0&&i===0){p.info(t.green.bold(`✨ All checks passed! No issues found.`));return}let c=1;for(let[e,r]of n)await fe(e,r,c,a),c++,c<=a&&p.info(t.gray(`─`.repeat(80)));p.info(``),p.info(t.bold.rgb(255,120,120)(`╭─────────────────────────────────────────────────────────────╮`)),p.info(t.bold.rgb(255,120,120)(`│ `)+t.bold.white(`Found ${r+i} issues in ${a} files`)+` `.repeat(Math.max(0,52-`Found ${r+i} issues in ${a} files`.length))+t.bold.rgb(255,120,120)(` │`)),p.info(t.bold.rgb(255,120,120)(`╰─────────────────────────────────────────────────────────────╯`))}async function fe(e,t,n,r){let i=await A(),a=t.filter(e=>e.severity===`error`).length,o=t.filter(e=>e.severity===`warning`).length,s=a>0?i.red(`✕`):i.yellow(`⚠`),u=e.endsWith(`.vue`)?`🎨`:e.endsWith(`.ts`)?`📘`:e.endsWith(`.js`)?`📜`:`📄`;p.info(``),p.info(i.bold(`${s} ${u} ${i.cyan(c.relative(l.cwd(),e))}`)),p.info(i.gray(` ${a} errors, ${o} warnings`)),p.info(``);for(let n=0;n<t.length;n++){let r=t[n];await pe(r,e,n+1,t.length)}}async function pe(e,t,n,r){let i=await A(),a=await import(`node:fs/promises`),o=e.severity===`error`,s=o?i.red:i.yellow,l=o?`✕`:`⚠`,u=e.line||1,d=e.column||1,f=e.ruleId||e.from||`unknown`,m=` ${s(l)} ${i.bold(e.message)}`,h=`${i.gray(f)}`,g=`${i.blue(`${u}:${d}`)}`;p.info(m),p.info(` ${i.gray(`at`)} ${g} ${i.gray(`·`)} ${h}`);try{let e=c.resolve(t),n=(await a.readFile(e,`utf-8`)).split(`
|
|
5
|
+
`),r=parseInt(u.toString())-1;if(r>=0&&r<n.length){p.info(``);let e=Math.max(0,r-1),t=Math.min(n.length-1,r+1),a=(t+1).toString().length;for(let o=e;o<=t;o++){let e=o+1,t=n[o]||``,c=e.toString().padStart(a,` `);if(o===r){p.info(` ${i.red(`>`)} ${i.gray(c)} ${i.gray(`│`)} ${t}`);let e=` `.repeat(Math.max(0,d-1))+s(`^`);p.info(` ${i.gray(` `)} ${i.gray(` `.repeat(a))} ${i.gray(`│`)} ${e}`)}else p.info(` ${i.gray(` `)} ${i.gray(c)} ${i.gray(`│`)} ${i.gray(t)}`)}}}catch{p.info(` ${i.gray(`│`)} ${i.gray(`(Unable to read file content)`)}`)}if(e.help){p.info(``);let t=e.help.replace(/^Regla \w+: /,``).trim();p.info(` ${i.blue(`💡`)} ${i.blue(`Help:`)} ${i.gray(t)}`)}n<r&&p.info(``)}async function J(e){let t=await A();switch(e){case`vue`:return t.green;case`typescript`:return t.blue;case`standardization`:return t.yellow;case`minification`:return t.red;case`tailwind`:return t.magenta;case`file-read`:return t.gray;default:return t.white}}export function normalizeRuta(e){if(c.isAbsolute(e))return c.normalize(e).replace(/\\/g,`/`);let t=c.normalize(e.startsWith(`.`)?e:`./`+e).replace(/\\/g,`/`);return t.startsWith(`./`)?t:`./${t}`}export function getOutputPath(e){let t=f.PATH_SOURCE??``,n=f.PATH_DIST??``;if(!t||!n)return e.replace(/\.(vue|ts)$/,`.js`);let r=c.normalize(e).replace(/\\/g,`/`),i=c.normalize(t).replace(/\\/g,`/`),a=c.normalize(n).replace(/\\/g,`/`),o;if(r.includes(i)){let e=r.substring(r.indexOf(i)+i.length).replace(/^[/\\]/,``);o=c.join(a,e).replace(/\\/g,`/`)}else{let e=c.basename(r);o=c.join(a,e).replace(/\\/g,`/`)}return o.includes(`vue`)||o.includes(`ts`)?o.replace(/\.(vue|ts)$/,`.js`):o}class Y{static instance;fileSystemCache=new Map;debounceTimers=new Map;DEBOUNCE_DELAY=100;static getInstance(){return Y.instance||(Y.instance=new Y),Y.instance}async compileForWatch(e,t){return new Promise(n=>{let r=this.debounceTimers.get(e);r&&clearTimeout(r);let a=setTimeout(async()=>{this.debounceTimers.delete(e);try{let r=await i(e),a=this.fileSystemCache.get(e);if(a&&a.mtime>=r.mtimeMs){n({success:!0,cached:!0});return}let{TypeScriptWorkerPool:o}=await import(`./typescript-worker-pool.js`);o.getInstance().setMode(`watch`);let s=await t(e);this.fileSystemCache.set(e,{mtime:r.mtimeMs}),n(s)}catch(e){n({success:!1,error:e})}},this.DEBOUNCE_DELAY);this.debounceTimers.set(e,a)})}cleanup(){this.debounceTimers.forEach(e=>clearTimeout(e)),this.debounceTimers.clear(),this.fileSystemCache.clear()}}async function me(e,t,r=`individual`){let i={};e=c.isAbsolute(e)?normalizeRuta(e):normalizeRuta(c.resolve(e));let a=k.getInstance(),s=Date.now(),l=c.extname(e);await a.ensureModuleLoaded(`parser`);let u=await(await M())(e),d=u.code,m=u.error;if(i.fileRead=Date.now()-s,m)throw await U(m instanceof Error?m:Error(String(m)),e,`file-read`,r,f.VERBOSE===`true`),Error(m instanceof Error?m.message:String(m));if(!d||d.trim().length===0||d===`undefined`||d===`null`)throw await U(Error(`El archivo está vacío o no se pudo leer.`),e,`file-read`,r,f.VERBOSE===`true`),Error(`El archivo está vacío o no se pudo leer.`);let h=f.VERBOSE===`true`,g;if(l===`.vue`){s=Date.now(),h&&p.info(v.green(`💚 Precompilando VUE: ${c.basename(e)}`)),await a.ensureModuleLoaded(`vue`);let t=await le();if(typeof t!=`function`)throw Error(`loadVue devolvió ${typeof t} en lugar de una función para archivo: ${e}`);if(g=await t(d,e,f.isPROD===`true`),i.vueCompile=Date.now()-s,g==null)throw Error(`preCompileVue devolvió ${g} para archivo: ${e}`);if(g.error)throw await U(g.error instanceof Error?g.error:Error(String(g.error)),e,`vue`,r,f.VERBOSE===`true`),Error(g.error instanceof Error?g.error.message:String(g.error));W(e,`vue`),d=g.data}if(!d||d.trim().length===0)throw await U(Error(`El código Vue compilado está vacío.`),e,`vue`,r,f.VERBOSE===`true`),Error(`El código Vue compilado está vacío.`);let _;if(l===`.ts`||g?.lang===`ts`){s=Date.now(),h&&p.info(v.blue(`🔄️ Precompilando TS: ${c.basename(e)}`)),await a.ensureModuleLoaded(`typescript`);let t=await ce();if(typeof t!=`function`)throw Error(`loadTypeScript devolvió ${typeof t} en lugar de una función para archivo: ${e}`);if(_=await t(d,e),i.tsCompile=Date.now()-s,_==null)throw Error(`preCompileTS devolvió ${_} para archivo: ${e}`);if(_.error)if(r===`all`)V(e,`typescript`,_.error instanceof Error?_.error.message:String(_.error),`error`);else throw await U(_.error,e,`typescript`,r,f.VERBOSE===`true`),Error(_.error instanceof Error?_.error.message:String(_.error));else W(e,`typescript`),d=_.data}if(!d||d.trim().length===0)throw await U(Error(`El código TypeScript compilado está vacío.`),e,`typescript`,r,f.VERBOSE===`true`),Error(`El código TypeScript compilado está vacío.`);h&&p.info(v.yellow(`💛 Estandarizando: ${c.basename(e)}`)),s=Date.now(),await a.ensureModuleLoaded(`transforms`);let y=await(await se())(d,e);if(i.standardization=Date.now()-s,y==null)throw Error(`estandarizaCode devolvió ${y} para archivo: ${e}`);if(y.error)throw await U(Error(y.error),e,`standardization`,r,f.VERBOSE===`true`),Error(y.error);if(W(e,`standardization`),d=y.code,!d||d.trim().length===0)throw await U(Error(`El código estandarizado está vacío.`),e,`standardization`,r,f.VERBOSE===`true`),Error(`El código estandarizado está vacío.`);if(f.isPROD===`true`){s=Date.now(),h&&p.info(v.red(`🤖 Minificando: ${c.basename(e)}`)),await a.ensureModuleLoaded(`minify`);let t=await(await oe())(d,e,!0);if(i.minification=Date.now()-s,t==null)throw Error(`minifyJS devolvió ${t} para archivo: ${e}`);if(t.error)throw await U(t.error instanceof Error?t.error:Error(String(t.error)),e,`minification`,r,f.VERBOSE===`true`),Error(t.error instanceof Error?t.error.message:String(t.error));W(e,`minification`),d=t.code}if(await n(c.dirname(t),{recursive:!0}),await o(t,d,`utf-8`),h){let t=Object.values(i).reduce((e,t)=>e+t,0);p.info(v.cyan(`⏱️ Timing para ${c.basename(e)}:`)),i.fileRead&&p.info(v.cyan(` 📖 Lectura: ${i.fileRead}ms`)),i.vueCompile&&p.info(v.cyan(` 💚 Vue: ${i.vueCompile}ms`)),i.tsCompile&&p.info(v.cyan(` 🔄️ TypeScript: ${i.tsCompile}ms`)),i.standardization&&p.info(v.cyan(` 💛 Estandarización: ${i.standardization}ms`)),i.minification&&p.info(v.cyan(` 🤖 Minificación: ${i.minification}ms`)),p.info(v.cyan(` 🏁 Total: ${t}ms`))}return{error:null,action:`extension`}}export async function initCompile(e,t=!0,n=`individual`){try{let r=k.getInstance(),i=c.extname(e),a=new Set([i]);if(await r.preloadForContext(n===`all`?`batch`:n,a),t&&f.TAILWIND){await r.ensureModuleLoaded(`tailwind`);let e=await(await N())();if(typeof e!=`boolean`)if(e?.success)p.info(`🎨 ${e.message}`);else{let t=`${e.message}${e.details?`
|
|
6
|
+
`+e.details:``}`;await U(Error(t),`tailwind.config.js`,`tailwind`,n,f.VERBOSE===`true`)}}let o=Date.now(),s=normalizeRuta(e),l=getOutputPath(s);if((n===`watch`||n===`individual`)&&await Q(s))return f.VERBOSE===`true`&&p.info(`⏭️ Archivo omitido (cache): ${c.basename(s)}`),{success:!0,cached:!0,output:R.getOutputPath(s)||l,action:`cached`};n===`individual`&&f.VERBOSE===`true`&&p.info(`🔜 Fuente: ${s}`);let u=await me(s,l,n);if(u.error)throw Error(u.error);(n===`watch`||n===`individual`)&&await R.set(s,l);let d=g(Date.now()-o);if(n===`individual`){f.VERBOSE===`true`&&(p.info(`🔚 Destino: ${l}`),p.info(`⏱️ Tiempo: ${d}`));let e=await A();p.info(e.green(`✅ Compilación exitosa: ${c.basename(s)}`))}return{success:!0,output:l,action:u.action}}catch(t){let n=t instanceof Error?t.message:String(t);return f.VERBOSE===`true`&&p.error(`❌ Error en compilación de ${c.basename(e)}: ${n}`),{success:!1,output:``,error:n}}}let X=0;class Z{static instance;progressActive=!1;lastProgressLine=``;logBuffer=[];originalConsoleLog;originalConsoleError;originalConsoleWarn;hasProgressLine=!1;constructor(){this.originalConsoleLog=console.log,this.originalConsoleError=console.error,this.originalConsoleWarn=console.warn}static getInstance(){return Z.instance||(Z.instance=new Z),Z.instance}interceptConsole(){console.log=(...e)=>{this.addLog(e.map(e=>String(e)).join(` `))},console.error=(...e)=>{this.addLog(e.map(e=>String(e)).join(` `))},console.warn=(...e)=>{this.addLog(e.map(e=>String(e)).join(` `))}}restoreConsole(){console.log=this.originalConsoleLog,console.error=this.originalConsoleError,console.warn=this.originalConsoleWarn}startProgress(){this.progressActive=!0,this.logBuffer=[],this.hasProgressLine=!1,this.interceptConsole();let e=`━`.repeat(48);l.stdout.write(`
|
|
8
7
|
\x1B[96m`+e+`\x1B[0m
|
|
9
8
|
`),l.stdout.write(`\x1B[96m│ \x1B[97m\x1B[1m🚀 Iniciando Compilación\x1B[0m\x1B[96m`+` `.repeat(22)+`│\x1B[0m
|
|
10
9
|
`),l.stdout.write(`\x1B[96m`+e+`\x1B[0m
|
|
@@ -22,5 +21,5 @@ import{createHash as e}from"node:crypto";import{glob as t,mkdir as n,readFile as
|
|
|
22
21
|
`),l.stdout.write(`\x1B[92m`+n+`\x1B[0m
|
|
23
22
|
|
|
24
23
|
`),this.logBuffer.length>0)for(let e of this.logBuffer)l.stdout.write(e+`
|
|
25
|
-
`)}this.restoreConsole(),this.progressActive=!1,this.lastProgressLine=``,this.logBuffer=[],this.hasProgressLine=!1}isActive(){return this.progressActive}getStageFromText(e){return e.includes(`Iniciando`)||e.includes(`Starting`)?`start`:e.includes(`Tailwind`)||e.includes(`CSS`)?`tailwind`:e.includes(`Recopilando`)||e.includes(`archivos`)||e.includes(`files`)?`files`:e.includes(`Compilando`)||e.includes(`workers`)?`compile`:e.includes(`cache`)||e.includes(`Guardando`)?`cache`:e.includes(`linter`)||e.includes(`Linter`)?`linter`:e.includes(`completado`)||e.includes(`Complete`)?`complete`:`default`}getProgressColors(e){
|
|
26
|
-
`+
|
|
24
|
+
`)}this.restoreConsole(),this.progressActive=!1,this.lastProgressLine=``,this.logBuffer=[],this.hasProgressLine=!1}isActive(){return this.progressActive}getStageFromText(e){return e.includes(`Iniciando`)||e.includes(`Starting`)?`start`:e.includes(`Tailwind`)||e.includes(`CSS`)?`tailwind`:e.includes(`Recopilando`)||e.includes(`archivos`)||e.includes(`files`)?`files`:e.includes(`Compilando`)||e.includes(`workers`)?`compile`:e.includes(`cache`)||e.includes(`Guardando`)?`cache`:e.includes(`linter`)||e.includes(`Linter`)?`linter`:e.includes(`completado`)||e.includes(`Complete`)?`complete`:`default`}getProgressColors(e){return{start:{bgColor:`45`,textColor:`97`,icon:`🚀`},tailwind:{bgColor:`105`,textColor:`97`,icon:`🎨`},files:{bgColor:`43`,textColor:`30`,icon:`📁`},compile:{bgColor:`42`,textColor:`30`,icon:`⚙️`},cache:{bgColor:`44`,textColor:`97`,icon:`💾`},linter:{bgColor:`101`,textColor:`97`,icon:`🔍`},complete:{bgColor:`102`,textColor:`30`,icon:`✅`},default:{bgColor:`100`,textColor:`30`,icon:`⏳`}}[e]||{bgColor:`100`,textColor:`30`,icon:`⏳`}}}export async function runLinter(e=!1){let t=f.linter,n=[],r=[],i=!0;if(f.ENABLE_LINTER!==`true`)return!0;if(typeof t==`string`&&t.trim()!==``){p.info(`🔍 Ejecutando linting...`);try{let a=JSON.parse(t);if(Array.isArray(a)){let{ESLint:e,OxLint:t}=await j();for(let i of a)if(i.name.toLowerCase()===`eslint`){p.info(`🔧 Ejecutando ESLint con config: ${i.configFile||`por defecto`}`);let t=e(i).then(e=>{e&&e.json&&(Array.isArray(e.json)?e.json.forEach(e=>{let t=e.filePath||e.file||`archivo no especificado`;r.push({from:`eslint`,line:e.line||`N/A`,column:e.column||1,file:t,message:e.message,severity:e.severity===2?`error`:`warning`,help:e.ruleId?`Regla ESLint: ${e.ruleId}`:void 0})}):e.json.results&&Array.isArray(e.json.results)&&e.json.results.forEach(e=>{e.messages&&Array.isArray(e.messages)&&e.messages.forEach(t=>{let n=e.filePath||e.file||`archivo no especificado`;r.push({from:`eslint`,line:t.line||`N/A`,column:t.column||1,file:n,message:t.message,severity:t.severity===2?`error`:`warning`,help:t.ruleId?`Regla ESLint: ${t.ruleId}`:void 0})})}))}).catch(e=>{p.error(`❌ Error durante la ejecución de ESLint: ${e.message}`),r.push({file:i.configFile||`ESLint Config`,message:`Fallo al ejecutar ESLint: ${e.message}`,severity:`error`})});n.push(t)}else if(i.name.toLowerCase()===`oxlint`){p.info(`🔧 Ejecutando OxLint con config: ${i.configFile||`por defecto`}`);let e=t(i).then(e=>{e&&e.json&&Array.isArray(e.json.diagnostics)&&e.json.diagnostics.forEach(e=>{let t=e.filename||e.file||`archivo no especificado`,n=e.labels&&e.labels[0]&&e.labels[0].span?e.labels[0].span.line||e.labels[0].span.start?.line:`N/A`,i=e.labels&&e.labels[0]&&e.labels[0].span?e.labels[0].span.column||e.labels[0].span.start?.column:1;r.push({from:`oxlint`,line:n,column:i,file:t,message:e.message,severity:typeof e.severity==`string`?e.severity.toLowerCase():`error`,help:e.help||(e.code?`Regla Oxlint: ${e.code}`:void 0)})})}).catch(e=>{p.error(`❌ Error durante la ejecución de OxLint: ${e.message}`),r.push({file:i.configFile||`Oxlint Config`,message:`Fallo al ejecutar Oxlint: ${e.message}`,severity:`error`})});n.push(e)}}else p.warn(`⚠️ La configuración de linter no es un array válido.`);if(await Promise.all(n),e)if(r.length>0)await q(r);else{let e=await A();p.info(e.green(`✅ No se encontraron errores ni advertencias de linting.`))}else r.length>0&&(await q(r),p.warn(`🚨 Se encontraron errores o advertencias durante el linting.`),f.yes===`false`&&(await h(`¿Deseas continuar con la compilación a pesar de los errores de linting? (s/N): `)).toLowerCase()!==`s`&&(p.info(`🛑 Compilación cancelada por el usuario.`),i=!1))}catch(e){p.warn(`Error parseando configuración de linter: ${e instanceof Error?e.message:`Error desconocido`}, omitiendo...`)}}return i}function he(e,t,n=30){let r=Math.round(e/t*100),i=Math.round(r/100*n),a=n-i;return`[${`█`.repeat(i)}${` `.repeat(a)}] ${r}% (${e}/${t})`}async function Q(e){return await R.isValid(e)}async function ge(e,t=8){let n=[],r=[],i=e.length,a=0,o=0,s=0,u=Z.getInstance(),d=!1,m=0;function h(){let e=a+o+s,t=he(e,i),n=Math.round(e/i*100);if(e===0&&!d||n>X+1&&e>0||e===i){let r=`🚀 ${t} [✅ ${a} | ⏭️ ${o} | ❌ ${s}]`;u.updateProgress(r),e===0&&(d=!0),X=n}}h();for(let i of e){let e=(async()=>{try{if(f.VERBOSE===`true`&&p.info(`🔄 Compilando: ${c.basename(i)}`),await Q(i))return o++,f.VERBOSE===`true`&&p.info(`⏭️ Archivo omitido (cache): ${c.basename(i)}`),h(),{success:!0,cached:!0,output:R.getOutputPath(i)};let e=await initCompile(i,!1,`batch`);if(e.success&&e.output?(await R.set(i,e.output),f.VERBOSE===`true`&&p.info(`✅ Completado: ${c.basename(i)} → ${c.basename(e.output)}`)):f.VERBOSE===`true`&&p.info(`❌ Error en: ${c.basename(i)}`),a++,m++,m%20==0){try{typeof globalThis.gc==`function`&&globalThis.gc()}catch{}let e=l.memoryUsage().heapUsed/(1024*1024);if(e>300&&R.getStats().entries>50){console.log(`[Memory] Heap alto (${e.toFixed(1)}MB), limpiando cache...`);let t=R.cleanOldEntries(20);t>0&&console.log(`[Memory] Se removieron ${t} entradas del cache`)}}return h(),e}catch(e){if(s++,f.VERBOSE===`true`){let t=e instanceof Error?e.message:String(e);p.error(`💥 Falló: ${c.basename(i)} - ${t}`)}return h(),{success:!1,error:e instanceof Error?e.message:String(e)}}})();if(n.push(e),r.push(e),r.length>=t){let e=await Promise.race(r),t=r.indexOf(e);t!==-1&&r.splice(t,1)}e.then(()=>{let t=r.indexOf(e);t!==-1&&r.splice(t,1)})}await Promise.all(n)}export async function initCompileAll(){try{let e=Z.getInstance();if(e.startProgress(),e.updateProgress(`🚀 Iniciando compilación...`),G(),e.updateProgress(`📦 Cargando cache...`),await ue(),X=0,e.updateProgress(`🔍 Ejecutando linter...`),!await runLinter(!1)){e.endProgress();return}let n=Date.now(),r=f.PATH_SOURCE??``,i=f.PATH_DIST??``,a=r.replace(/\\/g,`/`),o=[`${a}/**/*.js`,`${a}/**/*.vue`,`${a}/**/*.ts`,`${a}/**/*.mjs`,`${a}/**/*.cjs`];p.info(`📝 Compilando todos los archivos...`),p.info(`🔜 Fuente: ${r}`),p.info(`🔚 Destino: ${i}\n`),e.updateProgress(`🎨 Generando TailwindCSS...`);let u=await(await N())();typeof u!=`boolean`&&(u?.success?p.info(`🎨 ${u.message}\n`):await U(Error(`${u.message}${u.details?`
|
|
25
|
+
`+u.details:``}`),`tailwind.config.js`,`tailwind`,`all`,f.VERBOSE===`true`)),e.updateProgress(`📁 Recopilando archivos...`);let d=[];for await(let e of t(o))e.endsWith(`.d.ts`)||d.push(e);let m=s.cpus().length,h=d.length;if(m<4&&(m=4,f.VERBOSE===`true`&&p.warn(`⚠️ Solo se detectó ${s.cpus().length} CPU. Usando ${m} hilos por defecto.`)),l.env.VERSACOMPILER_MAX_THREADS){let e=parseInt(l.env.VERSACOMPILER_MAX_THREADS,10);!isNaN(e)&&e>0&&(m=e,f.VERBOSE===`true`&&p.info(`🔧 Usando ${m} hilos (variable de entorno VERSACOMPILER_MAX_THREADS)`))}let _=s.totalmem()/(1024*1024),v=s.freemem()/(1024*1024),y=(_-v)/_*100,b;b=y>90?Math.max(4,Math.floor(m*.5)):h<5?h:h<20?m:h<50?Math.floor(m*1.5):h<200?m*2:Math.min(m*3,48),h>10&&b<4&&(b=4,f.VERBOSE===`true`&&p.info(`⚡ Ajustando a mínimo de 4 hilos para proyecto de ${h} archivos`)),e.updateProgress(`⚙️ Configurando workers...`),p.info(`🚀 Compilando ${h} archivos con concurrencia optimizada (${b} hilos)...`),p.info(` 📊 CPUs detectados: ${s.cpus().length} (usando: ${m})`),p.info(` 💾 Memoria libre: ${v.toFixed(0)}MB / ${_.toFixed(0)}MB (${(100-y).toFixed(1)}% libre)`),p.info(` ⚡ Hilos configurados: ${b} (${(b/m).toFixed(1)}x CPUs)`);let x=Math.min(m*2,24);if(h>50&&b<x*.5){let e=await A();p.warn(e.yellow(`⚠️ Solo se usarán ${b} hilos para ${h} archivos.`)),p.info(e.yellow(` 💡 Tip: export VERSACOMPILER_MAX_THREADS=${x}`))}h>50&&b<8&&(p.warn(`⚠️ Solo se usarán ${b} hilos para ${h} archivos.`),p.warn(` 💡 Tip: Establece VERSACOMPILER_MAX_THREADS para forzar más hilos:`),p.warn(` 💡 export VERSACOMPILER_MAX_THREADS=16`));let S=k.getInstance(),C=new Set(d.map(e=>c.extname(e)));await S.preloadForContext(`batch`,C);try{let{TypeScriptWorkerPool:e}=await import(`./typescript-worker-pool.js`);e.getInstance().setMode(`batch`)}catch{}e.updateProgress(`🚀 Iniciando compilación de ${h} archivos...`),await ge(d,b),e.updateProgress(`💾 Guardando cache...`),await de(),e.updateProgress(`🧹 Limpiando módulos no usados...`),S.cleanupUnusedModules();let w=g(Date.now()-n);e.endProgress(),await K(f.VERBOSE===`true`,w)}catch(e){let t=Z.getInstance();t.isActive()&&t.endProgress();let n=e instanceof Error?e.message:String(e);p.error(`🚩 Error al compilar todos los archivos: ${n}`),await U(e instanceof Error?e:Error(String(e)),`compilación general`,`all`,`all`,f.VERBOSE===`true`),await K(f.VERBOSE===`true`)}}function _e(e){return{vue:`🎨`,typescript:`📘`,standardization:`💛`,minification:`🗜️`,tailwind:`🎨`,"file-read":`📖`,default:`⚙️`}[e]??`⚙️`}function $(e,t){let n=Math.round(e/100*t),r=t-n;return`${`\x1B[32m`+`█`.repeat(n)+`\x1B[0m`}${`\x1B[90m`+`░`.repeat(r)+`\x1B[0m`} ${e}%`}export async function compileFile(e){return await _(initCompile(e,!0,`individual`),6e4,`compilación de ${c.basename(e)}`)}export{Y as WatchModeOptimizer};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
let e;function t(){function e(){let t=e=>String(e),n=`reset.bold.dim.italic.underline.strikethrough.inverse.hidden.visible.black.red.green.yellow.blue.magenta.cyan.white.gray.grey.blackBright.redBright.greenBright.yellowBright.blueBright.magentaBright.cyanBright.whiteBright.bgBlack.bgRed.bgGreen.bgYellow.bgBlue.bgMagenta.bgCyan.bgWhite.bgGray.bgGrey.bgBlackBright.bgRedBright.bgGreenBright.bgYellowBright.bgBlueBright.bgMagentaBright.bgCyanBright.bgWhiteBright`.split(`.`);return n.forEach(n=>{Object.defineProperty(t,n,{get(){return e()},enumerable:!0,configurable:!0})}),new Proxy(t,{apply(e,t,n){return String(n[0]||``)},get(t,r){if(typeof r==`string`||typeof r==`symbol`)return typeof r==`string`&&n.includes(r)?e():t[r]}})}return e()}function n(){return e
|
|
1
|
+
let e;function t(){function e(){let t=e=>String(e),n=`reset.bold.dim.italic.underline.strikethrough.inverse.hidden.visible.black.red.green.yellow.blue.magenta.cyan.white.gray.grey.blackBright.redBright.greenBright.yellowBright.blueBright.magentaBright.cyanBright.whiteBright.bgBlack.bgRed.bgGreen.bgYellow.bgBlue.bgMagenta.bgCyan.bgWhite.bgGray.bgGrey.bgBlackBright.bgRedBright.bgGreenBright.bgYellowBright.bgBlueBright.bgMagentaBright.bgCyanBright.bgWhiteBright`.split(`.`);return n.forEach(n=>{Object.defineProperty(t,n,{get(){return e()},enumerable:!0,configurable:!0})}),new Proxy(t,{apply(e,t,n){return String(n[0]||``)},get(t,r){if(typeof r==`string`||typeof r==`symbol`)return typeof r==`string`&&n.includes(r)?e():t[r]}})}return e()}function n(){return e||(e=t()),e}export class ErrorReporter{options;constructor(e={}){this.options={showLineNumbers:e.showLineNumbers??!0,showCodeContext:e.showCodeContext??!0,contextLines:e.contextLines??2,colorize:e.colorize??!0}}analyzeParsingError(e,t,n){let r={file:n,message:e.message||`Error de parsing desconocido`,severity:`error`};if(e.labels&&e.labels.length>0){let n=e.labels[0];if(n.start!==void 0){let e=this.getLineAndColumnFromOffset(t,n.start);r.line=e.line,r.column=e.column}}else if(e.span){let n=this.getLineAndColumnFromSpan(t,e.span.start);r.line=n.line,r.column=n.column}else if(e.offset!==void 0){let n=this.getLineAndColumnFromOffset(t,e.offset);r.line=n.line,r.column=n.column}return this.options.showCodeContext&&r.line&&t&&(r.codeContext=this.generateCodeContext(t,r.line,r.column)),r.suggestion=this.generateIntelligentSuggestion(e.message,t,r.line,r.column),e.code&&(r.errorCode=e.code),e.codeframe&&(r.codeContext=this.combineWithOxcCodeframe(r.codeContext,e.codeframe)),r}getLineAndColumnFromSpan(e,t){return this.getLineAndColumnFromOffset(e,t)}getLineAndColumnFromOffset(e,t){let n=e.split(`
|
|
2
2
|
`),r=0,i=1,a=1;for(let e=0;e<n.length;e++){let o=n[e];if(o===void 0)continue;let s=o.length+1;if(r+s>t){i=e+1,a=t-r+1;break}r+=s}return{line:i,column:a}}generateCodeContext(e,t,r){let i=e.split(`
|
|
3
3
|
`),a=Math.max(1,t-this.options.contextLines),o=Math.min(i.length,t+this.options.contextLines),s=n(),c=`
|
|
4
4
|
`+s.dim(`Contexto del código:`)+`
|
|
5
|
-
`;for(let e=a;e<=o;e++){let n=i[e-1]||``,a=e.toString().padStart(3,` `)
|
|
5
|
+
`;for(let e=a;e<=o;e++){let n=i[e-1]||``,a=e.toString().padStart(3,` `);if(e===t){if(this.options.colorize){if(c+=s.red(`${a} ❌ ${n}\n`),r){let e=` `.repeat(6+(r-1)),t=s.red(`^`);c+=`${e}${t}\n`}}else if(c+=`${a} ❌ ${n}\n`,r){let e=` `.repeat(6+(r-1));c+=`${e}^\n`}}else{let e=this.options.colorize?s.dim:e=>e;c+=e(`${a} ${n}\n`)}}return c}generateSuggestion(e){let t=e.toLowerCase();if(t.includes(`unexpected`)&&t.includes(`identifier`))return`Verifica si hay una coma faltante antes del identificador o si la línea anterior no está completa.`;if(t.includes(`expected`)&&t.includes(`but found`))return`Revisa la sintaxis alrededor de este punto. Puede faltar un carácter específico.`;if(t.includes(`missing`)){if(t.includes(`semicolon`))return`Agrega un punto y coma (;) al final de la declaración.`;if(t.includes(`comma`))return`Verifica si falta una coma (,) en una lista o declaración.`;if(t.includes(`parenthesis`))return`Verifica que los paréntesis estén balanceados.`}return t.includes(`import`)||t.includes(`export`)?`Revisa la sintaxis de import/export. Las líneas pueden estar cortadas o malformadas.`:t.includes(`const`)&&t.includes(`initializer`)?`Las declaraciones const requieren un valor inicial. Ejemplos válidos:
|
|
6
6
|
• const variable = "valor";
|
|
7
7
|
• const numero = 42;
|
|
8
8
|
• const objeto = { propiedad: "valor" };`:`Revisa la sintaxis del código alrededor de esta ubicación.`}combineWithOxcCodeframe(e,t){if(!e)return t;let r=n();return e+`
|
package/dist/compiler/linter.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{env as e}from"node:process";import{logger as t}from"../servicios/logger.js";import{ESLintNode as n}from"./../wrappers/eslint-node.js";import{OxlintNode as r}from"./../wrappers/oxlint-node.js";export async function OxLint(n={}){try{if(!n||!n.bin)return t.warn(`⚠️ Oxlint no se ejecutará: falta la propiedad "bin" en la configuración.`),!1;let i=new r({binPath:n.bin,configFile:n.configFile,fix:n.fix||!1,formats:[`json`],tsconfigPath:e.tsconfigFile||`./tsconfig.json`,...n.oxlintConfig}),a=n.paths||[e.PATH_SOURCE||`./src`];return await i.run(a)}catch(e){throw t.error(`❌ :Error al compilar OxLint:`,e),e}}export async function ESLint(e={}){try{if(!e||!e.bin)return t.warn(`⚠️ ESLint no se ejecutará: falta la propiedad "bin" en la configuración.`),{json:{results:[],errorCount:0,warningCount:0,fixableErrorCount:0,fixableWarningCount:0,fatalErrorCount:0}};let r=new n({binPath:e.bin,configFile:e.configFile,fix:e.fix||!1,extensions:[`.vue`,`.ts`,`.js`],formats:e.format?[e.format]:[`stylish`,`json`],cache:!0,maxWarnings:100,...e.eslintConfig}),i=e.paths||[`src/`]
|
|
1
|
+
import{env as e}from"node:process";import{logger as t}from"../servicios/logger.js";import{ESLintNode as n}from"./../wrappers/eslint-node.js";import{OxlintNode as r}from"./../wrappers/oxlint-node.js";export async function OxLint(n={}){try{if(!n||!n.bin)return t.warn(`⚠️ Oxlint no se ejecutará: falta la propiedad "bin" en la configuración.`),!1;let i=new r({binPath:n.bin,configFile:n.configFile,fix:n.fix||!1,formats:[`json`],tsconfigPath:e.tsconfigFile||`./tsconfig.json`,...n.oxlintConfig}),a=n.paths||[e.PATH_SOURCE||`./src`];return await i.run(a)}catch(e){throw t.error(`❌ :Error al compilar OxLint:`,e),e}}export async function ESLint(e={}){try{if(!e||!e.bin)return t.warn(`⚠️ ESLint no se ejecutará: falta la propiedad "bin" en la configuración.`),{json:{results:[],errorCount:0,warningCount:0,fixableErrorCount:0,fixableWarningCount:0,fatalErrorCount:0}};let r=new n({binPath:e.bin,configFile:e.configFile,fix:e.fix||!1,extensions:[`.vue`,`.ts`,`.js`],formats:e.format?[e.format]:[`stylish`,`json`],cache:!0,maxWarnings:100,...e.eslintConfig}),i=e.paths||[`src/`];return await r.run(i)}catch(e){throw t.error(`❌ Error al ejecutar ESLint:`,e),e}}
|
package/dist/compiler/minify.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash as e}from"node:crypto";import{minify as
|
|
1
|
+
import{createHash as e}from"node:crypto";import{minify as i}from"oxc-minify";import{minifyTemplate as a}from"./minifyTemplate.js";import{removehtmlOfTemplateString as o}from"./transforms.js";class s{static instance;cache=new Map;MAX_CACHE_SIZE=100;MAX_CACHE_MEMORY=20*1024*1024;CACHE_TTL=1800*1e3;currentMemoryUsage=0;cacheHits=0;cacheMisses=0;totalMinifications=0;totalOriginalSize=0;totalMinifiedSize=0;static getInstance(){return s.instance||(s.instance=new s),s.instance}generateCacheKey(i,a){let o=`${i}||${JSON.stringify(a)}`;return e(`sha256`).update(o).digest(`hex`)}async getOrMinify(e,a,o){this.totalMinifications++;let s=this.generateCacheKey(e,o),c=this.cache.get(s);if(c&&Date.now()-c.timestamp<this.CACHE_TTL)return c.timestamp=Date.now(),this.cacheHits++,{code:c.minifiedCode,error:null,cached:!0};this.cacheMisses++;let l=e.length;try{let c=await i(a,e,o);if(e.trim()&&!c.code.trim())return{code:``,error:Error(`Minification failed: likely syntax error in ${a}`),cached:!1};let u=c.code.length;return this.addToCache(s,{contentHash:s,options:o,minifiedCode:c.code,timestamp:Date.now(),originalSize:l,minifiedSize:u}),this.totalOriginalSize+=l,this.totalMinifiedSize+=u,{code:c.code,error:null,cached:!1}}catch(e){return{error:e instanceof Error?e:Error(String(e)),code:``,cached:!1}}}addToCache(e,i){try{let a=i.originalSize+i.minifiedSize;this.evictIfNeeded(a),this.cache.set(e,i),this.currentMemoryUsage+=a}catch(e){console.warn(`[MinificationCache] Error cacheando minificación:`,e)}}evictIfNeeded(e){for(;this.cache.size>=this.MAX_CACHE_SIZE;)this.evictLRU();for(;this.currentMemoryUsage+e>this.MAX_CACHE_MEMORY&&this.cache.size>0;)this.evictLRU()}evictLRU(){let e=``,i=1/0;for(let[a,o]of this.cache)o.timestamp<i&&(i=o.timestamp,e=a);if(e){let i=this.cache.get(e);i&&(this.currentMemoryUsage-=i.originalSize+i.minifiedSize,this.cache.delete(e))}}cleanExpired(){let e=Date.now();for(let[i,a]of this.cache.entries())e-a.timestamp>this.CACHE_TTL&&(this.currentMemoryUsage-=a.originalSize+a.minifiedSize,this.cache.delete(i))}getStats(){let e=this.totalMinifications>0?Math.round(this.cacheHits/this.totalMinifications*100):0,i=this.totalOriginalSize>0?Math.round((this.totalOriginalSize-this.totalMinifiedSize)/this.totalOriginalSize*100):0;return{cacheHits:this.cacheHits,cacheMisses:this.cacheMisses,hitRate:e,totalMinifications:this.totalMinifications,cacheSize:this.cache.size,maxCacheSize:this.MAX_CACHE_SIZE,memoryUsage:this.currentMemoryUsage,maxMemoryUsage:this.MAX_CACHE_MEMORY,totalOriginalSize:this.totalOriginalSize,totalMinifiedSize:this.totalMinifiedSize,avgCompressionRatio:i}}clear(){this.cache.clear(),this.currentMemoryUsage=0,this.cacheHits=0,this.cacheMisses=0,this.totalMinifications=0,this.totalOriginalSize=0,this.totalMinifiedSize=0}}const c=s.getInstance();export const minifyJS=async(e,i,a=!0)=>{try{let o={compress:{target:`es2020`},mangle:{toplevel:!0,debug:!a},codegen:{removeWhitespace:!0},sourcemap:!a},s=await c.getOrMinify(e,i,o);return{code:s.code,error:s.error}}catch(e){return{error:e,code:``}}};export const getMinificationCacheStats=()=>c.getStats();export const clearMinificationCache=()=>{c.clear()};export const cleanExpiredMinificationCache=()=>{c.cleanExpired()};export const minifyWithTemplates=async(e,i,s=!0)=>{try{let c=a(e,i);if(c.error&&!c.code){let e=c.error instanceof Error?c.error.message:String(c.error);return{code:``,error:Error(`Template minification failed: ${e}`)}}let u=await minifyJS(c.code,i,s);return u.code=await o(u.code),u}catch(e){return{error:e instanceof Error?e:Error(String(e)),code:``}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{minifyHTMLLiterals as e}from"/node_modules/minify-html-literals/index.js";const t={caseSensitive:!0,keepClosingSlash:!0,collapseWhitespace:!0,removeComments:!0,minifyCSS:!0,minifyJS:!0,conservativeCollapse:!1,preserveLineBreaks:!1,removeAttributeQuotes:!1,removeEmptyAttributes:!1,removeRedundantAttributes:!1,removeScriptTypeAttributes:!0,removeStyleLinkTypeAttributes:!0,useShortDoctype:!0},n=e=>{try{return e.replace(/=`([^`]+)`/g,(e,t)=>t.includes(`{`)&&t.includes(`}`)?`=html\`${t.replace(/\/\*[\s\S]*?\*\//g,``).replace(/\s+/g,` `).replace(/\s*{\s*/g,`{`).replace(/\s*}\s*/g,`}`).replace(/\s*:\s*/g,`:`).replace(/\s*;\s*/g,`;`).replace(/;\s*}/g,`}`).replace(/,\s*/g,`,`).trim()}\``:e)}catch(t){return console.warn(`[MinifyTemplate] Error minificando CSS:`,t),e}},r=(r,i)=>{try{let a=n(r);return{code:e(a,{fileName:i,...t})?.code||a,error:null}}catch(e){return console.warn(`[MinifyTemplate] Error minificando plantilla ${i}:`,e),{code:r,error:e}}};export{t as defaultMinifyOptions,r as minifyTemplate};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash as e}from"node:crypto";import{existsSync as i,readFileSync as a,readdirSync as o,statSync as s}from"node:fs";import{dirname as c,join as l,relative as u}from"node:path";import{cwd as d,env as f}from"node:process";import{logger as p}from"../servicios/logger.js";import{EXCLUDED_MODULES as m}from"../utils/excluded-modules.js";export class ModuleResolutionOptimizer{static instance;moduleIndex=new Map;resolutionCache=new Map;cacheOrder=[];aliasIndex=[];nodeModulesCache=new Map;metrics={totalResolutions:0,cacheHits:0,cacheMisses:0,averageResolveTime:0,indexLookups:0,filesystemAccess:0,aliasMatches:0};maxCacheSize=500;cacheMaxAge=300*1e3;indexRefreshInterval=600*1e3;excludedModules=m;lastIndexUpdate=0;constructor(){this.initializeIndexes(),this.setupPeriodicRefresh()}static getInstance(){return ModuleResolutionOptimizer.instance||=new ModuleResolutionOptimizer,ModuleResolutionOptimizer.instance}initializeIndexes(){let e=performance.now();try{this.buildModuleIndex(),this.buildAliasIndex(),this.lastIndexUpdate=Date.now();let i=performance.now()-e;f.VERBOSE===`true`&&(p.info(`🚀 Índices de resolución construidos en ${i.toFixed(2)}ms`),p.info(`📦 ${this.moduleIndex.size} módulos indexados`),p.info(`🔗 ${this.aliasIndex.length} alias indexados`))}catch(e){p.error(`Error inicializando índices de resolución:`,e)}}buildModuleIndex(){let e=l(d(),`node_modules`);if(i(e))try{let i=this.discoverModules(e);for(let e of i)this.moduleIndex.set(e.name,{fullPath:e.fullPath,entryPoint:e.entryPoint,packageJson:e.packageJson,isESM:e.isESM,hasExports:e.hasExports,optimizedEntry:e.optimizedEntry,lastModified:e.lastModified});f.VERBOSE===`true`&&p.info(`📚 Índice de módulos construido: ${this.moduleIndex.size} entradas`)}catch(e){p.error(`Error construyendo índice de módulos:`,e)}}discoverModules(e){let i=[];try{let a=o(e);this.metrics.filesystemAccess++;for(let s of a){let a=l(e,s);try{if(s.startsWith(`/dist/examples`)){let e=o(a);this.metrics.filesystemAccess++;for(let o of e){let e=l(a,o),c=this.analyzeModule(`${s}/${o}`,e);c&&i.push(c)}}else{let e=this.analyzeModule(s,a);e&&i.push(e)}}catch{continue}}}catch(e){p.error(`Error descubriendo módulos:`,e)}return i}analyzeModule(e,o){try{let c=l(o,`package.json`);if(!i(c))return null;let u=s(c);this.metrics.filesystemAccess++;let d=JSON.parse(a(c,`utf-8`));this.metrics.filesystemAccess++;let f=d.type===`module`,p=!!d.exports,m=this.determineOptimalEntryPoint(d),h;return m&&(h=this.findOptimalESMVersion(o,m)),{name:e,fullPath:o,entryPoint:m||`index.js`,packageJson:d,isESM:f,hasExports:p,optimizedEntry:h,lastModified:u.mtime.getTime()}}catch{return null}}determineOptimalEntryPoint(e){let i=null;if(e.module)i=e.module;else if(e.exports){if(typeof e.exports==`string`)i=e.exports;else if(e.exports[`.`]){let a=e.exports[`.`];typeof a==`string`?i=a:typeof a==`object`&&(i=a.import||a.browser||a.default)}}else i=e.browser&&typeof e.browser==`string`?e.browser:e.main||null;return i&&=this.validateAndOptimizeEntryPoint(i,e),i}validateAndOptimizeEntryPoint(e,i){let a=f.isProd===`true`,o=e.toLowerCase();if(!a&&(o.includes(`.min.`)||o.includes(`.prod.`))){let a=this.findDevelopmentAlternatives(e,i);if(a)return a}if(o.includes(`runtime`)&&!o.includes(`browser`)){let a=this.findBrowserAlternative(e,i);if(a)return a}return e}findDevelopmentAlternatives(e,i){let a=e.replace(`.min.`,`.`).replace(`.prod.`,`.`);if(i.exports&&typeof i.exports==`object`){let e=i.exports[`.`];if(e&&typeof e==`object`){let i=[e.development,e.import,e.browser,e.default].filter(Boolean);for(let e of i)if(typeof e==`string`&&!e.includes(`.min.`)&&!e.includes(`.prod.`))return e}}if(i.browser&&typeof i.browser==`object`){for(let e of Object.values(i.browser))if(typeof e==`string`&&!e.includes(`.min.`)&&!e.includes(`.prod.`)&&(e.includes(`browser`)||e.includes(`esm`)))return e}return a===e?null:a}findBrowserAlternative(e,i){if(i.exports&&typeof i.exports==`object`){let e=i.exports[`.`];if(e&&typeof e==`object`){let i=Object.keys(e).filter(e=>e.includes(`browser`)&&(e.includes(`esm`)||e.includes(`module`)));if(i.length>0){let a=i[0];if(a&&typeof e[a]==`string`)return e[a]}if(e.browser&&typeof e.browser==`string`)return e.browser}}let a=e.replace(/\.[^/.]+$/,``),o=[a.replace(`runtime`,`esm-browser`),a.replace(`runtime`,`browser`),a.replace(`runtime.esm-bundler`,`esm-browser`),e.replace(`runtime`,`esm-browser`),e.replace(`runtime`,`browser`)];return e.includes(`vue.runtime.esm-bundler`)&&o.unshift(`dist/vue.esm-browser.js`,`dist/vue.browser.esm.js`),o.find(i=>i!==e)||null}findOptimalESMVersion(e,a){let s=c(a),u=a.split(`/`).pop()||``,d=u.replace(/\.[^/.]+$/,``),f=l(e,s);if(i(f))try{let e=o(f);this.metrics.filesystemAccess++;let i=[`${d}.esm-browser.js`,`${d}.esm.js`,`${d}.module.js`,`${d}.browser.js`];for(let a of i)if(e.includes(a))return l(s,a)}catch{}}buildAliasIndex(){if(f.PATH_ALIAS)try{let e=JSON.parse(f.PATH_ALIAS);this.aliasIndex=[];for(let[i,a]of Object.entries(e)){let e=i.replace(`/*`,``),o=e.length;this.aliasIndex.push({pattern:e,target:Array.isArray(a)?a:[a],regex:RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}(?=/|$)`),priority:o})}this.aliasIndex.sort((e,i)=>i.priority-e.priority),f.VERBOSE===`true`&&p.info(`🔗 Índice de alias construido: ${this.aliasIndex.length} patrones`)}catch(e){p.error(`Error construyendo índice de alias:`,e)}}async resolveModule(e,i){let a=performance.now();if(this.metrics.totalResolutions++,this.excludedModules.has(e))return{path:null,cached:!1,resolveTime:performance.now()-a};let o=this.createCacheKey(e,i),s=this.getFromCache(o);if(s!==void 0)return this.metrics.cacheHits++,{path:s,cached:!0,resolveTime:performance.now()-a,fromCache:!0};this.metrics.cacheMisses++;let c=null;try{c=e.includes(`/`)?await this.resolveSubPath(e):this.resolveFromIndex(e),c||=this.fallbackResolve(e),c&&=this.getNodeModulesRelativePath(c)}catch(i){f.VERBOSE===`true`&&p.warn(`Error resolviendo ${e}:`,i)}this.setCache(o,c);let l=performance.now()-a;return this.updateMetrics(l),{path:c,cached:!1,resolveTime:l}}resolveFromIndex(e){this.metrics.indexLookups++;let i=this.moduleIndex.get(e);if(!i)return null;let a=i.optimizedEntry||i.entryPoint;return l(i.fullPath,a)}async resolveSubPath(e){let[a,...o]=e.split(`/`),s=o.join(`/`);if(!a)return null;this.metrics.indexLookups++;let c=this.moduleIndex.get(a);if(!c)return null;if(c.hasExports&&c.packageJson.exports){let e=`./${s}`,i=c.packageJson.exports[e];if(i){if(typeof i==`string`)return l(c.fullPath,i);if(typeof i==`object`){let e=i.import||i.default;if(typeof e==`string`)return l(c.fullPath,e)}}}let u=l(c.fullPath,s);if(i(u))return this.metrics.filesystemAccess++,u;let d=[`.mjs`,`.js`,`.cjs`];for(let e of d){let a=u+e;if(i(a))return this.metrics.filesystemAccess++,a}return null}fallbackResolve(e){let o=l(d(),`node_modules`,e),s=l(o,`package.json`);if(!i(s))return this.metrics.filesystemAccess++,null;try{let e=JSON.parse(a(s,`utf-8`));this.metrics.filesystemAccess++;let c=this.determineOptimalEntryPoint(e)||`index.js`,u=l(o,c);if(i(u))return this.metrics.filesystemAccess++,u}catch{}return null}findMatchingAlias(e){this.metrics.aliasMatches++;for(let i of this.aliasIndex)if(i.regex.test(e))return i;return null}resolveAlias(e){let i=this.findMatchingAlias(e);if(!i||!f.PATH_DIST)return null;let a=e.replace(i.pattern,``),o=i.target[0];if(!o)return null;let s,c=f.PATH_DIST.replace(`./`,``);if(a===``&&!o.includes(`*`))if(o.startsWith(`/`))s=l(`/`,c,o.substring(1));else{let e=o.replace(`./`,``);if(e.startsWith(`src/`)){let i=e.replace(`src/`,``);s=l(`/`,c,i)}else s=l(`/`,c,e)}else if(o.startsWith(`/`)){let e=o.substring(1).replace(`/*`,``);s=(e===`src`||e.startsWith(`src/`),l(`/`,c,a))}else{let e=o.replace(`./`,``).replace(`/*`,``);if(e===c)s=l(`/`,c,a);else if(e.startsWith(c+`/`))s=l(`/`,e,a);else if(e.startsWith(`src/`)){let i=e.replace(`src/`,``);s=l(`/`,c,i,a)}else{let i=[`examples`,`src`,`app`,`lib`].includes(e);s=i?l(`/`,c,a):l(`/`,c,e,a)}}return s.replace(/\\/g,`/`)}getFromCache(e){let i=this.resolutionCache.get(e);if(i){if(Date.now()-i.timestamp>this.cacheMaxAge){this.resolutionCache.delete(e),this.cacheOrder=this.cacheOrder.filter(i=>i!==e);return}return i.hits++,this.cacheOrder=this.cacheOrder.filter(i=>i!==e),this.cacheOrder.push(e),i.result}}setCache(e,i){if(this.resolutionCache.size>=this.maxCacheSize){let e=this.cacheOrder.shift();e&&this.resolutionCache.delete(e)}this.resolutionCache.set(e,{result:i,timestamp:Date.now(),hits:0}),this.cacheOrder.push(e)}createCacheKey(i,a){let o=e(`md5`);return o.update(i),a&&o.update(a),o.digest(`hex`)}getNodeModulesRelativePath(e){let i=e.indexOf(`node_modules`);if(i!==-1)return`/`+e.substring(i).replace(/\\/g,`/`);let a=u(d(),e).replace(/\\/g,`/`);return a.startsWith(`/`)?a:`/`+a}updateMetrics(e){this.metrics.averageResolveTime=(this.metrics.averageResolveTime*(this.metrics.totalResolutions-1)+e)/this.metrics.totalResolutions}setupPeriodicRefresh(){setInterval(()=>{Date.now()-this.lastIndexUpdate>this.indexRefreshInterval&&(f.VERBOSE===`true`&&p.info(`🔄 Actualizando índices de resolución de módulos`),this.refreshIndexes())},this.indexRefreshInterval)}refreshIndexes(){try{let e=this.moduleIndex.size;this.buildModuleIndex(),this.buildAliasIndex(),this.lastIndexUpdate=Date.now(),f.VERBOSE===`true`&&p.info(`📚 Índices actualizados: ${e} → ${this.moduleIndex.size} módulos`)}catch(e){p.error(`Error actualizando índices:`,e)}}clearExpiredCache(){let e=Date.now(),i=[];for(let[a,o]of this.resolutionCache.entries())e-o.timestamp>this.cacheMaxAge&&i.push(a);for(let e of i)this.resolutionCache.delete(e),this.cacheOrder=this.cacheOrder.filter(i=>i!==e);f.VERBOSE===`true`&&i.length>0&&p.info(`🧹 Limpiado caché expirado: ${i.length} entradas`)}getMetrics(){return{...this.metrics,cacheSize:this.resolutionCache.size,moduleIndexSize:this.moduleIndex.size,aliasIndexSize:this.aliasIndex.length,cacheHitRate:this.metrics.totalResolutions>0?this.metrics.cacheHits/this.metrics.totalResolutions*100:0}}resetMetrics(){this.metrics={totalResolutions:0,cacheHits:0,cacheMisses:0,averageResolveTime:0,indexLookups:0,filesystemAccess:0,aliasMatches:0}}forceRefresh(){this.initializeIndexes(),this.resolutionCache.clear(),this.cacheOrder=[],f.VERBOSE===`true`&&p.info(`🔄 Índices de resolución reconstruidos forzosamente`)}cleanup(){this.moduleIndex.clear(),this.resolutionCache.clear(),this.cacheOrder=[],this.aliasIndex=[],this.nodeModulesCache.clear(),f.VERBOSE===`true`&&p.info(`🧹 Sistema de resolución de módulos limpiado`)}}export async function getOptimizedModulePath(e,i){let a=ModuleResolutionOptimizer.getInstance(),o=await a.resolveModule(e,i);return o.path}export function getOptimizedAliasPath(e){let i=ModuleResolutionOptimizer.getInstance();return i.resolveAlias(e)}export function getModuleResolutionMetrics(){let e=ModuleResolutionOptimizer.getInstance();return e.getMetrics()}
|
|
1
|
+
import{createHash as e}from"node:crypto";import{existsSync as i,readFileSync as a,readdirSync as o,statSync as s}from"node:fs";import{dirname as c,join as l,relative as u}from"node:path";import{cwd as d,env as f}from"node:process";import{logger as p}from"../servicios/logger.js";import{EXCLUDED_MODULES as m}from"../utils/excluded-modules.js";export class ModuleResolutionOptimizer{static instance;moduleIndex=new Map;resolutionCache=new Map;cacheOrder=[];aliasIndex=[];nodeModulesCache=new Map;metrics={totalResolutions:0,cacheHits:0,cacheMisses:0,averageResolveTime:0,indexLookups:0,filesystemAccess:0,aliasMatches:0};maxCacheSize=500;cacheMaxAge=300*1e3;indexRefreshInterval=600*1e3;excludedModules=m;lastIndexUpdate=0;constructor(){this.initializeIndexes(),this.setupPeriodicRefresh()}static getInstance(){return ModuleResolutionOptimizer.instance||(ModuleResolutionOptimizer.instance=new ModuleResolutionOptimizer),ModuleResolutionOptimizer.instance}initializeIndexes(){let e=performance.now();try{this.buildModuleIndex(),this.buildAliasIndex(),this.lastIndexUpdate=Date.now();let i=performance.now()-e;f.VERBOSE===`true`&&(p.info(`🚀 Índices de resolución construidos en ${i.toFixed(2)}ms`),p.info(`📦 ${this.moduleIndex.size} módulos indexados`),p.info(`🔗 ${this.aliasIndex.length} alias indexados`))}catch(e){p.error(`Error inicializando índices de resolución:`,e)}}buildModuleIndex(){let e=l(d(),`node_modules`);if(i(e))try{let i=this.discoverModules(e);for(let e of i)this.moduleIndex.set(e.name,{fullPath:e.fullPath,entryPoint:e.entryPoint,packageJson:e.packageJson,isESM:e.isESM,hasExports:e.hasExports,optimizedEntry:e.optimizedEntry,lastModified:e.lastModified});f.VERBOSE===`true`&&p.info(`📚 Índice de módulos construido: ${this.moduleIndex.size} entradas`)}catch(e){p.error(`Error construyendo índice de módulos:`,e)}}discoverModules(e){let i=[];try{let a=o(e);this.metrics.filesystemAccess++;for(let s of a){let a=l(e,s);try{if(s.startsWith(`/dist/examples`)){let e=o(a);this.metrics.filesystemAccess++;for(let o of e){let e=l(a,o),c=this.analyzeModule(`${s}/${o}`,e);c&&i.push(c)}}else{let e=this.analyzeModule(s,a);e&&i.push(e)}}catch{continue}}}catch(e){p.error(`Error descubriendo módulos:`,e)}return i}analyzeModule(e,o){try{let c=l(o,`package.json`);if(!i(c))return null;let u=s(c);this.metrics.filesystemAccess++;let d=JSON.parse(a(c,`utf-8`));this.metrics.filesystemAccess++;let f=d.type===`module`,p=!!d.exports,m=this.determineOptimalEntryPoint(d),h;return m&&(h=this.findOptimalESMVersion(o,m)),{name:e,fullPath:o,entryPoint:m||`index.js`,packageJson:d,isESM:f,hasExports:p,optimizedEntry:h,lastModified:u.mtime.getTime()}}catch{return null}}determineOptimalEntryPoint(e){let i=null;if(e.module)i=e.module;else if(e.exports){if(typeof e.exports==`string`)i=e.exports;else if(e.exports[`.`]){let a=e.exports[`.`];typeof a==`string`?i=a:typeof a==`object`&&(i=a.import||a.browser||a.default)}}else i=e.browser&&typeof e.browser==`string`?e.browser:e.main||null;return i&&(i=this.validateAndOptimizeEntryPoint(i,e)),i}validateAndOptimizeEntryPoint(e,i){let a=f.isProd===`true`,o=e.toLowerCase();if(!a&&(o.includes(`.min.`)||o.includes(`.prod.`))){let a=this.findDevelopmentAlternatives(e,i);if(a)return a}if(o.includes(`runtime`)&&!o.includes(`browser`)){let a=this.findBrowserAlternative(e,i);if(a)return a}return e}findDevelopmentAlternatives(e,i){let a=e.replace(`.min.`,`.`).replace(`.prod.`,`.`);if(i.exports&&typeof i.exports==`object`){let e=i.exports[`.`];if(e&&typeof e==`object`){let i=[e.development,e.import,e.browser,e.default].filter(Boolean);for(let e of i)if(typeof e==`string`&&!e.includes(`.min.`)&&!e.includes(`.prod.`))return e}}if(i.browser&&typeof i.browser==`object`){for(let e of Object.values(i.browser))if(typeof e==`string`&&!e.includes(`.min.`)&&!e.includes(`.prod.`)&&(e.includes(`browser`)||e.includes(`esm`)))return e}return a===e?null:a}findBrowserAlternative(e,i){if(i.exports&&typeof i.exports==`object`){let e=i.exports[`.`];if(e&&typeof e==`object`){let i=Object.keys(e).filter(e=>e.includes(`browser`)&&(e.includes(`esm`)||e.includes(`module`)));if(i.length>0){let a=i[0];if(a&&typeof e[a]==`string`)return e[a]}if(e.browser&&typeof e.browser==`string`)return e.browser}}let a=e.replace(/\.[^/.]+$/,``),o=[a.replace(`runtime`,`esm-browser`),a.replace(`runtime`,`browser`),a.replace(`runtime.esm-bundler`,`esm-browser`),e.replace(`runtime`,`esm-browser`),e.replace(`runtime`,`browser`)];return e.includes(`vue.runtime.esm-bundler`)&&o.unshift(`dist/vue.esm-browser.js`,`dist/vue.browser.esm.js`),o.find(i=>i!==e)||null}findOptimalESMVersion(e,a){let s=c(a),u=(a.split(`/`).pop()||``).replace(/\.[^/.]+$/,``),d=l(e,s);if(i(d))try{let e=o(d);this.metrics.filesystemAccess++;let i=[`${u}.esm-browser.js`,`${u}.esm.js`,`${u}.module.js`,`${u}.browser.js`];for(let a of i)if(e.includes(a))return l(s,a)}catch{}}buildAliasIndex(){if(f.PATH_ALIAS)try{let e=JSON.parse(f.PATH_ALIAS);this.aliasIndex=[];for(let[i,a]of Object.entries(e)){let e=i.replace(`/*`,``),o=e.length;this.aliasIndex.push({pattern:e,target:Array.isArray(a)?a:[a],regex:RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}(?=/|$)`),priority:o})}this.aliasIndex.sort((e,i)=>i.priority-e.priority),f.VERBOSE===`true`&&p.info(`🔗 Índice de alias construido: ${this.aliasIndex.length} patrones`)}catch(e){p.error(`Error construyendo índice de alias:`,e)}}async resolveModule(e,i){let a=performance.now();if(this.metrics.totalResolutions++,this.excludedModules.has(e))return{path:null,cached:!1,resolveTime:performance.now()-a};let o=this.createCacheKey(e,i),s=this.getFromCache(o);if(s!==void 0)return this.metrics.cacheHits++,{path:s,cached:!0,resolveTime:performance.now()-a,fromCache:!0};this.metrics.cacheMisses++;let c=null;try{c=e.includes(`/`)?await this.resolveSubPath(e):this.resolveFromIndex(e),c||(c=this.fallbackResolve(e)),c&&(c=this.getNodeModulesRelativePath(c))}catch(i){f.VERBOSE===`true`&&p.warn(`Error resolviendo ${e}:`,i)}this.setCache(o,c);let l=performance.now()-a;return this.updateMetrics(l),{path:c,cached:!1,resolveTime:l}}resolveFromIndex(e){this.metrics.indexLookups++;let i=this.moduleIndex.get(e);if(!i)return null;let a=i.optimizedEntry||i.entryPoint;return l(i.fullPath,a)}async resolveSubPath(e){let[a,...o]=e.split(`/`),s=o.join(`/`);if(!a)return null;this.metrics.indexLookups++;let c=this.moduleIndex.get(a);if(!c)return null;if(c.hasExports&&c.packageJson.exports){let e=`./${s}`,i=c.packageJson.exports[e];if(i){if(typeof i==`string`)return l(c.fullPath,i);if(typeof i==`object`){let e=i.import||i.default;if(typeof e==`string`)return l(c.fullPath,e)}}}let u=l(c.fullPath,s);if(i(u))return this.metrics.filesystemAccess++,u;for(let e of[`.mjs`,`.js`,`.cjs`]){let a=u+e;if(i(a))return this.metrics.filesystemAccess++,a}return null}fallbackResolve(e){let o=l(d(),`node_modules`,e),s=l(o,`package.json`);if(!i(s))return this.metrics.filesystemAccess++,null;try{let e=JSON.parse(a(s,`utf-8`));this.metrics.filesystemAccess++;let c=l(o,this.determineOptimalEntryPoint(e)||`index.js`);if(i(c))return this.metrics.filesystemAccess++,c}catch{}return null}findMatchingAlias(e){this.metrics.aliasMatches++;for(let i of this.aliasIndex)if(i.regex.test(e))return i;return null}resolveAlias(e){let i=this.findMatchingAlias(e);if(!i||!f.PATH_DIST)return null;let a=e.replace(i.pattern,``),o=i.target[0];if(!o)return null;let s,c=f.PATH_DIST.replace(`./`,``);if(a===``&&!o.includes(`*`))if(o.startsWith(`/`))s=l(`/`,c,o.substring(1));else{let e=o.replace(`./`,``);s=e.startsWith(`src/`)?l(`/`,c,e.replace(`src/`,``)):l(`/`,c,e)}else if(o.startsWith(`/`)){let e=o.substring(1).replace(`/*`,``);s=(e===`src`||e.startsWith(`src/`),l(`/`,c,a))}else{let e=o.replace(`./`,``).replace(`/*`,``);s=e===c?l(`/`,c,a):e.startsWith(c+`/`)?l(`/`,e,a):e.startsWith(`src/`)?l(`/`,c,e.replace(`src/`,``),a):[`examples`,`src`,`app`,`lib`].includes(e)?l(`/`,c,a):l(`/`,c,e,a)}return s.replace(/\\/g,`/`)}getFromCache(e){let i=this.resolutionCache.get(e);if(i){if(Date.now()-i.timestamp>this.cacheMaxAge){this.resolutionCache.delete(e),this.cacheOrder=this.cacheOrder.filter(i=>i!==e);return}return i.hits++,this.cacheOrder=this.cacheOrder.filter(i=>i!==e),this.cacheOrder.push(e),i.result}}setCache(e,i){if(this.resolutionCache.size>=this.maxCacheSize){let e=this.cacheOrder.shift();e&&this.resolutionCache.delete(e)}this.resolutionCache.set(e,{result:i,timestamp:Date.now(),hits:0}),this.cacheOrder.push(e)}createCacheKey(i,a){let o=e(`md5`);return o.update(i),a&&o.update(a),o.digest(`hex`)}getNodeModulesRelativePath(e){let i=e.indexOf(`node_modules`);if(i!==-1)return`/`+e.substring(i).replace(/\\/g,`/`);let a=u(d(),e).replace(/\\/g,`/`);return a.startsWith(`/`)?a:`/`+a}updateMetrics(e){this.metrics.averageResolveTime=(this.metrics.averageResolveTime*(this.metrics.totalResolutions-1)+e)/this.metrics.totalResolutions}setupPeriodicRefresh(){setInterval(()=>{Date.now()-this.lastIndexUpdate>this.indexRefreshInterval&&(f.VERBOSE===`true`&&p.info(`🔄 Actualizando índices de resolución de módulos`),this.refreshIndexes())},this.indexRefreshInterval)}refreshIndexes(){try{let e=this.moduleIndex.size;this.buildModuleIndex(),this.buildAliasIndex(),this.lastIndexUpdate=Date.now(),f.VERBOSE===`true`&&p.info(`📚 Índices actualizados: ${e} → ${this.moduleIndex.size} módulos`)}catch(e){p.error(`Error actualizando índices:`,e)}}clearExpiredCache(){let e=Date.now(),i=[];for(let[a,o]of this.resolutionCache.entries())e-o.timestamp>this.cacheMaxAge&&i.push(a);for(let e of i)this.resolutionCache.delete(e),this.cacheOrder=this.cacheOrder.filter(i=>i!==e);f.VERBOSE===`true`&&i.length>0&&p.info(`🧹 Limpiado caché expirado: ${i.length} entradas`)}getMetrics(){return{...this.metrics,cacheSize:this.resolutionCache.size,moduleIndexSize:this.moduleIndex.size,aliasIndexSize:this.aliasIndex.length,cacheHitRate:this.metrics.totalResolutions>0?this.metrics.cacheHits/this.metrics.totalResolutions*100:0}}resetMetrics(){this.metrics={totalResolutions:0,cacheHits:0,cacheMisses:0,averageResolveTime:0,indexLookups:0,filesystemAccess:0,aliasMatches:0}}forceRefresh(){this.initializeIndexes(),this.resolutionCache.clear(),this.cacheOrder=[],f.VERBOSE===`true`&&p.info(`🔄 Índices de resolución reconstruidos forzosamente`)}cleanup(){this.moduleIndex.clear(),this.resolutionCache.clear(),this.cacheOrder=[],this.aliasIndex=[],this.nodeModulesCache.clear(),f.VERBOSE===`true`&&p.info(`🧹 Sistema de resolución de módulos limpiado`)}}export async function getOptimizedModulePath(e,i){return(await ModuleResolutionOptimizer.getInstance().resolveModule(e,i)).path}export function getOptimizedAliasPath(e){return ModuleResolutionOptimizer.getInstance().resolveAlias(e)}export function getModuleResolutionMetrics(){return ModuleResolutionOptimizer.getInstance().getMetrics()}
|
package/dist/compiler/parser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash as e}from"node:crypto";import
|
|
1
|
+
import{createHash as e}from"node:crypto";import a,{readFile as o}from"node:fs/promises";import{parseSync as s}from"oxc-parser";class c{static instance;cache=new Map;MAX_CACHE_SIZE=150;MAX_CACHE_MEMORY=30*1024*1024;CACHE_TTL=600*1e3;currentMemoryUsage=0;cacheHits=0;cacheMisses=0;totalParses=0;static getInstance(){return c.instance||(c.instance=new c),c.instance}generateContentHash(a,o){return e(`sha256`).update(`${a}:${o}`).digest(`hex`)}estimateASTSize(e){try{return JSON.stringify(e).length*2}catch{return 1e4}}async getOrParseAST(e,a,o=`js`){this.totalParses++;let c=`${e}:${this.generateContentHash(a,o)}`,l=this.cache.get(c);if(l&&Date.now()-l.timestamp<this.CACHE_TTL)return l.timestamp=Date.now(),this.cacheHits++,{ast:l.ast,cached:!0};this.cacheMisses++;let u=s(e,a,{sourceType:`module`,showSemanticErrors:!0,astType:o});return u&&!u.errors?.length&&this.addToCache(c,u,o),{ast:u,cached:!1}}addToCache(e,a,o){try{let s=this.estimateASTSize(a);this.evictIfNeeded(s);let c={contentHash:e.split(`:`)[1]||``,ast:a,astType:o,timestamp:Date.now(),size:s};this.cache.set(e,c),this.currentMemoryUsage+=s}catch(e){console.warn(`[ParserASTCache] Error cacheando AST:`,e)}}evictIfNeeded(e){for(;this.cache.size>=this.MAX_CACHE_SIZE;)this.evictLRU();for(;this.currentMemoryUsage+e>this.MAX_CACHE_MEMORY&&this.cache.size>0;)this.evictLRU()}evictLRU(){let e=``,a=1/0;for(let[o,s]of this.cache)s.timestamp<a&&(a=s.timestamp,e=o);if(e){let a=this.cache.get(e);a&&(this.currentMemoryUsage-=a.size,this.cache.delete(e))}}cleanExpired(){let e=Date.now();for(let[a,o]of this.cache.entries())e-o.timestamp>this.CACHE_TTL&&(this.currentMemoryUsage-=o.size,this.cache.delete(a))}getStats(){let e=this.totalParses>0?Math.round(this.cacheHits/this.totalParses*100):0;return{cacheHits:this.cacheHits,cacheMisses:this.cacheMisses,hitRate:e,totalParses:this.totalParses,cacheSize:this.cache.size,maxCacheSize:this.MAX_CACHE_SIZE,memoryUsage:this.currentMemoryUsage,maxMemoryUsage:this.MAX_CACHE_MEMORY}}clear(){this.cache.clear(),this.currentMemoryUsage=0,this.cacheHits=0,this.cacheMisses=0,this.totalParses=0}}const l=c.getInstance();export const parser=async(e,a,o=`js`)=>{let{ast:s}=await l.getOrParseAST(e,a,o);return s};export const getCodeFile=async e=>{try{return await a.access(e),{code:await o(e,`utf-8`),error:null}}catch(e){return{code:null,error:e}}};export const getParserCacheStats=()=>l.getStats();export const clearParserCache=()=>{l.clear()};export const cleanExpiredParserCache=()=>{l.cleanExpired()};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{clearBrowserSyncCache as e,getBrowserSyncCacheStats as
|
|
1
|
+
import{clearBrowserSyncCache as e,getBrowserSyncCacheStats as o}from"../servicios/browserSync.js";import{cleanExpiredMinificationCache as s,clearMinificationCache as c,getMinificationCacheStats as l}from"./minify.js";import{getModuleResolutionMetrics as u}from"./module-resolution-optimizer.js";import{cleanExpiredParserCache as d,clearParserCache as f,getParserCacheStats as p}from"./parser.js";import{TransformOptimizer as m}from"./transform-optimizer.js";import{cleanExpiredVueHMRCache as h,clearVueHMRCache as g,getVueHMRCacheStats as _}from"./vuejs.js";export class PerformanceMonitor{static instance;static getInstance(){return PerformanceMonitor.instance||(PerformanceMonitor.instance=new PerformanceMonitor),PerformanceMonitor.instance}getAllStats(){let e=_(),s=p(),c=o(),d=l(),f=m.getInstance().getStats(),h=u(),g=(s.cacheHits||0)+(c.cacheHits||0)+(d.cacheHits||0)+(f.cacheHits||0)+(h.cacheHits||0),v=(s.cacheMisses||0)+(c.cacheMisses||0)+(d.cacheMisses||0)+(f.cacheMisses||0)+(h.cacheMisses||0),y=g+v;return{vueHMRCache:e,parserCache:s,browserSyncCache:c,minificationCache:d,transformOptimizer:f,moduleResolution:h,summary:{totalCacheHits:g,totalCacheMisses:v,overallHitRate:y>0?Math.round(g/y*100):0,totalMemoryUsage:(s.memoryUsage||0)+(c.memoryUsage||0)+(d.memoryUsage||0)+(f.memoryUsage||0),totalCacheEntries:(e.size||0)+(s.cacheSize||0)+(c.cacheSize||0)+(d.cacheSize||0)+(f.cacheSize||0)+(h.cacheSize||0)}}}generateReport(){let e=this.getAllStats(),o=e=>{if(e===0)return`0 B`;let o=1024,s=[`B`,`KB`,`MB`,`GB`],c=Math.floor(Math.log(e)/Math.log(o));return parseFloat((e/o**+c).toFixed(2))+` `+s[c]};return`
|
|
2
2
|
🚀 VERSACOMPILER PERFORMANCE REPORT
|
|
3
3
|
=====================================
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ import{clearBrowserSyncCache as e,getBrowserSyncCacheStats as r}from"../servicio
|
|
|
6
6
|
Hit Rate Total: ${e.summary.overallHitRate}%
|
|
7
7
|
Cache Hits: ${e.summary.totalCacheHits}
|
|
8
8
|
Cache Misses: ${e.summary.totalCacheMisses}
|
|
9
|
-
Memoria Total: ${
|
|
9
|
+
Memoria Total: ${o(e.summary.totalMemoryUsage)}
|
|
10
10
|
Entradas Cache: ${e.summary.totalCacheEntries}
|
|
11
11
|
|
|
12
12
|
🎯 VUE HMR CACHE
|
|
@@ -18,21 +18,21 @@ Hit Rate: ${e.parserCache.hitRate}%
|
|
|
18
18
|
Cache Hits: ${e.parserCache.cacheHits}
|
|
19
19
|
Cache Misses: ${e.parserCache.cacheMisses}
|
|
20
20
|
Size: ${e.parserCache.cacheSize}/${e.parserCache.maxCacheSize}
|
|
21
|
-
Memoria: ${
|
|
21
|
+
Memoria: ${o(e.parserCache.memoryUsage)}/${o(e.parserCache.maxMemoryUsage)}
|
|
22
22
|
|
|
23
23
|
🌐 BROWSERSYNC FILE CACHE
|
|
24
24
|
Hit Rate: ${e.browserSyncCache.hitRate}%
|
|
25
25
|
Cache Hits: ${e.browserSyncCache.cacheHits}
|
|
26
26
|
Cache Misses: ${e.browserSyncCache.cacheMisses}
|
|
27
27
|
Size: ${e.browserSyncCache.cacheSize}/${e.browserSyncCache.maxCacheSize}
|
|
28
|
-
Memoria: ${
|
|
28
|
+
Memoria: ${o(e.browserSyncCache.memoryUsage)}/${o(e.browserSyncCache.maxMemoryUsage)}
|
|
29
29
|
|
|
30
30
|
🗜️ MINIFICATION CACHE
|
|
31
31
|
Hit Rate: ${e.minificationCache.hitRate}%
|
|
32
32
|
Cache Hits: ${e.minificationCache.cacheHits}
|
|
33
33
|
Cache Misses: ${e.minificationCache.cacheMisses}
|
|
34
34
|
Size: ${e.minificationCache.cacheSize}/${e.minificationCache.maxCacheSize}
|
|
35
|
-
Memoria: ${
|
|
35
|
+
Memoria: ${o(e.minificationCache.memoryUsage)}/${o(e.minificationCache.maxMemoryUsage)}
|
|
36
36
|
Compresión Promedio: ${e.minificationCache.avgCompressionRatio}%
|
|
37
37
|
|
|
38
38
|
🔄 TRANSFORM OPTIMIZER
|
|
@@ -41,7 +41,7 @@ Cache Hits: ${e.transformOptimizer.cacheHits}
|
|
|
41
41
|
Cache Misses: ${e.transformOptimizer.cacheMisses}
|
|
42
42
|
Transformaciones: ${e.transformOptimizer.totalTransforms}
|
|
43
43
|
Size: ${e.transformOptimizer.cacheSize}
|
|
44
|
-
Memoria: ${
|
|
44
|
+
Memoria: ${o(e.transformOptimizer.memoryUsage)}
|
|
45
45
|
|
|
46
46
|
📦 MODULE RESOLUTION
|
|
47
47
|
Hit Rate: ${e.moduleResolution.cacheHitRate?.toFixed(1)}%
|
|
@@ -53,4 +53,4 @@ Resoluciones: ${e.moduleResolution.totalResolutions}
|
|
|
53
53
|
Tiempo Promedio: ${e.moduleResolution.averageResolveTime?.toFixed(2)}ms
|
|
54
54
|
|
|
55
55
|
=====================================
|
|
56
|
-
|
|
56
|
+
`}clearAllCaches(){g(),f(),e(),c(),m.getInstance().clear(),console.log(`🧹 Todos los caches han sido limpiados`)}cleanExpiredCaches(){h(),d(),s(),console.log(`🧹 Entradas expiradas limpiadas de todos los caches`)}setupAutomaticCleanup(e=30){setInterval(()=>{this.cleanExpiredCaches(),console.log(`🔄 Limpieza automática ejecutada cada ${e} minutos`)},e*60*1e3)}getSimpleMetrics(){let e=this.getAllStats();return{hitRate:e.summary.overallHitRate,totalHits:e.summary.totalCacheHits,totalMisses:e.summary.totalCacheMisses,memoryUsage:e.summary.totalMemoryUsage,cacheEntries:e.summary.totalCacheEntries}}}export const performanceMonitor=PerformanceMonitor.getInstance();export const getAllPerformanceStats=()=>performanceMonitor.getAllStats();export const generatePerformanceReport=()=>performanceMonitor.generateReport();export const clearAllCaches=()=>performanceMonitor.clearAllCaches();export const cleanExpiredCaches=()=>performanceMonitor.cleanExpiredCaches();export const getSimpleMetrics=()=>performanceMonitor.getSimpleMetrics();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{env as e}from"node:process";import{logger as
|
|
1
|
+
import{env as e}from"node:process";import{logger as n}from"../servicios/logger.js";import{TailwindNode as r}from"../wrappers/tailwind-node.js";export async function generateTailwindCSS(){if(e.tailwindcss===`false`||e.tailwindcss===void 0||e.TAILWIND===`false`)return!1;try{let n=JSON.parse(e.tailwindcss);return!n||!n.input||!n.output||!n.bin?!1:await(await new r({binPath:n.bin,input:n.input,output:n.output,minify:e.isProd===`true`})).run()}catch(e){let r=e instanceof Error?e.stderr||e.message:String(e);if(n.error(`❌ :Error al compilar Tailwind:`,r),e instanceof SyntaxError&&e.message.includes(`JSON`))return!1;throw e}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Buffer as e}from"node:buffer";import{createHash as t}from"node:crypto";import*as n from"node:os";export class TransformOptimizer{static instance;transformCache=new Map;workers=[];workerQueue=[];pendingTasks=new Map;MAX_CACHE_SIZE=200;MAX_CACHE_MEMORY=50*1024*1024;WORKER_POOL_SIZE=Math.min(n.cpus().length,4);TASK_TIMEOUT=1e4;cacheHits=0;cacheMisses=0;totalTransforms=0;currentMemoryUsage=0;constructor(){this.initializeWorkers()}static getInstance(){return TransformOptimizer.instance
|
|
1
|
+
import{Buffer as e}from"node:buffer";import{createHash as t}from"node:crypto";import*as n from"node:os";export class TransformOptimizer{static instance;transformCache=new Map;workers=[];workerQueue=[];pendingTasks=new Map;MAX_CACHE_SIZE=200;MAX_CACHE_MEMORY=50*1024*1024;WORKER_POOL_SIZE=Math.min(n.cpus().length,4);TASK_TIMEOUT=1e4;cacheHits=0;cacheMisses=0;totalTransforms=0;currentMemoryUsage=0;constructor(){this.initializeWorkers()}static getInstance(){return TransformOptimizer.instance||(TransformOptimizer.instance=new TransformOptimizer),TransformOptimizer.instance}async initializeWorkers(){console.log(`[TransformOptimizer] Inicializado sin workers (procesamiento síncrono optimizado)`)}async transform(e,t,n={}){this.totalTransforms++;let r=this.generateCacheKey(e,t,n),i=await this.getFromCache(r);if(i)return this.cacheHits++,i;this.cacheMisses++;let a=await this.applyTransforms(e,t,n);return await this.addToCache(r,e,t,n,a),a}generateCacheKey(e,n,r){let i=`${e}||${n.join(`,`)}||${JSON.stringify(r)}`;return t(`sha256`).update(i).digest(`hex`)}async getFromCache(e){let t=this.transformCache.get(e);return t?(t.lastUsed=Date.now(),t.result):null}async addToCache(e,n,r,i,a){try{let i=this.estimateSize(n,a);this.evictIfNeeded(i);let o={inputHash:t(`sha256`).update(n).digest(`hex`),transformHash:t(`sha256`).update(r.join(`,`)).digest(`hex`),result:a,lastUsed:Date.now(),size:i};this.transformCache.set(e,o),this.currentMemoryUsage+=i}catch(e){console.warn(`[TransformOptimizer] Error cacheando transformación:`,e)}}async applyTransforms(e,t,n){try{let r=e,i,a=[],o=[];for(let e of t){let t=await this.applySingleTransform(r,e,n,i);r=t.code,t.map&&(a.push(t.map),i=t.map),t.dependencies&&o.push(...t.dependencies)}let s=a.length>1?this.composeSourceMaps(a):i;return{code:r,map:s,dependencies:[...new Set(o)]}}catch(e){throw Error(`Error aplicando transformaciones: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async applySingleTransform(e,t,n,r){switch(t){case`typescript`:return this.applyTypeScriptTransform(e,n,r);case`vue`:return this.applyVueTransform(e,n,r);case`minify`:return this.applyMinifyTransform(e,n,r);case`babel`:return this.applyBabelTransform(e,n,r);default:throw Error(`Transformación desconocida: ${t}`)}}async applyTypeScriptTransform(e,t,n){let{preCompileTS:r}=await import(`./typescript-manager.js`),i=await r(e,`temp.ts`);if(i.error)throw i.error;let a=this.generateBasicSourceMap(`typescript`,i.data||e,n);return{code:i.data||e,map:a,dependencies:[]}}async applyVueTransform(e,t,n){let{preCompileVue:r}=await import(`./vuejs.js`),i=await r(e,`temp.vue`,!1);if(i.error)throw i.error;let a=this.generateBasicSourceMap(`vue`,i.data||e,n);return{code:i.data||e,map:a,dependencies:[]}}async applyMinifyTransform(e,t,n){let{minifyJS:r}=await import(`./minify.js`),i=await r(e,`temp.js`,!0);if(i.error)throw i.error;let a=this.generateBasicSourceMap(`minify`,i.code||e,n);return{code:i.code||e,map:a,dependencies:[]}}async applyBabelTransform(e,t,n){return{code:e,map:n,dependencies:[]}}composeSourceMaps(n){if(n.length===0)return``;if(n.length===1)return n[0];try{let r={version:3,sources:[`original-source`],names:[],mappings:`AAAA,${t(`sha256`).update(n.join(``)).digest(`hex`).substring(0,8)}`,file:`compiled.js`,versaCompilerComposed:!0,chainLength:n.length,transformationChain:n.map((t,n)=>{try{if(t.includes(`base64,`)){let r=t.split(`base64,`)[1];if(r){let t=JSON.parse(e.from(r,`base64`).toString());return{index:n,sources:t.sources||[],file:t.file||`transform-${n}.js`}}}return{index:n,sources:[],file:`transform-${n}.js`}}catch{return{index:n,sources:[],file:`transform-${n}.js`}}})};return`//# sourceMappingURL=data:application/json;base64,${e.from(JSON.stringify(r)).toString(`base64`)}`}catch(e){return console.warn(`[TransformOptimizer] Error composing sourcemaps:`,e),n[n.length-1]}}generateBasicSourceMap(n,r,i){try{let a=t(`sha256`).update(r+n).digest(`hex`).substring(0,8),o={version:3,sources:[i?`previous-transform`:`${n}.js`],names:[],mappings:`AAAA,${a}`,file:`output.js`,transformName:n,hasInputMap:!!i};return`//# sourceMappingURL=data:application/json;base64,${e.from(JSON.stringify(o)).toString(`base64`)}`}catch(e){return console.warn(`[TransformOptimizer] Error generating sourcemap for ${n}:`,e),i||``}}estimateSize(e,t){return e.length*2+t.code.length*2+(t.map?.length||0)*2+(t.dependencies?.join(``).length||0)*2+200}evictIfNeeded(e){for(;this.transformCache.size>=this.MAX_CACHE_SIZE;)this.evictLRU();for(;this.currentMemoryUsage+e>this.MAX_CACHE_MEMORY&&this.transformCache.size>0;)this.evictLRU()}evictLRU(){let e=``,t=1/0;for(let[n,r]of this.transformCache)r.lastUsed<t&&(t=r.lastUsed,e=n);if(e){let t=this.transformCache.get(e);t&&(this.currentMemoryUsage-=t.size,this.transformCache.delete(e))}}getStats(){let e=this.totalTransforms>0?Math.round(this.cacheHits/this.totalTransforms*100):0;return{cacheHits:this.cacheHits,cacheMisses:this.cacheMisses,hitRate:e,totalTransforms:this.totalTransforms,cacheSize:this.transformCache.size,memoryUsage:this.currentMemoryUsage}}clear(){this.transformCache.clear(),this.currentMemoryUsage=0,this.cacheHits=0,this.cacheMisses=0,this.totalTransforms=0}async terminate(){this.clear(),console.log(`[TransformOptimizer] Cerrado exitosamente`)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e
|
|
1
|
+
import{transform as e}from"/node_modules/oxc-transform/browser.js";export function traspileTStoJS(t,n){try{let{code:r,declaration:i,errors:a}=e(t,n);return{outputText:r,declaration:i||``,diagnostics:a||[]}}catch(e){return console.error(`Error transpiling ${t}:`,e),{outputText:``,declaration:``,diagnostics:[e]}}}
|
|
@@ -1 +1 @@
|
|
|
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(`/`)
|
|
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`}}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:fs";import i from"node:path";import*as a from"node:process";import{env as o}from"node:process";import*as s from"typescript";import{createUnifiedErrorMessage as c,parseTypeScriptErrors as l}from"./typescript-error-parser.js";import{validateTypesWithLanguageService as u}from"./typescript-sync-validator.js";import{TypeScriptWorkerManager as d}from"./typescript-worker.js";let f={};export const loadTypeScriptConfig=o=>{let c=i.dirname(o),l=s.findConfigFile(c,s.sys.fileExists,`tsconfig.json`)||i.resolve(a.cwd(),`tsconfig.json`);if(f.path===l&&f.options)return f.options;let u;if(l&&e.existsSync(l))try{let{config:e,error:a}=s.readConfigFile(l,s.sys.readFile);if(a)throw Error(`Error al leer tsconfig.json: ${a.messageText}`)
|
|
1
|
+
import e from"node:fs";import i from"node:path";import*as a from"node:process";import{env as o}from"node:process";import*as s from"typescript";import{createUnifiedErrorMessage as c,parseTypeScriptErrors as l}from"./typescript-error-parser.js";import{validateTypesWithLanguageService as u}from"./typescript-sync-validator.js";import{TypeScriptWorkerManager as d}from"./typescript-worker.js";let f={};export const loadTypeScriptConfig=o=>{let c=i.dirname(o),l=s.findConfigFile(c,s.sys.fileExists,`tsconfig.json`)||i.resolve(a.cwd(),`tsconfig.json`);if(f.path===l&&f.options)return f.options;let u;if(l&&e.existsSync(l))try{let{config:e,error:a}=s.readConfigFile(l,s.sys.readFile);if(!a)u=s.parseJsonConfigFileContent(e,s.sys,i.dirname(l)).options;else throw Error(`Error al leer tsconfig.json: ${a.messageText}`)}catch(e){console.warn(`[loadTypeScriptConfig] Error cargando ${l}:`,e),u=p()}else u=p();return f={path:l,options:u},u};const p=()=>({target:s.ScriptTarget.ES2020,module:s.ModuleKind.ES2020,lib:[`es2020`,`dom`,`dom.iterable`],strict:!1,skipLibCheck:!0,allowJs:!0,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}),m=e=>({...e,declaration:!1,sourceMap:!1});export const validateVueTypes=(e,i)=>u(i,e,loadTypeScriptConfig(i));export const preCompileTS=async(e,i)=>{try{if(!e.trim())return{error:null,data:e,lang:`ts`};let a=loadTypeScriptConfig(i),u=s.transpileModule(e,{compilerOptions:{...a,noLib:!0,skipLibCheck:!0,isolatedModules:!0},fileName:i,reportDiagnostics:!0});if(u.diagnostics?.length){let a=u.diagnostics.filter(e=>{if(e.category!==s.DiagnosticCategory.Error)return!1;let i=s.flattenDiagnosticMessageText(e.messageText,`
|
|
2
2
|
`);return!i.includes(`Cannot find module`)&&!i.includes(`Could not find source file`)&&e.code!==2307&&e.code!==6059});if(a.length>0){let o=c(l(a,i,e));return{error:Error(o),data:null,lang:`ts`}}}if(o.typeCheck===`true`)try{let o=d.getInstance(),s=m(a),u=await o.typeCheck(i,e,s);if(u.hasErrors){let a=c(l(u.diagnostics,i,e));return{error:Error(a),data:null,lang:`ts`}}}catch(e){console.warn(`[preCompileTS] Type checking failed:`,e)}let f=u.outputText;return f.trim()===`export {};`?{error:null,data:``,lang:`ts`}:{error:null,data:f,lang:`ts`}}catch(e){return{error:e instanceof Error?e:Error(`Error desconocido`),data:null,lang:`ts`}}};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import*as e from"typescript";export function parseTypeScriptErrors(t,n,i){return t.map(t=>{let a=r(t,n,i),o;switch(t.category){case e.DiagnosticCategory.Error:o=`error`;break;case e.DiagnosticCategory.Warning:o=`warning`;break;default:o=`info`;break}let s=`Código TS${t.code}`;if(t.file&&t.start!==void 0){let e=t.file;if(typeof e.getLineAndCharacterOfPosition==`function`)try{let n=e.getLineAndCharacterOfPosition(t.start);s+=` | Línea ${n.line+1}, Columna ${n.character+1}`}catch{s+=` | Posición ${t.start}`}else s+=` | Posición ${t.start}`}return{file:n,message:a,severity:o,help:s}})}function n(e){return e.replace(/^error TS\d+:\s*/i,``).replace(/^.*\.ts\(\d+,\d+\):\s*/,``).replace(/\s+/g,` `).trim()}function r(t,r,a){let o=typeof t.messageText==`string`?t.messageText:e.flattenDiagnosticMessageText(t.messageText,`
|
|
2
|
-
`),s
|
|
3
|
-
`)
|
|
1
|
+
import*as e from"typescript";export function parseTypeScriptErrors(t,n,i){return t.map(t=>{let a=r(t,n,i),o;switch(t.category){case e.DiagnosticCategory.Error:o=`error`;break;case e.DiagnosticCategory.Warning:o=`warning`;break;default:o=`info`;break}let s=`Código TS${t.code}`;if(t.file&&t.start!==void 0){let e=t.file;if(typeof e.getLineAndCharacterOfPosition==`function`)try{let n=e.getLineAndCharacterOfPosition(t.start);s+=` | Línea ${n.line+1}, Columna ${n.character+1}`}catch{s+=` | Posición ${t.start}`}else s+=` | Posición ${t.start}`}return{file:n,message:a,severity:o,help:s}})}function n(e){return e.replace(/^error TS\d+:\s*/i,``).replace(/^.*\.ts\(\d+,\d+\):\s*/,``).replace(/\s+/g,` `).trim()}function r(t,r,a){let o=n(typeof t.messageText==`string`?t.messageText:e.flattenDiagnosticMessageText(t.messageText,`
|
|
2
|
+
`)),s=`Código TS${t.code}`,c=``;if(t.file&&t.start!==void 0){let e=t.file;if(typeof e.getLineAndCharacterOfPosition==`function`)try{let n=e.getLineAndCharacterOfPosition(t.start);s=`Línea ${n.line+1}, Columna ${n.character+1} | Código TS${t.code}`}catch{s=`Posición ${t.start} | Código TS${t.code}`}else s=`Posición ${t.start} | Código TS${t.code}`;if((a||e.text)&&typeof e.getLineAndCharacterOfPosition==`function`)try{let n=e.getLineAndCharacterOfPosition(t.start),r=(a||e.text).split(`
|
|
3
|
+
`);if(r[n.line]){let e=Math.max(0,n.line-2),t=Math.min(r.length-1,n.line+2);c=`
|
|
4
4
|
|
|
5
5
|
📝 Contexto del código:
|
|
6
|
-
`;for(let
|
|
7
|
-
`)}`:``;return`${
|
|
8
|
-
`)}),
|
|
9
|
-
`)
|
|
10
|
-
`)[0],
|
|
6
|
+
`;for(let i=e;i<=t;i++){let e=i+1,t=r[i]||``;if(i===n.line){c+=` ${e.toString().padStart(3,` `)} ❌ ${t}\n`;let r=` `.repeat(6+n.character+1)+`^^^`;c+=` ${r}\n`}else c+=` ${e.toString().padStart(3,` `)} ${t}\n`}}}catch{}}let l=i(t.code,o),u=l.length>0?`\n\n💡 Sugerencias:\n${l.map(e=>` • ${e}`).join(`
|
|
7
|
+
`)}`:``;return`${o}\n 📍 ${s}${c}${u}`}function i(e,t){let n=[];switch(e){case 2304:n.push(`Verifica que la variable esté declarada`),n.push(`Asegúrate de importar el módulo correspondiente`),n.push(`Revisa la ortografía del nombre`);break;case 2322:n.push(`Verifica que los tipos sean compatibles`),n.push(`Considera usar type assertion: valor as TipoEsperado`);break;case 2307:n.push(`Verifica que el archivo exista en la ruta especificada`),n.push(`Revisa las rutas en tsconfig.json`),n.push(`Asegúrate de que el paquete esté instalado`);break;case 2451:n.push(`Cambia el nombre de la variable`),n.push(`Usa un scope diferente (function, block)`);break;case 7006:n.push(`Agrega tipos explícitos a los parámetros`),n.push(`Considera habilitar "noImplicitAny": false en tsconfig.json`);break;case 1155:n.push(`Agrega un valor inicial: const variable = valor;`),n.push(`O cambia a "let" si quieres asignar después`);break;case 2339:n.push(`Verifica que la propiedad exista en el tipo`),n.push(`Considera usar optional chaining: objeto?.propiedad`);break;default:t.includes(`Cannot find`)&&n.push(`Verifica que el elemento exista y esté importado`),t.includes(`Type`)&&n.push(`Revisa la compatibilidad de tipos`),t.includes(`missing`)&&n.push(`Agrega el elemento faltante`);break}return n}export function createUnifiedErrorMessage(e){if(e.length===0)return`Error de TypeScript desconocido`;if(e.length===1){let t=e[0];return t?`${t.message}\n └─ ${t.help}`:`Error de TypeScript desconocido`}let t=e.filter(e=>e.severity===`error`).length,n=e.filter(e=>e.severity===`warning`).length,r=e.slice(0,10),i=e.length>10,a=``,o=``;if(t>0&&(o+=`${t} error${t>1?`es`:``}`),n>0&&(o&&(o+=`, `),o+=`${n} advertencia${n>1?`s`:``}`),a+=`TypeScript: ${o} encontrado${t+n>1?`s`:``}:\n\n`,r.forEach((e,t)=>{let n=e.severity===`error`?`❌`:e.severity===`warning`?`⚠️`:`ℹ️`;a+=`${n} ${e.message}\n`,a+=` └─ ${e.help}\n`,t<r.length-1&&(a+=`
|
|
8
|
+
`)}),i){let t=e.length-10;a+=`\n... y ${t} error${t>1?`es`:``} más`}return a}export function createSimpleErrorMessage(t,n){if(t.length===0)return``;let r=t[0];if(!r)return``;let i=e.flattenDiagnosticMessageText(r.messageText,`
|
|
9
|
+
`).split(`
|
|
10
|
+
`)[0],a=``;if(r.file&&r.start!==void 0){let e=r.file;if(typeof e.getLineAndCharacterOfPosition==`function`)try{a=` (línea ${e.getLineAndCharacterOfPosition(r.start).line+1})`}catch{}}let o=t.length,s=o>1?` (+${o-1} más)`:``;return`${i}${a}${s}`}export function createDetailedErrorMessage(e,n,r){return createUnifiedErrorMessage(parseTypeScriptErrors(e,n,r))}export function registerCleanTypeScriptErrors(e,n,r){parseTypeScriptErrors(e,n).forEach(e=>{r(e.file,e.message,e.severity,e.help)})}
|