Angular: 13.0.0 Release

Release date:
November 3, 2021
Previous version:
13.0.0-rc.3 (released November 2, 2021)
Magnitude:
466 Line Impact
Contributors:
3 total committers
Data confidence:
Commits:

Top Contributors in 13.0.0

alxhub
devversion
petebacondarwin

Directory Browser for 13.0.0

All files are compared to previous version, 13.0.0-rc.3. Click here to browse diffs between other versions.

Loading File Browser...

Release Notes Published

<a name="13.0.0"></a>

13.0.0 (2021-11-03)

Breaking Changes

common

  • The behavior of the SpyLocation used by the RouterTestingModule has changed to match the behavior of browsers. It no longer emits a 'popstate' event when Location.go is called. In addition, simulateHashChange now triggers both a hashchange and a popstate event. Tests which use location.go and expect the changes to be picked up by the Router should likely change to simulateHashChange instead. Each test is different in what it attempts to assert so there is no single change that works for all tests. Each test using the SpyLocation to simulate browser URL changes should be evaluated on a case-by-case basis. ### core
  • TypeScript versions older than 4.4.2 are no longer supported.

  • NodeJS versions older than v12.20.0 are no longer supported due to the Angular packages using the NodeJS package exports feature with subpath patterns.

  • The WrappedValue class can no longer be imported from @angular/core, which may result in compile errors or failures at runtime if outdated libraries are used that are still using WrappedValue. The usage of WrappedValue should be removed as no replacement is available.

    forms

  • A new type called FormControlStatus has been introduced, which is a union of all possible status strings for form controls. AbstractControl.status has been narrowed from string to FormControlStatus, and statusChanges has been narrowed from Observable<any> to Observable<FormControlStatus>. Most applications should consume the new types seamlessly. Any breakage caused by this change is likely due to one of the following two problems: (1) the app is comparing AbstractControl.status against a string which is not a valid status; or, (2) the app is using statusChanges events as if they were something other than strings.

    router

  • The default url serializer would previously drop everything after and including a question mark in query parameters. That is, for a navigation to /path?q=hello?&other=123, the query params would be parsed to just {q: 'hello'}. This is incorrect because the URI spec allows for question mark characers in query data. This change will now correctly parse the params for the above example to be {v: 'hello?', other: '123'}.

  • Previously null and undefined inputs for routerLink were equaivalent to empty string and there was no way to disable the link's navigation. In addition, the href is changed from a property HostBinding() to an attribute binding (HostBinding('attr.href')). The effect of this change is that DebugElement.properties['href'] will now return the href value returned by the native element which will be the full URL rather than the internal value of the RouterLink href property.

  • The router will no longer replace the browser URL when a new navigation cancels an ongoing navigation. This often causes URL flicker and was only in place to support some AngularJS hybrid applications. Hybrid applications which rely on the navigationId being present on initial navigations that were handled by the Angular router should instead subscribe to NavigationCancel events and perform the location.replaceState themselves to add navigationId to the Router state. In addition, tests which assert urlChanges on the SpyLocation may need to be adjusted to account for the replaceState which is no longer triggered.

  • It is no longer possible to use Route.loadChildren using a string value. The following supporting classes were removed from @angular/core:

  • NgModuleFactoryLoader

  • SystemJsNgModuleFactoryLoader

The @angular/router package no longer exports these symbols:

  • SpyNgModuleFactoryLoader
  • DeprecatedLoadChildren

The signature of the setupTestingRouter function from @angular/core/testing has been changed to drop its NgModuleFactoryLoader parameter, as an argument for that parameter can no longer be created.

service-worker

  • The return type of SwUpdate#activateUpdate and SwUpdate#checkForUpdate changed to Promise<boolean>.

Although unlikely, it is possible that this change will cause TypeScript type-checking to fail in some cases. If necessary, update your types to account for the new return type.

Deprecations

  • The renderModuleFactory symbol in @angular/platform-server is no longer necessary as of Angular v13.

The renderModuleFactory calls can be replaced with renderModule.

service-worker

  • The SwUpdate#activated observable is deprecated.

The SwUpdate#activated observable only emits values as a direct response to calling SwUpdate#activateUpdate() and was only useful for determining whether the call resulted in an update or not. Now, the return value of SwUpdate#activateUpdate() can be used to determine the outcome of the operation and therefore using SwUpdate#activated does not offer any benefit.

  • The SwUpdate#availalbe observable is deprecated.

The new SwUpdate#versionUpdates observable provides the same information and more. Therefore, it is possible to rebuild the same behavior as SwUpdate#availalbe using the events emitted by SwUpdate#versionUpdates and filtering for VersionReadyEvent events. As a result, the SwUpdate#availalbe observable is now redundant.

