UNPKG

context-forge

Version:

AI orchestration platform with autonomous teams, enhancement planning, migration tools, 25+ slash commands, checkpoints & hooks. Multi-IDE: Claude, Cursor, Windsurf, Cline, Copilot

170 lines • 8.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.techStack = techStack; const inquirer_1 = __importDefault(require("inquirer")); const chalk_1 = __importDefault(require("chalk")); async function techStack(projectType) { console.log(chalk_1.default.blue('\nšŸ› ļø Step 4 of 7: Technology Stack')); console.log(chalk_1.default.gray('Choose the technologies that best fit your project.\n')); const answers = {}; let stepCounter = 1; // Frontend selection (skip for API-only projects) if (projectType !== 'api') { console.log(chalk_1.default.cyan(`🌐 ${stepCounter++}. Frontend Framework`)); const frontendAnswer = await inquirer_1.default.prompt([ { type: 'list', name: 'frontend', message: 'Select your frontend framework:', choices: [ { name: 'šŸš€ Next.js (React-based, full-stack)', value: 'nextjs' }, { name: 'āš™ļø React (SPA)', value: 'react' }, { name: 'šŸ’… Vue.js', value: 'vuejs' }, { name: 'šŸŒ¶ļø Angular', value: 'angular' }, { name: 'šŸ¦„ Svelte/SvelteKit', value: 'svelte' }, { name: 'šŸ Vanilla JavaScript', value: 'vanilla' }, { name: 'āŒ None (API only)', value: 'none' }, ], }, ]); answers.frontend = frontendAnswer.frontend; // Styling options for frontend projects if (frontendAnswer.frontend !== 'none') { console.log(chalk_1.default.cyan(`šŸŽØ ${stepCounter++}. Styling Framework`)); const stylingAnswer = await inquirer_1.default.prompt([ { type: 'list', name: 'styling', message: 'Select your styling approach:', choices: [ { name: 'šŸŒŖļø Tailwind CSS', value: 'tailwind' }, { name: 'šŸ“¦ CSS Modules', value: 'css-modules' }, { name: 'šŸ‘Œ Styled Components', value: 'styled-components' }, { name: 'šŸ˜ Emotion', value: 'emotion' }, { name: 'šŸ˜Ž Sass/SCSS', value: 'sass' }, { name: 'šŸ“‹ Plain CSS', value: 'css' }, ], }, ]); answers.styling = stylingAnswer.styling; // State management for React/Vue/Angular if (['react', 'nextjs', 'vuejs', 'angular'].includes(frontendAnswer.frontend)) { console.log(chalk_1.default.cyan(`šŸ“Š ${stepCounter++}. State Management`)); const stateAnswer = await inquirer_1.default.prompt([ { type: 'list', name: 'stateManagement', message: 'Select state management solution:', choices: getStateManagementChoices(frontendAnswer.frontend), }, ]); answers.stateManagement = stateAnswer.stateManagement; } } } // Backend selection (skip for frontend-only projects) if (projectType !== 'web' && projectType !== 'mobile' && projectType !== 'desktop') { console.log(chalk_1.default.cyan(`šŸ”Œ ${stepCounter++}. Backend Framework`)); const backendAnswer = await inquirer_1.default.prompt([ { type: 'list', name: 'backend', message: 'Select your backend framework:', choices: [ { name: '⚔ FastAPI (Python)', value: 'fastapi' }, { name: 'šŸš€ Express.js (Node.js)', value: 'express' }, { name: 'šŸ Django (Python)', value: 'django' }, { name: 'šŸŒ¶ļø Flask (Python)', value: 'flask' }, { name: 'ā˜• Spring Boot (Java)', value: 'spring-boot' }, { name: 'šŸ’Ž Ruby on Rails', value: 'rails' }, { name: 'šŸ”µ ASP.NET Core (C#)', value: 'aspnet' }, { name: '🐹 Go (Gin/Echo)', value: 'go' }, { name: 'āŒ None (Frontend only)', value: 'none' }, ], }, ]); answers.backend = backendAnswer.backend; } // Database selection if (answers.backend !== 'none' || projectType === 'fullstack') { console.log(chalk_1.default.cyan(`šŸ’¾ ${stepCounter++}. Database`)); const databaseAnswer = await inquirer_1.default.prompt([ { type: 'list', name: 'database', message: 'Select your database:', choices: [ { name: '🐘 PostgreSQL', value: 'postgresql' }, { name: '🐬 MySQL', value: 'mysql' }, { name: 'šŸƒ MongoDB', value: 'mongodb' }, { name: 'šŸ’¾ SQLite', value: 'sqlite' }, { name: '⚔ Redis + PostgreSQL', value: 'redis-postgresql' }, { name: '⚔ Redis + MongoDB', value: 'redis-mongodb' }, { name: 'šŸš€ Supabase (PostgreSQL)', value: 'supabase' }, { name: 'šŸ”„ Firebase', value: 'firebase' }, { name: 'āŒ None', value: 'none' }, ], }, ]); answers.database = databaseAnswer.database; } // Authentication method if (answers.backend !== 'none' || answers.frontend !== 'none') { console.log(chalk_1.default.cyan(`šŸ”’ ${stepCounter++}. Authentication`)); const authAnswer = await inquirer_1.default.prompt([ { type: 'list', name: 'auth', message: 'Authentication method:', choices: [ { name: 'šŸ  JWT-based', value: 'jwt' }, { name: 'šŸ”— OAuth 2.0 (Google, GitHub)', value: 'oauth' }, { name: 'šŸŖ Session-based', value: 'session' }, { name: '✨ Magic links', value: 'magic-links' }, { name: 'šŸš€ Supabase Auth', value: 'supabase-auth' }, { name: 'šŸ”„ Firebase Auth', value: 'firebase-auth' }, { name: 'šŸ” Auth0', value: 'auth0' }, { name: 'šŸ‘¤ Clerk', value: 'clerk' }, { name: 'āŒ None', value: 'none' }, ], }, ]); answers.auth = authAnswer.auth; } console.log(chalk_1.default.green('\nāœ“ Technology stack configured\n')); return answers; } function getStateManagementChoices(framework) { switch (framework) { case 'react': case 'nextjs': return [ { name: 'Redux Toolkit', value: 'redux-toolkit' }, { name: 'Zustand', value: 'zustand' }, { name: 'MobX', value: 'mobx' }, { name: 'Recoil', value: 'recoil' }, { name: 'Context API (built-in)', value: 'context' }, { name: 'TanStack Query (React Query)', value: 'tanstack-query' }, { name: 'None', value: 'none' }, ]; case 'vuejs': return [ { name: 'Vuex', value: 'vuex' }, { name: 'Pinia', value: 'pinia' }, { name: 'None', value: 'none' }, ]; case 'angular': return [ { name: 'NgRx', value: 'ngrx' }, { name: 'Akita', value: 'akita' }, { name: 'RxJS (built-in)', value: 'rxjs' }, { name: 'None', value: 'none' }, ]; default: return [{ name: 'None', value: 'none' }]; } } //# sourceMappingURL=techStack.js.map