UNPKG

@incidental/project-templates

Version:

Claude Code template library for JavaScript projects with framework auto-detection

126 lines (103 loc) 3.02 kB
import { readPackageJson, fileExists } from '../utils/file-ops.js'; import { CONFIG } from '../utils/config.js'; import path from 'path'; /** * Detect if Next.js is being used */ export async function detectNextJS() { const packageJson = await readPackageJson(); if (!packageJson) { return false; } // Check for Next.js in dependencies const hasNextDependency = (packageJson.dependencies && packageJson.dependencies.next) || (packageJson.devDependencies && packageJson.devDependencies.next); if (hasNextDependency) { return true; } // Check for Next.js config files for (const indicator of CONFIG.FRAMEWORK_INDICATORS.nextjs) { const filePath = path.join(CONFIG.TARGET_DIR, indicator); if (await fileExists(filePath)) { return true; } } return false; } /** * Detect if React is being used (without Next.js) */ export async function detectReact() { const packageJson = await readPackageJson(); if (!packageJson) { return false; } // Check for React in dependencies (but not Next.js) const hasReactDependency = (packageJson.dependencies && packageJson.dependencies.react) || (packageJson.devDependencies && packageJson.devDependencies.react); const hasNextDependency = (packageJson.dependencies && packageJson.dependencies.next) || (packageJson.devDependencies && packageJson.devDependencies.next); if (hasReactDependency && !hasNextDependency) { // Check for React-specific files for (const indicator of CONFIG.FRAMEWORK_INDICATORS.react) { const filePath = path.join(CONFIG.TARGET_DIR, indicator); if (await fileExists(filePath)) { return true; } } // If has React dependency, assume it's a React project even without specific files return true; } return false; } /** * Detect vanilla JavaScript (no framework) */ export async function detectVanilla() { const packageJson = await readPackageJson(); // If no package.json, it's vanilla if (!packageJson) { return true; } // If no React, Next.js, or other major frameworks, it's vanilla const hasFramework = (packageJson.dependencies && ( packageJson.dependencies.react || packageJson.dependencies.next || packageJson.dependencies.vue || packageJson.dependencies.angular )) || (packageJson.devDependencies && ( packageJson.devDependencies.react || packageJson.devDependencies.next || packageJson.devDependencies.vue || packageJson.devDependencies.angular )); return !hasFramework; } /** * Auto-detect the framework being used * Returns: 'nextjs', 'react', 'vanilla', or null */ export async function detectFramework() { // Check in order of specificity if (await detectNextJS()) { return 'nextjs'; } if (await detectReact()) { return 'react'; } if (await detectVanilla()) { return 'vanilla'; } return null; } export default { detectNextJS, detectReact, detectVanilla, detectFramework };