| Commit | Description | | -- | -- | | docs - 747553dd68 | deprecate ViewEngine-based renderModuleFactory (#43757) |

bazel

| Commit | Description | | -- | -- | | feat - 62d7005a52 | add strict_templates and experimental_extended_template_diagnostics to ng_module() rule (#43582) | | feat - d977701a43 | allow for custom conditions to be set in ng_package targets (#43764) | | feat - 4886585875 | create transition for enabling partial compilation (#43431) | | feat - cd1b52483e | expose esm2020 and es2020 conditions in APF package exports (#43740) | | feat - 49b82ae561 | implement partial compilation APF v13 for ng_package rule (#43431) | | feat - 274cb38e0b | switch prodmode output to ES2020 (#43431) | | feat - 73ac50c447 | wire up partial compilation build setting in ng_module (#43431) | | fix - e0a72857cc | construct a manifest file even when warnings are emitted (#43582) | | fix - dbe656d1e0 | ngc-wrapped should not rely on linker for external workspaces (#43690) |

common

| Commit | Description | | -- | -- | | feat - adf4481211 | add injection token for default date pipe timezone (#43611) | | fix - c6a93001eb | synchronise location mock behavior with the navigators (#41730) |

compiler

| Commit | Description | | -- | -- | | fix - 14b492df26 | do not error if $any is used inside a listener (#43866) |

compiler-cli

| Commit | Description | | -- | -- | | feat - bed121c34f | inline resources when generating class metadata calls (#43178) | | fix - 263feba5c2 | handle nullable expressions correctly in the nullish coalescing extended template diagnostic (#43572) | | fix - 8f7fdc59af | not evaluating new signature for __spreadArray (#43618) | | fix - 426a3ecae7 | updates ngc to pass the build when only warnings are emitted (#43673) |

core

| Commit | Description | | -- | -- | | feat - a3960846da | add createNgModuleRef function to create NgModuleRef based on NgModule class (#43580) | | feat - fe1f6421d2 | add getNgModuleById function to retrieve loaded NgModules by id (#43580) | | feat - 81c7eb813c | add migration to opt out existing apps from new test module teardown behavior (#43353) | | feat - e57691c9c5 | Add migration to update empty routerLinks in templates (#43176) | | feat - 7dccbdd27b | add support for Types in ViewContainerRef.createComponent (#43022) | | feat - c14085e434 | drop support for TypeScript 4.2 and 4.3 (#43642) | | feat - 94ba59bc9d | enable test module teardown by default (#43353) | | feat - ea61ec2562 | support TypeScript 4.4 (#43281) | | feat - e0a0d05d45 | update node version support range to support v16 (#43740) | | fix - 7396021e4b | avoid duplicating comments in TestBed teardown migration (#43776) | | fix - 7fd0428aae | don't rethrow errors if test teardown has been disabled (#43635) | | fix - 66fb311d20 | incorrect signature for initTestEnvironment (#43615) | | fix - 8ae99821d6 | support InjectFlags argument in NodeInjector.get() (#41592) | | perf - 8878183521 | remove support for the deprecated WrappedValue (#43507) |

elements

| Commit | Description | | -- | -- | | fix - a468213f34 | remove ng-add schematic (#43975) | | fix - f544a53f5f | remove incorrect @angular/platform-browser peer dependency (#43975) |

forms

| Commit | Description | | -- | -- | | feat - d9d8f950e9 | allow disabling min/max validators dynamically (by setting the value to null) (#42978) | | feat - e49fc96ed3 | Make Form Statuses use stricter types. (#42952) |

language-service

| Commit | Description | | -- | -- | | feat - b10d90bef6 | Add method for retrieving the component template at the cursor location (#43208) | | feat - d5f9890c92 | auto-apply optional chaining on nullable symbol (#42995) | | feat - 69957f72e2 | provide snippets for attribute (#43590) | | fix - fc3b50e427 | exclude the SafePropertyRead when applying the optional chaining (#43321) |

migrations

| Commit | Description | | -- | -- | | fix - 95a68c5dc3 | account for CRLF characters in template migrations (#44013) | | fix - 77bd2538cb | apply individual expression edits to preserve newline characters (#43519) | | fix - d849350c7b | Ensure routerLink migration doesn't update unrelated files (#43519) | | fix - 2efc18e675 | migration failed finding tsconfig file (#43343) | | fix - b6f2a55147 | prevent migrations from updating external templates multiple times (#44013) |

router

| Commit | Description | | -- | -- | | feat - 4f3beffdbf | emit activate/deactivate events when an outlet gets attached/detached (#43333) | | feat - faf9f5a3bc | new output that would notify when link is activated (#43280) | | feat - 3c6b653089 | Option to correctly restore history on failed navigation (#43289) | | fix - 784671597e | Allow question marks in query param values (#31187) | | fix - 796da641f0 | Do not modify parts of URL excluded from with 'eager' updates (#43421) | | fix - 772e08d14e | fix Router's public API for canceledNavigationResolution (#43842) | | fix - ccb09b4558 | null/undefined routerLink should disable navigation (#43087) | | fix - 9e039ca68b | Only trigger router navigation on popstate events from Location subscription (#43328) | | fix - c5d0bd4966 | Prevent URL flicker when new navigations cancel ongoing ones (#43496) | | fix - adc68b100b | reuse route strategy fix (#43791) | | refactor - 361273fad5 | remove support for loadChildren string syntax (#43591) |

service-worker

| Commit | Description | | -- | -- | | feat - 59225f5586 | SwUpdate#activeUpdate and SwUpdate#checkForUpdate should have a meaningful outcome (#43668) | | feat - 0dc45446fe | expose more version update events (#43668) |

Special Thanks

Ahmed Ayed, Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Bjarki, Charles Lyding, Dmitrij Kuba, Doug Parker, Dylan Hunn, George Kalpakas, Jessica Janiuk, Jochen Kraushaar, Joe Martin (Crowdstaffing), Joey Perrott, Jon Rimmer, JoostK, Kristiyan Kostadinov, Maximilian Kรถller, Paul Gschwendtner, Pei Wang, Pete Bacon Darwin, Tomasz Domaล„ski, Willy Schott, anandtiwary, dario-piotrowicz, iRealNirmal, ivanwonder, krzysztof-grzybek, mgechev and vthinkxie