{"version":3,"file":"everllence-ngx-chain-functional-guards.mjs","sources":["../../../../libs/ngx-chain-functional-guards/src/lib/utils/rxjs.utils.ts","../../../../libs/ngx-chain-functional-guards/src/lib/chain.guard.ts","../../../../libs/ngx-chain-functional-guards/src/lib/parallelize.guard.ts","../../../../libs/ngx-chain-functional-guards/src/everllence-ngx-chain-functional-guards.ts"],"sourcesContent":["import { Observable, from, of } from 'rxjs'\n\n/**\n * Helper to transform value to an Observable\n * @param value - either a value, a promise or an observable\n * @returns an observable of the value\n */\nexport function wrapIntoObservable<T>(value: T | Promise<T> | Observable<T>): Observable<T> {\n  if (value instanceof Observable) {\n    return value\n  } else if (value instanceof Promise) {\n    return from(value)\n  } else {\n    return of(value)\n  }\n}\n","import { EnvironmentInjector, inject, runInInjectionContext } from '@angular/core'\nimport {\n  ActivatedRouteSnapshot,\n  CanActivateChildFn,\n  CanActivateFn,\n  CanDeactivateFn,\n  RouterStateSnapshot\n} from '@angular/router'\n\nimport { concatMap, first, from, last, takeWhile } from 'rxjs'\n\nimport { wrapIntoObservable } from './utils/rxjs.utils'\n\n/**\n * Chains route configured guards on canActivate, calling them after each other, waiting for each one before calling the next.\n *\n * @param guards The array of guards to process.\n * @returns The result of the first guard that returns `false` or an instance of a `UrlTree`, otherwise `true`.\n * @deprecated Use the rest parameter signature instead: `chainActivationGuards(guard1, guard2, ...)`. This overload will be removed in a future version.\n */\nexport function chainActivationGuards(guards: CanActivateFn[]): CanActivateFn\n/**\n * Chains route configured guards on canActivateChild, calling them after each other, waiting for each one before calling the next.\n *\n * @param guards The array of guards to process.\n * @returns The result of the first guard that returns `false` or an instance of a `UrlTree`, otherwise `true`.\n * @deprecated Use the rest parameter signature instead: `chainActivationGuards(guard1, guard2, ...)`. This overload will be removed in a future version.\n */\nexport function chainActivationGuards(guards: CanActivateChildFn[]): CanActivateChildFn\n\n/**\n * Chains route configured guards on canActivateChild, calling them after each other, waiting for each one before calling the next.\n *\n * @param guards The array of guards to process.\n * @returns The result of the first guard that returns `false` or an instance of a `UrlTree`, otherwise `true`.\n */\nexport function chainActivationGuards(...guards: CanActivateFn[]): CanActivateFn\n/**\n * Chains route configured guards on canActivateChild, calling them after each other, waiting for each one before calling the next.\n *\n * @param guards The array of guards to process.\n * @returns The result of the first guard that returns `false` or an instance of a `UrlTree`, otherwise `true`.\n */\nexport function chainActivationGuards(...guards: CanActivateChildFn[]): CanActivateChildFn\nexport function chainActivationGuards(\n  ...guards: (CanActivateFn | CanActivateChildFn)[] | [CanActivateFn[]] | [CanActivateChildFn[]]\n): CanActivateFn | CanActivateChildFn {\n  return (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n    const injector = inject(EnvironmentInjector)\n\n    // Flatten guards: if first argument is an array, use it; otherwise use rest params\n    const flatGuards =\n      Array.isArray(guards[0]) && guards.length === 1\n        ? guards[0]\n        : (guards as (CanActivateFn | CanActivateChildFn)[])\n\n    return from(flatGuards).pipe(\n      concatMap(guard => {\n        const guardResult = runInInjectionContext(injector, () => guard(route, state))\n        return wrapIntoObservable(guardResult).pipe(first())\n      }),\n      takeWhile(val => val === true, true),\n      last()\n    )\n  }\n}\n\n/**\n * Chains route configured guards on canDeactivate, calling them after each other, waiting for each one before calling the next.\n *\n * @param guards The array of guards to process.\n * @returns The result of the first guard that returns `false` or an instance of a `UrlTree`, otherwise `true`.\n */\n// --- Backward-compatible single-array overloads ---\nexport function chainDeactivationGuards(guards: CanDeactivateFn<never>[]): CanDeactivateFn<never>\n\n// --- New ergonomic rest-parameter overloads (pass guards directly) ---\nexport function chainDeactivationGuards(...guards: CanDeactivateFn<never>[]): CanDeactivateFn<never>\n\n// --- Implementation signature (broad; not picked at call sites) ---\nexport function chainDeactivationGuards(\n  ...guards: CanDeactivateFn<never>[] | [CanDeactivateFn<never>[]]\n): CanDeactivateFn<never> {\n  return (\n    component: never,\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot,\n    nextState: RouterStateSnapshot\n  ) => {\n    const injector = inject(EnvironmentInjector)\n\n    // Flatten guards: if first argument is an array, use it; otherwise use rest params\n    const flatGuards =\n      Array.isArray(guards[0]) && guards.length === 1\n        ? guards[0]\n        : (guards as CanDeactivateFn<never>[])\n\n    return from(flatGuards).pipe(\n      concatMap(guard => {\n        const guardResult = runInInjectionContext(injector, () =>\n          guard(component, route, state, nextState)\n        )\n        return wrapIntoObservable(guardResult).pipe(first())\n      }),\n      takeWhile(val => val === true, true),\n      last()\n    )\n  }\n}\n","import { EnvironmentInjector, inject, runInInjectionContext } from '@angular/core'\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router'\n\nimport { first, last, merge, of, takeWhile } from 'rxjs'\n\nimport { wrapIntoObservable } from './utils/rxjs.utils'\n\n/**\n * Runs all given guards in parallel without waiting for each other. Completes if any guard returns a non-true result.\n * This is the default behavior of canActivate, but this function can be used within a chainActivationGuards call\n * in order to make the parallelized group run only after higher priority guards.\n *\n * @param guards a list of activation guard functions\n * @returns the first non-true result of a guard, or true\n */\nexport const parallelizeActivationGuards =\n  (...guards: Array<CanActivateFn>): CanActivateFn =>\n  (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n    if (!guards.length) {\n      return of(true)\n    }\n\n    const injector = inject(EnvironmentInjector)\n\n    return merge(\n      ...guards.map(guard => {\n        const preloaderResult = runInInjectionContext(injector, () => guard(route, state))\n        return wrapIntoObservable(preloaderResult).pipe(first())\n      })\n    ).pipe(\n      takeWhile(result => result === true, true),\n      last()\n    )\n  }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAEA;;;;AAIG;AACG,SAAU,kBAAkB,CAAI,KAAqC,EAAA;AACzE,IAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AAC/B,QAAA,OAAO,KAAK;;AACP,SAAA,IAAI,KAAK,YAAY,OAAO,EAAE;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC;;SACb;AACL,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;AAEpB;;AC6BgB,SAAA,qBAAqB,CACnC,GAAG,MAA2F,EAAA;AAE9F,IAAA,OAAO,CAAC,KAA6B,EAAE,KAA0B,KAAI;AACnE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAG5C,QAAA,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK;AAC5C,cAAE,MAAM,CAAC,CAAC;cACP,MAAiD;QAExD,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAC1B,SAAS,CAAC,KAAK,IAAG;AAChB,YAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC9E,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACtD,SAAC,CAAC,EACF,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,EAAE,IAAI,CAAC,EACpC,IAAI,EAAE,CACP;AACH,KAAC;AACH;AAcA;AACgB,SAAA,uBAAuB,CACrC,GAAG,MAA6D,EAAA;IAEhE,OAAO,CACL,SAAgB,EAChB,KAA6B,EAC7B,KAA0B,EAC1B,SAA8B,KAC5B;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAG5C,QAAA,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK;AAC5C,cAAE,MAAM,CAAC,CAAC;cACP,MAAmC;QAE1C,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAC1B,SAAS,CAAC,KAAK,IAAG;YAChB,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAClD,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAC1C;YACD,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACtD,SAAC,CAAC,EACF,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,EAAE,IAAI,CAAC,EACpC,IAAI,EAAE,CACP;AACH,KAAC;AACH;;ACrGA;;;;;;;AAOG;AACI,MAAM,2BAA2B,GACtC,CAAC,GAAG,MAA4B,KAChC,CAAC,KAA6B,EAAE,KAA0B,KAAI;AAC5D,IAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;AAGjB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE5C,OAAO,KAAK,CACV,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;AACpB,QAAA,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClF,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACzD,CAAC,CACH,CAAC,IAAI,CACJ,SAAS,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE,IAAI,CAAC,EAC1C,IAAI,EAAE,CACP;AACH;;ACjCF;;AAEG;;;;"}