Commit graph

12309 commits

Author SHA1 Message Date
Paul Gschwendtner
00a79d0ee2 refactor(migrations): properly migrate inputs marked as optional via question mark (#58031)
Currently if inputs are marked as optional via the question mark syntax,
we add `undefined` only if there is an explicit type. This is wrong as
we should do the same if there is just an initializer.

This commit fixes this.

PR Close #58031
2024-10-01 16:34:54 +00:00
Matthieu Riegler
fb321966aa build: Add LICENSE file to the generated packages (#58033)
This commit adds a parameter to `ng_package` to specify a license file that will be bundled with the generated packages.

fixes #58029

PR Close #58033
2024-10-01 16:34:27 +00:00
jnizet
057cf7fb6b fix(http): preserve all headers from Headers object (#57802)
when initialized from a `Headers` object containing multiple values for the same header, `HttpHeaders` now contains all the header values instead of only having one of them.

Fixes #57798

PR Close #57802
2024-10-01 13:48:35 +00:00
Paul Gschwendtner
9ce839fc7d test(migrations): add test for statistic collection tsurge (#58019)
Adds a test for statistic testing of Tsurge

PR Close #58019
2024-10-01 11:29:00 +00:00
Paul Gschwendtner
273444ab9a refactor(migrations): support getting statistics in tsurge testing (#58019)
This allows us to test statistics in future commits.

PR Close #58019
2024-10-01 11:28:59 +00:00
Paul Gschwendtner
6b57fcd4ee refactor(migrations): track statistics of signal input migration (#58019)
Track statistics of signal input migration. This allows us to see
progress the migration made.

PR Close #58019
2024-10-01 11:28:59 +00:00
Paul Gschwendtner
9f08ff2baf refactor(migrations): support statistic tracking in tsurge migrations (#58019)
We should support tracking statistics in Tsurge migrations. This allows
us to print them after migration, or run migrations periodically as
large scale changes to track to progress.

TODO is an internal implementation that eventually runs periodcally
in LSC modes.

PR Close #58019
2024-10-01 11:28:59 +00:00
Andrew Scott
ed57c5c9c8 docs: export ComponentInputBindingFeature which is part of the public API (#57962)
this fixes a missing export of ComponentInputBindingFeature

PR Close #57962
2024-10-01 08:30:03 +00:00
Andrew Scott
2ece9dff75 docs(router): Document missing input for route binding (#57697)
This commit clearly documents the approach used by router input binding
when an input is not present in the route data.

resolves #52946

PR Close #57697
2024-10-01 08:09:32 +00:00
arturovt
22dafa658b fix(http): cleanup JSONP script listeners once loading completed (#57877)
This commit removes event listeners from the `script` element once loading is
complete. If the element is not garbage collected properly, in Firefox, the script
element still appears in the memory tree view, captured by
`__zone_symbol__loadfalse -> HTMLScriptElement -> GC Roots`. We should always be good
citizens and clean up event listeners when we no longer need them, as browser's garbage
collectors work differently. Calling `remove()` on the node doesn't guarantee that the
node can be collected.

PR Close #57877
2024-10-01 08:08:40 +00:00
Matthieu Riegler
f2bea3b73d refactor(platform-server): remove HttpClientModule import (#58016)
This import is not necessary anymore.

fixes #57983

PR Close #58016
2024-09-30 13:41:48 -07:00
Kristiyan Kostadinov
ef577b2d2b fix(migrations): delete constructor if it only has super call (#58013)
Adds some logic to the `inject` migration that will remove constructors that are made up of only a `super` call after the migration.

PR Close #58013
2024-09-30 13:39:43 -07:00
Paul Gschwendtner
cfa60cbdde refactor(migrations): migrate QueryList first and last accesses (#57992)
Instead of leaving incorrect `.first` and `.last` accesses for migrated
queries, we can migrate them to an equivalent using `at()`.

Notably, we need to use an non-null assertion to be on the safe side,
given that the current `first` and `last` types are not typed to include
a potential `undefined`.

We may add a TODO in the future.

PR Close #57992
2024-09-30 13:33:45 -07:00
Paul Gschwendtner
806db68556 refactor(migrations): skip query migration if problematic QueryList usages are discovered (#57992)
If we see a reference to e.g. `QueryList#changes`, we should skip
migration to be on the safe side. Similar for other fields of query
lists.

PR Close #57992
2024-09-30 13:33:45 -07:00
Kristiyan Kostadinov
682da6f59f refactor(core): fix typo in function name (#57988)
Fixes a typo in the `replaceMetadata` function name.

PR Close #57988
2024-09-30 13:31:24 -07:00
Paul Gschwendtner
5c4305f024 feat(language-service): support migrating full classes to signal inputs in VSCode (#57975)
This commit expands the VScode integration of the signal input migration
to allow migration of full classes and all their inputs. This enables a
faster workflow than just migrating every member individually.

In addition, we now properly support migrating classes that are
unexported and no actual metadata is available in `ngtsc` (but this is
fine for the migration).

PR Close #57975
2024-09-30 13:29:21 -07:00
arturovt
e8b2d5fad8 fix(common): skip checking whether SVGs are oversized (#57966)
Prior to this commit, the `ImagePerformanceWarning` class was checking all `img`
elements in the DOM to determine whether they were oversized after the DOM loading
was complete. We should not check SVGs because they are vector-based and can scale
infinitely without losing quality.

Closes #57941

PR Close #57966
2024-09-30 13:28:45 -07:00
Kristiyan Kostadinov
33fe252c58 fix(compiler-cli): do not report unused declarations coming from an imported array (#57940)
Some apps follow a pattern where they have an array of common declarations which is imported in most standalone components, but only some of the declarations are used. Such cases will currently raise the unused imports diagnostic but can be hard to fix, because it would require either removing declarations from the common array which can break other components, or copying only the necessary declarations from the array. Since neither of these solutions is great, this commit tweaks the logic for the diagnostic so that unused imports coming from _exported_ arrays are not reported (either from the same file or another one).

PR Close #57940
2024-09-30 13:27:29 -07:00
Charles Lyding
2545743ad1 refactor(core): support external runtime styles via a component feature (#57922)
The shared style host now has the capability to add component styles as
link elements with external style references. This is currently unused
within the runtime but is an enabling feature for upcoming features such
as automatic component style HMR and development server deferred
stylesheet processing. Instead of inline style content that is then
added to a `style` element for each host node, a `link` element with a
stylesheet `rel` attribute and a `href` attribute can now be created.
The development server must be configured to provide the relevant
component stylesheet upon request. The Angular CLI development server
will provide this functionality once this capability is enabled.
Since the primary use of this capability is development mode and will
not be used for production code, server (SSR) style reuse is currently
not yet implemented but may be implemented in the future.

A component feature is used to provide the DOM renderer access to any
external styles that were emitted at compile time. When external styles
are present, the `getExternalStyles` function will be present on the
runtime component metadata object. The DOM render will use this function
to access and encapsulate the external style URLs as required by the
component.

PR Close #57922
2024-09-30 13:25:12 -07:00
Paul Gschwendtner
ff028b8e06 refactor(migrations): fix batch test of signal input migration failing (#57961)
The batch test was failing (it doesn't run on CI for resource reasons)
because incompatibilities were not properly "incorporated" in batch
execution mode (due to enum values of 0 being incorrectly checked via
truthy).

This is only visible in batch scenarios in two cases:

 - when a class was manually instantiated, between targets
 - when a class was overridden by a derived class, between targets

PR Close #57961
2024-09-26 14:29:04 -07:00
Paul Gschwendtner
2fe393ac60 refactor(migrations): improve tsurge diff helper to simplify output (#57961)
Instead of printing the full diff, which may be a super large file or
golden, we only print context around lines with diff. This makes the
diffs much more actionable and readable.

PR Close #57961
2024-09-26 14:29:03 -07:00
Kristiyan Kostadinov
c44f087482 refactor(core): add initial implementation of function to replace metadata at runtime (#57953)
Adds the new `ɵɵreplaceMedata` function that can be used to replace the metadata of a component class and re-render all instances in place without refreshing the page. The function isn't used anywhere at the moment, but it will be necessary for future functionality.

PR Close #57953
2024-09-26 14:28:35 -07:00
Charles Lyding
ea5442637c refactor(platform-browser): further reduce runtime code size of shared style host (#57951)
The `SharedStylesHost` class has been refactored to further reduce
the runtime code size. SSR generated component styles are now added directly
into the usage records to avoid the need for additional data structures and
lookups when adding a component style. The code reduction in a prerelease
newly generated Angular CLI application for production is ~190 bytes.

Before:
```
Initial chunk files   | Names         |  Raw size | Estimated transfer size
main-3X2VHGTM.js      | main          | 208.26 kB |                56.30 kB
polyfills-FFHMD2TL.js | polyfills     |  34.52 kB |                11.28 kB
styles-5INURTSO.css   | styles        |   0 bytes |                 0 bytes

                      | Initial total | 242.78 kB |                67.58 kB
```

After:
```
Initial chunk files   | Names         |  Raw size | Estimated transfer size
main-MGOZ6Q4F.js      | main          | 208.07 kB |                56.26 kB
polyfills-FFHMD2TL.js | polyfills     |  34.52 kB |                11.28 kB
styles-5INURTSO.css   | styles        |   0 bytes |                 0 bytes

                      | Initial total | 242.59 kB |                67.54 kB
```

PR Close #57951
2024-09-26 14:28:00 -07:00
Alex Rickabaugh
d9687f43dd feat(compiler-cli): 'strictStandalone' flag enforces standalone (#57935)
Add the `strictStandalone` flag to `angularCompilerOptions`. When set to
true, the compiler will require that all declarations of components,
directive, and pipes be standalone. When `standalone: false` is provided,
an error is raised.

Note that until the default value of the standalone flag is flipped, this
does not catch the case where a declaration does not specify a value for
`standalone`.

The default value of the `strictStandalone` flag is `false`.

PR Close #57935
2024-09-26 14:22:24 -07:00
Kristiyan Kostadinov
3240598158 fix(core): provide flag to opt into manual cleanup for after render hooks (#57917)
Adds a `manualCleanup` flag to `afterRender` and `afterNextRender`, similarly to `effect`. The reason is that currently if the hook is created outside of an injection context, it requires an injector to be passed in. In some cases that injector might be an injector that is never destroyed (e.g. `EnvironmentInjector`) which can give a false sense of security users thinking that the hook will be cleaned up automatically. We fell into this in the CDK which caused a memory leak (see https://github.com/angular/components/pull/29709). With the `manualCleanup` option users explicitly opt into cleaning the hook up themselves.

PR Close #57917
2024-09-26 14:20:54 -07:00
Swami
418ffccf0b docs: correct HashLocationStrategy example url (#57908)
PR Close #57908
2024-09-26 14:20:00 -07:00
Thomas Nguyen
5f356fc092 refactor(core): Remove global event delegation code. (#57893)
This is no longer needed since we are no longer experimenting with it.

PR Close #57893
2024-09-26 14:18:17 -07:00
Alex Rickabaugh
5f56a65837 fix(upgrade): support input signal bindings (#57020)
`@angular/upgrade` writes to inputs when downgrading an Angular 2+ component
into an Angular.JS adapter. Previously, it wrote directly to the input
property, which isn't compatible with input signals. It also handles
`ngOnChanges` directly.

The correct way to support input signals would be to refactor upgrade to use
`ComponentRef.setInput`, which also handles `ngOnChanges` internally.
However, this refactoring might be more breaking since it would change the
timing of certain operations. Instead, this commit updates the code to
recognize `InputSignal` and write it through the `InputSignalNode`. This
avoids the above breaking changes for now, until a bigger refactoring can be
tested.

Fixes #56860.

PR Close #57020
2024-09-26 14:14:14 -07:00
Enea Jahollari
39ccaf4cc4 fix(compiler-cli): correctly get the type of nested function call expressions (#57010)
This PR fixes a bug where the type of a nested function call expression was incorrectly being returned as null.

PR Close #57010
2024-09-26 14:13:03 -07:00
arturovt
c3115b882e fix(common): execute checks and remove placeholder when image is already loaded (#55444)
With this commit, we're now able to perform checks even when the image has already
been loaded (e.g., from the browser cache), and its `load` event would never be triggered.
We use the [complete](https://html.spec.whatwg.org/#dom-img-complete) property, as specified,
which indicates that the image state is fully available when the user agent has retrieved all
the image data. This approach effectively triggers checks, as we no longer solely rely on the
`load` event and consider that the image may already be loaded.

This will not remove the placeholder until the `load` event fires (and it won't fire if the
image is already "there").

This prevents memory leaks in development mode, as `load` and `error` event listeners are
still attached to the image element.

PR Close #55444
2024-09-26 14:12:00 -07:00
Paul Gschwendtner
95e8fb4c1c refactor(migrations): do not insert TODO for skipped inputs (#57957)
Whenever the insert TODO option is enabled, we should not insert a TODO
for inputs that were explicitly skipped via config.

This currently causes TODOs to be inserted for inputs outside of the
given `--path`, if the analysis directory is still including files from
outside of the directory.

PR Close #57957
2024-09-25 10:04:24 -07:00
Paul Gschwendtner
274a4c0f61 refactor(migrations): assign significance to input migration incompatibility reasons (#57957)
If an input is already skipped from the migration for e.g. being an
accessor, then the fact that it may be incompatible due inheritance is
not relevant. This commit assigns signficance/priority to input
incompatibilities.

This is also important for not accidentally overriding "explicit config
filter" incompatibilities with e.g. accessor incompatibility (which may
be recognized later or visible from another compilation unit).

PR Close #57957
2024-09-25 10:04:24 -07:00
Paul Gschwendtner
2c8449a2f5 refactor(migrations): replace remaining performance.now() usages. (#57947)
Those usages break in the Angular CLI schematic execution, so we should
replace them as well.

PR Close #57947
2024-09-25 08:32:23 +00:00
Paul Gschwendtner
aaae011b58 refactor(migrations): migrate toArray and get methods in query migration (#57947)
This commit migrates `toArray` and `get` methods of `QueryList`. The
`toArray` method is no longer needed for multi-queries, and `get` can be
replaced with native array `at`.

PR Close #57947
2024-09-25 08:32:23 +00:00
Paul Gschwendtner
313dfb7e99 refactor(migrations): provide AST path for resolved template and host references (#57947)
This allows us to detect usages in templates and figure out if they are
e.g. invoking a problematic method like `.pipe` for the output
migration, or in queries `.toArray` etc.

PR Close #57947
2024-09-25 08:32:23 +00:00
Joey Perrott
9dbe6fc18b refactor: update license text to point to angular.dev (#57901)
Update license text to point to angular.dev instead of angular.io

PR Close #57901
2024-09-24 15:33:00 +02:00
Andrew Kushnir
b124e50ea3 refactor(core): avoid producing zone-related warnings during hydration when in zoneless mode (#57911)
This commit updates hydration code to avoid logging "unsupported configuration" warnings when in zoneless mode.

PR Close #57911
2024-09-24 12:52:40 +02:00
Pawel Kozlowski
a7eff3ffaa feat(core): mark signal-based query APIs as stable (#57921)
This commit marks the contentChild, contentChildren, viewChild
and viewChildren APIs (along with any associated APIs) as stable
and thus exits the dev preview
phase for those APIs.

PR Close #57921
2024-09-24 12:34:37 +02:00
Andrew Scott
48216a28e8 refactor(router): Move view transitions to developer preview (#55600)
Nothing of concern arose during the time this feature was in the
experimental phase. There are no plans to change the shape of the API.

This change also updates the route animations documentation to use the
view transitions feature instead of the old and difficult to follow
guide that used the animations package. The content was taken from the
blog post: https://blog.angular.io/check-out-angulars-support-for-the-view-transitions-api-3937376cfc19

PR Close #55600
2024-09-24 12:07:02 +02:00
Matthieu Riegler
5a04837c54 refactor(core): replace non output EventEmitter with Subject. (#54666)
Semantcly we're shifting away from using `EventEmitter` on non-outputs.

PR Close #54666
2024-09-24 11:58:24 +02:00
Matthieu Riegler
b23113dc96 refactor(common): replace non output EventEmitter with Subject. (#54666)
Semantcly we're shifting away from using `EventEmitter` on non-outputs.

PR Close #54666
2024-09-24 11:58:24 +02:00
Angular Robot
9f5798e511 build: update dependency @rollup/plugin-commonjs to v28 (#57929)
See associated pull request for more information.

PR Close #57929
2024-09-24 11:48:50 +02:00
Matthieu Riegler
6c9abd38fb refactor(forms): lift circular deps (#55881)
`import type` to the rescue.

PR Close #55881
2024-09-23 16:24:05 +02:00
Charles Lyding
7b2fda16b1 refactor(platform-browser): reduce runtime code size of shared style host (#57834)
The `SharedStylesHost` class has been refactored to both reduce the runtime
code size and also modernize some of the code structures. The class is also
adjusted to better support reuse via subclassing or other reuses in the future.
Additional comments have been added to improve readability as well.
The code reduction in a prerelease newly generated Angular CLI application
for production is ~410 bytes.

Before:
```
Initial chunk files   | Names         |  Raw size | Estimated transfer size
main-GOQKBZBZ.js      | main          | 208.67 kB |                56.41 kB
polyfills-FFHMD2TL.js | polyfills     |  34.52 kB |                11.28 kB
styles-5INURTSO.css   | styles        |   0 bytes |                 0 bytes

                      | Initial total | 243.19 kB |                67.69 kB
```

After:
```
Initial chunk files   | Names         |  Raw size | Estimated transfer size
main-CRTDDKPH.js      | main          | 208.26 kB |                56.32 kB
polyfills-FFHMD2TL.js | polyfills     |  34.52 kB |                11.28 kB
styles-5INURTSO.css   | styles        |   0 bytes |                 0 bytes

                      | Initial total | 242.78 kB |                67.61 kB
```

PR Close #57834
2024-09-23 14:22:58 +02:00
Paul Gschwendtner
04a48736b1 refactor(migrations): add TODO for special output of signal input migration (#57918)
Sometimes we may insert `undefined!` or `any`. We should add a TODO in
those cases.

PR Close #57918
2024-09-23 13:41:48 +02:00
Paul Gschwendtner
7d74ab8ba3 refactor(migrations): improve logging of signal input migration (#57918)
The program preparation may take longer than the short analysis, given
potential larger projects. We should print this.

PR Close #57918
2024-09-23 13:41:48 +02:00
Paul Gschwendtner
d1391ceaad refactor(migrations): fix peformance.now() not available in input schematic (#57913)
In schematics, `performance.now()` is not available. This breaks
execution.

PR Close #57913
2024-09-23 12:43:53 +02:00
Paul Gschwendtner
304bb3b274 refactor(migrations): remove imports to QueryList in signal queries migration (#57919)
With this commit, we remove imports to `QueryList` whenever possible.

PR Close #57919
2024-09-23 12:43:17 +02:00
Paul Gschwendtner
505c0f788e refactor(migrations): add better explanation on what color diff represents in testing (#57919)
This clarifies what colors mean in the Tsurge text diff Jasmine matcher.

PR Close #57919
2024-09-23 12:43:17 +02:00
cexbrayat
eb77b533b8 refactor(migrations): avoid TS error 18003 when no files found (#57899)
When running a migration, tsurge creates a TS program from the tsconfig files found.
This can result in a 18003 error when no files are found (based on the includes/files of the config).

For example, the signal input migration throws in a CLI project that has no spec files:

```
ng g @angular/core:signal-inputs --defaults
Tsconfig could not be parsed or is invalid:

No inputs were found in config file '/tsconfig.spec.json'. Specified 'include' paths were '["src/**/*.spec.ts","src/**/*.d.ts"]' and 'exclude' paths were '["/out-tsc/spec"]'.
```

A similar issue has already been raised in the CDK migration (see https://github.com/angular/components/issues/27055).

This was solved in the CDK (credits to @crisbeto) by ignoring the 18003 error (see 9c1112d408361a47c98dfd470b8e990cbd1753db).

This PR does the same in tsurge.

PR Close #57899
2024-09-23 12:42:33 +02:00