mirror of
https://github.com/FranP-code/create-better-t-stack.git
synced 2025-10-12 23:52:15 +00:00
Improve error handling
This commit is contained in:
5
.changeset/early-dots-film.md
Normal file
5
.changeset/early-dots-film.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"create-better-t-stack": patch
|
||||
---
|
||||
|
||||
Improve error handling
|
||||
@@ -3,6 +3,7 @@ import { confirm, select } from "@inquirer/prompts";
|
||||
import { $ } from "execa";
|
||||
import fs from "fs-extra";
|
||||
import ora from "ora";
|
||||
import { DEFAULT_CONFIG } from "./consts";
|
||||
import { setupTurso } from "./helpers/db-setup";
|
||||
import type { PackageManager, ProjectConfig } from "./types";
|
||||
import { getUserPkgManager } from "./utils/get-package-manager";
|
||||
@@ -23,6 +24,9 @@ export async function createProject(options: ProjectConfig) {
|
||||
const initGit = await confirm({
|
||||
message: "Initialize a git repository?",
|
||||
default: true,
|
||||
}).catch((error) => {
|
||||
spinner.stop();
|
||||
throw error;
|
||||
});
|
||||
|
||||
if (initGit) {
|
||||
@@ -39,6 +43,9 @@ export async function createProject(options: ProjectConfig) {
|
||||
const useDetectedPackageManager = await confirm({
|
||||
message: `Use detected package manager (${detectedPackageManager})?`,
|
||||
default: true,
|
||||
}).catch((error) => {
|
||||
spinner.stop();
|
||||
throw error;
|
||||
});
|
||||
|
||||
if (useDetectedPackageManager) {
|
||||
@@ -52,6 +59,9 @@ export async function createProject(options: ProjectConfig) {
|
||||
{ value: "pnpm", name: "pnpm" },
|
||||
{ value: "bun", name: "bun" },
|
||||
],
|
||||
}).catch((error) => {
|
||||
spinner.stop();
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -59,11 +69,14 @@ export async function createProject(options: ProjectConfig) {
|
||||
const installDeps = await confirm({
|
||||
message: `Install dependencies using ${packageManager}?`,
|
||||
default: true,
|
||||
}).catch((error) => {
|
||||
spinner.stop();
|
||||
throw error;
|
||||
});
|
||||
|
||||
if (installDeps) {
|
||||
spinner.start(`Installing dependencies using ${packageManager}...`);
|
||||
switch (packageManager) {
|
||||
switch (packageManager ?? DEFAULT_CONFIG.packageManager) {
|
||||
case "npm":
|
||||
await $`npm install ${projectDir}`;
|
||||
break;
|
||||
@@ -96,6 +109,19 @@ export async function createProject(options: ProjectConfig) {
|
||||
` ${packageManager === "npm" ? "npm run" : packageManager} dev`,
|
||||
);
|
||||
} catch (error) {
|
||||
spinner.stop();
|
||||
|
||||
if (
|
||||
error instanceof Error &&
|
||||
(error.name === "ExitPromptError" ||
|
||||
error.message.includes("User force closed"))
|
||||
) {
|
||||
console.log("\n");
|
||||
logger.warn("Operation cancelled");
|
||||
process.exit(0);
|
||||
return;
|
||||
}
|
||||
|
||||
spinner.fail("Failed to create project");
|
||||
logger.error("Error during project creation:", error);
|
||||
process.exit(1);
|
||||
|
||||
@@ -97,19 +97,22 @@ export async function setupTurso(projectDir: string) {
|
||||
const isMac = platform === "darwin";
|
||||
const canInstallCLI = platform !== "win32";
|
||||
|
||||
if (!canInstallCLI) {
|
||||
await writeEnvFile(projectDir);
|
||||
displayManualSetupInstructions();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (!canInstallCLI) {
|
||||
await writeEnvFile(projectDir);
|
||||
displayManualSetupInstructions();
|
||||
return;
|
||||
}
|
||||
|
||||
const isCliInstalled = await isTursoInstalled();
|
||||
|
||||
if (!isCliInstalled) {
|
||||
const shouldInstall = await confirm({
|
||||
message: "Would you like to install Turso CLI?",
|
||||
default: true,
|
||||
}).catch((error) => {
|
||||
spinner.stop();
|
||||
throw error;
|
||||
});
|
||||
|
||||
if (!shouldInstall) {
|
||||
@@ -130,6 +133,9 @@ export async function setupTurso(projectDir: string) {
|
||||
let dbName = await input({
|
||||
message: `Enter database name (default: ${defaultDbName}):`,
|
||||
default: defaultDbName,
|
||||
}).catch((error) => {
|
||||
spinner.stop();
|
||||
throw error;
|
||||
});
|
||||
|
||||
let success = false;
|
||||
@@ -146,6 +152,9 @@ export async function setupTurso(projectDir: string) {
|
||||
dbName = await input({
|
||||
message: "Please enter a different database name:",
|
||||
default: `${dbName}-${Math.floor(Math.random() * 1000)}`,
|
||||
}).catch((error) => {
|
||||
spinner.stop();
|
||||
throw error;
|
||||
});
|
||||
} else {
|
||||
throw error;
|
||||
@@ -153,6 +162,19 @@ export async function setupTurso(projectDir: string) {
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
spinner.stop();
|
||||
|
||||
if (
|
||||
error instanceof Error &&
|
||||
(error.name === "ExitPromptError" ||
|
||||
error.message.includes("User force closed"))
|
||||
) {
|
||||
logger.warn("\nTurso setup cancelled");
|
||||
await writeEnvFile(projectDir);
|
||||
displayManualSetupInstructions();
|
||||
return;
|
||||
}
|
||||
|
||||
logger.error("Error during Turso setup:", error);
|
||||
await writeEnvFile(projectDir);
|
||||
displayManualSetupInstructions();
|
||||
|
||||
@@ -14,6 +14,12 @@ import { generateReproducibleCommand } from "./utils/generate-reproducible-comma
|
||||
import { getVersion } from "./utils/get-version";
|
||||
import { logger } from "./utils/logger";
|
||||
|
||||
process.on("SIGINT", () => {
|
||||
console.log("\n");
|
||||
logger.warn("Operation cancelled");
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
|
||||
async function gatherConfig(
|
||||
@@ -143,20 +149,19 @@ async function main() {
|
||||
logger.info("\n📋 To reproduce this setup, run:");
|
||||
logger.success(chalk.cyan(generateReproducibleCommand(config)));
|
||||
} catch (error) {
|
||||
if (error instanceof Error && error.message.includes("User force closed")) {
|
||||
if (
|
||||
error instanceof Error &&
|
||||
(error.name === "ExitPromptError" ||
|
||||
error.message.includes("User force closed"))
|
||||
) {
|
||||
console.log("\n");
|
||||
logger.warn("Operation cancelled by user");
|
||||
logger.warn("Operation cancelled");
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
logger.error("An unexpected error occurred:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
process.on("SIGINT", () => {
|
||||
console.log("\n");
|
||||
logger.warn("Operation cancelled by user");
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
main();
|
||||
|
||||
10802
package-lock.json
generated
Normal file
10802
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user