summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/src/reducers/source-blackbox.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /devtools/client/debugger/src/reducers/source-blackbox.js
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/debugger/src/reducers/source-blackbox.js')
-rw-r--r--devtools/client/debugger/src/reducers/source-blackbox.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/reducers/source-blackbox.js b/devtools/client/debugger/src/reducers/source-blackbox.js
new file mode 100644
index 0000000000..3ccca49790
--- /dev/null
+++ b/devtools/client/debugger/src/reducers/source-blackbox.js
@@ -0,0 +1,145 @@
+/* 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/>. */
+
+/**
+ * Reducer containing all data about sources being "black boxed".
+ *
+ * i.e. sources which should be ignored by the debugger.
+ * Typically, these sources should be hidden from paused stack frames,
+ * and any debugger statement or breakpoint should be ignored.
+ */
+
+export function initialSourceBlackBoxState(state) {
+ return {
+ /* FORMAT:
+ * blackboxedRanges: {
+ * [source url]: [range, range, ...], -- source lines blackboxed
+ * [source url]: [], -- whole source blackboxed
+ * ...
+ * }
+ */
+ blackboxedRanges: state?.blackboxedRanges ?? {},
+
+ blackboxedSet: state?.blackboxedRanges
+ ? new Set(Object.keys(state.blackboxedRanges))
+ : new Set(),
+
+ sourceMapIgnoreListUrls: [],
+ };
+}
+
+function update(state = initialSourceBlackBoxState(), action) {
+ switch (action.type) {
+ case "BLACKBOX_WHOLE_SOURCES": {
+ const { sources } = action;
+
+ const currentBlackboxedRanges = { ...state.blackboxedRanges };
+ const currentBlackboxedSet = new Set(state.blackboxedSet);
+
+ for (const source of sources) {
+ currentBlackboxedRanges[source.url] = [];
+ currentBlackboxedSet.add(source.url);
+ }
+
+ return {
+ ...state,
+ blackboxedRanges: currentBlackboxedRanges,
+ blackboxedSet: currentBlackboxedSet,
+ };
+ }
+
+ case "BLACKBOX_SOURCE_RANGES": {
+ const { source, ranges } = action;
+
+ const currentBlackboxedRanges = { ...state.blackboxedRanges };
+ const currentBlackboxedSet = new Set(state.blackboxedSet);
+
+ if (!currentBlackboxedRanges[source.url]) {
+ currentBlackboxedRanges[source.url] = [];
+ currentBlackboxedSet.add(source.url);
+ } else {
+ currentBlackboxedRanges[source.url] = [
+ ...state.blackboxedRanges[source.url],
+ ];
+ }
+
+ // Add new blackboxed lines in acsending order
+ for (const newRange of ranges) {
+ const index = currentBlackboxedRanges[source.url].findIndex(
+ range =>
+ range.end.line <= newRange.start.line &&
+ range.end.column <= newRange.start.column
+ );
+ currentBlackboxedRanges[source.url].splice(index + 1, 0, newRange);
+ }
+
+ return {
+ ...state,
+ blackboxedRanges: currentBlackboxedRanges,
+ blackboxedSet: currentBlackboxedSet,
+ };
+ }
+
+ case "UNBLACKBOX_WHOLE_SOURCES": {
+ const { sources } = action;
+
+ const currentBlackboxedRanges = { ...state.blackboxedRanges };
+ const currentBlackboxedSet = new Set(state.blackboxedSet);
+
+ for (const source of sources) {
+ delete currentBlackboxedRanges[source.url];
+ currentBlackboxedSet.delete(source.url);
+ }
+
+ return {
+ ...state,
+ blackboxedRanges: currentBlackboxedRanges,
+ blackboxedSet: currentBlackboxedSet,
+ };
+ }
+
+ case "UNBLACKBOX_SOURCE_RANGES": {
+ const { source, ranges } = action;
+
+ const currentBlackboxedRanges = {
+ ...state.blackboxedRanges,
+ [source.url]: [...state.blackboxedRanges[source.url]],
+ };
+
+ for (const newRange of ranges) {
+ const index = currentBlackboxedRanges[source.url].findIndex(
+ range =>
+ range.start.line === newRange.start.line &&
+ range.end.line === newRange.end.line
+ );
+
+ if (index !== -1) {
+ currentBlackboxedRanges[source.url].splice(index, 1);
+ }
+ }
+
+ return {
+ ...state,
+ blackboxedRanges: currentBlackboxedRanges,
+ };
+ }
+
+ case "ADD_SOURCEMAP_IGNORE_LIST_SOURCES": {
+ return {
+ ...state,
+ sourceMapIgnoreListUrls: [
+ ...state.sourceMapIgnoreListUrls,
+ ...action.ignoreListUrls,
+ ],
+ };
+ }
+
+ case "NAVIGATE":
+ return initialSourceBlackBoxState(state);
+ }
+
+ return state;
+}
+
+export default update;