scoundrel-remote-eval 1.0.20 → 1.0.22
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 +93 -25
- package/build/client/index.d.ts +112 -35
- package/build/client/index.d.ts.map +1 -1
- package/build/client/index.js +301 -94
- package/build/client/reference-proxy.d.ts +16 -1
- package/build/client/reference-proxy.d.ts.map +1 -1
- package/build/client/reference-proxy.js +36 -5
- package/build/client/reference.d.ts +20 -32
- package/build/client/reference.d.ts.map +1 -1
- package/build/client/reference.js +28 -36
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,9 +24,8 @@ await clientWebSocket.waitForOpened()
|
|
|
24
24
|
const client = new Client(clientWebSocket)
|
|
25
25
|
|
|
26
26
|
const math = await client.import("math")
|
|
27
|
-
const pi = await math.
|
|
28
|
-
const
|
|
29
|
-
const result = await cosOfPi.serialize()
|
|
27
|
+
const pi = await math.pi
|
|
28
|
+
const result = await (await math.cos(pi)).__serialize()
|
|
30
29
|
|
|
31
30
|
expect(result).toEqual(-1)
|
|
32
31
|
|
|
@@ -34,29 +33,45 @@ client.close()
|
|
|
34
33
|
pythonWebSocketRunner.close()
|
|
35
34
|
```
|
|
36
35
|
|
|
37
|
-
## Client and
|
|
36
|
+
## Client and proxy examples
|
|
38
37
|
|
|
39
38
|
Create remote objects, call methods, and fetch attributes:
|
|
40
39
|
|
|
41
40
|
```js
|
|
42
|
-
const
|
|
43
|
-
await
|
|
44
|
-
|
|
41
|
+
const array = await client.newObject("Array")
|
|
42
|
+
await array.push("one")
|
|
43
|
+
await array.push("two")
|
|
44
|
+
const joined = await (await array.join(", ")).__serialize()
|
|
45
45
|
expect(joined).toEqual("one, two")
|
|
46
46
|
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
expect(length).toEqual(3)
|
|
47
|
+
const length = await array.length
|
|
48
|
+
expect(length).toEqual(2)
|
|
50
49
|
```
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
`newObject`, `import`, and `getObject` return proxies by default; use `newObjectReference`/`newObjectResult`, `importReference`/`importResult`, and `getObjectReference`/`getObjectResult` when you need a `Reference` or serialized result.
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
const arrayRef = await client.newObjectReference("Array")
|
|
55
|
+
const emptyArray = await client.newObjectResult("Array")
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Read attributes directly or as proxies:
|
|
53
59
|
|
|
54
60
|
```js
|
|
55
61
|
const math = await client.import("math")
|
|
56
|
-
const
|
|
62
|
+
const pi = await math.pi
|
|
63
|
+
const e = await math.E
|
|
64
|
+
expect([pi, e].every((value) => typeof value === "number")).toEqual(true)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Reference variant (when you need to serialize):
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
const math = await client.importReference("math")
|
|
71
|
+
const piRef = await math.readAttributeReference("pi")
|
|
57
72
|
const pi = await piRef.serialize()
|
|
58
73
|
|
|
59
|
-
const e = await math.
|
|
74
|
+
const e = await math.readAttributeResult("E")
|
|
60
75
|
expect([pi, e].every((value) => typeof value === "number")).toEqual(true)
|
|
61
76
|
```
|
|
62
77
|
|
|
@@ -65,13 +80,22 @@ Fetch globally available or registered objects:
|
|
|
65
80
|
```js
|
|
66
81
|
client.registerObject("config", {mode: "test"})
|
|
67
82
|
|
|
68
|
-
const
|
|
69
|
-
const config = await
|
|
83
|
+
const configProxy = await client.getObject("config")
|
|
84
|
+
const config = await configProxy.__serialize()
|
|
70
85
|
expect(config).toEqual({mode: "test"})
|
|
71
86
|
|
|
72
87
|
client.unregisterObject("config")
|
|
73
88
|
```
|
|
74
89
|
|
|
90
|
+
Reference/result variants:
|
|
91
|
+
|
|
92
|
+
```js
|
|
93
|
+
const configRef = await client.getObjectReference("config")
|
|
94
|
+
const config = await configRef.serialize()
|
|
95
|
+
|
|
96
|
+
const configResult = await client.getObjectResult("config")
|
|
97
|
+
```
|
|
98
|
+
|
|
75
99
|
## Serialization
|
|
76
100
|
|
|
77
101
|
`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.
|
|
@@ -88,7 +112,7 @@ Application frames, including paths that contain `/internal/` within your projec
|
|
|
88
112
|
|
|
89
113
|
## Calling static methods on classes
|
|
90
114
|
|
|
91
|
-
You can ask for a
|
|
115
|
+
You can ask for a proxy to a class (either globally available or registered with `registerClass`) and call its static methods:
|
|
92
116
|
|
|
93
117
|
```js
|
|
94
118
|
class TestMath {
|
|
@@ -98,13 +122,54 @@ class TestMath {
|
|
|
98
122
|
// Make the class available for lookups (for example, on a server-controlled client)
|
|
99
123
|
client.registerClass("TestMath", TestMath)
|
|
100
124
|
|
|
101
|
-
// Later, fetch the class
|
|
102
|
-
const
|
|
103
|
-
const sum = await
|
|
125
|
+
// Later, fetch the class proxy and call its static method
|
|
126
|
+
const testMathProxy = await client.getObject("TestMath")
|
|
127
|
+
const sum = await (await testMathProxy.add(2, 3)).__serialize()
|
|
104
128
|
|
|
105
129
|
expect(sum).toEqual(5)
|
|
106
130
|
```
|
|
107
131
|
|
|
132
|
+
## Manual proxy wrapping (optional)
|
|
133
|
+
|
|
134
|
+
The library returns proxies by default. If you need to wrap an existing `Reference`, you can use the helper directly:
|
|
135
|
+
|
|
136
|
+
```js
|
|
137
|
+
import referenceProxy from "scoundrel-remote-eval/src/client/reference-proxy.js"
|
|
138
|
+
|
|
139
|
+
const arrayRef = await client.newObjectReference("Array")
|
|
140
|
+
const array = referenceProxy(arrayRef)
|
|
141
|
+
|
|
142
|
+
await array.push("one")
|
|
143
|
+
await array.push("two")
|
|
144
|
+
const firstValue = await array[0]
|
|
145
|
+
const length = await array.length
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Explicit return helpers
|
|
149
|
+
|
|
150
|
+
Use the explicit helpers when you need a definite return type:
|
|
151
|
+
|
|
152
|
+
- `callMethod(...)`: proxy
|
|
153
|
+
- `callMethodReference(...)`: `Reference`
|
|
154
|
+
- `callMethodResult(...)`: raw result
|
|
155
|
+
- `readAttribute(...)`: proxy
|
|
156
|
+
- `readAttributeReference(...)`: `Reference`
|
|
157
|
+
- `readAttributeResult(...)`: raw result
|
|
158
|
+
|
|
159
|
+
Examples:
|
|
160
|
+
|
|
161
|
+
```js
|
|
162
|
+
const array = await client.newObject("Array")
|
|
163
|
+
const lengthProxy = await array.push("three")
|
|
164
|
+
const length = await lengthProxy.__serialize()
|
|
165
|
+
|
|
166
|
+
const arrayRef = await client.newObjectReference("Array")
|
|
167
|
+
const lengthRef = await arrayRef.callMethodReference("push", "four")
|
|
168
|
+
const lengthValue = await lengthRef.serialize()
|
|
169
|
+
|
|
170
|
+
const rawLength = await arrayRef.callMethodResult("push", "five")
|
|
171
|
+
```
|
|
172
|
+
|
|
108
173
|
## Server-to-client control
|
|
109
174
|
|
|
110
175
|
By default, a client refuses server-initiated commands. Enable it by passing `enableServerControl: true` when constructing the client:
|
|
@@ -145,8 +210,8 @@ client.registerClass("TestGreeter", TestGreeter)
|
|
|
145
210
|
client.registerObject("testSettings", {prefix: "Hello"})
|
|
146
211
|
|
|
147
212
|
const serverClient = server.getClients()[0] // from your ScoundrelServer instance
|
|
148
|
-
const
|
|
149
|
-
const greeting = await
|
|
213
|
+
const greetingProxy = await serverClient.eval("(() => { const greeter = new TestGreeter(testSettings.prefix); return greeter.greet('World') })()")
|
|
214
|
+
const greeting = await greetingProxy.__serialize()
|
|
150
215
|
|
|
151
216
|
expect(greeting).toEqual("Hello World")
|
|
152
217
|
```
|
|
@@ -158,15 +223,18 @@ client.unregisterClass("TestGreeter")
|
|
|
158
223
|
client.unregisterObject("testSettings")
|
|
159
224
|
```
|
|
160
225
|
|
|
161
|
-
`eval`
|
|
226
|
+
`eval` returns a proxy by default, but you can request the raw result or a reference:
|
|
162
227
|
|
|
163
228
|
```js
|
|
164
|
-
const
|
|
229
|
+
const proxyResult = await serverClient.eval("(() => ({value: 42}))()")
|
|
230
|
+
const value = await proxyResult.__serialize()
|
|
231
|
+
|
|
232
|
+
const result = await serverClient.evalResult("(() => 1 + 1)()")
|
|
165
233
|
expect(result).toEqual(2)
|
|
166
234
|
```
|
|
167
235
|
|
|
168
|
-
Use `
|
|
236
|
+
Use `evalReference` if you need a reference:
|
|
169
237
|
|
|
170
238
|
```js
|
|
171
|
-
const greetingRef = await serverClient.
|
|
239
|
+
const greetingRef = await serverClient.evalReference("(() => { return 'Hello' })()")
|
|
172
240
|
```
|
package/build/client/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
/** @typedef {import("./reference-proxy.js").Proxy} Proxy */
|
|
1
2
|
/**
|
|
2
|
-
* @typedef {{
|
|
3
|
-
* @typedef {ReturnOptions & {
|
|
4
|
-
* @typedef {ReturnOptions & {
|
|
3
|
+
* @typedef {{reference?: boolean, result?: boolean, proxy?: boolean}} ReturnOptions
|
|
4
|
+
* @typedef {ReturnOptions & {result?: false}} ReturnReferenceOptions
|
|
5
|
+
* @typedef {ReturnOptions & {result: true, reference?: false}} ReturnResultOptions
|
|
5
6
|
*/
|
|
6
7
|
export default class Client {
|
|
7
8
|
/**
|
|
@@ -48,9 +49,9 @@ export default class Client {
|
|
|
48
49
|
* @param {string} methodName Method name to invoke
|
|
49
50
|
* @param {ReturnReferenceOptions} options Options for the call
|
|
50
51
|
* @param {...any} args Arguments to pass to the method
|
|
51
|
-
* @returns {Promise<Reference>} Reference to the returned value
|
|
52
|
+
* @returns {Promise<Reference | Proxy>} Reference or proxy to the returned value
|
|
52
53
|
*/
|
|
53
|
-
callMethodOnReference(referenceId: number, methodName: string, options: ReturnReferenceOptions, ...args: any[]): Promise<Reference>;
|
|
54
|
+
callMethodOnReference(referenceId: number, methodName: string, options: ReturnReferenceOptions, ...args: any[]): Promise<Reference | Proxy>;
|
|
54
55
|
/**
|
|
55
56
|
* Calls a method on a reference and returns the result directly
|
|
56
57
|
* @overload
|
|
@@ -70,53 +71,80 @@ export default class Client {
|
|
|
70
71
|
*/
|
|
71
72
|
callMethodOnReferenceWithReference(referenceId: number, methodName: string, ...args: any[]): Promise<Reference>;
|
|
72
73
|
/**
|
|
73
|
-
* Evaluates a string and returns a
|
|
74
|
-
* @overload
|
|
74
|
+
* Evaluates a string and returns a proxy
|
|
75
75
|
* @param {string} evalString Code to evaluate
|
|
76
|
-
* @returns {Promise<
|
|
76
|
+
* @returns {Promise<Proxy>} Proxy to the evaluated value
|
|
77
77
|
*/
|
|
78
|
-
eval(evalString: string): Promise<
|
|
78
|
+
eval(evalString: string): Promise<Proxy>;
|
|
79
79
|
/**
|
|
80
|
-
* Evaluates a string and returns a reference
|
|
81
|
-
* @overload
|
|
82
|
-
* @param {ReturnReferenceOptions} options Eval options
|
|
80
|
+
* Evaluates a string and returns a reference
|
|
83
81
|
* @param {string} evalString Code to evaluate
|
|
84
82
|
* @returns {Promise<Reference>} Reference to the evaluated value
|
|
85
83
|
*/
|
|
86
|
-
|
|
84
|
+
evalReference(evalString: string): Promise<Reference>;
|
|
87
85
|
/**
|
|
88
|
-
* Evaluates a string and returns
|
|
89
|
-
* @overload
|
|
90
|
-
* @param {ReturnResultOptions} options Eval options
|
|
86
|
+
* Evaluates a string and returns the result directly
|
|
91
87
|
* @param {string} evalString Code to evaluate
|
|
92
88
|
* @returns {Promise<any>} Evaluated result
|
|
93
89
|
*/
|
|
94
|
-
|
|
90
|
+
evalResult(evalString: string): Promise<any>;
|
|
95
91
|
/**
|
|
96
|
-
*
|
|
97
|
-
* @param {string}
|
|
98
|
-
* @returns {Promise<
|
|
92
|
+
* Imports a module and returns a proxy to it
|
|
93
|
+
* @param {string} importName Module name to import
|
|
94
|
+
* @returns {Promise<Proxy>} Proxy to the module
|
|
99
95
|
*/
|
|
100
|
-
|
|
96
|
+
import(importName: string): Promise<Proxy>;
|
|
101
97
|
/**
|
|
102
98
|
* Imports a module and returns a reference to it
|
|
103
99
|
* @param {string} importName Module name to import
|
|
104
100
|
* @returns {Promise<Reference>} Reference to the module
|
|
105
101
|
*/
|
|
106
|
-
|
|
102
|
+
importReference(importName: string): Promise<Reference>;
|
|
107
103
|
/**
|
|
108
|
-
*
|
|
104
|
+
* Imports a module and returns the serialized result
|
|
105
|
+
* @param {string} importName Module name to import
|
|
106
|
+
* @returns {Promise<any>} Serialized result for the module
|
|
107
|
+
*/
|
|
108
|
+
importResult(importName: string): Promise<any>;
|
|
109
|
+
/**
|
|
110
|
+
* Gets a registered object by name and returns a proxy
|
|
111
|
+
* @param {string} objectName Registered object name
|
|
112
|
+
* @returns {Promise<Proxy>} Proxy to the object
|
|
113
|
+
*/
|
|
114
|
+
getObject(objectName: string): Promise<Proxy>;
|
|
115
|
+
/**
|
|
116
|
+
* Gets a registered object by name and returns a reference
|
|
109
117
|
* @param {string} objectName Registered object name
|
|
110
118
|
* @returns {Promise<Reference>} Reference to the object
|
|
111
119
|
*/
|
|
112
|
-
|
|
120
|
+
getObjectReference(objectName: string): Promise<Reference>;
|
|
113
121
|
/**
|
|
114
|
-
*
|
|
122
|
+
* Gets a registered object by name and returns the serialized result
|
|
123
|
+
* @param {string} objectName Registered object name
|
|
124
|
+
* @returns {Promise<any>} Serialized result for the object
|
|
125
|
+
*/
|
|
126
|
+
getObjectResult(objectName: string): Promise<any>;
|
|
127
|
+
/**
|
|
128
|
+
* Spawns a new reference to an object and returns a proxy
|
|
129
|
+
* @param {string} className Class name to construct
|
|
130
|
+
* @param {...any} args Constructor arguments
|
|
131
|
+
* @returns {Promise<Proxy>} Proxy to the new instance
|
|
132
|
+
*/
|
|
133
|
+
newObject(className: string, ...args: any[]): Promise<Proxy>;
|
|
134
|
+
/**
|
|
135
|
+
* Spawns a new reference to an object and returns a reference
|
|
115
136
|
* @param {string} className Class name to construct
|
|
116
137
|
* @param {...any} args Constructor arguments
|
|
117
138
|
* @returns {Promise<Reference>} Reference to the new instance
|
|
118
139
|
*/
|
|
119
|
-
|
|
140
|
+
newObjectReference(className: string, ...args: any[]): Promise<Reference>;
|
|
141
|
+
/**
|
|
142
|
+
* Spawns a new reference to an object and returns the serialized result
|
|
143
|
+
* @param {string} className Class name to construct
|
|
144
|
+
* @param {...any} args Constructor arguments
|
|
145
|
+
* @returns {Promise<any>} Serialized result for the new instance
|
|
146
|
+
*/
|
|
147
|
+
newObjectResult(className: string, ...args: any[]): Promise<any>;
|
|
120
148
|
/**
|
|
121
149
|
* Checks if the input is a plain object
|
|
122
150
|
* @param {any} input Value to inspect
|
|
@@ -147,18 +175,65 @@ export default class Client {
|
|
|
147
175
|
parseArg(arg: any): any;
|
|
148
176
|
/**
|
|
149
177
|
* Reads an attribute on a reference and returns a new reference
|
|
178
|
+
* @overload
|
|
150
179
|
* @param {number} referenceId Reference identifier
|
|
151
|
-
* @param {string} attributeName Attribute name to read
|
|
180
|
+
* @param {string | number} attributeName Attribute name to read
|
|
152
181
|
* @returns {Promise<Reference>} Reference to the attribute value
|
|
153
182
|
*/
|
|
154
|
-
readAttributeOnReferenceWithReference(referenceId: number, attributeName: string): Promise<Reference>;
|
|
183
|
+
readAttributeOnReferenceWithReference(referenceId: number, attributeName: string | number): Promise<Reference>;
|
|
184
|
+
/**
|
|
185
|
+
* Reads an attribute on a reference and returns a new reference
|
|
186
|
+
* @overload
|
|
187
|
+
* @param {number} referenceId Reference identifier
|
|
188
|
+
* @param {string | number} attributeName Attribute name to read
|
|
189
|
+
* @param {ReturnReferenceOptions} optionsOrArg Options for the read
|
|
190
|
+
* @returns {Promise<Reference | Proxy>} Reference or proxy to the attribute value
|
|
191
|
+
*/
|
|
192
|
+
readAttributeOnReferenceWithReference(referenceId: number, attributeName: string | number, optionsOrArg: ReturnReferenceOptions): Promise<Reference | Proxy>;
|
|
193
|
+
/**
|
|
194
|
+
* Reads an attribute on a reference and returns the result directly
|
|
195
|
+
* @overload
|
|
196
|
+
* @param {number} referenceId Reference identifier
|
|
197
|
+
* @param {string | number} attributeName Attribute name to read
|
|
198
|
+
* @param {ReturnResultOptions} optionsOrArg Options for the read
|
|
199
|
+
* @returns {Promise<any>} Attribute value
|
|
200
|
+
*/
|
|
201
|
+
readAttributeOnReferenceWithReference(referenceId: number, attributeName: string | number, optionsOrArg: ReturnResultOptions): Promise<any>;
|
|
155
202
|
/**
|
|
156
203
|
* Reads an attribute on a reference and returns the result directly
|
|
204
|
+
* @overload
|
|
205
|
+
* @param {number} referenceId Reference identifier
|
|
206
|
+
* @param {string | number} attributeName Attribute name to read
|
|
207
|
+
* @returns {Promise<any>} Attribute value
|
|
208
|
+
*/
|
|
209
|
+
readAttributeOnReference(referenceId: number, attributeName: string | number): Promise<any>;
|
|
210
|
+
/**
|
|
211
|
+
* Reads an attribute on a reference and returns a new reference
|
|
212
|
+
* @overload
|
|
213
|
+
* @param {number} referenceId Reference identifier
|
|
214
|
+
* @param {ReturnReferenceOptions} options Options for the read
|
|
215
|
+
* @param {string | number} attributeName Attribute name to read
|
|
216
|
+
* @returns {Promise<Reference | Proxy>} Reference or proxy to the attribute value
|
|
217
|
+
*/
|
|
218
|
+
readAttributeOnReference(referenceId: number, options: ReturnReferenceOptions, attributeName: string | number): Promise<Reference | Proxy>;
|
|
219
|
+
/**
|
|
220
|
+
* Reads an attribute on a reference and returns a result or reference
|
|
221
|
+
* @overload
|
|
222
|
+
* @param {number} referenceId Reference identifier
|
|
223
|
+
* @param {ReturnOptions} options Options for the read
|
|
224
|
+
* @param {string | number} attributeName Attribute name to read
|
|
225
|
+
* @returns {Promise<Reference | Proxy | any>} Attribute value or reference
|
|
226
|
+
*/
|
|
227
|
+
readAttributeOnReference(referenceId: number, options: ReturnOptions, attributeName: string | number): Promise<Reference | Proxy | any>;
|
|
228
|
+
/**
|
|
229
|
+
* Reads an attribute on a reference and returns the result directly
|
|
230
|
+
* @overload
|
|
157
231
|
* @param {number} referenceId Reference identifier
|
|
158
|
-
* @param {
|
|
232
|
+
* @param {ReturnResultOptions} options Options for the read
|
|
233
|
+
* @param {string | number} attributeName Attribute name to read
|
|
159
234
|
* @returns {Promise<any>} Attribute value
|
|
160
235
|
*/
|
|
161
|
-
readAttributeOnReference(referenceId: number, attributeName: string): Promise<any>;
|
|
236
|
+
readAttributeOnReference(referenceId: number, options: ReturnResultOptions, attributeName: string | number): Promise<any>;
|
|
162
237
|
/**
|
|
163
238
|
* Registers a class by name
|
|
164
239
|
* @param {string} className Class name to register
|
|
@@ -231,16 +306,18 @@ export default class Client {
|
|
|
231
306
|
spawnReference(id: string): Reference;
|
|
232
307
|
enableServerControl(): void;
|
|
233
308
|
}
|
|
309
|
+
export type Proxy = import("./reference-proxy.js").Proxy;
|
|
234
310
|
export type ReturnOptions = {
|
|
235
|
-
|
|
236
|
-
|
|
311
|
+
reference?: boolean;
|
|
312
|
+
result?: boolean;
|
|
313
|
+
proxy?: boolean;
|
|
237
314
|
};
|
|
238
315
|
export type ReturnReferenceOptions = ReturnOptions & {
|
|
239
|
-
|
|
316
|
+
result?: false;
|
|
240
317
|
};
|
|
241
318
|
export type ReturnResultOptions = ReturnOptions & {
|
|
242
|
-
|
|
243
|
-
|
|
319
|
+
result: true;
|
|
320
|
+
reference?: false;
|
|
244
321
|
};
|
|
245
322
|
import Reference from "./reference.js";
|
|
246
323
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"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"}
|