vscode-ws-jsonrpc
Version:
VSCode JSON RPC over WebSocket
44 lines • 2.31 kB
JavaScript
/* --------------------------------------------------------------------------------------------
* Copyright (c) 2024 TypeFox and others.
* Licensed under the MIT License. See LICENSE in the package root for license information.
* ------------------------------------------------------------------------------------------ */
import * as cp from 'node:child_process';
import { StreamMessageReader, StreamMessageWriter, SocketMessageReader, SocketMessageWriter } from 'vscode-jsonrpc/node.js';
import { createConnection } from './connection.js';
import { WebSocketMessageReader } from '../socket/reader.js';
import { WebSocketMessageWriter } from '../socket/writer.js';
export function createServerProcess(serverName, command, args, options) {
const serverProcess = cp.spawn(command, args || [], options || {});
serverProcess.on('error', error => console.error(`Launching ${serverName} Server failed: ${error}`));
if (serverProcess.stderr !== null) {
serverProcess.stderr.on('data', data => console.error(`${serverName} Server: ${data}`));
}
return createProcessStreamConnection(serverProcess);
}
export function createWebSocketConnection(socket) {
const reader = new WebSocketMessageReader(socket);
const writer = new WebSocketMessageWriter(socket);
return createConnection(reader, writer, () => socket.dispose(), { socket });
}
export function createProcessSocketConnection(process, outSocket, inSocket = outSocket) {
return createSocketConnection(outSocket, inSocket, () => process.kill());
}
export function createSocketConnection(outSocket, inSocket, onDispose) {
const reader = new SocketMessageReader(outSocket);
const writer = new SocketMessageWriter(inSocket);
return createConnection(reader, writer, onDispose);
}
export function createProcessStreamConnection(process) {
if (process.stdout !== null && process.stdin !== null) {
return createStreamConnection(process.stdout, process.stdin, () => process.kill());
}
else {
return undefined;
}
}
export function createStreamConnection(outStream, inStream, onDispose) {
const reader = new StreamMessageReader(outStream);
const writer = new StreamMessageWriter(inStream);
return createConnection(reader, writer, onDispose);
}
//# sourceMappingURL=launch.js.map