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();
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<PackageManager>({
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");

View File

@@ -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;

View File

@@ -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 <type>",
"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) {

View File

@@ -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;

View File

@@ -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}`));
}