scoundrel-remote-eval 1.0.8 → 1.0.9

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.
Files changed (47) hide show
  1. package/build/client/connections/web-socket/index.d.ts +34 -0
  2. package/build/client/connections/web-socket/index.d.ts.map +1 -0
  3. package/build/client/connections/web-socket/index.js +68 -0
  4. package/build/client/index.d.ts +180 -0
  5. package/build/client/index.d.ts.map +1 -0
  6. package/build/client/index.js +413 -0
  7. package/build/client/reference-proxy.d.ts +7 -0
  8. package/build/client/reference-proxy.d.ts.map +1 -0
  9. package/build/client/reference-proxy.js +45 -0
  10. package/build/client/reference.d.ts +50 -0
  11. package/build/client/reference.d.ts.map +1 -0
  12. package/build/client/reference.js +63 -0
  13. package/build/index.d.ts +2 -0
  14. package/build/index.d.ts.map +1 -0
  15. package/build/index.js +1 -0
  16. package/build/logger.d.ts +39 -0
  17. package/build/logger.d.ts.map +1 -0
  18. package/build/logger.js +64 -0
  19. package/build/python-web-socket-runner.d.ts +27 -0
  20. package/build/python-web-socket-runner.d.ts.map +1 -0
  21. package/build/python-web-socket-runner.js +94 -0
  22. package/build/server/connections/web-socket/client.d.ts +26 -0
  23. package/build/server/connections/web-socket/client.d.ts.map +1 -0
  24. package/build/server/connections/web-socket/client.js +39 -0
  25. package/build/server/connections/web-socket/index.d.ts +19 -0
  26. package/build/server/connections/web-socket/index.d.ts.map +1 -0
  27. package/build/server/connections/web-socket/index.js +29 -0
  28. package/build/server/index.d.ts +20 -0
  29. package/build/server/index.d.ts.map +1 -0
  30. package/build/server/index.js +26 -0
  31. package/package.json +8 -3
  32. package/eslint.config.js +0 -18
  33. package/spec/reference-with-proxy-spec.js +0 -101
  34. package/spec/support/jasmine.json +0 -13
  35. package/spec/web-socket-javascript-spec.js +0 -66
  36. package/spec/web-socket-python-spec.js +0 -57
  37. package/src/client/connections/web-socket/index.js +0 -88
  38. package/src/client/index.js +0 -469
  39. package/src/client/reference-proxy.js +0 -53
  40. package/src/client/reference.js +0 -69
  41. package/src/index.js +0 -0
  42. package/src/logger.js +0 -70
  43. package/src/python-web-socket-runner.js +0 -116
  44. package/src/server/connections/web-socket/client.js +0 -46
  45. package/src/server/connections/web-socket/index.js +0 -34
  46. package/src/server/index.js +0 -33
  47. package/tsconfig.json +0 -13
