summaryrefslogtreecommitdiff
path: root/cli/tools/repl/session.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools/repl/session.rs')
-rw-r--r--cli/tools/repl/session.rs63
1 files changed, 42 insertions, 21 deletions
diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs
index d89cc95c3..a1b602b4b 100644
--- a/cli/tools/repl/session.rs
+++ b/cli/tools/repl/session.rs
@@ -116,9 +116,10 @@ pub fn result_to_evaluation_output(
}
}
-struct TsEvaluateResponse {
- ts_code: String,
- value: cdp::EvaluateResponse,
+#[derive(Debug)]
+pub struct TsEvaluateResponse {
+ pub ts_code: String,
+ pub value: cdp::EvaluateResponse,
}
pub struct ReplSession {
@@ -305,7 +306,7 @@ impl ReplSession {
result_to_evaluation_output(result)
}
- async fn evaluate_line_with_object_wrapping(
+ pub async fn evaluate_line_with_object_wrapping(
&mut self,
line: &str,
) -> Result<TsEvaluateResponse, AnyError> {
@@ -395,29 +396,24 @@ impl ReplSession {
Ok(())
}
- pub async fn get_eval_value(
+ pub async fn call_function_on_args(
&mut self,
- evaluate_result: &cdp::RemoteObject,
- ) -> Result<String, AnyError> {
- // TODO(caspervonb) we should investigate using previews here but to keep things
- // consistent with the previous implementation we just get the preview result from
- // Deno.inspectArgs.
+ function_declaration: String,
+ args: &[cdp::RemoteObject],
+ ) -> Result<cdp::CallFunctionOnResponse, AnyError> {
+ let arguments: Option<Vec<cdp::CallArgument>> = if args.is_empty() {
+ None
+ } else {
+ Some(args.iter().map(|a| a.into()).collect())
+ };
+
let inspect_response = self
.post_message_with_event_loop(
"Runtime.callFunctionOn",
Some(cdp::CallFunctionOnArgs {
- function_declaration: format!(
- r#"function (object) {{
- try {{
- return {0}.inspectArgs(["%o", object], {{ colors: !{0}.noColor }});
- }} catch (err) {{
- return {0}.inspectArgs(["%o", err]);
- }}
- }}"#,
- *REPL_INTERNALS_NAME
- ),
+ function_declaration,
object_id: None,
- arguments: Some(vec![evaluate_result.into()]),
+ arguments,
silent: None,
return_by_value: None,
generate_preview: None,
@@ -432,6 +428,31 @@ impl ReplSession {
let response: cdp::CallFunctionOnResponse =
serde_json::from_value(inspect_response)?;
+ Ok(response)
+ }
+
+ pub async fn get_eval_value(
+ &mut self,
+ evaluate_result: &cdp::RemoteObject,
+ ) -> Result<String, AnyError> {
+ // TODO(caspervonb) we should investigate using previews here but to keep things
+ // consistent with the previous implementation we just get the preview result from
+ // Deno.inspectArgs.
+ let response = self
+ .call_function_on_args(
+ format!(
+ r#"function (object) {{
+ try {{
+ return {0}.inspectArgs(["%o", object], {{ colors: !{0}.noColor }});
+ }} catch (err) {{
+ return {0}.inspectArgs(["%o", err]);
+ }}
+ }}"#,
+ *REPL_INTERNALS_NAME
+ ),
+ &[evaluate_result.clone()],
+ )
+ .await?;
let value = response.result.value.unwrap();
let s = value.as_str().unwrap();