1
0
Fork 0
firefox/devtools/client/performance-new/store/selectors.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

102 lines
3 KiB
JavaScript

/* 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").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,
};