fix(@angular/cli): handle extended schematics when retrieving aliases · angular/angular-cli@b5737ef
@@ -7,6 +7,11 @@
77 */
8899import { strings } from '@angular-devkit/core';
10+import { Collection } from '@angular-devkit/schematics';
11+import {
12+FileSystemCollectionDescription,
13+FileSystemSchematicDescription,
14+} from '@angular-devkit/schematics/tools';
1015import { Argv } from 'yargs';
1116import {
1217CommandModuleError,
@@ -69,7 +74,6 @@ export class GenerateCommandModule
6974const {
7075'x-deprecated': xDeprecated,
7176 description = schematicDescription,
72- aliases = schematicAliases,
7377 hidden = schematicHidden,
7478} = schemaJson;
7579const options = await this.getSchematicOptions(collection, schematicName, workflow);
@@ -79,8 +83,8 @@ export class GenerateCommandModule
7983// When 'describe' is set to false, it results in a hidden command.
8084describe: hidden === true ? false : typeof description === 'string' ? description : '',
8185deprecated: xDeprecated === true || typeof xDeprecated === 'string' ? xDeprecated : false,
82-aliases: Array.isArray(aliases)
83- ? await this.generateCommandAliasesStrings(collectionName, aliases as string[])
86+aliases: Array.isArray(schematicAliases)
87+ ? await this.generateCommandAliasesStrings(collectionName, schematicAliases)
8488 : undefined,
8589builder: (localYargs) => this.addSchemaOptionsToCommand(localYargs, options).strict(),
8690handler: (options) =>
@@ -205,13 +209,37 @@ export class GenerateCommandModule
205209// If a schematic with this same name is already registered skip.
206210if (!seenNames.has(schematicName)) {
207211seenNames.add(schematicName);
208-const { aliases } = collection.description.schematics[schematicName];
209-const schematicAliases = aliases && new Set(aliases);
210212211-yield { schematicName, schematicAliases, collectionName };
213+yield {
214+ schematicName,
215+ collectionName,
216+schematicAliases: this.listSchematicAliases(collection, schematicName),
217+};
218+}
219+}
220+}
221+}
222+223+private listSchematicAliases(
224+collection: Collection<FileSystemCollectionDescription, FileSystemSchematicDescription>,
225+schematicName: string,
226+): Set<string> | undefined {
227+const description = collection.description.schematics[schematicName];
228+if (description) {
229+return description.aliases && new Set(description.aliases);
230+}
231+232+// Extended collections
233+if (collection.baseDescriptions) {
234+for (const base of collection.baseDescriptions) {
235+const description = base.schematics[schematicName];
236+if (description) {
237+return description.aliases && new Set(description.aliases);
212238}
213239}
214240}
241+242+return undefined;
215243}
216244217245/**