Files
btpxpress-frontend/analyze-routes.js
2025-10-13 05:29:32 +02:00

63 lines
1.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs');
const path = require('path');
function analyzeRoutes(dir, basePath = '') {
const routes = [];
const items = fs.readdirSync(dir);
for (const item of items) {
const fullPath = path.join(dir, item);
const stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
// Route groups (main) ne font pas partie de l'URL
if (item.startsWith('(') && item.endsWith(')')) {
routes.push(...analyzeRoutes(fullPath, basePath));
} else {
routes.push(...analyzeRoutes(fullPath, path.join(basePath, item)));
}
} else if (item === 'page.tsx' || item === 'page.js') {
const route = basePath || '/';
routes.push({
route: route === '' ? '/' : route,
file: path.relative('app', fullPath)
});
}
}
return routes;
}
console.log('🔍 Analyse des routes Next.js App Router:');
console.log('==========================================');
const routes = analyzeRoutes('app');
routes.sort((a, b) => a.route.localeCompare(b.route));
routes.forEach(({ route, file }) => {
console.log(`${route.padEnd(30)}${file}`);
});
console.log('\n📋 Résumé:');
console.log(`Total des routes: ${routes.length}`);
// Détecter les conflits
const routeMap = {};
routes.forEach(({ route, file }) => {
if (!routeMap[route]) {
routeMap[route] = [];
}
routeMap[route].push(file);
});
const conflicts = Object.entries(routeMap).filter(([route, files]) => files.length > 1);
if (conflicts.length > 0) {
console.log('\n⚠ Conflits détectés:');
conflicts.forEach(([route, files]) => {
console.log(`${route}:`);
files.forEach(file => console.log(` - ${file}`));
});
} else {
console.log('\n✅ Aucun conflit détecté');
}