summaryrefslogtreecommitdiffstats
path: root/devtools/client/performance-new/store/selectors.js
blob: 91f5bc9b65a360da0f4d0cc2bbf3770fd76dc919 (plain)
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
95
96
97
98
99
100
101
102
103
104
/* 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/. */
// @ts-check
"use strict";

/**
 * @typedef {import("../@types/perf").RecordingState} RecordingState
 * @typedef {import("../@types/perf").RecordingSettings} RecordingSettings
 * @typedef {import("../@types/perf").InitializedValues} InitializedValues
 * @typedef {import("../@types/perf").PerfFront} PerfFront
 * @typedef {import("../@types/perf").ReceiveProfile} ReceiveProfile
 * @typedef {import("../@types/perf").RestartBrowserWithEnvironmentVariable} RestartBrowserWithEnvironmentVariable
 * @typedef {import("../@types/perf").PageContext} PageContext
 * @typedef {import("../@types/perf").Presets} Presets
 */
/**
 * @template S
 * @typedef {import("../@types/perf").Selector<S>} Selector<S>
 */

/** @type {Selector<RecordingState>} */
const getRecordingState = state => state.recordingState;

/** @type {Selector<boolean>} */
const getRecordingUnexpectedlyStopped = state =>
  state.recordingUnexpectedlyStopped;

/** @type {Selector<boolean | null>} */
const getIsSupportedPlatform = state => state.isSupportedPlatform;

/** @type {Selector<RecordingSettings>} */
const getRecordingSettings = state => state.recordingSettings;

/** @type {Selector<number>} */
const getInterval = state => getRecordingSettings(state).interval;

/** @type {Selector<number>} */
const getEntries = state => getRecordingSettings(state).entries;

/** @type {Selector<string[]>} */
const getFeatures = state => getRecordingSettings(state).features;

/** @type {Selector<string[]>} */
const getThreads = state => getRecordingSettings(state).threads;

/** @type {Selector<string>} */
const getThreadsString = state => getThreads(state).join(",");

/** @type {Selector<string[]>} */
const getObjdirs = state => getRecordingSettings(state).objdirs;

/** @type {Selector<Presets>} */
const getPresets = state => getInitializedValues(state).presets;

/** @type {Selector<string>} */
const getPresetName = state => state.recordingSettings.presetName;

/**
 * When remote profiling, there will be a back button to the settings.
 *
 * @type {Selector<(() => void) | undefined>}
 */
const getOpenRemoteDevTools = state =>
  getInitializedValues(state).openRemoteDevTools;

/** @type {Selector<InitializedValues>} */
const getInitializedValues = state => {
  const values = state.initializedValues;
  if (!values) {
    throw new Error("The store must be initialized before it can be used.");
  }
  return values;
};

/** @type {Selector<PageContext>} */
const getPageContext = state => getInitializedValues(state).pageContext;

/** @type {Selector<string[]>} */
const getSupportedFeatures = state =>
  getInitializedValues(state).supportedFeatures;

/** @type {Selector<string | null>} */
const getPromptEnvRestart = state => state.promptEnvRestart;

module.exports = {
  getRecordingState,
  getRecordingUnexpectedlyStopped,
  getIsSupportedPlatform,
  getInterval,
  getEntries,
  getFeatures,
  getThreads,
  getThreadsString,
  getObjdirs,
  getPresets,
  getPresetName,
  getOpenRemoteDevTools,
  getRecordingSettings,
  getInitializedValues,
  getPageContext,
  getPromptEnvRestart,
  getSupportedFeatures,
};