@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
JavaScript
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 };