diff --git a/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts b/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts index 78f506e4fcc..352e5b9fa7d 100644 --- a/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts +++ b/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts @@ -44,6 +44,7 @@ const TEMP_DIR = join( `remix-tests-${Math.random().toString(32).slice(2)}` ); +jest.setTimeout(30_000); beforeEach(() => { output = ""; console.log = mockLog; diff --git a/packages/remix-dev/__tests__/replace-remix-imports-test.ts b/packages/remix-dev/__tests__/replace-remix-imports-test.ts index e897c390284..a36927a3832 100644 --- a/packages/remix-dev/__tests__/replace-remix-imports-test.ts +++ b/packages/remix-dev/__tests__/replace-remix-imports-test.ts @@ -38,6 +38,7 @@ const TEMP_DIR = path.join( `remix-tests-${Math.random().toString(32).slice(2)}` ); +jest.setTimeout(30_000); beforeEach(async () => { output = ""; console.log = mockLog; diff --git a/packages/remix-dev/cli.ts b/packages/remix-dev/cli.ts index 792507ba363..dd42a4952c2 100644 --- a/packages/remix-dev/cli.ts +++ b/packages/remix-dev/cli.ts @@ -1,11 +1,13 @@ -import { cli } from "./index"; +import { cli, CliError } from "./index"; cli.run().then( () => { process.exit(0); }, - (error: Error) => { - console.error(error); + (error: unknown) => { + // for expected errors we only show the message (if any), no stack trace + if (error instanceof CliError) error = error.message; + if (error) console.error(error); process.exit(1); } ); diff --git a/packages/remix-dev/cli/error.ts b/packages/remix-dev/cli/error.ts new file mode 100644 index 00000000000..4e177a664e7 --- /dev/null +++ b/packages/remix-dev/cli/error.ts @@ -0,0 +1,2 @@ +/** An expected error, for aborting the CLI */ +export class CliError extends Error {} diff --git a/packages/remix-dev/cli/migrate/jscodeshift.ts b/packages/remix-dev/cli/migrate/jscodeshift.ts index 44e015913d9..143b51d5dc4 100644 --- a/packages/remix-dev/cli/migrate/jscodeshift.ts +++ b/packages/remix-dev/cli/migrate/jscodeshift.ts @@ -28,7 +28,7 @@ export const run = async ({ babel: true, // without this, `jscodeshift` will not be able to parse TS transforms dry, extensions: "tsx,ts,jsx,js", - failOnError: true, + failOnError: false, ignorePattern: ["**/node_modules/**", "**/.cache/**", "**/build/**"], parser: "tsx", print, diff --git a/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts b/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts index 8b89feed53b..2c78cdebf41 100644 --- a/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts +++ b/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts @@ -7,6 +7,7 @@ import type { MigrationFunction } from "../../types"; import { cleanupPackageJson } from "./cleanupPackageJson"; import { convertTSConfigs } from "./convertTSConfigs"; import { convertTSFilesToJS } from "./convertTSFilesToJS"; +import { CliError } from "../../../error"; const TRANSFORM_PATH = join(__dirname, "transform"); @@ -39,8 +40,7 @@ export const convertToJavaScript: MigrationFunction = async ( if (flags.interactive && !flags.debug) { console.log("👉 Try again with the `--debug` flag to see what failed."); } - - process.exit(1); + throw new CliError(); } // 4. Convert all .ts files to .js diff --git a/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/index.ts b/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/index.ts index 52950d74799..2a1369aba48 100644 --- a/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/index.ts +++ b/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/index.ts @@ -20,20 +20,19 @@ import { } from "./remixSetup"; import { resolveTransformOptions } from "./resolveTransformOptions"; import type { Options } from "./transform/options"; +import { CliError } from "../../../error"; const TRANSFORM_PATH = join(__dirname, "transform"); const getRemixVersionSpec = (remixDeps: Dependency[]): string => { let candidate = maxBy(remixDeps, (dep) => semver.minVersion(dep.versionSpec)); if (candidate === undefined) { - console.error("❌ I couldn't find versions for your Remix packages."); - process.exit(1); + throw new CliError("❌ I couldn't find versions for your Remix packages."); } let candidateMin = semver.minVersion(candidate.versionSpec); if (candidateMin === null) { - console.error("❌ I couldn't find versions for your Remix packages."); - process.exit(1); + throw new CliError("❌ I couldn't find versions for your Remix packages."); } if (semver.lt(candidateMin, "1.3.3")) { @@ -175,7 +174,7 @@ export const replaceRemixImports: MigrationFunction = async ( if (!flags.debug) { console.log("👉 Try again with the `--debug` flag to see what failed."); } - process.exit(1); + throw new CliError(); } console.log("✅ Your Remix imports look good!"); diff --git a/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/resolveTransformOptions.ts b/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/resolveTransformOptions.ts index 0fc91dcf5be..dfd088f917e 100644 --- a/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/resolveTransformOptions.ts +++ b/packages/remix-dev/cli/migrate/migrations/replace-remix-imports/resolveTransformOptions.ts @@ -2,6 +2,7 @@ import type { PackageJson } from "@npmcli/package-json"; import inquirer from "inquirer"; import * as colors from "../../../../colors"; +import { CliError } from "../../../error"; import { depsToEntries, isRemixPackage } from "./dependency"; import { because, detected } from "./messages"; import { remixSetup, remixSetupRuntime } from "./remixSetup"; @@ -109,7 +110,7 @@ const resolveAdapter = (packageJson: PackageJson): Adapter | undefined => { adapters.map((adapter) => ` - @remix-run/${adapter}`).join("\n") ); console.log("👉 Uninstall unused adapters and try again."); - process.exit(1); + throw new CliError(); } if (adapters.length === 1) { diff --git a/packages/remix-dev/index.ts b/packages/remix-dev/index.ts index 7a504273be1..7876a895d8b 100644 --- a/packages/remix-dev/index.ts +++ b/packages/remix-dev/index.ts @@ -4,5 +4,6 @@ export type { AppConfig } from "./config"; export * as cli from "./cli/index"; export { createApp } from "./cli/create"; +export { CliError } from "./cli/error"; export { getDependenciesToBundle } from "./compiler/dependencies";