{"version":3,"file":"lotto24-angular-defer-queue.mjs","sources":["../../../../libs/defer-queue/src/lib/features/internal.ts","../../../../libs/defer-queue/src/lib/token.ts","../../../../libs/defer-queue/src/lib/features/bailout.ts","../../../../libs/defer-queue/src/lib/features/concurrency.ts","../../../../libs/defer-queue/src/lib/features/logger.ts","../../../../libs/defer-queue/src/lib/features/queue.ts","../../../../libs/defer-queue/src/lib/features/routing.ts","../../../../libs/defer-queue/src/lib/features/timeout.ts","../../../../libs/defer-queue/src/lib/util/wait.ts","../../../../libs/defer-queue/src/lib/queue/defer-queue-processor.service.ts","../../../../libs/defer-queue/src/lib/util/find-priority.ts","../../../../libs/defer-queue/src/lib/util/find-fn.ts","../../../../libs/defer-queue/src/lib/util/priority.ts","../../../../libs/defer-queue/src/lib/service.ts","../../../../libs/defer-queue/src/lib/directive.ts","../../../../libs/defer-queue/src/lib/queue/queue.ts","../../../../libs/defer-queue/src/lib/provide.ts","../../../../libs/defer-queue/src/lotto24-angular-defer-queue.ts"],"sourcesContent":["import { Provider } from '@angular/core';\n\nexport type DeferQueueFeatureBailout =\n  DeferQueueFeature<DeferQueueFeatureKind.Bailout>;\nexport type DeferQueueFeatureConcurrency =\n  DeferQueueFeature<DeferQueueFeatureKind.Concurrency>;\nexport type DeferQueueFeatureLogger =\n  DeferQueueFeature<DeferQueueFeatureKind.Logger>;\nexport type DeferQueueFeatureQueue =\n  DeferQueueFeature<DeferQueueFeatureKind.Queue>;\nexport type DeferQueueFeatureRouting =\n  DeferQueueFeature<DeferQueueFeatureKind.Routing>;\nexport type DeferQueueFeatureTimeout =\n  DeferQueueFeature<DeferQueueFeatureKind.Timeout>;\n\nexport enum DeferQueueFeatureKind {\n  Logger,\n  Queue,\n  Routing,\n  Concurrency,\n  Timeout,\n  Bailout,\n}\n\nexport type DeferQueueFeature<T extends DeferQueueFeatureKind> = {\n  kind: T;\n  providers: Provider[];\n};\n\nexport function deferQueueFeature<T extends DeferQueueFeatureKind>(\n  kind: T,\n  providers: Provider[]\n): DeferQueueFeature<T> {\n  return { kind, providers };\n}\n","import { InjectionToken } from '@angular/core';\nimport { Queue } from './queue/queue';\nimport { DeferQueueItem } from './service';\nimport {Observable} from \"rxjs\";\n\nexport const DEFER_QUEUE_FEATURE_BAILOUT = new InjectionToken<boolean>('DEFER_QUEUE_FEAUTURE_BAILOUT');\n\nexport const DEFER_QUEUE_FEATURE_CONCURRENCY = new InjectionToken<\n  number | (() => number)\n>('DEFER_QUEUE_FEAUTURE_CONCURRENCY');\n\nexport const DEFER_QUEUE_FEATURE_QUEUE = new InjectionToken<Queue<DeferQueueItem>>(\n  'DEFER_QUEUE_FEATURE_QUEUE'\n);\n\nexport const DEFER_QUEUE_FEATURE_ROUTING = new InjectionToken<Observable<boolean>>(\n  'DEFER_QUEUE_FEATURE_ROUTING'\n);\n\nexport const DEFER_QUEUE_FEATURE_TIMEOUT = new InjectionToken<number>(\n  'DEFER_QUEUE_FEAUTURE_TIMEOUT'\n);\nexport const DEFER_QUEUE_FEATURE_LOGGER = new InjectionToken<\n  Pick<Console, 'info' | 'warn' | 'error' | 'debug'>\n>('DEFER_QUEUE_FEAUTURE_LOGGER');\n","import {\n  deferQueueFeature,\n  DeferQueueFeatureBailout,\n  DeferQueueFeatureKind,\n} from './internal';\nimport { Provider } from '@angular/core';\nimport { DEFER_QUEUE_FEATURE_BAILOUT } from '../token';\n\n/**\n * Using this feature will initialize the signal for deferrable view conditions with true by default\n * effectively bypassing the condition.\n * @param value\n */\nexport function withBailout(value: boolean = true): DeferQueueFeatureBailout {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_BAILOUT,\n      useValue: value,\n    },\n  ];\n  return deferQueueFeature(DeferQueueFeatureKind.Bailout, providers);\n}\n","import { Provider } from '@angular/core';\nimport { DEFER_QUEUE_FEATURE_CONCURRENCY } from '../token';\nimport {\n  deferQueueFeature,\n  DeferQueueFeatureConcurrency,\n  DeferQueueFeatureKind,\n} from './internal';\n\nexport function withConcurrencyStatic(\n  value: number\n): DeferQueueFeatureConcurrency {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_CONCURRENCY,\n      useValue: value,\n    },\n  ];\n  return deferQueueFeature(DeferQueueFeatureKind.Concurrency, providers);\n}\n\n\n/**\n * @param onUpdateConcurrencyFn called when queue processor updates concurrency;\n */\nexport function withConcurrencyUpdateFn(\n  onUpdateConcurrencyFn: () => number\n): DeferQueueFeatureConcurrency {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_CONCURRENCY,\n      useValue: onUpdateConcurrencyFn,\n    },\n  ];\n\n  return deferQueueFeature(DeferQueueFeatureKind.Concurrency, providers);\n}\n","import { Provider } from '@angular/core';\nimport {\n  deferQueueFeature,\n  DeferQueueFeatureKind,\n  DeferQueueFeatureLogger,\n} from './internal';\nimport { DEFER_QUEUE_FEATURE_LOGGER } from '../token';\nimport {ConsoleLike} from \"../interface\";\n\nexport function withLogger(logger: ConsoleLike): DeferQueueFeatureLogger {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_LOGGER,\n      useValue: logger,\n    },\n  ];\n  return deferQueueFeature(DeferQueueFeatureKind.Logger, providers);\n}\n","import { Provider } from '@angular/core';\nimport {\n  deferQueueFeature,\n  DeferQueueFeatureKind,\n  DeferQueueFeatureQueue,\n} from './internal';\nimport { Queue } from '../queue/queue';\nimport { DEFER_QUEUE_FEATURE_QUEUE } from '../token';\nimport { DeferQueueItem } from '../service';\n\nexport function withQueue<T extends DeferQueueItem>(\n  queue: Queue<T>\n): DeferQueueFeatureQueue {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_QUEUE,\n      useValue: queue,\n    },\n  ];\n\n  return deferQueueFeature(DeferQueueFeatureKind.Queue, providers);\n}\n","import { Provider } from '@angular/core';\nimport {\n  deferQueueFeature,\n  DeferQueueFeatureKind,\n  DeferQueueFeatureRouting,\n} from './internal';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport {\n  asyncScheduler,\n  filter,\n  map,\n  Observable,\n  observeOn,\n  of,\n  shareReplay,\n  startWith,\n} from 'rxjs';\nimport { DEFER_QUEUE_FEATURE_ROUTING } from '../token';\n\nexport function withSuspendWhileRouting(\n  suspendForInitialNavigation = true\n): DeferQueueFeatureRouting {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_ROUTING,\n      useFactory: (router: Router) =>\n        isRoutingActive$(router, suspendForInitialNavigation),\n      deps: [Router],\n    },\n  ];\n  return deferQueueFeature(DeferQueueFeatureKind.Routing, providers);\n}\n\nexport function withoutRouting(): DeferQueueFeatureRouting {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_ROUTING,\n      useValue: of(false).pipe(shareReplay(1)),\n    },\n  ];\n  return deferQueueFeature(DeferQueueFeatureKind.Routing, providers);\n}\n\nfunction isRoutingActive$(\n  router: Router,\n  suspendForInitialNavigation: boolean\n): Observable<boolean> {\n  const navigationActive$ = router.events.pipe(\n    filter(\n      (event) =>\n        event instanceof NavigationStart || event instanceof NavigationEnd\n    ),\n    map((event) => {\n      if (event instanceof NavigationStart) {\n        return true;\n      }\n\n      return false;\n    }),\n    observeOn(asyncScheduler),\n    startWith(suspendForInitialNavigation)\n  );\n\n  return navigationActive$.pipe(shareReplay(1));\n}\n","import { Provider } from '@angular/core';\nimport {\n  deferQueueFeature,\n  DeferQueueFeatureKind,\n  DeferQueueFeatureTimeout,\n} from './internal';\nimport {DEFER_QUEUE_FEATURE_TIMEOUT} from \"../token\";\n\nexport function withTimeout(timeout: number = 10000): DeferQueueFeatureTimeout {\n  const providers: Provider[] = [\n    {\n      provide: DEFER_QUEUE_FEATURE_TIMEOUT,\n      useValue: timeout,\n    },\n  ];\n  return deferQueueFeature(DeferQueueFeatureKind.Timeout, providers);\n}\n","export const wait = async (ms: number = 0) =>\n  new Promise<void>((resolve) => setTimeout(() => resolve(), ms));\n","import { inject, Injectable } from '@angular/core';\nimport {\n  DEFER_QUEUE_FEATURE_CONCURRENCY,\n  DEFER_QUEUE_FEATURE_LOGGER,\n  DEFER_QUEUE_FEATURE_QUEUE,\n  DEFER_QUEUE_FEATURE_ROUTING,\n} from '../token';\nimport { wait } from '../util/wait';\nimport { filter, firstValueFrom, tap } from 'rxjs';\nimport { DeferQueueItem } from '../service';\n\n@Injectable({ providedIn: 'root' })\nexport class DeferQueueProcessor {\n  private static processing = false;\n\n  private readonly logger = inject(DEFER_QUEUE_FEATURE_LOGGER);\n  private readonly queue = inject(DEFER_QUEUE_FEATURE_QUEUE);\n  private readonly isRoutingActive$ = inject(DEFER_QUEUE_FEATURE_ROUTING);\n  private readonly concurrency = inject(DEFER_QUEUE_FEATURE_CONCURRENCY);\n\n  private running = 0;\n\n  public process(): void {\n    if (!DeferQueueProcessor.processing) {\n      // do not await, as it would block the lifecycle callback from completing until the queue is processed\n      DeferQueueProcessor.processing = true;\n\n      this.processQueue()\n        .then(() => {\n          this.logger.debug('queue processing ended');\n        })\n        .catch(() => {\n          this.logger.debug('queue processing failed');\n        })\n        .finally(() => {\n          DeferQueueProcessor.processing = false;\n        });\n    }\n  }\n\n  private async processQueue(): Promise<void> {\n    // DO NOT REMOVE, and DO NOT move past wait() statement below\n    // this will suspend queue processing while routing is active\n    // this is needed to prioritize lazy routes initialization, and items with higher priority resolved when routing\n    await this.suspendForNavigation();\n\n    // DO NOT REMOVE\n    // this is vital. otherwise the first deferrable view will be added to queue, read the signal, and synchronously write to the signal, causing an exception\n    // also, we need to wait a tick so that all deferrables can be added to the queue and sorted by priority (synchronously)\n    await wait();\n    // ^^\n\n    const concurrency = this.updateConcurrency();\n    const concurrentBatch = [];\n    for (let i = this.running; i < concurrency; i++) {\n      this.running++;\n\n      const item = this.queue.take();\n      concurrentBatch.push(this.processItem(item));\n\n      const timeouts = [];\n\n      while (this.isNextItemTimedout(this.queue.peek())) {\n        const item = this.queue.take();\n        timeouts.push(item?.identifier ?? 'unknown');\n        concurrentBatch.push(this.processItem(item));\n      }\n\n      if (timeouts.length > 0) {\n        this.logger.error(\n          `added ${timeouts.length} timed out item(s), [${timeouts.join(\n            ', '\n          )}]`\n        );\n      }\n    }\n\n    this.logger.debug(\n      `queue starting ${concurrentBatch.length} item(s) to reach max concurrency (concurrency=${concurrency}, running=${this.running})`\n    );\n    await Promise.all(concurrentBatch);\n  }\n\n  private isNextItemTimedout(item: DeferQueueItem | undefined): boolean {\n    if (!item) {\n      return false;\n    }\n\n    return Date.now() - item.timeCreated > item.timeout;\n  }\n\n  private async processItem(item: DeferQueueItem | null): Promise<void> {\n    // let's stop if there are no items in the queue\n    if (!item) {\n      this.logger.debug('queue is drained');\n      return;\n    }\n\n    try {\n      await item.resolved();\n    } catch (x) {\n      this.logger.error(`error resolving queue item (${item})`, x);\n    }\n\n    this.running--;\n    if (!this.queue.empty) {\n      await this.processQueue();\n    }\n  }\n\n  private updateConcurrency(): number {\n    return typeof this.concurrency === 'function'\n      ? this.concurrency()\n      : this.concurrency;\n  }\n\n  private async suspendForNavigation(): Promise<unknown> {\n    // suspend processing while routing, as navigation takes precedence\n    return firstValueFrom(\n      this.isRoutingActive$.pipe(\n        tap((active) => {\n          if (active) {\n            this.logger.debug('queue processing suspended for navigation');\n          }\n        }),\n        filter((active) => !active)\n      )\n    );\n  }\n}\n","import {ConsoleLike} from \"../interface\";\n\nexport const PRIORITY_LOWEST = 9999999999;\nexport function findPriority(\n  priorities: { [p: string]: number },\n  identifier: string,\n  logger: ConsoleLike\n): number {\n  if (typeof priorities[identifier] === 'number') {\n    return priorities[identifier];\n  }\n\n  const key = Object.keys(priorities).find((key) => identifier.startsWith(key));\n\n  if (key) {\n    return priorities[key];\n  }\n\n  logger.warn(\n    `no priority found for import '${identifier}; falling back to lowest priority'`\n  );\n\n  return PRIORITY_LOWEST;\n}\n","export function findFn<T>(\n  config: { [index: string]: string | T },\n  key: string,\n  trail: string[] = []\n): T {\n  const stringOrFn = config[key];\n\n  if (trail.includes(key)) {\n    throw new Error(\n      `circular reference found: ${[...trail, key].join(' => ')}`\n    );\n  }\n\n  if (typeof stringOrFn === 'string') {\n    return findFn(config, stringOrFn, [...trail, key]);\n  }\n\n  if (typeof stringOrFn === 'function') {\n    return stringOrFn;\n  }\n\n  throw new Error(`Missing entry for key=\"${key}\"`);\n}\n","const DEFER_QUEUE_ITEM_PRIORITIES = {\n  higher: 999_999_999,\n  high: 999_999,\n  default: 100_000,\n  low: 10_000,\n  lower: 1_000,\n} as const;\n\nexport type DeferQueueItemPriority =\n  | keyof typeof DEFER_QUEUE_ITEM_PRIORITIES\n  | number;\n\nexport function fromDeferQueueItemPriority(\n  priority: DeferQueueItemPriority\n): number {\n  if (typeof priority === 'number') {\n    return priority;\n  }\n\n  return (\n    DEFER_QUEUE_ITEM_PRIORITIES[priority] ?? DEFER_QUEUE_ITEM_PRIORITIES.default\n  );\n}\n","import {\n  DestroyRef,\n  effect,\n  inject,\n  Injectable,\n  Injector,\n  Signal,\n  signal,\n  Type,\n  WritableSignal,\n} from '@angular/core';\nimport {\n  DEFER_QUEUE_FEATURE_BAILOUT,\n  DEFER_QUEUE_FEATURE_LOGGER,\n  DEFER_QUEUE_FEATURE_QUEUE,\n  DEFER_QUEUE_FEATURE_TIMEOUT,\n} from './token';\nimport { DeferQueueProcessor } from './queue/defer-queue-processor.service';\nimport { ConsoleLike } from './interface';\nimport { defer, Observable, shareReplay, startWith, switchMap } from 'rxjs';\nimport { DeferQueueItemPriority, fromDeferQueueItemPriority } from './util';\n\nexport interface DeferQueueServiceOptions {\n  timeout: number;\n  identifier?: string;\n}\n\nexport interface DeferQueueDeferrable {\n  triggered: WritableSignal<boolean>;\n  resolve: (err?: Error) => void;\n}\n\nexport interface DeferQueueItem extends DeferQueueServiceOptions {\n  priority: DeferQueueItemPriority;\n  identifier?: string;\n  resolved: () => Promise<unknown>;\n  timeCreated: number;\n  logger: ConsoleLike;\n}\n\nexport interface SignalState<V> {\n  value: Signal<V>;\n}\n\nexport interface ObservableState<V> {\n  value$: Observable<V>;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DeferQueue {\n  private readonly queueProcessor = inject(DeferQueueProcessor);\n  private readonly bailout = inject(DEFER_QUEUE_FEATURE_BAILOUT);\n  private readonly timeout = inject(DEFER_QUEUE_FEATURE_TIMEOUT);\n  private readonly logger = inject(DEFER_QUEUE_FEATURE_LOGGER);\n  private readonly queue = inject(DEFER_QUEUE_FEATURE_QUEUE);\n  private readonly deferrableStore = new Map<string, DeferQueueDeferrable>();\n\n  public get view() {\n    let destroyRef: DestroyRef;\n    try {\n      destroyRef = inject(Injector).get(DestroyRef);\n    } catch (x) {\n      throw new Error(\n        `injector context required: please do not reference this property directly from a template, but expose it on your component, eg. \"protected readonly view = inject(DeferQueueService).view\", ${x}`\n      );\n    }\n\n    return {\n      when: this.when(destroyRef).bind(this),\n      resolve: this.resolve.bind(this),\n    };\n  }\n\n  private when(destroyRef: DestroyRef) {\n    return (\n      identifier: string,\n      priority: DeferQueueItemPriority = 'default'\n    ) => {\n      return this.deferrable(identifier, priority, destroyRef).triggered();\n    };\n  }\n\n  private resolve(identifier: string, err?: Error | undefined): void {\n    const deferrable = this.deferrableStore.get(identifier);\n    if (deferrable) {\n      deferrable.resolve(err);\n    } else {\n      this.logger.error(`could not resolve identifier=${identifier}`);\n    }\n  }\n\n  /**\n   * Creates a new deferrable queue item, and adds it to the queue. if an item with this identifier already exists, the existing item will be returned.\n   * @param identifier is used to connect the resolved item to the defer-trigger\n   * @param priority higher priority will resolve the deferrable earlier\n   *\n   */\n  private deferrable(\n    identifier: string,\n    priority: DeferQueueItemPriority = 'default',\n    destroyRef: DestroyRef,\n  ) {\n    if (!this.deferrableStore.has(identifier)) {\n      const deferrable: DeferQueueDeferrable = {\n        triggered: signal(this.bailout),\n        resolve: () => {\n          const taken = this.queue.take(item);\n          this.logger.info(\n            `removed deferrable (taken? ${!!taken} w/ identifier=${identifier}, priority=${priority}`\n          );\n        },\n      };\n\n      const resolved = () =>\n        new Promise<void>((resolve, reject) => {\n          deferrable.resolve = (err?: unknown) => {\n            if (err) {\n              reject(err);\n            } else {\n              resolve();\n              this.logger.info(\n                `resolved deferrable w/ identifier=${identifier}, priority=${priority}`\n              );\n            }\n          };\n          deferrable.triggered.set(true);\n        });\n\n      const item = this.createQueueItem(priority, resolved, { identifier })\n      this.deferrableStore.set(identifier, deferrable);\n      this.logger.debug(\n        `insert deferrable w/ identifier=${identifier}, ${priority}`\n      );\n      this.queue.insert(fromDeferQueueItemPriority(priority), item);\n      this.queueProcessor.process();\n    }\n\n    return this.deferrableStore.get(identifier) as DeferQueueDeferrable;\n  }\n\n  public state<V, T extends SignalState<V>>(\n    initialValue: V,\n    dynamicImport: () => Promise<Type<T>>,\n    priority: DeferQueueItemPriority = 'default',\n    injector = inject(Injector)\n  ): Signal<V> {\n    const value = signal(initialValue);\n    this.serviceAsync(dynamicImport, priority, injector).then((service) =>\n      effect(() => value.set(service.value()), {\n        allowSignalWrites: true,\n        injector,\n      })\n    );\n\n    return value.asReadonly();\n  }\n\n  public state$<V, T extends ObservableState<V>>(\n    initialValue: V,\n    dynamicImport: () => Promise<Type<T>>,\n    priority: DeferQueueItemPriority = 'default',\n    injector = inject(Injector)\n  ): Observable<V> {\n    return this.service$(dynamicImport, priority, injector).pipe(\n      switchMap((service) => service.value$),\n      startWith(initialValue),\n      shareReplay(1)\n    );\n  }\n\n  public service$<T>(\n    dynamicImport: () => Promise<Type<T>>,\n    priority: DeferQueueItemPriority = 'default',\n    injector = inject(Injector)\n  ) {\n    return defer(this.serviceItem(dynamicImport, priority, injector));\n  }\n\n  public async serviceAsync<T>(\n    dynamicImport: () => Promise<Type<T>>,\n    priority: DeferQueueItemPriority = 'default',\n    injector = inject(Injector)\n  ) {\n    return this.serviceItem(dynamicImport, priority, injector)();\n  }\n\n  public service<T>(\n    dynamicImport: () => Promise<Type<T>>,\n    priority: DeferQueueItemPriority = 'default',\n    injector = inject(Injector)\n  ): Signal<T | null> {\n    const s = signal<T | null>(null);\n    this.serviceAsync(dynamicImport, priority, injector).then((service) =>\n      s.set(service)\n    );\n\n    return s;\n  }\n\n  private serviceItem<T>(\n    dynamicImport: () => Promise<Type<T>>,\n    priority: DeferQueueItemPriority = 'default',\n    injector: Injector\n  ) {\n    return () => {\n      let fn: (value: T | undefined, err: unknown) => void;\n      const promise = new Promise<T>((resolve, reject) => {\n        fn = (value: T | undefined, err: unknown) => {\n          if (err || !value) {\n            reject(err);\n          } else {\n            resolve(value);\n          }\n        };\n      });\n\n      const resolved = () =>\n        dynamicImport()\n          .then((service) => {\n            this.logger.info(\n              `resolved service w/ name=${service.name}, priority=${priority}`\n            );\n            return service;\n          })\n          .then((service) => injector.get(service))\n          .then((instance) => fn(instance, null))\n          .catch((err) => fn(undefined, err));\n\n      const item = this.createQueueItem(priority, resolved, { identifier: '<service>' });\n      this.queue.insert(fromDeferQueueItemPriority(priority), item);\n      this.logger.debug(`insert service`);\n      this.queueProcessor.process();\n\n      return promise;\n    };\n  }\n\n  private createQueueItem(\n    priority: DeferQueueItemPriority,\n    resolved: () => Promise<unknown>,\n    options: Partial<DeferQueueServiceOptions> = {}\n  ): Readonly<DeferQueueItem> {\n    const opts: DeferQueueServiceOptions = {\n      ...options,\n      timeout: options.timeout ?? this.timeout,\n    };\n\n    return {\n      ...opts,\n      priority,\n      resolved,\n      timeCreated: Date.now(),\n      logger: this.logger,\n    };\n  }\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { DeferQueue } from './service';\n\n@Directive({\n  selector: '[deferQueueResolve]',\n  standalone: true,\n})\nexport class DeferQueueResolveDirective {\n  public deferQueueResolve = input.required<string>();\n  private readonly view = inject(DeferQueue).view;\n\n  constructor() {\n    effect(() => {\n      this.view.resolve(this.deferQueueResolve());\n    });\n  }\n}\n","interface Item<T> {\n  priority: number;\n  payload: T;\n}\n\nexport class Queue<T> {\n  protected data: Item<T>[] = [];\n\n  public insert(priority: number, payload: T): void {\n    this.data = [...this.data, { priority, payload }].sort(comparePriorityHighToLow);\n  }\n\n  public take(payload: T | null = null): T | null {\n    if (!payload) {\n      return this.data.shift()?.payload || null;\n    }\n\n    return this.takeSpecific(payload);\n  }\n\n  public peek(): T | undefined {\n    return this.data[0]?.payload;\n  }\n\n  public get length(): number {\n    return this.data.length;\n  }\n\n  public get empty(): boolean {\n    return this.length < 1;\n  }\n\n  private takeSpecific(payload: T): T | null {\n    const index = this.data.findIndex((s) => s.payload === payload);\n    if (index < 0) {\n      return null;\n    }\n\n    payload = this.data[index].payload;\n    const updated = this.data.slice();\n    updated.splice(index, 1);\n    this.data = updated;\n    return payload;\n  }\n}\n\nfunction comparePriorityHighToLow<T>(a: Item<T>, b: Item<T>) {\n  return b.priority - a.priority;\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport {\n  withBailout,\n  withConcurrencyStatic,\n  withLogger,\n  withoutRouting,\n  withQueue,\n  withTimeout,\n} from './features';\nimport { Queue } from './queue/queue';\nimport {\n  DeferQueueFeatureBailout,\n  DeferQueueFeatureConcurrency,\n  DeferQueueFeatureLogger,\n  DeferQueueFeatureQueue,\n  DeferQueueFeatureRouting,\n  DeferQueueFeatureTimeout,\n} from './features/internal';\nimport { DeferQueueItem } from './service';\n\nexport type DeferQueueFeatures = (\n  | DeferQueueFeatureBailout\n  | DeferQueueFeatureConcurrency\n  | DeferQueueFeatureLogger\n  | DeferQueueFeatureQueue\n  | DeferQueueFeatureRouting\n  | DeferQueueFeatureTimeout\n)[];\n\nexport const provideDeferQueue = <O>(\n  ...features: DeferQueueFeatures\n): EnvironmentProviders =>\n  makeEnvironmentProviders([\n    ...[\n      withBailout(false),\n      withConcurrencyStatic(1),\n      withLogger(console),\n      withQueue(new Queue<DeferQueueItem>()),\n      withoutRouting(),\n      withTimeout(),\n    ].map((feature) => feature.providers),\n    ...(features ?? []).map((feature) => feature.providers),\n  ]);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}