UNPKG

create-node-spark

Version:
85 lines 4.61 kB
import { askProjectDetails } from "../prompts/prompts.js"; import { installDependencies } from "../tasks/instalingDependecies.js"; import { setupNpm } from "../tasks/setupNpm.js"; import { setupESLintConfig } from "../tasks/setupESLint.js"; import { setupFolderStructure } from "../tasks/setupFolderStructure.js"; import { setupEnv } from "../tasks/setupEnv.js"; import { configureIndex } from "../tasks/configureIndex.js"; import { setupMongoDb } from "../tasks/setupMongoDb.js"; import { setupSql } from "../tasks/setupSql.js"; import { setupPostgresPrisma } from "../tasks/setupPostgresPrisma.js"; import { configureMulter } from "../tasks/configureMulter.js"; import { logHeader, logStep, logInfo } from "../utils/logger.js"; const project = async (flagBasedConfig, flags) => { try { let projectDetails; // If we have flag-based config and --yes flag, use defaults for missing values if (flagBasedConfig && flags?.yes) { logInfo("🚀 Using flag-based configuration with defaults..."); projectDetails = { projectName: flagBasedConfig.projectName || 'my-node-app', language: flagBasedConfig.language || 'JavaScript', framework: flagBasedConfig.framework || 'none', database: flagBasedConfig.database || 'none', packageManager: flagBasedConfig.packageManager || 'npm', features: flagBasedConfig.features || [], }; } // If we have partial flag config, merge with interactive prompts else if (flagBasedConfig && Object.keys(flagBasedConfig).length > 0) { logInfo("🔧 Using flag-based configuration with interactive prompts for missing options..."); projectDetails = await askProjectDetails(flagBasedConfig); } // Pure interactive mode else { projectDetails = await askProjectDetails(); } if (!flags?.silent) { logHeader("Building Your Project"); } logStep(1, 6, "Setting up npm and project structure"); await setupNpm(projectDetails.projectName, projectDetails.language, projectDetails.packageManager); logStep(2, 6, "Installing dependencies"); await installDependencies({ ...projectDetails }); let stepCount = 3; const totalSteps = 6 + (projectDetails.features.includes('eslint') ? 1 : 0) + (projectDetails.features.includes('multer') ? 1 : 0) + (projectDetails.database !== 'none' ? 1 : 0); if (projectDetails.features.includes('eslint')) { logStep(stepCount++, totalSteps, "Configuring ESLint"); await setupESLintConfig(projectDetails.language); } if (projectDetails.features.includes('multer')) { logStep(stepCount++, totalSteps, "Setting up Multer for file uploads"); await configureMulter(projectDetails.language, projectDetails.packageManager); } logStep(stepCount++, totalSteps, "Creating folder structure"); await setupFolderStructure(projectDetails.projectName); if (projectDetails.database !== 'none') { logStep(stepCount++, totalSteps, `Setting up ${projectDetails.database} database`); if (projectDetails.database === 'MySQL') { await setupSql(projectDetails.projectName, projectDetails.language, projectDetails.packageManager); } if (projectDetails.database === 'MongoDB') { await setupMongoDb(projectDetails.projectName, projectDetails.language, projectDetails.packageManager); } if (projectDetails.database === 'PostgreSQL') { await setupPostgresPrisma(projectDetails.projectName, projectDetails.language, projectDetails.packageManager); } await configureIndex(projectDetails.projectName, projectDetails.language, projectDetails.framework, projectDetails.database); } else { await configureIndex(projectDetails.projectName, projectDetails.language, projectDetails.framework, null); } logStep(stepCount++, totalSteps, "Setting up environment configuration"); await setupEnv(projectDetails.projectName, projectDetails.language, projectDetails.database !== 'none' ? projectDetails.database : undefined); logStep(stepCount, totalSteps, "Finalizing project setup"); return projectDetails.projectName; } catch (error) { throw error; } }; export default project; //# sourceMappingURL=init.js.map