UNPKG

@codingame/monaco-vscode-extensions-service-override

Version:

VSCode public API plugged on the monaco editor - extensions service-override

96 lines (93 loc) 4.46 kB
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js'; import { Emitter } from 'vscode/vscode/vs/base/common/event'; import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle'; import { SocketCloseEventType } from 'vscode/vscode/vs/base/parts/ipc/common/ipc.net'; import { ManagedSocket, connectManagedSocket } from '../../../platform/remote/common/managedSocket.js'; import { RemoteConnectionType } from 'vscode/vscode/vs/platform/remote/common/remoteAuthorityResolver'; import { IRemoteSocketFactoryService } from 'vscode/vscode/vs/platform/remote/common/remoteSocketFactoryService.service'; import { ExtHostContext, MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol'; import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; let MainThreadManagedSockets = class MainThreadManagedSockets extends Disposable { constructor(extHostContext, _remoteSocketFactoryService) { super(); this._remoteSocketFactoryService = _remoteSocketFactoryService; this._registrations = ( new Map()); this._remoteSockets = ( new Map()); this._proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostManagedSockets)); } async $registerSocketFactory(socketFactoryId) { const that = this; const socketFactory = new (class { supports(connectTo) { return (connectTo.id === socketFactoryId); } connect(connectTo, path, query, debugLabel) { return ( new Promise((resolve, reject) => { if (connectTo.id !== socketFactoryId) { return reject(( new Error('Invalid connectTo'))); } const factoryId = connectTo.id; that._proxy.$openRemoteSocket(factoryId).then(socketId => { const half = { onClose: ( new Emitter()), onData: ( new Emitter()), onEnd: ( new Emitter()), }; that._remoteSockets.set(socketId, half); MainThreadManagedSocket.connect(socketId, that._proxy, path, query, debugLabel, half) .then(socket => { socket.onDidDispose(() => that._remoteSockets.delete(socketId)); resolve(socket); }, err => { that._remoteSockets.delete(socketId); reject(err); }); }).catch(reject); })); } }); this._registrations.set(socketFactoryId, this._remoteSocketFactoryService.register(RemoteConnectionType.Managed, socketFactory)); } async $unregisterSocketFactory(socketFactoryId) { this._registrations.get(socketFactoryId)?.dispose(); } $onDidManagedSocketHaveData(socketId, data) { this._remoteSockets.get(socketId)?.onData.fire(data); } $onDidManagedSocketClose(socketId, error) { this._remoteSockets.get(socketId)?.onClose.fire({ type: SocketCloseEventType.NodeSocketCloseEvent, error: error ? ( new Error(error)) : undefined, hadError: !!error }); this._remoteSockets.delete(socketId); } $onDidManagedSocketEnd(socketId) { this._remoteSockets.get(socketId)?.onEnd.fire(); } }; MainThreadManagedSockets = __decorate([ extHostNamedCustomer(MainContext.MainThreadManagedSockets), ( __param(1, IRemoteSocketFactoryService)) ], MainThreadManagedSockets); class MainThreadManagedSocket extends ManagedSocket { static connect(socketId, proxy, path, query, debugLabel, half) { const socket = ( new MainThreadManagedSocket(socketId, proxy, debugLabel, half)); return connectManagedSocket(socket, path, query, debugLabel, half); } constructor(socketId, proxy, debugLabel, half) { super(debugLabel, half); this.socketId = socketId; this.proxy = proxy; } write(buffer) { this.proxy.$remoteSocketWrite(this.socketId, buffer); } closeRemote() { this.proxy.$remoteSocketEnd(this.socketId); } drain() { return this.proxy.$remoteSocketDrain(this.socketId); } } export { MainThreadManagedSocket, MainThreadManagedSockets };