Commit graph

29561 commits

Author SHA1 Message Date
Alex Rickabaugh
a4732c6cde refactor(core): export additional symbols from the signals index (#49708)
This commit adds a few missing exports from the signals index.

PR Close #49708
2023-04-05 11:10:09 -07:00
Alex Rickabaugh
10795288b0 refactor(core): add postSignalSetFn hook for WritableSignal (#49708)
This commit adds a hook to `WritableSignal` that is called whenever the
signal's value is updated via the mutation API. This hook allows consumers
to implement logic which is synchronous with signal sets (e.g. executing
effects). It's currently unused.

PR Close #49708
2023-04-05 11:10:09 -07:00
Alan Agius
77bdf77968 build: combine @bazel/concatjs patches (#49714)
This commit combines all the `@bazel/concatjs` patches

PR Close #49714
2023-04-05 10:54:29 -07:00
Angular Robot
1c16be4728 build: update domino digest to aa8de34 (#49716)
See associated pull request for more information.

PR Close #49716
2023-04-05 10:52:49 -07:00
Pawel Kozlowski
df1dfc4c17 fix(core): make sure that lifecycle hooks are not tracked (#49701)
Angular lifecycle hooks should never be run as part of the reactive
context: we do not expect that signal reads in lifecycle hooks
report to any consumers.

In the current Angular some of the lifecycle hooks can be flushed
early, while executting template update pass. We need to make sure
that signal reads in those lifecycle hooks do not register as part
of the effect that marks components for check.
"

PR Close #49701
2023-04-05 10:48:22 -07:00
Andrew Scott
a4e749ffca fix(core): When using setInput, mark view dirty in same was as markForCheck (#49711)
`ComponentRef.setInput` internally calls `markDirtyIfOnPush` which only marks
the given view as dirty but does not mark parents dirty like `ChangeDetectorRef.markForCheck` would.
f071224720/packages/core/src/render3/instructions/shared.ts (L1018-L1024)

`markDirtyIfOnPush` has an assumption that it’s being called from the parent’s template. That is, we don’t need to mark dirty to the root, because we’ve already traversed down to it.
The function used to only be called during template execution for input
bindings but was added to `setInput` later. It's not a good fit because
it means that if you are responding to events such as an emit from an `Observable`
and call `setInput`, the view of your `ComponentRef` won't necessarily get checked
when change detection runs next. If this lives inside some `OnPush` component tree
that's not already dirty, it only gets refreshed if you also call
`ChangeDetectorRef.markForCheck` in the host component (because it will be "shielded" be a non-dirty parent).

PR Close #49711
2023-04-05 10:13:21 -07:00
Charles Lyding
aad05ebeb4 feat(core): support usage of non-experimental decorators with TypeScript 5.0 (#49492)
Previously, attempting to turn off the `experimentalDecorators` TypeScript configuration
option within an Angular project would result in build time errors. These errors were due
to an exposed Decorator signature from `@angular/core` that TypeScript thought was incompatible
with standard decorators. However, Angular's class decorators (`Component`, `Directive`, `Pipe`,
`Injectable`, `NgModule`) are actually already compatible with standard decorators. The export types for
the decorators only needed to be updated to reflect that compatibility. With the updated exported types,
applications will now successfully compile and execute in AOT mode with one important dependency injection
caveat explained in the note below.
For JIT mode applications that are built with the Angular CLI, `@ngtools/webpack`, or use `tsickle`,
there were also no additional changes required. These tools automatically convert property decorators
(now called field decorators) at build time to store Angular property metadata directly on the relevant
class. Building with these tools is the overwhelmingly common method of building an application. Any
applications that do not use one of these tools will not function at runtime in JIT mode if using standard
decorators. The behavior and code for when experimental decorators is enabled has been left intact.

NOTE: Angular constructor dependency injection that requires parameter decorators is not supported.
The standard decorator specification does not support parameter decorators. The `inject` function must be
used for all cases that previously required a parameter decorator. This includes such decorators as `Inject`,
`Optional`, `Self`, `SkipSelf`, `Host`, and `Attribute`. Constructor dependency injection that relies only
on the supplied parameter type will continue to function as expected if using AOT; as well as in JIT mode
if using the Angular CLI, `@ngtools/webpack` directly, or `tsickle`.

Documentation for the `inject` function can be found at: https://angular.io/api/core/inject
The decorator specification proposal can be found at: https://github.com/tc39/proposal-decorators

PR Close #49492
2023-04-05 09:59:07 -07:00
Matthieu Riegler
d497be7aca refactor(core): Use the nullish coalescing assignment in render3 functions (#49698)
The usage of `??=` make the code more clear & concise.

PR Close #49698
2023-04-05 09:45:53 -07:00
Dylan Hunn
136ffbca8e refactor(forms): Add a test that uses ControlConfig with a non-static validator. (#49693)
Previously, this PR cleaned up a bug introduced by #48679. However, since that PR needed to be rolled back, this PR now just checks in the test, to prevent that issue from re-occurring in the future.

PR Close #49693
2023-04-05 09:08:39 -07:00
Matthieu Riegler
3b863ddc1e refactor(core): Remove ReflectiveInjector symbol (#48103)
The `ReflectiveInjector` symbol has been deprecated in v5 (11 major versions ago). This commit removes ReflectiveInjector and related symbols.

BREAKING CHANGE: The `ReflectiveInjector` and related symbols were removed. Please update the code to avoid references to the `ReflectiveInjector` symbol. Use `Injector.create` as a replacement to create an injector instead.

PR Close #48103
2023-04-04 16:43:53 -07:00
Angular Robot
f071224720 build: update eslint dependencies to v5.57.1 (#49696)
See associated pull request for more information.

PR Close #49696
2023-04-04 15:14:32 -07:00
Matthieu Riegler
1aef29ceb1 refactor(core): Cleanup for Iterable differs test. (#49598)
Remove some `any` and use the non-deprecated `Injector.create` overload.

PR Close #49598
2023-04-04 15:13:01 -07:00
Matthieu Riegler
061f3d1086 feat(core): Drop public factories property for IterableDiffers : Breaking change (#49598)
The `factories` property was marked as deprecated in v4 to make it private. Let's move it to private.

PR Close #49598
2023-04-04 15:13:01 -07:00
Andrew Scott
34b2d34d5b refactor(router): Remove RouterTestingModule in favor of RouterModule.forRoot (#49427)
`RouterTestingModule` is not needed as of v16. Instead, TestBed
automatically provides `MockPlatformLocation` in order to help test
navigations in the application. The location mocks in the
RouterTestingModule aren't necessary anymore.

There doesn't appear to be any real documentation around
`RouterTestingModule` other than the API docs.

PR Close #49427
2023-04-04 15:12:33 -07:00
Matthieu Riegler
1f3f5642f5 refactor(zone.js): remove #9100 todos. (#49409)
This commit assigns the correct type instead of `any`.

PR Close #49409
2023-04-04 15:10:58 -07:00
Matthieu Riegler
d71cde8dab refactor(core): remove ɵmakeDecorator from private exports (#49300)
`makeDecorator` is unused outside of core and is not part of the public API (not exported).

PR Close #49300
2023-04-04 15:10:16 -07:00
Andrew Scott
b203e4c19d fix(router): create correct URL relative to path with empty child (#49691)
The previous fix for squashing empty children didn't quite work when the
existing route had segments. The result would be that the segments from
the existing route were dropped from the final URL.

PR Close #49691
2023-04-04 15:05:41 -07:00
Angular Robot
a218ef5bf2 build: update domino digest to 89bec1a (#49703)
See associated pull request for more information.

PR Close #49703
2023-04-04 15:04:50 -07:00
Alan Agius
81e7d15ef6 feat(platform-browser): enable HTTP request caching when using provideClientHydration (#49699)
This commit adds support by default for HTTP caching when using `provideClientHydration`. Users can opt-out of this behaviour by using the `withoutHttpTransferCache` feature.

```ts
import {
  bootstrapApplication,
  provideClientHydration,
  withNoHttpTransferCache,
} from '@angular/platform-browser';
// ...
bootstrapApplication(RootCmp, {
  providers: [provideClientHydration(withNoHttpTransferCache())]
});
```

PR Close #49699
2023-04-04 15:04:03 -07:00
Matthieu Riegler
41992a2979 refactor(core): remove #9100 todos. (#49408)
This commit includes a change on the `ViewRef.onDestroy` signature.

PR Close #49408
2023-04-04 15:01:48 -07:00
Guillaume Weghsteen
b35fa73968 feat(core): change the URL sanitization to only block javascript: URLs (#49659)
In modern browsers, the 'javascript:' URL scheme is the only scheme that
can execute JavaScript when passed in a navigation URL context (e.g.
`a.href` value). Validate URL shemes to only contain characters allowed
in the URL specification ([a-zA-Z-+.]), and that are not javascript
(case insensitive). This is not a breaking change. The URL sanitization
is loosen.

PR Close #49659
2023-04-04 15:01:13 -07:00
Robin Richtsfeld
f0978ad0ec docs: fix typo (#49704)
PR Close #49704
2023-04-04 15:00:38 -07:00
Andrew Kushnir
cb23864472 docs: update Universal guide with hydration information (#49694)
This commit updates the Universal guide with hydration-related information. Also, this commit updates the content to introduce a sequence of steps to enable SSR (previously it was hard to follow the information flow of the document).

PR Close #49694
2023-04-04 13:18:19 -07:00
Jessica Janiuk
e7463dc80f docs: tweak hydration guide from feedback (#49705)
This adds a few details based on feedback from the previous PR.

PR Close #49705
2023-04-04 13:17:54 -07:00
Dylan Hunn
edc3bb180f Revert "feat(forms): Improve typings form (async)Validators" (#49706)
This reverts commit da189dec8f.

PR Close #49706
2023-04-04 11:26:04 -07:00
Andrew Kushnir
761e02d912 feat(platform-browser): add a public API function to enable non-destructive hydration (#49666)
This commit adds the `provideClientHydration` function to the public API. This function can be used to enable the non-destructive Angular hydration.

Important note: the non-destructive hydration feature is in Developer Preview mode, learn more about it at https://angular.io/guide/releases#developer-preview.

Before you can get started with hydration, you must have a server side rendered (SSR) application. Follow the [Angular Universal Guide](https://angular.io/guide/universal) to enable server side rendering first. Once you have SSR working with your application, you can enable hydration by visiting your main app component or module and importing `provideClientHydration` from `@angular/platform-browser`. You'll then add that provider to your app's bootstrapping providers list.

```typescript
import {
  bootstrapApplication,
  provideClientHydration,
} from '@angular/platform-browser';
// ...
bootstrapApplication(RootCmp, {
  providers: [provideClientHydration()]
});
```

Alternatively if you are using NgModules, you would add `provideClientHydration` to your root app module's provider list.

```typescript
import {provideClientHydration} from '@angular/platform-browser';
import {NgModule} from '@angular/core';

@NgModule({
  declarations: [RootCmp],
  exports: [RootCmp],
  bootstrap: [RootCmp],
  providers: [provideClientHydration()],
})
export class AppModule {}
```

You can confirm hydration is enabled by opening Developer Tools in your browser and viewing the console. You should see a message that includes hydration-related stats, such as the number of components and nodes hydrated.

Co-authored-by: jessicajaniuk <72768744+jessicajaniuk@users.noreply.github.com>
Co-authored-by: alan-agius4 <17563226+alan-agius4@users.noreply.github.com>

PR Close #49666
2023-04-03 22:13:47 -07:00
Matthieu Riegler
b2327f4df1 feat(core): Allow typeguards on QueryList.filter (#48042)
To match the behaviour of Array.filter, typeguards can now be used on QueryList.filter to narrow the return type.

Fixes #38446

BREAKING CHANGE: QueryList.filter now supports type guard functions, which will result in type narrowing. Previously if you used type guard functions, it resulted in no changes to the return type. Now the type would be narrowed, which might require updates to the application code that relied on the old behavior.

PR Close #48042
2023-04-03 19:35:35 -07:00
JoostK
6ca1a53a19 refactor(compiler-cli): workaround for CI failure in Windows (#49136)
It seems that changes in prior commits led to a new error in the Windows CI job,
likely due to its sandboxing setup in Bazel. This commit adds an explicit type
annotation that should avoid the error.

PR Close #49136
2023-04-03 19:20:01 -07:00
JoostK
ff6608c5fe refactor(compiler-cli): remove a flag that is always true in ngtsc (#49136)
This flag was set to `true` by ngcc, but now that ngcc is gone this flag can be removed.

PR Close #49136
2023-04-03 19:20:01 -07:00
JoostK
2d6e6a1510 refactor(compiler-cli): update comments to account for ngcc removal (#49136)
This commit updates comments to account for the removal of ngcc.

PR Close #49136
2023-04-03 19:20:01 -07:00
JoostK
e5a30d92d2 refactor(compiler-cli): update compilation error message to not mention ngcc (#49136)
No longer refer to an ngcc incompatibility now that ngcc has been removed.

PR Close #49136
2023-04-03 19:20:00 -07:00
JoostK
3f47535fbf refactor(compiler-cli): update TraitCompiler to account for ngcc deletion (#49136)
There used to be a subclass of `TraitCompiler` in ngcc, but now that ngcc has been removed
we can update `TraitCompiler` to no longer expose certain fields and methods.

PR Close #49136
2023-04-03 19:20:00 -07:00
JoostK
cfa9f31fff refactor(compiler-cli): avoid clang-format inconsistency (#49136)
There's an issue where formatting with `clang-format` doesn't agree with itself on how
the docblock for a field named `import` should be indented; if it is indented then it
removes the indentation, but then linting the source file reports an error where it
wants to revert the indentation change. By using computed property syntax this bug
is avoided.

PR Close #49136
2023-04-03 19:20:00 -07:00
JoostK
c20deb7e8d refactor(compiler-cli): only use a single type expression (#49136)
The concept of "internal" and "adjacent" type expression used to be necessary to support
ngcc, as it had to process downleveled class declarations using an IIFE, where the class
name within the IIFE could be different from the outer class name. With the removal of
ngcc we no longer need to make this distinction, so this commit removes these concepts
entirely.

PR Close #49136
2023-04-03 19:20:00 -07:00
JoostK
9540f6d118 refactor(compiler-cli): remove unused dts declaration logic (#49136)
This logic used to be in place to support ngcc, but with the removal of ngcc
this is no longer relevant.

PR Close #49136
2023-04-03 19:20:00 -07:00
JoostK
d9060d9cfb refactor(compiler-cli): remove ngcc-only builtin functions (#49136)
ngcc's reflection host would recognize tslib helpers and some JS builtin methods to allow
the static interpreter to evaluate compiled and downleveled JS code, but now that ngcc
has been removed this functionality is no longer being used.

PR Close #49136
2023-04-03 19:20:00 -07:00
JoostK
bbe4590b9d refactor(compiler-cli): remove support for ngcc-only declaration formats (#49136)
This commit simplifies various parts of ngtsc to no longer support synthetic decorators,
downleveled enum members and inline declarations. These concepts were present to support
ngcc, but can be dropped now that ngcc has been removed.

PR Close #49136
2023-04-03 19:20:00 -07:00
Jessica Janiuk
4b673d5ed7 docs: Add error page for NG0504 error (#49689)
This adds a detailed error page for the hydration invalid ngSkipHydration host error.

PR Close #49689
2023-04-03 19:19:27 -07:00
Jessica Janiuk
9e9e1313a9 docs: Add error page for NG0503 error (#49689)
This adds a detailed error page for the hydration unsupported projection of DOM nodes error.

PR Close #49689
2023-04-03 19:19:26 -07:00
Jessica Janiuk
f1566f3325 docs: Add error pages for NG0501 and NG0502 errors (#49689)
This adds a detailed error pages for the hydration missing siblings and hydration missing node errors.

PR Close #49689
2023-04-03 19:19:26 -07:00
Jessica Janiuk
b7c5acb542 docs: Add error page for NG0500 hydration node mismatch error (#49689)
This adds a detailed error page for the hydration node mismatch error.

PR Close #49689
2023-04-03 19:19:26 -07:00
Sandra Limacher
c912294979 docs: fix typo (#49669)
PR Close #49669
2023-04-03 19:18:40 -07:00
Jessica Janiuk
31f4efe979 docs: add hydration guide (#49665)
This adds a guide for how to use hydration in Angular.

PR Close #49665
2023-04-03 19:17:58 -07:00
Matthieu Riegler
719f6a05fd refactor(core): remove unnecessary reflect-metadata import. (#49673)
The import is not needed for the tests to run.

PR Close #49673
2023-04-03 19:17:02 -07:00
Matthieu Riegler
ba3e9eac92 feat(devtools): Improve Set support in component properties. (#49316)
With this commit, Sets are displayed with the label Set(#) where # is the size of the set. They are not expandable/editable though.

Partial fix for #49312

PR Close #49316
2023-04-03 19:15:34 -07:00
Alan Agius
aff1512950 feat(http): allow HttpClient to cache requests (#49509)
This commit adds a new option for `provideHttpClient` called
`withHttpTransferCache()`. When this option is passed, requests done on the server are cached and reused during the  bootstrapping of the application in the browser thus avoiding duplicate requests and reducing load time.

This is the same as `TransferHttpCacheModule` in https://github.com/angular/universal/blob/main/modules/common/src/transfer_http.ts

PR Close #49509
2023-04-03 19:13:45 -07:00
vikram menon
8019fed1f7 docs: fix typo in quick reference (#49655)
Change indicatedr5t to indicated

PR Close #49655
2023-04-03 19:13:15 -07:00
Angular Robot
85ca1f99b7 build: update dependency concurrently to v8 (#49662)
See associated pull request for more information.

PR Close #49662
2023-04-03 19:12:44 -07:00
Angular Robot
d11f5d70d3 build: update dependency google-closure-compiler to v20230228 (#49663)
See associated pull request for more information.

PR Close #49663
2023-04-03 19:12:14 -07:00
Andrew Kushnir
61bedaf930 refactor(core): handle a case when ngSkipHydration is applied to the root node of an application (#49675)
This commit updates the logic to handle a case when the `ngSkipHydration` attribute is applied to the root node of an app. In this case, the hydration info should not be serialized and the contents of the app on the client should be cleared up before initial rendering.

PR Close #49675
2023-04-03 19:11:47 -07:00