summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/src/selectors/getCallStackFrames.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/src/selectors/getCallStackFrames.js')
-rw-r--r--devtools/client/debugger/src/selectors/getCallStackFrames.js53
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
+);