UNPKG

ai-debug-local-mcp

Version:

🎯 ENHANCED AI GUIDANCE v4.1.2: Dramatically improved tool descriptions help AI users choose the right tools instead of 'close enough' options. Ultra-fast keyboard automation (10x speed), universal recording, multi-ecosystem debugging support, and compreh

205 lines • 6.68 kB
import { EventListenerManager } from '../utils/event-listener-manager.js'; /** * Cleanup Module * Handles proper cleanup of event listeners and resources for meta-frameworks */ export class MetaFrameworkCleanup { eventListenerManager; domListeners = new Map(); hmrListeners = new Map(); page; constructor() { this.eventListenerManager = new EventListenerManager(); } /** * Set the page reference for cleanup operations */ setPage(page) { this.page = page; } /** * Register a DOM event listener for tracking */ registerDOMListener(id, target) { this.domListeners.set(id, target); } /** * Register an HMR listener for tracking */ registerHMRListener(id, listener) { this.hmrListeners.set(id, listener); } /** * Cleanup page event listeners */ async cleanupPageListeners() { if (!this.page) { return; } try { // Remove page event listeners this.page.off('console', this.handleConsoleMessage); this.page.off('pageerror', this.handlePageError); this.page.off('requestfailed', this.handleRequestFailed); } catch (error) { console.debug('Error cleaning up page listeners:', error); } } /** * Cleanup DOM event listeners */ async cleanupDOMListeners() { if (!this.page) { return; } try { // Clean up global window listeners that were added await this.page.evaluate(() => { // Remove fetch override if (window.__originalFetch) { window.fetch = window.__originalFetch; delete window.__originalFetch; } // Remove navigation listeners if (window.__navigationListeners) { window.__navigationListeners.forEach((listener) => { try { window.removeEventListener('popstate', listener); } catch (e) { // Ignore cleanup errors } }); delete window.__navigationListeners; } // Clear framework-specific monitoring data delete window.__remixLoaderData; delete window.__astroIslands; delete window.__nuxtMonitorData; delete window.__qwikMonitorData; delete window.__solidMonitorData; delete window.__svelteKitMonitorData; delete window.__viteHMREvents; }); } catch (error) { console.debug('Error cleaning up DOM listeners:', error); } // Clear tracked DOM listeners this.domListeners.clear(); } /** * Cleanup HMR listeners */ async cleanupHMRListeners() { if (!this.page) { return; } try { // Remove HMR event listeners await this.page.evaluate(() => { // Restore original Vite HMR context if overridden if (window.__originalViteCreateHotContext) { if (window.__vite__) { window.__vite__.createHotContext = window.__originalViteCreateHotContext; } delete window.__originalViteCreateHotContext; } // Clear HMR event storage delete window.__viteHMREvents; }); } catch (error) { console.debug('Error cleaning up HMR listeners:', error); } // Clear tracked HMR listeners this.hmrListeners.clear(); } /** * Cleanup framework-specific resources */ async cleanupFrameworkResources() { if (!this.page) { return; } try { await this.page.evaluate(() => { // Cleanup Remix overrides if (window.__remixOriginalFetch) { window.fetch = window.__remixOriginalFetch; delete window.__remixOriginalFetch; } // Cleanup Astro observers if (window.__astroMutationObserver) { window.__astroMutationObserver.disconnect(); delete window.__astroMutationObserver; } // Cleanup Nuxt router listeners if (window.__nuxtRouterCleanup) { window.__nuxtRouterCleanup.forEach((cleanup) => { try { cleanup(); } catch (e) { // Ignore cleanup errors } }); delete window.__nuxtRouterCleanup; } // Cleanup Qwik overrides if (window.__qwikOriginalSymbol && window.__qwik) { window.__qwik.symbol = window.__qwikOriginalSymbol; delete window.__qwikOriginalSymbol; } }); } catch (error) { console.debug('Error cleaning up framework resources:', error); } } /** * Cleanup event listener manager */ async cleanupEventListenerManager() { try { await this.eventListenerManager.cleanup(); } catch (error) { console.debug('Error cleaning up event listener manager:', error); } } /** * Complete cleanup of all resources */ async cleanup() { await Promise.allSettled([ this.cleanupPageListeners(), this.cleanupDOMListeners(), this.cleanupHMRListeners(), this.cleanupFrameworkResources(), this.cleanupEventListenerManager() ]); } /** * Comprehensive cleanup that also clears tracking maps */ async cleanupAll() { await this.cleanup(); // Clear all tracking this.domListeners.clear(); this.hmrListeners.clear(); this.page = undefined; } // Event handler methods (needed for proper cleanup) handleConsoleMessage = (message) => { // Console message handler }; handlePageError = (error) => { // Page error handler }; handleRequestFailed = (request) => { // Request failed handler }; } //# sourceMappingURL=meta-framework-cleanup.js.map