From 8245d185286b3f2e0abc4fdaf22aa7c76ff492b3 Mon Sep 17 00:00:00 2001 From: Aman Varshney Date: Thu, 13 Feb 2025 17:52:50 +0530 Subject: [PATCH] fix inconsistent flag behaviour --- apps/cli/src/helpers/create-project.ts | 44 +++++++++---------- apps/cli/src/helpers/db-setup.ts | 1 + apps/cli/src/index.ts | 20 ++++++++- apps/cli/src/types.ts | 1 + .../utils/generate-reproducible-command.ts | 8 ++-- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/apps/cli/src/helpers/create-project.ts b/apps/cli/src/helpers/create-project.ts index b7f6d8c..b06b0df 100644 --- a/apps/cli/src/helpers/create-project.ts +++ b/apps/cli/src/helpers/create-project.ts @@ -24,27 +24,29 @@ export async function createProject(options: ProjectConfig) { spinner.succeed(); console.log(); - const initGit = await confirm({ - message: chalk.blue.bold("🔄 Initialize a git repository?"), - default: true, - }).catch((error) => { - spinner.stop(); - console.log(); - throw error; - }); + let shouldInitGit = options.git; - if (initGit) { + if (!options.yes && shouldInitGit) { + shouldInitGit = await confirm({ + message: chalk.blue.bold("🔄 Initialize a git repository?"), + default: true, + }).catch((error) => { + spinner.stop(); + console.log(); + throw error; + }); + } + + if (shouldInitGit) { spinner.start("Initializing git repository..."); await $`git init ${projectDir}`; spinner.succeed(); - console.log(); } - let packageManager = options.packageManager; - - if (!packageManager) { - const detectedPackageManager = getUserPkgManager(); + const detectedPackageManager = getUserPkgManager(); + let packageManager = options.packageManager ?? detectedPackageManager; + if (!options.yes) { const useDetectedPackageManager = await confirm({ message: chalk.blue.bold( `📦 Use detected package manager (${chalk.cyan( @@ -57,9 +59,7 @@ export async function createProject(options: ProjectConfig) { throw error; }); - if (useDetectedPackageManager) { - packageManager = detectedPackageManager; - } else { + if (!useDetectedPackageManager) { console.log(); packageManager = await select({ message: chalk.blue.bold("📦 Select package manager:"), @@ -96,8 +96,6 @@ export async function createProject(options: ProjectConfig) { } } - console.log(); - const installDeps = await confirm({ message: chalk.blue.bold( `📦 Install dependencies using ${chalk.cyan(packageManager)}?`, @@ -114,16 +112,16 @@ export async function createProject(options: ProjectConfig) { spinner.start(`📦 Installing dependencies using ${packageManager}...`); switch (packageManager ?? DEFAULT_CONFIG.packageManager) { case "npm": - await $`npm install ${projectDir}`; + await $`cd ${projectDir} && npm install`; break; case "yarn": - await $`yarn install ${projectDir}`; + await $`cd ${projectDir} && yarn install`; break; case "pnpm": - await $`pnpm install ${projectDir}`; + await $`cd ${projectDir} && pnpm install`; break; case "bun": - await $`bun install ${projectDir}`; + await $`cd ${projectDir} && bun install`; break; default: throw new Error("Unsupported package manager"); diff --git a/apps/cli/src/helpers/db-setup.ts b/apps/cli/src/helpers/db-setup.ts index f8e63c7..f898314 100644 --- a/apps/cli/src/helpers/db-setup.ts +++ b/apps/cli/src/helpers/db-setup.ts @@ -103,6 +103,7 @@ export async function setupTurso(projectDir: string) { try { if (!canInstallCLI) { + logger.warn("\nAutomatic Turso setup is not supported on Windows."); await writeEnvFile(projectDir); displayManualSetupInstructions(); return; diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 7665aa6..fd32b5b 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -30,7 +30,7 @@ async function gatherConfig( database: "libsql", auth: true, features: [], - git: true, + git: flags.git ?? true, }; config.projectName = @@ -119,6 +119,7 @@ async function main() { .option("--docker", "Include Docker setup") .option("--github-actions", "Include GitHub Actions") .option("--seo", "Include SEO setup") + .option("--no-git", "Skip git initialization") .option( "--package-manager ", "Package manager to use (npm, yarn, pnpm, or bun)", @@ -133,6 +134,7 @@ async function main() { database: options.database as ProjectDatabase, auth: options.auth, packageManager: options.packageManager as PackageManager, + git: options.git ?? true, features: [ ...(options.docker ? ["docker"] : []), ...(options.githubActions ? ["github-actions"] : []), @@ -141,7 +143,21 @@ async function main() { }; const config = options.yes - ? DEFAULT_CONFIG + ? { + ...DEFAULT_CONFIG, + yes: true, + projectName: projectDirectory ?? DEFAULT_CONFIG.projectName, + database: options.database ?? DEFAULT_CONFIG.database, + auth: options.auth ?? DEFAULT_CONFIG.auth, + git: options.git ?? DEFAULT_CONFIG.git, + packageManager: + options.packageManager ?? DEFAULT_CONFIG.packageManager, + features: [ + ...(options.docker ? ["docker"] : []), + ...(options.githubActions ? ["github-actions"] : []), + ...(options.seo ? ["SEO"] : []), + ] as ProjectFeature[], + } : await gatherConfig(flagConfig); if (options.yes) { diff --git a/apps/cli/src/types.ts b/apps/cli/src/types.ts index 57a64b3..86e7283 100644 --- a/apps/cli/src/types.ts +++ b/apps/cli/src/types.ts @@ -3,6 +3,7 @@ export type ProjectFeature = "docker" | "github-actions" | "SEO"; export type ProjectDatabase = "libsql" | "postgres"; export type ProjectConfig = { + yes?: boolean; projectName: string; git: boolean; database: ProjectDatabase; diff --git a/apps/cli/src/utils/generate-reproducible-command.ts b/apps/cli/src/utils/generate-reproducible-command.ts index bcce5d3..af725e3 100644 --- a/apps/cli/src/utils/generate-reproducible-command.ts +++ b/apps/cli/src/utils/generate-reproducible-command.ts @@ -1,11 +1,9 @@ import chalk from "chalk"; import { DEFAULT_CONFIG } from "../consts"; import type { ProjectConfig } from "../types"; -import { getUserPkgManager } from "./get-package-manager"; export function generateReproducibleCommand(config: ProjectConfig): string { const flags: string[] = []; - const defaultPackageManager = getUserPkgManager(); if (config.database !== DEFAULT_CONFIG.database) { flags.push(chalk.cyan(`--database ${config.database}`)); @@ -15,9 +13,13 @@ export function generateReproducibleCommand(config: ProjectConfig): string { flags.push(chalk.yellow("--no-auth")); } + if (!config.git) { + flags.push(chalk.red("--no-git")); + } + if ( config.packageManager && - config.packageManager !== defaultPackageManager + config.packageManager !== DEFAULT_CONFIG.packageManager ) { flags.push(chalk.magenta(`--package-manager ${config.packageManager}`)); }