( injector: EnvironmentInjector, route: Route, segments: UrlSegment[], urlSerializer: UrlSerializer, abortSignal?: AbortSignal, )
| 228 | } |
| 229 | |
| 230 | export function runCanLoadGuards( |
| 231 | injector: EnvironmentInjector, |
| 232 | route: Route, |
| 233 | segments: UrlSegment[], |
| 234 | urlSerializer: UrlSerializer, |
| 235 | abortSignal?: AbortSignal, |
| 236 | ): Observable<boolean> { |
| 237 | const canLoad = route.canLoad; |
| 238 | if (canLoad === undefined || canLoad.length === 0) { |
| 239 | return of(true); |
| 240 | } |
| 241 | |
| 242 | const canLoadObservables = canLoad.map((injectionToken: any) => { |
| 243 | const guard = getTokenOrFunctionIdentity<any>(injectionToken, injector); |
| 244 | const guardVal = isCanLoad(guard) |
| 245 | ? guard.canLoad(route, segments) |
| 246 | : runInInjectionContext(injector, () => (guard as CanLoadFn)(route, segments)); |
| 247 | const obs$ = wrapIntoObservable(guardVal); |
| 248 | return abortSignal ? obs$.pipe(takeUntilAbort(abortSignal)) : obs$; |
| 249 | }); |
| 250 | |
| 251 | return of(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer)); |
| 252 | } |
| 253 | |
| 254 | function redirectIfUrlTree(urlSerializer: UrlSerializer): OperatorFunction<GuardResult, boolean> { |
| 255 | return pipe( |
no test coverage detected
searching dependent graphs…