diff --git a/__e2e__/init.test.ts b/__e2e__/init.test.ts index d2324d918..fec60dbce 100644 --- a/__e2e__/init.test.ts +++ b/__e2e__/init.test.ts @@ -43,7 +43,7 @@ test('init fails if the directory already exists', () => { fs.mkdirSync(path.join(DIR, 'TestInit')); const {stderr} = runCLI(DIR, ['init', 'TestInit'], {expectedFailure: true}); - expect(stderr).toBe( + expect(stderr).toContain( 'error Cannot initialize new project because directory "TestInit" already exists.', ); }); diff --git a/jest/helpers.ts b/jest/helpers.ts index 3b46ef565..6f9ce945a 100644 --- a/jest/helpers.ts +++ b/jest/helpers.ts @@ -204,6 +204,8 @@ ${chalk.bold('args:')} ${(args || []).join(' ')} ${chalk.bold('stderr:')} ${result.stderr} ${chalk.bold('stdout:')} ${result.stdout} ${chalk.bold('code:')} ${result.code}`); + } else if (options.expectedFailure && result.code === 0) { + throw new Error("Expected command to fail, but it didn't"); } } diff --git a/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.ts b/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.ts index 5bdb5deb9..3c7d614b5 100644 --- a/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.ts +++ b/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.ts @@ -1,4 +1,6 @@ -export default class DirectoryAlreadyExistsError extends Error { +import {CLIError} from '@react-native-community/cli-tools'; + +export default class DirectoryAlreadyExistsError extends CLIError { constructor(directory: string) { super( `Cannot initialize new project because directory "${directory}" already exists.`, diff --git a/packages/cli/src/commands/init/errors/HelloWorldError.ts b/packages/cli/src/commands/init/errors/HelloWorldError.ts index 18f2eb389..38be0e28d 100644 --- a/packages/cli/src/commands/init/errors/HelloWorldError.ts +++ b/packages/cli/src/commands/init/errors/HelloWorldError.ts @@ -1,4 +1,6 @@ -export default class HelloWorldError extends Error { +import {CLIError} from '@react-native-community/cli-tools'; + +export default class HelloWorldError extends CLIError { constructor() { super( 'Project name shouldn\'t contain "HelloWorld" name in it, because it is CLI\'s default placeholder name.', diff --git a/packages/cli/src/commands/init/errors/InvalidNameError.ts b/packages/cli/src/commands/init/errors/InvalidNameError.ts index 08de3b6cb..a9747bffa 100644 --- a/packages/cli/src/commands/init/errors/InvalidNameError.ts +++ b/packages/cli/src/commands/init/errors/InvalidNameError.ts @@ -1,4 +1,6 @@ -export default class InvalidNameError extends Error { +import {CLIError} from '@react-native-community/cli-tools'; + +export default class InvalidNameError extends CLIError { constructor(name: string) { super( `"${name}" is not a valid name for a project. Please use a valid identifier name (alphanumeric).`, diff --git a/packages/cli/src/commands/init/errors/ReservedNameError.ts b/packages/cli/src/commands/init/errors/ReservedNameError.ts index f4e83a4c6..c0f3f634f 100644 --- a/packages/cli/src/commands/init/errors/ReservedNameError.ts +++ b/packages/cli/src/commands/init/errors/ReservedNameError.ts @@ -1,4 +1,6 @@ -export default class ReservedNameError extends Error { +import {CLIError} from '@react-native-community/cli-tools'; + +export default class ReservedNameError extends CLIError { constructor(name: string) { super( `Not a valid name for a project. Please do not use the reserved word "${name}".`, diff --git a/packages/cli/src/commands/init/errors/TemplateAndVersionError.ts b/packages/cli/src/commands/init/errors/TemplateAndVersionError.ts index 0f7179bf7..b89bf0370 100644 --- a/packages/cli/src/commands/init/errors/TemplateAndVersionError.ts +++ b/packages/cli/src/commands/init/errors/TemplateAndVersionError.ts @@ -1,4 +1,6 @@ -export default class TemplateAndVersionError extends Error { +import {CLIError} from '@react-native-community/cli-tools'; + +export default class TemplateAndVersionError extends CLIError { constructor(template: string) { super( `Passing both "version" and "template" is not supported. The template you select determines the version of react-native used. Please use only one of these options, for example: diff --git a/packages/cli/src/commands/init/init.ts b/packages/cli/src/commands/init/init.ts index 620525d13..aa03d58e4 100644 --- a/packages/cli/src/commands/init/init.ts +++ b/packages/cli/src/commands/init/init.ts @@ -207,12 +207,8 @@ export default (async function initialize( const version = options.version || DEFAULT_VERSION; const directoryName = path.relative(root, options.directory || projectName); - try { - await createProject(projectName, directoryName, version, options); + await createProject(projectName, directoryName, version, options); - const projectFolder = path.join(root, directoryName); - printRunInstructions(projectFolder, projectName); - } catch (e) { - logger.error(e.message); - } + const projectFolder = path.join(root, directoryName); + printRunInstructions(projectFolder, projectName); });