diff --git a/web/client-api/src/main/java/io/deephaven/web/client/api/console/JsVariableDefinition.java b/web/client-api/src/main/java/io/deephaven/web/client/api/console/JsVariableDefinition.java index 576a0cb74c5..50dda49996d 100644 --- a/web/client-api/src/main/java/io/deephaven/web/client/api/console/JsVariableDefinition.java +++ b/web/client-api/src/main/java/io/deephaven/web/client/api/console/JsVariableDefinition.java @@ -12,8 +12,8 @@ /** * A format to describe a variable available to be read from the server. Application fields are optional, and only * populated when a variable is provided by application mode. - * - * APIs which take a VariableDefinition` must at least be provided an object with a type and id field. + *
+ * APIs which take a VariableDefinition must at least be provided an object with a type and id field.
*/
@TsInterface
@TsName(namespace = "dh.ide", name = "VariableDefinition")
diff --git a/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidget.java b/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidget.java
index d574ad2e80e..94e3ad7edfb 100644
--- a/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidget.java
+++ b/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidget.java
@@ -218,6 +218,10 @@ public String getDataAsString() {
return new String(Js.uncheckedCast(response.getData().getPayload_asU8()), StandardCharsets.UTF_8);
}
+ /**
+ * @return the exported objects sent in the initial message from the server. The client is responsible for closing
+ * them when finished using them.
+ */
@Override
@JsProperty
public JsWidgetExportedObject[] getExportedObjects() {
diff --git a/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidgetExportedObject.java b/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidgetExportedObject.java
index c4af4c77c92..4daf02031b3 100644
--- a/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidgetExportedObject.java
+++ b/web/client-api/src/main/java/io/deephaven/web/client/api/widget/JsWidgetExportedObject.java
@@ -5,6 +5,7 @@
import com.vertispan.tsdefs.annotations.TsInterface;
import com.vertispan.tsdefs.annotations.TsName;
+import elemental2.core.JsArray;
import elemental2.promise.Promise;
import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.session_pb.ExportRequest;
import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.table_pb.ExportedTableCreationResponse;
@@ -19,10 +20,13 @@
import io.deephaven.web.client.api.console.JsVariableType;
import io.deephaven.web.client.state.ClientTableState;
import jsinterop.annotations.JsMethod;
+import jsinterop.annotations.JsNullable;
import jsinterop.annotations.JsProperty;
/**
- * Represents a server-side object that may not yet have been fetched by the client.
+ * Represents a server-side object that may not yet have been fetched by the client. When this object will no longer be
+ * used, if {@link #fetch()} is not called on this object, then {@link #close()} must be to ensure server-side resources
+ * are correctly freed.
*/
@TsInterface
@TsName(namespace = "dh", name = "WidgetExportedObject")
@@ -58,8 +62,19 @@ public JsWidgetExportedObject(WorkerConnection connection, TypedTicket ticket) {
});
}
+ /**
+ * Returns the type of this export, typically one of {@link JsVariableType}, but may also include plugin types. If
+ * null, this object cannot be fetched, but can be passed to the server, such as via
+ * {@link JsWidget#sendMessage(JsWidget.MessageUnion, JsArray)}.
+ *
+ * @return the string type of this server-side object, or null.
+ */
+ @JsNullable
@JsProperty
public String getType() {
+ if (ticket.getType().isEmpty()) {
+ return null;
+ }
return ticket.getType();
}
@@ -93,17 +108,6 @@ public Promise