@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
88 lines (85 loc) • 4.11 kB
JavaScript
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
import { decodeBase64 } from 'vscode/vscode/vs/base/common/buffer';
import { revive } from 'vscode/vscode/vs/base/common/marshalling';
import { IBulkEditService, ResourceTextEdit, ResourceFileEdit } from 'vscode/vscode/vs/editor/browser/services/bulkEditService';
import { ILogService } from 'vscode/vscode/vs/platform/log/common/log.service';
import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity.service';
import { MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
import { ResourceNotebookCellEdit } from 'vscode/vscode/vs/workbench/contrib/bulkEdit/browser/bulkCellEdits';
import { CellEditType } from 'vscode/vscode/vs/workbench/contrib/notebook/common/notebookCommon';
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
let MainThreadBulkEdits = class MainThreadBulkEdits {
constructor(_extHostContext, _bulkEditService, _logService, _uriIdentService) {
this._bulkEditService = _bulkEditService;
this._logService = _logService;
this._uriIdentService = _uriIdentService;
}
dispose() { }
$tryApplyWorkspaceEdit(dto, undoRedoGroupId, isRefactoring) {
const edits = reviveWorkspaceEditDto(dto.value, this._uriIdentService);
return this._bulkEditService.apply(edits, { undoRedoGroupId, respectAutoSaveConfig: isRefactoring }).then((res) => res.isApplied, err => {
this._logService.warn(`IGNORING workspace edit: ${err}`);
return false;
});
}
};
MainThreadBulkEdits = __decorate([
extHostNamedCustomer(MainContext.MainThreadBulkEdits),
( __param(1, IBulkEditService)),
( __param(2, ILogService)),
( __param(3, IUriIdentityService))
], MainThreadBulkEdits);
function reviveWorkspaceEditDto(data, uriIdentityService, resolveDataTransferFile) {
if (!data || !data.edits) {
return data;
}
const result = revive(data);
for (const edit of result.edits) {
if (ResourceTextEdit.is(edit)) {
edit.resource = uriIdentityService.asCanonicalUri(edit.resource);
}
if (ResourceFileEdit.is(edit)) {
if (edit.options) {
const inContents = edit.options?.contents;
if (inContents) {
if (inContents.type === 'base64') {
edit.options.contents = Promise.resolve(decodeBase64(inContents.value));
}
else {
if (resolveDataTransferFile) {
edit.options.contents = resolveDataTransferFile(inContents.id);
}
else {
throw ( new Error('Could not revive data transfer file'));
}
}
}
}
edit.newResource = edit.newResource && uriIdentityService.asCanonicalUri(edit.newResource);
edit.oldResource = edit.oldResource && uriIdentityService.asCanonicalUri(edit.oldResource);
}
if (ResourceNotebookCellEdit.is(edit)) {
edit.resource = uriIdentityService.asCanonicalUri(edit.resource);
const cellEdit = edit.cellEdit;
if (cellEdit.editType === CellEditType.Replace) {
edit.cellEdit = {
...cellEdit,
cells: ( cellEdit.cells.map(cell => ({
...cell,
outputs: ( cell.outputs.map(output => ({
...output,
outputs: ( output.items.map(item => {
return {
mime: item.mime,
data: item.valueBytes
};
}))
})))
})))
};
}
}
}
return data;
}
export { MainThreadBulkEdits, reviveWorkspaceEditDto };