( injector: EnvironmentInjector, route: Route, segments: UrlSegment[], urlSerializer: UrlSerializer, currentSnapshot: PartialMatchRouteSnapshot, abortSignal: AbortSignal, )
| 263 | } |
| 264 | |
| 265 | export function runCanMatchGuards( |
| 266 | injector: EnvironmentInjector, |
| 267 | route: Route, |
| 268 | segments: UrlSegment[], |
| 269 | urlSerializer: UrlSerializer, |
| 270 | currentSnapshot: PartialMatchRouteSnapshot, |
| 271 | abortSignal: AbortSignal, |
| 272 | ): Observable<GuardResult> { |
| 273 | const canMatch = route.canMatch; |
| 274 | if (!canMatch || canMatch.length === 0) return of(true); |
| 275 | |
| 276 | const canMatchObservables = canMatch.map((injectionToken) => { |
| 277 | const guard = getTokenOrFunctionIdentity(injectionToken as ProviderToken<any>, injector); |
| 278 | const guardVal = isCanMatch(guard) |
| 279 | ? guard.canMatch(route, segments, currentSnapshot) |
| 280 | : runInInjectionContext(injector, () => |
| 281 | (guard as CanMatchFn)(route, segments, currentSnapshot), |
| 282 | ); |
| 283 | return wrapIntoObservable(guardVal).pipe(takeUntilAbort(abortSignal)); |
| 284 | }); |
| 285 | |
| 286 | return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer)); |
| 287 | } |
no test coverage detected
searching dependent graphs…