UNPKG

77.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"ngrx-store-devtools.mjs","sources":["../../../../modules/store-devtools/src/config.ts","../../../../modules/store-devtools/src/actions.ts","../../../../modules/store-devtools/src/utils.ts","../../../../modules/store-devtools/src/reducer.ts","../../../../modules/store-devtools/src/devtools-dispatcher.ts","../../../../modules/store-devtools/src/extension.ts","../../../../modules/store-devtools/src/devtools.ts","../../../../modules/store-devtools/src/instrument.ts","../../../../modules/store-devtools/index.ts","../../../../modules/store-devtools/ngrx-store-devtools.ts"],"sourcesContent":["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\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 // 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 };\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 = options.features || logOnly || DEFAULT_OPTIONS.features;\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\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(public action: Action, public timestamp: number) {\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: boolean = 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 { 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((sanitizedActions, actionIdx) => {\n const idx = Number(actionIdx);\n sanitizedActions[idx] = sanitizeAction(actionSanitizer, actions[idx], idx);\n return sanitizedActions;\n }, <LiftedActions>{});\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 { 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 { 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';\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}\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 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.devtoolsExtension.connect(\n 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 return typeof action === 'string' ? 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 // 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 { Injectable, Inject, ErrorHandler } from '@angular/core';\nimport {\n Action,\n ActionReducer,\n ActionsSubject,\n INITIAL_STATE,\n ReducerObservable,\n ScannedActionsSubject,\n} from '@ngrx/store';\nimport {\n merge,\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';\n\n@Injectable()\nexport class StoreDevtools implements Observer<any> {\n private stateSubscription: Subscription;\n private extensionStartSubscription: Subscription;\n public dispatcher: ActionsSubject;\n public liftedState: Observable<LiftedState>;\n public state: Observable<any>;\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 liftedStateSubject = new ReplaySubject<LiftedState>(1);\n\n const liftedStateSubscription = liftedAction$\n .pipe(\n withLatestFrom(liftedReducer$),\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 const extensionStartSubscription = extension.start$.subscribe(() => {\n this.refresh();\n });\n\n const liftedState$ =\n liftedStateSubject.asObservable() as Observable<LiftedState>;\n const state$ = liftedState$.pipe(map(unliftState));\n\n this.extensionStartSubscription = extensionStartSubscription;\n this.stateSubscription = liftedStateSubscription;\n this.dispatcher = dispatcher;\n this.liftedState = liftedState$;\n this.state = state$;\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","import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ReducerManagerDispatcher, StateObservable } from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\nimport {\n INITIAL_OPTIONS,\n STORE_DEVTOOLS_CONFIG,\n StoreDevtoolsConfig,\n StoreDevtoolsOptions,\n noMonitor,\n createConfig,\n} from './config';\nimport { StoreDevtools } from './devtools';\nimport {\n DevtoolsExtension,\n REDUX_DEVTOOLS_EXTENSION,\n ReduxDevtoolsExtension,\n} from './extension';\nimport { DevtoolsDispatcher } from './devtools-dispatcher';\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): Observable<any> {\n return devtools.state;\n}\n\n@NgModule({})\nexport class StoreDevtoolsModule {\n static instrument(\n options: StoreDevtoolsOptions = {}\n ): ModuleWithProviders<StoreDevtoolsModule> {\n return {\n ngModule: StoreDevtoolsModule,\n providers: [\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 }\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","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","i1.DevtoolsDispatcher","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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"}
\No newline at end of file