{"version":3,"file":"ngx-reactive-loading.mjs","sources":["../../../projects/ngx-reactive-loading/src/lib/operators/with-loading.ts","../../../projects/ngx-reactive-loading/src/lib/internal/factory/loading-factory.ts","../../../projects/ngx-reactive-loading/src/lib/internal/factory/loading-state.ts","../../../projects/ngx-reactive-loading/src/lib/internal/factory/loading-registry-state.ts","../../../projects/ngx-reactive-loading/src/lib/core/create-loading-store.ts","../../../projects/ngx-reactive-loading/src/lib/utils/some-loading.ts","../../../projects/ngx-reactive-loading/src/lib/utils/to-event.ts","../../../projects/ngx-reactive-loading/src/lib/utils/until-loading.ts","../../../projects/ngx-reactive-loading/src/lib/internal/reactive-map.ts","../../../projects/ngx-reactive-loading/src/lib/core/create-loading-registry.ts","../../../projects/ngx-reactive-loading/src/lib/internal/tokens.ts","../../../projects/ngx-reactive-loading/src/lib/providers/token.ts","../../../projects/ngx-reactive-loading/src/lib/internal/providers.ts","../../../projects/ngx-reactive-loading/src/lib/services/loading.service.ts","../../../projects/ngx-reactive-loading/src/lib/services/logger.service.ts","../../../projects/ngx-reactive-loading/src/lib/components/loading.directive.ts","../../../projects/ngx-reactive-loading/src/lib/pipes/get-loading.pipe.ts","../../../projects/ngx-reactive-loading/src/lib/reactive-loading.module.ts","../../../projects/ngx-reactive-loading/src/lib/http/http-loading-context.ts","../../../projects/ngx-reactive-loading/src/lib/http/http-loading-registry.ts","../../../projects/ngx-reactive-loading/src/lib/http/http-loading-registry.interceptor.ts","../../../projects/ngx-reactive-loading/src/public-api.ts","../../../projects/ngx-reactive-loading/src/ngx-reactive-loading.ts"],"sourcesContent":["import { defer, MonoTypeOperatorFunction, pipe, Subject, finalize } from 'rxjs';\n\n/**\n * Like `tap` operator, perform a side effect for every emission on the source Observable,\n * updating the given subject when the source is subscribed and when terminates on complete\n *\n * @param loadingSubject The subject that will be updated\n */\nexport const withLoading = <T>(\n  loadingSubject: Subject<boolean>\n): MonoTypeOperatorFunction<T> =>\n  pipe(source =>\n    defer(() => {\n      loadingSubject.next(true);\n      return source.pipe(finalize(() => loadingSubject.next(false)));\n    })\n  );\n","import {\n  BehaviorSubject,\n  Observable,\n  Subject,\n  shareReplay,\n  takeUntil,\n} from 'rxjs';\nimport { Merge, UnionToIntersection } from './merge';\n\n/**\n *\n * @internal\n * @param type\n * @param factory\n */\nexport const createLoadingStateFactory = <\n  Type extends PropertyKey,\n  FactoryReturn extends {}\n>(\n  type: Type,\n  factory: LoadingFactory<FactoryReturn>\n): LoadingFactoryState<Type> & FactoryReturn => {\n  const loadingSubject$ = new BehaviorSubject<boolean>(false);\n  const destroy$ = new Subject<void>();\n\n  const destroyFn = () => {\n    destroy$.next();\n    destroy$.complete();\n  };\n\n  return {\n    $: loadingSubject$\n      .asObservable()\n      .pipe(\n        shareReplay({ refCount: true, bufferSize: 1 }),\n        takeUntil(destroy$)\n      ),\n    type,\n    destroy: destroyFn,\n    ...factory(loadingSubject$, destroy$),\n  };\n};\n\n/**\n *\n * @internal\n * @param factories\n */\nexport const withLoadingStateFactory = <\n  R extends readonly Record<string, unknown>[]\n>(\n  ...factories: LoadingFactoryTuple<R>\n): LoadingFactory<Merge<R>> => {\n  return (loading, destroy$) =>\n    factories.reduce<{}>(\n      (acc, factory) => ({\n        ...acc,\n        ...factory(loading, destroy$),\n      }),\n      {}\n    ) as UnionToIntersection<R[number]>;\n};\n\nexport type LoadingFactoryState<Type extends PropertyKey> = {\n  $: Observable<boolean>;\n  type: Type;\n  destroy: () => void;\n};\n\n/**\n * @internal\n */\nexport type LoadingFactoryTuple<T extends {}> = {\n  [K in keyof T]: LoadingFactory<T[K]>;\n};\n\n/**\n * internal\n */\nexport type LoadingFactory<R> = (\n  context: BehaviorSubject<boolean>,\n  destroy$: Subject<void>\n) => R;\n","import { MonoTypeOperatorFunction } from 'rxjs';\nimport {\n  createLoadingStateFactory,\n  LoadingFactory,\n  LoadingFactoryState,\n  withLoadingStateFactory,\n} from './loading-factory';\nimport { withLoading } from '../../operators';\n\nexport type LoadingStoreStateFactory = {\n  readonly track: <T>() => MonoTypeOperatorFunction<T>;\n};\n\nexport const LOADING_STORE_STATE_SYMBOL = Symbol('LOADING_STORE_STATE');\n\nexport type LoadingStoreState = LoadingFactoryState<symbol> &\n  LoadingStoreStateFactory;\n\nexport const loadingStoreStateFactory: LoadingFactory<LoadingStoreStateFactory> =\n  loadingSubject$ => ({\n    track: <T>() => withLoading(loadingSubject$),\n  });\n\nexport const buildLoadingStoreState = (): LoadingStoreState =>\n  createLoadingStateFactory(\n    LOADING_STORE_STATE_SYMBOL,\n    withLoadingStateFactory(loadingStoreStateFactory)\n  );\n\nexport const isLoadingStoreState = (\n  value: unknown\n): value is LoadingStoreState => {\n  return (\n    (value as Partial<LoadingStoreState>)?.type === LOADING_STORE_STATE_SYMBOL\n  );\n};\n","import { LoadingStoreState, loadingStoreStateFactory } from './loading-state';\nimport {\n  createLoadingStateFactory,\n  withLoadingStateFactory,\n} from './loading-factory';\n\nexport type LoadingRegistryState = LoadingStoreState;\n\nexport type ControlledLoadingRegistryState = LoadingRegistryState & {\n  set: (isLoading: boolean) => void;\n};\n\nexport const LOADING_REGISTRY_STATE_SYMBOL = Symbol('LOADING_REGISTRY_STATE');\n\nexport const buildLoadingRegistryState = () =>\n  createLoadingStateFactory(\n    LOADING_REGISTRY_STATE_SYMBOL,\n    withLoadingStateFactory(loadingStoreStateFactory)\n  );\n\nexport const CONTROLLED_LOADING_REGISTRY_STATE_SYMBOL = Symbol(\n  'CONTROLLED_LOADING_REGISTRY_STATE'\n);\n\nexport const buildControlledLoadingRegistryState =\n  (): ControlledLoadingRegistryState =>\n    createLoadingStateFactory(\n      CONTROLLED_LOADING_REGISTRY_STATE_SYMBOL,\n      withLoadingStateFactory(loadingStoreStateFactory, loadingSubject$ => ({\n        set: (isLoading: boolean) => loadingSubject$.next(isLoading),\n      }))\n    );\n","import {\n  buildLoadingStoreState,\n  isLoadingStoreState,\n  LoadingStoreState,\n} from '../internal/factory';\n\n/**\n * @description\n * Creates a LoadingStore object with the given keys.\n *\n * Each loading state will store a loading subject which will be updated automatically\n * and a track function which must be attached in an observable stream.\n *\n * @param keys The keys of the loading store that will be tracked\n */\nexport const createLoadingStore = <LoadingKeys extends readonly PropertyKey[]>(\n  keys: readonly [...LoadingKeys]\n): LoadingStore<LoadingKeys> => {\n  const stores = {} as LoadingStore<LoadingKeys>;\n  for (const key of keys) {\n    stores[key] = buildLoadingStoreState();\n  }\n  return stores;\n};\n\nexport const isLoadingStore = (\n  value: unknown\n): value is LoadingStore<PropertyKey[]> => {\n  return (\n    typeof value === 'object' &&\n    !!value &&\n    Object.values(value).every(value => isLoadingStoreState(value))\n  );\n};\n\nexport type LoadingStore<K extends readonly [...PropertyKey[]]> = {\n  [Key in K[number]]: Readonly<LoadingStoreState>;\n};\n","import {\n  combineLatest,\n  isObservable,\n  Observable,\n  distinctUntilChanged,\n  map,\n  shareReplay,\n} from 'rxjs';\nimport { isLoadingStore, LoadingStore } from '../core/create-loading-store';\nimport { isLoadingStoreState, LoadingStoreState } from '../internal/factory';\n\nexport const someLoading = <\n  Loaders extends readonly [\n    ...(readonly (\n      | LoadingStore<readonly PropertyKey[]>\n      | LoadingStoreState\n      | Observable<boolean>\n    )[])\n  ]\n>(\n  loaders: Loaders\n) => {\n  const loaders$: Observable<boolean>[] = loaders.reduce<Observable<boolean>[]>(\n    (acc, loader) => {\n      if (isObservable(loader)) {\n        return acc.concat(loader);\n      }\n      if (isLoadingStoreState(loader)) {\n        return acc.concat(loader.$);\n      }\n      if (isLoadingStore(loader)) {\n        return acc.concat(Object.values(loader).map(state => state.$));\n      }\n      return acc;\n    },\n    []\n  );\n\n  return combineLatest(loaders$).pipe(\n    map(loaders => loaders.some(loader => loader)),\n    distinctUntilChanged(),\n    shareReplay({ refCount: true, bufferSize: 1 })\n  );\n};\n","import { LoadingEvent, PropertyTuple } from '../model';\nimport { defer, merge, Observable, map, shareReplay, skip } from 'rxjs';\nimport { LoadingStore } from '../core';\nimport { LoadingStoreState } from '../internal/factory';\n\n/**\n * Map loading state change to LoadingEvent object.\n */\nexport const toLoadingEvent = <T extends PropertyKey>(\n  state: LoadingStore<PropertyTuple<T>>\n): Observable<LoadingEvent> =>\n  defer(() => {\n    const entries = Object.entries<LoadingStoreState>(state);\n    const skipN = entries.length;\n    const events = entries.map(([type, state]) =>\n      state.$.pipe(\n        map(isLoading => ({ type, loading: isLoading } as LoadingEvent))\n      )\n    );\n    return merge(...events).pipe(\n      skip(skipN),\n      shareReplay({ refCount: true, bufferSize: 1 })\n    );\n  });\n","import { merge, Observable, first, mapTo, startWith, switchMap } from 'rxjs';\n\n/**\n * Listen to all triggers, then wait for result and end loading upon emit.\n *\n * @param trigger$\n * @param content$\n *\n * @example\n * ```ts\n *\n * const reload$ = new BehaviorSubject<null>(null);\n * const add$ = new Subject<string>();\n *\n * const items$ = this.reload$.pipe(\n *  switchMap(() =>\n *    this.service.getList().pipe(\n *      catchError(() => of(null)\n *    ),\n *  share()\n * );\n *\n * const loading = untilLoading([reload$, add$], [items$]);\n * ```\n */\nexport const untilLoading = (\n  trigger$: readonly Observable<unknown>[],\n  content$: readonly Observable<unknown>[]\n): Observable<boolean> => {\n  return merge(...trigger$).pipe(\n    switchMap(() =>\n      merge(...content$).pipe(first(), mapTo(false), startWith(true))\n    )\n  );\n};\n","import { defer, Observable, Subject, map, startWith } from 'rxjs';\n\ntype ActionsType = 'add' | 'delete' | 'clear' | 'init';\n\ntype ActionEvent<K extends PropertyKey, T> = {\n  type: ActionsType;\n  value: ReactiveMap<K, T>;\n};\n\nexport class ReactiveMap<K extends PropertyKey, T> {\n  private readonly internalMap = new Map<K, T>();\n  private readonly actions$ = new Subject<ActionEvent<K, T>>();\n\n  readonly changes$: Observable<ReactiveMap<K, T>> = defer(() =>\n    this.actions$.pipe(\n      map(action => action.value),\n      startWith(this)\n    )\n  );\n\n  constructor() {\n    this.actions$.next({ type: 'init', value: this });\n  }\n\n  get(key: K): T | null {\n    return this.internalMap.get(key) ?? null;\n  }\n\n  set(key: K, value: T): this {\n    this.internalMap.set(key, value);\n    this.actions$.next({ type: 'add', value: this });\n    return this;\n  }\n\n  getMany(keys: K[]): (T | undefined)[] {\n    return keys.map(k => this.internalMap.get(k));\n  }\n\n  setMany(values: [K, T][]): void {\n    for (const [key, value] of values) {\n      if (!this.internalMap.has(key)) {\n        this.internalMap.set(key, value);\n      }\n    }\n    this.actions$.next({ type: 'add', value: this });\n  }\n\n  delete(key: K): boolean {\n    const removed = this.internalMap.delete(key);\n    if (removed) {\n      this.actions$.next({\n        type: 'delete',\n        value: this,\n      });\n    }\n    return removed;\n  }\n\n  clear() {\n    this.internalMap.clear();\n    this.actions$.next({\n      type: 'clear',\n      value: this,\n    });\n  }\n\n  keys(): K[] {\n    return Array.from(this.internalMap.keys());\n  }\n\n  values(): T[] {\n    return Array.from(this.internalMap.values());\n  }\n}\n","import {\n  combineLatest,\n  MonoTypeOperatorFunction,\n  of,\n  pipe,\n  distinctUntilChanged,\n  map,\n  switchMap,\n} from 'rxjs';\nimport {\n  ControlledLoadingRegistry,\n  LoadingRegistry,\n  PropertyTuple,\n} from '../model';\nimport { someLoading as internalSomeLoading } from '../utils/some-loading';\nimport { ReactiveMap } from '../internal/reactive-map';\nimport {\n  buildControlledLoadingRegistryState,\n  buildLoadingRegistryState,\n  LoadingRegistryState,\n} from '../internal/factory';\n\nconst createLoadingRegistryFactory = <\n  T extends PropertyKey,\n  FactoryState extends LoadingRegistryState\n>(\n  initialKeys: PropertyTuple<T>,\n  factory: () => FactoryState\n) => {\n  const registry = new ReactiveMap<T, FactoryState>();\n\n  registry.setMany(initialKeys.map(key => [key, factory()]));\n\n  const registry$ = registry.changes$.pipe(\n    switchMap(sources => {\n      const keys = Array.from(sources.keys());\n      const values = Array.from(sources.values()).map(state => state.$);\n      if (keys.length === 0 && values.length === 0) {\n        return of({});\n      }\n      return combineLatest(values).pipe(\n        map(values =>\n          values.reduce(\n            (acc, value, index) => ({\n              ...acc,\n              [keys[index]]: value,\n            }),\n            {}\n          )\n        )\n      );\n    })\n  );\n\n  const someLoading = (keys: T[]) =>\n    registry.changes$.pipe(\n      switchMap(_ => {\n        const sources$ = _.getMany(keys)\n          .filter((value): value is NonNullable<FactoryState> => !!value)\n          .map(state => state.$);\n        return sources$.length > 0 ? internalSomeLoading(sources$) : of(false);\n      }),\n      distinctUntilChanged()\n    );\n\n  const isLoading = (key: T) => someLoading([key]);\n\n  const track = <O>(key: T): MonoTypeOperatorFunction<O> =>\n    pipe(source => {\n      const state = registry.get(key);\n      if (state) {\n        return state.track<O>()(source);\n      }\n      return source;\n    });\n\n  const keys = () => Array.from(registry.keys());\n\n  const destroyByKeys = (keys: T[]) => {\n    const state = registry\n      .getMany(keys)\n      .filter((value): value is NonNullable<FactoryState> => !!value);\n    state.forEach(key => key.destroy());\n  };\n\n  const destroyAll = () => {\n    destroyByKeys(keys());\n    registry.clear();\n  };\n\n  const deleteByKey = (key: T) => {\n    destroyByKeys([key]);\n    return registry.delete(key);\n  };\n\n  return {\n    registry$,\n    someLoading,\n    isLoading,\n    track,\n    get: (key: T) => registry.get(key) ?? null,\n    add: (key: T) => void registry.set(key, factory()),\n    addAll: (keys: T[]) => registry.setMany(keys.map(k => [k, factory()])),\n    delete: deleteByKey,\n    destroy: destroyAll,\n    keys,\n  };\n};\n\n/**\n * @description\n * Creates a LoadingRegistry object.\n * The loading registry is a key value storage that can holds dynamically the loading states of your application.\n *\n * @param initialKeys Default keys\n */\nexport const createLoadingRegistry = <T extends PropertyKey = PropertyKey>(\n  initialKeys: PropertyTuple<T> = []\n): LoadingRegistry<T> =>\n  createLoadingRegistryFactory(initialKeys, buildLoadingRegistryState);\n\n/**\n * @description\n * Creates a ControlledLoadingRegistry object.\n * The controlled loading registry is a loading registry with the ability\n * to update a loading state by key programmatically.\n *\n * @param initialKeys Default keys\n */\nexport const createControlledLoadingRegistry = <\n  T extends PropertyKey = PropertyKey\n>(\n  initialKeys: PropertyTuple<T> = []\n): ControlledLoadingRegistry<T> =>\n  createLoadingRegistryFactory(\n    initialKeys,\n    buildControlledLoadingRegistryState\n  );\n","import { InjectionToken } from '@angular/core';\nimport { LoadingStoreService } from '../model/loading-store';\nimport { LoadingStoreOptions } from '../model/loading-store-options';\n\n/**\n * @internal\n */\nexport const INITIAL_LOADING_STORE = new InjectionToken<PropertyKey[]>(\n  '[ngx-reactive-loading] Loading store initial value'\n);\n\n/**\n * @internal\n */\nexport const LOADING_STORE = new InjectionToken<LoadingStoreService>(\n  '[ngx-reactive-loading] Loading Store'\n);\n\n/**\n * @internal\n */\nexport const LOADING_STORE_OPTIONS = new InjectionToken<LoadingStoreOptions>(\n  '[ngx-reactive-loading] Loading store options'\n);\n\n/**\n * @internal\n */\nexport const ROOT_LOADING_STORE = new InjectionToken<LoadingStoreService>(\n  '[ngx-reactive-loading] Root loading store'\n);\n\n/**\n * @internal\n */\nexport const FEATURE_LOADING_STORE = new InjectionToken<LoadingStoreService>(\n  '[ngx-reactive-loading] Feature loading store'\n);\n\n/**\n * @internal\n */\nexport const ROOT_LOADING_STORE_GUARD = new InjectionToken<void>(\n  '[ngx-reactive-loading] Internal root guard'\n);\n\n/**\n * @internal\n */\nexport const PARENT_LOADING_STORE = new InjectionToken<LoadingStoreService>(\n  '[ngx-reactive-loading] Parent loading store'\n);\n","import { Component, Inject, InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { LoadingRegistry } from '../model';\n\n/**\n * Automatically provided when providing the loading service in a component\n * or in modules. When injected, it allows you to observe the changes to the state between all service\n * loading property, like the `someLoading` helper function.\n *\n * @example\n * ```ts\n * import { ReactiveLoadingModule, LoadingService } from 'ngx-reactive-loading';\n * import { Inject, Component, NgModule } from '@angular/core';\n * import { of, Observable } from 'rxjs';\n *\n * @Component({ template: `<app-hello></app-hello>` })\n * export class AppComponent {\n *   constructor(private readonly loadingService: LoadingService) {\n *     of(1).pipe(loadingService.track(\"prop1\")).subscribe();\n *   }\n * }\n *\n * @Component({ template: ``, selector: 'app-hello' })\n * export class HelloComponent {\n *   constructor(@Inject(SOME_LOADING) private readonly someLoading$: Observable<boolean>) {\n *   }\n * }\n *\n * @NgModule({\n *  declarations: [AppComponent, HelloComponent],\n *  imports: [ReactiveLoadingModule.forRoot([\"prop1\"])],\n * })\n export class AppModule {}\n * ```\n */\nexport const SOME_LOADING = new InjectionToken<Observable<boolean>>(\n  '[ngx-reactive-loading] loadingService/someLoading'\n);\n\n/**\n * A provider token that represents the registered loading registry object.\n * @example\n * ```ts\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { HttpModule } from '@angular/http';\n * import { AppComponent } from './app.component';\n * import { createLoadingRegistry, LOADING_REGISTRY } from \"ngx-reactive-loading\";\n *\n * @NgModule({\n *  imports: [BrowserModule, HttpModule],\n *  declarations: [AppComponent],\n *  bootstrap: [AppComponent],\n *  providers: [{ provide: LOADING_REGISTRY, useFactory: createLoadingRegistry }],\n * })\n * export class AppModule {}\n *\n * @Component({selector: 'app-root', template: ''})\n * export class AppComponent {\n *  constructor(@Inject(LOADING_REGISTRY) readonly registry: LoadingRegistry) {\n *  }\n * }\n * ```\n */\nexport const LOADING_REGISTRY = new InjectionToken<LoadingRegistry>(\n  '[ngx-reactive-loading] dynamicLoadingStore'\n);\n","import { LoadingStoreOptions, PropertyTuple } from '../model';\nimport { FactoryProvider, Injector, ValueProvider } from '@angular/core';\nimport { SOME_LOADING } from '../providers/token';\nimport { LoadingStoreService } from '../model/loading-store';\nimport {\n  INITIAL_LOADING_STORE,\n  LOADING_STORE,\n  LOADING_STORE_OPTIONS,\n  PARENT_LOADING_STORE,\n} from './tokens';\n\n/**\n * @internal\n * @param keys\n */\nexport const provideInitialLoadingState = <\n  K extends PropertyKey,\n  T extends PropertyTuple<K>\n>(\n  keys: T\n): ValueProvider => ({\n  provide: INITIAL_LOADING_STORE,\n  useValue: keys,\n});\n\n/**\n * @internal\n * @param options\n */\nexport const provideLoadingStoreOptions = (options: LoadingStoreOptions) => ({\n  provide: LOADING_STORE_OPTIONS,\n  useValue: options,\n});\n\n/**\n * @internal\n */\nexport const provideParentLoadingStore: () => FactoryProvider = () => ({\n  provide: PARENT_LOADING_STORE,\n  useFactory: (injector: Injector, options: LoadingStoreOptions) => {\n    if (options.standalone) {\n      return null;\n    }\n    return injector.get(LOADING_STORE, null);\n  },\n  deps: [Injector, LOADING_STORE_OPTIONS],\n});\n\n/**\n * @internal\n */\nexport const provideSomeLoadingState: () => FactoryProvider = () => ({\n  provide: SOME_LOADING,\n  useFactory: (loadingService: LoadingStoreService) =>\n    loadingService.someLoading(),\n  deps: [LOADING_STORE],\n});\n","import {\n  Inject,\n  Injectable,\n  OnDestroy,\n  Optional,\n  Provider,\n  SkipSelf,\n} from '@angular/core';\nimport {\n  defer,\n  MonoTypeOperatorFunction,\n  Observable,\n  Subject,\n  distinctUntilChanged,\n  shareReplay,\n  takeUntil,\n} from 'rxjs';\nimport { LoadingEvent, LoadingStoreOptions, PropertyTuple } from '../model';\nimport { someLoading, toLoadingEvent } from '../utils';\nimport { LoadingStoreService } from '../model/loading-store';\nimport {\n  INITIAL_LOADING_STORE,\n  LOADING_STORE,\n  LOADING_STORE_OPTIONS,\n  PARENT_LOADING_STORE,\n} from '../internal/tokens';\nimport {\n  provideInitialLoadingState,\n  provideLoadingStoreOptions,\n  provideParentLoadingStore,\n  provideSomeLoadingState,\n} from '../internal/providers';\nimport { createLoadingStore, LoadingStore } from '../core';\nimport { LoadingStoreState } from '../internal/factory';\n\n/**\n * @internal\n * @param keys Loading store property keys\n * @param options Loading store options\n */\nexport const provideLoadingService = <T extends PropertyKey>(\n  keys: PropertyTuple<T>,\n  options?: LoadingStoreOptions\n): Provider[] => {\n  const defaultComponentProvider: LoadingStoreOptions = { standalone: false };\n  return [\n    provideInitialLoadingState(keys),\n    provideLoadingStoreOptions(options || defaultComponentProvider),\n    provideParentLoadingStore(),\n    LoadingService,\n    {\n      provide: LOADING_STORE,\n      useExisting: LoadingService,\n    },\n    provideSomeLoadingState(),\n  ];\n};\n\n@Injectable()\nexport class LoadingService<T extends PropertyKey = PropertyKey>\n  implements OnDestroy, LoadingStoreService<T>\n{\n  /**\n   * @internal\n   * @private\n   * Destroy subject to unsubscribe automatically all subscriptions if service is provided in component.\n   */\n  private readonly destroy$: Subject<void> = new Subject<void>();\n\n  /**\n   * The loading store state.\n   */\n  readonly state: LoadingStore<PropertyTuple<T>>;\n\n  /**\n   * Track all changes of each current LoadingService loading state property.\n   */\n  readonly events$: Observable<LoadingEvent>;\n\n  /**\n   * Helper to provide a LoadingService into a component. His use is necessary\n   * to provide each constructor property to initialize the service in\n   * the right way.\n   *\n   * Options default value is {standalone: false}.\n   */\n  static componentProvider<T extends PropertyKey>(\n    keys: PropertyTuple<T>,\n    options?: LoadingStoreOptions\n  ): Provider[] {\n    return provideLoadingService(keys, options);\n  }\n\n  constructor(\n    @Inject(INITIAL_LOADING_STORE)\n    private readonly defaultValue: PropertyTuple<T>,\n    @Inject(LOADING_STORE_OPTIONS)\n    private readonly options: LoadingStoreOptions,\n    @Inject(PARENT_LOADING_STORE)\n    @Optional()\n    @SkipSelf()\n    private readonly parent: LoadingService | null\n  ) {\n    this.verifyStoreKeys();\n    this.state = createLoadingStore(defaultValue);\n    this.events$ = toLoadingEvent(this.state);\n  }\n\n  /**\n   * Returns the given observable with the loading operator attached.\n   * This allows to update the loading state of the given property\n   * automatically after each value emission.\n   *\n   * @example\n   * ```ts\n   * import {LoadingService} from 'ngx-reactive-loading';\n   *\n   * type ExampleActions = 'add' | 'delete';\n   *\n   * @Component({\n   *   template: ``,\n   *   providers: [\n   *     LoadingService.componentProvide<ExampleActions>(['add', 'delete'])\n   *   ]\n   * })\n   * export class ExampleComponent {\n   *   constructor(private readonly loadingService: LoadingService<ExampleActions>,\n   *               private readonly http: HttpClient) {\n   *     this.loadingService\n   *      .load(this.http.post('/', {}), 'add')\n   *      .subscribe();\n   *   }\n   * }\n   * ```\n   *\n   */\n  load<S>(source$: Observable<S>, property: T): Observable<S> {\n    return defer(() => source$.pipe(this.track(property)));\n  }\n\n  /**\n   * Wrapper of state.key.track() pipe. This operator will update\n   * automatically the loading state property by the given key.\n   *\n   * @example\n   * ```ts\n   * import {LoadingService} from 'ngx-reactive-loading';\n   *\n   * type ExampleActions = 'add' | 'delete';\n   *\n   * @Component({\n   *   template: ``,\n   *   providers: [\n   *     LoadingService.componentProvide<ExampleActions>(['add', 'delete'])\n   *   ]\n   * })\n   * export class ExampleComponent {\n   *   constructor(private readonly loadingService: LoadingService<ExampleActions>,\n   *               private readonly http: HttpClient) {\n   *     this.http.post('/', {})\n   *      .pipe(this.loadingService.track(\"add\"))\n   *      .subscribe();\n   *   }\n   * }\n   * ```\n   */\n  track<O>(key: T): MonoTypeOperatorFunction<O> {\n    const loadingStoreState = this.state[key];\n\n    if (!loadingStoreState) {\n      throw new Error(`[LoadingService] Property ${key.toString()} not found`);\n    }\n\n    return loadingStoreState.track();\n  }\n\n  /**\n   * Track the changes of the given loading state property.\n   * The returned observable has built-in memoization with\n   * default rxjs distinctUntilChange operator and the value\n   * is shared among all subscribers (shareReplay({refCount: true, bufferSize: 1}))\n   *\n   * @example\n   * ```ts\n   * import {LoadingService} from 'ngx-reactive-loading';\n   *\n   * type ExampleActions = 'add' | 'delete';\n   *\n   * @Component({\n   *   template: ``,\n   *   providers: [\n   *     LoadingService.componentProvide<ExampleActions>(['add', 'delete'])\n   *   ]\n   * })\n   * export class ExampleComponent {\n   *   readonly isAdd$: Observable<boolean> = this.loadingService.isLoading(\"add\");\n   *\n   *   constructor(private readonly loadingService: LoadingService<ExampleActions>)\n   * }\n   * ```\n   *\n   */\n  isLoading(key: T): Observable<boolean> {\n    return this.someLoading([key]);\n  }\n\n  /**\n   * Track the changes of one or more given loading state. If no properties are\n   * provided, all loading store property will be checked.\n   *\n   * @example\n   * ```ts\n   * import {LoadingService} from 'ngx-reactive-loading';\n   *\n   * type ExampleActions = 'add' | 'delete';\n   *\n   * @Component({\n   *   template: ``,\n   *   providers: [\n   *     LoadingService.componentProvide<ExampleActions>(['add', 'delete'])\n   *   ]\n   * })\n   * export class ExampleComponent {\n   *   readonly isAddingOrDeleting$ = this.loadingService.someLoading([\n   *    'add',\n   *    'delete'\n   *   ]);\n   *\n   *   constructor(private readonly loadingService: LoadingService<ExampleActions>)\n   * }\n   * ```\n   */\n  someLoading(identifier: PropertyTuple<T> = []): Observable<boolean> {\n    return defer(() => {\n      if (!identifier || identifier.length === 0) {\n        return someLoading([this.state]);\n      }\n\n      const loadingStates = this.getLoadingByIdentifiers(identifier);\n\n      return someLoading(loadingStates);\n    }).pipe(\n      distinctUntilChanged(),\n      shareReplay({ refCount: true, bufferSize: 1 }),\n      takeUntil(this.destroy$)\n    );\n  }\n\n  private getLoadingByIdentifiers(\n    identifiers: PropertyTuple<T>\n  ): LoadingStoreState[] {\n    const stores: LoadingStoreState[] = [];\n    const sanitizedIdentifiers = identifiers.filter(Boolean);\n\n    for (const identifier of sanitizedIdentifiers) {\n      const loadingState =\n        this.state[identifier] || this.getAllParentStates()[identifier];\n\n      if (!loadingState) {\n        throw new Error(\n          `[LoadingService] Property ${identifier.toString()} not found`\n        );\n      }\n      stores.push(loadingState);\n    }\n\n    return stores;\n  }\n\n  /**\n   * Used to automatically unsubscribe all\n   * subscribers (only if service is provided attached in a Component)\n   */\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private getAllParents(): LoadingService[] {\n    const _recursiveGetParent = (\n      loadingService: LoadingService | null,\n      acc: LoadingService[]\n    ): LoadingService[] => {\n      if (loadingService && loadingService.parent) {\n        return _recursiveGetParent(\n          loadingService.parent,\n          acc.concat(loadingService.parent)\n        );\n      }\n      return acc;\n    };\n\n    return _recursiveGetParent(this, []);\n  }\n\n  private getAllParentStates(): LoadingStore<PropertyTuple<PropertyKey>> {\n    return this.getAllParents().reduce<\n      LoadingStore<PropertyTuple<PropertyKey>>\n    >((acc, parent) => {\n      Object.entries(parent.state).forEach(([key, value]) => {\n        acc[key] = value;\n      });\n      return acc;\n    }, {});\n  }\n\n  private verifyStoreKeys(): void {\n    const serviceKeys = ([] as PropertyKey[]).concat(this.defaultValue);\n    const duplicateKey = serviceKeys.find(\n      (key, i, arr) => arr.indexOf(key) !== arr.lastIndexOf(key)\n    );\n\n    if (!!duplicateKey) {\n      throw new Error(\n        `Key '${duplicateKey.toString()}' cannot be duplicated in the current service.`\n      );\n    }\n\n    const parentKeys = this.getAllParents().reduce<PropertyKey[]>(\n      (acc, parent) => [...acc, ...parent.defaultValue],\n      []\n    );\n\n    const parentStateDuplicateKey = parentKeys.find(key =>\n      serviceKeys.includes(key)\n    );\n\n    if (parentStateDuplicateKey) {\n      throw new Error(\n        `Key '${parentStateDuplicateKey.toString()}' is already defined by a parent service.`\n      );\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class LoggerService {\n  log(title: string, content: unknown): void {\n    console.group(title);\n    console.log(content);\n    console.groupEnd();\n  }\n}\n","import {\n  Directive,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  Subject,\n  map,\n  switchMap,\n  takeUntil,\n} from 'rxjs';\nimport { LoadingService } from '../services';\nimport { LOADING_STORE } from '../internal/tokens';\n\n@Directive({\n  selector: '[ngxLoading]',\n})\nexport class LoadingDirective implements OnDestroy, OnInit {\n  private readonly destroy$: Subject<void> = new Subject<void>();\n  private readonly loadingKeys$ = new BehaviorSubject<string | string[]>([]);\n  private readonly loadingElseTemplate$ =\n    new BehaviorSubject<TemplateRef<unknown> | null>(null);\n\n  @Input() set ngxLoading(_: string | string[]) {\n    this.loadingKeys$.next(_);\n  }\n\n  @Input() set ngxLoadingElse(_: TemplateRef<unknown>) {\n    this.loadingElseTemplate$.next(_);\n  }\n\n  ngOnInit(): void {\n    this.viewContainerRef.createEmbeddedView(this.templateRef);\n\n    combineLatest([this.loadingKeys$, this.loadingElseTemplate$])\n      .pipe(\n        takeUntil(this.destroy$),\n        switchMap(([keys, template]) =>\n          this.loadingService\n            .someLoading(Array.isArray(keys) ? keys : [keys])\n            .pipe(map(isLoading => ({ isLoading, template })))\n        )\n      )\n      .subscribe(({ isLoading, template }) =>\n        this.updateView(isLoading, template)\n      );\n  }\n\n  constructor(\n    @Inject(LOADING_STORE)\n    private readonly loadingService: LoadingService,\n    private readonly viewContainerRef: ViewContainerRef,\n    private readonly templateRef: TemplateRef<unknown>\n  ) {\n    this.viewContainerRef.createEmbeddedView(this.templateRef);\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private updateView(\n    isLoading: boolean,\n    elseTemplateRef?: TemplateRef<unknown> | null\n  ) {\n    this.viewContainerRef.clear();\n    if (!isLoading) {\n      this.viewContainerRef.createEmbeddedView(this.templateRef);\n      return;\n    }\n    if (isLoading && elseTemplateRef) {\n      this.viewContainerRef.createEmbeddedView(elseTemplateRef);\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { isLoadingStore, LoadingStore } from '../core/create-loading-store';\nimport { LoadingRegistry, PropertyTuple } from '../model';\nimport { someLoading } from '../utils';\n\n@Pipe({\n  name: 'getLoading',\n})\nexport class GetLoadingPipe implements PipeTransform {\n  transform<T extends PropertyKey>(\n    value: LoadingStore<PropertyTuple<T>>,\n    properties: PropertyTuple<T> | T\n  ): Observable<boolean>;\n  transform<T extends PropertyKey>(\n    value: LoadingRegistry<T>,\n    properties: T | PropertyTuple<T>\n  ): Observable<boolean>;\n  transform<T extends PropertyKey>(\n    value: LoadingStore<PropertyTuple<T>> | LoadingRegistry<T>,\n    properties: T | PropertyTuple<T>\n  ): Observable<boolean> {\n    const keys = Array.isArray(properties) ? properties : [properties];\n    const isValueLoadingStore = isLoadingStore(value);\n    if (isValueLoadingStore) {\n      return someLoading(keys.map(key => value[key as T].$));\n    } else {\n      return value.someLoading(keys as T[]);\n    }\n  }\n}\n","import {\n  Inject,\n  Injector,\n  ModuleWithProviders,\n  NgModule,\n  Optional,\n  SkipSelf,\n} from '@angular/core';\nimport { LoadingStoreModuleOptions, PropertyTuple } from './model';\nimport { LoadingService } from './services';\nimport {\n  FEATURE_LOADING_STORE,\n  INITIAL_LOADING_STORE,\n  LOADING_STORE,\n  LOADING_STORE_OPTIONS,\n  ROOT_LOADING_STORE,\n  ROOT_LOADING_STORE_GUARD,\n} from './internal/tokens';\nimport {\n  provideInitialLoadingState,\n  provideLoadingStoreOptions,\n  provideParentLoadingStore,\n  provideSomeLoadingState,\n} from './internal/providers';\nimport { LoggerService } from './services/logger.service';\nimport { LoadingDirective } from './components/loading.directive';\nimport { LoadingStore } from './core';\nimport { GetLoadingPipe } from './pipes/get-loading.pipe';\n\n/**\n * @internal\n */\n@NgModule({})\nexport class RootReactiveLoadingModule {\n  constructor(\n    @Optional()\n    @Inject(ROOT_LOADING_STORE_GUARD)\n    rootLoadingStoreGuard: unknown\n  ) {}\n}\n\n@NgModule({\n  declarations: [LoadingDirective, GetLoadingPipe],\n  exports: [LoadingDirective, GetLoadingPipe],\n})\nexport class ReactiveLoadingModule {\n  static forRoot<T extends PropertyKey>(\n    keys: PropertyTuple<T>,\n    options?: LoadingStoreModuleOptions\n  ): ModuleWithProviders<ReactiveLoadingModule> {\n    const rootStoreDefaultOptions: LoadingStoreModuleOptions = {\n      standalone: true,\n      logger: false,\n    };\n\n    return {\n      ngModule: RootReactiveLoadingModule,\n      providers: [\n        LoggerService,\n        {\n          provide: ROOT_LOADING_STORE_GUARD,\n          useFactory: provideForRootGuard,\n          deps: [[ROOT_LOADING_STORE, new Optional(), new SkipSelf()]],\n        },\n        provideInitialLoadingState(keys),\n        provideLoadingStoreOptions(options || rootStoreDefaultOptions),\n        {\n          provide: LoadingService,\n          useFactory: setupLoadingStore,\n          deps: [INITIAL_LOADING_STORE, Injector, LOADING_STORE_OPTIONS],\n        },\n        {\n          provide: LOADING_STORE,\n          useExisting: LoadingService,\n        },\n        {\n          provide: ROOT_LOADING_STORE,\n          useExisting: LoadingService,\n        },\n        provideSomeLoadingState(),\n      ],\n    };\n  }\n\n  static forFeature<T extends PropertyKey>(\n    keys: PropertyTuple<T>,\n    options?: LoadingStoreModuleOptions\n  ): ModuleWithProviders<ReactiveLoadingModule> {\n    const featureStoreDefaultOptions: LoadingStoreModuleOptions = {\n      standalone: false,\n      logger: false,\n    };\n\n    const featureStoreOptions = {\n      ...featureStoreDefaultOptions,\n      ...(options || {}),\n    };\n\n    return {\n      ngModule: ReactiveLoadingModule,\n      providers: [\n        provideLoadingStoreOptions(featureStoreOptions),\n        provideParentLoadingStore(),\n        provideInitialLoadingState(keys),\n        {\n          provide: LoadingService,\n          useFactory: setupLoadingStore,\n          deps: [INITIAL_LOADING_STORE, Injector, LOADING_STORE_OPTIONS],\n        },\n        {\n          provide: LOADING_STORE,\n          useExisting: LoadingService,\n        },\n        {\n          provide: FEATURE_LOADING_STORE,\n          useExisting: LoadingService,\n        },\n        provideSomeLoadingState(),\n      ],\n    };\n  }\n}\n\nfunction provideForRootGuard(loadingStore: LoadingStore<any> | null) {\n  if (loadingStore) {\n    throw new TypeError(\n      `ReactiveLoadingModule.forRoot() called twice. Feature modules should use ReactiveLoadingModule.forFeature() instead.`\n    );\n  }\n}\n\nfunction setupLoadingStore<T extends PropertyKey>(\n  initialState: PropertyTuple<T>,\n  injector: Injector,\n  options: LoadingStoreModuleOptions\n): LoadingService<T> {\n  const service = new LoadingService<any>(initialState, options, null);\n  const logger = injector.get(LoggerService);\n  if (options.logger) {\n    service.events$.subscribe(event => {\n      logger.log(\n        `LoadingService event: ${options.name || service.constructor.name}`,\n        event\n      );\n    });\n  }\n\n  return service as LoadingService<T>;\n}\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\n\nexport const LOADING_DEFAULT_CONTEXT =\n  '[ngx-reactive-loading/loading-store-interceptor/default]';\n\nexport const HTTP_LOADING_CONTEXT = new HttpContextToken<PropertyKey>(\n  () => LOADING_DEFAULT_CONTEXT\n);\n\nexport const withHttpLoadingContext = (key: PropertyKey) =>\n  new HttpContext().set(HTTP_LOADING_CONTEXT, key);\n","import { InjectionToken } from '@angular/core';\nimport { createControlledLoadingRegistry } from '../core/create-loading-registry';\nimport { ControlledLoadingRegistry } from '../model';\n\nexport const HTTP_LOADING_REGISTRY =\n  new InjectionToken<ControlledLoadingRegistry>(\n    '[ngx-reactive-loading] HttpLoadingRegistry',\n    {\n      providedIn: 'root',\n      factory: createControlledLoadingRegistry,\n    }\n  );\n","import {\n  HttpContext,\n  HttpContextToken,\n  HttpEvent,\n  HttpHandler,\n  HttpInterceptor,\n  HttpRequest,\n} from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable, finalize } from 'rxjs';\nimport { ControlledLoadingRegistry } from '../model';\nimport {\n  HTTP_LOADING_CONTEXT,\n  LOADING_DEFAULT_CONTEXT,\n} from './http-loading-context';\nimport { HTTP_LOADING_REGISTRY } from './http-loading-registry';\n\n@Injectable()\nexport class HttpLoadingRegistryInterceptor implements HttpInterceptor {\n  private readonly requestMap: Map<PropertyKey, number> = new Map<\n    PropertyKey,\n    number\n  >();\n\n  constructor(\n    @Inject(HTTP_LOADING_REGISTRY)\n    private readonly loadingRegistry: ControlledLoadingRegistry\n  ) {}\n\n  intercept<T>(\n    request: HttpRequest<T>,\n    next: HttpHandler\n  ): Observable<HttpEvent<T>> {\n    const loadingContext = this.getContext(request);\n\n    if (loadingContext !== LOADING_DEFAULT_CONTEXT) {\n      if (!this.loadingRegistry.keys().includes(loadingContext)) {\n        this.loadingRegistry.add(loadingContext);\n      }\n\n      this.addRequest(loadingContext);\n\n      if (this.getRequest(loadingContext) === 1) {\n        this.loadingRegistry.get(loadingContext)!.set(true);\n      }\n\n      return next.handle(request).pipe(\n        finalize(() => {\n          this.endRequest(loadingContext);\n          if (this.getRequest(loadingContext) === 0) {\n            this.loadingRegistry.get(loadingContext)!.set(false);\n            this.loadingRegistry.delete(loadingContext);\n          }\n        })\n      );\n    }\n\n    return next.handle(request);\n  }\n\n  private getContext(request: HttpRequest<unknown>): PropertyKey {\n    return request.context.get(HTTP_LOADING_CONTEXT);\n  }\n\n  getRequest(context: PropertyKey): number {\n    return this.requestMap.get(context) || 0;\n  }\n\n  private addRequest(context: PropertyKey): void {\n    this.requestMap.set(context, (this.requestMap.get(context) ?? 0) + 1);\n  }\n\n  private endRequest(context: PropertyKey): void {\n    this.requestMap.set(context, this.requestMap.get(context)! - 1);\n  }\n}\n","/*\n * Public API Surface of ngx-reactive-loading\n */\n\nexport { LoadingEvent, LoadingRegistry } from './lib/model';\nexport { withLoading } from './lib/operators';\nexport { someLoading, toLoadingEvent, untilLoading } from './lib/utils';\nexport {\n  createLoadingStore,\n  createLoadingRegistry,\n  LoadingStore,\n} from './lib/core';\nexport { LoadingService } from './lib/services';\nexport { ReactiveLoadingModule } from './lib/reactive-loading.module';\nexport { SOME_LOADING, LOADING_REGISTRY } from './lib/providers/token';\nexport { LoadingDirective } from './lib/components/loading.directive';\nexport { GetLoadingPipe } from './lib/pipes/get-loading.pipe';\n\n// Http Module\n\nexport {\n  HTTP_LOADING_CONTEXT,\n  withHttpLoadingContext,\n  HTTP_LOADING_REGISTRY,\n  HttpLoadingRegistryInterceptor,\n} from './lib/http/';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["someLoading","internalSomeLoading"],"mappings":"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"}