diff options
Diffstat (limited to 'devtools/client/debugger/src/selectors/getCallStackFrames.js')
-rw-r--r-- | devtools/client/debugger/src/selectors/getCallStackFrames.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/selectors/getCallStackFrames.js b/devtools/client/debugger/src/selectors/getCallStackFrames.js new file mode 100644 index 0000000000..558e07aa17 --- /dev/null +++ b/devtools/client/debugger/src/selectors/getCallStackFrames.js @@ -0,0 +1,53 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */ + +import { getSelectedSource } from "./sources"; +import { getBlackBoxRanges } from "./source-blackbox"; +import { getCurrentThreadFrames } from "./pause"; +import { annotateFrames } from "../utils/pause/frames"; +import { isFrameBlackBoxed } from "../utils/source"; +import { createSelector } from "reselect"; + +function getLocation(frame, isGeneratedSource) { + return isGeneratedSource + ? frame.generatedLocation || frame.location + : frame.location; +} + +function getSourceForFrame(frame, isGeneratedSource) { + return getLocation(frame, isGeneratedSource).source; +} + +function appendSource(frame, selectedSource) { + const isGeneratedSource = selectedSource && !selectedSource.isOriginal; + return { + ...frame, + location: getLocation(frame, isGeneratedSource), + source: getSourceForFrame(frame, isGeneratedSource), + }; +} + +export function formatCallStackFrames( + frames, + selectedSource, + blackboxedRanges +) { + if (!frames) { + return null; + } + + const formattedFrames = frames + .filter(frame => getSourceForFrame(frame)) + .map(frame => appendSource(frame, selectedSource)) + .filter(frame => !isFrameBlackBoxed(frame, blackboxedRanges)); + + return annotateFrames(formattedFrames); +} + +export const getCallStackFrames = createSelector( + getCurrentThreadFrames, + getSelectedSource, + getBlackBoxRanges, + formatCallStackFrames +); |