When `@angular/compiler` processes metadata and compiles a definition field, it might also choose to return statements that are associated with that definition, and should be included after the type being compiled. Currently, the linker ignores these statements, as there are none generated that are relevant in the linking operation. A challenge to supporting such associated statements is that the linker operates on "declare" expressions, and replaces those expressions with other expressions. It does not have the capability to append statements after the whole type. The linker actually faces this challenge with statements from the `ConstantPool` as well, and solves this problem by generating an IIFE expression that executes the statements and then returns the definition expression. Previously, an `EmitScope` processed the definition and converted it to an expression, as well as collected constant statements from a `ConstantPool`. A special `IifeEmitScope` implementation was used when emitting into a context where top-level constant statements couldn't be added at all, and uses the IIFE strategy in this case. This commit adds blanket support for associated statements to the linker using this IIFE strategy. The main `EmitScope` now uses the IIFE strategy to emit associated statements, and `IifeEmitScope` has been renamed to `LocalEmitScope`. Now, the `LocalEmitScope` represents constant statements as associated statements to the main `EmitScope` implementation, so they get included in the IIFE as well. Tests are adjusted/added to cover this new behavior. This is a refactoring commit because no live generated code is affected - there are no cases where associated statements are present in linked definitions today. PR Close #45024
Angular - The modern web developer's platform.
Angular is a development platform for building mobile and desktop web applications
using Typescript/JavaScript and other languages.
Contributing Guidelines
·
Submit an Issue
·
Blog
Documentation
Get started with Angular, learn the fundamentals and explore advanced topics on our documentation website.
Advanced
Development Setup
Prerequisites
- Install Node.js which includes Node Package Manager
Setting Up a Project
Install the Angular CLI globally:
npm install -g @angular/cli
Create workspace:
ng new [PROJECT NAME]
Run the application:
cd [PROJECT NAME]
ng serve
Angular is cross-platform, fast, scalable, has incredible tooling, and is loved by millions.
Quickstart
Ecosystem
Changelog
Learn about the latest improvements.
Upgrading
Check out our upgrade guide to find out the best way to upgrade your project.
Contributing
Contributing Guidelines
Read through our contributing guidelines to learn about our submission process, coding rules and more.
Want to Help?
Want to report a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues labeled as help wanted or good first issue.
Code of Conduct
Help us keep Angular open and inclusive. Please read and follow our Code of Conduct.
Community
Join the conversation and help the community.
Love Angular? Give our repo a star ⭐ ⬆️.
