tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 };