From eb78d1cc2aaab87b97c4200dd7a006303f4694ee Mon Sep 17 00:00:00 2001 From: Mike Brocchi Date: Fri, 8 Dec 2017 16:18:38 -0500 Subject: [PATCH] fix(@angular/cli): Allow schematics without a name option. Fixes #8793 --- packages/@angular/cli/commands/generate.ts | 18 ++++++++++++++---- .../build/build-app-shell-with-schematic.ts | 4 ++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/@angular/cli/commands/generate.ts b/packages/@angular/cli/commands/generate.ts index e9a4d79b3585..9318f9f94ad4 100644 --- a/packages/@angular/cli/commands/generate.ts +++ b/packages/@angular/cli/commands/generate.ts @@ -109,10 +109,16 @@ export default Command.extend({ schematicName, collectionName }) - .then((availableOptions: SchematicAvailableOptions) => { + .then((availableOptions: SchematicAvailableOptions[]) => { let anonymousOptions: string[] = []; + + const nameOption = availableOptions.filter(opt => opt.name === 'name')[0]; + if (nameOption) { + anonymousOptions = [...anonymousOptions, '']; + } + if (collectionName === '@schematics/angular' && schematicName === 'interface') { - anonymousOptions = ['']; + anonymousOptions = [...anonymousOptions, '']; } this.registerOptions({ @@ -127,8 +133,12 @@ export default Command.extend({ throw 'The `ng generate module` command requires a name to be specified.'; } - const entityName = rawArgs[1]; - commandOptions.name = stringUtils.dasherize(entityName.split(separatorRegEx).pop()); + let entityName = rawArgs[1]; + if (entityName) { + commandOptions.name = stringUtils.dasherize(entityName.split(separatorRegEx).pop()); + } else { + entityName = ''; + } const appConfig = getAppFromConfig(commandOptions.app); const dynamicPathOptions: DynamicPathOptions = { diff --git a/tests/e2e/tests/build/build-app-shell-with-schematic.ts b/tests/e2e/tests/build/build-app-shell-with-schematic.ts index db0c0e457070..41f799cd90e7 100644 --- a/tests/e2e/tests/build/build-app-shell-with-schematic.ts +++ b/tests/e2e/tests/build/build-app-shell-with-schematic.ts @@ -26,10 +26,10 @@ export default function () { return Promise.resolve() .then(() => expectToFail(() => { - return ng('generate', 'appShell', 'name', '--universal-app', 'universal'); + return ng('generate', 'appShell', '--universal-app', 'universal'); }) .then(() => appendToFile('src/app/app.component.html', '')) - .then(() => ng('generate', 'appShell', 'name', '--universal-app', 'universal')) + .then(() => ng('generate', 'appShell', '--universal-app', 'universal')) .then(() => updateJsonFile('package.json', packageJson => { const dependencies = packageJson['dependencies']; dependencies['@angular/platform-server'] = platformServerVersion;