{"version":3,"file":"ngx-serial-route-guards.mjs","sources":["../../../projects/ngx-serial-route-guards/src/lib/internal/utils.ts","../../../projects/ngx-serial-route-guards/src/lib/ngx-serial-route-guards.ts","../../../projects/ngx-serial-route-guards/src/ngx-serial-route-guards.ts"],"sourcesContent":["import { EMPTY, Observable, from, isObservable, of } from 'rxjs';\r\n\r\nexport const wrapIntoObservable = <T>(\r\n  input: Promise<T> | Observable<T> | T\r\n): Observable<T> => {\r\n  if (input === null || input === undefined) {\r\n    return EMPTY;\r\n  }\r\n  if (isPromise(input)) {\r\n    return from(input);\r\n  }\r\n  if (isObservable(input)) {\r\n    return input;\r\n  }\r\n  return of(input);\r\n};\r\n\r\nexport const isPromise = (obj: any): obj is Promise<unknown> =>\r\n  !!obj && obj instanceof Promise;\r\n","import {\r\n  inject,\r\n  EnvironmentInjector,\r\n  runInInjectionContext,\r\n} from '@angular/core';\r\nimport {\r\n  CanActivateFn,\r\n  CanActivateChildFn,\r\n  ActivatedRouteSnapshot,\r\n  RouterStateSnapshot,\r\n  CanDeactivateFn,\r\n  CanMatchFn,\r\n  Route,\r\n  UrlSegment,\r\n} from '@angular/router';\r\nimport { concat, takeWhile, last } from 'rxjs';\r\nimport { wrapIntoObservable } from './internal/utils';\r\n\r\n/**\r\n * Runs the CanActivateFn route guards serially.\r\n * @param guards Route guards to be run serially.\r\n * @returns An observable that resolves to true if all guards are valid. Otherwise it returns the value from the first guard that failed.\r\n */\r\nexport const canActivateSerially =\r\n  (guards: CanActivateFn[] | CanActivateChildFn[]) =>\r\n  (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\r\n    const injector = inject(EnvironmentInjector);\r\n    const guardResults = [];\r\n    for (const guard of guards) {\r\n      guardResults.push(\r\n        wrapIntoObservable(\r\n          runInInjectionContext(injector, () => guard(route, state))\r\n        )\r\n      );\r\n    }\r\n\r\n    return concat(...guardResults).pipe(\r\n      takeWhile((v) => typeof v === 'boolean' && v.valueOf() === true, true),\r\n      last()\r\n    );\r\n  };\r\n\r\n/**\r\n * Runs the CanMatchFn route guards serially.\r\n * @param guards Route guards to be run serially.\r\n * @returns An observable that resolves to true if all guards are valid. Otherwise it returns the value from the first guard that failed.\r\n */\r\nexport const canMatchSerially =\r\n  (guards: CanMatchFn[]) => (route: Route, segments: UrlSegment[]) => {\r\n    const injector = inject(EnvironmentInjector);\r\n    const guardResults = [];\r\n    for (const guard of guards) {\r\n      guardResults.push(\r\n        wrapIntoObservable(\r\n          runInInjectionContext(injector, () => guard(route, segments))\r\n        )\r\n      );\r\n    }\r\n\r\n    return concat(...guardResults).pipe(\r\n      takeWhile((v) => typeof v === 'boolean' && v.valueOf() === true, true),\r\n      last()\r\n    );\r\n  };\r\n\r\n/**\r\n * Runs the CanDeactivateFn route guards serially.\r\n * @param guards Route guards to be run serially.\r\n * @returns An observable that resolves to true if all guards are valid. Otherwise it returns the value from the first guard that failed.\r\n */\r\nexport const canDeactivateSerially =\r\n  <TComponent>(guards: CanDeactivateFn<TComponent>[]) =>\r\n  (\r\n    component: TComponent,\r\n    currentRoute: ActivatedRouteSnapshot,\r\n    currentState: RouterStateSnapshot,\r\n    nextState: RouterStateSnapshot\r\n  ) => {\r\n    const injector = inject(EnvironmentInjector);\r\n    const guardResults = [];\r\n    for (const guard of guards) {\r\n      guardResults.push(\r\n        wrapIntoObservable(\r\n          runInInjectionContext(injector, () =>\r\n            guard(component, currentRoute, currentState, nextState)\r\n          )\r\n        )\r\n      );\r\n    }\r\n\r\n    return concat(...guardResults).pipe(\r\n      takeWhile((v) => typeof v === 'boolean' && v.valueOf() === true, true),\r\n      last()\r\n    );\r\n  };\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAEO,MAAM,kBAAkB,GAAG,CAChC,KAAqC,KACpB;IACjB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,QAAA,OAAO,KAAK;;AAEd,IAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC;;AAEpB,IAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,KAAK;;AAEd,IAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AAClB,CAAC;AAEM,MAAM,SAAS,GAAG,CAAC,GAAQ,KAChC,CAAC,CAAC,GAAG,IAAI,GAAG,YAAY,OAAO;;ACAjC;;;;AAIG;AACI,MAAM,mBAAmB,GAC9B,CAAC,MAA8C,KAC/C,CAAC,KAA6B,EAAE,KAA0B,KAAI;AAC5D,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC5C,MAAM,YAAY,GAAG,EAAE;AACvB,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,YAAY,CAAC,IAAI,CACf,kBAAkB,CAChB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAC3D,CACF;;AAGH,IAAA,OAAO,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CACjC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EACtE,IAAI,EAAE,CACP;AACH;AAEF;;;;AAIG;AACI,MAAM,gBAAgB,GAC3B,CAAC,MAAoB,KAAK,CAAC,KAAY,EAAE,QAAsB,KAAI;AACjE,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC5C,MAAM,YAAY,GAAG,EAAE;AACvB,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,YAAY,CAAC,IAAI,CACf,kBAAkB,CAChB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC9D,CACF;;AAGH,IAAA,OAAO,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CACjC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EACtE,IAAI,EAAE,CACP;AACH;AAEF;;;;AAIG;AACU,MAAA,qBAAqB,GAChC,CAAa,MAAqC,KAClD,CACE,SAAqB,EACrB,YAAoC,EACpC,YAAiC,EACjC,SAA8B,KAC5B;AACF,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC5C,MAAM,YAAY,GAAG,EAAE;AACvB,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,YAAY,CAAC,IAAI,CACf,kBAAkB,CAChB,qBAAqB,CAAC,QAAQ,EAAE,MAC9B,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CACxD,CACF,CACF;;AAGH,IAAA,OAAO,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CACjC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EACtE,IAAI,EAAE,CACP;AACH;;AC9FF;;AAEG;;;;"}