UNPKG

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

Version:

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

111 lines (108 loc) 5.47 kB
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js'; import { Action } from 'vscode/vscode/vs/base/common/actions'; import { isCancellationError } from 'vscode/vscode/vs/base/common/errors'; import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle'; import { Schemas } from 'vscode/vscode/vs/base/common/network'; import { localize } from 'vscode/vscode/vs/nls'; import 'vscode/vscode/vs/platform/notification/common/notification'; import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification.service'; import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener.service'; import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage.service'; import { ExtHostContext, MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol'; import { defaultExternalUriOpenerId } from 'vscode/vscode/vs/workbench/contrib/externalUriOpener/common/configuration'; import { ContributedExternalUriOpenersStore } from '../../contrib/externalUriOpener/common/contributedOpeners.js'; import { IExternalUriOpenerService } from 'vscode/vscode/vs/workbench/contrib/externalUriOpener/common/externalUriOpenerService.service'; import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions.service'; import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; import Severity$1 from 'vscode/vscode/vs/base/common/severity'; let MainThreadUriOpeners = class MainThreadUriOpeners extends Disposable { constructor(context, storageService, externalUriOpenerService, extensionService, openerService, notificationService) { super(); this.extensionService = extensionService; this.openerService = openerService; this.notificationService = notificationService; this._registeredOpeners = ( (new Map())); this.proxy = ( (context.getProxy(ExtHostContext.ExtHostUriOpeners))); this._register(externalUriOpenerService.registerExternalOpenerProvider(this)); this._contributedExternalUriOpenersStore = this._register(( (new ContributedExternalUriOpenersStore(storageService, extensionService)))); } async *getOpeners(targetUri) { if (targetUri.scheme !== Schemas.http && targetUri.scheme !== Schemas.https) { return; } await this.extensionService.activateByEvent(`onOpenExternalUri:${targetUri.scheme}`); for (const [id, openerMetadata] of this._registeredOpeners) { if (( (openerMetadata.schemes.has(targetUri.scheme)))) { yield this.createOpener(id, openerMetadata); } } } createOpener(id, metadata) { return { id: id, label: metadata.label, canOpen: (uri, token) => { return this.proxy.$canOpenUri(id, uri, token); }, openExternalUri: async (uri, ctx, token) => { try { await this.proxy.$openUri(id, { resolvedUri: uri, sourceUri: ctx.sourceUri }, token); } catch (e) { if (!isCancellationError(e)) { const openDefaultAction = ( (new Action('default', ( localize(4866, "Open using default opener")), undefined, undefined, async () => { await this.openerService.open(uri, { allowTunneling: false, allowContributedOpeners: defaultExternalUriOpenerId, }); }))); openDefaultAction.tooltip = ( (uri.toString())); this.notificationService.notify({ severity: Severity$1.Error, message: ( localize( 4867, 'Could not open uri with \'{0}\': {1}', id, (e.toString()) )), actions: { primary: [ openDefaultAction ] } }); } } return true; }, }; } async $registerUriOpener(id, schemes, extensionId, label) { if (( (this._registeredOpeners.has(id)))) { throw ( (new Error(`Opener with id '${id}' already registered`))); } this._registeredOpeners.set(id, { schemes: ( (new Set(schemes))), label, extensionId, }); this._contributedExternalUriOpenersStore.didRegisterOpener(id, extensionId.value); } async $unregisterUriOpener(id) { this._registeredOpeners.delete(id); this._contributedExternalUriOpenersStore.delete(id); } dispose() { super.dispose(); this._registeredOpeners.clear(); } }; MainThreadUriOpeners = __decorate([ extHostNamedCustomer(MainContext.MainThreadUriOpeners), ( (__param(1, IStorageService))), ( (__param(2, IExternalUriOpenerService))), ( (__param(3, IExtensionService))), ( (__param(4, IOpenerService))), ( (__param(5, INotificationService))) ], MainThreadUriOpeners); export { MainThreadUriOpeners };