@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/pty-host",
3
- "version": "0.21.0",
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"
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 new Promise((resolve) => {
20
- const cleanup = (value) => {
21
- webSocket.off('open', handleOpen)
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
- return event.data
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) => {
@@ -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)