mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-10 05:35:05 +08:00
R=andoli@chromium.org, tvanderlippe@chromium.org Bug: None Change-Id: Ie5de59552683d2f2fdbf6aff03d302b74e445c7c Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2696654 Commit-Queue: Simon Zünd <szuend@chromium.org> Reviewed-by: Tim van der Lippe <tvanderlippe@chromium.org>
198 lines
6.3 KiB
TypeScript
198 lines
6.3 KiB
TypeScript
// Copyright 2020 The Chromium Authors. All rights reserved.
|
||
// Use of this source code is governed by a BSD-style license that can be
|
||
// found in the LICENSE file.
|
||
|
||
import * as Platform from '../platform/platform.js';
|
||
import {ls} from '../platform/platform.js';
|
||
import * as Root from '../root/root.js';
|
||
|
||
import {SettingStorageType} from './Settings.js';
|
||
|
||
let registeredSettings: Array<SettingRegistration> = [];
|
||
const settingNameSet = new Set<string>();
|
||
|
||
|
||
export function registerSettingExtension(registration: SettingRegistration): void {
|
||
const settingName = registration.settingName;
|
||
if (settingNameSet.has(settingName)) {
|
||
throw new Error(`Duplicate setting name '${settingName}'`);
|
||
}
|
||
settingNameSet.add(settingName);
|
||
registeredSettings.push(registration);
|
||
}
|
||
|
||
export function getRegisteredSettings(): Array<SettingRegistration> {
|
||
return registeredSettings.filter(
|
||
setting =>
|
||
Root.Runtime.Runtime.isDescriptorEnabled({experiment: setting.experiment, condition: setting.condition}));
|
||
}
|
||
|
||
export function registerSettingExtengionsForTest(
|
||
settings: Array<SettingRegistration>, forceReset: boolean = false): void {
|
||
if (registeredSettings.length === 0 || forceReset) {
|
||
registeredSettings = settings;
|
||
settingNameSet.clear();
|
||
for (const setting of settings) {
|
||
const settingName = setting.settingName;
|
||
if (settingNameSet.has(settingName)) {
|
||
throw new Error(`Duplicate setting name '${settingName}'`);
|
||
}
|
||
settingNameSet.add(settingName);
|
||
}
|
||
}
|
||
}
|
||
|
||
export const enum SettingCategory {
|
||
NONE = '', // `NONE` must be a falsy value. Legacy code uses if-checks for the category.
|
||
ELEMENTS = 'ELEMENTS',
|
||
APPEARANCE = 'APPEARANCE',
|
||
SOURCES = 'SOURCES',
|
||
NETWORK = 'NETWORK',
|
||
PERFORMANCE = 'PERFORMANCE',
|
||
CONSOLE = 'CONSOLE',
|
||
PERSISTENCE = 'PERSISTENCE',
|
||
DEBUGGER = 'DEBUGGER',
|
||
GLOBAL = 'GLOBAL',
|
||
RENDERING = 'RENDERING',
|
||
GRID = 'GRID',
|
||
MOBILE = 'MOBILE',
|
||
EMULATION = 'EMULATION',
|
||
MEMORY = 'MEMORY',
|
||
EXTENSIONS = 'EXTENSIONS',
|
||
}
|
||
|
||
export function getLocalizedSettingsCategory(category: SettingCategory): string|Platform.UIString.LocalizedString {
|
||
switch (category) {
|
||
case SettingCategory.ELEMENTS:
|
||
return ls`Elements`;
|
||
case SettingCategory.APPEARANCE:
|
||
return ls`Appearance`;
|
||
case SettingCategory.SOURCES:
|
||
return ls`Sources`;
|
||
case SettingCategory.NETWORK:
|
||
return ls`Network`;
|
||
case SettingCategory.PERFORMANCE:
|
||
return ls`Performance`;
|
||
case SettingCategory.CONSOLE:
|
||
return ls`Console`;
|
||
case SettingCategory.PERSISTENCE:
|
||
return ls`Persistence`;
|
||
case SettingCategory.DEBUGGER:
|
||
return ls`Debugger`;
|
||
case SettingCategory.GLOBAL:
|
||
return ls`Global`;
|
||
case SettingCategory.RENDERING:
|
||
return ls`Rendering`;
|
||
case SettingCategory.GRID:
|
||
return ls`Grid`;
|
||
case SettingCategory.MOBILE:
|
||
return ls`Mobile`;
|
||
case SettingCategory.EMULATION:
|
||
return ls`Emulation`;
|
||
case SettingCategory.MEMORY:
|
||
return ls`Memory`;
|
||
case SettingCategory.EXTENSIONS:
|
||
return ls`Extensions`;
|
||
case SettingCategory.NONE:
|
||
return '';
|
||
}
|
||
}
|
||
|
||
export const enum SettingType {
|
||
ARRAY = 'array',
|
||
REGEX = 'regex',
|
||
ENUM = 'enum',
|
||
BOOLEAN = 'boolean',
|
||
}
|
||
|
||
export interface RegExpSettingItem {
|
||
pattern: string;
|
||
disabled?: boolean;
|
||
}
|
||
|
||
export interface SettingRegistration {
|
||
/**
|
||
* The category with which the setting is displayed in the UI.
|
||
*/
|
||
category?: SettingCategory;
|
||
/**
|
||
* Used to sort on screen the settings that belong to the same category.
|
||
*/
|
||
order?: number;
|
||
/**
|
||
* The title with which the setting is shown on screen.
|
||
*/
|
||
title?: () => Platform.UIString.LocalizedString;
|
||
/**
|
||
* The title with which the setting is shown on screen, if the platform running DevTools is 'mac'.
|
||
* If not set, the 'title' field will be used instead.
|
||
*/
|
||
titleMac?: () => Platform.UIString.LocalizedString;
|
||
/**
|
||
* The identifier of the setting.
|
||
*/
|
||
settingName: string;
|
||
/**
|
||
* Determines how the possible values of the setting are expressed.
|
||
*
|
||
* - If the setting can only be enabled and disabled use BOOLEAN
|
||
* - If the setting has a list of possible values use ENUM
|
||
* - If each setting value is a set of objects use ARRAY
|
||
* - If the setting value is a regular expression use REGEX
|
||
*/
|
||
settingType: SettingType;
|
||
/**
|
||
* The value set by default to the setting.
|
||
*/
|
||
defaultValue: unknown;
|
||
/**
|
||
* Words used to find a setting in the Command Menu.
|
||
*/
|
||
tags?: Array<() => Platform.UIString.LocalizedString>;
|
||
/**
|
||
* The possible values the setting can have, each with a description composed of a title and an optional text.
|
||
*/
|
||
options?: Array<SettingExtensionOption>;
|
||
/**
|
||
* Whether DevTools must be reloaded for a change in the setting to take effect.
|
||
*/
|
||
reloadRequired?: boolean;
|
||
/**
|
||
* Determines if the setting value is stored in the global, local or session storage.
|
||
*/
|
||
storageType?: SettingStorageType;
|
||
/**
|
||
* A condition that, when present in the queryParamsObject of Runtime, constraints the value
|
||
* of the setting to be changed only if the user set it.
|
||
*/
|
||
userActionCondition?: string;
|
||
/**
|
||
* The name of the experiment a setting is associated with. Enabling and disabling the declared
|
||
* experiment will enable and disable the setting respectively.
|
||
*/
|
||
experiment?: Root.Runtime.ExperimentName;
|
||
/**
|
||
* A condition represented as a string the setting's availability depends on. Conditions come
|
||
* from the queryParamsObject defined in Runtime and just as the experiment field, they determine the availability
|
||
* of the setting. A condition can be negated by prepending a ‘!’ to the value of the condition
|
||
* property and in that case the behaviour of the setting's availability will be inverted.
|
||
*/
|
||
condition?: Root.Runtime.ConditionName;
|
||
}
|
||
interface LocalizedSettingExtensionOption {
|
||
value: boolean|string;
|
||
title: () => Platform.UIString.LocalizedString;
|
||
text?: () => Platform.UIString.LocalizedString;
|
||
raw?: false;
|
||
}
|
||
interface RawSettingExtensionOption {
|
||
value: boolean|string;
|
||
title: () => Platform.UIString.LocalizedString;
|
||
/**
|
||
* Text used to describe the option. Must be localized if 'raw' is false.
|
||
*/
|
||
text?: string;
|
||
raw: true;
|
||
}
|
||
export type SettingExtensionOption = LocalizedSettingExtensionOption|RawSettingExtensionOption;
|