@@ -1,101 +0,0 @@
1
- // @ts-check
2
-
3
- import Client from "../src/client/index.js"
4
- import ClientWebSocket from "../src/client/connections/web-socket/index.js"
5
- import referenceWithProxy from "../src/client/reference-proxy.js"
6
- import Server from "../src/server/index.js"
7
- import ServerWebSocket from "../src/server/connections/web-socket/index.js"
8
- import {WebSocket, WebSocketServer} from "ws"
9
-
10
- const shared = {}
11
-
12
- describe("referenceWithProxy", () => {
13
- beforeEach(async () => {
14
- shared.wss = new WebSocketServer({port: 8080})
15
- shared.serverWebSocket = new ServerWebSocket(shared.wss)
16
- shared.server = new Server(shared.serverWebSocket)
17
-
18
- shared.ws = new WebSocket("http://localhost:8080")
19
- shared.clientWebSocket = new ClientWebSocket(shared.ws)
20
-
21
- await shared.clientWebSocket.waitForOpened()
22
-
23
- shared.client = new Client(shared.clientWebSocket)
24
-
25
- shared.serverClient = shared.server.getClients()[0]
26
-
27
- if (!shared.serverClient) {
28
- throw new Error("No client connected to server")
29
- }
30
- })
31
-
32
- afterEach(async () => {
33
- await shared.client.close()
34
- await shared.server.close()
35
- })
36
-
37
- it("creates a reference with a proxy", async () => {
38
- const stringObjectReference = await shared.client.newObjectWithReference("Array")
39
- const stringObject = referenceWithProxy(stringObjectReference)
40
-
41
- // @ts-ignore
42
- await stringObject.push("test1")
43
-
44
- // @ts-ignore
45
- await stringObject.push("test2")
46
-
47
- // @ts-ignore
48
- const result = await stringObject.__serialize()
49
-
50
- expect(result).toEqual(["test1", "test2"])
51
- })
52
-
53
- it("reads attributes from a reference", async () => {
54
- const testArray = await shared.client.newObjectWithReference("Array")
55
-
56
- await testArray.callMethod("push", "test1")
57
- await testArray.callMethod("push", "test2")
58
-
59
- const result = await testArray.serialize()
60
-
61
- expect(result).toEqual(["test1", "test2"])
62
-
63
- const firstValue = await testArray.readAttribute(0)
64
- const secondValue = await testArray.readAttribute(1)
65
-
66
- expect(firstValue).toEqual("test1")
67
- expect(secondValue).toEqual("test2")
68
- })
69
-
70
- it("calls methods", async () => {
71
- const stringObjectReference = await shared.client.newObjectWithReference("Array")
72
- const stringObject = referenceWithProxy(stringObjectReference)
73
-
74
- // @ts-ignore
75
- await stringObject.push("test1")
76
-
77
- // @ts-ignore
78
- await stringObject.push("test2")
79
-
80
- // @ts-ignore
81
- const result = await stringObject.__serialize()
82
-
83
- expect(result).toEqual(["test1", "test2"])
84
- })
85
-
86
- it("calls methods on the client from the server", async () => {
87
- const stringObjectReference = await shared.serverClient.newObjectWithReference("Array")
88
- const stringObject = referenceWithProxy(stringObjectReference)
89
-
90
- // @ts-ignore
91
- await stringObject.push("test1")
92
-
93
- // @ts-ignore
94
- await stringObject.push("test2")
95
-
96
- // @ts-ignore
97
- const result = await stringObject.__serialize()
98
-
99
- expect(result).toEqual(["test1", "test2"])
100
- })
101
- })
@@ -1,13 +0,0 @@
1
- {
2
- "spec_dir": "spec",
3
- "spec_files": [
4
- "**/*[sS]pec.?(m)js"
5
- ],
6
- "helpers": [
7
- "helpers/**/*.?(m)js"
8
- ],
9
- "env": {
10
- "stopSpecOnExpectationFailure": false,
11
- "random": true
12
- }
13
- }
@@ -1,66 +0,0 @@
1
- // @ts-check
2
-
3
- import Client from "../src/client/index.js"
4
- import ClientWebSocket from "../src/client/connections/web-socket/index.js"
5
- import Server from "../src/server/index.js"
6
- import ServerWebSocket from "../src/server/connections/web-socket/index.js"
7
- import {WebSocket, WebSocketServer} from "ws"
8
-
9
- const shared = {}
10
-
11
- describe("scoundrel - web-socket - javascript", () => {
12
- beforeEach(async () => {
13
- shared.wss = new WebSocketServer({port: 8080})
14
- shared.serverWebSocket = new ServerWebSocket(shared.wss)
15
- shared.server = new Server(shared.serverWebSocket)
16
-
17
- shared.ws = new WebSocket("http://localhost:8080")
18
- shared.clientWebSocket = new ClientWebSocket(shared.ws)
19
-
20
- await shared.clientWebSocket.waitForOpened()
21
-
22
- shared.client = new Client(shared.clientWebSocket)
23
- })
24
-
25
- afterEach(async () => {
26
- await shared.client.close()
27
- await shared.server.close()
28
- })
29
-
30
- it("creates a server and connects to it with the client", async () => {
31
- const stringObject = await shared.client.newObjectWithReference("Array")
32
-
33
- await stringObject.callMethod("push", "test1")
34
- await stringObject.callMethod("push", "test2")
35
-
36
- const result = await stringObject.serialize()
37
-
38
- expect(result).toEqual(["test1", "test2"])
39
- })
40
-
41
- it("returns results from method calls", async () => {
42
- const stringObject = await shared.client.newObjectWithReference("Array")
43
-
44
- await stringObject.callMethod("push", "test1")
45
- await stringObject.callMethod("push", "test2")
46
-
47
- const result = await stringObject.callMethod("join", ", ")
48
-
49
- expect(result).toEqual("test1, test2")
50
- })
51
-
52
- it("handles errors from method calls", async () => {
53
- const stringObject = await shared.client.newObjectWithReference("Array")
54
-
55
- let caughtError = null
56
-
57
- try {
58
- await stringObject.callMethod("nonExistentMethod")
59
- } catch (error) {
60
- caughtError = error
61
- }
62
-
63
- expect(caughtError).toBeInstanceOf(Error)
64
- expect(caughtError.message).toEqual("No method called 'nonExistentMethod' on a 'Array'")
65
- })
66
- })
@@ -1,57 +0,0 @@
1
- // @ts-check
2
-
3
- import Client from "../src/client/index.js"
4
- import ClientWebSocket from "../src/client/connections/web-socket/index.js"
5
- import Logger from "../src/logger.js"
6
- import PythonWebSocketRunner from "../src/python-web-socket-runner.js"
7
- import {WebSocket} from "ws"
8
-
9
- const shared = {}
10
- const logger = new Logger("Scoundrel WebSocket Python Spec")
11
-
12
- describe("scoundrel - web-socket - python", () => {
13
- beforeEach(async () => {
14
- logger.log("Starting Python with client")
15
- shared.pythonWebSocketRunner = new PythonWebSocketRunner()
16
-
17
- logger.log("Running Python WebSocket runner and waiting for PID")
18
- await shared.pythonWebSocketRunner.runAndWaitForPid()
19
-
20
- logger.log("Starting WebSocket client connection")
21
- const ws = new WebSocket("ws://localhost:53874")
22
-
23
- logger.log("Creating ClientWebSocket")
24
- const clientWebSocket = new ClientWebSocket(ws)
25
-
26
- logger.log("Waiting for WebSocket to open")
27
- await clientWebSocket.waitForOpened()
28
-
29
- logger.log("Creating Scoundrel Client")
30
- shared.client = new Client(clientWebSocket)
31
- })
32
-
33
- afterEach(async () => {
34
- shared.client?.close()
35
- shared.pythonWebSocketRunner?.close()
36
- })
37
-
38
- it("creates a server and connects to it with the client", async () => {
39
- const stringObject = await shared.client.newObjectWithReference("[]")
40
-
41
- await stringObject.callMethod("append", "test1")
42
- await stringObject.callMethod("append", "test2")
43
-
44
- const result = await stringObject.serialize()
45
-
46
- expect(result).toEqual(["test1", "test2"])
47
- })
48
-
49
- it("imports classes and uses them", async () => {
50
- const math = await shared.client.import("math")
51
- const pi = await math.readAttributeWithReference("pi")
52
- const cosOfPi = await math.callMethodWithReference("cos", pi)
53
- const result = await cosOfPi.serialize()
54
-
55
- expect(result).toEqual(-1)
56
- })
57
- })
@@ -1,88 +0,0 @@
1
- // @ts-check
2
-
3
- import Logger from "../../../logger.js"
4
-
5
- const logger = new Logger("Scoundrel WebSocket")
6
-
7
- // logger.setDebug(true)
8
-
9
- export default class WebSocket {
10
- /**
11
- * Creates a new WebSocket connection handler
12
- * @param {WebSocket} ws The WebSocket instance
13
- */
14
- constructor(ws) {
15
- this.ws = ws
16
-
17
- // @ts-ignore
18
- this.ws.addEventListener("error", this.onSocketError)
19
-
20
- // @ts-ignore
21
- this.ws.addEventListener("open", this.onSocketOpen)
22
-
23
- // @ts-ignore
24
- this.ws.addEventListener("message", this.onSocketMessage)
25
-
26
- this.commands = {}
27
- this.commandsCount = 0
28
- }
29
-
30
- async close() {
31
- await this.ws.close()
32
- }
33
-
34
- /**
35
- * @param {(data: any) => void} callback
36
- */
37
- onCommand(callback) {
38
- this.onCommandCallback = callback
39
- }
40
-
41
- /**
42
- * @param {Event} event
43
- */
44
- onSocketError = (event) => {
45
- logger.error(() => ["onSocketError", event])
46
- }
47
-
48
- /**
49
- * @param {MessageEvent} event
50
- */
51
- onSocketMessage = (event) => {
52
- const data = JSON.parse(event.data)
53
-
54
- logger.log(() => ["Client::Connections::WebSocket onSocketMessage", data])
55
-
56
- if (!this.onCommandCallback) {
57
- throw new Error("No onCommand callback set, ignoring message")
58
- }
59
-
60
- this.onCommandCallback(data)
61
- }
62
-
63
- /**
64
- * @param {Event} _event
65
- */
66
- onSocketOpen = (_event) => { // eslint-disable-line no-unused-vars
67
- logger.log("onSocketOpen")
68
- }
69
-
70
- /**
71
- * @param {Record<string, any>} data
72
- */
73
- send(data) {
74
- const sendData = JSON.stringify(data)
75
- logger.log(() => ["Sending", sendData])
76
-
77
- // @ts-ignore
78
- this.ws.send(sendData)
79
- }
80
-
81
- waitForOpened = () => new Promise((resolve, reject) => {
82
- // @ts-ignore
83
- this.ws.addEventListener("open", resolve)
84
-
85
- // @ts-ignore
86
- this.ws.addEventListener("error", reject)
87
- })
88
- }