scoundrel-remote-eval 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@ const client = new Client(clientWebSocket)
25
25
 
26
26
  const math = await client.import("math")
27
27
  const pi = await math.readAttributeWithReference("pi")
28
- const cosOfPi = await math.callMethodWithReference("cos", pi)
28
+ const cosOfPi = await math.callMethod("cos", {returnReference: true}, pi)
29
29
  const result = await cosOfPi.serialize()
30
30
 
31
31
  expect(result).toEqual(-1)
@@ -34,6 +34,44 @@ client.close()
34
34
  pythonWebSocketRunner.close()
35
35
  ```
36
36
 
37
+ ## Client and reference examples
38
+
39
+ Create remote objects, call methods, and fetch attributes:
40
+
41
+ ```js
42
+ const arrayRef = await client.newObjectWithReference("Array")
43
+ await arrayRef.callMethod("push", "one", "two")
44
+ const joined = await arrayRef.callMethod("join", ", ")
45
+ expect(joined).toEqual("one, two")
46
+
47
+ const lengthRef = await arrayRef.callMethod("push", {returnReference: true}, "three")
48
+ const length = await lengthRef.serialize()
49
+ expect(length).toEqual(3)
50
+ ```
51
+
52
+ Read attributes directly or as references:
53
+
54
+ ```js
55
+ const math = await client.import("math")
56
+ const piRef = await math.readAttributeWithReference("pi")
57
+ const pi = await piRef.serialize()
58
+
59
+ const e = await math.readAttribute("E")
60
+ expect([pi, e].every((value) => typeof value === "number")).toEqual(true)
61
+ ```
62
+
63
+ Fetch globally available or registered objects:
64
+
65
+ ```js
66
+ client.registerObject("config", {mode: "test"})
67
+
68
+ const configRef = await client.getObject("config")
69
+ const config = await configRef.serialize()
70
+ expect(config).toEqual({mode: "test"})
71
+
72
+ client.unregisterObject("config")
73
+ ```
74
+
37
75
  ## Serialization
38
76
 
39
77
  `Reference#serialize()` only supports JSON-safe values (strings, numbers, booleans, null, plain objects, and arrays). It throws an error if the value contains functions, symbols, bigints, class instances/non-plain objects, circular references, non-finite numbers, or other unsupported types.
@@ -82,7 +120,13 @@ const client = new Client(clientWebSocket, {enableServerControl: false})
82
120
  // equivalent to: new Client(clientWebSocket)
83
121
  ```
84
122
 
85
- Registered objects and classes are available inside `evalWithReference`:
123
+ You can also enable it after construction:
124
+
125
+ ```js
126
+ client.enableServerControl()
127
+ ```
128
+
129
+ Registered objects and classes are available inside `eval`:
86
130
 
87
131
  ```js
88
132
  const client = new Client(clientWebSocket, {enableServerControl: true})
@@ -101,8 +145,28 @@ client.registerClass("TestGreeter", TestGreeter)
101
145
  client.registerObject("testSettings", {prefix: "Hello"})
102
146
 
103
147
  const serverClient = server.getClients()[0] // from your ScoundrelServer instance
104
- const greetingRef = await serverClient.evalWithReference("(() => { const greeter = new TestGreeter(testSettings.prefix); return greeter.greet('World') })()")
148
+ const greetingRef = await serverClient.eval("(() => { const greeter = new TestGreeter(testSettings.prefix); return greeter.greet('World') })()")
105
149
  const greeting = await greetingRef.serialize()
106
150
 
107
151
  expect(greeting).toEqual("Hello World")
