Skip to content

Commit c9c781c

Browse files
alan-agius4dgp1130
authored andcommitted
feat(@angular-devkit/schematics): add parameter to listSchematicNames to allow returning hidden schematics.
The return value of `listSchematicNames` will include hidden schematics when is invoked with true as first parameter. By default, hidden schematics are not returned.
1 parent 4e472b9 commit c9c781c

File tree

7 files changed

+61
-22
lines changed

7 files changed

+61
-22
lines changed

‎goldens/public-api/angular_devkit/schematics/src/index.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ export interface Collection<CollectionMetadataT extends object, SchematicMetadat
159159
// (undocumented)
160160
readonly description: CollectionDescription<CollectionMetadataT>;
161161
// (undocumented)
162-
listSchematicNames(): string[];
162+
listSchematicNames(includeHidden?: boolean): string[];
163163
}
164164

165165
// @public
@@ -178,7 +178,7 @@ export class CollectionImpl<CollectionT extends object, SchematicT extends objec
178178
// (undocumented)
179179
get description(): CollectionDescription<CollectionT>;
180180
// (undocumented)
181-
listSchematicNames(): string[];
181+
listSchematicNames(includeHidden?: boolean): string[];
182182
// (undocumented)
183183
get name(): string;
184184
}
@@ -380,7 +380,7 @@ export interface EngineHost<CollectionMetadataT extends object, SchematicMetadat
380380
// (undocumented)
381381
hasTaskExecutor(name: string): boolean;
382382
// (undocumented)
383-
listSchematicNames(collection: CollectionDescription<CollectionMetadataT>): string[];
383+
listSchematicNames(collection: CollectionDescription<CollectionMetadataT>, includeHidden?: boolean): string[];
384384
// (undocumented)
385385
transformContext(context: TypedSchematicContext<CollectionMetadataT, SchematicMetadataT>): TypedSchematicContext<CollectionMetadataT, SchematicMetadataT> | void;
386386
// (undocumented)
@@ -755,7 +755,7 @@ export class SchematicEngine<CollectionT extends object, SchematicT extends obje
755755
// (undocumented)
756756
executePostTasks(): Observable<void>;
757757
// (undocumented)
758-
listSchematicNames(collection: Collection<CollectionT, SchematicT>): string[];
758+
listSchematicNames(collection: Collection<CollectionT, SchematicT>, includeHidden?: boolean): string[];
759759
// (undocumented)
760760
transformOptions<OptionT extends object, ResultT extends object>(schematic: Schematic<CollectionT, SchematicT>, options: OptionT, context?: TypedSchematicContext<CollectionT, SchematicT>): Observable<ResultT>;
761761
// (undocumented)

‎goldens/public-api/angular_devkit/schematics/tools/index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export abstract class FileSystemEngineHostBase implements FileSystemEngineHost_2
111111
// (undocumented)
112112
hasTaskExecutor(name: string): boolean;
113113
// (undocumented)
114-
listSchematicNames(collection: FileSystemCollectionDesc): string[];
114+
listSchematicNames(collection: FileSystemCollectionDesc, includeHidden?: boolean): string[];
115115
// (undocumented)
116116
registerContextTransform(t: ContextTransform): void;
117117
// (undocumented)

‎packages/angular_devkit/schematics/src/engine/engine.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ export class UnknownTaskDependencyException extends BaseException {
8383
}
8484

