UNPKG

zenith-gen

Version:

A CLI tool designed to streamline the creation of projects within the Zenith Inova ecosystem, providing optimized configurations and modern development tools.

84 lines (83 loc) 3.82 kB
#!/usr/bin/env node import chalk from 'chalk'; import path from 'path'; import fs from 'fs-extra'; import { projectNamePrompt } from './prompts/projectName.js'; import { packageManagerPrompt } from './prompts/packageManager.js'; import { createNextApp, defineAlias, nextJsPrompt } from './prompts/nextjs.js'; import { configureStorybook, installStorybook, storybookConfigsPrompt, storybookPrompt, } from './prompts/storybook.js'; import { configureNpmRc } from './prompts/npmrc.js'; import { configureNvmRc } from './prompts/nvmrc.js'; import { configureEnv } from './prompts/env.js'; import { configureESLint } from './prompts/eslint.js'; import { configurePrettier } from './prompts/prettier.js'; import { installShadCN, shadcnPrompt } from './prompts/shadcn.js'; import { installDevDependencies, installDependencies, } from './prompts/dependencies.js'; import { gitCommit } from './prompts/git.js'; async function main() { console.clear(); console.log(chalk.hex('#633cff')('========================================')); console.log(' Zenith Project Generator CLI'); console.log(chalk.hex('#633cff')('========================================')); const useDefault = process.argv.includes('--default') || process.argv.includes('-d'); let packageManager = 'pnpm', useTs = true, useEslint = true, useSrc = true, useApp = true, useTurbo = true, customAlias = false, useShadcn = true, useStorybook = true, usePrettier = true, useStorybookDefaultConfig = false, useChromatic = true, alias = '@/*'; const projectName = await projectNamePrompt(); if (useDefault) console.log(chalk.yellow('Using default settings...')); else { packageManager = await packageManagerPrompt(); console.log(chalk.blue('Creating Next.js project...')); ({ useTs, useEslint, usePrettier, useSrc, useApp, useTurbo, customAlias, } = await nextJsPrompt()); const alias = await defineAlias(useDefault, customAlias); useStorybook = await storybookPrompt(); if (useStorybook) { ({ useStorybookDefaultConfig, useChromatic } = await storybookConfigsPrompt()); } useShadcn = await shadcnPrompt(); } const projectPath = path.join(process.cwd(), projectName); try { console.log(chalk.blue('Running Create Next App...')); createNextApp(projectName, packageManager, useTs, useSrc, useTurbo, useApp, useEslint, alias); console.log(chalk.green(`Next.js project created using ${packageManager}`)); } catch (error) { console.log(chalk.red('Failed to create Next.js project\nError: '), error); return; } try { fs.ensureDirSync(projectPath); process.chdir(projectPath); console.log(chalk.blue('Setting up configuration files...')); configureNpmRc(projectPath); configureNvmRc(projectPath); configureEnv(projectPath, useChromatic); installDevDependencies(packageManager, useEslint, useChromatic, useStorybook, usePrettier); installDependencies(packageManager); if (useShadcn) installShadCN(packageManager); if (useStorybook) installStorybook(packageManager); if (useEslint) configureESLint(projectPath); if (usePrettier) configurePrettier(projectPath); if (!useStorybookDefaultConfig) configureStorybook(projectPath, useStorybook); gitCommit(); console.log(chalk.green('Project setup completed successfully!')); } catch (error) { console.log(chalk.red('Failed to setup the project\nError: '), error); } } main().catch(err => console.error(chalk.red('Error: '), err));