@lvce-editor/pty-host 0.21.0 → 0.21.2
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/package.json +2 -2
- package/src/parts/GetFirstEvent/GetFirstEvent.js +24 -0
- package/src/parts/GetFirstWebSocketEvent/GetFirstWebSocketEvent.js +5 -21
- package/src/parts/HandleIpc/HandleIpc.js +0 -1
- package/src/parts/IpcChildWithElectronMessagePort/IpcChildWithElectronMessagePort.js +8 -1
- package/src/parts/Main/Main.js +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/pty-host",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"directory": "packages/pty-host"
|
|
14
14
|
},
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
16
|
+
"node": ">=18"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@lvce-editor/json-rpc": "^0.4.0",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as Promises from '../Promises/Promises.js'
|
|
2
|
+
|
|
3
|
+
export const getFirstEvent = async (eventEmitter, eventMap) => {
|
|
4
|
+
const { resolve, promise } = Promises.withResolvers()
|
|
5
|
+
const listenerMap = Object.create(null)
|
|
6
|
+
const cleanup = (value) => {
|
|
7
|
+
for (const event of Object.keys(eventMap)) {
|
|
8
|
+
eventEmitter.off(event, listenerMap[event])
|
|
9
|
+
}
|
|
10
|
+
resolve(value)
|
|
11
|
+
}
|
|
12
|
+
for (const [event, type] of Object.entries(eventMap)) {
|
|
13
|
+
const listener = (event) => {
|
|
14
|
+
cleanup({
|
|
15
|
+
type,
|
|
16
|
+
event,
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
eventEmitter.on(event, listener)
|
|
20
|
+
listenerMap[event] = listener
|
|
21
|
+
}
|
|
22
|
+
const { type, event } = await promise
|
|
23
|
+
return { type, event }
|
|
24
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import * as FirstWebSocketEventType from '../FirstWebSocketEventType/FirstWebSocketEventType.js'
|
|
2
1
|
import { WebSocket } from 'ws'
|
|
2
|
+
import * as FirstWebSocketEventType from '../FirstWebSocketEventType/FirstWebSocketEventType.js'
|
|
3
|
+
import * as GetFirstEvent from '../GetFirstEvent/GetFirstEvent.js'
|
|
3
4
|
|
|
4
5
|
export const getFirstWebSocketEvent = async (webSocket) => {
|
|
5
6
|
switch (webSocket.readyState) {
|
|
@@ -16,26 +17,9 @@ export const getFirstWebSocketEvent = async (webSocket) => {
|
|
|
16
17
|
default:
|
|
17
18
|
break
|
|
18
19
|
}
|
|
19
|
-
const { type, event } = await
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
webSocket.off('close', handleClose)
|
|
23
|
-
resolve(value)
|
|
24
|
-
}
|
|
25
|
-
const handleOpen = (event) => {
|
|
26
|
-
cleanup({
|
|
27
|
-
type: FirstWebSocketEventType.Open,
|
|
28
|
-
event,
|
|
29
|
-
})
|
|
30
|
-
}
|
|
31
|
-
const handleClose = (event) => {
|
|
32
|
-
cleanup({
|
|
33
|
-
type: FirstWebSocketEventType.Close,
|
|
34
|
-
event,
|
|
35
|
-
})
|
|
36
|
-
}
|
|
37
|
-
webSocket.on('open', handleOpen)
|
|
38
|
-
webSocket.on('close', handleClose)
|
|
20
|
+
const { type, event } = await GetFirstEvent.getFirstEvent(webSocket, {
|
|
21
|
+
open: FirstWebSocketEventType.Open,
|
|
22
|
+
close: FirstWebSocketEventType.Close,
|
|
39
23
|
})
|
|
40
24
|
return { type, event }
|
|
41
25
|
}
|
|
@@ -15,7 +15,6 @@ const logError = (error, prettyError) => {
|
|
|
15
15
|
export const handleIpc = (ipc) => {
|
|
16
16
|
Assert.object(ipc)
|
|
17
17
|
const handleMessage = (message) => {
|
|
18
|
-
// @ts-ignore
|
|
19
18
|
return JsonRpc.handleJsonRpcMessage(ipc, message, Command.execute, Callback.resolve, preparePrettyError, logError, RequiresSocket.requiresSocket)
|
|
20
19
|
}
|
|
21
20
|
ipc.on('message', handleMessage)
|
|
@@ -9,7 +9,14 @@ export const listen = ({ messagePort }) => {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
const getActualData = (event) => {
|
|
12
|
-
|
|
12
|
+
const { data, ports } = event
|
|
13
|
+
if (ports.length === 0) {
|
|
14
|
+
return data
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
...data,
|
|
18
|
+
params: [...data.params, ...ports],
|
|
19
|
+
}
|
|
13
20
|
}
|
|
14
21
|
|
|
15
22
|
export const wrap = (messagePort) => {
|
package/src/parts/Main/Main.js
CHANGED
|
@@ -7,6 +7,7 @@ import * as ProcessListeners from '../ProcessListeners/ProcessListeners.js'
|
|
|
7
7
|
|
|
8
8
|
export const main = async () => {
|
|
9
9
|
process.on('uncaughtExceptionMonitor', ProcessListeners.handleUncaughtExceptionMonitor)
|
|
10
|
+
process.on('disconnect', ProcessListeners.handleDisconnect)
|
|
10
11
|
CommandState.registerCommands(CommandMap.commandMap)
|
|
11
12
|
const ipc = await IpcChild.listen({ method: IpcChildType.Auto() })
|
|
12
13
|
HandleIpc.handleIpc(ipc)
|