Angular checkup
orientdbstudio
Overview
Top priorities
- HighAngularJS 1.5.9 is end of life since January 2022 AngularJS migration
- HighAngular 4 is 18 majors behind 22 and out of support Angular version & tooling
- High
@angular/httpis end of life Angular version & tooling - High
angular2-tag-input1.2.3 does not accept Angular 4 Third-party compatibility - High
ng2-bs3-modal0.10.4 does not accept Angular 4 Third-party compatibility
Migration plan: AngularJS 1.5.9 → Angular 22
4 phases, each shipping on its own, in the order of the Angular upgrade guide: prepare on AngularJS, run both frameworks side by side, move the code bottom up, remove AngularJS.
-
1Prepare on AngularJS
The AngularJS code is made of components and services, written the way Angular expects them; it still ships on AngularJS alone.
- Upgrade AngularJS to 1.8.3
npm install angular@1.8.3 angular-animate@1.8.3 angular-resource@1.8.3 angular-route@1.8.3 angular-sanitize@1.8.3The last release; read the migration notes of each minor on the way.
- Bring TypeScript into the AngularJS code 35
Rename the files to
.ts, add@types/angular, and tighten types file by file. Services written in TypeScript move to Angular almost unchanged. - Turn controllers into components 88
Explicit bindings instead of an inherited scope, and no more
ng-controllerin templates (83). Only components cross the border between the two frameworks. - Reshape directives that use
compile,replaceorterminal5UpgradeComponentcannot wrap them. - Move state off
$scope20controllerAsandbindToController, so the controller is the component class it will become. - Replace scope events with services 64
A service with an RxJS
Subjectinstead of$broadcast/$emit; it later carries the messages across the border. - Turn
ng-includetemplates into components 27
- Upgrade AngularJS to 1.8.3
-
2Hybrid setup
Both frameworks run on one page, and new features are written in Angular.
- Bring the Angular side up to 22 18
New code should be written on a current Angular. The upgrade plan below lists each
ng updatestep;@angular/upgrademoves with@angular/core. - Let the two routers share the URL 25
ngRoute keeps the AngularJS routes, the Angular Router takes over route by route;
setUpLocationSyncfrom@angular/router/upgradekeeps both in step.
- Bring the Angular side up to 22 18
-
3Move piece by piece, bottom up
Every service, component and template is Angular code; each step ships on its own.
- Move services to Angular, oldest dependencies first 33
Each becomes an
@Injectableand stays available to AngularJS throughdowngradeInjectableuntil its last AngularJS user is gone. - Turn filters into pipes 16
- Move components and directives, leaves first 115
A rewritten component is used from AngularJS through
downgradeComponent; an AngularJS component still needed inside Angular is wrapped withUpgradeComponentfor the time being. - Rewrite the templates in Angular syntax 178
ng-repeatbecomes@for,ng-ifbecomes@if,ng-modelbecomes a form control or a model input,ng-clickan event binding. - Replace runtime
$compilewith dynamic components 4 - Replace
$watchwith signals 85computedfor derived values,effector an input for reactions. - Replace
angular-routeWith the Angular Router.
- Replace
angular-resourceWith
HttpClient. - Replace
angular-animateWith CSS transitions, or
@angular/animations. - Replace
angular-sanitizeWith Angular's built-in sanitization.
- Replace
angular-translateWith
@ngx-translate/core, or@angular/localize. - Replace
angular-strapWith
@ng-bootstrap/ng-bootstraporngx-bootstrap.
- Move services to Angular, oldest dependencies first 33
-
4Remove AngularJS
One framework, one build, one change detection.
- Move the last routes to the Angular router 25
- Remove the downgrade and upgrade wrappers 30
Nothing on the AngularJS side uses them any more.
- Bootstrap Angular alone and uninstall AngularJS
npm uninstall angular @angular/upgrade angular-animate angular-resource angular-route angular-sanitize angular-translate angular-strapDrop
UpgradeModuleand the AngularJS bootstrap; the bundle loses AngularJS and the second change detection.
Upgrade plan: Angular 4 → 22
18 steps, one major at a time, as ng update requires. Requirements come from each version's published package metadata.
- Fix angular2-tag-input: version 1.2.3 does not accept Angular 4
It declares @angular/core 2.2.4.
- Fix ng2-bs3-modal: version 0.10.4 does not accept Angular 4
npm install ng2-bs3-modal@0.11.5Version 0.11.5 does.
- Fix ng2-select2: version 1.0.0-beta.10 does not accept Angular 4
It declares @angular/core ^2.2.0.
- Fix ng2-tag-input: version 0.8.8 does not accept Angular 4
npm install ng2-tag-input@1.0.2Version 1.0.2 does.
-
→ 5Angular 5.2.11
ng update @angular/core@5 @angular/cli@5TypeScript >=2.4.2 <2.7RxJS ^5.5.0zone.js ^0.8.4 (now 0.7.8)
- ng2-codemirror has no release for Angular 5
Replace it before this step, or stop the upgrade at the last major it supports.
- ng2-codemirror has no release for Angular 5
-
→ 6Angular 6.1.10
ng update @angular/core@6 @angular/cli@6TypeScript >=2.7.2 <2.10 (now 2.5.3)RxJS ^6.0.0 (now 5.5.2)zone.js ~0.8.26
-
→ 7Angular 7.2.15
ng update @angular/core@7 @angular/cli@7TypeScript >=3.1.1 <3.3RxJS ^6.0.0zone.js ~0.8.26
-
→ 8Angular 8.2.14
ng update @angular/core@8 @angular/cli@8TypeScript >=3.4 <3.6RxJS ^6.4.0zone.js ~0.9.1
-
→ 9Angular 9.1.13
ng update @angular/core@9 @angular/cli@9TypeScript >=3.6 <3.9RxJS ^6.5.3zone.js ~0.10.3
-
→ 10Angular 10.2.5
ng update @angular/core@10 @angular/cli@10TypeScript >=3.9 <4.1RxJS ^6.5.3zone.js ~0.10.3
-
→ 11Angular 11.2.14
ng update @angular/core@11 @angular/cli@11TypeScript >=4.0 <4.2RxJS ^6.5.3zone.js ^0.10.2 || ^0.11.3
-
→ 12Angular 12.2.17
ng update @angular/core@12 @angular/cli@12Node.js ^12.14.1 || >=14.0.0TypeScript >=4.2.3 <4.4RxJS ^6.5.3 || ^7.0.0zone.js ~0.11.4
-
→ 13Angular 13.4.0
ng update @angular/core@13 @angular/cli@13Node.js ^12.20.0 || ^14.15.0 || >=16.10.0TypeScript >=4.4.2 <4.7RxJS ^6.5.3 || ^7.4.0zone.js ~0.11.4
-
→ 14Angular 14.3.0
ng update @angular/core@14 @angular/cli@14Node.js ^14.15.0 || >=16.10.0TypeScript >=4.6.2 <4.9RxJS ^6.5.3 || ^7.4.0zone.js ~0.11.4 || ~0.12.0
-
→ 15Angular 15.2.10
ng update @angular/core@15 @angular/cli@15Node.js ^14.20.0 || ^16.13.0 || >=18.10.0TypeScript >=4.8.2 <5.0RxJS ^6.5.3 || ^7.4.0zone.js ~0.11.4 || ~0.12.0 || ~0.13.0
-
→ 16Angular 16.2.12
ng update @angular/core@16 @angular/cli@16Node.js ^16.14.0 || >=18.10.0TypeScript >=4.9.3 <5.2RxJS ^6.5.3 || ^7.4.0zone.js ~0.13.0
- Convert NgModule components to standalone 61
ng generate @angular/core:standaloneThree passes: convert declarations, remove unneeded NgModules, switch to standalone bootstrap.
- Convert NgModule components to standalone 61
-
→ 17Angular 17.3.12
ng update @angular/core@17 @angular/cli@17Node.js ^18.13.0 || >=20.9.0TypeScript >=5.2 <5.5RxJS ^6.5.3 || ^7.4.0zone.js ~0.14.0
- Move templates to built-in control flow 249
ng generate @angular/core:control-flow
- Move templates to built-in control flow 249
-
→ 18Angular 18.2.14
ng update @angular/core@18 @angular/cli@18Node.js ^18.19.1 || ^20.11.1 || >=22.0.0TypeScript >=5.4 <5.6RxJS ^6.5.3 || ^7.4.0zone.js ~0.14.10
-
→ 19Angular 19.2.25
ng update @angular/core@19 @angular/cli@19Node.js ^18.19.1 || ^20.11.1 || >=22.0.0TypeScript >=5.5 <5.9RxJS ^6.5.3 || ^7.4.0zone.js ~0.15.0
- Convert @Input() and @Output() to signal inputs and outputs 103
ng generate @angular/core:signal-input-migration && ng generate @angular/core:output-migration
- Convert @Input() and @Output() to signal inputs and outputs 103
-
→ 20Angular 20.3.34
ng update @angular/core@20 @angular/cli@20Node.js ^20.19.0 || ^22.12.0 || >=24.0.0TypeScript >=5.8 <6.0RxJS ^6.5.3 || ^7.4.0zone.js ~0.15.0
-
→ 21Angular 21.2.25
ng update @angular/core@21 @angular/cli@21Node.js ^20.19.0 || ^22.12.0 || >=24.0.0TypeScript >=5.9 <6.1RxJS ^6.5.3 || ^7.4.0zone.js ~0.15.0 || ~0.16.0
- Move unit tests from Karma to Vitest
Vitest is the Angular CLI default from 21 (@angular/build:unit-test). Jasmine-specific calls (spyOn, jasmine.*) need rewriting.
- Prepare for zoneless: move components to OnPush, then drop zone.js 61
Upgraded apps keep zone.js through provideZoneChangeDetection() until it is removed.
- Move unit tests from Karma to Vitest
-
→ 22Angular 22.2.3
ng update @angular/core@22 @angular/cli@22Node.js ^22.22.3 || ^24.15.0 || >=26.0.0TypeScript >=6.0 <6.1RxJS ^6.5.3 || ^7.4.0zone.js ~0.15.0 || ~0.16.0
AngularJS migration
PoorHybrid AngularJS 1.5.9 and Angular 4: 35% of components on Angular, 115 AngularJS components left.
- AngularJS
- 1.5.9
- node_modules or lockfile
- Mode
- Hybrid (UpgradeModule)
- Components left
- 115
- 4 components, 23 directives, 88 controllers
- Services left
- 33
- and 16 filters
- Templates
- 178
- with AngularJS syntax
- Migrated
- 35%
- 61 of 176 components on Angular
-
HighAngularJS 1.5.9 is end of life since January 2022
Google ended AngularJS support on 31 December 2021: no security fixes, no fixes for new browsers, only paid third-party extended support. Nothing in AngularJS carries over to Angular; every controller, directive, service and template is rewritten or wrapped, which is why the migration goes piece by piece, with both frameworks running side by side in between.
-
LowMove to AngularJS 1.8 before anything else (now 1.5.9)
1.8 is the last release. The steps from 1.5 are small and remove the deprecated behaviour (such as
$httpsuccess/error callbacks) that the migration would otherwise carry along. -
Medium88 controllers registered with
.controller(), 83 bound withng-controllerA controller lives in a template or a route, and ngUpgrade bridges neither: only components and component-like directives can be upgraded to Angular or downgraded from it. Turning each controller into a
.component()with explicit bindings is the first step of every migration path, and it ships on AngularJS alone.- src/controllers/aside-controller.js:7
- src/controllers/aside-controller.js:13
- src/controllers/configuration-controller.js:20
- src/controllers/configuration-controller.js:68
- src/controllers/configuration-controller.js:180
- and 83 more
-
Medium5 directives use
compile,replaceorterminalUpgradeComponentrefuses these features (it throws "unsupported feature"), so these directives cannot be wrapped for use in Angular; they are rewritten, or reshaped as components first.replace: truehas been deprecated since AngularJS 1.3.- src/directives/tabset.js:7
- src/directives/tabset.js:54
- src/directives/ui-codemirror.js:28
- src/directives/widget.js:433
- src/directives/widget.js:525
-
Medium
$scopein 20 filesAngular has no scope. State kept on
$scopemoves to the controller (controllerAs,bindToController) and to component bindings first, still on AngularJS; what remains is what the Angular version of each file has to redesign.- src/components/schema/classesList.js:9
- src/components/schema/edge/newEdgeModal.js:4
- src/components/schema/generic/newGenericModal.js:4
- src/components/schema/vertex/newVertexModal.js:4
- src/controllers/aside-controller.js:7
- and 15 more
-
Medium64 scope events (
$broadcast,$emit,$rootScope.$on) used as a message busAn event reaches whatever listens anywhere in the scope tree, invisible to the code that sends it, and in a hybrid app it stops at the framework border. A shared service with an RxJS
Subject, made available to AngularJS withdowngradeInjectable, carries the same messages to both sides.- src/app-legacy.js:185
- src/app.config.js:162
- src/controllers/aside-controller.js:16
- src/controllers/database-controller.js:754
- src/controllers/document-controller.js:165
- and 10 more
-
Medium4 runtime
$compilecallsTemplates compiled at runtime have no direct Angular equivalent, since Angular compiles ahead of time and needs its components known at build time. These usually become dynamic components (
ViewContainerRef.createComponent), or a redesign.- src/directives/graph.js:148
- src/directives/widget.js:157
-
Low85
$watchcallsEach becomes a
computedsignal, aneffect, or an input that reacts to change. A deep watch ($watch(…, true)) usually points at shared mutable state, which is worth untangling before the move rather than during it.- src/controllers/configuration-controller.js:77
- src/controllers/database-controller.js:86
- src/controllers/ee-controller.js:154
- src/controllers/function-controller.js:145
- src/controllers/graph-controller.js:542
- and 7 more
-
Low
ng-includein 25 templatesA template pulled in at runtime shares the scope of its parent, so its real inputs are whatever it happens to read. Each becomes a component with explicit inputs.
- src/index.html
- src/views/database/auditing.html
- src/views/database/browse.html
- src/views/database/config/configuration.html
- src/views/database/configuration.html
- and 20 more
-
Medium6 AngularJS packages to replace
angular-route: the Angular Router;angular-resource:HttpClient;angular-animate: CSS transitions, or@angular/animations;angular-sanitize: Angular's built-in sanitization;angular-translate:@ngx-translate/core, or@angular/localize;angular-strap:@ng-bootstrap/ng-bootstraporngx-bootstrap. -
NoteHybrid app on
UpgradeModule: 35% of components on Angular61 Angular components and 115 AngularJS components, directives and controllers. Across the border: 14 downgraded and 0 upgraded components, 16 downgraded and 0 upgraded services.
Angular version & tooling
PoorAngular 4.4.6, 18 majors behind 22.
- Installed
- 4.4.6
- package-lock.json
- Latest
- 22
- npm registry
- Majors behind
- 18
- Build system
- unknown
-
HighAngular 4 is 18 majors behind 22 and out of support
Angular supports each major for 18 months, so only the newest three get fixes; 4 receives no security patches.
ng updatemoves one major at a time, which makes this 18 sequential upgrade steps, each with its own migrations to review. -
High
@angular/httpis end of lifeRemoved in Angular 8. Replaced by
HttpClientfrom@angular/common/http.
Deprecated APIs
GoodNothing deprecated as of Angular 4 is in use; APIs deprecated in later versions surface at each upgrade step.
- Deprecated symbols
- 0
- Files affected
- 0
- Legacy template directives
- 249
- not deprecated in this version
Third-party compatibility
Poor6 packages depend on Angular: 1 blocking the upgrade to 22, 4 not accepting the current version.
- Depend on Angular
- 6
- third-party packages
- Block the upgrade
- 1
- to Angular 22
- Peer mismatches
- 4
- with Angular 4
- Deprecated on npm
- 2
-
High
angular2-tag-input1.2.3 does not accept Angular 4It declares
@angular/core2.2.4, so it was installed with --force, --legacy-peer-deps or an override, and it may fail at runtime in ways no build catches. No release accepts Angular 4 yet (latest 1.2.3). -
High
ng2-bs3-modal0.10.4 does not accept Angular 4It declares
@angular/core^2.0.0, so it was installed with --force, --legacy-peer-deps or an override, and it may fail at runtime in ways no build catches. Version 0.11.5 supports Angular 4. -
High
ng2-select21.0.0-beta.10 does not accept Angular 4It declares
@angular/core^2.2.0, so it was installed with --force, --legacy-peer-deps or an override, and it may fail at runtime in ways no build catches. No release accepts Angular 4 yet (latest 1.0.0-beta.16). -
High
ng2-tag-input0.8.8 does not accept Angular 4It declares
@angular/core^2.4.0, so it was installed with --force, --legacy-peer-deps or an override, and it may fail at runtime in ways no build catches. Version 1.0.2 supports Angular 4. -
High
ng2-codemirror1.1.3 supports Angular up to 4: it blocks the step to 5It declares
@angular/core^2.1.0 || ^4.0.0. No release supports Angular 22 yet (latest 1.1.3): plan to replace it, or to stop at the last major it supports. -
Medium
ng2-bootstrapis deprecated on npmng2-bootstrap is renamed to ngx-bootstrap, please do npm i ngx-bootstrap -S
-
Medium
ng2-tag-inputis deprecated on npmThis package has been renamed to 'ngx-chips'. Please install it instead.
Change detection & zoneless readiness
PoorRuns on zone.js; 0% of 61 components use OnPush.
- Mode
- zone.js
- OnPush
- 0%
- 0 of 61 components
- Files injecting NgZone
- 28
- Zone test helpers
- 0
-
NoteZoneless change detection needs Angular 20.2 or newer
Upgrade first; OnPush coverage is the preparation that pays off now.
-
Medium61 components use eager change detection (100%)
Without
changeDetection: ChangeDetectionStrategy.OnPusha component is checked on every change detection cycle and usually relies on zone.js to notice mutations. These are the components to review before going zoneless.- src/app/administration/dashboard.component.ts:43
- src/app/administration/etl/etl.component.ts:12
- src/app/administration/importmanager/importmanager.component.ts:10
- src/app/administration/neo4jimporter/neo4jimporter.component.ts:11
- src/app/administration/newsbox/newsbox.component.ts:11
- and 56 more
-
Low28 files inject
NgZoneZoneless,
NgZoneis still injectable butrun()no longer triggers change detection andrunOutsideAngular()no longer saves any. Code that relied on either needs a signal or an explicitmarkForCheck()instead.- src/app/administration/dashboard.component.ts:1
- src/app/administration/etl/etl.component.ts:2
- src/app/administration/neo4jimporter/neo4jimporter.component.ts:1
- src/app/administration/stats/backup/backup.component.ts:1
- src/app/administration/stats/backup/calendar.component.ts:1
- and 23 more
Components & templates
Poor61 components: 0% standalone, 0% signal inputs, 0% built-in control flow.
- Components
- 61
- Standalone
- 0%
- 1 NgModules
- Signal inputs
- 0%
- 0 of 90
- Signal outputs
- 0%
- 0 of 13
- Built-in control flow
- 0%
- 0 of 249 blocks
- @defer blocks
- 0
-
Medium61 components still declared in NgModules (1 NgModule in total)
Standalone components are the default since Angular 19 and what every new API assumes.
ng generate @angular/core:standaloneconverts declarations, removes the emptied NgModules and switches bootstrapping, in three passes that can be reviewed one at a time.- src/app/administration/dashboard.component.ts:43
- src/app/administration/etl/etl.component.ts:12
- src/app/administration/importmanager/importmanager.component.ts:10
- src/app/administration/neo4jimporter/neo4jimporter.component.ts:11
- src/app/administration/newsbox/newsbox.component.ts:11
- and 56 more
-
Medium90
@Input()decorators and 13@Output()decorators leftSignal inputs (
input()) make inputs readable incomputed()and effects withoutngOnChanges, and are what zoneless change detection tracks.ng generate @angular/core:signal-input-migrationandng generate @angular/core:output-migrationconvert most of them; the rest are usually inputs written to from inside the component. -
Low249 uses of
*ngIf,*ngForand[ngSwitch]Built-in control flow (
@if,@for,@switch) is available from Angular 17.ng generate @angular/core:control-flowmigrates most templates automatically.
State management
InfoNo state-management library or signal usage found.
- Classic NgRx files
- 0
- Signal store files
- 0
- signal() / computed()
- 0
- 0 toSignal()
- BehaviorSubject services
- 0
Architecture
FairNo routes found, 3 files over 500 lines, 66 classes with constructor injection.
- Lazy routes
- 0%
- 0 of 0
- Large files
- 3
- over 500 lines
- Constructor injection
- 66
- classes; 0 inject() calls
- Class guards
- 0
- and interceptors
- Hotspots
- -
- shallow clone: no history (fetch-depth: 0)
-
Medium3 files over 500 lines, 1 over 1 000
The largest: etl.component.ts (1 665), OGraph.ts (805), detailpanel.component.ts (609). Files this size usually hold several responsibilities; they are where changes collide and where a refactor pays back first.
- src/app/administration/etl/etl.component.ts
- src/app/util/graph/d3-graph/OGraph.ts
- src/app/administration/teleporter/detailpanel/detailpanel.component.ts
-
Low66 classes inject through the constructor
inject()is the current default (0 calls already in the code). It works in field initialisers and functions, and it is what signal-based code expects.ng generate @angular/core:injectmigrates constructors automatically.- src/app/administration/dashboard.component.ts:57
- src/app/administration/etl/etl.component.ts:77
- src/app/administration/importmanager/importmanager.component.ts:35
- src/app/administration/neo4jimporter/neo4jimporter.component.ts:35
- src/app/administration/newsbox/newsbox.component.ts:31
- and 61 more
Testing
PoorKarma, 0 spec files, 0% of components and services with a spec.
- Unit-test runner
- Karma
- Spec files
- 0
- With a spec
- 0%
- 0 of 80 component/service files
- End-to-end
- none
-
HighUnit tests run on Karma, which is deprecated
Karma was deprecated in 2023 and receives no further development. Vitest is the Angular CLI's default runner since v21 (
@angular/build:unit-test). With no specs written yet, moving costs only the configuration, and the first specs can be written for Vitest directly. -
HighNo unit tests found
80 component and service files without a single spec. Every refactoring and upgrade step is verified by hand.
-
NoteNo end-to-end test setup found
Neither Playwright nor Cypress is a dependency. A handful of smoke tests over the main flows is the cheapest safety net for an upgrade.
Type safety
PoorstrictNullChecks off, strictTemplates off, 201 explicit any.
- strictNullChecks
- off
- strictTemplates
- off
- default in Angular 4
- noImplicitAny
- off
- default in TypeScript 2
- Explicit any
- 201
- 20.1 per 1 000 lines
- Non-null assertions
- 0
-
High
strictNullChecksis offEvery value that may be
nullorundefinedis typed as if it never is, so the most common runtime error in an Angular app is invisible to the compiler. In a large codebase switching it on is staged: a separate tsconfig that checks one folder at a time, with a count that may only go down. -
High
strictTemplatesis offTemplate bindings are only loosely type-checked: a wrong input type, a misspelled output payload or a possibly-undefined value passed to a component compiles and fails at runtime. Turning it on typically surfaces a batch of real bugs alongside the type noise.
-
Medium
noImplicitAnyis offAn unannotated parameter silently becomes
any, and no lint rule that counts the wordanycan see it. -
Medium201 explicit
anyin application code (20.1 per 1 000 lines)Files with the most are listed first. Each
anyswitches type checking off for everything that flows through it.- src/app/util/dual-list/dual-list.component.ts:4
- src/app/administration/etl/etl.component.ts:10
- src/app/administration/stats/cluster/overview/clusterstats.component.ts:37
- src/app/administration/stats/security/ldap/ldapimporter.component.ts:16
- src/app/administration/stats/security/auditing/auditingcfg.component.ts:10
- and 75 more
Security
PoorNo sanitizer bypasses, direct DOM HTML writes or eval in 141 files; 3 sanitized [innerHTML] bindings; 62 known vulnerabilities in dependencies.
- Direct DOM HTML writes
- 0
- innerHTML =, insertAdjacentHTML
- Sanitizer bypasses
- 0
- bypassSecurityTrust*
- eval / new Function
- 0
- [innerHTML] bindings
- 3
- sanitized by Angular
- Known vulnerabilities
- 62
- in 92 direct dependencies checked
-
High62 known vulnerabilities in 13 dependencies (27 high or critical)
lodash4.17.4: 10 advisories (CVE-2020-28500, CVE-2021-23337, CVE-2018-16487, …), all fixed by 4.18.0;underscore1.8.3: 2 advisories (CVE-2021-23358, CVE-2026-27601), all fixed by 1.13.8;@angular/common4.4.6: 8 advisories (CVE-2026-54266, CVE-2026-54268, CVE-2025-66035, …), all fixed by 20.3.34;@angular/compiler4.4.6: 6 advisories (CVE-2026-54265, CVE-2026-50557, CVE-2026-88057, …), all fixed by 20.3.28;@angular/core4.4.6: 8 advisories (CVE-2026-52725, CVE-2021-4231, CVE-2026-50557, …), all fixed by 20.3.28;angular1.5.9: 13 advisories (CVE-2023-26117, CVE-2023-26116, CVE-2024-21490, …), some without a fixed version; and 7 more dependencies. Direct dependencies at their exact versions, from the advisories in osv.dev; the full dependency tree isnpm audit's job. -
Low3
[innerHTML]bindings in 2 templatesAngular sanitizes these, so they are safe on their own: scripts and event handlers are stripped. They become a hole only when the bound value went through
bypassSecurityTrustHtml, which is worth checking for each one.- src/app/administration/importmanager/importmanager.component.html
- src/app/administration/newsbox/newsbox.component.html
-
Low14 known vulnerabilities in development tooling
webpack-dev-server2.3.0,bootstrap3.3.7. Not shipped to users, but they run on developer machines and in CI.
Circular dependencies
GoodNo import cycles between application files.
- Tangles
- 0
- groups of files in a loop
- Files involved
- 0
- Largest tangle
- 0
- files
Bundle size
InfoNo build stats found, so the bundle size is not part of this report.
-
NoteRun
ng build --stats-json(ornx build <app> --stats-json) and re-run to include the bundle size