UNPKG

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

Version:

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

81 lines (78 loc) 4.79 kB
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js'; import { Event } from 'vscode/vscode/vs/base/common/event'; import { Disposable, toDisposable } from 'vscode/vscode/vs/base/common/lifecycle'; import { URI } from 'vscode/vscode/vs/base/common/uri'; import { TerminalCapability } from 'vscode/vscode/vs/platform/terminal/common/capabilities/capabilities'; import { ExtHostContext, MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol'; import { ITerminalService } from 'vscode/vscode/vs/workbench/contrib/terminal/browser/terminal.service'; import { IWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/common/environmentService.service'; import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; import { TerminalShellExecutionCommandLineConfidence } from 'vscode/vscode/vs/workbench/api/common/extHostTypes'; let MainThreadTerminalShellIntegration = class MainThreadTerminalShellIntegration extends Disposable { constructor(extHostContext, _terminalService, workbenchEnvironmentService) { super(); this._terminalService = _terminalService; this._proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostTerminalShellIntegration)); const instanceDataListeners = ( new Map()); this._register(toDisposable(() => { for (const listener of ( instanceDataListeners.values())) { listener.dispose(); } })); const onDidAddCommandDetection = this._store.add(this._terminalService.createOnInstanceEvent(instance => { return ( Event.map(Event.filter(instance.capabilities.onDidAddCapabilityType, e => { return e === TerminalCapability.CommandDetection; }), () => instance)); })).event; this._store.add(onDidAddCommandDetection(e => this._proxy.$shellIntegrationChange(e.instanceId))); const commandDetectionStartEvent = this._store.add(this._terminalService.createOnInstanceCapabilityEvent(TerminalCapability.CommandDetection, e => e.onCommandExecuted)); let currentCommand; this._store.add(commandDetectionStartEvent.event(e => { if (e.data === currentCommand) { return; } currentCommand = e.data; const instanceId = e.instance.instanceId; this._proxy.$shellExecutionStart(instanceId, e.data.command, convertToExtHostCommandLineConfidence(e.data), e.data.isTrusted, this._convertCwdToUri(e.data.cwd)); instanceDataListeners.get(instanceId)?.dispose(); instanceDataListeners.set(instanceId, Event.accumulate(e.instance.onData, 50, this._store)(events => this._proxy.$shellExecutionData(instanceId, events.join()))); })); const commandDetectionEndEvent = this._store.add(this._terminalService.createOnInstanceCapabilityEvent(TerminalCapability.CommandDetection, e => e.onCommandFinished)); this._store.add(commandDetectionEndEvent.event(e => { currentCommand = undefined; const instanceId = e.instance.instanceId; instanceDataListeners.get(instanceId)?.dispose(); setTimeout(() => { this._proxy.$shellExecutionEnd(instanceId, e.data.command, convertToExtHostCommandLineConfidence(e.data), e.data.isTrusted, e.data.exitCode); }); })); const cwdChangeEvent = this._store.add(this._terminalService.createOnInstanceCapabilityEvent(TerminalCapability.CwdDetection, e => e.onDidChangeCwd)); this._store.add(cwdChangeEvent.event(e => { this._proxy.$cwdChange(e.instance.instanceId, this._convertCwdToUri(e.data)); })); this._store.add(this._terminalService.onDidDisposeInstance(e => this._proxy.$closeTerminal(e.instanceId))); } $executeCommand(terminalId, commandLine) { this._terminalService.getInstanceFromId(terminalId)?.runCommand(commandLine, true); } _convertCwdToUri(cwd) { return cwd ? URI.file(cwd) : undefined; } }; MainThreadTerminalShellIntegration = __decorate([ extHostNamedCustomer(MainContext.MainThreadTerminalShellIntegration), ( __param(1, ITerminalService)), ( __param(2, IWorkbenchEnvironmentService)) ], MainThreadTerminalShellIntegration); function convertToExtHostCommandLineConfidence(command) { switch (command.commandLineConfidence) { case 'high': return TerminalShellExecutionCommandLineConfidence.High; case 'medium': return TerminalShellExecutionCommandLineConfidence.Medium; case 'low': default: return TerminalShellExecutionCommandLineConfidence.Low; } } export { MainThreadTerminalShellIntegration };