8585
export class CollectionImpl<CollectionT extends object, SchematicT extends object>
86-
implements Collection<CollectionT, SchematicT> {
86+
implements Collection<CollectionT, SchematicT>
87+
{
8788
constructor(
8889
private _description: CollectionDescription<CollectionT>,
8990
private _engine: SchematicEngine<CollectionT, SchematicT>,
@@ -101,8 +102,8 @@ export class CollectionImpl<CollectionT extends object, SchematicT extends objec
101102
return this._engine.createSchematic(name, this, allowPrivate);
102103
}
103104

104-
listSchematicNames(): string[] {
105-
return this._engine.listSchematicNames(this);
105+
listSchematicNames(includeHidden?: boolean): string[] {
106+
return this._engine.listSchematicNames(this, includeHidden);
106107
}
107108
}
108109

@@ -169,7 +170,8 @@ export class TaskScheduler {
169170
}
170171

171172
export class SchematicEngine<CollectionT extends object, SchematicT extends object>
172-
implements Engine<CollectionT, SchematicT> {
173+
implements Engine<CollectionT, SchematicT>
174+
{
173175
private _collectionCache = new Map<string, CollectionImpl<CollectionT, SchematicT>>();
174176
private _schematicCache = new WeakMap<
175177
Collection<CollectionT, SchematicT>,
@@ -333,12 +335,15 @@ export class SchematicEngine<CollectionT extends object, SchematicT extends obje
333335
return schematic;
334336
}
335337

336-
listSchematicNames(collection: Collection<CollectionT, SchematicT>): string[] {
337-
const names = this._host.listSchematicNames(collection.description);
338+
listSchematicNames(
339+
collection: Collection<CollectionT, SchematicT>,
340+
includeHidden?: boolean,
341+
): string[] {
342+
const names = this._host.listSchematicNames(collection.description, includeHidden);
338343

339344
if (collection.baseDescriptions) {
340345
for (const base of collection.baseDescriptions) {
341-
names.push(...this._host.listSchematicNames(base));
346+
names.push(...this._host.listSchematicNames(base, includeHidden));
342347
}
343348
}
344349

‎packages/angular_devkit/schematics/src/engine/interface.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,10 @@ export interface EngineHost<CollectionMetadataT extends object, SchematicMetadat
8383
name: string,
8484
requester?: CollectionDescription<CollectionMetadataT>,
8585
): CollectionDescription<CollectionMetadataT>;
86-
listSchematicNames(collection: CollectionDescription<CollectionMetadataT>): string[];
86+
listSchematicNames(
87+
collection: CollectionDescription<CollectionMetadataT>,
88+
includeHidden?: boolean,
89+
): string[];
8790

8891
createSchematicDescription(
8992
name: string,
@@ -162,7 +165,7 @@ export interface Collection<CollectionMetadataT extends object, SchematicMetadat
162165
name: string,
163166
allowPrivate?: boolean,
164167
): Schematic<CollectionMetadataT, SchematicMetadataT>;
165-
listSchematicNames(): string[];
168+
listSchematicNames(includeHidden?: boolean): string[];
166169
}
167170

168171
/**

‎packages/angular_devkit/schematics/tools/fallback-engine-host.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ export class FallbackEngineHost implements EngineHost<{}, {}> {
9090
context?: FallbackContext,
9191
): Observable<ResultT> {
9292
// eslint-disable-next-line @typescript-eslint/no-explicit-any
93-
return ((observableOf(options) as any).pipe(
93+
return (observableOf(options) as any).pipe(
9494
...this._hosts.map((host) =>
9595
mergeMap((opt: {}) => host.transformOptions(schematic, opt, context)),
9696
),
97-
) as {}) as Observable<ResultT>;
97+
) as {} as Observable<ResultT>;
9898
}
9999

100100
transformContext(context: FallbackContext): FallbackContext {
@@ -107,11 +107,16 @@ export class FallbackEngineHost implements EngineHost<{}, {}> {
107107
return result;
108108
}
109109

110-
listSchematicNames(collection: CollectionDescription<FallbackCollectionDescription>): string[] {
110+
listSchematicNames(
111+
collection: CollectionDescription<FallbackCollectionDescription>,
112+
includeHidden?: boolean,
113+
): string[] {
111114
const allNames = new Set<string>();
112115
this._hosts.forEach((host) => {
113116
try {
114-
host.listSchematicNames(collection.description).forEach((name) => allNames.add(name));
117+
host
118+
.listSchematicNames(collection.description, includeHidden)
119+
.forEach((name) => allNames.add(name));
115120
} catch (_) {}
116121
});
117122

‎packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,12 @@ export abstract class FileSystemEngineHostBase implements FileSystemEngineHost {
118118
private _contextTransforms: ContextTransform[] = [];
119119
private _taskFactories = new Map<string, () => Observable<TaskExecutor>>();
120120

121-
listSchematicNames(collection: FileSystemCollectionDesc) {
121+
listSchematicNames(collection: FileSystemCollectionDesc, includeHidden?: boolean) {
122122
const schematics: string[] = [];
123123
for (const key of Object.keys(collection.schematics)) {
124124
const schematic = collection.schematics[key];
125125

126-
if (schematic.hidden || schematic.private) {
126+
if ((schematic.hidden && !includeHidden) || schematic.private) {
127127
continue;
128128
}
129129

‎packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts

+28-2
Original file line numberDiff line numberDiff line change
@@ -245,12 +245,38 @@ describe('FileSystemEngineHost', () => {
245245
expect(() => engine.createCollection('invalid-aliases-2')).toThrow();
246246
});
247247

248-
it('does not list hidden schematics', () => {
248+
it(`does not list hidden schematics when 'includeHidden' is not specified`, () => {
249249
const engineHost = new FileSystemEngineHost(root);
250250
const engine = new SchematicEngine(engineHost);
251251
const collection = engine.createCollection('hidden-schematics');
252252

253-
expect(collection.listSchematicNames()).toEqual(['schematic-1', 'schematic-2']);
253+
expect(collection.listSchematicNames(/** includeHidden */)).toEqual([
254+
'schematic-1',
255+
'schematic-2',
256+
]);
257+
});
258+
259+
it(`does not list hidden schematics when 'includeHidden' is false`, () => {
260+
const engineHost = new FileSystemEngineHost(root);
261+
const engine = new SchematicEngine(engineHost);
262+
const collection = engine.createCollection('hidden-schematics');
263+
264+
expect(collection.listSchematicNames(false /** includeHidden */)).toEqual([
265+
'schematic-1',
266+
'schematic-2',
267+
]);
268+
});
269+
270+
it(`does list hidden schematics when 'includeHidden' is true`, () => {
271+
const engineHost = new FileSystemEngineHost(root);
272+
const engine = new SchematicEngine(engineHost);
273+
const collection = engine.createCollection('hidden-schematics');
274+
275+
expect(collection.listSchematicNames(true /** includeHidden */)).toEqual([
276+
'hidden-schematic',
277+
'schematic-1',
278+
'schematic-2',
279+
]);
254280
});
255281

256282
it('does not list private schematics', () => {

0 commit comments

Comments
 (0)