108
152
  ```
153
+
154
+ You can unregister classes or objects to remove them from server-side lookups and `eval` scope:
155
+
156
+ ```js
157
+ client.unregisterClass("TestGreeter")
158
+ client.unregisterObject("testSettings")
159
+ ```
160
+
161
+ `eval` defaults to returning a reference, but you can request the raw result:
162
+
163
+ ```js
164
+ const result = await serverClient.eval({returnResult: true}, "(() => 1 + 1)()")
165
+ expect(result).toEqual(2)
166
+ ```
167
+
168
+ Use `eval` with `returnReference` if you need to be explicit:
169
+
170
+ ```js
171
+ const greetingRef = await serverClient.eval({returnReference: true}, "(() => { return 'Hello' })()")
172
+ ```
@@ -9,24 +9,24 @@ export default class WebSocket {
9
9
  commandsCount: number;
10
10
  close(): Promise<void>;
11
11
  /**
12
- * @param {(data: any) => void} callback
12
+ * @param {(data: any) => void} callback Handler for incoming commands
13
13
  */
14
14
  onCommand(callback: (data: any) => void): void;
15
15
  onCommandCallback: (data: any) => void;
16
16
  /**
17
- * @param {Event} event
17
+ * @param {Event} event WebSocket error event
18
18
  */
19
19
  onSocketError: (event: Event) => void;
20
20
  /**
21
- * @param {MessageEvent} event
21
+ * @param {MessageEvent} event WebSocket message event
22
22
  */
23
23
  onSocketMessage: (event: MessageEvent) => void;
24
24
  /**
25
- * @param {Event} event
25
+ * @param {Event} event WebSocket open event
26
26
  */
27
27
  onSocketOpen: (event: Event) => void;
28
28
  /**
29
- * @param {Record<string, any>} data
29
+ * @param {Record<string, any>} data Payload to send
30
30
  */
31
31
  send(data: Record<string, any>): void;
32
32
  waitForOpened: () => Promise<any>;
@@ -9,13 +9,13 @@ export default class WebSocket {
9
9
  */
10
10
  constructor(ws) {
11
11
  /**
12
- * @param {Event} event
12
+ * @param {Event} event WebSocket error event
13
13
  */
14
14
  this.onSocketError = (event) => {
15
15
  logger.error(() => ["onSocketError", event]);
16
16
  };
17
17
  /**
18
- * @param {MessageEvent} event
18
+ * @param {MessageEvent} event WebSocket message event
19
19
  */
20
20
  this.onSocketMessage = (event) => {
21
21
  const data = JSON.parse(event.data);
@@ -26,7 +26,7 @@ export default class WebSocket {
26
26
  this.onCommandCallback(data);
27
27
  };
28
28
  /**
29
- * @param {Event} event
29
+ * @param {Event} event WebSocket open event
30
30
  */
31
31
  this.onSocketOpen = (event) => {
32
32
  logger.log(() => ["onSocketOpen", event]);
@@ -51,13 +51,13 @@ export default class WebSocket {
51
51
  await this.ws.close();
52
52
  }
53
53
  /**
54
- * @param {(data: any) => void} callback
54
+ * @param {(data: any) => void} callback Handler for incoming commands
55
55
  */
56
56
  onCommand(callback) {
57
57
  this.onCommandCallback = callback;
58
58
  }
59
59
  /**
60
- * @param {Record<string, any>} data
60
+ * @param {Record<string, any>} data Payload to send
61
61
  */
62
62
  send(data) {
63
63
  const sendData = JSON.stringify(data);
@@ -66,4 +66,4 @@ export default class WebSocket {
66
66
  this.ws.send(sendData);
67
67
  }
68
68
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpZW50L2Nvbm5lY3Rpb25zL3dlYi1zb2NrZXQvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLG9CQUFvQixDQUFBO0FBRXZDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7QUFFaEQsd0JBQXdCO0FBRXhCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FBUztJQUM1Qjs7O09BR0c7SUFDSCxZQUFZLEVBQUU7UUEyQmQ7O1dBRUc7UUFDSCxrQkFBYSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQTtRQUVEOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRW5DLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBRTFFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFBO1lBQ2hFLENBQUM7WUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsQ0FBQyxDQUFBO1FBRUQ7O1dBRUc7UUFDSCxpQkFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUMsQ0FBQTtRQWFELGtCQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDcEQsYUFBYTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRXpDLGFBQWE7WUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUMsQ0FBQTtRQXhFQSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUVaLGFBQWE7UUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFckQsYUFBYTtRQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUVuRCxhQUFhO1FBQ2IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsUUFBUTtRQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFBO0lBQ25DLENBQUM7SUErQkQ7O09BRUc7SUFDSCxJQUFJLENBQUMsSUFBSTtRQUNQLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBRXZDLGFBQWE7UUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN4QixDQUFDO0NBU0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vbG9nZ2VyLmpzXCJcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcihcIlNjb3VuZHJlbCBXZWJTb2NrZXRcIilcblxuLy8gbG9nZ2VyLnNldERlYnVnKHRydWUpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlNvY2tldCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFdlYlNvY2tldCBjb25uZWN0aW9uIGhhbmRsZXJcbiAgICogQHBhcmFtIHtXZWJTb2NrZXR9IHdzIFRoZSBXZWJTb2NrZXQgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHdzKSB7XG4gICAgdGhpcy53cyA9IHdzXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgdGhpcy5vblNvY2tldEVycm9yKVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcihcIm9wZW5cIiwgdGhpcy5vblNvY2tldE9wZW4pXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLm9uU29ja2V0TWVzc2FnZSlcblxuICAgIHRoaXMuY29tbWFuZHMgPSB7fVxuICAgIHRoaXMuY29tbWFuZHNDb3VudCA9IDBcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIGF3YWl0IHRoaXMud3MuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KGRhdGE6IGFueSkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIG9uQ29tbWFuZChjYWxsYmFjaykge1xuICAgIHRoaXMub25Db21tYW5kQ2FsbGJhY2sgPSBjYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBvblNvY2tldEVycm9yID0gKGV2ZW50KSA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKCgpID0+IFtcIm9uU29ja2V0RXJyb3JcIiwgZXZlbnRdKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TWVzc2FnZUV2ZW50fSBldmVudFxuICAgKi9cbiAgb25Tb2NrZXRNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSlcblxuICAgIGxvZ2dlci5sb2coKCkgPT4gW1wiQ2xpZW50OjpDb25uZWN0aW9uczo6V2ViU29ja2V0IG9uU29ja2V0TWVzc2FnZVwiLCBkYXRhXSlcblxuICAgIGlmICghdGhpcy5vbkNvbW1hbmRDYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gb25Db21tYW5kIGNhbGxiYWNrIHNldCwgaWdub3JpbmcgbWVzc2FnZVwiKVxuICAgIH1cblxuICAgIHRoaXMub25Db21tYW5kQ2FsbGJhY2soZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25Tb2NrZXRPcGVuID0gKGV2ZW50KSA9PiB7XG4gICAgbG9nZ2VyLmxvZygoKSA9PiBbXCJvblNvY2tldE9wZW5cIiwgZXZlbnRdKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gZGF0YVxuICAgKi9cbiAgc2VuZChkYXRhKSB7XG4gICAgY29uc3Qgc2VuZERhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKVxuICAgIGxvZ2dlci5sb2coKCkgPT4gW1wiU2VuZGluZ1wiLCBzZW5kRGF0YV0pXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy53cy5zZW5kKHNlbmREYXRhKVxuICB9XG5cbiAgd2FpdEZvck9wZW5lZCA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKFwib3BlblwiLCByZXNvbHZlKVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdClcbiAgfSlcbn1cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpZW50L2Nvbm5lY3Rpb25zL3dlYi1zb2NrZXQvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLG9CQUFvQixDQUFBO0FBRXZDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7QUFFaEQsd0JBQXdCO0FBRXhCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FBUztJQUM1Qjs7O09BR0c7SUFDSCxZQUFZLEVBQUU7UUEyQmQ7O1dBRUc7UUFDSCxrQkFBYSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQTtRQUVEOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRW5DLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBRTFFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFBO1lBQ2hFLENBQUM7WUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsQ0FBQyxDQUFBO1FBRUQ7O1dBRUc7UUFDSCxpQkFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUMsQ0FBQTtRQWFELGtCQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDcEQsYUFBYTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRXpDLGFBQWE7WUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUMsQ0FBQTtRQXhFQSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUVaLGFBQWE7UUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFckQsYUFBYTtRQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUVuRCxhQUFhO1FBQ2IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsUUFBUTtRQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFBO0lBQ25DLENBQUM7SUErQkQ7O09BRUc7SUFDSCxJQUFJLENBQUMsSUFBSTtRQUNQLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBRXZDLGFBQWE7UUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN4QixDQUFDO0NBU0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vbG9nZ2VyLmpzXCJcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcihcIlNjb3VuZHJlbCBXZWJTb2NrZXRcIilcblxuLy8gbG9nZ2VyLnNldERlYnVnKHRydWUpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlNvY2tldCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFdlYlNvY2tldCBjb25uZWN0aW9uIGhhbmRsZXJcbiAgICogQHBhcmFtIHtXZWJTb2NrZXR9IHdzIFRoZSBXZWJTb2NrZXQgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHdzKSB7XG4gICAgdGhpcy53cyA9IHdzXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgdGhpcy5vblNvY2tldEVycm9yKVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcihcIm9wZW5cIiwgdGhpcy5vblNvY2tldE9wZW4pXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLm9uU29ja2V0TWVzc2FnZSlcblxuICAgIHRoaXMuY29tbWFuZHMgPSB7fVxuICAgIHRoaXMuY29tbWFuZHNDb3VudCA9IDBcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIGF3YWl0IHRoaXMud3MuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KGRhdGE6IGFueSkgPT4gdm9pZH0gY2FsbGJhY2sgSGFuZGxlciBmb3IgaW5jb21pbmcgY29tbWFuZHNcbiAgICovXG4gIG9uQ29tbWFuZChjYWxsYmFjaykge1xuICAgIHRoaXMub25Db21tYW5kQ2FsbGJhY2sgPSBjYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFdlYlNvY2tldCBlcnJvciBldmVudFxuICAgKi9cbiAgb25Tb2NrZXRFcnJvciA9IChldmVudCkgPT4ge1xuICAgIGxvZ2dlci5lcnJvcigoKSA9PiBbXCJvblNvY2tldEVycm9yXCIsIGV2ZW50XSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge01lc3NhZ2VFdmVudH0gZXZlbnQgV2ViU29ja2V0IG1lc3NhZ2UgZXZlbnRcbiAgICovXG4gIG9uU29ja2V0TWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpXG5cbiAgICBsb2dnZXIubG9nKCgpID0+IFtcIkNsaWVudDo6Q29ubmVjdGlvbnM6OldlYlNvY2tldCBvblNvY2tldE1lc3NhZ2VcIiwgZGF0YV0pXG5cbiAgICBpZiAoIXRoaXMub25Db21tYW5kQ2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG9uQ29tbWFuZCBjYWxsYmFjayBzZXQsIGlnbm9yaW5nIG1lc3NhZ2VcIilcbiAgICB9XG5cbiAgICB0aGlzLm9uQ29tbWFuZENhbGxiYWNrKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgV2ViU29ja2V0IG9wZW4gZXZlbnRcbiAgICovXG4gIG9uU29ja2V0T3BlbiA9IChldmVudCkgPT4ge1xuICAgIGxvZ2dlci5sb2coKCkgPT4gW1wib25Tb2NrZXRPcGVuXCIsIGV2ZW50XSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGRhdGEgUGF5bG9hZCB0byBzZW5kXG4gICAqL1xuICBzZW5kKGRhdGEpIHtcbiAgICBjb25zdCBzZW5kRGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgbG9nZ2VyLmxvZygoKSA9PiBbXCJTZW5kaW5nXCIsIHNlbmREYXRhXSlcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLndzLnNlbmQoc2VuZERhdGEpXG4gIH1cblxuICB3YWl0Rm9yT3BlbmVkID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsIHJlc29sdmUpXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KVxuICB9KVxufVxuIl19
@@ -1,9 +1,13 @@
1
+ /**
2
+ * @typedef {{returnReference?: boolean, returnResult?: boolean}} ReturnOptions
3
+ * @typedef {ReturnOptions & {returnResult?: false}} ReturnReferenceOptions
4
+ * @typedef {ReturnOptions & {returnResult: true, returnReference?: false}} ReturnResultOptions
5
+ */
1
6
  export default class Client {
2
7
  /**
3
8
  * Creates a new Scoundrel Client
4
- *
5
9
  * @param {any} backend The backend connection (e.g., WebSocket)
6
- * @param {{enableServerControl?: boolean}} [options]
10
+ * @param {{enableServerControl?: boolean}} [options] Client configuration options
7
11
  */
8
12
  constructor(backend: any, options?: {
9
13
  enableServerControl?: boolean;
@@ -30,65 +34,103 @@ export default class Client {
30
34
  close(): Promise<void>;
31
35
  /**
32
36
  * Calls a method on a reference and returns the result directly
33
- *
34
- * @param {number} referenceId
35
- * @param {string} methodName
36
- * @param {...any} args
37
- * @returns {Promise<any>}
37
+ * @overload
38
+ * @param {number} referenceId Reference identifier
39
+ * @param {string} methodName Method name to invoke
40
+ * @param {...any} args Arguments to pass to the method
41
+ * @returns {Promise<any>} Result from the method call
38
42
  */
39
43
  callMethodOnReference(referenceId: number, methodName: string, ...args: any[]): Promise<any>;
40
44
  /**
41
45
  * Calls a method on a reference and returns a new reference
42
- *
43
- * @param {number} referenceId
44
- * @param {string} methodName
45
- * @param {...any} args
46
- * @returns {Promise<Reference>}
46
+ * @overload
47
+ * @param {number} referenceId Reference identifier
48
+ * @param {string} methodName Method name to invoke
49
+ * @param {ReturnReferenceOptions} options Options for the call
50
+ * @param {...any} args Arguments to pass to the method
51
+ * @returns {Promise<Reference>} Reference to the returned value
52
+ */
53
+ callMethodOnReference(referenceId: number, methodName: string, options: ReturnReferenceOptions, ...args: any[]): Promise<Reference>;
54
+ /**
55
+ * Calls a method on a reference and returns the result directly
56
+ * @overload
57
+ * @param {number} referenceId Reference identifier
58
+ * @param {string} methodName Method name to invoke
59
+ * @param {ReturnResultOptions} options Options for the call
60
+ * @param {...any} args Arguments to pass to the method
61
+ * @returns {Promise<any>} Result from the method call
62
+ */
63
+ callMethodOnReference(referenceId: number, methodName: string, options: ReturnResultOptions, ...args: any[]): Promise<any>;
64
+ /**
65
+ * Calls a method on a reference and returns a new reference
66
+ * @param {number} referenceId Reference identifier
67
+ * @param {string} methodName Method name to invoke
68
+ * @param {...any} args Arguments to pass to the method
69
+ * @returns {Promise<Reference>} Reference to the return value
47
70
  */
48
71
  callMethodOnReferenceWithReference(referenceId: number, methodName: string, ...args: any[]): Promise<Reference>;
72
+ /**
73
+ * Evaluates a string and returns a reference or result
74
+ * @overload
75
+ * @param {string} evalString Code to evaluate
76
+ * @returns {Promise<Reference>} Reference to the evaluated value
77
+ */
78
+ eval(evalString: string): Promise<Reference>;
79
+ /**
80
+ * Evaluates a string and returns a reference or result
81
+ * @overload
82
+ * @param {ReturnReferenceOptions} options Eval options
83
+ * @param {string} evalString Code to evaluate
84
+ * @returns {Promise<Reference>} Reference to the evaluated value
85
+ */
86
+ eval(options: ReturnReferenceOptions, evalString: string): Promise<Reference>;
87
+ /**
88
+ * Evaluates a string and returns a reference or result
89
+ * @overload
90
+ * @param {ReturnResultOptions} options Eval options
91
+ * @param {string} evalString Code to evaluate
92
+ * @returns {Promise<any>} Evaluated result
93
+ */
94
+ eval(options: ReturnResultOptions, evalString: string): Promise<any>;
49
95
  /**
50
96
  * Evaluates a string and returns a new reference
51
- *
52
- * @param {string} evalString
53
- * @returns {Promise<Reference>}
97
+ * @param {string} evalString Code to evaluate
98
+ * @returns {Promise<Reference>} Reference to the evaluated value
54
99
  */
55
100
  evalWithReference(evalString: string): Promise<Reference>;
56
101
  /**
57
102
  * Imports a module and returns a reference to it
58
- *
59
- * @param {string} importName
60
- * @returns {Promise<Reference>}
103
+ * @param {string} importName Module name to import
104
+ * @returns {Promise<Reference>} Reference to the module
61
105
  */
62
106
  import(importName: string): Promise<Reference>;
63
107
  /**
64
108
  * Gets a registered object by name
65
- *
66
- * @param {string} objectName
67
- * @returns {Promise<Reference>}
109
+ * @param {string} objectName Registered object name
110
+ * @returns {Promise<Reference>} Reference to the object
68
111
  */
69
112
  getObject(objectName: string): Promise<Reference>;
70
113
  /**
71
114
  * Spawns a new reference to an object
72
- *
73
- * @param {string} className
74
- * @param {...any} args
75
- * @returns {Promise<Reference>}
115
+ * @param {string} className Class name to construct
116
+ * @param {...any} args Constructor arguments
117
+ * @returns {Promise<Reference>} Reference to the new instance
76
118
  */
77
119
  newObjectWithReference(className: string, ...args: any[]): Promise<Reference>;
78
120
  /**
79
121
  * Checks if the input is a plain object
80
- * @param {any} input
81
- * @returns {boolean}
122
+ * @param {any} input Value to inspect
123
+ * @returns {boolean} True when the value is a plain object
82
124
  */
83
125
  isPlainObject(input: any): boolean;
84
126
  /**
85
127
  * Handles an incoming command from the backend
86
- * @param {object} args
87
- * @param {string} args.command
88
- * @param {number} args.command_id
89
- * @param {any} args.data
90
- * @param {string} [args.error]
91
- * @param {string} [args.errorStack]
128
+ * @param {object} args Command payload
129
+ * @param {string} args.command Command name
130
+ * @param {number} args.command_id Command identifier
131
+ * @param {any} args.data Command data
132
+ * @param {string} [args.error] Error message from the backend
133
+ * @param {string} [args.errorStack] Error stack from the backend
92
134
  */
93
135
  onCommand: ({ command, command_id: commandID, data, error, errorStack, ...restArgs }: {
94
136
  command: string;
@@ -99,95 +141,106 @@ export default class Client {
99
141
  }) => void;
100
142
  /**
101
143
  * Parases an argument for sending to the server
102
- *
103
- * @param {any} arg
104
- * @returns {any}
144
+ * @param {any} arg Argument to serialize for transport
145
+ * @returns {any} Serialized argument payload
105
146
  */
106
147
  parseArg(arg: any): any;
107
148
  /**
108
149
  * Reads an attribute on a reference and returns a new reference
109
- *
110
- * @param {number} referenceId
111
- * @param {string} attributeName
112
- * @returns {Promise<Reference>}
150
+ * @param {number} referenceId Reference identifier
151
+ * @param {string} attributeName Attribute name to read
152
+ * @returns {Promise<Reference>} Reference to the attribute value
113
153
  */
114
154
  readAttributeOnReferenceWithReference(referenceId: number, attributeName: string): Promise<Reference>;
115
155
  /**
116
156
  * Reads an attribute on a reference and returns the result directly
117
- *
118
- * @param {number} referenceId
119
- * @param {string} attributeName
120
- * @returns {Promise<any>}
157
+ * @param {number} referenceId Reference identifier
158
+ * @param {string} attributeName Attribute name to read
159
+ * @returns {Promise<any>} Attribute value
121
160
  */
122
161
  readAttributeOnReference(referenceId: number, attributeName: string): Promise<any>;
123
162
  /**
124
163
  * Registers a class by name
125
- *
126
- * @param {string} className
127
- * @param {any} classInstance
164
+ * @param {string} className Class name to register
165
+ * @param {any} classInstance Class constructor or instance
128
166
  */
129
167
  registerClass(className: string, classInstance: any): void;
168
+ /**
169
+ * Unregisters a class by name
170
+ * @param {string} className Class name to remove
171
+ */
172
+ unregisterClass(className: string): void;
130
173
  /**
131
174
  * Gets a registered class by name
132
- *
133
- * @param {string} className
134
- * @returns {any}
175
+ * @param {string} className Class name to look up
176
+ * @returns {any} Registered class or undefined
135
177
  */
136
178
  _getRegisteredClass(className: string): any;
137
179
  /**
138
180
  * Gets a registered class by name
139
- *
140
- * @param {string} className
141
- * @returns {any}
181
+ * @param {string} className Class name to look up
182
+ * @returns {any} Registered class or undefined
142
183
  */
143
184
  getClass(className: string): any;
144
185
  /**
145
186
  * Registers an object by name
146
- *
147
- * @param {string} objectName
148
- * @param {any} objectInstance
187
+ * @param {string} objectName Object name to register
188
+ * @param {any} objectInstance Object instance
149
189
  */
150
190
  registerObject(objectName: string, objectInstance: any): void;
191
+ /**
192
+ * Unregisters an object by name
193
+ * @param {string} objectName Object name to remove
194
+ */
195
+ unregisterObject(objectName: string): void;
151
196
  /**
152
197
  * Gets a registered object by name
153
- *
154
- * @param {string} objectName
155
- * @returns {any}
198
+ * @param {string} objectName Object name to look up
199
+ * @returns {any} Registered object or undefined
156
200
  */
157
201
  _getRegisteredObject(objectName: string): any;
158
202
  /**
159
203
  * Responds to a command from the backend
160
- * @param {number} commandId
161
- * @param {any} data
204
+ * @param {number} commandId Command identifier
205
+ * @param {any} data Response payload
162
206
  */
163
207
  respondToCommand(commandId: number, data: any): void;
164
208
  /**
165
209
  * Sends a command to the backend and returns a promise that resolves with the response
166
- * @param {string} command
167
- * @param {any} data
168
- * @returns {Promise<any>}
210
+ * @param {string} command Command name
211
+ * @param {any} data Command payload
212
+ * @returns {Promise<any>} Response from the backend
169
213
  */
170
214
  sendCommand(command: string, data: any): Promise<any>;
171
215
  /**
172
216
  * Sends data to the backend
173
- * @param {any} data
217
+ * @param {any} data Payload to send
174
218
  */
175
219
  send(data: any): void;
176
220
  /**
177
221
  * Serializes a reference and returns the result directly
178
- *
179
- * @param {number} referenceId
180
- * @returns {Promise<any>}
222
+ * @param {number} referenceId Reference identifier
223
+ * @returns {Promise<any>} Parsed JSON representation
181
224
  */
182
225
  serializeReference(referenceId: number): Promise<any>;
183
226
  /**
184
227
  * Spawns a new reference to an object
185
- *
186
- * @param {string} id
187
- * @returns {Reference}
228
+ * @param {string} id Reference identifier
229
+ * @returns {Reference} Reference instance
188
230
  */
189
231
  spawnReference(id: string): Reference;
190
232
  enableServerControl(): void;
191
233
  }
234
+ export type ReturnOptions = {
235
+ returnReference?: boolean;
236
+ returnResult?: boolean;
237
+ };
238
+ export type ReturnReferenceOptions = ReturnOptions & {
239
+ returnResult?: false;
240
+ };
241
+ export type ReturnResultOptions = ReturnOptions & {
242
+ returnResult: true;
243
+ returnReference?: false;
244
+ };
192
245
  import Reference from "./reference.js";
193
246
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"AAUA;IACE;;;;;OAKG;IACH,qBAHW,GAAG,YACH;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAC,EA2BzC;IAxBC,aAAsB;IAGtB,kCAAkC;IAClC,kBADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACJ;IAC1B,qBAA0B;IAC1B,8BAA8B;IAE9B,kCAAkC;IAClC,UADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAElB,kCAAkC;IAClC,UADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAElB,wCAAwC;IACxC,YADW,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAChB;IAEpB,kCAAkC;IAClC,SADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACb;IAEjB,qBAAqB;IAErB,sBAAsB;IACtB,sBADW,OAAO,CAC8C;IAGlE;;OAEG;IACH,uBAEC;IAED;;;;;;;OAOG;IACH,mCALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,GAAG,CAAC,CAWxB;IAED;;;;;;;OAOG;IACH,gDALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;;OAKG;IACH,8BAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;;OAKG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;;;OAMG;IACH,kCAJW,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;OAIG;IACH,qBAHW,GAAG,GACD,OAAO,CAQnB;IAED;;;;;;;;OAQG;IACH,YAAa,0EANV;QAAqB,OAAO,EAApB,MAAM;QACO,UAAU,EAAvB,MAAM;QACI,IAAI,EAAd,GAAG;QACW,KAAK,GAAnB,MAAM;QACQ,UAAU,GAAxB,MAAM;KAEkE,UAuPlF;IAED;;;;;OAKG;IACH,cAHW,GAAG,GACD,GAAG,CAwBf;IAED;;;;;;OAMG;IACH,mDAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAW9B;IAED;;;;;;OAMG;IACH,sCAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CASxB;IAED;;;;;OAKG;IACH,yBAHW,MAAM,iBACN,GAAG,QAMb;IAED;;;;;OAKG;IACH,+BAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;;OAKG;IACH,2BAHW,MAAM,kBACN,GAAG,QAMb;IAED;;;;;OAKG;IACH,iCAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;OAIG;IACH,4BAHW,MAAM,QACN,GAAG,QAIb;IAED;;;;;OAKG;IACH,qBAJW,MAAM,QACN,GAAG,GACD,OAAO,CAAC,GAAG,CAAC,CAkBxB;IAED;;;OAGG;IACH,WAFW,GAAG,QAIb;IAED;;;;;OAKG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAMxB;IAED;;;;;OAKG;IACH,mBAHW,MAAM,GACJ,SAAS,CAQrB;IAED,4BAEC;CACF;sBApnBqB,gBAAgB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"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"}