28282 Commits

Author SHA1 Message Date
Paul Gschwendtner 6c02c61399 ci: remove circleci required status from angular robot
The build job moved from CircleCI to GitHub actions, so we currently
mark all PRs as pending unnnecessarily.

In the future, this will be replaced by the unified status check. It's
set up here but was disabled at some point. Needs more investigation.
2023-10-11 13:19:51 +02:00
Jeremy Elbourn fcc000e803 build: add targets for api doc generation (#52034)
This adds `generate_api_docs` targets to all of the packages for which we publish api reference docs. One known issue here is that any type information that comes from another package (e.g. router depending on core) currently resolve to `any` because the other sources are not available in the program. This can be tackled in a follow-up commit.

This commit also updates the install patch for `@angular/build-tools` to use the local version of compiler-cli.

PR Close #52034
2023-10-10 16:18:50 -07:00
Matthieu Riegler ddd7212ee2 fix(forms): reset() call with null values on nested group (#48830)
Non typed forms allow to pass null to nested groups when calling `formGroup.reset()`, this commit prevent an undefined access.

fixes #20509

PR Close #48830
2023-10-10 15:34:31 -07:00
Payam Valadkhan 59ba2a6e9f feat(bazel): make forbidOrphanComponents option configurable (#52061)
Now users can configure the option `forbidOrphanComponents` in the tsconfig's angularCompilerOptions part.

PR Close #52061
2023-10-10 15:30:26 -07:00
Payam Valadkhan 1a4aee7e49 feat(core): show runtime error for orphan component rendering (#52061)
A runtime error will be thrown if a non-standalone component is being rendered without its NgModule loaded in the browser. This error is thrown only in dev mode and only if the Angular option `forbidOrphanComponents` is set to true. The error contains useful info to find the orphan component in the source code.

PR Close #52061
2023-10-10 15:30:26 -07:00
Payam Valadkhan 3047bdd36c refactor(core): add an API to deps tracker to check if a component is orphan (#52061)
A new method `isOrphanComponent` is added to the deps tracker API to check if the NgModule declaring this component, if exists, is loaded into the browser.

PR Close #52061
2023-10-10 15:30:26 -07:00
Payam Valadkhan 5fba8902d8 refactor(core): add forbidOrphanRendering option to class debug info (#52061)
The flag `forbidOrphanRendering` is only set for non-standalone components, and indicates that the dev mode runtime should through error if the component is rendered without its ngModule loaded in the browser. This runtime error can help with further debugging.

PR Close #52061
2023-10-10 15:30:26 -07:00
Payam Valadkhan 1eefa0c9c4 refactor(compiler-cli): include forbidOrphanComponents option in component's debug info (#52061)
A new flag added to the component's debug info to determine whether to throw runtime error (in dev mode) if component is being rendered without its NgModule. This flag is only set for non-standalone components.

PR Close #52061
2023-10-10 15:30:26 -07:00
Payam Valadkhan e8201a5962 refactor(compiler-cli): add a compiler option to enable checking for orphan component (#52061)
Orphan component is an anti-pattern in Angular where a component is rendered while the NgModule declaring it is not installed. It is not easy to capture this scenario, specially in compile time. But it is possible to capture a special case in runtime where the component is being rendered without its NgModule even loaded into the browser. This change adds a flag in cli compiler option to enable such checking, and throwing a runtime exception if it happens. Note that such check is only done in dev mode.

Currently the check requires some generated code that is behind ngJitMode flag (i.e., call to ɵɵsetNgModuleScope), and the new flag can be set only if JIT mode is enabled (i.e., supportJitMode=true) otherwise an error will be thrown.

The orphan component is a main blocker for rolling out local compilation in g3. This option is needed for identifying and isolating such cases.

PR Close #52061
2023-10-10 15:30:26 -07:00
Sylvain DEDIEU da056a1fe2 fix(common): add missing types field for @angular/common/locales of exports in package.json (#52080)
Add a types entry in the packages/common/package.json exports "./locales/*" section

Fixes #52011

PR Close #52080
2023-10-10 14:33:44 -07:00
Angular Robot 11588a1a07 build: update dependency @types/jasmine to v5 (#52060)
See associated pull request for more information.

PR Close #52060
2023-10-10 14:08:02 -07:00
Kristiyan Kostadinov 5a969e06b7 build: remove Windows CI check (#52140)
Based on recent discussions, these changes remove the Windows CI check because it has been too flaky for too long. Furthermore, we've concluded that the simulated file system in the compiler tests already catches the same set of bugs as running the tests on a real Windows system.

PR Close #52140
2023-10-10 14:07:03 -07:00
Alex Castle 3c4be44f7a docs(core): fix missing text in oversized image warning message (#52147)
add text to fix warning message that trails ends mid-sentence

PR Close #52147
2023-10-10 14:01:23 -07:00
Paul Gschwendtner 496ee47b3d docs: add error guide for assertNotInReactiveContext. (#52138)
Adds an error guide for `assertNotInReactiveContext` and provides some
more context/ and guidance for fixing common errors.

PR Close #52138
2023-10-10 13:56:56 -07:00
Paul Gschwendtner df58c0b714 fix(core): disallow afterRender in reactive contexts (#52138)
Using `afterRender` schedules long-living lifecycle hooks. Scheduling
such hooks inside reactive contexts could mean that many of the
same hooks would be scheduled, quickly piling up every time a
consumed signal changes. This is likely unintended and could degrade
application performance or result in unexpected behavior.

Additionally, scheduling `afterRender` inside a `computed` is considered
a side effect. Computed expressions are expected to be pure/ i.e. free
of side effects. We can avoid this caveat by detecting the reactive
context in development.

PR Close #52138
2023-10-10 13:56:56 -07:00
Paul Gschwendtner 5d61221ed7 fix(core): disallow using effect inside reactive contexts (#52138)
Using an `effect` inside a `computed` is a clear violation of
the conceptual idea of computed's being pure/ side-effect free.
Additionally, scheduling new effects from an existing actively
running effect is likely unintended as this could degrage application
performance or result in unintentional behaviors. Multiple long-living
effects would be scheduled every time the effect expressions runs.

For these reasons, we are explicitly preventing this pitfal, by
disallowing using `effect` inside reactive contexts.

PR Close #52138
2023-10-10 13:56:56 -07:00
Jeremy Elbourn a49ee46dae docs(docs-infra): add support for block syntax to dgeni (#52123)
This adds the new block syntax to dgeni docs pipeline, mainly copying
the way that elements (`<ng-content>` etc.) work. Actual doc content is
just a placeholder for this PR.

PR Close #52123
2023-10-10 13:55:04 -07:00
Matthieu Riegler 965ce5a8c5 feat(migrations): Schematics for TransferState, StateKey and makeStateKey migration. (#49594)
These 3 classes have been moved from platform-browser to core by #49563

PR Close #49594
2023-10-10 13:12:36 -07:00
AleksanderBodurri 8b91864d02 test(devtools): create unit tests for injector tree transformation functions (#51719)
Creates set of unit tests for each function in the data transformation pipeline that enables injector metadata to be visualized as d3 graphs.

PR Close #51719
2023-10-10 13:10:50 -07:00
AleksanderBodurri 8bdbbf4510 feat(devtools): Implement initial DI debugging features in devtools (#51719)
This commit introduces 2 new features into DevTools.

Directive level dependency inspection: Users can now view which dependencies their directives have injected in the property viewer tab. This view displays not only the dependency but also the resolution path that was used to service the injection.

Injector graph inspection: Users can now view a visualization of the element and environment hierarchies in their application. These trees are displayed separately but on the same page in the Injector Tree tab. User can click on individual injectors to view a list of all the providers configured in that injector, as well as highlight the resolution path from that injector to the root (with the corresponding environment injector connection highlighted as well).

PR Close #51719
2023-10-10 13:10:50 -07:00
AleksanderBodurri 50ad074505 fix(core): framework debug APIs getDependenciesForTokenInInjector and getInjectorMetadata (#51719)
Previously getDependenciesForTokenInInjector was unable to determine which node on a view serviced a specific injection. Now it is able to filter out those injections that did not come from the specific node for the NodeInjector passed into it.

Previously getInjectorMetadata was incorrectly looking up DOM elements for some directives (for example NgForOf) where an LContainer was created. Now the LContainer case is handled, and the non LContainer case uses `getFirstNativeNode` to more accurately get the element we want.

PR Close #51719
2023-10-10 13:10:50 -07:00
Jeremy Elbourn 1934524a0c feat(compiler): add docs extraction for type aliases (#52118)
This commit adds support for extracting type alises. It currently
extracts the raw written type from the source without performing any
resolution, such as for resolving `typeof` queries, as current Angular
public APIs do not rely on this.

PR Close #52118
2023-10-10 12:40:10 -07:00
Matthieu Riegler 75d610d420 fix(platform-browser): set animation properties when using async animations. (#52087)
Animations properties set on the default renderer weren't set on the animation renderer once it was loaded. This commit fixes this.

PR Close #52087
2023-10-10 11:59:13 -07:00
Matthieu Riegler 5b375d106f fix(platform-browser): Fire Animations events when using async animations. (#52087)
Animations events registered against the default renderer weren't registered against the animation renderer once it was loaded. This commit fixes this.

fixes #52076

PR Close #52087
2023-10-10 11:59:13 -07:00
Angular Robot 28fc02003c docs: update Angular CLI help [main] (#52144)
Updated Angular CLI help contents.

PR Close #52144
2023-10-10 11:56:34 -07:00
Matthieu Riegler 8eef694def feat(core): Provide a diagnostic for missing Signal invocation in template interpolation. (#49660)
To improve DX for beginners, this commit adds an extended diagnostic for Signals in template interpolations.

PR Close #49660
2023-10-10 11:55:13 -07:00
Matthieu Riegler a645ceca94 refactor(service-worker): Remove deprecated activated & available observables. (#49498)
`activated`and `available` were deprecated by #43535 in v13.

PR Close #49498
2023-10-10 11:54:07 -07:00
Kristiyan Kostadinov 21b085d221 refactor(compiler): capture unknown blocks inside switch (#52136)
Updates the Ivy AST to allow for `@switch` blocks to capture nested blocks that are not `@case` and `@default`. These blocks will be used for autocompletion in the language service.

These changes also update the logic for `@switch` and `@if` blocks so that they produce an AST node even if there are errors. The errors will still be surfaced to users, but producing AST nodes allows us to recover parts of the expression later if necessary.

PR Close #52136
2023-10-10 11:34:10 -07:00
Jessica Janiuk 50275e58b8 feat(core): Add schematic to migrate control flow syntax (#52035)
This adds the migration to run to migrate to the block control flow syntax. It includes ngIf, ngFor, and ngSwitch.

PR Close #52035
2023-10-10 11:33:00 -07:00
Andrew Kushnir 9bf64954a9 ci: update expected score for one of the AIO tests (#52116)
This commit updates the score for one of the AIO tests. The problem is pre-existing (there is nothing in this PR that might cause the problem) and this change just brings the CI back to the "green" state.

PR Close #52116
2023-10-10 11:23:44 -07:00
mgechev 4dffbeff35 docs: remove the developer survey 2023 banner (#52116)
PR Close #52116
2023-10-10 11:23:44 -07:00
Thabo add0bd364c docs: correct wording for Directive's decorator host property key description (#51977)
PR Close #51977
2023-10-10 11:22:18 -07:00
Kristiyan Kostadinov 7dbd47fb30 fix(compiler): allow newlines in track and let expressions (#52137)
Fixes that the template parser didn't allow for newlines in the `track` and `let` expressions of `@for` blocks.

Fixes #52132.

PR Close #52137
2023-10-10 11:19:41 -07:00
Phalgun Vaddepalli 644f3f2241 docs(core): add an example of configuring APP_INITIALIZER token in context of standalone components (#52084)
docs(core): fix formatting

PR Close #52084
2023-10-10 11:18:37 -07:00
Alex Rickabaugh 5411864c2e fix(core): adjust toSignal types to handle more common cases (#51991)
This commit cleans up the signatures of `toSignal` to better handle the
types of situations that it might be used in, and produce better type
inference results.

Fixes #50687
Fixes #50591

Co-authored-by: Andrew Scott <atscott@google.com>

PR Close #51991
2023-10-10 11:17:30 -07:00
Andrew Scott 1da28f4825 feat(router): Add callback to execute when a view transition is created (#52002)
This commit adds the ability to provide a function that will get called
immediately after the view transition is created. This will allow
developers to do things like add/remove classes from the DOM when the
transition animation is finished, skip the transition based on
application conditions, etc. Having access to the transition unlocks
just about every example outlined in https://developer.chrome.com/docs/web-platform/view-transitions.

Note that the timing of the `updateCallback` execution is in the spec as
being called asyncronously (https://drafts.csswg.org/css-view-transitions-1/#callbackdef-updatecallback).
This means the `onViewTransitionCreated` callback is guaranteed to
execute before the update callback which in turn means it is guaranteed
to execute before the view transition `ready`/animation. As a result, it
is safe/effictive to add classes to the document in the
`onViewTransitionCreated` function in order to control animations of
that transition and then remove those classes in the transition's `finished`
`Promise`. The animation also doesn't start until the `Promise` returned
by `updateCallback` resolves, so this would also guarantee that the
animation starts asynchronously.

resolves #51827

PR Close #52002
2023-10-10 11:16:22 -07:00
Angular Robot 5a4ccdfa7b build: update cross-repo angular dependencies (#52133)
See associated pull request for more information.

PR Close #52133
2023-10-10 10:58:45 -07:00
Jessica Janiuk d487014785 fix(core): Remove no longer needed build rule related to removed migration (#52143)
This removes the esbuild rule for the migration that was removed.

PR Close #52143
2023-10-10 10:40:39 -07:00
Dylan Hunn 7c052bb6ef feat(language-service): Support autocompletion for blocks (#52121)
This commit introduces basic autocompletion support for the new block keywords. After typing `@`, the language service suggests the various block names.

PR Close #52121
2023-10-10 10:29:23 -07:00
Alex Rickabaugh 4da08dc2ef fix(core): remove unnecessary migration (#52141)
PR #49672 added a g3-flavored migration for compiler option removal, but g3
doesn't use those options at all. So this migration is unnecessary and we
can remove it.

PR Close #52141
2023-10-10 10:07:53 -07:00
Kristiyan Kostadinov d5dad3eb4c fix(core): viewport trigger deregistering callbacks multiple times (#52115)
Adds a check to the viewport cleanup function to prevent it from re-processing elements that have been fully cleaned up, because it can lead to the `IntersectionObserver` being destroyed even though there are still pending triggers. This can happen, because we have cleanup callbacks both for the block is loaded, but also when the placeholder view is destroyed.

Fixes #52113.

PR Close #52115
2023-10-10 09:51:20 -07:00
Kristiyan Kostadinov 861ce3a7c5 fix(compiler): pipes using DI not working in blocks (#52112)
Fixes that the new block syntax was generating instructions in the wrong order which meant that pipes were being declared too early. This meant that if the block is first in the template, any pipes used in it won't be able to inject things like `ChangeDetectorRef`.

These changes update the compiler and add a bunch of tests to ensure that pipes work as expected.

Fixes #52102.

PR Close #52112
2023-10-10 09:48:37 -07:00
Kristiyan Kostadinov ac0d5dcfd6 fix(compiler): narrow the type of expressions in event listeners inside switch blocks (#52069)
Since expressions in event listener are added inside of a callback, type narrowing won't apply to them anymore. These changes add the logic to create a guard expression that will re-narrow the expression in the callback.

Fixes #52052.

PR Close #52069
2023-10-10 09:47:47 -07:00
Kristiyan Kostadinov 16ff08ec70 fix(compiler): narrow the type of expressions in event listeners inside if blocks (#52069)
Since expressions in event listener are added inside of a callback, type narrowing won't apply to them anymore. These changes add the logic to create a guard expression that will re-narrow the expression in the callback.

Fixes #52052.

PR Close #52069
2023-10-10 09:47:47 -07:00
Kristiyan Kostadinov 503e67dca2 refactor(compiler): clean up compatibility code for old TS versions (#52099)
Cleans up some code that was left in place to support old versions of TypeScript.

PR Close #52099
2023-10-10 09:37:38 -07:00
Andrew Scott 37df395be0 fix(router): children of routes with loadComponent should not inherit parent data by default (#52114)
When a route has loadComponent, its children should not inherit params and
data unless paramsInheritanceStrategy is 'always'.

fixes #52106

BREAKING CHANGE: Routes with `loadComponent` would incorrectly cause
child routes to inherit their data by default. The default
`paramsInheritanceStrategy` is `emptyOnly`. If parent data should be
inherited in child routes, this should be manually set to `always`.

PR Close #52114
2023-10-10 09:36:37 -07:00
Matthieu Riegler f0da7c2e44 feat(migrations): schematic to remove deprecated CompilerOptions properties (#49672)
`useJit` and `missingTranslation` have been deprecated since v13 and  are unused in Ivy. They can be safely removed.

PR Close #49672
2023-10-10 09:35:55 -07:00
Matthieu Riegler 40113f653c feat(core): Remove deprecated CompilerOptions.useJit andCompilerOptions.missingTranslation. (#49672)
Both properties have been deprecated in v13 and are unused in v16.

PR Close #49672
2023-10-10 09:35:55 -07:00
Kristiyan Kostadinov 229331e11b build: fix broken symbols test
Fixes a symbol test that broke on the main branch.
2023-10-10 09:12:28 +02:00
Angular Robot b9a4941a32 build: update babel dependencies (#51898)
See associated pull request for more information.

PR Close #51898
2023-10-09 17:01:20 -07:00