From 1a3257aac6d83c54d712d458d537222d2f6db8b6 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Tue, 19 Mar 2024 12:44:42 -0700 Subject: [PATCH] refactor(@schematics/angular): Use MaybeAsync and GuardResult types to reduce boilerplate This refactor uses new types in the Router to reduce boilerplate. (cherry picked from commit d05f78b414a376934b5ddccff5ae0cb8450b3fbe) --- .../__name@dasherize__.guard.ts.template | 9 ++++----- packages/schematics/angular/guard/index.ts | 2 +- packages/schematics/angular/guard/index_spec.ts | 11 ++++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/schematics/angular/guard/implements-files/__name@dasherize__.guard.ts.template b/packages/schematics/angular/guard/implements-files/__name@dasherize__.guard.ts.template index be0d1f2d3c97..918718d3e468 100644 --- a/packages/schematics/angular/guard/implements-files/__name@dasherize__.guard.ts.template +++ b/packages/schematics/angular/guard/implements-files/__name@dasherize__.guard.ts.template @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { <%= routerImports %> } from '@angular/router'; -import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -8,24 +7,24 @@ import { Observable } from 'rxjs'; export class <%= classify(name) %>Guard implements <%= implementations %> { <% if (implements.includes('CanActivate')) { %>canActivate( route: ActivatedRouteSnapshot, - state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { + state: RouterStateSnapshot): MaybeAsync { return true; } <% } %><% if (implements.includes('CanActivateChild')) { %>canActivateChild( childRoute: ActivatedRouteSnapshot, - state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { + state: RouterStateSnapshot): MaybeAsync { return true; } <% } %><% if (implements.includes('CanDeactivate')) { %>canDeactivate( component: unknown, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, - nextState?: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { + nextState?: RouterStateSnapshot): MaybeAsync { return true; } <% } %><% if (implements.includes('CanMatch')) { %>canMatch( route: Route, - segments: UrlSegment[]): Observable | Promise | boolean | UrlTree { + segments: UrlSegment[]): MaybeAsync { return true; }<% } %> } diff --git a/packages/schematics/angular/guard/index.ts b/packages/schematics/angular/guard/index.ts index 0673c4cbf440..a1a421520301 100644 --- a/packages/schematics/angular/guard/index.ts +++ b/packages/schematics/angular/guard/index.ts @@ -31,7 +31,7 @@ export default function (options: GuardOptions): Rule { .map((implement) => (implement === 'CanDeactivate' ? 'CanDeactivate' : implement)) .join(', '); const commonRouterNameImports = ['ActivatedRouteSnapshot', 'RouterStateSnapshot']; - const routerNamedImports: string[] = [...options.implements, 'UrlTree']; + const routerNamedImports: string[] = [...options.implements, 'MaybeAsync', 'GuardResult']; if (options.implements.includes(GuardInterface.CanMatch)) { routerNamedImports.push('Route', 'UrlSegment'); diff --git a/packages/schematics/angular/guard/index_spec.ts b/packages/schematics/angular/guard/index_spec.ts index e25b4349f416..ffb9fab15d2f 100644 --- a/packages/schematics/angular/guard/index_spec.ts +++ b/packages/schematics/angular/guard/index_spec.ts @@ -143,7 +143,7 @@ describe('Guard Schematic', () => { const options = { ...defaultOptions, implements: implementationOptions, functional: false }; const tree = await schematicRunner.runSchematic('guard', options, appTree); const fileString = tree.readContent('/projects/bar/src/app/foo.guard.ts'); - const expectedImports = `import { CanMatch, Route, UrlSegment, UrlTree } from '@angular/router';`; + const expectedImports = `import { CanMatch, GuardResult, MaybeAsync, Route, UrlSegment } from '@angular/router';`; expect(fileString).toContain(expectedImports); }); @@ -153,7 +153,9 @@ describe('Guard Schematic', () => { const options = { ...defaultOptions, implements: implementationOptions, functional: false }; const tree = await schematicRunner.runSchematic('guard', options, appTree); const fileString = tree.readContent('/projects/bar/src/app/foo.guard.ts'); - const expectedImports = `import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';`; + const expectedImports = + `import { ActivatedRouteSnapshot, CanActivate, GuardResult, ` + + `MaybeAsync, RouterStateSnapshot } from '@angular/router';`; expect(fileString).toContain(expectedImports); }); @@ -173,9 +175,8 @@ describe('Guard Schematic', () => { const tree = await schematicRunner.runSchematic('guard', options, appTree); const fileString = tree.readContent('/projects/bar/src/app/foo.guard.ts'); const expectedImports = - `import ` + - `{ ActivatedRouteSnapshot, CanActivate, CanActivateChild, CanMatch, Route, RouterStateSnapshot, UrlSegment, UrlTree } ` + - `from '@angular/router';`; + `import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, CanMatch, GuardResult, ` + + `MaybeAsync, Route, RouterStateSnapshot, UrlSegment } from '@angular/router';`; expect(fileString).toContain(expectedImports); });