fix(compiler-cli): make field detection logic more robust

Currently the logic for detecting `Field` directives only works if it's imported from `@angular/forms/signals` which doesn't cover our own tests.

These changes make the check more robust.

(cherry picked from commit 0b6b78ca74)
This commit is contained in:
Kristiyan Kostadinov 2025-11-06 12:01:16 +01:00 committed by Andrew Kushnir
parent 5b55200edf
commit 71ab11ccf0

View file

@ -4095,8 +4095,25 @@ function getComponentTagName(node: TmplAstComponent): string {
}
function isFieldDirective(meta: TypeCheckableDirectiveMeta): boolean {
if (meta.name !== 'Field') {
return false;
}
// Fast path, relevant for all external users.
if (meta.ref.bestGuessOwningModule?.specifier === '@angular/forms/signals') {
return true;
}
// Slightly slower, but more accurate path.
return (
meta.name === 'Field' && meta.ref.bestGuessOwningModule?.specifier === '@angular/forms/signals'
ts.isClassDeclaration(meta.ref.node) &&
meta.ref.node.members.some(
(member) =>
ts.isPropertyDeclaration(member) &&
ts.isComputedPropertyName(member.name) &&
ts.isIdentifier(member.name.expression) &&
member.name.expression.text === 'ɵCONTROL',
)
);
}