diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 9113933c26e..43b7b86306a 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1242,6 +1242,9 @@ declare module 'vscode' { readonly metadata?: Record; constructor(outputs: NotebookCellOutputItem[], metadata?: Record); + + //TODO@jrieken HACK to workaround dependency issues... + toJSON(): any; } export enum NotebookCellRunState { diff --git a/src/vs/workbench/api/common/extHostNotebookEditor.ts b/src/vs/workbench/api/common/extHostNotebookEditor.ts index 425a3e98602..60e3af8a293 100644 --- a/src/vs/workbench/api/common/extHostNotebookEditor.ts +++ b/src/vs/workbench/api/common/extHostNotebookEditor.ts @@ -7,7 +7,6 @@ import { readonly } from 'vs/base/common/errors'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; import { MainThreadNotebookShape } from 'vs/workbench/api/common/extHost.protocol'; -import { NotebookCellOutput } from 'vs/workbench/api/common/extHostTypeConverters'; import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; import { addIdToOutput, CellEditType, ICellEditOperation, ICellReplaceEdit, INotebookEditData, notebookDocumentMetadataDefaults } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import * as vscode from 'vscode'; @@ -62,7 +61,7 @@ class NotebookEditorCellEditBuilder implements vscode.NotebookEditorEdit { index, outputs: outputs.map(output => { if (extHostTypes.NotebookCellOutput.isNotebookCellOutput(output)) { - return addIdToOutput(NotebookCellOutput.from(output)); + return addIdToOutput(output.toJSON()); } else { return addIdToOutput(output); } diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index d73cf085747..c0eb2a21f6a 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -1299,23 +1299,7 @@ export namespace LogLevel { export namespace NotebookCellOutput { export function from(output: types.NotebookCellOutput): IDisplayOutput { - - let data: { [key: string]: unknown; } = {}; - let custom: { [key: string]: unknown; } = {}; - let hasMetadata = false; - - for (let item of output.outputs) { - data[item.mime] = item.value; - if (item.metadata) { - custom[item.mime] = item.metadata; - hasMetadata = true; - } - } - return { - outputKind: CellOutputKind.Rich, - data, - metadata: hasMetadata ? { custom } : undefined - }; + return output.toJSON(); } } diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 6157cff62cc..e97f74d4224 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -14,8 +14,7 @@ import { URI } from 'vs/base/common/uri'; import { generateUuid } from 'vs/base/common/uuid'; import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from 'vs/platform/files/common/files'; import { RemoteAuthorityResolverErrorCode } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import * as extHostTypeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { addIdToOutput, CellEditType, ICellEditOperation } from 'vs/workbench/contrib/notebook/common/notebookCommon'; +import { addIdToOutput, CellEditType, ICellEditOperation, IDisplayOutput } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import type * as vscode from 'vscode'; function es5ClassCompat(target: Function): any { @@ -647,7 +646,7 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit { _type: FileEditType.Cell, metadata, uri, edit: { editType: CellEditType.Output, index, outputs: outputs.map(output => { if (NotebookCellOutput.isNotebookCellOutput(output)) { - return addIdToOutput(extHostTypeConverters.NotebookCellOutput.from(output)); + return addIdToOutput(output.toJSON()); } else { return addIdToOutput(output); } @@ -2806,6 +2805,25 @@ export class NotebookCellOutput { readonly outputs: NotebookCellOutputItem[], readonly metadata?: Record ) { } + + toJSON(): IDisplayOutput { + let data: { [key: string]: unknown; } = {}; + let custom: { [key: string]: unknown; } = {}; + let hasMetadata = false; + + for (let item of this.outputs) { + data[item.mime] = item.value; + if (item.metadata) { + custom[item.mime] = item.metadata; + hasMetadata = true; + } + } + return { + outputKind: CellOutputKind.Rich, + data, + metadata: hasMetadata ? { custom } : undefined + }; + } } export enum CellKind {