Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 25 additions & 7 deletions extension/src/pageScript/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,11 @@ function post<S, A extends Action<unknown>>(

function getStackTrace(
config: Config,
toExcludeFromTrace: Function | undefined
toExcludeFromTrace: Function | undefined,
action: Action<unknown>
) {
if (!config.trace) return undefined;
if (typeof config.trace === 'function') return config.trace();
if (typeof config.trace === 'function') return config.trace(action);

let stack;
let extraFrames = 0;
Expand Down Expand Up @@ -268,16 +269,33 @@ function amendActionType<A extends Action<unknown>>(
toExcludeFromTrace: Function | undefined
): StructuralPerformAction<A> {
let timestamp = Date.now();
let stack = getStackTrace(config, toExcludeFromTrace);
if (typeof action === 'string') {
return { action: { type: action } as A, timestamp, stack };
const amendedAction = { type: action } as A;
return {
action: amendedAction,
timestamp,
stack: getStackTrace(config, toExcludeFromTrace, amendedAction),
};
}
if (!(action as A).type) {
const amendedAction = { type: 'update' } as A;
return {
action: amendedAction,
timestamp,
stack: getStackTrace(config, toExcludeFromTrace, amendedAction),
};
}
if (!(action as A).type)
return { action: { type: 'update' } as A, timestamp, stack };
if ((action as StructuralPerformAction<A>).action)
if ((action as StructuralPerformAction<A>).action) {
const stack = getStackTrace(
config,
toExcludeFromTrace,
(action as StructuralPerformAction<A>).action
);
return (
stack ? { stack, ...action } : action
) as StructuralPerformAction<A>;
}
const stack = getStackTrace(config, toExcludeFromTrace, action as A);
return { action, timestamp, stack } as StructuralPerformAction<A>;
}

Expand Down
4 changes: 3 additions & 1 deletion extension/src/pageScript/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,9 @@ export interface ConfigWithExpandedMaxAge {
currentLiftedAction: LiftedAction<S, A, unknown>,
previousLiftedState: LiftedState<S, A, unknown> | undefined
) => number);
readonly trace?: boolean | (() => string | undefined);
readonly trace?:
| boolean
| (<A extends Action<unknown>>(action: A) => string | undefined);
readonly traceLimit?: number;
readonly shouldCatchErrors?: boolean;
readonly shouldHotReload?: boolean;
Expand Down
9 changes: 5 additions & 4 deletions packages/redux-devtools-utils/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,14 +216,15 @@ export function getSeralizeParameter(
return value;
}

export function getStackTrace(
export function getStackTrace<A extends Action<unknown>>(
// eslint-disable-next-line @typescript-eslint/ban-types
config: { trace?: () => {}; traceLimit: number },
config: { trace?: (action?: A) => {}; traceLimit: number },
// eslint-disable-next-line @typescript-eslint/ban-types
toExcludeFromTrace?: Function | undefined
toExcludeFromTrace?: Function | undefined,
action?: A
) {
if (!config.trace) return undefined;
if (typeof config.trace === 'function') return config.trace();
if (typeof config.trace === 'function') return config.trace(action);

let stack;
let extraFrames = 0;
Expand Down