import { ComponentNode, PrismaModel, ThemeConfig } from '@/types/project' import { generateMUITheme } from './generateMUITheme' import { generatePrismaSchema } from './generatePrismaSchema' export function generateNextJSProject( projectName: string, models: PrismaModel[], components: ComponentNode[], theme: ThemeConfig ): Record { const files: Record = {} files['package.json'] = JSON.stringify( { name: projectName, version: '0.1.0', private: true, scripts: { dev: 'next dev', build: 'next build', start: 'next start', lint: 'next lint', }, dependencies: { '@mui/material': '^5.15.0', '@emotion/react': '^11.11.0', '@emotion/styled': '^11.11.0', '@prisma/client': '^5.8.0', next: '14.1.0', react: '^18.2.0', 'react-dom': '^18.2.0', }, devDependencies: { '@types/node': '^20', '@types/react': '^18', '@types/react-dom': '^18', prisma: '^5.8.0', typescript: '^5', }, }, null, 2 ) files['prisma/schema.prisma'] = generatePrismaSchema(models) files['src/theme.ts'] = generateMUITheme(theme) files['src/app/page.tsx'] = `'use client' import { ThemeProvider } from '@mui/material/styles' import CssBaseline from '@mui/material/CssBaseline' import { theme } from '@/theme' export default function Home() { return (
{/* Your components here */}
) }` files['next.config.js'] = `/** @type {import('next').NextConfig} */ const nextConfig = {} module.exports = nextConfig` files['.env'] = `DATABASE_URL="postgresql://user:password@localhost:5432/mydb"` files['README.md'] = `# ${projectName} Generated with CodeForge ## Getting Started 1. Install dependencies: \`\`\`bash npm install \`\`\` 2. Set up your database in .env 3. Run Prisma migrations: \`\`\`bash npx prisma migrate dev \`\`\` 4. Start the development server: \`\`\`bash npm run dev \`\`\` Open [http://localhost:3000](http://localhost:3000) with your browser.` return files }