From 08103c44a06251badabcf072e129107aabf04ae9 Mon Sep 17 00:00:00 2001 From: Kacper Wiszczuk Date: Tue, 16 Jul 2019 21:48:32 +0200 Subject: [PATCH 1/3] fix: Fix name duplication in init --- packages/cli/src/commands/init/__tests__/validate.test.js | 4 ++++ packages/cli/src/commands/init/errors/ReservedNameError.js | 2 +- packages/cli/src/commands/init/validate.js | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/init/__tests__/validate.test.js b/packages/cli/src/commands/init/__tests__/validate.test.js index fda90efcf..453ccd032 100644 --- a/packages/cli/src/commands/init/__tests__/validate.test.js +++ b/packages/cli/src/commands/init/__tests__/validate.test.js @@ -23,6 +23,10 @@ test.each([ name: 'react', error: ReservedNameError, }, + { + name: 'helloworld', + error: ReservedNameError, + }, ])("'%s' is invalid name", ({name, error}: {name: string, error: Error}) => { expect(() => validateProjectName(name)).toThrowError(error); }); diff --git a/packages/cli/src/commands/init/errors/ReservedNameError.js b/packages/cli/src/commands/init/errors/ReservedNameError.js index 6c747caac..b54d96593 100644 --- a/packages/cli/src/commands/init/errors/ReservedNameError.js +++ b/packages/cli/src/commands/init/errors/ReservedNameError.js @@ -2,7 +2,7 @@ export default class ReservedNameError extends Error { constructor() { super( - 'Not a valid name for a project. Please do not use the reserved word "React".', + 'Not a valid name for a project. Please do not use the reserved words "React" or "HelloWorld".', ); } } diff --git a/packages/cli/src/commands/init/validate.js b/packages/cli/src/commands/init/validate.js index 9166c4026..d1c664a40 100644 --- a/packages/cli/src/commands/init/validate.js +++ b/packages/cli/src/commands/init/validate.js @@ -9,7 +9,7 @@ export function validateProjectName(name: string) { throw new InvalidNameError(name); } - if (name === 'React' || name === 'react') { + if (name.match(/helloworld|react/gi)) { throw new ReservedNameError(); } } From 3519e2cb4ff9ac9dbf7cec8a7ff1b6d3652fd029 Mon Sep 17 00:00:00 2001 From: Kacper Wiszczuk Date: Tue, 16 Jul 2019 22:06:53 +0200 Subject: [PATCH 2/3] Fix validation --- packages/cli/src/commands/init/__tests__/validate.test.js | 5 +++-- packages/cli/src/commands/init/errors/HelloWorldError.js | 8 ++++++++ .../cli/src/commands/init/errors/ReservedNameError.js | 2 +- packages/cli/src/commands/init/validate.js | 7 ++++++- 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 packages/cli/src/commands/init/errors/HelloWorldError.js diff --git a/packages/cli/src/commands/init/__tests__/validate.test.js b/packages/cli/src/commands/init/__tests__/validate.test.js index 453ccd032..e7e1745ab 100644 --- a/packages/cli/src/commands/init/__tests__/validate.test.js +++ b/packages/cli/src/commands/init/__tests__/validate.test.js @@ -2,6 +2,7 @@ import {validateProjectName} from '../validate'; import InvalidNameError from '../errors/InvalidNameError'; import ReservedNameError from '../errors/ReservedNameError'; +import HelloWorldError from '../errors/HelloWorldError'; test.each(['projectName', 'ProjectName', 'project_name'])( "'%s' project name should be valid", @@ -24,8 +25,8 @@ test.each([ error: ReservedNameError, }, { - name: 'helloworld', - error: ReservedNameError, + name: 'helloworld_test', + error: HelloWorldError, }, ])("'%s' is invalid name", ({name, error}: {name: string, error: Error}) => { expect(() => validateProjectName(name)).toThrowError(error); diff --git a/packages/cli/src/commands/init/errors/HelloWorldError.js b/packages/cli/src/commands/init/errors/HelloWorldError.js new file mode 100644 index 000000000..5137d15d4 --- /dev/null +++ b/packages/cli/src/commands/init/errors/HelloWorldError.js @@ -0,0 +1,8 @@ +// @flow +export default class HelloWorldError extends Error { + constructor() { + super( + 'Project name shouldn\'t contain "HelloWorld" name in it, because it is CLI\'s default placeholder name. You can find more information https://github.com/react-native-community/cli/issues/441', + ); + } +} diff --git a/packages/cli/src/commands/init/errors/ReservedNameError.js b/packages/cli/src/commands/init/errors/ReservedNameError.js index b54d96593..3520b8407 100644 --- a/packages/cli/src/commands/init/errors/ReservedNameError.js +++ b/packages/cli/src/commands/init/errors/ReservedNameError.js @@ -2,7 +2,7 @@ export default class ReservedNameError extends Error { constructor() { super( - 'Not a valid name for a project. Please do not use the reserved words "React" or "HelloWorld".', + 'Not a valid name for a project. Please do not use the reserved words "React".', ); } } diff --git a/packages/cli/src/commands/init/validate.js b/packages/cli/src/commands/init/validate.js index d1c664a40..bf707b89f 100644 --- a/packages/cli/src/commands/init/validate.js +++ b/packages/cli/src/commands/init/validate.js @@ -1,6 +1,7 @@ // @flow import InvalidNameError from './errors/InvalidNameError'; import ReservedNameError from './errors/ReservedNameError'; +import HelloWorldError from './errors/HelloWorldError'; const NAME_REGEX = /^[$A-Z_][0-9A-Z_$]*$/i; @@ -9,7 +10,11 @@ export function validateProjectName(name: string) { throw new InvalidNameError(name); } - if (name.match(/helloworld|react/gi)) { + if (name === 'React' || name === 'react') { throw new ReservedNameError(); } + + if (name.match(/helloworld/gi)) { + throw new HelloWorldError(); + } } From 901597d0590de2dac2fdad594277371c24b9ef74 Mon Sep 17 00:00:00 2001 From: Kacper Wiszczuk Date: Tue, 16 Jul 2019 22:25:31 +0200 Subject: [PATCH 3/3] Impl suggestions --- packages/cli/src/commands/init/errors/HelloWorldError.js | 2 +- packages/cli/src/commands/init/errors/ReservedNameError.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/init/errors/HelloWorldError.js b/packages/cli/src/commands/init/errors/HelloWorldError.js index 5137d15d4..ae515b696 100644 --- a/packages/cli/src/commands/init/errors/HelloWorldError.js +++ b/packages/cli/src/commands/init/errors/HelloWorldError.js @@ -2,7 +2,7 @@ export default class HelloWorldError extends Error { constructor() { super( - 'Project name shouldn\'t contain "HelloWorld" name in it, because it is CLI\'s default placeholder name. You can find more information https://github.com/react-native-community/cli/issues/441', + '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/ReservedNameError.js b/packages/cli/src/commands/init/errors/ReservedNameError.js index 3520b8407..6c747caac 100644 --- a/packages/cli/src/commands/init/errors/ReservedNameError.js +++ b/packages/cli/src/commands/init/errors/ReservedNameError.js @@ -2,7 +2,7 @@ export default class ReservedNameError extends Error { constructor() { super( - 'Not a valid name for a project. Please do not use the reserved words "React".', + 'Not a valid name for a project. Please do not use the reserved word "React".', ); } }