diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2022-01-27 15:09:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-27 15:09:47 +0100 |
commit | 382a978859a7a7a4351542be818bb2e59523429c (patch) | |
tree | be7039c3d6b1fe4c694cc95523d9c0895b8fb3c3 /cli/cdp.rs | |
parent | 884143218fad0e18f7553aaf079d52de703f7601 (diff) |
refactor: factor out CDP message types (#13501)
Diffstat (limited to 'cli/cdp.rs')
-rw-r--r-- | cli/cdp.rs | 474 |
1 files changed, 474 insertions, 0 deletions
diff --git a/cli/cdp.rs b/cli/cdp.rs new file mode 100644 index 000000000..24fb76e10 --- /dev/null +++ b/cli/cdp.rs @@ -0,0 +1,474 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. + +/// https://chromedevtools.github.io/devtools-protocol/tot/ +use deno_core::serde_json; +use deno_core::serde_json::Value; +use serde::Deserialize; +use serde::Serialize; + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-awaitPromise +#[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<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub generate_preview: Option<bool>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-awaitPromise +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AwaitPromiseResponse { + pub result: RemoteObject, + pub exception_details: Option<ExceptionDetails>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-callFunctionOn +#[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<RemoteObjectId>, + #[serde(skip_serializing_if = "Option::is_none")] + pub arguments: Option<Vec<CallArgument>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub silent: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub return_by_value: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub generate_preview: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub user_gesture: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub await_promise: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub execution_context_id: Option<ExecutionContextId>, + #[serde(skip_serializing_if = "Option::is_none")] + pub object_group: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub throw_on_side_effect: Option<bool>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-callFunctionOn +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct CallFunctionOnResponse { + pub result: RemoteObject, + pub exception_details: Option<ExceptionDetails>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-compileScript +#[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<ExecutionContextId>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-compileScript +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct CompileScriptResponse { + pub script_id: Option<ScriptId>, + pub exception_details: Option<ExceptionDetails>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-evaluate +#[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<String>, + #[serde( + rename = "includeCommandLineAPI", + skip_serializing_if = "Option::is_none" + )] + pub include_command_line_api: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub silent: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub context_id: Option<ExecutionContextId>, + #[serde(skip_serializing_if = "Option::is_none")] + pub return_by_value: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub generate_preview: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub user_gesture: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub await_promise: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub throw_on_side_effect: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub timeout: Option<TimeDelta>, + #[serde(skip_serializing_if = "Option::is_none")] + pub disable_breaks: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub repl_mode: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "allowUnsafeEvalBlockedByCSP")] + pub allow_unsafe_eval_blocked_by_csp: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub unique_context_id: Option<String>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-evaluate +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EvaluateResponse { + pub result: RemoteObject, + pub exception_details: Option<ExceptionDetails>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-getProperties +#[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<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub accessor_properties_only: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub generate_preview: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub non_indexed_properties_only: Option<bool>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-getProperties +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct GetPropertiesResponse { + pub result: Vec<PropertyDescriptor>, + pub internal_properties: Vec<InternalPropertyDescriptor>, + pub private_properties: Vec<PrivatePropertyDescriptor>, + pub exception_details: Option<ExceptionDetails>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-globalLexicalScopeNames +#[derive(Debug, Clone, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GlobalLexicalScopeNamesArgs { + #[serde(skip_serializing_if = "Option::is_none")] + pub execution_context_id: Option<ExecutionContextId>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-globalLexicalScopeNames +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct GlobalLexicalScopeNamesResponse { + pub names: Vec<String>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-queryObjects +#[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<String>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-queryObjects +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct QueryObjectsResponse { + pub objects: RemoteObject, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-releaseObject +#[derive(Debug, Clone, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleaseObjectArgs { + pub object_id: RemoteObjectId, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-releaseObjectGroup +#[derive(Debug, Clone, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleaseObjectGroupArgs { + pub object_group: String, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-runScript +#[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<ExecutionContextId>, + #[serde(skip_serializing_if = "Option::is_none")] + pub object_group: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub silent: Option<bool>, + #[serde( + rename = "includeCommandLineAPI", + skip_serializing_if = "Option::is_none" + )] + pub include_command_line_api: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub return_by_value: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub generate_preview: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub await_promise: Option<bool>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-runScript +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct RunScriptResponse { + pub result: RemoteObject, + pub exception_details: Option<ExceptionDetails>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-setAsyncCallStackDepth +#[derive(Debug, Clone, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SetAsyncCallStackDepthArgs { + pub max_depth: u64, +} + +// types + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-RemoteObject +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub enum RemoteObjectType { + Object, + Function, + Undefined, + String, + Number, + Boolean, + Symbol, + Bigint, +} + +impl std::fmt::Display for RemoteObjectType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(&format!("{:?}", self).to_lowercase()) + } +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-RemoteObject +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub enum RemoteObjectSubType { + Array, + Null, + Node, + Regexp, + Date, + Map, + Set, + Weakmap, + Weakset, + Iterator, + Generator, + Error, + Proxy, + Promise, + Typedarray, + Arraybuffer, + Dataview, + Webassemblymemory, + Wasmvalue, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-RemoteObject +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct RemoteObject { + #[serde(rename = "type")] + pub kind: RemoteObjectType, + pub subtype: Option<RemoteObjectSubType>, + pub class_name: Option<String>, + pub value: Option<Value>, + pub unserializable_value: Option<UnserializableValue>, + pub description: Option<String>, + pub object_id: Option<RemoteObjectId>, + pub preview: Option<ObjectPreview>, + pub custom_preview: Option<CustomPreview>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-ObjectPreview +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ObjectPreview { + #[serde(rename = "type")] + pub kind: RemoteObjectType, + pub subtype: Option<RemoteObjectSubType>, + pub description: Option<String>, + pub overflow: bool, + pub properties: Vec<PropertyPreview>, + pub entries: Option<Vec<EntryPreview>>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-PropertyPreview +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PropertyPreview { + pub name: String, + #[serde(rename = "type")] + pub kind: PropertyPreviewType, + pub value: Option<String>, + pub value_preview: Option<ObjectPreview>, + pub subtype: Option<RemoteObjectSubType>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-PropertyPreview +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub enum PropertyPreviewType { + Object, + Function, + Undefined, + String, + Number, + Boolean, + Symbol, + Accessor, + Bigint, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-EntryPreview +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EntryPreview { + pub key: Option<ObjectPreview>, + pub value: ObjectPreview, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-CustomPreview +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct CustomPreview { + pub header: String, + pub body_getter_id: RemoteObjectId, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-ExceptionDetails +#[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<ScriptId>, + pub url: Option<String>, + pub stack_trace: Option<StackTrace>, + pub exception: Option<RemoteObject>, + pub execution_context_id: Option<ExecutionContextId>, + pub exception_meta_data: Option<serde_json::Map<String, Value>>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-StackTrace +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StackTrace { + pub description: Option<String>, + pub call_frames: Vec<CallFrame>, + pub parent: Option<Box<StackTrace>>, + pub parent_id: Option<StackTraceId>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-CallFrame +#[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, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-StackTraceId +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StackTraceId { + pub id: String, + pub debugger_id: Option<UniqueDebuggerId>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-CallArgument +#[derive(Debug, Clone, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct CallArgument { + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option<Value>, + #[serde(skip_serializing_if = "Option::is_none")] + pub unserializable_value: Option<UnserializableValue>, + #[serde(skip_serializing_if = "Option::is_none")] + pub object_id: Option<RemoteObjectId>, +} + +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(), + } + } +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-InternalPropertyDescriptor +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PropertyDescriptor { + pub name: String, + pub value: Option<RemoteObject>, + pub writable: Option<bool>, + pub get: Option<RemoteObject>, + pub set: Option<RemoteObject>, + pub configurable: bool, + pub enumerable: bool, + pub was_thrown: Option<bool>, + pub is_own: Option<bool>, + pub symbol: Option<RemoteObject>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-InternalPropertyDescriptor +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct InternalPropertyDescriptor { + pub name: String, + pub value: Option<RemoteObject>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-PrivatePropertyDescriptor +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PrivatePropertyDescriptor { + pub name: String, + pub value: Option<RemoteObject>, + pub get: Option<RemoteObject>, + pub set: Option<RemoteObject>, +} + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-RemoteObjectId +pub type RemoteObjectId = String; + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-ExecutionContextId +pub type ExecutionContextId = u64; + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-ScriptId +pub type ScriptId = String; + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-TimeDelta +pub type TimeDelta = u64; + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-UnserializableValue +pub type UnserializableValue = String; + +/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-UniqueDebuggerId +pub type UniqueDebuggerId = String; |