mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-28 21:24:26 +08:00
This makes all current files under DevTools lintable with EsLint by default. Also remove the rule for default export for configs. Bug: 397260638 Change-Id: I3b380ad4351eb53c65207b242d7f8221e7788e48 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6357121 Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
350 lines
12 KiB
TypeScript
350 lines
12 KiB
TypeScript
// Copyright 2021 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.
|
|
|
|
export namespace Chrome {
|
|
export namespace DevTools {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
export interface EventSink<ListenerT extends(...args: any) => void> {
|
|
addListener(listener: ListenerT): void;
|
|
removeListener(listener: ListenerT): void;
|
|
}
|
|
|
|
export interface Resource {
|
|
readonly url: string;
|
|
readonly type: string;
|
|
|
|
getContent(callback: (content: string, encoding: string) => unknown): void;
|
|
setContent(content: string, commit: boolean, callback?: (error?: Object) => unknown): void;
|
|
/**
|
|
* Augments this resource's scopes information based on the list of {@link NamedFunctionRange}s
|
|
* for improved debuggability and function naming.
|
|
*
|
|
* @throws
|
|
* If this resource was not produced by a sourcemap or if {@link ranges} are not nested properly.
|
|
* Concretely: For each range, start position must be less than end position, and
|
|
* there must be no "straddling" (i.e. partially overlapping ranges).
|
|
*/
|
|
setFunctionRangesForScript(ranges: NamedFunctionRange[]): Promise<void>;
|
|
attachSourceMapURL(sourceMapURL: string): Promise<void>;
|
|
}
|
|
|
|
export interface InspectedWindow {
|
|
tabId: number;
|
|
|
|
onResourceAdded: EventSink<(resource: Resource) => unknown>;
|
|
onResourceContentCommitted: EventSink<(resource: Resource, content: string) => unknown>;
|
|
|
|
eval(
|
|
expression: string,
|
|
options?: {scriptExecutionContext?: string, frameURL?: string, useContentScriptContext?: boolean},
|
|
callback?: (result: unknown, exceptioninfo: {
|
|
code: string,
|
|
description: string,
|
|
details: unknown[],
|
|
isError: boolean,
|
|
isException: boolean,
|
|
value: string,
|
|
}) => unknown): void;
|
|
getResources(callback: (resources: Resource[]) => unknown): void;
|
|
reload(reloadOptions?: {ignoreCache?: boolean, injectedScript?: string, userAgent?: string}): void;
|
|
}
|
|
|
|
export interface Button {
|
|
onClicked: EventSink<() => unknown>;
|
|
update(iconPath?: string, tooltipText?: string, disabled?: boolean): void;
|
|
}
|
|
|
|
export interface ExtensionView {
|
|
onHidden: EventSink<() => unknown>;
|
|
onShown: EventSink<(window?: Window) => unknown>;
|
|
}
|
|
|
|
export interface ExtensionPanel extends ExtensionView {
|
|
show(): void;
|
|
onSearch: EventSink<(action: string, queryString?: string) => unknown>;
|
|
createStatusBarButton(iconPath: string, tooltipText: string, disabled: boolean): Button;
|
|
}
|
|
|
|
export interface RecorderView extends ExtensionView {
|
|
show(): void;
|
|
}
|
|
|
|
export interface ExtensionSidebarPane extends ExtensionView {
|
|
setHeight(height: string): void;
|
|
setObject(jsonObject: string, rootTitle?: string, callback?: () => unknown): void;
|
|
setPage(path: string): void;
|
|
}
|
|
|
|
export interface PanelWithSidebar {
|
|
createSidebarPane(title: string, callback?: (result: ExtensionSidebarPane) => unknown): void;
|
|
onSelectionChanged: EventSink<() => unknown>;
|
|
}
|
|
|
|
export interface Panels {
|
|
elements: PanelWithSidebar;
|
|
sources: PanelWithSidebar;
|
|
network: NetworkPanel;
|
|
themeName: string;
|
|
|
|
create(title: string, iconPath: string, pagePath: string, callback?: (panel: ExtensionPanel) => unknown): void;
|
|
openResource(url: string, lineNumber: number, columnNumber?: number, callback?: () => unknown): void;
|
|
|
|
/**
|
|
* Fired when the theme changes in DevTools.
|
|
*
|
|
* @param callback The handler callback to register and be invoked on theme changes.
|
|
*/
|
|
setThemeChangeHandler(callback?: (themeName: string) => unknown): void;
|
|
}
|
|
|
|
export interface Request {
|
|
getContent(callback: (content: string, encoding: string) => unknown): void;
|
|
}
|
|
|
|
export interface Network {
|
|
onNavigated: EventSink<(url: string) => unknown>;
|
|
onRequestFinished: EventSink<(request: Request) => unknown>;
|
|
|
|
getHAR(callback: (harLog: object) => unknown): void;
|
|
}
|
|
|
|
export interface NetworkPanel {
|
|
show(options?: {filter: string}): Promise<void>;
|
|
}
|
|
|
|
export interface DevToolsAPI {
|
|
network: Network;
|
|
panels: Panels;
|
|
inspectedWindow: InspectedWindow;
|
|
languageServices: LanguageExtensions;
|
|
recorder: RecorderExtensions;
|
|
performance: Performance;
|
|
}
|
|
|
|
export interface ExperimentalDevToolsAPI {
|
|
inspectedWindow: InspectedWindow;
|
|
}
|
|
|
|
export interface RawModule {
|
|
url: string;
|
|
code?: ArrayBuffer;
|
|
}
|
|
|
|
export interface RawLocationRange {
|
|
rawModuleId: string;
|
|
startOffset: number;
|
|
endOffset: number;
|
|
}
|
|
|
|
export interface RawLocation {
|
|
rawModuleId: string;
|
|
codeOffset: number;
|
|
inlineFrameIndex: number;
|
|
}
|
|
|
|
export interface SourceLocation {
|
|
rawModuleId: string;
|
|
sourceFileURL: string;
|
|
lineNumber: number;
|
|
columnNumber: number;
|
|
}
|
|
|
|
export interface Variable {
|
|
scope: string;
|
|
name: string;
|
|
type: string;
|
|
nestedName?: string[];
|
|
}
|
|
|
|
export interface ScopeInfo {
|
|
type: string;
|
|
typeName: string;
|
|
icon?: string;
|
|
}
|
|
|
|
export interface FunctionInfo {
|
|
name: string;
|
|
}
|
|
|
|
export type RecorderExtensionPlugin = RecorderExtensionExportPlugin|RecorderExtensionReplayPlugin;
|
|
|
|
export interface RecorderExtensionExportPlugin {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
stringify(recording: Record<string, any>): Promise<string>;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
stringifyStep(step: Record<string, any>): Promise<string>;
|
|
}
|
|
export interface RecorderExtensionReplayPlugin {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
replay(recording: Record<string, any>): void;
|
|
}
|
|
|
|
export type RemoteObjectId = string;
|
|
export type RemoteObjectType = 'object'|'undefined'|'string'|'number'|'boolean'|'bigint'|'array'|'null';
|
|
|
|
export interface RemoteObject {
|
|
type: RemoteObjectType;
|
|
className?: string;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
value?: any;
|
|
description?: string;
|
|
objectId?: RemoteObjectId;
|
|
linearMemoryAddress?: number;
|
|
linearMemorySize?: number;
|
|
hasChildren: boolean;
|
|
}
|
|
|
|
/**
|
|
* This refers to a Javascript or a Wasm value of reference type
|
|
* in the V8 engine. We call it foreign object here to emphasize
|
|
* the difference with the remote objects managed by a language
|
|
* extension plugin.
|
|
*/
|
|
export interface ForeignObject {
|
|
type: 'reftype';
|
|
valueClass: 'local'|'global'|'operand';
|
|
index: number;
|
|
}
|
|
|
|
export interface PropertyDescriptor {
|
|
name: string;
|
|
value: RemoteObject|ForeignObject;
|
|
}
|
|
|
|
export interface LanguageExtensionPlugin {
|
|
/**
|
|
* A new raw module has been loaded. If the raw wasm module references an external debug info module, its URL will be
|
|
* passed as symbolsURL.
|
|
*/
|
|
addRawModule(rawModuleId: string, symbolsURL: string|undefined, rawModule: RawModule):
|
|
Promise<string[]|{missingSymbolFiles: string[]}>;
|
|
|
|
/**
|
|
* Find locations in raw modules from a location in a source file.
|
|
*/
|
|
sourceLocationToRawLocation(sourceLocation: SourceLocation): Promise<RawLocationRange[]>;
|
|
|
|
/**
|
|
* Find locations in source files from a location in a raw module.
|
|
*/
|
|
rawLocationToSourceLocation(rawLocation: RawLocation): Promise<SourceLocation[]>;
|
|
|
|
/**
|
|
* Return detailed information about a scope.
|
|
*/
|
|
getScopeInfo(type: string): Promise<ScopeInfo>;
|
|
|
|
/**
|
|
* List all variables in lexical scope at a given location in a raw module.
|
|
*/
|
|
listVariablesInScope(rawLocation: RawLocation): Promise<Variable[]>;
|
|
|
|
/**
|
|
* Notifies the plugin that a script is removed.
|
|
*/
|
|
removeRawModule(rawModuleId: string): Promise<void>;
|
|
|
|
/**
|
|
* Retrieve function name(s) for the function(s) containing the rawLocation. This returns more than one entry if
|
|
* the location is inside of an inlined function with the innermost function at index 0.
|
|
*/
|
|
getFunctionInfo(rawLocation: RawLocation): Promise<{frames: FunctionInfo[], missingSymbolFiles: string[]}|
|
|
{missingSymbolFiles: string[]}|{frames: FunctionInfo[]}>;
|
|
|
|
/**
|
|
* Find locations in raw modules corresponding to the inline function
|
|
* that rawLocation is in. Used for stepping out of an inline function.
|
|
*/
|
|
getInlinedFunctionRanges(rawLocation: RawLocation): Promise<RawLocationRange[]>;
|
|
|
|
/**
|
|
* Find locations in raw modules corresponding to inline functions
|
|
* called by the function or inline frame that rawLocation is in.
|
|
* Used for stepping over inline functions.
|
|
*/
|
|
getInlinedCalleesRanges(rawLocation: RawLocation): Promise<RawLocationRange[]>;
|
|
|
|
/**
|
|
* Retrieve a list of line numbers in a file for which line-to-raw-location mappings exist.
|
|
*/
|
|
getMappedLines(rawModuleId: string, sourceFileURL: string): Promise<number[]|undefined>;
|
|
|
|
/**
|
|
* Evaluate a source language expression in the context of a given raw location and a given stopId. stopId is an
|
|
* opaque key that should be passed to the APIs accessing wasm state, e.g., getWasmLinearMemory. A stopId is
|
|
* invalidated once the debugger resumes.
|
|
*/
|
|
evaluate(expression: string, context: RawLocation, stopId: unknown): Promise<RemoteObject|ForeignObject|null>;
|
|
|
|
/**
|
|
* Retrieve properties of the remote object identified by the object id.
|
|
*/
|
|
getProperties(objectId: RemoteObjectId): Promise<PropertyDescriptor[]>;
|
|
|
|
/**
|
|
* Permanently release the remote object identified by the object id.
|
|
*/
|
|
releaseObject(objectId: RemoteObjectId): Promise<void>;
|
|
}
|
|
|
|
export interface SupportedScriptTypes {
|
|
language: string;
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
symbol_types: string[];
|
|
}
|
|
|
|
export type WasmValue = {type: 'i32'|'f32'|'f64', value: number}|{type: 'i64', value: bigint}|
|
|
{type: 'v128', value: string}|ForeignObject;
|
|
|
|
export interface LanguageExtensions {
|
|
registerLanguageExtensionPlugin(
|
|
plugin: LanguageExtensionPlugin, pluginName: string,
|
|
supportedScriptTypes: SupportedScriptTypes): Promise<void>;
|
|
unregisterLanguageExtensionPlugin(plugin: LanguageExtensionPlugin): Promise<void>;
|
|
|
|
getWasmLinearMemory(offset: number, length: number, stopId: unknown): Promise<ArrayBuffer>;
|
|
getWasmLocal(local: number, stopId: unknown): Promise<WasmValue>;
|
|
getWasmGlobal(global: number, stopId: unknown): Promise<WasmValue>;
|
|
getWasmOp(op: number, stopId: unknown): Promise<WasmValue>;
|
|
|
|
reportResourceLoad(resourceUrl: string, status: {success: boolean, errorMessage?: string, size?: number}):
|
|
Promise<void>;
|
|
}
|
|
|
|
export interface Position {
|
|
line: number;
|
|
column: number;
|
|
}
|
|
|
|
export interface NamedFunctionRange {
|
|
readonly name: string;
|
|
readonly start: Position;
|
|
readonly end: Position;
|
|
}
|
|
|
|
export interface RecorderExtensions {
|
|
registerRecorderExtensionPlugin(plugin: RecorderExtensionPlugin, pluginName: string, mediaType?: string):
|
|
Promise<void>;
|
|
unregisterRecorderExtensionPlugin(plugin: RecorderExtensionPlugin): Promise<void>;
|
|
createView(title: string, pagePath: string): Promise<RecorderView>;
|
|
}
|
|
|
|
export interface Performance {
|
|
onProfilingStarted: EventSink<() => unknown>;
|
|
onProfilingStopped: EventSink<() => unknown>;
|
|
}
|
|
|
|
export interface Chrome {
|
|
devtools: DevToolsAPI;
|
|
experimental: {devtools: ExperimentalDevToolsAPI};
|
|
}
|
|
}
|
|
}
|
|
|
|
declare global {
|
|
interface Window {
|
|
chrome: Chrome.DevTools.Chrome;
|
|
}
|
|
}
|