forked from firefox-devtools/debugger
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpending-breakpoints.js
More file actions
94 lines (73 loc) · 2.4 KB
/
Copy pathpending-breakpoints.js
File metadata and controls
94 lines (73 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* 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/>. */
// @flow
/**
* Pending breakpoints reducer
* @module reducers/pending-breakpoints
*/
import { getSourcesByURL } from "./sources";
import {
createPendingBreakpoint,
makePendingLocationId
} from "../utils/breakpoint";
import { isGenerated } from "../utils/source";
import type { SourcesState } from "./sources";
import type { PendingBreakpoint, Source } from "../types";
import type { Action } from "../actions/types";
export type PendingBreakpointsState = { [string]: PendingBreakpoint };
function update(state: PendingBreakpointsState = {}, action: Action) {
switch (action.type) {
case "SET_BREAKPOINT":
return setBreakpoint(state, action);
case "REMOVE_BREAKPOINT":
case "REMOVE_PENDING_BREAKPOINT":
return removeBreakpoint(state, action);
}
return state;
}
function setBreakpoint(state, { breakpoint }) {
if (breakpoint.options.hidden) {
return state;
}
const locationId = makePendingLocationId(breakpoint.location);
const pendingBreakpoint = createPendingBreakpoint(breakpoint);
return { ...state, [locationId]: pendingBreakpoint };
}
function removeBreakpoint(state, { location }) {
const locationId = makePendingLocationId(location);
state = { ...state };
delete state[locationId];
return state;
}
// Selectors
// TODO: these functions should be moved out of the reducer
type OuterState = {
pendingBreakpoints: PendingBreakpointsState,
sources: SourcesState
};
export function getPendingBreakpoints(state: OuterState) {
return state.pendingBreakpoints;
}
export function getPendingBreakpointList(
state: OuterState
): PendingBreakpoint[] {
return (Object.values(getPendingBreakpoints(state)): any);
}
export function getPendingBreakpointsForSource(
state: OuterState,
source: Source
): PendingBreakpoint[] {
const sources = getSourcesByURL(state, source.url);
if (sources.length > 1 && isGenerated(source)) {
// Don't return pending breakpoints for duplicated generated sources
return [];
}
return getPendingBreakpointList(state).filter(pendingBreakpoint => {
return (
pendingBreakpoint.location.sourceUrl === source.url ||
pendingBreakpoint.generatedLocation.sourceUrl == source.url
);
});
}
export default update;