You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Angular 19 is past end of support, and master is already on its final release (build-angular 19.2.27). That release pins the vulnerable versions of piscina, webpack-dev-middleware and webpack-dev-server, so Angular 19 can't pick up these fixes. Dependabot's attempts to fix them (#178, #179, #185, #206, #209, #210, #211) all fail CI: they jump the build tooling to Angular 21/22 while the app stays on 19.
This PR does the upgrade properly instead.
Supersedes
Once this merges, close these Dependabot PRs. Their security fixes are included here:
(GitHub's Closes #… keywords only close issues, not PRs, so these won't close automatically. Dependabot will likely close them itself once master no longer needs them; anything left gets closed by hand.)
Changes
Remove @angular-builders/custom-webpack. It isn't referenced anywhere (angular.json uses @angular-devkit/build-angular builders directly). It was the package pulling Dependabot PRs into major bumps.
Remove @ng-bootstrap/ng-bootstrap (and @popperjs/core). NgbModule was imported but no ng-bootstrap component is used. It only supports Angular 16 and blocked ng update. Bootstrap's CSS is still included.
Upgrade to Angular 20, with versions pinned consistently. src/tsconfig.spec.json moves from module: commonjs to es2020 to match the new moduleResolution: bundler.
Upgrade to Angular 21 with the official migrations: templates move to the @if/@for control-flow syntax, and main.ts provides zone change detection explicitly.
TypeScript stays at ~5.9.3. TypeScript 6 is outside Angular 21's supported range and turns on strict mode by default.
Verification (local, Node 22)
master (19)
this PR (21)
npm run test:ci
28/28
28/28
ng build --configuration=production
✅
✅
npm run build (incl. webpack)
✅
✅
npm audit (critical / high / total)
4 / 34 / 73
2 / 22 / 48
The esbuild, piscina, serialize-javascript, webpack-dev-middleware, tar and sigstore advisories are all cleared. Angular 21 supports CI's Node 20 (^20.19).
Reviewer checklist
Load the unpacked extension from dist and smoke-test the popup, the options page and on-page lookup. These templates went through the control-flow migration.
Check that the fxLayout rows still lay out correctly. @angular/flex-layout is abandoned at 15.0 beta but still works on 21.
Follow-ups (not in this PR)
Angular 22: needs TypeScript 6 (fix strict-null errors in background.ts and popup.component.ts), CI on Node 24, and @angular/flex-layout replaced with CSS flexbox. This clears the remaining vite and @angular/cli tooling advisories.
Remove deprecated tslint, codelyzer and protractor, which account for most of the remaining audit findings.
Next steps: Take a moment to review the security alert above. Review
the linked package source code to understand the potential risk. Ensure the
package is not malicious before proceeding. If you're unsure how to proceed,
reach out to your security team or ask the Socket team for help at
support@socket.dev.
Suggestion: Find a package that does not violate your license policy or adjust your policy to allow this package's license.
Mark the package as acceptable risk. To ignore this alert only
in this pull request, reply with the comment
@SocketSecurity ignore npm/caniuse-lite@1.0.30001817. You can
also ignore all packages with @SocketSecurity ignore-all.
To ignore an alert for all future pull requests, use Socket's Dashboard to
change the triage state of this alert.
Warn
License policy violation: npm typescript
License: LicenseRef-CC-BY-4.0-0c618849 - The applicable license policy does not permit this license (5) (package/ThirdPartyNoticeText.txt)
License: LicenseRef-W3C-Community-Final-Specification-Agreement - The applicable license policy does not permit this license (5) (package/ThirdPartyNoticeText.txt)
Next steps: Take a moment to review the security alert above. Review
the linked package source code to understand the potential risk. Ensure the
package is not malicious before proceeding. If you're unsure how to proceed,
reach out to your security team or ask the Socket team for help at
support@socket.dev.
Suggestion: Find a package that does not violate your license policy or adjust your policy to allow this package's license.
Mark the package as acceptable risk. To ignore this alert only
in this pull request, reply with the comment
@SocketSecurity ignore npm/typescript@5.9.3. You can
also ignore all packages with @SocketSecurity ignore-all.
To ignore an alert for all future pull requests, use Socket's Dashboard to
change the triage state of this alert.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@capitalone/acronym-decoder-admin-team, please review.
Why
Angular 19 is past end of support, and
masteris already on its final release (build-angular 19.2.27). That release pins the vulnerable versions of piscina, webpack-dev-middleware and webpack-dev-server, so Angular 19 can't pick up these fixes. Dependabot's attempts to fix them (#178, #179, #185, #206, #209, #210, #211) all fail CI: they jump the build tooling to Angular 21/22 while the app stays on 19.This PR does the upgrade properly instead.
Supersedes
Once this merges, close these Dependabot PRs. Their security fixes are included here:
@sigstore/core@angular/cli19 → 22sigstore@angular/cli19 → 22tar@angular/cli19 → 22piscinaserialize-javascriptwebpack-dev-middlewareesbuild(GitHub's
Closes #…keywords only close issues, not PRs, so these won't close automatically. Dependabot will likely close them itself oncemasterno longer needs them; anything left gets closed by hand.)Changes
@angular-builders/custom-webpack. It isn't referenced anywhere (angular.jsonuses@angular-devkit/build-angularbuilders directly). It was the package pulling Dependabot PRs into major bumps.@ng-bootstrap/ng-bootstrap(and@popperjs/core).NgbModulewas imported but no ng-bootstrap component is used. It only supports Angular 16 and blockedng update. Bootstrap's CSS is still included.src/tsconfig.spec.jsonmoves frommodule: commonjstoes2020to match the newmoduleResolution: bundler.@if/@forcontrol-flow syntax, andmain.tsprovides zone change detection explicitly.TypeScript stays at
~5.9.3. TypeScript 6 is outside Angular 21's supported range and turns on strict mode by default.Verification (local, Node 22)
npm run test:cing build --configuration=productionnpm run build(incl. webpack)npm audit(critical / high / total)The esbuild, piscina, serialize-javascript, webpack-dev-middleware, tar and sigstore advisories are all cleared. Angular 21 supports CI's Node 20 (
^20.19).Reviewer checklist
distand smoke-test the popup, the options page and on-page lookup. These templates went through the control-flow migration.fxLayoutrows still lay out correctly.@angular/flex-layoutis abandoned at 15.0 beta but still works on 21.Follow-ups (not in this PR)
background.tsandpopup.component.ts), CI on Node 24, and@angular/flex-layoutreplaced with CSS flexbox. This clears the remaining vite and @angular/cli tooling advisories.🤖 Generated with Claude Code