@@ -39,6 +39,14 @@ interface AngularOutput {
3939 style : 'decorator' | 'signal' ;
4040}
4141
42+ interface IndexChunk {
43+ filePath ?: string ;
44+ startLine ?: number ;
45+ endLine ?: number ;
46+ componentType ?: string ;
47+ layer ?: string ;
48+ }
49+
4250export class AngularAnalyzer implements FrameworkAnalyzer {
4351 readonly name = 'angular' ;
4452 readonly version = '1.0.0' ;
@@ -600,18 +608,28 @@ export class AngularAnalyzer implements FrameworkAnalyzer {
600608 }
601609
602610 // Check for signal-based input() (Angular v17.1+)
603- if ( member . value && member . key && 'name' in member . key ) {
604- const callee = member . value . type === 'CallExpression'
605- ? ( member . value . callee as { type : string ; name ?: string ; object ?: { name ?: string } ; property ?: { name ?: string } } )
606- : null ;
607- const valueStr = callee ?. name ?? callee ?. object ?. name ?? null ;
611+ if ( member . value && member . key && 'name' in member . key && member . value . type === 'CallExpression' ) {
612+ const callee = member . value . callee ;
613+ let valueStr : string | null = null ;
614+ let isRequired = false ;
615+
616+ if ( callee . type === 'Identifier' ) {
617+ valueStr = callee . name ;
618+ } else if ( callee . type === 'MemberExpression' ) {
619+ if ( callee . object . type === 'Identifier' ) {
620+ valueStr = callee . object . name ;
621+ }
622+ if ( callee . property . type === 'Identifier' ) {
623+ isRequired = callee . property . name === 'required' ;
624+ }
625+ }
608626
609627 if ( valueStr === 'input' ) {
610628 inputs . push ( {
611629 name : member . key . name ,
612630 type : 'InputSignal' ,
613631 style : 'signal' ,
614- required : callee ?. property ?. name === 'required'
632+ required : isRequired
615633 } ) ;
616634 }
617635 }
@@ -650,11 +668,9 @@ export class AngularAnalyzer implements FrameworkAnalyzer {
650668 }
651669
652670 // Check for signal-based output() (Angular v17.1+)
653- if ( member . value && member . key && 'name' in member . key ) {
654- const callee = member . value . type === 'CallExpression'
655- ? ( member . value . callee as { type : string ; name ?: string } )
656- : null ;
657- const valueStr = callee ?. name ?? null ;
671+ if ( member . value && member . key && 'name' in member . key && member . value . type === 'CallExpression' ) {
672+ const callee = member . value . callee ;
673+ const valueStr = callee . type === 'Identifier' ? callee . name : null ;
658674
659675 if ( valueStr === 'output' ) {
660676 outputs . push ( {
@@ -933,7 +949,9 @@ export class AngularAnalyzer implements FrameworkAnalyzer {
933949 }
934950
935951 const parsedObj = parsed as { chunks ?: unknown } ;
936- const chunks = parsedObj && Array . isArray ( parsedObj . chunks ) ? ( parsedObj . chunks as Array < { filePath ?: string ; startLine ?: number ; endLine ?: number ; componentType ?: string ; layer ?: string } > ) : null ;
952+ const chunks = parsedObj && Array . isArray ( parsedObj . chunks )
953+ ? ( parsedObj . chunks as IndexChunk [ ] )
954+ : null ;
937955 if ( Array . isArray ( chunks ) && chunks . length > 0 ) {
938956 console . error ( `Loading statistics from ${ indexPath } : ${ chunks . length } chunks` ) ;
939957
0 commit comments