forked from firefox-devtools/debugger
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbreakpointSources.js
More file actions
82 lines (73 loc) · 2.25 KB
/
breakpointSources.js
File metadata and controls
82 lines (73 loc) · 2.25 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
/* 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
import { sortBy, uniq } from "lodash";
import { createSelector } from "reselect";
import {
getSources,
getSourceInSources,
getBreakpointsList,
getSelectedSource
} from "../selectors";
import { getFilename } from "../utils/source";
import { getSelectedLocation } from "../utils/selected-location";
import { sortSelectedBreakpoints } from "../utils/breakpoint";
import type { Source, Breakpoint } from "../types";
import type { Selector, SourceResourceState } from "../reducers/types";
export type BreakpointSources = Array<{
source: Source,
breakpoints: Breakpoint[]
}>;
function getBreakpointsForSource(
source: Source,
selectedSource: ?Source,
breakpoints: Breakpoint[]
) {
return sortSelectedBreakpoints(breakpoints, selectedSource)
.filter(
bp =>
!bp.options.hidden &&
(bp.text || bp.originalText || bp.options.condition || bp.disabled)
)
.filter(
bp => getSelectedLocation(bp, selectedSource).sourceId == source.id
);
}
function findBreakpointSources(
sources: SourceResourceState,
breakpoints: Breakpoint[],
selectedSource: ?Source
): Source[] {
const sourceIds: string[] = uniq(
breakpoints.map(bp => getSelectedLocation(bp, selectedSource).sourceId)
);
const breakpointSources = sourceIds.reduce((acc, id) => {
const source = getSourceInSources(sources, id);
if (source && !source.isBlackBoxed) {
acc.push(source);
}
return acc;
}, []);
return sortBy(breakpointSources, (source: Source) => getFilename(source));
}
export const getBreakpointSources: Selector<BreakpointSources> = createSelector(
getBreakpointsList,
getSources,
getSelectedSource,
(
breakpoints: Breakpoint[],
sources: SourceResourceState,
selectedSource: ?Source
) =>
findBreakpointSources(sources, breakpoints, selectedSource)
.map(source => ({
source,
breakpoints: getBreakpointsForSource(
source,
selectedSource,
breakpoints
)
}))
.filter(({ breakpoints: bpSources }) => bpSources.length > 0)
);