selectors.js (3114B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 // @ts-check 5 "use strict"; 6 7 /** 8 * @typedef {import("../@types/perf").RecordingState} RecordingState 9 * @typedef {import("../@types/perf").RecordingSettings} RecordingSettings 10 * @typedef {import("../@types/perf").InitializedValues} InitializedValues 11 * @typedef {import("../@types/perf").PerfFront} PerfFront 12 * @typedef {import("../@types/perf").PageContext} PageContext 13 * @typedef {import("../@types/perf").Presets} Presets 14 */ 15 /** 16 * @template S 17 * @typedef {import("../@types/perf").Selector<S>} Selector<S> 18 */ 19 20 /** @type {Selector<RecordingState>} */ 21 const getRecordingState = state => state.recordingState; 22 23 /** @type {Selector<boolean>} */ 24 const getRecordingUnexpectedlyStopped = state => 25 state.recordingUnexpectedlyStopped; 26 27 /** @type {Selector<boolean | null>} */ 28 const getIsSupportedPlatform = state => state.isSupportedPlatform; 29 30 /** @type {Selector<RecordingSettings>} */ 31 const getRecordingSettings = state => state.recordingSettings; 32 33 /** @type {Selector<number>} */ 34 const getInterval = state => getRecordingSettings(state).interval; 35 36 /** @type {Selector<number>} */ 37 const getEntries = state => getRecordingSettings(state).entries; 38 39 /** @type {Selector<string[]>} */ 40 const getFeatures = state => getRecordingSettings(state).features; 41 42 /** @type {Selector<string[]>} */ 43 const getThreads = state => getRecordingSettings(state).threads; 44 45 /** @type {Selector<string>} */ 46 const getThreadsString = state => getThreads(state).join(","); 47 48 /** @type {Selector<string[]>} */ 49 const getObjdirs = state => getRecordingSettings(state).objdirs; 50 51 /** @type {Selector<Presets>} */ 52 const getPresets = state => getInitializedValues(state).presets; 53 54 /** @type {Selector<string>} */ 55 const getPresetName = state => state.recordingSettings.presetName; 56 57 /** 58 * When remote profiling, there will be a back button to the settings. 59 * 60 * @type {Selector<(() => void) | undefined>} 61 */ 62 const getOpenRemoteDevTools = state => 63 getInitializedValues(state).openRemoteDevTools; 64 65 /** @type {Selector<InitializedValues>} */ 66 const getInitializedValues = state => { 67 const values = state.initializedValues; 68 if (!values) { 69 throw new Error("The store must be initialized before it can be used."); 70 } 71 return values; 72 }; 73 74 /** @type {Selector<PageContext>} */ 75 const getPageContext = state => getInitializedValues(state).pageContext; 76 77 /** @type {Selector<string[]>} */ 78 const getSupportedFeatures = state => 79 getInitializedValues(state).supportedFeatures; 80 81 /** @type {Selector<string | null>} */ 82 const getPromptEnvRestart = state => state.promptEnvRestart; 83 84 module.exports = { 85 getRecordingState, 86 getRecordingUnexpectedlyStopped, 87 getIsSupportedPlatform, 88 getInterval, 89 getEntries, 90 getFeatures, 91 getThreads, 92 getThreadsString, 93 getObjdirs, 94 getPresets, 95 getPresetName, 96 getOpenRemoteDevTools, 97 getRecordingSettings, 98 getInitializedValues, 99 getPageContext, 100 getPromptEnvRestart, 101 getSupportedFeatures, 102 };