UNPKG

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

Version:

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

101 lines (98 loc) 4.74 kB
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js'; import { onUnexpectedError } from 'vscode/vscode/vs/base/common/errors'; import { Disposable, DisposableMap } from 'vscode/vscode/vs/base/common/lifecycle'; import { generateUuid } from 'vscode/vscode/vs/base/common/uuid'; import { reviveWebviewExtension } from './mainThreadWebviews.js'; import { ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol'; import { IWebviewViewService } from 'vscode/vscode/vs/workbench/contrib/webviewView/browser/webviewViewService.service'; import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry.service'; let MainThreadWebviewsViews = class MainThreadWebviewsViews extends Disposable { constructor(context, mainThreadWebviews, _telemetryService, _webviewViewService) { super(); this.mainThreadWebviews = mainThreadWebviews; this._telemetryService = _telemetryService; this._webviewViewService = _webviewViewService; this._webviewViews = this._register(( new DisposableMap())); this._webviewViewProviders = this._register(( new DisposableMap())); this._proxy = ( context.getProxy(ExtHostContext.ExtHostWebviewViews)); } $setWebviewViewTitle(handle, value) { const webviewView = this.getWebviewView(handle); webviewView.title = value; } $setWebviewViewDescription(handle, value) { const webviewView = this.getWebviewView(handle); webviewView.description = value; } $setWebviewViewBadge(handle, badge) { const webviewView = this.getWebviewView(handle); webviewView.badge = badge; } $show(handle, preserveFocus) { const webviewView = this.getWebviewView(handle); webviewView.show(preserveFocus); } $registerWebviewViewProvider(extensionData, viewType, options) { if (( this._webviewViewProviders.has(viewType))) { throw ( new Error(`View provider for ${viewType} already registered`)); } const extension = reviveWebviewExtension(extensionData); const registration = this._webviewViewService.register(viewType, { resolve: async (webviewView, cancellation) => { const handle = generateUuid(); this._webviewViews.set(handle, webviewView); this.mainThreadWebviews.addWebview(handle, webviewView.webview, { serializeBuffersForPostMessage: options.serializeBuffersForPostMessage }); let state = undefined; if (webviewView.webview.state) { try { state = JSON.parse(webviewView.webview.state); } catch (e) { console.error('Could not load webview state', e, webviewView.webview.state); } } webviewView.webview.extension = extension; if (options) { webviewView.webview.options = options; } webviewView.onDidChangeVisibility(visible => { this._proxy.$onDidChangeWebviewViewVisibility(handle, visible); }); webviewView.onDispose(() => { this._proxy.$disposeWebviewView(handle); this._webviewViews.deleteAndDispose(handle); }); this._telemetryService.publicLog2('webviews:createWebviewView', { extensionId: extension.id.value, id: viewType, }); try { await this._proxy.$resolveWebviewView(handle, viewType, webviewView.title, state, cancellation); } catch (error) { onUnexpectedError(error); webviewView.webview.setHtml(this.mainThreadWebviews.getWebviewResolvedFailedContent(viewType)); } } }); this._webviewViewProviders.set(viewType, registration); } $unregisterWebviewViewProvider(viewType) { if (!( this._webviewViewProviders.has(viewType))) { throw ( new Error(`No view provider for ${viewType} registered`)); } this._webviewViewProviders.deleteAndDispose(viewType); } getWebviewView(handle) { const webviewView = this._webviewViews.get(handle); if (!webviewView) { throw ( new Error('unknown webview view')); } return webviewView; } }; MainThreadWebviewsViews = ( __decorate([ ( __param(2, ITelemetryService)), ( __param(3, IWebviewViewService)) ], MainThreadWebviewsViews)); export { MainThreadWebviewsViews };