From 7bcf1211a1494c188c9de83670d328c0492de98a Mon Sep 17 00:00:00 2001 From: Trevor Manz Date: Fri, 29 Sep 2023 18:24:09 -0400 Subject: [PATCH] feat(jupyter): send Jupyter messaging metadata with `Deno.jupyter.broadcast` (#20714) Exposes [`metadata`](https://jupyter-client.readthedocs.io/en/latest/messaging.html#metadata) to the `Deno.jupyter.broadcast` API. ```js await Deno.jupyter.broadcast(msgType, content, metadata); ``` The metadata is required for [`"comm_open"`](https://github.com/jupyter-widgets/ipywidgets/blob/main/packages/schema/messages.md#instantiating-a-widget-object-1) for with `jupyter.widget` target. --- cli/js/40_jupyter.js | 4 ++-- cli/ops/jupyter.rs | 2 ++ cli/tools/jupyter/jupyter_msg.rs | 8 ++++++++ cli/tsc/dts/lib.deno.unstable.d.ts | 3 +++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/cli/js/40_jupyter.js b/cli/js/40_jupyter.js index ae257f1c1f..10dbccf4c5 100644 --- a/cli/js/40_jupyter.js +++ b/cli/js/40_jupyter.js @@ -9,8 +9,8 @@ function enableJupyter() { } = core.ensureFastOps(); globalThis.Deno.jupyter = { - async broadcast(msgType, content) { - await op_jupyter_broadcast(msgType, content); + async broadcast(msgType, content, { metadata = {} } = {}) { + await op_jupyter_broadcast(msgType, content, metadata); }, }; } diff --git a/cli/ops/jupyter.rs b/cli/ops/jupyter.rs index 765b062e5c..12d19fab50 100644 --- a/cli/ops/jupyter.rs +++ b/cli/ops/jupyter.rs @@ -36,6 +36,7 @@ pub async fn op_jupyter_broadcast( state: Rc>, #[string] message_type: String, #[serde] content: serde_json::Value, + #[serde] metadata: serde_json::Value, ) -> Result<(), AnyError> { let (iopub_socket, last_execution_request) = { let s = state.borrow(); @@ -52,6 +53,7 @@ pub async fn op_jupyter_broadcast( last_request .new_message(&message_type) .with_content(content) + .with_metadata(metadata) .send(&mut *iopub_socket.lock().await) .await?; } diff --git a/cli/tools/jupyter/jupyter_msg.rs b/cli/tools/jupyter/jupyter_msg.rs index c28dd3b485..beb9f34e4a 100644 --- a/cli/tools/jupyter/jupyter_msg.rs +++ b/cli/tools/jupyter/jupyter_msg.rs @@ -206,6 +206,14 @@ impl JupyterMessage { self } + pub(crate) fn with_metadata( + mut self, + metadata: serde_json::Value, + ) -> JupyterMessage { + self.metadata = metadata; + self + } + pub(crate) async fn send( &self, connection: &mut Connection, diff --git a/cli/tsc/dts/lib.deno.unstable.d.ts b/cli/tsc/dts/lib.deno.unstable.d.ts index 9f9a4914bb..11510d144f 100644 --- a/cli/tsc/dts/lib.deno.unstable.d.ts +++ b/cli/tsc/dts/lib.deno.unstable.d.ts @@ -1978,6 +1978,9 @@ declare namespace Deno { export function broadcast( msgType: string, content: Record, + extra?: { + metadata?: Record; + }, ): Promise; } }