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 • 8.79 kB
JavaScript
/**
* Framework Detection Module
* Handles detection of meta-frameworks and their configurations
*/
export class MetaFrameworkDetection {
/**
* Detect which meta-framework is running on the page
*/
async detectMetaFramework(page) {
return await page.evaluate(() => {
const info = {
framework: null,
features: []
};
try {
// Check for Remix
if (window.__remixContext ||
window.__remixRouter ||
document.querySelector('[data-remix-router]') ||
document.querySelector('[data-remix-root]')) {
info.framework = 'remix';
info.features.push('router', 'loader', 'action');
// Try to get version
if (window.__remixContext?.manifest?.version) {
info.version = window.__remixContext.manifest.version;
}
if (window.__remixContext?.routeData) {
info.features.push('data-loading');
}
if (document.querySelector('[data-remix-outlet]')) {
info.features.push('outlet');
}
}
// Check for Astro
else if (window.__astro ||
document.querySelector('[data-astro-component]') ||
document.querySelector('astro-island') ||
document.querySelector('[astro\\:component]')) {
info.framework = 'astro';
info.features.push('islands');
if (window.__astro?.version) {
info.version = window.__astro.version;
}
if (document.querySelectorAll('astro-island').length > 0) {
info.features.push('hydration');
}
if (window.__astro?.ssr !== false) {
info.features.push('ssr');
}
}
// Check for Nuxt
else if (window.__NUXT__ ||
window.$nuxt ||
document.querySelector('#__nuxt') ||
document.querySelector('[data-server-rendered="true"]')) {
info.framework = 'nuxt';
info.features.push('ssr', 'router');
if (window.__NUXT__?.version) {
info.version = window.__NUXT__.version;
}
if (window.__NUXT__?.data) {
info.features.push('payload');
}
if (window.$nuxt?.$router) {
info.features.push('vue-router');
}
}
// Check for Qwik
else if (window.__qwik ||
document.querySelector('[q\\:container]') ||
document.querySelector('[q\\:version]')) {
info.framework = 'qwik';
info.features.push('resumability', 'signals');
const qContainer = document.querySelector('[q\\:version]');
if (qContainer) {
info.version = qContainer.getAttribute('q:version') || undefined;
}
if (document.querySelector('[q\\:obj]')) {
info.features.push('serialization');
}
}
// Check for SolidJS
else if (window.__solid ||
window.Solid ||
document.querySelector('[data-solid]') ||
document.querySelector('[data-hk]') // Solid's hydration key
) {
info.framework = 'solidjs';
info.features.push('signals', 'fine-grained-reactivity');
if (window.Solid?.version) {
info.version = window.Solid.version;
}
if (document.querySelector('[data-hk]')) {
info.features.push('hydration');
}
}
// Check for SvelteKit
else if (window.__sveltekit ||
window.__svelte ||
document.querySelector('[data-sveltekit]') ||
document.querySelector('[data-svelte-kit]')) {
info.framework = 'sveltekit';
info.features.push('ssr', 'routing');
if (window.__sveltekit?.version) {
info.version = window.__sveltekit.version;
}
if (window.__sveltekit?.updated) {
info.features.push('hot-reload');
}
}
// Detect build tool
if (window.__vite_plugin_react ||
window.__vite__ ||
document.querySelector('[data-vite-dev-id]')) {
info.buildTool = 'vite';
}
else if (window.__webpack_require__ ||
window.webpackChunkName) {
info.buildTool = 'webpack';
}
else if (window.__esbuild__) {
info.buildTool = 'esbuild';
}
else if (window.__rollup__) {
info.buildTool = 'rollup';
}
}
catch (error) {
console.debug('Framework detection error:', error);
}
return info;
});
}
/**
* Get detailed framework information including advanced features
*/
async getFrameworkCapabilities(page, framework) {
return await page.evaluate((fw) => {
const capabilities = [];
switch (fw) {
case 'remix':
if (window.__remixContext?.matches)
capabilities.push('nested-routing');
if (window.fetch)
capabilities.push('fetch-polyfill');
if (document.querySelector('[data-remix-error]'))
capabilities.push('error-boundaries');
break;
case 'astro':
if (document.querySelector('[data-astro-rerender]'))
capabilities.push('partial-hydration');
if (window.__astro?.prefetch)
capabilities.push('prefetching');
break;
case 'nuxt':
if (window.__NUXT__?.asyncData)
capabilities.push('async-data');
if (window.__NUXT__?.fetch)
capabilities.push('universal-fetch');
break;
case 'qwik':
if (document.querySelector('[q\\:func]'))
capabilities.push('serializable-functions');
if (window.__qwik?.prefetch)
capabilities.push('speculative-loading');
break;
case 'solidjs':
if (window.Solid?.createStore)
capabilities.push('stores');
if (window.Solid?.createResource)
capabilities.push('resources');
break;
case 'sveltekit':
if (window.__sveltekit?.prefetch)
capabilities.push('link-prefetching');
if (window.__sveltekit?.goto)
capabilities.push('programmatic-navigation');
break;
}
return capabilities;
}, framework);
}
/**
* Check if framework is in development or production mode
*/
async getFrameworkMode(page) {
return await page.evaluate(() => {
// Check common development indicators
if (window.__DEV__ === true ||
window.process?.env?.NODE_ENV === 'development' ||
window.__vite__ ||
document.querySelector('[data-vite-dev-id]')) {
return 'development';
}
// Check production indicators
if (window.process?.env?.NODE_ENV === 'production' ||
document.querySelector('[data-production]') ||
!window.__DEV__) {
return 'production';
}
return 'unknown';
});
}
}
//# sourceMappingURL=meta-framework-detection.js.map