fix inconsistent flag behaviour

This commit is contained in:
Aman Varshney
2025-02-13 17:52:50 +05:30
parent 50e336cfcb
commit 8245d18528
5 changed files with 46 additions and 28 deletions

View File

@@ -24,27 +24,29 @@ export async function createProject(options: ProjectConfig) {
spinner.succeed(); spinner.succeed();
console.log(); console.log();
const initGit = await confirm({ let shouldInitGit = options.git;
message: chalk.blue.bold("🔄 Initialize a git repository?"),
default: true,
}).catch((error) => {
spinner.stop();
console.log();
throw error;
});
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..."); spinner.start("Initializing git repository...");
await $`git init ${projectDir}`; await $`git init ${projectDir}`;
spinner.succeed(); spinner.succeed();
console.log();
} }
let packageManager = options.packageManager; const detectedPackageManager = getUserPkgManager();
let packageManager = options.packageManager ?? detectedPackageManager;
if (!packageManager) {
const detectedPackageManager = getUserPkgManager();
if (!options.yes) {
const useDetectedPackageManager = await confirm({ const useDetectedPackageManager = await confirm({
message: chalk.blue.bold( message: chalk.blue.bold(
`📦 Use detected package manager (${chalk.cyan( `📦 Use detected package manager (${chalk.cyan(
@@ -57,9 +59,7 @@ export async function createProject(options: ProjectConfig) {
throw error; throw error;
}); });
if (useDetectedPackageManager) { if (!useDetectedPackageManager) {
packageManager = detectedPackageManager;
} else {
console.log(); console.log();
packageManager = await select<PackageManager>({ packageManager = await select<PackageManager>({
message: chalk.blue.bold("📦 Select package manager:"), message: chalk.blue.bold("📦 Select package manager:"),
@@ -96,8 +96,6 @@ export async function createProject(options: ProjectConfig) {
} }
} }
console.log();
const installDeps = await confirm({ const installDeps = await confirm({
message: chalk.blue.bold( message: chalk.blue.bold(
`📦 Install dependencies using ${chalk.cyan(packageManager)}?`, `📦 Install dependencies using ${chalk.cyan(packageManager)}?`,
@@ -114,16 +112,16 @@ export async function createProject(options: ProjectConfig) {
spinner.start(`📦 Installing dependencies using ${packageManager}...`); spinner.start(`📦 Installing dependencies using ${packageManager}...`);
switch (packageManager ?? DEFAULT_CONFIG.packageManager) { switch (packageManager ?? DEFAULT_CONFIG.packageManager) {
case "npm": case "npm":
await $`npm install ${projectDir}`; await $`cd ${projectDir} && npm install`;
break; break;
case "yarn": case "yarn":
await $`yarn install ${projectDir}`; await $`cd ${projectDir} && yarn install`;
break; break;
case "pnpm": case "pnpm":
await $`pnpm install ${projectDir}`; await $`cd ${projectDir} && pnpm install`;
break; break;
case "bun": case "bun":
await $`bun install ${projectDir}`; await $`cd ${projectDir} && bun install`;
break; break;
default: default:
throw new Error("Unsupported package manager"); throw new Error("Unsupported package manager");

View File

@@ -103,6 +103,7 @@ export async function setupTurso(projectDir: string) {
try { try {
if (!canInstallCLI) { if (!canInstallCLI) {
logger.warn("\nAutomatic Turso setup is not supported on Windows.");
await writeEnvFile(projectDir); await writeEnvFile(projectDir);
displayManualSetupInstructions(); displayManualSetupInstructions();
return; return;

View File

@@ -30,7 +30,7 @@ async function gatherConfig(
database: "libsql", database: "libsql",
auth: true, auth: true,
features: [], features: [],
git: true, git: flags.git ?? true,
}; };
config.projectName = config.projectName =
@@ -119,6 +119,7 @@ async function main() {
.option("--docker", "Include Docker setup") .option("--docker", "Include Docker setup")
.option("--github-actions", "Include GitHub Actions") .option("--github-actions", "Include GitHub Actions")
.option("--seo", "Include SEO setup") .option("--seo", "Include SEO setup")
.option("--no-git", "Skip git initialization")
.option( .option(
"--package-manager <type>", "--package-manager <type>",
"Package manager to use (npm, yarn, pnpm, or bun)", "Package manager to use (npm, yarn, pnpm, or bun)",
@@ -133,6 +134,7 @@ async function main() {
database: options.database as ProjectDatabase, database: options.database as ProjectDatabase,
auth: options.auth, auth: options.auth,
packageManager: options.packageManager as PackageManager, packageManager: options.packageManager as PackageManager,
git: options.git ?? true,
features: [ features: [
...(options.docker ? ["docker"] : []), ...(options.docker ? ["docker"] : []),
...(options.githubActions ? ["github-actions"] : []), ...(options.githubActions ? ["github-actions"] : []),
@@ -141,7 +143,21 @@ async function main() {
}; };
const config = options.yes 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); : await gatherConfig(flagConfig);
if (options.yes) { if (options.yes) {

View File

@@ -3,6 +3,7 @@ export type ProjectFeature = "docker" | "github-actions" | "SEO";
export type ProjectDatabase = "libsql" | "postgres"; export type ProjectDatabase = "libsql" | "postgres";
export type ProjectConfig = { export type ProjectConfig = {
yes?: boolean;
projectName: string; projectName: string;
git: boolean; git: boolean;
database: ProjectDatabase; database: ProjectDatabase;

View File

@@ -1,11 +1,9 @@
import chalk from "chalk"; import chalk from "chalk";
import { DEFAULT_CONFIG } from "../consts"; import { DEFAULT_CONFIG } from "../consts";
import type { ProjectConfig } from "../types"; import type { ProjectConfig } from "../types";
import { getUserPkgManager } from "./get-package-manager";
export function generateReproducibleCommand(config: ProjectConfig): string { export function generateReproducibleCommand(config: ProjectConfig): string {
const flags: string[] = []; const flags: string[] = [];
const defaultPackageManager = getUserPkgManager();
if (config.database !== DEFAULT_CONFIG.database) { if (config.database !== DEFAULT_CONFIG.database) {
flags.push(chalk.cyan(`--database ${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")); flags.push(chalk.yellow("--no-auth"));
} }
if (!config.git) {
flags.push(chalk.red("--no-git"));
}
if ( if (
config.packageManager && config.packageManager &&
config.packageManager !== defaultPackageManager config.packageManager !== DEFAULT_CONFIG.packageManager
) { ) {
flags.push(chalk.magenta(`--package-manager ${config.packageManager}`)); flags.push(chalk.magenta(`--package-manager ${config.packageManager}`));
} }