mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
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:
parent
5b55200edf
commit
71ab11ccf0
1 changed files with 18 additions and 1 deletions
|
|
@ -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',
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue