From d25a6a0120b111f3ddbd701d5a67a8baefd2ca0e Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 23 Jun 2025 09:13:01 +0200 Subject: [PATCH] fix(compiler-cli): handle initializer APIs wrapped in type casts (#62203) Fixes that the logic recognizing initializer APIs didn't account for the expression being wrapped in an `as` expresion or in a parenthesized expression. This was already accounted for in the diagnostic so these changes align the behavior between them. Fixes #62197. PR Close #62203 --- .../directive/src/initializer_functions.ts | 4 +++ .../test/ngtsc/authoring_inputs_spec.ts | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/packages/compiler-cli/src/ngtsc/annotations/directive/src/initializer_functions.ts b/packages/compiler-cli/src/ngtsc/annotations/directive/src/initializer_functions.ts index 7d7df7e6873..defde3fef20 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/directive/src/initializer_functions.ts +++ b/packages/compiler-cli/src/ngtsc/annotations/directive/src/initializer_functions.ts @@ -82,6 +82,10 @@ export function tryParseInitializerApi { expect(diagnostics.length).toBe(0); }); }); + + it('should resolve input inside an `as` expression', () => { + env.write( + 'test.ts', + ` + import {Directive, input, Signal} from '@angular/core'; + + @Directive() + export class TestDir { + data = input('test') as Signal; + } + `, + ); + env.driveMain(); + const js = env.getContents('test.js'); + expect(js).toContain('inputs: { data: [1, "data"] }'); + }); + + it('should resolve input inside a parenthesized expression', () => { + env.write( + 'test.ts', + ` + import {Directive, input, Signal} from '@angular/core'; + + @Directive() + export class TestDir { + data = ((input('test'))); + } + `, + ); + env.driveMain(); + const js = env.getContents('test.js'); + expect(js).toContain('inputs: { data: [1, "data"] }'); + }); }); });