@rxap/life-cycle
Version:
Provides an Angular service and guard to manage application lifecycle. It allows to execute code when the application is stable and ready. Includes a guard to prevent route activation until the app is ready.
1 lines • 5.37 kB
Source Map (JSON)
{"version":3,"file":"rxap-life-cycle.mjs","sources":["../../../../../packages/angular/life-cycle/src/lib/life-cycle.service.ts","../../../../../packages/angular/life-cycle/src/lib/is-app-ready.guard.ts","../../../../../packages/angular/life-cycle/src/index.ts","../../../../../packages/angular/life-cycle/src/rxap-life-cycle.ts"],"sourcesContent":["import {\n ApplicationRef,\n Inject,\n Injectable,\n} from '@angular/core';\nimport { isPromiseLike } from '@rxap/utilities';\nimport {\n BehaviorSubject,\n firstValueFrom,\n isObservable,\n Observable,\n of,\n} from 'rxjs';\nimport {\n filter,\n switchMap,\n take,\n tap,\n} from 'rxjs/operators';\n\nexport interface LifeCycleHook {\n promise: PromiseLike<any>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LifeCycleService {\n\n private static hooks = new Map<string, LifeCycleHook>();\n public isReady$ = new BehaviorSubject(false);\n\n constructor(@Inject(ApplicationRef) public readonly appRef: ApplicationRef) {\n\n LifeCycleService.AddHook('stable', firstValueFrom(appRef.isStable.pipe(\n tap(isStable => console.log('app state:', isStable ? 'stable' : 'unstable')),\n filter(Boolean),\n take(1),\n tap(() => console.log('app is ready')),\n )));\n\n Promise.all(Array.from(LifeCycleService.hooks.values()).map(hook => hook.promise))\n .then(() => this.isReady$.next(true));\n\n }\n\n public static AddHook(name: string, promise: PromiseLike<any>): void {\n LifeCycleService.hooks.set(name, { promise });\n }\n\n public whenReady<T>(thenOrFunction: Observable<T> | PromiseLike<T> | (() => Observable<T>) | (() => PromiseLike<T>) | (() => T)): Observable<T> {\n\n return this.isReady$.pipe(\n filter(Boolean),\n take(1),\n switchMap(() => {\n\n if (typeof thenOrFunction === 'function') {\n\n const then = thenOrFunction();\n\n if (isPromiseLike(then) || isObservable(then)) {\n return then;\n } else {\n return of(then);\n }\n\n } else {\n return thenOrFunction;\n }\n\n }),\n );\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n} from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { LifeCycleService } from './life-cycle.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IsAppReadyGuard {\n\n constructor(private readonly lifecycle: LifeCycleService) {\n }\n\n public canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n ): Observable<boolean> {\n console.debug('[IsAppReadyGuard] can activate', state.url);\n return this.lifecycle.whenReady(() => true);\n }\n\n}\n","// region \nexport * from './lib/is-app-ready.guard';\nexport * from './lib/life-cycle.service';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.LifeCycleService"],"mappings":"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"}