UNPKG

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

Version:

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

124 lines (121 loc) 6.81 kB
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js'; import { DisposableStore, dispose } from 'vscode/vscode/vs/base/common/lifecycle'; import { ResourceMap } from 'vscode/vscode/vs/base/common/map'; import { URI } from 'vscode/vscode/vs/base/common/uri'; import { BoundModelReferenceCollection } from './mainThreadDocuments.js'; import { NotebookCellsChangeType } from 'vscode/vscode/vs/workbench/contrib/notebook/common/notebookCommon'; import { INotebookEditorModelResolverService } from 'vscode/vscode/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.service'; import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity.service'; import { ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol'; import { NotebookDto } from './mainThreadNotebookDto.js'; import { SerializableObjectWithBuffers } from 'vscode/vscode/vs/workbench/services/extensions/common/proxyIdentifier'; let MainThreadNotebookDocuments = class MainThreadNotebookDocuments { constructor(extHostContext, _notebookEditorModelResolverService, _uriIdentityService) { this._notebookEditorModelResolverService = _notebookEditorModelResolverService; this._uriIdentityService = _uriIdentityService; this._disposables = ( new DisposableStore()); this._documentEventListenersMapping = ( new ResourceMap()); this._proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostNotebookDocuments)); this._modelReferenceCollection = ( new BoundModelReferenceCollection(this._uriIdentityService.extUri)); this._disposables.add(this._notebookEditorModelResolverService.onDidChangeDirty(model => this._proxy.$acceptDirtyStateChanged(model.resource, model.isDirty()))); this._disposables.add(this._notebookEditorModelResolverService.onDidSaveNotebook(e => this._proxy.$acceptModelSaved(e))); this._disposables.add(_notebookEditorModelResolverService.onWillFailWithConflict(e => { this._modelReferenceCollection.remove(e.resource); })); } dispose() { this._disposables.dispose(); this._modelReferenceCollection.dispose(); dispose(( this._documentEventListenersMapping.values())); } handleNotebooksAdded(notebooks) { for (const textModel of notebooks) { const disposableStore = ( new DisposableStore()); disposableStore.add(textModel.onDidChangeContent(event => { const eventDto = { versionId: event.versionId, rawEvents: [] }; for (const e of event.rawEvents) { switch (e.kind) { case NotebookCellsChangeType.ModelChange: eventDto.rawEvents.push({ kind: e.kind, changes: ( e.changes.map(diff => [diff[0], diff[1], ( diff[2].map(cell => NotebookDto.toNotebookCellDto(cell)))])) }); break; case NotebookCellsChangeType.Move: eventDto.rawEvents.push({ kind: e.kind, index: e.index, length: e.length, newIdx: e.newIdx, }); break; case NotebookCellsChangeType.Output: eventDto.rawEvents.push({ kind: e.kind, index: e.index, outputs: ( e.outputs.map(NotebookDto.toNotebookOutputDto)) }); break; case NotebookCellsChangeType.OutputItem: eventDto.rawEvents.push({ kind: e.kind, index: e.index, outputId: e.outputId, outputItems: ( e.outputItems.map(NotebookDto.toNotebookOutputItemDto)), append: e.append }); break; case NotebookCellsChangeType.ChangeCellLanguage: case NotebookCellsChangeType.ChangeCellContent: case NotebookCellsChangeType.ChangeCellMetadata: case NotebookCellsChangeType.ChangeCellInternalMetadata: eventDto.rawEvents.push(e); break; } } const hasDocumentMetadataChangeEvent = event.rawEvents.find(e => e.kind === NotebookCellsChangeType.ChangeDocumentMetadata); this._proxy.$acceptModelChanged(textModel.uri, ( new SerializableObjectWithBuffers(eventDto)), this._notebookEditorModelResolverService.isDirty(textModel.uri), hasDocumentMetadataChangeEvent ? textModel.metadata : undefined); })); this._documentEventListenersMapping.set(textModel.uri, disposableStore); } } handleNotebooksRemoved(uris) { for (const uri of uris) { this._documentEventListenersMapping.get(uri)?.dispose(); this._documentEventListenersMapping.delete(uri); } } async $tryCreateNotebook(options) { const ref = await this._notebookEditorModelResolverService.resolve({ untitledResource: undefined }, options.viewType); ref.object.notebook.onWillDispose(() => { ref.dispose(); }); this._proxy.$acceptDirtyStateChanged(ref.object.resource, true); if (options.content) { const data = NotebookDto.fromNotebookDataDto(options.content); ref.object.notebook.reset(data.cells, data.metadata, ref.object.notebook.transientOptions); } return ref.object.resource; } async $tryOpenNotebook(uriComponents) { const uri = URI.revive(uriComponents); const ref = await this._notebookEditorModelResolverService.resolve(uri, undefined); this._modelReferenceCollection.add(uri, ref); return uri; } async $trySaveNotebook(uriComponents) { const uri = URI.revive(uriComponents); const ref = await this._notebookEditorModelResolverService.resolve(uri); const saveResult = await ref.object.save(); ref.dispose(); return saveResult; } }; MainThreadNotebookDocuments = ( __decorate([ ( __param(1, INotebookEditorModelResolverService)), ( __param(2, IUriIdentityService)) ], MainThreadNotebookDocuments)); export { MainThreadNotebookDocuments };