{"version":3,"file":"ngrx-store-devtools.mjs","sources":["../../../../modules/store-devtools/src/actions.ts","../../../../modules/store-devtools/src/config.ts","../../../../modules/store-devtools/src/utils.ts","../../../../modules/store-devtools/src/zone-config.ts","../../../../modules/store-devtools/src/devtools-dispatcher.ts","../../../../modules/store-devtools/src/extension.ts","../../../../modules/store-devtools/src/reducer.ts","../../../../modules/store-devtools/src/devtools.ts","../../../../modules/store-devtools/src/provide-store-devtools.ts","../../../../modules/store-devtools/src/instrument.ts","../../../../modules/store-devtools/index.ts","../../../../modules/store-devtools/ngrx-store-devtools.ts"],"sourcesContent":["import { Action } from '@ngrx/store';\n\nexport const PERFORM_ACTION = 'PERFORM_ACTION';\nexport const REFRESH = 'REFRESH';\nexport const RESET = 'RESET';\nexport const ROLLBACK = 'ROLLBACK';\nexport const COMMIT = 'COMMIT';\nexport const SWEEP = 'SWEEP';\nexport const TOGGLE_ACTION = 'TOGGLE_ACTION';\nexport const SET_ACTIONS_ACTIVE = 'SET_ACTIONS_ACTIVE';\nexport const JUMP_TO_STATE = 'JUMP_TO_STATE';\nexport const JUMP_TO_ACTION = 'JUMP_TO_ACTION';\nexport const IMPORT_STATE = 'IMPORT_STATE';\nexport const LOCK_CHANGES = 'LOCK_CHANGES';\nexport const PAUSE_RECORDING = 'PAUSE_RECORDING';\n\nexport class PerformAction implements Action {\n  readonly type = PERFORM_ACTION;\n\n  constructor(\n    public action: Action,\n    public timestamp: number\n  ) {\n    if (typeof action.type === 'undefined') {\n      throw new Error(\n        'Actions may not have an undefined \"type\" property. ' +\n          'Have you misspelled a constant?'\n      );\n    }\n  }\n}\n\nexport class Refresh implements Action {\n  readonly type = REFRESH;\n}\n\nexport class Reset implements Action {\n  readonly type = RESET;\n\n  constructor(public timestamp: number) {}\n}\n\nexport class Rollback implements Action {\n  readonly type = ROLLBACK;\n\n  constructor(public timestamp: number) {}\n}\n\nexport class Commit implements Action {\n  readonly type = COMMIT;\n\n  constructor(public timestamp: number) {}\n}\n\nexport class Sweep implements Action {\n  readonly type = SWEEP;\n}\n\nexport class ToggleAction implements Action {\n  readonly type = TOGGLE_ACTION;\n\n  constructor(public id: number) {}\n}\n\nexport class SetActionsActive implements Action {\n  readonly type = SET_ACTIONS_ACTIVE;\n\n  constructor(\n    public start: number,\n    public end: number,\n    public active = true\n  ) {}\n}\n\nexport class JumpToState implements Action {\n  readonly type = JUMP_TO_STATE;\n\n  constructor(public index: number) {}\n}\n\nexport class JumpToAction implements Action {\n  readonly type = JUMP_TO_ACTION;\n\n  constructor(public actionId: number) {}\n}\n\nexport class ImportState implements Action {\n  readonly type = IMPORT_STATE;\n\n  constructor(public nextLiftedState: any) {}\n}\n\nexport class LockChanges implements Action {\n  readonly type = LOCK_CHANGES;\n\n  constructor(public status: boolean) {}\n}\n\nexport class PauseRecording implements Action {\n  readonly type = PAUSE_RECORDING;\n\n  constructor(public status: boolean) {}\n}\n\nexport type All =\n  | PerformAction\n  | Refresh\n  | Reset\n  | Rollback\n  | Commit\n  | Sweep\n  | ToggleAction\n  | SetActionsActive\n  | JumpToState\n  | JumpToAction\n  | ImportState\n  | LockChanges\n  | PauseRecording;\n","import { ActionReducer, Action } from '@ngrx/store';\nimport { InjectionToken } from '@angular/core';\n\nexport type ActionSanitizer = (action: Action, id: number) => Action;\nexport type StateSanitizer = (state: any, index: number) => any;\nexport type SerializationOptions = {\n  options?: boolean | any;\n  replacer?: (key: any, value: any) => {};\n  reviver?: (key: any, value: any) => {};\n  immutable?: any;\n  refs?: Array<any>;\n};\nexport type Predicate = (state: any, action: Action) => boolean;\n\n/**\n * Chrome extension documentation\n * @see https://github.com/reduxjs/redux-devtools/blob/main/extension/docs/API/Arguments.md#features\n * Firefox extension documentation\n * @see https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md#features\n */\nexport interface DevToolsFeatureOptions {\n  /**\n   * Start/pause recording of dispatched actions\n   */\n  pause?: boolean;\n  /**\n   * Lock/unlock dispatching actions and side effects\n   */\n  lock?: boolean;\n  /**\n   * Persist states on page reloading\n   */\n  persist?: boolean;\n  /**\n   * Export history of actions in a file\n   */\n  export?: boolean;\n  /**\n   * Import history of actions from a file\n   */\n  import?: 'custom' | boolean;\n  /**\n   * Jump back and forth (time travelling)\n   */\n  jump?: boolean;\n  /**\n   * Skip (cancel) actions\n   */\n  skip?: boolean;\n  /**\n   * Drag and drop actions in the history list\n   */\n  reorder?: boolean;\n  /**\n   * Dispatch custom actions or action creators\n   */\n  dispatch?: boolean;\n  /**\n   * Generate tests for the selected actions\n   */\n  test?: boolean;\n}\n\n/**\n * Chrome extension documentation\n * @see https://github.com/reduxjs/redux-devtools/blob/main/extension/docs/API/Arguments.md\n * Firefox extension documentation\n * @see https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md\n */\nexport class StoreDevtoolsConfig {\n  /**\n   * Maximum allowed actions to be stored in the history tree (default: `false`)\n   */\n  maxAge: number | false = false;\n  monitor?: ActionReducer<any, any>;\n  /**\n   * Function which takes `action` object and id number as arguments, and should return `action` object back.\n   */\n  actionSanitizer?: ActionSanitizer;\n  /**\n   * Function which takes `state` object and index as arguments, and should return `state` object back.\n   */\n  stateSanitizer?: StateSanitizer;\n  /**\n   * The instance name to be shown on the monitor page (default: `document.title`)\n   */\n  name?: string;\n  serialize?: boolean | SerializationOptions;\n  logOnly?: boolean;\n  features?: DevToolsFeatureOptions;\n  /**\n   * Action types to be hidden in the monitors. If `actionsSafelist` specified, `actionsBlocklist` is ignored.\n   */\n  actionsBlocklist?: string[];\n  /**\n   * Action types to be shown in the monitors\n   */\n  actionsSafelist?: string[];\n  /**\n   * Called for every action before sending, takes state and action object, and returns true in case it allows sending the current data to the monitor.\n   */\n  predicate?: Predicate;\n  /**\n   * Auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\n   */\n  autoPause?: boolean;\n\n  /**\n   * If set to true, will include stack trace for every dispatched action\n   */\n  trace?: boolean | (() => string);\n\n  /**\n   * Maximum stack trace frames to be stored (in case trace option was provided as true).\n   */\n  traceLimit?: number;\n\n  /**\n   * The property determines whether the extension connection is established within the\n   * Angular zone or not. It is set to `false` by default.\n   */\n  connectInZone?: boolean;\n}\n\nexport const STORE_DEVTOOLS_CONFIG = new InjectionToken<StoreDevtoolsConfig>(\n  '@ngrx/store-devtools Options'\n);\n\n/**\n * Used to provide a `StoreDevtoolsConfig` for the store-devtools.\n */\nexport const INITIAL_OPTIONS = new InjectionToken<StoreDevtoolsConfig>(\n  '@ngrx/store-devtools Initial Config'\n);\n\nexport type StoreDevtoolsOptions =\n  | Partial<StoreDevtoolsConfig>\n  | (() => Partial<StoreDevtoolsConfig>);\n\nexport function noMonitor(): null {\n  return null;\n}\n\nexport const DEFAULT_NAME = 'NgRx Store DevTools';\n\nexport function createConfig(\n  optionsInput: StoreDevtoolsOptions\n): StoreDevtoolsConfig {\n  const DEFAULT_OPTIONS: StoreDevtoolsConfig = {\n    maxAge: false,\n    monitor: noMonitor,\n    actionSanitizer: undefined,\n    stateSanitizer: undefined,\n    name: DEFAULT_NAME,\n    serialize: false,\n    logOnly: false,\n    autoPause: false,\n    trace: false,\n    traceLimit: 75,\n    // Add all features explicitly. This prevent buggy behavior for\n    // options like \"lock\" which might otherwise not show up.\n    features: {\n      pause: true, // Start/pause recording of dispatched actions\n      lock: true, // Lock/unlock dispatching actions and side effects\n      persist: true, // Persist states on page reloading\n      export: true, // Export history of actions in a file\n      import: 'custom', // Import history of actions from a file\n      jump: true, // Jump back and forth (time travelling)\n      skip: true, // Skip (cancel) actions\n      reorder: true, // Drag and drop actions in the history list\n      dispatch: true, // Dispatch custom actions or action creators\n      test: true, // Generate tests for the selected actions\n    },\n    connectInZone: false,\n  };\n\n  const options =\n    typeof optionsInput === 'function' ? optionsInput() : optionsInput;\n  const logOnly = options.logOnly\n    ? { pause: true, export: true, test: true }\n    : false;\n  const features: NonNullable<Partial<StoreDevtoolsConfig['features']>> =\n    options.features ||\n    logOnly ||\n    (DEFAULT_OPTIONS.features as NonNullable<\n      Partial<StoreDevtoolsConfig['features']>\n    >);\n  if (features.import === true) {\n    features.import = 'custom';\n  }\n  const config = Object.assign({}, DEFAULT_OPTIONS, { features }, options);\n\n  if (config.maxAge && config.maxAge < 2) {\n    throw new Error(\n      `Devtools 'maxAge' cannot be less than 2, got ${config.maxAge}`\n    );\n  }\n\n  return config;\n}\n","import { Action } from '@ngrx/store';\n\nimport * as Actions from './actions';\nimport {\n  ActionSanitizer,\n  StateSanitizer,\n  Predicate,\n  StoreDevtoolsConfig,\n} from './config';\nimport {\n  ComputedState,\n  LiftedAction,\n  LiftedActions,\n  LiftedState,\n} from './reducer';\n\nexport function difference(first: any[], second: any[]) {\n  return first.filter((item) => second.indexOf(item) < 0);\n}\n\n/**\n * Provides an app's view into the state of the lifted store.\n */\nexport function unliftState(liftedState: LiftedState) {\n  const { computedStates, currentStateIndex } = liftedState;\n\n  // At start up NgRx dispatches init actions,\n  // When these init actions are being filtered out by the predicate or safe/block list options\n  // we don't have a complete computed states yet.\n  // At this point it could happen that we're out of bounds, when this happens we fall back to the last known state\n  if (currentStateIndex >= computedStates.length) {\n    const { state } = computedStates[computedStates.length - 1];\n    return state;\n  }\n\n  const { state } = computedStates[currentStateIndex];\n  return state;\n}\n\nexport function unliftAction(liftedState: LiftedState): LiftedAction {\n  return liftedState.actionsById[liftedState.nextActionId - 1];\n}\n\n/**\n * Lifts an app's action into an action on the lifted store.\n */\nexport function liftAction(action: Action) {\n  return new Actions.PerformAction(action, +Date.now());\n}\n\n/**\n * Sanitizes given actions with given function.\n */\nexport function sanitizeActions(\n  actionSanitizer: ActionSanitizer,\n  actions: LiftedActions\n): LiftedActions {\n  return Object.keys(actions).reduce(\n    (sanitizedActions, actionIdx) => {\n      const idx = Number(actionIdx);\n      sanitizedActions[idx] = sanitizeAction(\n        actionSanitizer,\n        actions[idx],\n        idx\n      );\n      return sanitizedActions;\n    },\n    <LiftedActions>{}\n  );\n}\n\n/**\n * Sanitizes given action with given function.\n */\nexport function sanitizeAction(\n  actionSanitizer: ActionSanitizer,\n  action: LiftedAction,\n  actionIdx: number\n): LiftedAction {\n  return {\n    ...action,\n    action: actionSanitizer(action.action, actionIdx),\n  };\n}\n\n/**\n * Sanitizes given states with given function.\n */\nexport function sanitizeStates(\n  stateSanitizer: StateSanitizer,\n  states: ComputedState[]\n): ComputedState[] {\n  return states.map((computedState, idx) => ({\n    state: sanitizeState(stateSanitizer, computedState.state, idx),\n    error: computedState.error,\n  }));\n}\n\n/**\n * Sanitizes given state with given function.\n */\nexport function sanitizeState(\n  stateSanitizer: StateSanitizer,\n  state: any,\n  stateIdx: number\n) {\n  return stateSanitizer(state, stateIdx);\n}\n\n/**\n * Read the config and tell if actions should be filtered\n */\nexport function shouldFilterActions(config: StoreDevtoolsConfig) {\n  return config.predicate || config.actionsSafelist || config.actionsBlocklist;\n}\n\n/**\n * Return a full filtered lifted state\n */\nexport function filterLiftedState(\n  liftedState: LiftedState,\n  predicate?: Predicate,\n  safelist?: string[],\n  blocklist?: string[]\n): LiftedState {\n  const filteredStagedActionIds: number[] = [];\n  const filteredActionsById: LiftedActions = {};\n  const filteredComputedStates: ComputedState[] = [];\n  liftedState.stagedActionIds.forEach((id, idx) => {\n    const liftedAction = liftedState.actionsById[id];\n    if (!liftedAction) return;\n    if (\n      idx &&\n      isActionFiltered(\n        liftedState.computedStates[idx],\n        liftedAction,\n        predicate,\n        safelist,\n        blocklist\n      )\n    ) {\n      return;\n    }\n    filteredActionsById[id] = liftedAction;\n    filteredStagedActionIds.push(id);\n    filteredComputedStates.push(liftedState.computedStates[idx]);\n  });\n  return {\n    ...liftedState,\n    stagedActionIds: filteredStagedActionIds,\n    actionsById: filteredActionsById,\n    computedStates: filteredComputedStates,\n  };\n}\n\n/**\n * Return true is the action should be ignored\n */\nexport function isActionFiltered(\n  state: any,\n  action: LiftedAction,\n  predicate?: Predicate,\n  safelist?: string[],\n  blockedlist?: string[]\n) {\n  const predicateMatch = predicate && !predicate(state, action.action);\n  const safelistMatch =\n    safelist &&\n    !action.action.type.match(safelist.map((s) => escapeRegExp(s)).join('|'));\n  const blocklistMatch =\n    blockedlist &&\n    action.action.type.match(blockedlist.map((s) => escapeRegExp(s)).join('|'));\n  return predicateMatch || safelistMatch || blocklistMatch;\n}\n\n/**\n * Return string with escaped RegExp special characters\n * https://stackoverflow.com/a/6969486/1337347\n */\nfunction escapeRegExp(s: string): string {\n  return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { NgZone, inject } from '@angular/core';\n\nexport type ZoneConfig =\n  | { connectInZone: true; ngZone: NgZone }\n  | { connectInZone: false; ngZone: null };\n\nexport function injectZoneConfig(connectInZone: boolean) {\n  const ngZone = connectInZone ? inject(NgZone) : null;\n  return { ngZone, connectInZone } as ZoneConfig;\n}\n","import { ActionsSubject } from '@ngrx/store';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DevtoolsDispatcher extends ActionsSubject {}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport { Action, UPDATE } from '@ngrx/store';\nimport { EMPTY, Observable, of } from 'rxjs';\nimport {\n  catchError,\n  concatMap,\n  debounceTime,\n  filter,\n  map,\n  share,\n  switchMap,\n  take,\n  takeUntil,\n  timeout,\n} from 'rxjs/operators';\n\nimport { IMPORT_STATE, PERFORM_ACTION } from './actions';\nimport {\n  SerializationOptions,\n  STORE_DEVTOOLS_CONFIG,\n  StoreDevtoolsConfig,\n} from './config';\nimport { DevtoolsDispatcher } from './devtools-dispatcher';\nimport { LiftedAction, LiftedState } from './reducer';\nimport {\n  isActionFiltered,\n  sanitizeAction,\n  sanitizeActions,\n  sanitizeState,\n  sanitizeStates,\n  shouldFilterActions,\n  unliftState,\n} from './utils';\nimport { injectZoneConfig } from './zone-config';\n\nexport const ExtensionActionTypes = {\n  START: 'START',\n  DISPATCH: 'DISPATCH',\n  STOP: 'STOP',\n  ACTION: 'ACTION',\n};\n\nexport const REDUX_DEVTOOLS_EXTENSION =\n  new InjectionToken<ReduxDevtoolsExtension>(\n    '@ngrx/store-devtools Redux Devtools Extension'\n  );\n\nexport interface ReduxDevtoolsExtensionConnection {\n  subscribe(listener: (change: any) => void): void;\n  unsubscribe(): void;\n  send(action: any, state: any): void;\n  init(state?: any): void;\n  error(anyErr: any): void;\n}\nexport interface ReduxDevtoolsExtensionConfig {\n  features?: object | boolean;\n  name: string | undefined;\n  maxAge?: number;\n  autoPause?: boolean;\n  serialize?: boolean | SerializationOptions;\n  trace?: boolean | (() => string);\n  traceLimit?: number;\n}\n\nexport interface ReduxDevtoolsExtension {\n  connect(\n    options: ReduxDevtoolsExtensionConfig\n  ): ReduxDevtoolsExtensionConnection;\n  send(action: any, state: any, options: ReduxDevtoolsExtensionConfig): void;\n}\n\n@Injectable()\nexport class DevtoolsExtension {\n  private devtoolsExtension: ReduxDevtoolsExtension;\n  private extensionConnection!: ReduxDevtoolsExtensionConnection;\n\n  liftedActions$!: Observable<any>;\n  actions$!: Observable<any>;\n  start$!: Observable<any>;\n\n  private zoneConfig = injectZoneConfig(this.config.connectInZone!);\n\n  constructor(\n    @Inject(REDUX_DEVTOOLS_EXTENSION) devtoolsExtension: ReduxDevtoolsExtension,\n    @Inject(STORE_DEVTOOLS_CONFIG) private config: StoreDevtoolsConfig,\n    private dispatcher: DevtoolsDispatcher\n  ) {\n    this.devtoolsExtension = devtoolsExtension;\n    this.createActionStreams();\n  }\n\n  notify(action: LiftedAction, state: LiftedState) {\n    if (!this.devtoolsExtension) {\n      return;\n    }\n    // Check to see if the action requires a full update of the liftedState.\n    // If it is a simple action generated by the user's app and the recording\n    // is not locked/paused, only send the action and the current state (fast).\n    //\n    // A full liftedState update (slow: serializes the entire liftedState) is\n    // only required when:\n    //   a) redux-devtools-extension fires the @@Init action (ignored by\n    //      @ngrx/store-devtools)\n    //   b) an action is generated by an @ngrx module (e.g. @ngrx/effects/init\n    //      or @ngrx/store/update-reducers)\n    //   c) the state has been recomputed due to time-traveling\n    //   d) any action that is not a PerformAction to err on the side of\n    //      caution.\n    if (action.type === PERFORM_ACTION) {\n      if (state.isLocked || state.isPaused) {\n        return;\n      }\n\n      const currentState = unliftState(state);\n      if (\n        shouldFilterActions(this.config) &&\n        isActionFiltered(\n          currentState,\n          action,\n          this.config.predicate,\n          this.config.actionsSafelist,\n          this.config.actionsBlocklist\n        )\n      ) {\n        return;\n      }\n      const sanitizedState = this.config.stateSanitizer\n        ? sanitizeState(\n            this.config.stateSanitizer,\n            currentState,\n            state.currentStateIndex\n          )\n        : currentState;\n      const sanitizedAction = this.config.actionSanitizer\n        ? sanitizeAction(\n            this.config.actionSanitizer,\n            action,\n            state.nextActionId\n          )\n        : action;\n\n      this.sendToReduxDevtools(() =>\n        this.extensionConnection.send(sanitizedAction, sanitizedState)\n      );\n    } else {\n      // Requires full state update\n      const sanitizedLiftedState = {\n        ...state,\n        stagedActionIds: state.stagedActionIds,\n        actionsById: this.config.actionSanitizer\n          ? sanitizeActions(this.config.actionSanitizer, state.actionsById)\n          : state.actionsById,\n        computedStates: this.config.stateSanitizer\n          ? sanitizeStates(this.config.stateSanitizer, state.computedStates)\n          : state.computedStates,\n      };\n\n      this.sendToReduxDevtools(() =>\n        this.devtoolsExtension.send(\n          null,\n          sanitizedLiftedState,\n          this.getExtensionConfig(this.config)\n        )\n      );\n    }\n  }\n\n  private createChangesObservable(): Observable<any> {\n    if (!this.devtoolsExtension) {\n      return EMPTY;\n    }\n\n    return new Observable((subscriber) => {\n      const connection = this.zoneConfig.connectInZone\n        ? // To reduce change detection cycles, we need to run the `connect` method\n          // outside of the Angular zone. The `connect` method adds a `message`\n          // event listener to communicate with an extension using `window.postMessage`\n          // and handle message events.\n          this.zoneConfig.ngZone.runOutsideAngular(() =>\n            this.devtoolsExtension.connect(this.getExtensionConfig(this.config))\n          )\n        : this.devtoolsExtension.connect(this.getExtensionConfig(this.config));\n\n      this.extensionConnection = connection;\n      connection.init();\n\n      connection.subscribe((change: any) => subscriber.next(change));\n      return connection.unsubscribe;\n    });\n  }\n\n  private createActionStreams() {\n    // Listens to all changes\n    const changes$ = this.createChangesObservable().pipe(share());\n\n    // Listen for the start action\n    const start$ = changes$.pipe(\n      filter((change: any) => change.type === ExtensionActionTypes.START)\n    );\n\n    // Listen for the stop action\n    const stop$ = changes$.pipe(\n      filter((change: any) => change.type === ExtensionActionTypes.STOP)\n    );\n\n    // Listen for lifted actions\n    const liftedActions$ = changes$.pipe(\n      filter((change) => change.type === ExtensionActionTypes.DISPATCH),\n      map((change) => this.unwrapAction(change.payload)),\n      concatMap((action: any) => {\n        if (action.type === IMPORT_STATE) {\n          // State imports may happen in two situations:\n          // 1. Explicitly by user\n          // 2. User activated the \"persist state accross reloads\" option\n          //    and now the state is imported during reload.\n          // Because of option 2, we need to give possible\n          // lazy loaded reducers time to instantiate.\n          // As soon as there is no UPDATE action within 1 second,\n          // it is assumed that all reducers are loaded.\n          return this.dispatcher.pipe(\n            filter((action) => action.type === UPDATE),\n            timeout(1000),\n            debounceTime(1000),\n            map(() => action),\n            catchError(() => of(action)),\n            take(1)\n          );\n        } else {\n          return of(action);\n        }\n      })\n    );\n\n    // Listen for unlifted actions\n    const actions$ = changes$.pipe(\n      filter((change) => change.type === ExtensionActionTypes.ACTION),\n      map((change) => this.unwrapAction(change.payload))\n    );\n\n    const actionsUntilStop$ = actions$.pipe(takeUntil(stop$));\n    const liftedUntilStop$ = liftedActions$.pipe(takeUntil(stop$));\n    this.start$ = start$.pipe(takeUntil(stop$));\n\n    // Only take the action sources between the start/stop events\n    this.actions$ = this.start$.pipe(switchMap(() => actionsUntilStop$));\n    this.liftedActions$ = this.start$.pipe(switchMap(() => liftedUntilStop$));\n  }\n\n  private unwrapAction(action: Action) {\n    // indirect eval according to https://esbuild.github.io/content-types/#direct-eval\n    return typeof action === 'string' ? (0, eval)(`(${action})`) : action;\n  }\n\n  private getExtensionConfig(config: StoreDevtoolsConfig) {\n    const extensionOptions: ReduxDevtoolsExtensionConfig = {\n      name: config.name,\n      features: config.features,\n      serialize: config.serialize,\n      autoPause: config.autoPause ?? false,\n      trace: config.trace ?? false,\n      traceLimit: config.traceLimit ?? 75,\n      // The action/state sanitizers are not added to the config\n      // because sanitation is done in this class already.\n      // It is done before sending it to the devtools extension for consistency:\n      // - If we call extensionConnection.send(...),\n      //   the extension would call the sanitizers.\n      // - If we call devtoolsExtension.send(...) (aka full state update),\n      //   the extension would NOT call the sanitizers, so we have to do it ourselves.\n    };\n    if (config.maxAge !== false /* support === 0 */) {\n      extensionOptions.maxAge = config.maxAge;\n    }\n    return extensionOptions;\n  }\n\n  private sendToReduxDevtools(send: Function) {\n    try {\n      send();\n    } catch (err: any) {\n      console.warn(\n        '@ngrx/store-devtools: something went wrong inside the redux devtools',\n        err\n      );\n    }\n  }\n}\n","import { ErrorHandler } from '@angular/core';\nimport { Action, ActionReducer, UPDATE, INIT } from '@ngrx/store';\n\nimport { difference, liftAction, isActionFiltered } from './utils';\nimport * as DevtoolsActions from './actions';\nimport { StoreDevtoolsConfig } from './config';\nimport { PerformAction } from './actions';\n\nexport type InitAction = {\n  readonly type: typeof INIT;\n};\n\nexport type UpdateReducerAction = {\n  readonly type: typeof UPDATE;\n};\n\nexport type CoreActions = InitAction | UpdateReducerAction;\nexport type Actions = DevtoolsActions.All | CoreActions;\n\nexport const INIT_ACTION = { type: INIT };\n\nexport const RECOMPUTE = '@ngrx/store-devtools/recompute' as const;\nexport const RECOMPUTE_ACTION = { type: RECOMPUTE };\n\nexport interface ComputedState {\n  state: any;\n  error: any;\n}\n\nexport interface LiftedAction {\n  type: string;\n  action: Action;\n}\n\nexport interface LiftedActions {\n  [id: number]: LiftedAction;\n}\n\nexport interface LiftedState {\n  monitorState: any;\n  nextActionId: number;\n  actionsById: LiftedActions;\n  stagedActionIds: number[];\n  skippedActionIds: number[];\n  committedState: any;\n  currentStateIndex: number;\n  computedStates: ComputedState[];\n  isLocked: boolean;\n  isPaused: boolean;\n}\n\n/**\n * Computes the next entry in the log by applying an action.\n */\nfunction computeNextEntry(\n  reducer: ActionReducer<any, any>,\n  action: Action,\n  state: any,\n  error: any,\n  errorHandler: ErrorHandler\n) {\n  if (error) {\n    return {\n      state,\n      error: 'Interrupted by an error up the chain',\n    };\n  }\n\n  let nextState = state;\n  let nextError;\n  try {\n    nextState = reducer(state, action);\n  } catch (err: any) {\n    nextError = err.toString();\n    errorHandler.handleError(err);\n  }\n\n  return {\n    state: nextState,\n    error: nextError,\n  };\n}\n\n/**\n * Runs the reducer on invalidated actions to get a fresh computation log.\n */\nfunction recomputeStates(\n  computedStates: ComputedState[],\n  minInvalidatedStateIndex: number,\n  reducer: ActionReducer<any, any>,\n  committedState: any,\n  actionsById: LiftedActions,\n  stagedActionIds: number[],\n  skippedActionIds: number[],\n  errorHandler: ErrorHandler,\n  isPaused: boolean\n) {\n  // Optimization: exit early and return the same reference\n  // if we know nothing could have changed.\n  if (\n    minInvalidatedStateIndex >= computedStates.length &&\n    computedStates.length === stagedActionIds.length\n  ) {\n    return computedStates;\n  }\n\n  const nextComputedStates = computedStates.slice(0, minInvalidatedStateIndex);\n  // If the recording is paused, recompute all states up until the pause state,\n  // else recompute all states.\n  const lastIncludedActionId = stagedActionIds.length - (isPaused ? 1 : 0);\n  for (let i = minInvalidatedStateIndex; i < lastIncludedActionId; i++) {\n    const actionId = stagedActionIds[i];\n    const action = actionsById[actionId].action;\n\n    const previousEntry = nextComputedStates[i - 1];\n    const previousState = previousEntry ? previousEntry.state : committedState;\n    const previousError = previousEntry ? previousEntry.error : undefined;\n\n    const shouldSkip = skippedActionIds.indexOf(actionId) > -1;\n    const entry: ComputedState = shouldSkip\n      ? previousEntry\n      : computeNextEntry(\n          reducer,\n          action,\n          previousState,\n          previousError,\n          errorHandler\n        );\n\n    nextComputedStates.push(entry);\n  }\n  // If the recording is paused, the last state will not be recomputed,\n  // because it's essentially not part of the state history.\n  if (isPaused) {\n    nextComputedStates.push(computedStates[computedStates.length - 1]);\n  }\n\n  return nextComputedStates;\n}\n\nexport function liftInitialState(\n  initialCommittedState?: any,\n  monitorReducer?: any\n): LiftedState {\n  return {\n    monitorState: monitorReducer(undefined, {}),\n    nextActionId: 1,\n    actionsById: { 0: liftAction(INIT_ACTION) },\n    stagedActionIds: [0],\n    skippedActionIds: [],\n    committedState: initialCommittedState,\n    currentStateIndex: 0,\n    computedStates: [],\n    isLocked: false,\n    isPaused: false,\n  };\n}\n\n/**\n * Creates a history state reducer from an app's reducer.\n */\nexport function liftReducerWith(\n  initialCommittedState: any,\n  initialLiftedState: LiftedState,\n  errorHandler: ErrorHandler,\n  monitorReducer?: any,\n  options: Partial<StoreDevtoolsConfig> = {}\n) {\n  /**\n   * Manages how the history actions modify the history state.\n   */\n  return (\n      reducer: ActionReducer<any, any>\n    ): ActionReducer<LiftedState, Actions> =>\n    (liftedState, liftedAction) => {\n      let {\n        monitorState,\n        actionsById,\n        nextActionId,\n        stagedActionIds,\n        skippedActionIds,\n        committedState,\n        currentStateIndex,\n        computedStates,\n        isLocked,\n        isPaused,\n      } = liftedState || initialLiftedState;\n\n      if (!liftedState) {\n        // Prevent mutating initialLiftedState\n        actionsById = Object.create(actionsById);\n      }\n\n      function commitExcessActions(n: number) {\n        // Auto-commits n-number of excess actions.\n        let excess = n;\n        let idsToDelete = stagedActionIds.slice(1, excess + 1);\n\n        for (let i = 0; i < idsToDelete.length; i++) {\n          if (computedStates[i + 1].error) {\n            // Stop if error is found. Commit actions up to error.\n            excess = i;\n            idsToDelete = stagedActionIds.slice(1, excess + 1);\n            break;\n          } else {\n            delete actionsById[idsToDelete[i]];\n          }\n        }\n\n        skippedActionIds = skippedActionIds.filter(\n          (id) => idsToDelete.indexOf(id) === -1\n        );\n        stagedActionIds = [0, ...stagedActionIds.slice(excess + 1)];\n        committedState = computedStates[excess].state;\n        computedStates = computedStates.slice(excess);\n        currentStateIndex =\n          currentStateIndex > excess ? currentStateIndex - excess : 0;\n      }\n\n      function commitChanges() {\n        // Consider the last committed state the new starting point.\n        // Squash any staged actions into a single committed state.\n        actionsById = { 0: liftAction(INIT_ACTION) };\n        nextActionId = 1;\n        stagedActionIds = [0];\n        skippedActionIds = [];\n        committedState = computedStates[currentStateIndex].state;\n        currentStateIndex = 0;\n        computedStates = [];\n      }\n\n      // By default, aggressively recompute every state whatever happens.\n      // This has O(n) performance, so we'll override this to a sensible\n      // value whenever we feel like we don't have to recompute the states.\n      let minInvalidatedStateIndex = 0;\n\n      switch (liftedAction.type) {\n        case DevtoolsActions.LOCK_CHANGES: {\n          isLocked = liftedAction.status;\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n        case DevtoolsActions.PAUSE_RECORDING: {\n          isPaused = liftedAction.status;\n          if (isPaused) {\n            // Add a pause action to signal the devtools-user the recording is paused.\n            // The corresponding state will be overwritten on each update to always contain\n            // the latest state (see Actions.PERFORM_ACTION).\n            stagedActionIds = [...stagedActionIds, nextActionId];\n            actionsById[nextActionId] = new PerformAction(\n              {\n                type: '@ngrx/devtools/pause',\n              },\n              +Date.now()\n            );\n            nextActionId++;\n            minInvalidatedStateIndex = stagedActionIds.length - 1;\n            computedStates = computedStates.concat(\n              computedStates[computedStates.length - 1]\n            );\n\n            if (currentStateIndex === stagedActionIds.length - 2) {\n              currentStateIndex++;\n            }\n            minInvalidatedStateIndex = Infinity;\n          } else {\n            commitChanges();\n          }\n          break;\n        }\n        case DevtoolsActions.RESET: {\n          // Get back to the state the store was created with.\n          actionsById = { 0: liftAction(INIT_ACTION) };\n          nextActionId = 1;\n          stagedActionIds = [0];\n          skippedActionIds = [];\n          committedState = initialCommittedState;\n          currentStateIndex = 0;\n          computedStates = [];\n          break;\n        }\n        case DevtoolsActions.COMMIT: {\n          commitChanges();\n          break;\n        }\n        case DevtoolsActions.ROLLBACK: {\n          // Forget about any staged actions.\n          // Start again from the last committed state.\n          actionsById = { 0: liftAction(INIT_ACTION) };\n          nextActionId = 1;\n          stagedActionIds = [0];\n          skippedActionIds = [];\n          currentStateIndex = 0;\n          computedStates = [];\n          break;\n        }\n        case DevtoolsActions.TOGGLE_ACTION: {\n          // Toggle whether an action with given ID is skipped.\n          // Being skipped means it is a no-op during the computation.\n          const { id: actionId } = liftedAction;\n          const index = skippedActionIds.indexOf(actionId);\n          if (index === -1) {\n            skippedActionIds = [actionId, ...skippedActionIds];\n          } else {\n            skippedActionIds = skippedActionIds.filter((id) => id !== actionId);\n          }\n          // Optimization: we know history before this action hasn't changed\n          minInvalidatedStateIndex = stagedActionIds.indexOf(actionId);\n          break;\n        }\n        case DevtoolsActions.SET_ACTIONS_ACTIVE: {\n          // Toggle whether an action with given ID is skipped.\n          // Being skipped means it is a no-op during the computation.\n          const { start, end, active } = liftedAction;\n          const actionIds = [];\n          for (let i = start; i < end; i++) actionIds.push(i);\n          if (active) {\n            skippedActionIds = difference(skippedActionIds, actionIds);\n          } else {\n            skippedActionIds = [...skippedActionIds, ...actionIds];\n          }\n\n          // Optimization: we know history before this action hasn't changed\n          minInvalidatedStateIndex = stagedActionIds.indexOf(start);\n          break;\n        }\n        case DevtoolsActions.JUMP_TO_STATE: {\n          // Without recomputing anything, move the pointer that tell us\n          // which state is considered the current one. Useful for sliders.\n          currentStateIndex = liftedAction.index;\n          // Optimization: we know the history has not changed.\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n        case DevtoolsActions.JUMP_TO_ACTION: {\n          // Jumps to a corresponding state to a specific action.\n          // Useful when filtering actions.\n          const index = stagedActionIds.indexOf(liftedAction.actionId);\n          if (index !== -1) currentStateIndex = index;\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n        case DevtoolsActions.SWEEP: {\n          // Forget any actions that are currently being skipped.\n          stagedActionIds = difference(stagedActionIds, skippedActionIds);\n          skippedActionIds = [];\n          currentStateIndex = Math.min(\n            currentStateIndex,\n            stagedActionIds.length - 1\n          );\n          break;\n        }\n        case DevtoolsActions.PERFORM_ACTION: {\n          // Ignore action and return state as is if recording is locked\n          if (isLocked) {\n            return liftedState || initialLiftedState;\n          }\n\n          if (\n            isPaused ||\n            (liftedState &&\n              isActionFiltered(\n                liftedState.computedStates[currentStateIndex],\n                liftedAction,\n                options.predicate,\n                options.actionsSafelist,\n                options.actionsBlocklist\n              ))\n          ) {\n            // If recording is paused or if the action should be ignored, overwrite the last state\n            // (corresponds to the pause action) and keep everything else as is.\n            // This way, the app gets the new current state while the devtools\n            // do not record another action.\n            const lastState = computedStates[computedStates.length - 1];\n            computedStates = [\n              ...computedStates.slice(0, -1),\n              computeNextEntry(\n                reducer,\n                liftedAction.action,\n                lastState.state,\n                lastState.error,\n                errorHandler\n              ),\n            ];\n            minInvalidatedStateIndex = Infinity;\n            break;\n          }\n\n          // Auto-commit as new actions come in.\n          if (options.maxAge && stagedActionIds.length === options.maxAge) {\n            commitExcessActions(1);\n          }\n\n          if (currentStateIndex === stagedActionIds.length - 1) {\n            currentStateIndex++;\n          }\n          const actionId = nextActionId++;\n          // Mutation! This is the hottest path, and we optimize on purpose.\n          // It is safe because we set a new key in a cache dictionary.\n          actionsById[actionId] = liftedAction;\n\n          stagedActionIds = [...stagedActionIds, actionId];\n          // Optimization: we know that only the new action needs computing.\n          minInvalidatedStateIndex = stagedActionIds.length - 1;\n          break;\n        }\n        case DevtoolsActions.IMPORT_STATE: {\n          // Completely replace everything.\n          ({\n            monitorState,\n            actionsById,\n            nextActionId,\n            stagedActionIds,\n            skippedActionIds,\n            committedState,\n            currentStateIndex,\n            computedStates,\n            isLocked,\n            isPaused,\n          } = liftedAction.nextLiftedState);\n          break;\n        }\n        case INIT: {\n          // Always recompute states on hot reload and init.\n          minInvalidatedStateIndex = 0;\n\n          if (options.maxAge && stagedActionIds.length > options.maxAge) {\n            // States must be recomputed before committing excess.\n            computedStates = recomputeStates(\n              computedStates,\n              minInvalidatedStateIndex,\n              reducer,\n              committedState,\n              actionsById,\n              stagedActionIds,\n              skippedActionIds,\n              errorHandler,\n              isPaused\n            );\n\n            commitExcessActions(stagedActionIds.length - options.maxAge);\n\n            // Avoid double computation.\n            minInvalidatedStateIndex = Infinity;\n          }\n\n          break;\n        }\n        case UPDATE: {\n          const stateHasErrors =\n            computedStates.filter((state) => state.error).length > 0;\n\n          if (stateHasErrors) {\n            // Recompute all states\n            minInvalidatedStateIndex = 0;\n\n            if (options.maxAge && stagedActionIds.length > options.maxAge) {\n              // States must be recomputed before committing excess.\n              computedStates = recomputeStates(\n                computedStates,\n                minInvalidatedStateIndex,\n                reducer,\n                committedState,\n                actionsById,\n                stagedActionIds,\n                skippedActionIds,\n                errorHandler,\n                isPaused\n              );\n\n              commitExcessActions(stagedActionIds.length - options.maxAge);\n\n              // Avoid double computation.\n              minInvalidatedStateIndex = Infinity;\n            }\n          } else {\n            // If not paused/locked, add a new action to signal devtools-user\n            // that there was a reducer update.\n            if (!isPaused && !isLocked) {\n              if (currentStateIndex === stagedActionIds.length - 1) {\n                currentStateIndex++;\n              }\n\n              // Add a new action to only recompute state\n              const actionId = nextActionId++;\n              actionsById[actionId] = new PerformAction(\n                liftedAction,\n                +Date.now()\n              );\n              stagedActionIds = [...stagedActionIds, actionId];\n\n              minInvalidatedStateIndex = stagedActionIds.length - 1;\n\n              computedStates = recomputeStates(\n                computedStates,\n                minInvalidatedStateIndex,\n                reducer,\n                committedState,\n                actionsById,\n                stagedActionIds,\n                skippedActionIds,\n                errorHandler,\n                isPaused\n              );\n            }\n\n            // Recompute state history with latest reducer and update action\n            computedStates = computedStates.map((cmp) => ({\n              ...cmp,\n              state: reducer(cmp.state, RECOMPUTE_ACTION),\n            }));\n\n            currentStateIndex = stagedActionIds.length - 1;\n\n            if (options.maxAge && stagedActionIds.length > options.maxAge) {\n              commitExcessActions(stagedActionIds.length - options.maxAge);\n            }\n\n            // Avoid double computation.\n            minInvalidatedStateIndex = Infinity;\n          }\n\n          break;\n        }\n        default: {\n          // If the action is not recognized, it's a monitor action.\n          // Optimization: a monitor action can't change history.\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n      }\n\n      computedStates = recomputeStates(\n        computedStates,\n        minInvalidatedStateIndex,\n        reducer,\n        committedState,\n        actionsById,\n        stagedActionIds,\n        skippedActionIds,\n        errorHandler,\n        isPaused\n      );\n      monitorState = monitorReducer(monitorState, liftedAction);\n\n      return {\n        monitorState,\n        actionsById,\n        nextActionId,\n        stagedActionIds,\n        skippedActionIds,\n        committedState,\n        currentStateIndex,\n        computedStates,\n        isLocked,\n        isPaused,\n      };\n    };\n}\n","import {\n  Injectable,\n  Inject,\n  ErrorHandler,\n  OnDestroy,\n  NgZone,\n  inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n  Action,\n  ActionReducer,\n  ActionsSubject,\n  INITIAL_STATE,\n  ReducerObservable,\n  ScannedActionsSubject,\n  StateObservable,\n} from '@ngrx/store';\nimport {\n  merge,\n  MonoTypeOperatorFunction,\n  Observable,\n  Observer,\n  queueScheduler,\n  ReplaySubject,\n  Subscription,\n} from 'rxjs';\nimport { map, observeOn, scan, skip, withLatestFrom } from 'rxjs/operators';\n\nimport * as Actions from './actions';\nimport { STORE_DEVTOOLS_CONFIG, StoreDevtoolsConfig } from './config';\nimport { DevtoolsExtension } from './extension';\nimport { LiftedState, liftInitialState, liftReducerWith } from './reducer';\nimport {\n  liftAction,\n  unliftState,\n  shouldFilterActions,\n  filterLiftedState,\n} from './utils';\nimport { DevtoolsDispatcher } from './devtools-dispatcher';\nimport { PERFORM_ACTION } from './actions';\nimport { ZoneConfig, injectZoneConfig } from './zone-config';\n\n@Injectable()\nexport class StoreDevtools implements Observer<any>, OnDestroy {\n  private liftedStateSubscription: Subscription;\n  private extensionStartSubscription: Subscription;\n  public dispatcher: ActionsSubject;\n  public liftedState: Observable<LiftedState>;\n  public state: StateObservable;\n\n  constructor(\n    dispatcher: DevtoolsDispatcher,\n    actions$: ActionsSubject,\n    reducers$: ReducerObservable,\n    extension: DevtoolsExtension,\n    scannedActions: ScannedActionsSubject,\n    errorHandler: ErrorHandler,\n    @Inject(INITIAL_STATE) initialState: any,\n    @Inject(STORE_DEVTOOLS_CONFIG) config: StoreDevtoolsConfig\n  ) {\n    const liftedInitialState = liftInitialState(initialState, config.monitor);\n    const liftReducer = liftReducerWith(\n      initialState,\n      liftedInitialState,\n      errorHandler,\n      config.monitor,\n      config\n    );\n\n    const liftedAction$ = merge(\n      merge(actions$.asObservable().pipe(skip(1)), extension.actions$).pipe(\n        map(liftAction)\n      ),\n      dispatcher,\n      extension.liftedActions$\n    ).pipe(observeOn(queueScheduler));\n\n    const liftedReducer$ = reducers$.pipe(map(liftReducer));\n\n    const zoneConfig = injectZoneConfig(config.connectInZone!);\n\n    const liftedStateSubject = new ReplaySubject<LiftedState>(1);\n\n    this.liftedStateSubscription = liftedAction$\n      .pipe(\n        withLatestFrom(liftedReducer$),\n        // The extension would post messages back outside of the Angular zone\n        // because we call `connect()` wrapped with `runOutsideAngular`. We run change\n        // detection only once at the end after all the required asynchronous tasks have\n        // been processed (for instance, `setInterval` scheduled by the `timeout` operator).\n        // We have to re-enter the Angular zone before the `scan` since it runs the reducer\n        // which must be run within the Angular zone.\n        emitInZone(zoneConfig),\n        scan<\n          [any, ActionReducer<LiftedState, Actions.All>],\n          {\n            state: LiftedState;\n            action: any;\n          }\n        >(\n          ({ state: liftedState }, [action, reducer]) => {\n            let reducedLiftedState = reducer(liftedState, action);\n            // On full state update\n            // If we have actions filters, we must filter completely our lifted state to be sync with the extension\n            if (action.type !== PERFORM_ACTION && shouldFilterActions(config)) {\n              reducedLiftedState = filterLiftedState(\n                reducedLiftedState,\n                config.predicate,\n                config.actionsSafelist,\n                config.actionsBlocklist\n              );\n            }\n            // Extension should be sent the sanitized lifted state\n            extension.notify(action, reducedLiftedState);\n            return { state: reducedLiftedState, action };\n          },\n          { state: liftedInitialState, action: null as any }\n        )\n      )\n      .subscribe(({ state, action }) => {\n        liftedStateSubject.next(state);\n\n        if (action.type === Actions.PERFORM_ACTION) {\n          const unliftedAction = (action as Actions.PerformAction).action;\n\n          scannedActions.next(unliftedAction);\n        }\n      });\n\n    this.extensionStartSubscription = extension.start$\n      .pipe(emitInZone(zoneConfig))\n      .subscribe(() => {\n        this.refresh();\n      });\n\n    const liftedState$ =\n      liftedStateSubject.asObservable() as Observable<LiftedState>;\n    const state$ = liftedState$.pipe(map(unliftState)) as StateObservable;\n    Object.defineProperty(state$, 'state', {\n      value: toSignal(state$, { manualCleanup: true, requireSync: true }),\n    });\n\n    this.dispatcher = dispatcher;\n    this.liftedState = liftedState$;\n    this.state = state$;\n  }\n\n  ngOnDestroy(): void {\n    // Even though the store devtools plugin is recommended to be\n    // used only in development mode, it can still cause a memory leak\n    // in microfrontend applications that are being created and destroyed\n    // multiple times during development. This results in excessive memory\n    // consumption, as it prevents entire apps from being garbage collected.\n    this.liftedStateSubscription.unsubscribe();\n    this.extensionStartSubscription.unsubscribe();\n  }\n\n  dispatch(action: Action) {\n    this.dispatcher.next(action);\n  }\n\n  next(action: any) {\n    this.dispatcher.next(action);\n  }\n\n  error(error: any) {}\n\n  complete() {}\n\n  performAction(action: any) {\n    this.dispatch(new Actions.PerformAction(action, +Date.now()));\n  }\n\n  refresh() {\n    this.dispatch(new Actions.Refresh());\n  }\n\n  reset() {\n    this.dispatch(new Actions.Reset(+Date.now()));\n  }\n\n  rollback() {\n    this.dispatch(new Actions.Rollback(+Date.now()));\n  }\n\n  commit() {\n    this.dispatch(new Actions.Commit(+Date.now()));\n  }\n\n  sweep() {\n    this.dispatch(new Actions.Sweep());\n  }\n\n  toggleAction(id: number) {\n    this.dispatch(new Actions.ToggleAction(id));\n  }\n\n  jumpToAction(actionId: number) {\n    this.dispatch(new Actions.JumpToAction(actionId));\n  }\n\n  jumpToState(index: number) {\n    this.dispatch(new Actions.JumpToState(index));\n  }\n\n  importState(nextLiftedState: any) {\n    this.dispatch(new Actions.ImportState(nextLiftedState));\n  }\n\n  lockChanges(status: boolean) {\n    this.dispatch(new Actions.LockChanges(status));\n  }\n\n  pauseRecording(status: boolean) {\n    this.dispatch(new Actions.PauseRecording(status));\n  }\n}\n\n/**\n * If the devtools extension is connected out of the Angular zone,\n * this operator will emit all events within the zone.\n */\nfunction emitInZone<T>({\n  ngZone,\n  connectInZone,\n}: ZoneConfig): MonoTypeOperatorFunction<T> {\n  return (source) =>\n    connectInZone\n      ? new Observable<T>((subscriber) =>\n          source.subscribe({\n            next: (value) => ngZone.run(() => subscriber.next(value)),\n            error: (error) => ngZone.run(() => subscriber.error(error)),\n            complete: () => ngZone.run(() => subscriber.complete()),\n          })\n        )\n      : source;\n}\n","import {\n  EnvironmentProviders,\n  InjectionToken,\n  makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n  DevtoolsExtension,\n  REDUX_DEVTOOLS_EXTENSION,\n  ReduxDevtoolsExtension,\n} from './extension';\nimport { DevtoolsDispatcher } from './devtools-dispatcher';\nimport {\n  createConfig,\n  INITIAL_OPTIONS,\n  noMonitor,\n  STORE_DEVTOOLS_CONFIG,\n  StoreDevtoolsConfig,\n  StoreDevtoolsOptions,\n} from './config';\nimport { ReducerManagerDispatcher, StateObservable } from '@ngrx/store';\nimport { StoreDevtools } from './devtools';\n\nexport const IS_EXTENSION_OR_MONITOR_PRESENT = new InjectionToken<boolean>(\n  '@ngrx/store-devtools Is Devtools Extension or Monitor Present'\n);\n\nexport function createIsExtensionOrMonitorPresent(\n  extension: ReduxDevtoolsExtension | null,\n  config: StoreDevtoolsConfig\n) {\n  return Boolean(extension) || config.monitor !== noMonitor;\n}\n\nexport function createReduxDevtoolsExtension() {\n  const extensionKey = '__REDUX_DEVTOOLS_EXTENSION__';\n\n  if (\n    typeof window === 'object' &&\n    typeof (window as any)[extensionKey] !== 'undefined'\n  ) {\n    return (window as any)[extensionKey];\n  } else {\n    return null;\n  }\n}\n\nexport function createStateObservable(\n  devtools: StoreDevtools\n): StateObservable {\n  return devtools.state;\n}\n\n/**\n * Provides developer tools and instrumentation for `Store`.\n *\n * @usageNotes\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideStoreDevtools({\n *       maxAge: 25,\n *       logOnly: !isDevMode(),\n *     }),\n *   ],\n * });\n * ```\n */\nexport function provideStoreDevtools(\n  options: StoreDevtoolsOptions = {}\n): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    DevtoolsExtension,\n    DevtoolsDispatcher,\n    StoreDevtools,\n    {\n      provide: INITIAL_OPTIONS,\n      useValue: options,\n    },\n    {\n      provide: IS_EXTENSION_OR_MONITOR_PRESENT,\n      deps: [REDUX_DEVTOOLS_EXTENSION, STORE_DEVTOOLS_CONFIG],\n      useFactory: createIsExtensionOrMonitorPresent,\n    },\n    {\n      provide: REDUX_DEVTOOLS_EXTENSION,\n      useFactory: createReduxDevtoolsExtension,\n    },\n    {\n      provide: STORE_DEVTOOLS_CONFIG,\n      deps: [INITIAL_OPTIONS],\n      useFactory: createConfig,\n    },\n    {\n      provide: StateObservable,\n      deps: [StoreDevtools],\n      useFactory: createStateObservable,\n    },\n    {\n      provide: ReducerManagerDispatcher,\n      useExisting: DevtoolsDispatcher,\n    },\n  ]);\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { StoreDevtoolsOptions } from './config';\nimport { provideStoreDevtools } from './provide-store-devtools';\n\n@NgModule({})\nexport class StoreDevtoolsModule {\n  static instrument(\n    options: StoreDevtoolsOptions = {}\n  ): ModuleWithProviders<StoreDevtoolsModule> {\n    return {\n      ngModule: StoreDevtoolsModule,\n      providers: [provideStoreDevtools(options)],\n    };\n  }\n}\n","/**\n * DO NOT EDIT\n *\n * This file is automatically generated at build\n */\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["Actions.PerformAction","i1.DevtoolsDispatcher","DevtoolsActions.LOCK_CHANGES","DevtoolsActions.PAUSE_RECORDING","DevtoolsActions.RESET","DevtoolsActions.COMMIT","DevtoolsActions.ROLLBACK","DevtoolsActions.TOGGLE_ACTION","DevtoolsActions.SET_ACTIONS_ACTIVE","DevtoolsActions.JUMP_TO_STATE","DevtoolsActions.JUMP_TO_ACTION","DevtoolsActions.SWEEP","DevtoolsActions.PERFORM_ACTION","DevtoolsActions.IMPORT_STATE","Actions.PERFORM_ACTION","Actions.Refresh","Actions.Reset","Actions.Rollback","Actions.Commit","Actions.Sweep","Actions.ToggleAction","Actions.JumpToAction","Actions.JumpToState","Actions.ImportState","Actions.LockChanges","Actions.PauseRecording","i3.DevtoolsExtension"],"mappings":"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"}