Skip to content

refactor(compiler): emit instructions for foreign components#68786

Draft
leonsenft wants to merge 2 commits into
angular:mainfrom
leonsenft:foreign-component-instruction
Draft

refactor(compiler): emit instructions for foreign components#68786
leonsenft wants to merge 2 commits into
angular:mainfrom
leonsenft:foreign-component-instruction

Conversation

@leonsenft
Copy link
Copy Markdown
Contributor

This is based on #68674

When a template element matches an imported foreign component, the compiler omits standard element instructions (ɵɵelementStart/ɵɵelement) and instead generates a single ɵɵforeignComponent call. The call passes the exact foreign import wrapper expression defined in @Component.foreignImports along with an aggregated object literal containing all static attributes and property bindings.

The instruction itself is currently a no-op.

…s in templates

We extract the identifier name from the `foreignImports` expression in
`ComponentDecoratorHandler` and use a `SelectorlessMatcher` to match element
tags against these names. If an element matches both a regular Angular
directive and a foreign component, a conflict error is thrown.

In addition, we implement strict template semantic validation for these matched
foreign components within `TemplateSemanticsChecker`. Elements matched as
foreign components only support static attributes and property bindings. Any
event bindings, template references, or non-property input bindings (e.g.
class, style, or attribute bindings) trigger a semantic error diagnostic.

Finally, we skip standard DOM schema checks for foreign components to prevent spurious
validation errors since foreign components are not defined in standard HTML schemas.
@angular-robot angular-robot Bot added the area: compiler Issues related to `ngc`, Angular's template compiler label May 18, 2026
@ngbot ngbot Bot added this to the Backlog milestone May 18, 2026
@leonsenft leonsenft added the target: minor This PR is targeted for the next minor release label May 18, 2026
When a template element matches an imported foreign component, the compiler
omits standard element instructions (`ɵɵelementStart`/`ɵɵelement`) and instead
generates a single `ɵɵforeignComponent` call. The call passes the exact foreign
import wrapper expression defined in `@Component.foreignImports` along with an
aggregated object literal containing all static attributes and property
bindings.

The instruction itself is currently a no-op.
@leonsenft leonsenft force-pushed the foreign-component-instruction branch from ff41e4a to 2e0edbe Compare May 18, 2026 23:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: compiler Issues related to `ngc`, Angular's template compiler target: minor This PR is targeted for the next minor release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant