scoundrel-remote-eval 1.0.19 → 1.0.21

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
@@ -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.readAttributeWithReference("pi")
28
- const cosOfPi = await math.callMethodWithReference("cos", pi)
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,6 +33,69 @@ client.close()
34
33
  pythonWebSocketRunner.close()
35
34
  ```
36
35
 
36
+ ## Client and proxy examples
37
+
38
+ Create remote objects, call methods, and fetch attributes:
39
+
40
+ ```js
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
+ expect(joined).toEqual("one, two")
46
+
47
+ const length = await array.length
48
+ expect(length).toEqual(2)
49
+ ```
50
+
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:
59
+
60
+ ```js
61
+ const math = await client.import("math")
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")
72
+ const pi = await piRef.serialize()
73
+
74
+ const e = await math.readAttributeResult("E")
75
+ expect([pi, e].every((value) => typeof value === "number")).toEqual(true)
76
+ ```
77
+
78
+ Fetch globally available or registered objects:
79
+
80
+ ```js
81
+ client.registerObject("config", {mode: "test"})
82
+
83
+ const configProxy = await client.getObject("config")
84
+ const config = await configProxy.__serialize()
85
+ expect(config).toEqual({mode: "test"})
86
+
87
+ client.unregisterObject("config")
88
+ ```
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
+
37
99
  ## Serialization
38
100
 
39
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.
@@ -50,7 +112,7 @@ Application frames, including paths that contain `/internal/` within your projec
50
112
 
51
113
  ## Calling static methods on classes
52
114
 
53
- You can ask for a reference to a class (either globally available or registered with `registerClass`) and call its static methods:
115
+ You can ask for a proxy to a class (either globally available or registered with `registerClass`) and call its static methods:
54
116
 
55
117
  ```js
56
118
  class TestMath {
@@ -60,13 +122,54 @@ class TestMath {
60
122
  // Make the class available for lookups (for example, on a server-controlled client)
61
123
  client.registerClass("TestMath", TestMath)
62
124
 
63
- // Later, fetch the class reference and call its static method
64
- const testMath = await client.getObject("TestMath")
65
- const sum = await testMath.callMethod("add", 2, 3)
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()
66
128
 
67
129
  expect(sum).toEqual(5)
68
130
  ```
69
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
+
70
173
  ## Server-to-client control
71
174
 
72
175
  By default, a client refuses server-initiated commands. Enable it by passing `enableServerControl: true` when constructing the client:
@@ -82,7 +185,13 @@ const client = new Client(clientWebSocket, {enableServerControl: false})
82
185
  // equivalent to: new Client(clientWebSocket)
83
186
  ```
84
187
 
85
- Registered objects and classes are available inside `evalWithReference`:
188
+ You can also enable it after construction:
189
+
190
+ ```js
191
+ client.enableServerControl()
192
+ ```
193
+
194
+ Registered objects and classes are available inside `eval`:
86
195
 
87
196
  ```js
88
197
  const client = new Client(clientWebSocket, {enableServerControl: true})
@@ -101,15 +210,31 @@ client.registerClass("TestGreeter", TestGreeter)
101
210
  client.registerObject("testSettings", {prefix: "Hello"})
102
211
 
103
212
  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') })()")
105
- const greeting = await greetingRef.serialize()
213
+ const greetingProxy = await serverClient.eval("(() => { const greeter = new TestGreeter(testSettings.prefix); return greeter.greet('World') })()")
214
+ const greeting = await greetingProxy.__serialize()
106
215
 
107
216
  expect(greeting).toEqual("Hello World")
108
217
  ```
109
218
 
110
- You can unregister classes or objects to remove them from server-side lookups and `evalWithReference` scope:
219
+ You can unregister classes or objects to remove them from server-side lookups and `eval` scope:
111
220
 
112
221
  ```js
113
222
  client.unregisterClass("TestGreeter")
114
223
  client.unregisterObject("testSettings")
115
224
  ```
225
+
226
+ `eval` returns a proxy by default, but you can request the raw result or a reference:
227
+
228
+ ```js
229
+ const proxyResult = await serverClient.eval("(() => ({value: 42}))()")
230
+ const value = await proxyResult.__serialize()
231
+
232
+ const result = await serverClient.evalResult("(() => 1 + 1)()")
233
+ expect(result).toEqual(2)
234
+ ```
235
+
236
+ Use `evalReference` if you need a reference:
237
+
238
+ ```js
239
+ const greetingRef = await serverClient.evalReference("(() => { return 'Hello' })()")
240
+ ```
@@ -1,3 +1,9 @@
1
+ /** @typedef {import("./reference-proxy.js").Proxy} Proxy */
2
+ /**
3
+ * @typedef {{reference?: boolean, result?: boolean, proxy?: boolean}} ReturnOptions
4
+ * @typedef {ReturnOptions & {result?: false}} ReturnReferenceOptions
5
+ * @typedef {ReturnOptions & {result: true, reference?: false}} ReturnResultOptions
6
+ */
1
7
  export default class Client {
2
8
  /**
3
9
  * Creates a new Scoundrel Client
@@ -29,12 +35,33 @@ export default class Client {
29
35
  close(): Promise<void>;
30
36
  /**
31
37
  * Calls a method on a reference and returns the result directly
38
+ * @overload
32
39
  * @param {number} referenceId Reference identifier
33
40
  * @param {string} methodName Method name to invoke
34
41
  * @param {...any} args Arguments to pass to the method
35
42
  * @returns {Promise<any>} Result from the method call
36
43
  */
37
44
  callMethodOnReference(referenceId: number, methodName: string, ...args: any[]): Promise<any>;
45
+ /**
46
+ * Calls a method on a reference and returns a new reference
47
+ * @overload
48
+ * @param {number} referenceId Reference identifier
49
+ * @param {string} methodName Method name to invoke
50
+ * @param {ReturnReferenceOptions} options Options for the call
51
+ * @param {...any} args Arguments to pass to the method
52
+ * @returns {Promise<Reference | Proxy>} Reference or proxy to the returned value
53
+ */
54
+ callMethodOnReference(referenceId: number, methodName: string, options: ReturnReferenceOptions, ...args: any[]): Promise<Reference | Proxy>;
55
+ /**
56
+ * Calls a method on a reference and returns the result directly
57
+ * @overload
58
+ * @param {number} referenceId Reference identifier
59
+ * @param {string} methodName Method name to invoke
60
+ * @param {ReturnResultOptions} options Options for the call
61
+ * @param {...any} args Arguments to pass to the method
62
+ * @returns {Promise<any>} Result from the method call
63
+ */
64
+ callMethodOnReference(referenceId: number, methodName: string, options: ReturnResultOptions, ...args: any[]): Promise<any>;
38
65
  /**
39
66
  * Calls a method on a reference and returns a new reference
40
67
  * @param {number} referenceId Reference identifier
@@ -44,30 +71,80 @@ export default class Client {
44
71
  */
45
72
  callMethodOnReferenceWithReference(referenceId: number, methodName: string, ...args: any[]): Promise<Reference>;
46
73
  /**
47
- * Evaluates a string and returns a new reference
74
+ * Evaluates a string and returns a proxy
75
+ * @param {string} evalString Code to evaluate
76
+ * @returns {Promise<Proxy>} Proxy to the evaluated value
77
+ */
78
+ eval(evalString: string): Promise<Proxy>;
79
+ /**
80
+ * Evaluates a string and returns a reference
48
81
  * @param {string} evalString Code to evaluate
49
82
  * @returns {Promise<Reference>} Reference to the evaluated value
50
83
  */
51
- evalWithReference(evalString: string): Promise<Reference>;
84
+ evalReference(evalString: string): Promise<Reference>;
85
+ /**
86
+ * Evaluates a string and returns the result directly
87
+ * @param {string} evalString Code to evaluate
88
+ * @returns {Promise<any>} Evaluated result
89
+ */
90
+ evalResult(evalString: string): Promise<any>;
91
+ /**
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
95
+ */
96
+ import(importName: string): Promise<Proxy>;
52
97
  /**
53
98
  * Imports a module and returns a reference to it
54
99
  * @param {string} importName Module name to import
55
100
  * @returns {Promise<Reference>} Reference to the module
56
101
  */
57
- import(importName: string): Promise<Reference>;
102
+ importReference(importName: string): Promise<Reference>;
58
103
  /**
59
- * Gets a registered object by name
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
60
117
  * @param {string} objectName Registered object name
61
118
  * @returns {Promise<Reference>} Reference to the object
62
119
  */
63
- getObject(objectName: string): Promise<Reference>;
120
+ getObjectReference(objectName: string): Promise<Reference>;
64
121
  /**
65
- * Spawns a new reference to an object
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
66
136
  * @param {string} className Class name to construct
67
137
  * @param {...any} args Constructor arguments
68
138
  * @returns {Promise<Reference>} Reference to the new instance
69
139
  */
70
- newObjectWithReference(className: string, ...args: any[]): Promise<Reference>;
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>;
71
148
  /**
72
149
  * Checks if the input is a plain object
73
150
  * @param {any} input Value to inspect
@@ -98,18 +175,65 @@ export default class Client {
98
175
  parseArg(arg: any): any;
99
176
  /**
100
177
  * Reads an attribute on a reference and returns a new reference
178
+ * @overload
101
179
  * @param {number} referenceId Reference identifier
102
- * @param {string} attributeName Attribute name to read
180
+ * @param {string | number} attributeName Attribute name to read
103
181
  * @returns {Promise<Reference>} Reference to the attribute value
104
182
  */
105
- 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>;
202
+ /**
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>;
106
228
  /**
107
229
  * Reads an attribute on a reference and returns the result directly
230
+ * @overload
108
231
  * @param {number} referenceId Reference identifier
109
- * @param {string} attributeName Attribute name to read
232
+ * @param {ReturnResultOptions} options Options for the read
233
+ * @param {string | number} attributeName Attribute name to read
110
234
  * @returns {Promise<any>} Attribute value
111
235
  */
112
- readAttributeOnReference(referenceId: number, attributeName: string): Promise<any>;
236
+ readAttributeOnReference(referenceId: number, options: ReturnResultOptions, attributeName: string | number): Promise<any>;
113
237
  /**
114
238
  * Registers a class by name
115
239
  * @param {string} className Class name to register
@@ -182,5 +306,18 @@ export default class Client {
182
306
  spawnReference(id: string): Reference;
183
307
  enableServerControl(): void;
184
308
  }
309
+ export type Proxy = import("./reference-proxy.js").Proxy;
310
+ export type ReturnOptions = {
311
+ reference?: boolean;
312
+ result?: boolean;
313
+ proxy?: boolean;
314
+ };
315
+ export type ReturnReferenceOptions = ReturnOptions & {
316
+ result?: false;
317
+ };
318
+ export type ReturnResultOptions = ReturnOptions & {
319
+ result: true;
320
+ reference?: false;
321
+ };
185
322
  import Reference from "./reference.js";
186
323
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"AAUA;IACE;;;;OAIG;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;;;;;;OAMG;IACH,mCALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,GAAG,CAAC,CAWxB;IAED;;;;;;OAMG;IACH,gDALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;OAIG;IACH,8BAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;;OAKG;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;;;;OAIG;IACH,cAHW,GAAG,GACD,GAAG,CAwBf;IAED;;;;;OAKG;IACH,mDAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAW9B;IAED;;;;;OAKG;IACH,sCAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CASxB;IAED;;;;OAIG;IACH,yBAHW,MAAM,iBACN,GAAG,QAMb;IAED;;;OAGG;IACH,2BAFW,MAAM,QAMhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;OAIG;IACH,2BAHW,MAAM,kBACN,GAAG,QAMb;IAED;;;OAGG;IACH,6BAFW,MAAM,QAMhB;IAED;;;;OAIG;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;;;;OAIG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAMxB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,SAAS,CAQrB;IAED,4BAEC;CACF;sBAvnBqB,gBAAgB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"AASA,4DAA4D;AAI5D;;;;GAIG;AACH;IACE;;;;OAIG;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;;;;;;;;;IAIE,mCACQ,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,GAAG,CAAC,CACxB;;;;;;;;;;IAGE,mCACQ,MAAM,cACN,MAAM,WACN,sBAAsB,WAClB,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,CACtC;;;;;;;;;;IAGE,mCACQ,MAAM,cACN,MAAM,WACN,mBAAmB,WACf,GAAG,EAAA,GACL,OAAO,CAAC,GAAG,CAAC,CACxB;IA4ED;;;;;;OAMG;IACH,gDALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAK9B;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAAC,KAAK,CAAC,CAoB1B;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAmB9B;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAgBxB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,KAAK,CAAC,CAkB1B;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAiB9B;IAED;;;;OAIG;IACH,yBAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAKxB;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,KAAK,CAAC,CAK1B;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAc9B;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAKxB;IAED;;;;;OAKG;IACH,qBAJW,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,KAAK,CAAC,CAmB1B;IAED;;;;;OAKG;IACH,8BAJW,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAiB9B;IAED;;;;;OAKG;IACH,2BAJW,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,GAAG,CAAC,CAKxB;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;;;;OAIG;IACH,cAHW,GAAG,GACD,GAAG,CAwBf;;;;;;;;IAIE,mDACQ,MAAM,iBACN,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,CAC9B;;;;;;;;;IAGE,mDACQ,MAAM,iBACN,MAAM,GAAG,MAAM,gBACf,sBAAsB,GACpB,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,CACtC;;;;;;;;;IAGE,mDACQ,MAAM,iBACN,MAAM,GAAG,MAAM,gBACf,mBAAmB,GACjB,OAAO,CAAC,GAAG,CAAC,CACxB;;;;;;;;IAqDE,sCACQ,MAAM,iBACN,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,CACxB;;;;;;;;;IAGE,sCACQ,MAAM,WACN,sBAAsB,iBACtB,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,CACtC;;;;;;;;;IAGE,sCACQ,MAAM,WACN,aAAa,iBACb,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC,CAC5C;;;;;;;;;IAGE,sCACQ,MAAM,WACN,mBAAmB,iBACnB,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,CACxB;IA6DD;;;;OAIG;IACH,yBAHW,MAAM,iBACN,GAAG,QAMb;IAED;;;OAGG;IACH,2BAFW,MAAM,QAMhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;OAIG;IACH,2BAHW,MAAM,kBACN,GAAG,QAMb;IAED;;;OAGG;IACH,6BAFW,MAAM,QAMhB;IAED;;;;OAIG;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;;;;OAIG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAMxB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,SAAS,CAQrB;IAED,4BAEC;CACF;oBA19Ba,OAAO,sBAAsB,EAAE,KAAK;4BAKrC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC;qCACxD,aAAa,GAAG;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAC;kCAChC,aAAa,GAAG;IAAC,MAAM,EAAE,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAC;sBAbxC,gBAAgB"}