larats 1.0.1 β 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -11
- package/dist/index.js +851 -281
- package/dist/index.js.map +1 -1
- package/package.json +5 -7
- package/dist/index.cjs +0 -1744
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -2
- package/dist/index.d.ts +0 -2
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/detector.ts","../src/scanner.ts","../src/generator/markdown.ts","../src/generator/scaffolder.ts","../src/templates/laravel.ts","../src/templates/typescript.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport { detectProjectType, type ProjectInfo } from './detector.js';\nimport { scanProject } from './scanner.js';\nimport { generateArchitectureMarkdown } from './generator/markdown.js';\nimport { scaffoldModule, type ScaffoldResult } from './generator/scaffolder.js';\n\nconst VERSION = '1.0.1';\n\nfunction showHelp() {\n console.log(`\n${pc.bold(pc.cyan('LaraTS CLI'))} ${pc.gray(`v${VERSION}`)}\n${pc.gray('Smart Architecture Visualizer & Contextual Module Scaffolder')}\n\n${pc.bold('USAGE:')}\n ${pc.cyan('$')} npx larats [command] [options]\n ${pc.cyan('$')} larats [command] [options]\n\n${pc.bold('COMMANDS:')}\n ${pc.green('scan')} Scan repository & generate ARCHITECTURE.md\n ${pc.green('scaffold')}, ${pc.green('make')} [name] Scaffold a new module or feature with clean boilerplate\n ${pc.green('info')} Show detected project type & architectural flavor\n ${pc.green('help')} Display this help message\n\n${pc.bold('OPTIONS:')}\n ${pc.yellow('-o, --output')} <file> Output markdown path for scan (default: ARCHITECTURE.md)\n ${pc.yellow('-m, --modular')} Enforce modular directory structure\n ${pc.yellow('-s, --standard')} Enforce standard/layered directory structure\n ${pc.yellow('--dry-run')} Simulate generation without writing files\n ${pc.yellow('-f, --force')} Overwrite files if they already exist\n ${pc.yellow('-v, --version')} Display CLI version\n ${pc.yellow('-h, --help')} Display this help message\n\n${pc.bold('EXAMPLES:')}\n ${pc.cyan('$')} larats\n ${pc.cyan('$')} larats scan\n ${pc.cyan('$')} larats scan --output docs/ARCHITECTURE.md\n ${pc.cyan('$')} larats scaffold Payment\n ${pc.cyan('$')} larats make Order --modular\n`);\n}\n\n/**\n * Handle cancellation gracefully\n */\nfunction handleCancel(): never {\n p.cancel(pc.yellow('Operation cancelled. See you next time! π'));\n process.exit(0);\n}\n\n/**\n * Execute scan workflow\n */\nasync function runScan(projectInfo: ProjectInfo, outputPath: string = 'ARCHITECTURE.md') {\n const spinner = p.spinner();\n spinner.start('Scanning codebase structure & components (strict ignore list active)...');\n\n try {\n const scanResult = await scanProject(projectInfo);\n spinner.stop(pc.green(`Scan completed in ${scanResult.scanDurationMs}ms`));\n\n const markdown = generateArchitectureMarkdown(scanResult);\n const destination = path.resolve(projectInfo.rootPath, outputPath);\n\n // Ensure output directory exists if custom path\n const parentDir = path.dirname(destination);\n if (!fs.existsSync(parentDir)) {\n fs.mkdirSync(parentDir, { recursive: true });\n }\n\n fs.writeFileSync(destination, markdown, 'utf-8');\n\n // Display summary\n p.note(\n `${pc.bold('Scanned Files:')} ${scanResult.totalFilesScanned}\\n` +\n `${pc.bold('Components Identified:')} ${Object.keys(scanResult.components).length}\\n` +\n `${pc.bold('Modules Detected:')} ${scanResult.modules.length > 0 ? scanResult.modules.join(', ') : 'None (monolithic structure)'}\\n` +\n `${pc.bold('Documentation:')} Saved to ${pc.cyan(path.relative(projectInfo.rootPath, destination) || outputPath)}`,\n pc.green('Architecture Map Generated! πΊοΈ')\n );\n\n p.outro(pc.cyan(`Open ${outputPath} to view your project structure & Mermaid diagram!`));\n } catch (err: any) {\n spinner.stop(pc.red('Scan failed'));\n p.log.error(err.message || String(err));\n }\n}\n\n/**\n * Execute scaffold workflow\n */\nasync function runScaffold(\n projectInfo: ProjectInfo,\n moduleNameArg?: string,\n cliOptions: { modular?: boolean; standard?: boolean; force?: boolean; dryRun?: boolean } = {}\n) {\n let moduleName = moduleNameArg;\n\n if (!moduleName) {\n const input = await p.text({\n message: 'What is the name of the new module or feature?',\n placeholder: 'e.g. Payment, Order, UserProfile',\n validate(val) {\n if (!val || !val.trim()) return 'Module name cannot be empty.';\n if (!/^[a-zA-Z0-9_-]+$/.test(val.trim())) return 'Use only alphanumeric characters, dashes, or underscores.';\n },\n });\n\n if (p.isCancel(input)) handleCancel();\n moduleName = input.trim();\n }\n\n // Component selection based on project type\n let selectedComponents: string[] = [];\n\n if (projectInfo.type === 'laravel') {\n const componentsPrompt = await p.multiselect({\n message: `Select components to scaffold for ${pc.cyan(moduleName)}:`,\n options: [\n { value: 'model', label: 'Eloquent Model', hint: 'Includes table name, fillables, and casts' },\n { value: 'controller', label: 'Resourceful Controller', hint: 'Includes standard CRUD methods & DI service' },\n { value: 'service', label: 'Service Class', hint: 'Encapsulated business logic operations' },\n { value: 'action', label: 'Single Action Class', hint: 'Invokable single-responsibility class' },\n { value: 'request', label: 'Form Request', hint: 'Request validation rules & authorization' },\n { value: 'migration', label: 'Database Migration', hint: 'Schema definition with timestamps' },\n ],\n initialValues: ['model', 'controller', 'service', 'request', 'migration'],\n required: true,\n });\n\n if (p.isCancel(componentsPrompt)) handleCancel();\n selectedComponents = componentsPrompt as string[];\n } else {\n // TypeScript or fallback\n const componentsPrompt = await p.multiselect({\n message: `Select components to scaffold for ${pc.cyan(moduleName)}:`,\n options: [\n { value: 'controller', label: 'Controller', hint: 'Express request handlers & response orchestration' },\n { value: 'service', label: 'Service', hint: 'Application logic & repository coordination' },\n { value: 'repository', label: 'Repository', hint: 'Data persistence abstraction & queries' },\n { value: 'route', label: 'Router & Routes', hint: 'Express router mapping endpoints to controller' },\n { value: 'dto', label: 'DTOs & Interfaces', hint: 'Typed interfaces for entities and payloads' },\n ],\n initialValues: ['controller', 'service', 'repository', 'route', 'dto'],\n required: true,\n });\n\n if (p.isCancel(componentsPrompt)) handleCancel();\n selectedComponents = componentsPrompt as string[];\n }\n\n // Determine modular vs standard structure\n let isModular = true;\n if (cliOptions.modular) {\n isModular = true;\n } else if (cliOptions.standard) {\n isModular = false;\n } else {\n const defaultModular = projectInfo.type === 'laravel'\n ? Boolean(projectInfo.laravel?.isModular)\n : projectInfo.type === 'typescript'\n ? Boolean(projectInfo.typescript?.isModular)\n : true;\n\n const structurePrompt = await p.select({\n message: 'Choose folder architecture structure:',\n options: projectInfo.type === 'laravel'\n ? [\n {\n value: 'modular',\n label: 'Modular Domain Structure',\n hint: `app/Modules/${moduleName}/[Models, Controllers, Services]`,\n },\n {\n value: 'standard',\n label: 'Standard Laravel Structure',\n hint: `app/Models, app/Http/Controllers, app/Services`,\n },\n ]\n : [\n {\n value: 'modular',\n label: 'Modular Feature Structure',\n hint: `src/modules/${moduleName.toLowerCase()}/...`,\n },\n {\n value: 'standard',\n label: 'Layered Folder Structure',\n hint: `src/controllers, src/services, src/routes...`,\n },\n ],\n initialValue: defaultModular ? 'modular' : 'standard',\n });\n\n if (p.isCancel(structurePrompt)) handleCancel();\n isModular = structurePrompt === 'modular';\n }\n\n const spinner = p.spinner();\n spinner.start(`Generating boilerplate files for ${pc.cyan(moduleName)}...`);\n\n const result: ScaffoldResult = await scaffoldModule(projectInfo, {\n moduleName,\n components: selectedComponents,\n isModular,\n dryRun: cliOptions.dryRun,\n forceOverwrite: cliOptions.force,\n });\n\n spinner.stop('Generation finished!');\n\n // Report files status\n const fileLines = result.files.map((f) => {\n if (f.status === 'created') {\n return ` ${pc.green('β')} ${f.relativeFilePath} ${pc.gray('(created)')}`;\n } else if (f.status === 'skipped') {\n return ` ${pc.yellow('β ')} ${f.relativeFilePath} ${pc.yellow(`(skipped - ${f.reason})`)}`;\n } else {\n return ` ${pc.red('β')} ${f.relativeFilePath} ${pc.red(`(error - ${f.reason})`)}`;\n }\n });\n\n p.note(\n fileLines.join('\\n') +\n `\\n\\n${pc.bold('Summary:')} ${pc.green(`${result.createdCount} created`)}, ${pc.yellow(`${result.skippedCount} skipped`)}, ${pc.red(`${result.errorCount} errors`)}`,\n pc.cyan(`Module Scaffolding: ${moduleName}`)\n );\n\n if (result.skippedCount > 0 && !cliOptions.force) {\n p.log.warn(pc.yellow('Anti-Overwrite Protection prevented modifying existing files. Use --force to overwrite if intended.'));\n }\n\n p.outro(pc.green(`β¨ Successfully scaffolded ${moduleName} module!`));\n}\n\n/**\n * Display quick project info\n */\nfunction showProjectInfo(projectInfo: ProjectInfo) {\n let details = `${pc.bold('Project Name:')} ${projectInfo.name}\\n` +\n `${pc.bold('Project Type:')} ${projectInfo.type.toUpperCase()}\\n` +\n `${pc.bold('Flavor / Stack:')} ${projectInfo.summary}\\n` +\n `${pc.bold('Working Path:')} ${projectInfo.rootPath}`;\n\n if (projectInfo.type === 'laravel' && projectInfo.laravel) {\n details += `\\n${pc.bold('Filament Admin:')} ${projectInfo.laravel.hasFilament ? pc.green('Yes') : 'No'}` +\n `\\n${pc.bold('Livewire:')} ${projectInfo.laravel.hasLivewire ? pc.green('Yes') : 'No'}` +\n `\\n${pc.bold('Inertia.js:')} ${projectInfo.laravel.hasInertia ? pc.green('Yes') : 'No'}` +\n `\\n${pc.bold('Modular App:')} ${projectInfo.laravel.isModular ? pc.green('Yes') : 'No'}`;\n } else if (projectInfo.type === 'typescript' && projectInfo.typescript) {\n details += `\\n${pc.bold('Framework:')} ${projectInfo.typescript.framework}` +\n `\\n${pc.bold('Prisma ORM:')} ${projectInfo.typescript.hasPrisma ? pc.green('Yes') : 'No'}` +\n `\\n${pc.bold('Monorepo:')} ${projectInfo.typescript.isMonorepo ? pc.green('Yes') : 'No'}` +\n `\\n${pc.bold('Modular Src:')} ${projectInfo.typescript.isModular ? pc.green('Yes') : 'No'}`;\n }\n\n p.note(details, pc.cyan('Detected Project Architecture'));\n}\n\n/**\n * CLI Main Entrypoint\n */\nasync function main() {\n const args = process.argv.slice(2);\n\n // Flags check\n if (args.includes('--help') || args.includes('-h') || args[0] === 'help') {\n showHelp();\n return;\n }\n\n if (args.includes('--version') || args.includes('-v')) {\n console.log(`larats v${VERSION}`);\n return;\n }\n\n // Parse simple CLI flags\n let outputPath = 'ARCHITECTURE.md';\n const outputIdx = args.findIndex((a) => a === '--output' || a === '-o');\n if (outputIdx !== -1 && args[outputIdx + 1]) {\n outputPath = args[outputIdx + 1];\n }\n\n const isModularFlag = args.includes('--modular') || args.includes('-m');\n const isStandardFlag = args.includes('--standard') || args.includes('-s');\n const isForceFlag = args.includes('--force') || args.includes('-f');\n const isDryRunFlag = args.includes('--dry-run');\n\n const command = args[0] && !args[0].startsWith('-') ? args[0] : null;\n\n // Auto-detect project type in current working directory\n const projectInfo = await detectProjectType(process.cwd());\n\n // Non-interactive command routing\n if (command === 'scan') {\n p.intro(`${pc.bgCyan(pc.black(' LaraTS '))} ${pc.gray(`v${VERSION}`)} - Scanning Architecture`);\n p.log.info(`Detected: ${pc.green(projectInfo.summary)}`);\n await runScan(projectInfo, outputPath);\n return;\n }\n\n if (command === 'scaffold' || command === 'make') {\n const moduleName = args[1] && !args[1].startsWith('-') ? args[1] : undefined;\n p.intro(`${pc.bgCyan(pc.black(' LaraTS '))} ${pc.gray(`v${VERSION}`)} - Module Scaffolder`);\n p.log.info(`Target Project: ${pc.green(projectInfo.summary)}`);\n await runScaffold(projectInfo, moduleName, {\n modular: isModularFlag,\n standard: isStandardFlag,\n force: isForceFlag,\n dryRun: isDryRunFlag,\n });\n return;\n }\n\n if (command === 'info') {\n p.intro(`${pc.bgCyan(pc.black(' LaraTS '))} ${pc.gray(`v${VERSION}`)}`);\n showProjectInfo(projectInfo);\n p.outro(pc.cyan('Done.'));\n return;\n }\n\n // Interactive Menu Mode\n p.intro(`${pc.bgCyan(pc.black(' LaraTS '))} ${pc.bold('Smart Architecture Visualizer & Scaffolder')} ${pc.gray(`v${VERSION}`)}`);\n\n p.log.info(`Working Directory: ${pc.gray(process.cwd())}`);\n p.log.info(`Detected Architecture: ${pc.bold(pc.green(projectInfo.summary))}`);\n\n const action = await p.select({\n message: 'What would you like to do?',\n options: [\n {\n value: 'scan',\n label: 'π Scan Architecture & Generate ARCHITECTURE.md',\n hint: 'Creates component stats, directory tree & Mermaid flowchart',\n },\n {\n value: 'scaffold',\n label: 'ποΈ Scaffold New Feature / Module',\n hint: 'Interactively generate boilerplate components with safety checks',\n },\n {\n value: 'info',\n label: 'π Inspect Detected Architecture Details',\n hint: 'View detected frameworks, ORMs, and configurations',\n },\n {\n value: 'exit',\n label: 'πͺ Exit',\n },\n ],\n });\n\n if (p.isCancel(action) || action === 'exit') {\n handleCancel();\n }\n\n if (action === 'scan') {\n await runScan(projectInfo, outputPath);\n } else if (action === 'scaffold') {\n await runScaffold(projectInfo, undefined, {\n modular: isModularFlag,\n standard: isStandardFlag,\n force: isForceFlag,\n dryRun: isDryRunFlag,\n });\n } else if (action === 'info') {\n showProjectInfo(projectInfo);\n p.outro(pc.cyan('Done!'));\n }\n}\n\nmain().catch((err) => {\n p.log.error(pc.red(`Fatal error: ${err.message || String(err)}`));\n process.exit(1);\n});\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport type ProjectType = 'laravel' | 'typescript' | 'unknown';\n\nexport interface LaravelDetails {\n version?: string;\n hasFilament: boolean;\n hasLivewire: boolean;\n hasInertia: boolean;\n hasSanctum: boolean;\n isModular: boolean;\n modulesDir?: string;\n}\n\nexport interface TypeScriptDetails {\n framework: 'express' | 'nest' | 'fastify' | 'hono' | 'react' | 'next' | 'vue' | 'node-vanilla' | 'unknown';\n hasPrisma: boolean;\n hasTypeORM: boolean;\n hasDrizzle: boolean;\n isMonorepo: boolean;\n isModular: boolean;\n srcDir: string;\n}\n\nexport interface ProjectInfo {\n type: ProjectType;\n name: string;\n rootPath: string;\n laravel?: LaravelDetails;\n typescript?: TypeScriptDetails;\n summary: string;\n}\n\n/**\n * Safely parse a JSON file without throwing errors.\n */\nfunction readJsonSafe<T = any>(filePath: string): T | null {\n try {\n if (!fs.existsSync(filePath)) return null;\n const content = fs.readFileSync(filePath, 'utf-8');\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n}\n\n/**\n * Detect the project type and architectural characteristics of the target directory.\n */\nexport async function detectProjectType(targetDir: string = process.cwd()): Promise<ProjectInfo> {\n const resolvedDir = path.resolve(targetDir);\n const dirName = path.basename(resolvedDir);\n\n const hasArtisan = fs.existsSync(path.join(resolvedDir, 'artisan'));\n const composerPath = path.join(resolvedDir, 'composer.json');\n const hasComposer = fs.existsSync(composerPath);\n\n const tsconfigPath = path.join(resolvedDir, 'tsconfig.json');\n const hasTsConfig = fs.existsSync(tsconfigPath);\n const packageJsonPath = path.join(resolvedDir, 'package.json');\n const hasPackageJson = fs.existsSync(packageJsonPath);\n\n // 1. Check for Laravel Project\n if (hasArtisan && hasComposer) {\n const composerData = readJsonSafe<{\n name?: string;\n require?: Record<string, string>;\n 'require-dev'?: Record<string, string>;\n }>(composerPath);\n\n const allDeps = {\n ...(composerData?.require || {}),\n ...(composerData?.['require-dev'] || {}),\n };\n\n const hasFilament = Object.keys(allDeps).some((dep) => dep.startsWith('filament/'));\n const hasLivewire = 'livewire/livewire' in allDeps;\n const hasInertia = 'inertiajs/inertia-laravel' in allDeps;\n const hasSanctum = 'laravel/sanctum' in allDeps;\n\n const rawVersion = allDeps['laravel/framework'] || '';\n const cleanVersion = rawVersion.replace(/[\\^~><=]/g, '').trim();\n\n // Check for modular architecture\n const appModulesDir = path.join(resolvedDir, 'app', 'Modules');\n const rootModulesDir = path.join(resolvedDir, 'modules');\n const isModular = fs.existsSync(appModulesDir) || fs.existsSync(rootModulesDir);\n const modulesDir = fs.existsSync(appModulesDir)\n ? 'app/Modules'\n : fs.existsSync(rootModulesDir)\n ? 'modules'\n : undefined;\n\n const extras: string[] = [];\n if (hasFilament) extras.push('Filament');\n if (hasLivewire) extras.push('Livewire');\n if (hasInertia) extras.push('Inertia');\n if (isModular) extras.push('Modular Architecture');\n\n const summary = `Laravel ${cleanVersion || ''}${extras.length > 0 ? ` (${extras.join(', ')})` : ''}`.trim();\n\n return {\n type: 'laravel',\n name: composerData?.name?.split('/')[1] || dirName,\n rootPath: resolvedDir,\n laravel: {\n version: cleanVersion || undefined,\n hasFilament,\n hasLivewire,\n hasInertia,\n hasSanctum,\n isModular,\n modulesDir,\n },\n summary,\n };\n }\n\n // 2. Check for TypeScript Project\n if (hasTsConfig && hasPackageJson) {\n const pkg = readJsonSafe<{\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n workspaces?: any;\n }>(packageJsonPath);\n\n const allDeps = {\n ...(pkg?.dependencies || {}),\n ...(pkg?.devDependencies || {}),\n };\n\n let framework: TypeScriptDetails['framework'] = 'unknown';\n if ('@nestjs/core' in allDeps) framework = 'nest';\n else if ('next' in allDeps) framework = 'next';\n else if ('express' in allDeps) framework = 'express';\n else if ('fastify' in allDeps) framework = 'fastify';\n else if ('hono' in allDeps) framework = 'hono';\n else if ('react' in allDeps) framework = 'react';\n else if ('vue' in allDeps) framework = 'vue';\n else framework = 'node-vanilla';\n\n const hasPrisma = 'prisma' in allDeps || '@prisma/client' in allDeps || fs.existsSync(path.join(resolvedDir, 'prisma'));\n const hasTypeORM = 'typeorm' in allDeps;\n const hasDrizzle = 'drizzle-orm' in allDeps;\n\n const isMonorepo =\n Boolean(pkg?.workspaces) ||\n fs.existsSync(path.join(resolvedDir, 'pnpm-workspace.yaml')) ||\n fs.existsSync(path.join(resolvedDir, 'turbo.json')) ||\n fs.existsSync(path.join(resolvedDir, 'lerna.json'));\n\n const hasSrc = fs.existsSync(path.join(resolvedDir, 'src'));\n const srcDir = hasSrc ? 'src' : '.';\n const isModular =\n fs.existsSync(path.join(resolvedDir, srcDir, 'modules')) ||\n fs.existsSync(path.join(resolvedDir, 'modules'));\n\n const extras: string[] = [framework !== 'node-vanilla' ? framework : 'TypeScript'];\n if (hasPrisma) extras.push('Prisma');\n if (hasTypeORM) extras.push('TypeORM');\n if (hasDrizzle) extras.push('Drizzle');\n if (isMonorepo) extras.push('Monorepo');\n if (isModular) extras.push('Modular');\n\n const summary = `TypeScript (${extras.join(', ')})`;\n\n return {\n type: 'typescript',\n name: pkg?.name || dirName,\n rootPath: resolvedDir,\n typescript: {\n framework,\n hasPrisma,\n hasTypeORM,\n hasDrizzle,\n isMonorepo,\n isModular,\n srcDir,\n },\n summary,\n };\n }\n\n // 3. Fallback / Unknown Project\n let fallbackName = dirName;\n if (hasPackageJson) {\n const pkg = readJsonSafe<{ name?: string }>(packageJsonPath);\n if (pkg?.name) fallbackName = pkg.name;\n }\n\n return {\n type: 'unknown',\n name: fallbackName,\n rootPath: resolvedDir,\n summary: 'Generic / Unknown Project',\n };\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport fg from 'fast-glob';\nimport type { ProjectInfo } from './detector.js';\n\nexport const SAFE_IGNORE_LIST = [\n // Dependencies & package management\n '**/node_modules/**',\n '**/vendor/**',\n '**/.pnpm/**',\n '**/.yarn/**',\n // Version control\n '**/.git/**',\n '**/.svn/**',\n '**/.hg/**',\n // Storage, cache & build outputs\n '**/storage/**',\n '**/dist/**',\n '**/build/**',\n '**/out/**',\n '**/.next/**',\n '**/.nuxt/**',\n '**/.turbo/**',\n '**/.cache/**',\n '**/coverage/**',\n '**/.temp/**',\n '**/tmp/**',\n // IDEs & OS files\n '**/.idea/**',\n '**/.vscode/**',\n '**/.DS_Store',\n '**/Thumbs.db',\n // Secrets & environment configurations\n '**/.env*',\n '**/*.pem',\n '**/*.key',\n '**/*.pfx',\n '**/*.cert',\n '**/*.crt',\n '**/*.secret',\n '**/*.id_rsa',\n '**/*.pub',\n // Logs & Lock files\n '**/*.log',\n '**/*.lock',\n '**/package-lock.json',\n '**/yarn.lock',\n '**/pnpm-lock.yaml',\n '**/composer.lock',\n];\n\nexport interface ComponentGroup {\n name: string;\n count: number;\n files: string[];\n description: string;\n}\n\nexport interface ScanResult {\n projectInfo: ProjectInfo;\n totalFilesScanned: number;\n components: Record<string, ComponentGroup>;\n modules: string[];\n directoryTree: string;\n scanDurationMs: number;\n}\n\n/**\n * Build a clean ASCII directory tree representation from a list of relative file paths.\n */\nexport function buildCleanDirectoryTree(files: string[], maxDepth: number = 3): string {\n interface TreeNode {\n name: string;\n isDir: boolean;\n children: Map<string, TreeNode>;\n }\n\n const root: TreeNode = { name: '', isDir: true, children: new Map() };\n\n // Populate tree\n for (const file of files) {\n const parts = file.split(/[/\\\\]/);\n let current = root;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = i === parts.length - 1;\n\n if (!current.children.has(part)) {\n current.children.set(part, {\n name: part,\n isDir: !isLast,\n children: new Map(),\n });\n }\n current = current.children.get(part)!;\n }\n }\n\n const lines: string[] = [];\n\n function renderNode(node: TreeNode, prefix: string, currentDepth: number) {\n if (currentDepth > maxDepth) return;\n\n const entries = Array.from(node.children.values()).sort((a, b) => {\n // Directories first, then files\n if (a.isDir !== b.isDir) return a.isDir ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n // If at maxDepth and has children, show summary\n if (currentDepth === maxDepth && entries.length > 0) {\n lines.push(`${prefix}βββ ... (${entries.length} items hidden)`);\n return;\n }\n\n // Limit files shown per directory if too many\n const maxEntriesPerDir = 8;\n const displayedEntries = entries.slice(0, maxEntriesPerDir);\n const hiddenCount = entries.length - displayedEntries.length;\n\n displayedEntries.forEach((child, index) => {\n const isLast = index === displayedEntries.length - 1 && hiddenCount === 0;\n const pointer = isLast ? 'βββ ' : 'βββ ';\n const displayName = child.isDir ? `${child.name}/` : child.name;\n\n lines.push(`${prefix}${pointer}${displayName}`);\n\n if (child.isDir) {\n const nextPrefix = prefix + (isLast ? ' ' : 'β ');\n renderNode(child, nextPrefix, currentDepth + 1);\n }\n });\n\n if (hiddenCount > 0) {\n lines.push(`${prefix}βββ ... (${hiddenCount} more files/folders)`);\n }\n }\n\n // Render children of root\n const topLevel = Array.from(root.children.values()).sort((a, b) => {\n if (a.isDir !== b.isDir) return a.isDir ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n topLevel.forEach((child, index) => {\n const isLast = index === topLevel.length - 1;\n const pointer = isLast ? 'βββ ' : 'βββ ';\n const displayName = child.isDir ? `${child.name}/` : child.name;\n\n lines.push(`${pointer}${displayName}`);\n if (child.isDir) {\n const nextPrefix = isLast ? ' ' : 'β ';\n renderNode(child, nextPrefix, 1);\n }\n });\n\n return lines.join('\\n');\n}\n\n/**\n * Scan project safely using fast-glob and categorize architectural components.\n */\nexport async function scanProject(projectInfo: ProjectInfo): Promise<ScanResult> {\n const startTime = Date.now();\n const root = projectInfo.rootPath;\n\n // Scan all relevant files in repo while respecting SAFE_IGNORE_LIST\n const allFiles = await fg('**/*', {\n cwd: root,\n ignore: SAFE_IGNORE_LIST,\n dot: false,\n onlyFiles: true,\n });\n\n const normalizedFiles = allFiles.map((f) => f.replace(/\\\\/g, '/'));\n const components: Record<string, ComponentGroup> = {};\n const modulesSet = new Set<string>();\n\n if (projectInfo.type === 'laravel') {\n // 1. Models\n const models = normalizedFiles.filter((f) => /^app\\/(Models\\/.*|.*Model)\\.php$/i.test(f));\n components['Models'] = {\n name: 'Eloquent Models',\n count: models.length,\n files: models,\n description: 'Database entity mappings and business logic models',\n };\n\n // 2. Controllers\n const controllers = normalizedFiles.filter((f) => /^app\\/Http\\/Controllers\\/.*\\.php$/i.test(f));\n components['Controllers'] = {\n name: 'HTTP Controllers',\n count: controllers.length,\n files: controllers,\n description: 'Request handling and response orchestration',\n };\n\n // 3. Services\n const services = normalizedFiles.filter((f) => /^app\\/(Services|Domain\\/.*\\/Services)\\/.*\\.php$/i.test(f));\n components['Services'] = {\n name: 'Service Classes',\n count: services.length,\n files: services,\n description: 'Encapsulated business logic and external integrations',\n };\n\n // 4. Actions\n const actions = normalizedFiles.filter((f) => /^app\\/(Actions|Domain\\/.*\\/Actions)\\/.*\\.php$/i.test(f));\n components['Actions'] = {\n name: 'Action Classes',\n count: actions.length,\n files: actions,\n description: 'Single-responsibility invokable operations',\n };\n\n // 5. Form Requests\n const requests = normalizedFiles.filter((f) => /^app\\/Http\\/Requests\\/.*\\.php$/i.test(f));\n components['Form Requests'] = {\n name: 'Form Requests',\n count: requests.length,\n files: requests,\n description: 'Input validation and authorization rules',\n };\n\n // 6. Filament Resources\n const filament = normalizedFiles.filter((f) => /^app\\/Filament\\/.*\\.php$/i.test(f));\n if (filament.length > 0 || projectInfo.laravel?.hasFilament) {\n components['Filament Resources'] = {\n name: 'Filament Admin Resources',\n count: filament.length,\n files: filament,\n description: 'Admin panel CRUD pages, widgets, and schemas',\n };\n }\n\n // 7. Routes\n const routes = normalizedFiles.filter((f) => /^routes\\/.*\\.php$/i.test(f));\n components['Routes'] = {\n name: 'Routing Definitions',\n count: routes.length,\n files: routes,\n description: 'Web, API, and console endpoint routes',\n };\n\n // 8. Database Migrations\n const migrations = normalizedFiles.filter((f) => /^database\\/migrations\\/.*\\.php$/i.test(f));\n components['Migrations'] = {\n name: 'Database Migrations',\n count: migrations.length,\n files: migrations,\n description: 'Schema version control and table definitions',\n };\n\n // Detect Laravel Modules\n const moduleFiles = normalizedFiles.filter((f) => /^app\\/Modules\\/([^/]+)/i.test(f) || /^modules\\/([^/]+)/i.test(f));\n for (const mf of moduleFiles) {\n const match = mf.match(/^(?:app\\/Modules|modules)\\/([^/]+)/i);\n if (match && match[1]) modulesSet.add(match[1]);\n }\n } else if (projectInfo.type === 'typescript') {\n // 1. Controllers\n const controllers = normalizedFiles.filter((f) => /(?:^src\\/.*(?:\\.|\\/)controller\\.(?:ts|js)$)/i.test(f));\n components['Controllers'] = {\n name: 'Controllers',\n count: controllers.length,\n files: controllers,\n description: 'HTTP request handlers and response dispatchers',\n };\n\n // 2. Services\n const services = normalizedFiles.filter((f) => /(?:^src\\/.*(?:\\.|\\/)service\\.(?:ts|js)$)/i.test(f));\n components['Services'] = {\n name: 'Services',\n count: services.length,\n files: services,\n description: 'Core domain logic and application workflows',\n };\n\n // 3. Repositories / Data Access\n const repositories = normalizedFiles.filter((f) => /(?:^src\\/.*(?:\\.|\\/)repository\\.(?:ts|js)$)/i.test(f));\n components['Repositories'] = {\n name: 'Repositories',\n count: repositories.length,\n files: repositories,\n description: 'Data access abstraction and database queries',\n };\n\n // 4. Routes\n const routes = normalizedFiles.filter((f) => /(?:^src\\/.*(?:\\.|\\/)routes?\\.(?:ts|js)$)/i.test(f));\n components['Routes'] = {\n name: 'Routes',\n count: routes.length,\n files: routes,\n description: 'API endpoint mappings and router handlers',\n };\n\n // 5. DTOs & Validation Schemas\n const dtos = normalizedFiles.filter((f) => /(?:^src\\/.*(?:\\.|\\/)(?:dto|schema)\\.(?:ts|js)$)/i.test(f));\n components['DTOs & Schemas'] = {\n name: 'DTOs & Schemas',\n count: dtos.length,\n files: dtos,\n description: 'Data transfer objects and request validation schemas',\n };\n\n // 6. Models / Prisma / Entities\n const models = normalizedFiles.filter((f) =>\n /(?:^src\\/.*(?:\\.|\\/)(?:model|entity)\\.(?:ts|js)$|^prisma\\/schema\\.prisma$)/i.test(f)\n );\n components['Models & Entities'] = {\n name: 'Models & Entities',\n count: models.length,\n files: models,\n description: 'Database schema definitions and entity declarations',\n };\n\n // 7. Frontend Components (if React/Vue/Next/Vite)\n const componentsFiles = normalizedFiles.filter((f) => /^src\\/(?:components|ui)\\/.*\\.(?:tsx|jsx|vue|ts|js)$/i.test(f));\n if (componentsFiles.length > 0) {\n components['UI Components'] = {\n name: 'UI Components',\n count: componentsFiles.length,\n files: componentsFiles,\n description: 'Reusable user interface views and components',\n };\n }\n\n // Detect TypeScript Modules\n const moduleFiles = normalizedFiles.filter((f) => /^src\\/modules\\/([^/]+)/i.test(f));\n for (const mf of moduleFiles) {\n const match = mf.match(/^src\\/modules\\/([^/]+)/i);\n if (match && match[1]) modulesSet.add(match[1]);\n }\n } else {\n // Generic project component classification\n const srcFiles = normalizedFiles.filter((f) => /^src\\//i.test(f));\n const testFiles = normalizedFiles.filter((f) => /(?:test|spec)\\.[a-z]+$/i.test(f));\n\n components['Source Files'] = {\n name: 'Source Files',\n count: srcFiles.length,\n files: srcFiles,\n description: 'Main application source code',\n };\n\n components['Test Files'] = {\n name: 'Test Files',\n count: testFiles.length,\n files: testFiles,\n description: 'Automated test suites and specifications',\n };\n }\n\n // Generate clean directory tree\n const directoryTree = buildCleanDirectoryTree(normalizedFiles, 3);\n const scanDurationMs = Date.now() - startTime;\n\n return {\n projectInfo,\n totalFilesScanned: normalizedFiles.length,\n components,\n modules: Array.from(modulesSet).sort(),\n directoryTree,\n scanDurationMs,\n };\n}\n\n","import type { ScanResult } from '../scanner.js';\n\n/**\n * Generate a Mermaid.js diagram representing the architecture layers and flow.\n */\nexport function generateMermaidDiagram(scanResult: ScanResult): string {\n const { projectInfo, components, modules } = scanResult;\n\n if (projectInfo.type === 'laravel') {\n const hasFilament = projectInfo.laravel?.hasFilament || (components['Filament Resources']?.count ?? 0) > 0;\n const hasActions = (components['Actions']?.count ?? 0) > 0;\n const hasServices = (components['Services']?.count ?? 0) > 0;\n\n let diagram = `flowchart TD\n %% Styling Definitions\n classDef client fill:#E0F2FE,stroke:#0284C7,stroke-width:2px,color:#0369A1;\n classDef routing fill:#FEF3C7,stroke:#D97706,stroke-width:2px,color:#B45309;\n classDef controller fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#15803D;\n classDef service fill:#F3E8FF,stroke:#9333EA,stroke-width:2px,color:#7E22CE;\n classDef data fill:#FEE2E2,stroke:#DC2626,stroke-width:2px,color:#B91C1C;\n classDef db fill:#F1F5F9,stroke:#475569,stroke-width:2px,color:#334155;\n\n subgraph Layer1 [\"1. Client & Entrypoints\"]\n Client[\"Client / Browser / API Consumer\"]:::client\n Routes[\"HTTP Routes<br/>(routes/web.php, routes/api.php)\"]:::routing\n end\n\n subgraph Layer2 [\"2. Request Pipeline & Security\"]\n Middleware[\"Middleware Pipeline<br/>(Auth, CSRF, Rate Limiting)\"]:::routing\n FormRequests[\"Form Requests<br/>(Validation & Authorization)\"]:::routing\n end\n\n subgraph Layer3 [\"3. Controllers & Presentation\"]\n Controllers[\"HTTP Controllers<br/>(app/Http/Controllers)\"]:::controller\n`;\n\n if (hasFilament) {\n diagram += ` Filament[\"Filament Admin Panel<br/>(app/Filament/Resources)\"]:::controller\\n`;\n }\n\n diagram += ` end\n\n subgraph Layer4 [\"4. Domain & Business Logic\"]\n`;\n\n if (hasServices || !hasActions) {\n diagram += ` Services[\"Service Layer<br/>(app/Services)\"]:::service\\n`;\n }\n if (hasActions) {\n diagram += ` Actions[\"Action Classes<br/>(app/Actions)\"]:::service\\n`;\n }\n\n diagram += ` end\n\n subgraph Layer5 [\"5. Data Persistence & Storage\"]\n Models[\"Eloquent Models<br/>(app/Models)\"]:::data\n Database[(\"Database<br/>(MySQL / Postgres / SQLite)\")]:::db\n Migrations[\"Database Migrations<br/>(database/migrations)\"]:::data\n end\n\n Client --> Routes\n Routes --> Middleware\n Middleware --> FormRequests\n FormRequests --> Controllers\n`;\n\n if (hasServices && hasActions) {\n diagram += ` Controllers --> Services\\n Controllers --> Actions\\n Services --> Models\\n Actions --> Models\\n`;\n } else if (hasActions) {\n diagram += ` Controllers --> Actions\\n Actions --> Models\\n`;\n } else {\n diagram += ` Controllers --> Services\\n Services --> Models\\n`;\n }\n\n if (hasFilament) {\n diagram += ` Client --> Filament\\n Filament --> Models\\n`;\n }\n\n diagram += ` Models --> Database\\n Migrations -.-> Database\\n`;\n\n // If modular Laravel\n if (modules.length > 0) {\n diagram += `\\n subgraph ModulesLayer [\"π¦ Detected Modules (${modules.length})\"]\\n`;\n modules.slice(0, 6).forEach((mod, idx) => {\n diagram += ` Mod_${idx}[\"${mod} Module\"]:::service\\n`;\n });\n if (modules.length > 6) {\n diagram += ` Mod_More[\"...and ${modules.length - 6} more modules\"]:::service\\n`;\n }\n diagram += ` end\\n`;\n }\n\n return diagram;\n }\n\n if (projectInfo.type === 'typescript') {\n const fw = projectInfo.typescript?.framework || 'Express';\n const orm = projectInfo.typescript?.hasPrisma ? 'Prisma' : projectInfo.typescript?.hasTypeORM ? 'TypeORM' : 'ORM';\n\n let diagram = `flowchart TD\n %% Styling Definitions\n classDef client fill:#E0F2FE,stroke:#0284C7,stroke-width:2px,color:#0369A1;\n classDef routing fill:#FEF3C7,stroke:#D97706,stroke-width:2px,color:#B45309;\n classDef controller fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#15803D;\n classDef service fill:#F3E8FF,stroke:#9333EA,stroke-width:2px,color:#7E22CE;\n classDef data fill:#FEE2E2,stroke:#DC2626,stroke-width:2px,color:#B91C1C;\n classDef db fill:#F1F5F9,stroke:#475569,stroke-width:2px,color:#334155;\n\n subgraph Layer1 [\"1. Client & API Gateway\"]\n Client[\"Frontend / API Client\"]:::client\n Router[\"Router & Endpoints<br/>(${fw} Routes)\"]:::routing\n end\n\n subgraph Layer2 [\"2. Validation & Guards\"]\n Middleware[\"Auth & Error Middleware\"]:::routing\n DTOs[\"DTOs & Schemas<br/>(Input Validation)\"]:::routing\n end\n\n subgraph Layer3 [\"3. Controllers\"]\n Controllers[\"Controllers<br/>(Request Handling)\"]:::controller\n end\n\n subgraph Layer4 [\"4. Application Services\"]\n Services[\"Domain Services<br/>(Business Logic)\"]:::service\n end\n\n subgraph Layer5 [\"5. Data Layer & Storage\"]\n Repositories[\"Repositories / ${orm}<br/>(Data Access Layer)\"]:::data\n Database[(\"Database<br/>(SQL / NoSQL)\")]:::db\n end\n\n Client --> Router\n Router --> Middleware\n Middleware --> DTOs\n DTOs --> Controllers\n Controllers --> Services\n Services --> Repositories\n Repositories --> Database\n`;\n\n if (modules.length > 0) {\n diagram += `\\n subgraph ModulesLayer [\"π¦ Detected Feature Modules (${modules.length})\"]\\n`;\n modules.slice(0, 6).forEach((mod, idx) => {\n diagram += ` Mod_${idx}[\"${mod} Module\"]:::service\\n`;\n });\n if (modules.length > 6) {\n diagram += ` Mod_More[\"...and ${modules.length - 6} more modules\"]:::service\\n`;\n }\n diagram += ` end\\n`;\n }\n\n return diagram;\n }\n\n // Generic diagram\n return `flowchart TD\n classDef client fill:#E0F2FE,stroke:#0284C7,stroke-width:2px,color:#0369A1;\n classDef core fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#15803D;\n classDef test fill:#FEF3C7,stroke:#D97706,stroke-width:2px,color:#B45309;\n\n subgraph App [\"Application Architecture\"]\n Entry[\"Entrypoint / CLI\"]:::client\n Source[\"Source Core Logic (src/)\"]:::core\n Tests[\"Test Suites\"]:::test\n end\n\n Entry --> Source\n Tests -.-> Source\n`;\n}\n\n/**\n * Generate full ARCHITECTURE.md markdown content.\n */\nexport function generateArchitectureMarkdown(scanResult: ScanResult): string {\n const { projectInfo, totalFilesScanned, components, modules, directoryTree, scanDurationMs } = scanResult;\n const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19) + ' UTC';\n\n const mermaid = generateMermaidDiagram(scanResult);\n\n // Component statistics rows\n const componentRows = Object.entries(components)\n .map(([key, comp]) => {\n const sampleFiles = comp.files.slice(0, 3).map((f) => `\\`${f}\\``).join(', ');\n const moreSuffix = comp.files.length > 3 ? ` *(+${comp.files.length - 3} more)*` : '';\n return `| **${comp.name}** | \\`${comp.count}\\` | ${comp.description} | ${sampleFiles || '-'} ${moreSuffix} |`;\n })\n .join('\\n');\n\n // Modules section if present\n let modulesSection = '';\n if (modules.length > 0) {\n modulesSection = `\n## π¦ Detected Modules & Domains (${modules.length})\n\nThis project organizes features into modular domains:\n\n${modules.map((m) => `- **\\`${m}\\`**`).join('\\n')}\n`;\n }\n\n return `# ποΈ Architecture Overview: ${projectInfo.name}\n\n> Auto-generated by **[LaraTS CLI](https://github.com/SidiqFatuh187/Larats)** on \\`${timestamp}\\`. \n> **100% Local & Safe:** Generated entirely in offline mode via local filesystem metadata analysis. Zero data transmitted.\n\n---\n\n## π Project Summary\n\n| Attribute | Details |\n| :--- | :--- |\n| **Project Name** | \\`${projectInfo.name}\\` |\n| **Project Type** | **${projectInfo.type.toUpperCase()}** |\n| **Detected Stack** | \\`${projectInfo.summary}\\` |\n| **Scanned Files** | \\`${totalFilesScanned}\\` files indexed (safe ignore filter applied) |\n| **Scan Duration** | \\`${scanDurationMs} ms\\` |\n\n---\n\n## π Architectural Components Statistics\n\n| Component Layer | Count | Description | Sample Files |\n| :--- | :---: | :--- | :--- |\n${componentRows || '| *No architectural components identified* | `0` | - | - |'}\n${modulesSection}\n---\n\n## πΊοΈ Visual Architecture Flowchart\n\nVisual representation of the project layers and request lifecycle rendered with [Mermaid.js](https://mermaid.js.org/):\n\n\\`\\`\\`mermaid\n${mermaid}\n\\`\\`\\`\n\n---\n\n## π² Directory Structure Tree\n\nClean, high-level directory tree showing key folders (ignoring build artifacts, vendor files, and sensitive keys):\n\n\\`\\`\\`text\n${directoryTree || '(Empty directory structure)'}\n\\`\\`\\`\n\n---\n\n## π Security & Privacy Notice\n\nThis architectural map was produced with strict privacy rules:\n- **Zero Network Transmission:** Executed locally without telemetry or outbound communication.\n- **Safe Exclusion Filter:** Ignored \\`node_modules\\`, \\`vendor\\`, \\`.env*\\`, key files, credentials, and cache folders.\n- **Metadata Only:** Scanned file names and relative paths only; no secrets or private business contents were extracted.\n\n*Generated with β€οΈ by LaraTS CLI.*\n`;\n}\n\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport type { ProjectInfo } from '../detector.js';\nimport {\n getNaming,\n laravelModelTemplate,\n laravelControllerTemplate,\n laravelServiceTemplate,\n laravelActionTemplate,\n laravelRequestTemplate,\n laravelMigrationTemplate,\n} from '../templates/laravel.js';\nimport {\n tsControllerTemplate,\n tsServiceTemplate,\n tsRepositoryTemplate,\n tsRoutesTemplate,\n tsDtoTemplate,\n} from '../templates/typescript.js';\n\nexport interface ScaffoldOptions {\n moduleName: string;\n components: string[];\n isModular?: boolean;\n dryRun?: boolean;\n forceOverwrite?: boolean;\n}\n\nexport interface ScaffoldFileResult {\n filePath: string;\n relativeFilePath: string;\n status: 'created' | 'skipped' | 'error';\n reason?: string;\n}\n\nexport interface ScaffoldResult {\n moduleName: string;\n targetDir: string;\n files: ScaffoldFileResult[];\n createdCount: number;\n skippedCount: number;\n errorCount: number;\n}\n\n/**\n * Format timestamp for Laravel migration file name (e.g. 2026_10_24_114000)\n */\nfunction getMigrationTimestamp(): string {\n const now = new Date();\n const YYYY = now.getFullYear();\n const MM = String(now.getMonth() + 1).padStart(2, '0');\n const DD = String(now.getDate()).padStart(2, '0');\n const hh = String(now.getHours()).padStart(2, '0');\n const mm = String(now.getMinutes()).padStart(2, '0');\n const ss = String(now.getSeconds()).padStart(2, '0');\n return `${YYYY}_${MM}_${DD}_${hh}${mm}${ss}`;\n}\n\n/**\n * Scaffold components for Laravel or TypeScript projects safely without overwriting existing code.\n */\nexport async function scaffoldModule(\n projectInfo: ProjectInfo,\n options: ScaffoldOptions\n): Promise<ScaffoldResult> {\n const root = projectInfo.rootPath;\n const names = getNaming(options.moduleName);\n const filesToGenerate: { relativePath: string; content: string }[] = [];\n\n const isModular =\n options.isModular ??\n (projectInfo.type === 'laravel'\n ? Boolean(projectInfo.laravel?.isModular)\n : projectInfo.type === 'typescript'\n ? Boolean(projectInfo.typescript?.isModular)\n : true);\n\n if (projectInfo.type === 'laravel') {\n const selected = new Set(options.components);\n\n if (isModular) {\n const baseDir = `app/Modules/${names.pascal}`;\n const baseNamespace = `App\\\\Modules\\\\${names.pascal}`;\n\n if (selected.has('model')) {\n filesToGenerate.push({\n relativePath: `${baseDir}/Models/${names.pascal}.php`,\n content: laravelModelTemplate(names, `${baseNamespace}\\\\Models`),\n });\n }\n if (selected.has('controller')) {\n filesToGenerate.push({\n relativePath: `${baseDir}/Controllers/${names.pascal}Controller.php`,\n content: laravelControllerTemplate(names, {\n namespace: `${baseNamespace}\\\\Controllers`,\n modelNamespace: `${baseNamespace}\\\\Models`,\n serviceNamespace: `${baseNamespace}\\\\Services`,\n requestNamespace: `${baseNamespace}\\\\Requests`,\n }),\n });\n }\n if (selected.has('service')) {\n filesToGenerate.push({\n relativePath: `${baseDir}/Services/${names.pascal}Service.php`,\n content: laravelServiceTemplate(names, {\n namespace: `${baseNamespace}\\\\Services`,\n modelNamespace: `${baseNamespace}\\\\Models`,\n }),\n });\n }\n if (selected.has('action')) {\n filesToGenerate.push({\n relativePath: `${baseDir}/Actions/Create${names.pascal}Action.php`,\n content: laravelActionTemplate(names, {\n namespace: `${baseNamespace}\\\\Actions`,\n modelNamespace: `${baseNamespace}\\\\Models`,\n }),\n });\n }\n if (selected.has('request')) {\n filesToGenerate.push({\n relativePath: `${baseDir}/Requests/${names.pascal}Request.php`,\n content: laravelRequestTemplate(names, `${baseNamespace}\\\\Requests`),\n });\n }\n if (selected.has('migration')) {\n const timestamp = getMigrationTimestamp();\n filesToGenerate.push({\n relativePath: `database/migrations/${timestamp}_create_${names.pluralSnake}_table.php`,\n content: laravelMigrationTemplate(names),\n });\n }\n } else {\n // Standard Laravel Structure\n if (selected.has('model')) {\n filesToGenerate.push({\n relativePath: `app/Models/${names.pascal}.php`,\n content: laravelModelTemplate(names, 'App\\\\Models'),\n });\n }\n if (selected.has('controller')) {\n filesToGenerate.push({\n relativePath: `app/Http/Controllers/${names.pascal}Controller.php`,\n content: laravelControllerTemplate(names),\n });\n }\n if (selected.has('service')) {\n filesToGenerate.push({\n relativePath: `app/Services/${names.pascal}Service.php`,\n content: laravelServiceTemplate(names),\n });\n }\n if (selected.has('action')) {\n filesToGenerate.push({\n relativePath: `app/Actions/Create${names.pascal}Action.php`,\n content: laravelActionTemplate(names),\n });\n }\n if (selected.has('request')) {\n filesToGenerate.push({\n relativePath: `app/Http/Requests/${names.pascal}Request.php`,\n content: laravelRequestTemplate(names),\n });\n }\n if (selected.has('migration')) {\n const timestamp = getMigrationTimestamp();\n filesToGenerate.push({\n relativePath: `database/migrations/${timestamp}_create_${names.pluralSnake}_table.php`,\n content: laravelMigrationTemplate(names),\n });\n }\n }\n } else {\n // TypeScript (or fallback)\n const selected = new Set(options.components);\n const srcDir = projectInfo.typescript?.srcDir || 'src';\n\n if (isModular) {\n const moduleFolder = `${srcDir}/modules/${names.kebab}`;\n\n if (selected.has('controller')) {\n filesToGenerate.push({\n relativePath: `${moduleFolder}/${names.kebab}.controller.ts`,\n content: tsControllerTemplate(names, true),\n });\n }\n if (selected.has('service')) {\n filesToGenerate.push({\n relativePath: `${moduleFolder}/${names.kebab}.service.ts`,\n content: tsServiceTemplate(names, true),\n });\n }\n if (selected.has('repository')) {\n filesToGenerate.push({\n relativePath: `${moduleFolder}/${names.kebab}.repository.ts`,\n content: tsRepositoryTemplate(names, true),\n });\n }\n if (selected.has('route')) {\n filesToGenerate.push({\n relativePath: `${moduleFolder}/${names.kebab}.routes.ts`,\n content: tsRoutesTemplate(names, true),\n });\n }\n if (selected.has('dto')) {\n filesToGenerate.push({\n relativePath: `${moduleFolder}/${names.kebab}.dto.ts`,\n content: tsDtoTemplate(names),\n });\n }\n\n // Add barrel index.ts export if multiple components generated in module\n if (filesToGenerate.length > 1) {\n const exports: string[] = [];\n if (selected.has('controller')) exports.push(`export * from './${names.kebab}.controller.js';`);\n if (selected.has('service')) exports.push(`export * from './${names.kebab}.service.js';`);\n if (selected.has('repository')) exports.push(`export * from './${names.kebab}.repository.js';`);\n if (selected.has('route')) exports.push(`export * from './${names.kebab}.routes.js';`);\n if (selected.has('dto')) exports.push(`export * from './${names.kebab}.dto.js';`);\n\n filesToGenerate.push({\n relativePath: `${moduleFolder}/index.ts`,\n content: `${exports.join('\\n')}\\n`,\n });\n }\n } else {\n // Layered structure\n if (selected.has('controller')) {\n filesToGenerate.push({\n relativePath: `${srcDir}/controllers/${names.kebab}.controller.ts`,\n content: tsControllerTemplate(names, false),\n });\n }\n if (selected.has('service')) {\n filesToGenerate.push({\n relativePath: `${srcDir}/services/${names.kebab}.service.ts`,\n content: tsServiceTemplate(names, false),\n });\n }\n if (selected.has('repository')) {\n filesToGenerate.push({\n relativePath: `${srcDir}/repositories/${names.kebab}.repository.ts`,\n content: tsRepositoryTemplate(names, false),\n });\n }\n if (selected.has('route')) {\n filesToGenerate.push({\n relativePath: `${srcDir}/routes/${names.kebab}.routes.ts`,\n content: tsRoutesTemplate(names, false),\n });\n }\n if (selected.has('dto')) {\n filesToGenerate.push({\n relativePath: `${srcDir}/dtos/${names.kebab}.dto.ts`,\n content: tsDtoTemplate(names),\n });\n }\n }\n }\n\n // Execute file writing with strict Anti-Overwrite Protection\n const results: ScaffoldFileResult[] = [];\n let createdCount = 0;\n let skippedCount = 0;\n let errorCount = 0;\n\n for (const item of filesToGenerate) {\n const fullPath = path.resolve(root, item.relativePath);\n\n // 1. Anti-Overwrite Protection check\n if (fs.existsSync(fullPath) && !options.forceOverwrite) {\n results.push({\n filePath: fullPath,\n relativeFilePath: item.relativePath,\n status: 'skipped',\n reason: 'File already exists (overwrite protected)',\n });\n skippedCount++;\n continue;\n }\n\n if (options.dryRun) {\n results.push({\n filePath: fullPath,\n relativeFilePath: item.relativePath,\n status: 'created',\n reason: 'Dry run simulated',\n });\n createdCount++;\n continue;\n }\n\n try {\n // Ensure directory exists\n const parentDir = path.dirname(fullPath);\n if (!fs.existsSync(parentDir)) {\n fs.mkdirSync(parentDir, { recursive: true });\n }\n\n fs.writeFileSync(fullPath, item.content, 'utf-8');\n results.push({\n filePath: fullPath,\n relativeFilePath: item.relativePath,\n status: 'created',\n });\n createdCount++;\n } catch (err: any) {\n results.push({\n filePath: fullPath,\n relativeFilePath: item.relativePath,\n status: 'error',\n reason: err.message || String(err),\n });\n errorCount++;\n }\n }\n\n return {\n moduleName: names.pascal,\n targetDir: root,\n files: results,\n createdCount,\n skippedCount,\n errorCount,\n };\n}\n\n","export interface NamingVariations {\n pascal: string; // e.g. PaymentOrder\n camel: string; // e.g. paymentOrder\n kebab: string; // e.g. payment-order\n snake: string; // e.g. payment_order\n pluralSnake: string;// e.g. payment_orders\n pluralPascal: string;// e.g. PaymentOrders\n}\n\nexport function getNaming(input: string): NamingVariations {\n // Clean string and split on camelCase/PascalCase boundaries and separators\n const words = input\n .trim()\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[^a-zA-Z0-9]/g, ' ')\n .split(/\\s+/)\n .filter(Boolean);\n\n if (words.length === 0) {\n words.push('SampleModule');\n }\n\n const pascal = words\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join('');\n\n const camel = pascal.charAt(0).toLowerCase() + pascal.slice(1);\n\n const snake = words.map((w) => w.toLowerCase()).join('_');\n\n const kebab = words.map((w) => w.toLowerCase()).join('-');\n\n // Basic pluralization\n const pluralSuffix = snake.endsWith('s') || snake.endsWith('ch') || snake.endsWith('sh') ? 'es' : 's';\n const pluralSnake = snake + pluralSuffix;\n const pluralPascal = pascal + pluralSuffix;\n\n return { pascal, camel, kebab, snake, pluralSnake, pluralPascal };\n}\n\nexport function laravelModelTemplate(names: NamingVariations, namespace: string = 'App\\\\Models'): string {\n return `<?php\n\nnamespace ${namespace};\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass ${names.pascal} extends Model\n{\n use HasFactory;\n\n /**\n * The table associated with the model.\n *\n * @var string\n */\n protected $table = '${names.pluralSnake}';\n\n /**\n * The attributes that are mass assignable.\n *\n * @var list<string>\n */\n protected $fillable = [\n 'name',\n 'status',\n 'metadata',\n ];\n\n /**\n * Get the attributes that should be cast.\n *\n * @return array<string, string>\n */\n protected function casts(): array\n {\n return [\n 'metadata' => 'array',\n 'created_at' => 'datetime',\n 'updated_at' => 'datetime',\n ];\n }\n}\n`;\n}\n\nexport function laravelControllerTemplate(\n names: NamingVariations,\n options: {\n namespace?: string;\n modelNamespace?: string;\n serviceNamespace?: string;\n requestNamespace?: string;\n } = {}\n): string {\n const namespace = options.namespace || 'App\\\\Http\\\\Controllers';\n const modelNamespace = options.modelNamespace || 'App\\\\Models';\n const serviceNamespace = options.serviceNamespace || 'App\\\\Services';\n const requestNamespace = options.requestNamespace || 'App\\\\Http\\\\Requests';\n\n return `<?php\n\nnamespace ${namespace};\n\nuse ${modelNamespace}\\\\${names.pascal};\nuse ${serviceNamespace}\\\\${names.pascal}Service;\nuse ${requestNamespace}\\\\${names.pascal}Request;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\n\nclass ${names.pascal}Controller extends Controller\n{\n public function __construct(\n protected ${names.pascal}Service $${names.camel}Service\n ) {}\n\n /**\n * Display a listing of ${names.pascal} resources.\n */\n public function index(Request $request): JsonResponse\n {\n $items = $this->${names.camel}Service->getAll($request->all());\n\n return response()->json([\n 'status' => 'success',\n 'data' => $items,\n ]);\n }\n\n /**\n * Display the specified ${names.pascal} resource.\n */\n public function show(int $id): JsonResponse\n {\n $item = $this->${names.camel}Service->getById($id);\n\n return response()->json([\n 'status' => 'success',\n 'data' => $item,\n ]);\n }\n\n /**\n * Store a newly created ${names.pascal} in storage.\n */\n public function store(${names.pascal}Request $request): JsonResponse\n {\n $item = $this->${names.camel}Service->create($request->validated());\n\n return response()->json([\n 'status' => 'success',\n 'message' => '${names.pascal} created successfully.',\n 'data' => $item,\n ], 201);\n }\n\n /**\n * Update the specified ${names.pascal} in storage.\n */\n public function update(${names.pascal}Request $request, int $id): JsonResponse\n {\n $item = $this->${names.camel}Service->update($id, $request->validated());\n\n return response()->json([\n 'status' => 'success',\n 'message' => '${names.pascal} updated successfully.',\n 'data' => $item,\n ]);\n }\n\n /**\n * Remove the specified ${names.pascal} from storage.\n */\n public function destroy(int $id): JsonResponse\n {\n $this->${names.camel}Service->delete($id);\n\n return response()->json([\n 'status' => 'success',\n 'message' => '${names.pascal} deleted successfully.',\n ]);\n }\n}\n`;\n}\n\nexport function laravelServiceTemplate(\n names: NamingVariations,\n options: {\n namespace?: string;\n modelNamespace?: string;\n } = {}\n): string {\n const namespace = options.namespace || 'App\\\\Services';\n const modelNamespace = options.modelNamespace || 'App\\\\Models';\n\n return `<?php\n\nnamespace ${namespace};\n\nuse ${modelNamespace}\\\\${names.pascal};\nuse Illuminate\\Database\\Eloquent\\Collection;\n\nclass ${names.pascal}Service\n{\n /**\n * Retrieve all ${names.pluralPascal}.\n */\n public function getAll(array $filters = []): Collection\n {\n return ${names.pascal}::query()\n ->latest()\n ->get();\n }\n\n /**\n * Find ${names.pascal} by primary key.\n */\n public function getById(int $id): ${names.pascal}\n {\n return ${names.pascal}::findOrFail($id);\n }\n\n /**\n * Create a new ${names.pascal}.\n */\n public function create(array $data): ${names.pascal}\n {\n return ${names.pascal}::create($data);\n }\n\n /**\n * Update an existing ${names.pascal}.\n */\n public function update(int $id, array $data): ${names.pascal}\n {\n $item = $this->getById($id);\n $item->update($data);\n\n return $item;\n }\n\n /**\n * Delete a ${names.pascal}.\n */\n public function delete(int $id): bool\n {\n $item = $this->getById($id);\n\n return (bool) $item->delete();\n }\n}\n`;\n}\n\nexport function laravelActionTemplate(\n names: NamingVariations,\n options: {\n namespace?: string;\n modelNamespace?: string;\n } = {}\n): string {\n const namespace = options.namespace || 'App\\\\Actions';\n const modelNamespace = options.modelNamespace || 'App\\\\Models';\n\n return `<?php\n\nnamespace ${namespace};\n\nuse ${modelNamespace}\\\\${names.pascal};\n\nclass Create${names.pascal}Action\n{\n /**\n * Execute the ${names.pascal} creation workflow.\n */\n public function execute(array $data): ${names.pascal}\n {\n return ${names.pascal}::create($data);\n }\n}\n`;\n}\n\nexport function laravelRequestTemplate(names: NamingVariations, namespace: string = 'App\\\\Http\\\\Requests'): string {\n return `<?php\n\nnamespace ${namespace};\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ${names.pascal}Request extends FormRequest\n{\n /**\n * Determine if the user is authorized to make this request.\n */\n public function authorize(): bool\n {\n return true;\n }\n\n /**\n * Get the validation rules that apply to the request.\n *\n * @return array<string, list<string>>\n */\n public function rules(): array\n {\n return [\n 'name' => ['required', 'string', 'max:255'],\n 'status' => ['nullable', 'string', 'in:draft,active,archived'],\n 'metadata' => ['nullable', 'array'],\n ];\n }\n\n /**\n * Get custom error messages for validation rules.\n *\n * @return array<string, string>\n */\n public function messages(): array\n {\n return [\n 'name.required' => 'The ${names.camel} name field is required.',\n ];\n }\n}\n`;\n}\n\nexport function laravelMigrationTemplate(names: NamingVariations): string {\n return `<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n /**\n * Run the migrations.\n */\n public function up(): void\n {\n Schema::create('${names.pluralSnake}', function (Blueprint $table) {\n $table->id();\n $table->string('name');\n $table->string('status')->default('draft');\n $table->json('metadata')->nullable();\n $table->timestamps();\n });\n }\n\n /**\n * Reverse the migrations.\n */\n public function down(): void\n {\n Schema::dropIfExists('${names.pluralSnake}');\n }\n};\n`;\n}\n","import type { NamingVariations } from './laravel.js';\n\nexport function tsControllerTemplate(names: NamingVariations, isModular: boolean = true): string {\n const serviceImport = isModular ? `./${names.kebab}.service.js` : `../services/${names.kebab}.service.js`;\n const dtoImport = isModular ? `./${names.kebab}.dto.js` : `../dtos/${names.kebab}.dto.js`;\n\n return `import type { Request, Response, NextFunction } from 'express';\nimport { ${names.pascal}Service } from '${serviceImport}';\nimport type { Create${names.pascal}Dto, Update${names.pascal}Dto } from '${dtoImport}';\n\nexport class ${names.pascal}Controller {\n constructor(private readonly ${names.camel}Service: ${names.pascal}Service = new ${names.pascal}Service()) {}\n\n /**\n * GET /api/${names.kebab}\n */\n getAll = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n const items = await this.${names.camel}Service.findAll(req.query);\n res.status(200).json({ status: 'success', data: items });\n } catch (error) {\n next(error);\n }\n };\n\n /**\n * GET /api/${names.kebab}/:id\n */\n getById = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n const { id } = req.params;\n const item = await this.${names.camel}Service.findById(id);\n if (!item) {\n res.status(404).json({ status: 'fail', message: '${names.pascal} not found' });\n return;\n }\n res.status(200).json({ status: 'success', data: item });\n } catch (error) {\n next(error);\n }\n };\n\n /**\n * POST /api/${names.kebab}\n */\n create = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n const payload: Create${names.pascal}Dto = req.body;\n const created = await this.${names.camel}Service.create(payload);\n res.status(201).json({ status: 'success', data: created });\n } catch (error) {\n next(error);\n }\n };\n\n /**\n * PUT /api/${names.kebab}/:id\n */\n update = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n const { id } = req.params;\n const payload: Update${names.pascal}Dto = req.body;\n const updated = await this.${names.camel}Service.update(id, payload);\n res.status(200).json({ status: 'success', data: updated });\n } catch (error) {\n next(error);\n }\n };\n\n /**\n * DELETE /api/${names.kebab}/:id\n */\n delete = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n const { id } = req.params;\n await this.${names.camel}Service.delete(id);\n res.status(200).json({ status: 'success', message: '${names.pascal} deleted successfully' });\n } catch (error) {\n next(error);\n }\n };\n}\n`;\n}\n\nexport function tsServiceTemplate(names: NamingVariations, isModular: boolean = true): string {\n const repoImport = isModular ? `./${names.kebab}.repository.js` : `../repositories/${names.kebab}.repository.js`;\n const dtoImport = isModular ? `./${names.kebab}.dto.js` : `../dtos/${names.kebab}.dto.js`;\n\n return `import { ${names.pascal}Repository } from '${repoImport}';\nimport type { ${names.pascal}Entity, Create${names.pascal}Dto, Update${names.pascal}Dto } from '${dtoImport}';\n\nexport class ${names.pascal}Service {\n constructor(private readonly ${names.camel}Repository: ${names.pascal}Repository = new ${names.pascal}Repository()) {}\n\n async findAll(query: Record<string, any> = {}): Promise<${names.pascal}Entity[]> {\n return this.${names.camel}Repository.findAll(query);\n }\n\n async findById(id: string): Promise<${names.pascal}Entity | null> {\n return this.${names.camel}Repository.findById(id);\n }\n\n async create(data: Create${names.pascal}Dto): Promise<${names.pascal}Entity> {\n return this.${names.camel}Repository.create(data);\n }\n\n async update(id: string, data: Update${names.pascal}Dto): Promise<${names.pascal}Entity> {\n return this.${names.camel}Repository.update(id, data);\n }\n\n async delete(id: string): Promise<boolean> {\n return this.${names.camel}Repository.delete(id);\n }\n}\n`;\n}\n\nexport function tsRepositoryTemplate(names: NamingVariations, isModular: boolean = true): string {\n const dtoImport = isModular ? `./${names.kebab}.dto.js` : `../dtos/${names.kebab}.dto.js`;\n\n return `import type { ${names.pascal}Entity, Create${names.pascal}Dto, Update${names.pascal}Dto } from '${dtoImport}';\n\nexport interface I${names.pascal}Repository {\n findAll(query?: Record<string, any>): Promise<${names.pascal}Entity[]>;\n findById(id: string): Promise<${names.pascal}Entity | null>;\n create(data: Create${names.pascal}Dto): Promise<${names.pascal}Entity>;\n update(id: string, data: Update${names.pascal}Dto): Promise<${names.pascal}Entity>;\n delete(id: string): Promise<boolean>;\n}\n\nexport class ${names.pascal}Repository implements I${names.pascal}Repository {\n // In-memory store fallback. Replace with Prisma / TypeORM / Drizzle client calls.\n private storage: Map<string, ${names.pascal}Entity> = new Map();\n\n async findAll(_query?: Record<string, any>): Promise<${names.pascal}Entity[]> {\n return Array.from(this.storage.values());\n }\n\n async findById(id: string): Promise<${names.pascal}Entity | null> {\n return this.storage.get(id) || null;\n }\n\n async create(data: Create${names.pascal}Dto): Promise<${names.pascal}Entity> {\n const id = (Math.random() * 100000).toFixed(0);\n const newRecord: ${names.pascal}Entity = {\n id,\n ...data,\n status: data.status || 'draft',\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n this.storage.set(id, newRecord);\n return newRecord;\n }\n\n async update(id: string, data: Update${names.pascal}Dto): Promise<${names.pascal}Entity> {\n const existing = await this.findById(id);\n if (!existing) {\n throw new Error(\\`${names.pascal} with id \\${id} not found\\`);\n }\n const updated: ${names.pascal}Entity = {\n ...existing,\n ...data,\n updatedAt: new Date(),\n };\n this.storage.set(id, updated);\n return updated;\n }\n\n async delete(id: string): Promise<boolean> {\n return this.storage.delete(id);\n }\n}\n`;\n}\n\nexport function tsRoutesTemplate(names: NamingVariations, isModular: boolean = true): string {\n const controllerImport = isModular ? `./${names.kebab}.controller.js` : `../controllers/${names.kebab}.controller.js`;\n\n return `import { Router } from 'express';\nimport { ${names.pascal}Controller } from '${controllerImport}';\n\nconst router = Router();\nconst controller = new ${names.pascal}Controller();\n\n/**\n * Route declarations for ${names.pascal}\n */\nrouter.get('/', controller.getAll);\nrouter.get('/:id', controller.getById);\nrouter.post('/', controller.create);\nrouter.put('/:id', controller.update);\nrouter.delete('/:id', controller.delete);\n\nexport const ${names.camel}Routes = router;\nexport default router;\n`;\n}\n\nexport function tsDtoTemplate(names: NamingVariations): string {\n return `export interface ${names.pascal}Entity {\n id: string;\n name: string;\n status: 'draft' | 'active' | 'archived';\n description?: string;\n metadata?: Record<string, unknown>;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface Create${names.pascal}Dto {\n name: string;\n status?: 'draft' | 'active' | 'archived';\n description?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface Update${names.pascal}Dto {\n name?: string;\n status?: 'draft' | 'active' | 'archived';\n description?: string;\n metadata?: Record<string, unknown>;\n}\n`;\n}\n\n"],"mappings":"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","names":["import_node_fs","import_node_path","fs","path","fg","import_node_fs","import_node_path","exports","path","fs","pc","spinner","path","fs"]}
|
package/dist/index.d.cts
DELETED
package/dist/index.d.ts
DELETED