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
JavaScript
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