@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
121 lines (118 loc) • 6.8 kB
JavaScript
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
import { isWeb } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
import { isString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
import { CommandsRegistry } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands';
import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
import { IExtensionManagementService, IExtensionGalleryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensionManagement/common/extensionManagement.service';
import { ExtensionManagementCLI } from '../../../platform/extensionManagement/common/extensionManagementCLI.js';
import { getExtensionId } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
import { ServiceCollection } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/serviceCollection';
import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
import { AbstractMessageLogger } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log';
import { IOpenerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service';
import { IProductService } from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service';
import { IWorkbenchEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/common/environmentService.service';
import { IExtensionManagementServerService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensionManagement/common/extensionManagement.service';
import { IExtensionManifestPropertiesService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService.service';
CommandsRegistry.registerCommand("_remoteCLI.openExternal", function(accessor, uri) {
const openerService = accessor.get(IOpenerService);
return openerService.open(isString(uri) ? uri : URI.revive(uri), {
openExternal: true,
allowTunneling: true
});
});
CommandsRegistry.registerCommand("_remoteCLI.windowOpen", function(accessor, toOpen, options) {
const commandService = accessor.get(ICommandService);
if (!toOpen.length) {
return commandService.executeCommand("_files.newWindow", options);
}
return commandService.executeCommand("_files.windowOpen", toOpen, options);
});
CommandsRegistry.registerCommand("_remoteCLI.getSystemStatus", function(accessor) {
const commandService = accessor.get(ICommandService);
return commandService.executeCommand("_issues.getSystemStatus");
});
CommandsRegistry.registerCommand("_remoteCLI.manageExtensions", async function(accessor, args) {
const instantiationService = accessor.get(IInstantiationService);
const extensionManagementServerService = accessor.get(IExtensionManagementServerService);
const remoteExtensionManagementService = extensionManagementServerService.remoteExtensionManagementServer?.extensionManagementService;
if (!remoteExtensionManagementService) {
return;
}
const lines = [];
const logger = new (class extends AbstractMessageLogger {
log(level, message) {
lines.push(message);
}
})();
const childInstantiationService = instantiationService.createChild(( new ServiceCollection([IExtensionManagementService, remoteExtensionManagementService])));
try {
const cliService = childInstantiationService.createInstance(RemoteExtensionManagementCLI, logger);
if (args.list) {
await cliService.listExtensions(!!args.list.showVersions, args.list.category, undefined);
} else {
const revive = inputs => ( inputs.map(input => isString(input) ? input : URI.revive(input)));
if (Array.isArray(args.install) && args.install.length) {
try {
await cliService.installExtensions(revive(args.install), [], {
isMachineScoped: true
}, !!args.force);
} catch (e) {
lines.push(e.message);
}
}
if (Array.isArray(args.uninstall) && args.uninstall.length) {
try {
await cliService.uninstallExtensions(revive(args.uninstall), !!args.force, undefined);
} catch (e) {
lines.push(e.message);
}
}
}
return lines.join("\n");
} finally {
childInstantiationService.dispose();
}
});
let RemoteExtensionManagementCLI = class RemoteExtensionManagementCLI extends ExtensionManagementCLI {
constructor(
logger,
extensionManagementService,
extensionGalleryService,
labelService,
envService,
_extensionManifestPropertiesService,
productService
) {
super(
[],
logger,
extensionManagementService,
extensionGalleryService,
productService
);
this._extensionManifestPropertiesService = _extensionManifestPropertiesService;
const remoteAuthority = envService.remoteAuthority;
this._location = remoteAuthority ? labelService.getHostLabel(Schemas.vscodeRemote, remoteAuthority) : undefined;
}
get location() {
return this._location;
}
validateExtensionKind(manifest) {
if (
!this._extensionManifestPropertiesService.canExecuteOnWorkspace(manifest) && !(isWeb && this._extensionManifestPropertiesService.canExecuteOnWeb(manifest))) {
this.logger.info(( localize(
2587,
"Cannot install the '{0}' extension because it is declared to not run in this setup.",
getExtensionId(manifest.publisher, manifest.name)
)));
return false;
}
return true;
}
};
RemoteExtensionManagementCLI = ( __decorate([( __param(1, IExtensionManagementService)), ( __param(2, IExtensionGalleryService)), ( __param(3, ILabelService)), ( __param(4, IWorkbenchEnvironmentService)), ( __param(5, IExtensionManifestPropertiesService)), ( __param(6, IProductService))], RemoteExtensionManagementCLI));