Angular checkup

ang2-conduit

Angular CLI · Angular 12.2.17 · 71 TypeScript files · 19 templates · 1 589 lines of code

Generated 2026-10-23

53/100

Overview

Top priorities

  1. HighAngular 12 is 10 majors behind 22 and out of support Angular version & tooling
  2. HighUnit tests run on Karma, which is deprecated Testing
  3. HighNo unit tests found Testing
  4. HighEnd-to-end tests use Protractor, which is end of life Testing
  5. HighstrictNullChecks is off Type safety

Upgrade plan: Angular 12 → 22

10 steps, one major at a time, as ng update requires. Requirements come from each version's published package metadata.

FirstBefore you start
  • Move from TSLint to ESLintng add @angular-eslint/schematics

    TSLint is deprecated and later versions of the Angular CLI no longer support it.

  1. → 13Angular 13.4.0
    ng update @angular/core@13 @angular/cli@13

    Node.js ^12.20.0 || ^14.15.0 || >=16.10.0TypeScript >=4.4.2 <4.7 (now 4.3.5)RxJS ^6.5.3 || ^7.4.0zone.js ~0.11.4

  2. → 14Angular 14.3.0
    ng update @angular/core@14 @angular/cli@14

    Node.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

  3. → 15Angular 15.2.10
    ng update @angular/core@15 @angular/cli@15

    Node.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

  4. → 16Angular 16.2.12
    ng update @angular/core@16 @angular/cli@16

    Node.js ^16.14.0 || >=18.10.0TypeScript >=4.9.3 <5.2RxJS ^6.5.3 || ^7.4.0zone.js ~0.13.0 (now 0.11.8)

    • Convert NgModule components to standalone 18ng generate @angular/core:standalone

      Three passes: convert declarations, remove unneeded NgModules, switch to standalone bootstrap.

  5. → 17Angular 17.3.12
    ng update @angular/core@17 @angular/cli@17

    Node.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 13ng generate @angular/core:control-flow
  6. → 18Angular 18.2.14
    ng update @angular/core@18 @angular/cli@18

    Node.js ^18.19.1 || ^20.11.1 || >=22.0.0TypeScript >=5.4 <5.6RxJS ^6.5.3 || ^7.4.0zone.js ~0.14.10

    • Switch to the esbuild application builder 1ng update @angular/cli --name use-application-builder
  7. → 19Angular 19.2.25
    ng update @angular/core@19 @angular/cli@19

    Node.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 12ng generate @angular/core:signal-input-migration && ng generate @angular/core:output-migration
  8. → 20Angular 20.3.34
    ng update @angular/core@20 @angular/cli@20

    Node.js ^20.19.0 || ^22.12.0 || >=24.0.0TypeScript >=5.8 <6.0RxJS ^6.5.3 || ^7.4.0zone.js ~0.15.0

  9. → 21Angular 21.2.25
    ng update @angular/core@21 @angular/cli@21

    Node.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 18

      Upgraded apps keep zone.js through provideZoneChangeDetection() until it is removed.

  10. → 22Angular 22.2.3
    ng update @angular/core@22 @angular/cli@22

    Node.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

Angular version & tooling

Poor

Angular 12.2.17, 10 majors behind 22.

Installed
12.2.17
package-lock.json
Latest
22
npm registry
Majors behind
10
Build system
webpack

Deprecated APIs

Good

Nothing deprecated as of Angular 12 is in use; APIs deprecated in later versions surface at each upgrade step.

Deprecated symbols
0
Files affected
0
Legacy template directives
13
not deprecated in this version

Third-party compatibility

Good

No third-party package depends on Angular.

Depend on Angular
0
third-party packages
Block the upgrade
0
to Angular 22
Peer mismatches
0
with Angular 12
Deprecated on npm
0

Change detection & zoneless readiness

Poor

Runs on zone.js; 0% of 18 components use OnPush.

Mode
zone.js
OnPush
0%
0 of 18 components
Files injecting NgZone
0
Zone test helpers
0

Components & templates

Poor

18 components: 0% standalone, 0% signal inputs, 0% built-in control flow.

Components
18
Standalone
0%
16 NgModules
Signal inputs
0%
0 of 9
Signal outputs
0%
0 of 3
Built-in control flow
0%
0 of 13 blocks
@defer blocks
0

State management

Fair

No classic NgRx, 0 signal()/computed() calls, 0 signal-store files.

Classic NgRx files
0
Signal store files
0
signal() / computed()
0
0 toSignal()
BehaviorSubject services
1

Architecture

Good

79% of 14 routes lazy, 0 files over 500 lines, 28 classes with constructor injection.

Lazy routes
79%
11 of 14
Large files
0
over 500 lines
Constructor injection
28
classes; 0 inject() calls
Class guards
7
and interceptors
Hotspots
-
shallow clone: no history (fetch-depth: 0)

Testing

Poor

Karma, 0 spec files, 0% of components and services with a spec.

Unit-test runner
Karma
Spec files
0
With a spec
0%
0 of 32 component/service files
End-to-end
Protractor

Type safety

Poor

strictNullChecks off, strictTemplates off, 13 explicit any.

strictNullChecks
off
default in TypeScript 4
strictTemplates
off
default in Angular 12
noImplicitAny
off
default in TypeScript 4
Explicit any
13
8.2 per 1 000 lines
Non-null assertions
0

Security

Poor

No sanitizer bypasses, direct DOM HTML writes or eval in 69 files; 1 sanitized [innerHTML] binding; 23 known vulnerabilities in dependencies.

Direct DOM HTML writes
0
innerHTML =, insertAdjacentHTML
Sanitizer bypasses
0
bypassSecurityTrust*
eval / new Function
0
[innerHTML] bindings
1
sanitized by Angular
Known vulnerabilities
23
in 35 direct dependencies checked

Circular dependencies

Good

No import cycles between application files.

Tangles
0
groups of files in a loop
Files involved
0
Largest tangle
0
files

Bundle size

Info

No build stats found, so the bundle size is not part of this report.