From 08ff4107b9b3c63c3cb4fafef9fde09f6ebf8f24 Mon Sep 17 00:00:00 2001 From: Jay McDoniel <jmcdo29@gmail.com> Date: Thu, 7 Mar 2024 11:25:38 -0800 Subject: [PATCH 1/2] fix: use strict false when getting guard providers --- packages/or-guard/src/lib/and.guard.ts | 10 ++++++---- packages/or-guard/src/lib/or.guard.ts | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/or-guard/src/lib/and.guard.ts b/packages/or-guard/src/lib/and.guard.ts index c1cc699..3d04ae1 100644 --- a/packages/or-guard/src/lib/and.guard.ts +++ b/packages/or-guard/src/lib/and.guard.ts @@ -24,16 +24,18 @@ interface AndGuardOptions { export function AndGuard( guards: Array<Type<CanActivate> | InjectionToken>, - orGuardOptions?: AndGuardOptions + andGuardOptions?: AndGuardOptions ) { class AndMixinGuard implements CanActivate { private guards: CanActivate[] = []; constructor(@Inject(ModuleRef) private readonly modRef: ModuleRef) {} canActivate(context: ExecutionContext): Observable<boolean> { - this.guards = guards.map((guard) => this.modRef.get(guard)); + this.guards = guards.map((guard) => + this.modRef.get(guard, { strict: false }) + ); const canActivateReturns: Array<() => Observable<boolean>> = this.guards.map((guard) => () => this.deferGuard(guard, context)); - const mapOperator = orGuardOptions?.sequential ? concatMap : mergeMap; + const mapOperator = andGuardOptions?.sequential ? concatMap : mergeMap; return from(canActivateReturns).pipe( mapOperator((obs) => { return obs().pipe(this.handleError()); @@ -61,7 +63,7 @@ export function AndGuard( private handleError(): OperatorFunction<boolean, boolean> { return catchError((err) => { - if (orGuardOptions?.throwOnFirstError) { + if (andGuardOptions?.throwOnFirstError) { return throwError(() => err); } return of(false); diff --git a/packages/or-guard/src/lib/or.guard.ts b/packages/or-guard/src/lib/or.guard.ts index 7f984c2..17fedf7 100644 --- a/packages/or-guard/src/lib/or.guard.ts +++ b/packages/or-guard/src/lib/or.guard.ts @@ -29,7 +29,9 @@ export function OrGuard( private guards: CanActivate[] = []; constructor(@Inject(ModuleRef) private readonly modRef: ModuleRef) {} canActivate(context: ExecutionContext): Observable<boolean> { - this.guards = guards.map((guard) => this.modRef.get(guard)); + this.guards = guards.map((guard) => + this.modRef.get(guard, { strict: false }) + ); const canActivateReturns: Array<Observable<boolean>> = this.guards.map( (guard) => this.deferGuard(guard, context) ); From 797228195b228bc3ed4975792e6ed918b9f622b0 Mon Sep 17 00:00:00 2001 From: Jay McDoniel <jmcdo29@gmail.com> Date: Thu, 7 Mar 2024 11:26:33 -0800 Subject: [PATCH 2/2] chore: changeset for or-guard patch --- .changeset/polite-planes-invite.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/polite-planes-invite.md diff --git a/.changeset/polite-planes-invite.md b/.changeset/polite-planes-invite.md new file mode 100644 index 0000000..3dd8d7f --- /dev/null +++ b/.changeset/polite-planes-invite.md @@ -0,0 +1,6 @@ +--- +'@nest-lab/or-guard': patch +--- + +Use `{strict: false}` when calling modRef.get() to ensure guards can come from +other modules