11import crypto from 'node:crypto' ;
22import { toNamespace } from '@yeoman/namespace' ;
3- import type { BaseGenerator , Logger } from '@yeoman/types' ;
3+ import type { BaseGenerator , GeneratorFeatures , Logger } from '@yeoman/types' ;
44import createdLogger from 'debug' ;
55import type { InstallTask } from './package-manager.ts' ;
66
77const debug = createdLogger ( 'yeoman:environment:composed-store' ) ;
88
99type UniqueFeatureType = 'customCommitTask' | 'customInstallTask' ;
1010
11+ type EnvironmentGeneratorFeatures = GeneratorFeatures & Record < UniqueFeatureType , unknown > ;
12+
13+ const getFeaturesFromGenerator = ( generator : BaseGenerator ) : EnvironmentGeneratorFeatures => {
14+ return generator . features ?? ( generator as any ) . getFeatures ?.( ) ?? { } ;
15+ } ;
16+
1117export class ComposedStore {
1218 private readonly log ?;
1319 private readonly generators : Record < string , BaseGenerator > = { } ;
@@ -31,7 +37,7 @@ export class ComposedStore {
3137 }
3238
3339 addGenerator ( generator : BaseGenerator ) {
34- const { features = ( generator as any ) . getFeatures ?. ( ) ?? { } } = generator ;
40+ const features = getFeaturesFromGenerator ( generator ) ;
3541 let { uniqueBy } = features ;
3642 const { uniqueGlobally } = features ;
3743
@@ -73,8 +79,8 @@ export class ComposedStore {
7379 findFeature < T = unknown > ( featureName : string ) : Array < { generatorId : string ; feature : T } > {
7480 return Object . entries ( this . generators )
7581 . map ( ( [ generatorId , generator ] ) => {
76- const { features = ( generator as any ) . getFeatures ?. ( ) } = generator ;
77- const feature = features ?. [ featureName ] ;
82+ const features = getFeaturesFromGenerator ( generator ) as Record < string , unknown > ;
83+ const feature = features [ featureName ] ;
7884 return feature ? { generatorId, feature : feature as T } : undefined ;
7985 } )
8086 . filter ( Boolean ) as Array < { generatorId : string ; feature : T } > ;
0 commit comments