diff --git a/.changeset/easy-dodos-lay.md b/.changeset/easy-dodos-lay.md new file mode 100644 index 0000000..46819a1 --- /dev/null +++ b/.changeset/easy-dodos-lay.md @@ -0,0 +1,5 @@ +--- +"create-better-t-stack": patch +--- + +Refactor: Simplify error handling in CLI helpers diff --git a/apps/cli/src/helpers/create-project.ts b/apps/cli/src/helpers/create-project.ts index 269b57a..813665f 100644 --- a/apps/cli/src/helpers/create-project.ts +++ b/apps/cli/src/helpers/create-project.ts @@ -26,8 +26,7 @@ import { setupFrontendTemplates, } from "./template-manager"; -export async function createProject(options: ProjectConfig): Promise { - const s = spinner(); +export async function createProject(options: ProjectConfig) { const projectDir = path.resolve(process.cwd(), options.projectName); try { @@ -86,12 +85,10 @@ export async function createProject(options: ProjectConfig): Promise { return projectDir; } catch (error) { - s.stop(pc.red("Failed")); if (error instanceof Error) { cancel(pc.red(`Error during project creation: ${error.message}`)); console.error(error.stack); process.exit(1); } - throw error; } } diff --git a/apps/cli/src/helpers/db-setup.ts b/apps/cli/src/helpers/db-setup.ts index 3301dc8..cbf1d13 100644 --- a/apps/cli/src/helpers/db-setup.ts +++ b/apps/cli/src/helpers/db-setup.ts @@ -68,6 +68,5 @@ export async function setupDatabase(config: ProjectConfig): Promise { if (error instanceof Error) { consola.error(pc.red(error.message)); } - throw error; } } diff --git a/apps/cli/src/helpers/install-dependencies.ts b/apps/cli/src/helpers/install-dependencies.ts index 985f145..d2046be 100644 --- a/apps/cli/src/helpers/install-dependencies.ts +++ b/apps/cli/src/helpers/install-dependencies.ts @@ -33,7 +33,6 @@ export async function installDependencies({ if (error instanceof Error) { consola.error(pc.red(`Installation error: ${error.message}`)); } - throw error; } } diff --git a/apps/cli/src/helpers/mongodb-atlas-setup.ts b/apps/cli/src/helpers/mongodb-atlas-setup.ts index 742796b..11da7f8 100644 --- a/apps/cli/src/helpers/mongodb-atlas-setup.ts +++ b/apps/cli/src/helpers/mongodb-atlas-setup.ts @@ -108,7 +108,6 @@ async function writeEnvFile(projectDir: string, config?: MongoDBConfig) { await fs.writeFile(envPath, envContent.trim()); } catch (error) { consola.error("Failed to update environment configuration"); - throw error; } } diff --git a/apps/cli/src/helpers/neon-setup.ts b/apps/cli/src/helpers/neon-setup.ts index 923a0e3..7d60821 100644 --- a/apps/cli/src/helpers/neon-setup.ts +++ b/apps/cli/src/helpers/neon-setup.ts @@ -29,7 +29,6 @@ async function executeNeonCommand( if (s) s.start(spinnerText); const result = await execa(fullCommand, { shell: true }); if (s) s.stop(spinnerText); - return result; } catch (error) { if (s) s.stop(pc.red(`Failed: ${spinnerText}`)); @@ -61,14 +60,13 @@ async function authenticateWithNeon(packageManager: ProjectPackageManager) { return true; } catch (error) { consola.error(pc.red("Failed to authenticate with Neon")); - throw error; } } async function createNeonProject( projectName: string, packageManager: ProjectPackageManager, -): Promise { +) { try { const commandArgsString = `neonctl projects create --name "${projectName}" --output json`; const { stdout } = await executeNeonCommand( @@ -101,7 +99,6 @@ async function createNeonProject( return null; } catch (error) { consola.error(pc.red("Failed to create Neon project")); - throw error; } } diff --git a/apps/cli/src/helpers/prisma-postgres-setup.ts b/apps/cli/src/helpers/prisma-postgres-setup.ts index 32f0435..9cefccd 100644 --- a/apps/cli/src/helpers/prisma-postgres-setup.ts +++ b/apps/cli/src/helpers/prisma-postgres-setup.ts @@ -95,7 +95,6 @@ async function writeEnvFile(projectDir: string, config?: PrismaConfig) { await fs.writeFile(envPath, envContent.trim()); } catch (error) { consola.error("Failed to update environment configuration"); - throw error; } } @@ -119,7 +118,7 @@ async function addPrismaAccelerateExtension(serverDir: string) { const prismaIndexPath = path.join(serverDir, "prisma/index.ts"); const prismaIndexContent = ` -import { PrismaClient } from '@prisma/client'; +import { PrismaClient } from "./generated/client"; import { withAccelerate } from "@prisma/extension-accelerate"; const prisma = new PrismaClient().$extends(withAccelerate()); diff --git a/apps/cli/src/helpers/starlight-setup.ts b/apps/cli/src/helpers/starlight-setup.ts index 5ae3c2f..8044396 100644 --- a/apps/cli/src/helpers/starlight-setup.ts +++ b/apps/cli/src/helpers/starlight-setup.ts @@ -47,6 +47,5 @@ export async function setupStarlight(config: ProjectConfig): Promise { if (error instanceof Error) { consola.error(pc.red(error.message)); } - throw error; } } diff --git a/apps/cli/src/helpers/tauri-setup.ts b/apps/cli/src/helpers/tauri-setup.ts index 82a8e01..42e7a6f 100644 --- a/apps/cli/src/helpers/tauri-setup.ts +++ b/apps/cli/src/helpers/tauri-setup.ts @@ -90,6 +90,5 @@ export async function setupTauri(config: ProjectConfig): Promise { if (error instanceof Error) { consola.error(pc.red(error.message)); } - throw error; } } diff --git a/apps/cli/src/helpers/turso-setup.ts b/apps/cli/src/helpers/turso-setup.ts index 56162f2..708d456 100644 --- a/apps/cli/src/helpers/turso-setup.ts +++ b/apps/cli/src/helpers/turso-setup.ts @@ -49,7 +49,6 @@ async function loginToTurso() { return true; } catch (error) { s.stop(pc.red("Failed to log in to Turso")); - throw error; } } @@ -75,7 +74,6 @@ async function installTursoCLI(isMac: boolean) { throw new Error("Installation cancelled"); } s.stop(pc.red("Failed to install Turso CLI")); - throw error; } } @@ -135,10 +133,7 @@ async function selectTursoGroup(): Promise { return selectedGroup as string; } -async function createTursoDatabase( - dbName: string, - groupName: string | null, -): Promise { +async function createTursoDatabase(dbName: string, groupName: string | null) { const s = spinner(); try { @@ -158,7 +153,6 @@ async function createTursoDatabase( if (error instanceof Error && error.message.includes("already exists")) { throw new Error("DATABASE_EXISTS"); } - throw error; } s.start("Retrieving database connection details..."); @@ -174,7 +168,6 @@ async function createTursoDatabase( }; } catch (error) { s.stop(pc.red("Failed to retrieve database connection details")); - throw error; } } @@ -289,7 +282,6 @@ export async function setupTurso(config: ProjectConfig): Promise { log.warn(pc.yellow(`Database "${pc.red(dbName)}" already exists`)); suggestedName = `${dbName}-${Math.floor(Math.random() * 1000)}`; } else { - throw error; } } } diff --git a/apps/cli/templates/base/_gitignore b/apps/cli/templates/base/_gitignore index a911425..c98e331 100644 --- a/apps/cli/templates/base/_gitignore +++ b/apps/cli/templates/base/_gitignore @@ -1,2 +1,2 @@ -/node_modules/ +node_modules .turbo