From fdb4953ea460d5c09ac73f3f37dd570d44893155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sun, 5 Nov 2023 23:58:59 +0100 Subject: refactor: unify CDP types in a single module (#21094) This commit moves all Chrome Devtools Protocol messages to `cli/cdp.rs` and refactors all places using these types to pull them from a common place. No functional changes. --- cli/tools/repl/cdp.rs | 426 ---------------------------------------------- cli/tools/repl/editor.rs | 2 +- cli/tools/repl/mod.rs | 1 - cli/tools/repl/session.rs | 3 +- 4 files changed, 2 insertions(+), 430 deletions(-) delete mode 100644 cli/tools/repl/cdp.rs (limited to 'cli/tools/repl') diff --git a/cli/tools/repl/cdp.rs b/cli/tools/repl/cdp.rs deleted file mode 100644 index f90a1875e..000000000 --- a/cli/tools/repl/cdp.rs +++ /dev/null @@ -1,426 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -/// -use deno_core::serde_json; -use deno_core::serde_json::Value; -use serde::Deserialize; -use serde::Deserializer; -use serde::Serialize; - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct AwaitPromiseArgs { - pub promise_object_id: RemoteObjectId, - #[serde(skip_serializing_if = "Option::is_none")] - pub return_by_value: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub generate_preview: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct AwaitPromiseResponse { - pub result: RemoteObject, - pub exception_details: Option, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct CallFunctionOnArgs { - pub function_declaration: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub object_id: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub arguments: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub silent: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub return_by_value: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub generate_preview: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub user_gesture: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub await_promise: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub execution_context_id: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub object_group: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub throw_on_side_effect: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct CallFunctionOnResponse { - pub result: RemoteObject, - pub exception_details: Option, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct CompileScriptArgs { - pub expression: String, - #[serde(rename = "sourceURL")] - pub source_url: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub execution_context_id: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct CompileScriptResponse { - pub script_id: Option, - pub exception_details: Option, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct EvaluateArgs { - pub expression: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub object_group: Option, - #[serde( - rename = "includeCommandLineAPI", - skip_serializing_if = "Option::is_none" - )] - pub include_command_line_api: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub silent: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub context_id: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub return_by_value: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub generate_preview: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub user_gesture: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub await_promise: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub throw_on_side_effect: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub timeout: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub disable_breaks: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub repl_mode: Option, - #[serde(skip_serializing_if = "Option::is_none")] - #[serde(rename = "allowUnsafeEvalBlockedByCSP")] - pub allow_unsafe_eval_blocked_by_csp: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub unique_context_id: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct EvaluateResponse { - pub result: RemoteObject, - pub exception_details: Option, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct GetPropertiesArgs { - pub object_id: RemoteObjectId, - #[serde(skip_serializing_if = "Option::is_none")] - pub own_properties: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub accessor_properties_only: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub generate_preview: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub non_indexed_properties_only: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GetPropertiesResponse { - pub result: Vec, - pub internal_properties: Option>, - pub private_properties: Option>, - pub exception_details: Option, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct GlobalLexicalScopeNamesArgs { - #[serde(skip_serializing_if = "Option::is_none")] - pub execution_context_id: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GlobalLexicalScopeNamesResponse { - pub names: Vec, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct QueryObjectsArgs { - pub prototype_object_id: RemoteObjectId, - #[serde(skip_serializing_if = "Option::is_none")] - pub object_group: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct QueryObjectsResponse { - pub objects: RemoteObject, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ReleaseObjectArgs { - pub object_id: RemoteObjectId, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ReleaseObjectGroupArgs { - pub object_group: String, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct RunScriptArgs { - pub script_id: ScriptId, - #[serde(skip_serializing_if = "Option::is_none")] - pub execution_context_id: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub object_group: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub silent: Option, - #[serde( - rename = "includeCommandLineAPI", - skip_serializing_if = "Option::is_none" - )] - pub include_command_line_api: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub return_by_value: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub generate_preview: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub await_promise: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RunScriptResponse { - pub result: RemoteObject, - pub exception_details: Option, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct SetAsyncCallStackDepthArgs { - pub max_depth: u64, -} - -// types - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RemoteObject { - #[serde(rename = "type")] - pub kind: String, - pub subtype: Option, - pub class_name: Option, - #[serde(default, deserialize_with = "deserialize_some")] - pub value: Option, - pub unserializable_value: Option, - pub description: Option, - pub object_id: Option, - pub preview: Option, - pub custom_preview: Option, -} - -// Any value that is present is considered Some value, including null. -// ref: https://github.com/serde-rs/serde/issues/984#issuecomment-314143738 -fn deserialize_some<'de, T, D>(deserializer: D) -> Result, D::Error> -where - T: Deserialize<'de>, - D: Deserializer<'de>, -{ - Deserialize::deserialize(deserializer).map(Some) -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ObjectPreview { - #[serde(rename = "type")] - pub kind: String, - pub subtype: Option, - pub description: Option, - pub overflow: bool, - pub properties: Vec, - pub entries: Option>, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct PropertyPreview { - pub name: String, - #[serde(rename = "type")] - pub kind: String, - pub value: Option, - pub value_preview: Option, - pub subtype: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct EntryPreview { - pub key: Option, - pub value: ObjectPreview, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct CustomPreview { - pub header: String, - pub body_getter_id: RemoteObjectId, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ExceptionDetails { - pub exception_id: u64, - pub text: String, - pub line_number: u64, - pub column_number: u64, - pub script_id: Option, - pub url: Option, - pub stack_trace: Option, - pub exception: Option, - pub execution_context_id: Option, - pub exception_meta_data: Option>, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StackTrace { - pub description: Option, - pub call_frames: Vec, - pub parent: Option>, - pub parent_id: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct CallFrame { - pub function_name: String, - pub script_id: ScriptId, - pub url: String, - pub line_number: u64, - pub column_number: u64, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StackTraceId { - pub id: String, - pub debugger_id: Option, -} - -/// -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct CallArgument { - #[serde(skip_serializing_if = "Option::is_none")] - pub value: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub unserializable_value: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub object_id: Option, -} - -impl From<&RemoteObject> for CallArgument { - fn from(obj: &RemoteObject) -> Self { - Self { - value: obj.value.clone(), - unserializable_value: obj.unserializable_value.clone(), - object_id: obj.object_id.clone(), - } - } -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct PropertyDescriptor { - pub name: String, - pub value: Option, - pub writable: Option, - pub get: Option, - pub set: Option, - pub configurable: bool, - pub enumerable: bool, - pub was_thrown: Option, - pub is_own: Option, - pub symbol: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct InternalPropertyDescriptor { - pub name: String, - pub value: Option, -} - -/// -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct PrivatePropertyDescriptor { - pub name: String, - pub value: Option, - pub get: Option, - pub set: Option, -} - -/// -pub type RemoteObjectId = String; - -/// -pub type ExecutionContextId = u64; - -/// -pub type ScriptId = String; - -/// -pub type TimeDelta = u64; - -/// -pub type UnserializableValue = String; - -/// -pub type UniqueDebuggerId = String; diff --git a/cli/tools/repl/editor.rs b/cli/tools/repl/editor.rs index 52fad4759..0bf2da7c8 100644 --- a/cli/tools/repl/editor.rs +++ b/cli/tools/repl/editor.rs @@ -1,5 +1,6 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +use crate::cdp; use crate::colors; use deno_ast::swc::parser::error::SyntaxError; use deno_ast::swc::parser::token::BinOpToken; @@ -37,7 +38,6 @@ use std::sync::atomic::AtomicBool; use std::sync::atomic::Ordering::Relaxed; use std::sync::Arc; -use super::cdp; use super::channel::RustylineSyncMessageSender; use super::session::REPL_INTERNALS_NAME; diff --git a/cli/tools/repl/mod.rs b/cli/tools/repl/mod.rs index c25dc00c6..3700911d6 100644 --- a/cli/tools/repl/mod.rs +++ b/cli/tools/repl/mod.rs @@ -14,7 +14,6 @@ use deno_runtime::permissions::PermissionsContainer; use rustyline::error::ReadlineError; use tokio::sync::mpsc::unbounded_channel; -pub(crate) mod cdp; mod channel; mod editor; mod session; diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs index df9a63772..b46f73d5a 100644 --- a/cli/tools/repl/session.rs +++ b/cli/tools/repl/session.rs @@ -5,6 +5,7 @@ use std::rc::Rc; use std::sync::Arc; use crate::args::CliOptions; +use crate::cdp; use crate::colors; use crate::lsp::ReplLanguageServer; use crate::npm::CliNpmResolver; @@ -48,8 +49,6 @@ use once_cell::sync::Lazy; use regex::Match; use regex::Regex; -use super::cdp; - fn comment_source_to_position_range( comment_start: SourcePos, m: &Match, -- cgit v1.2.3