monaco-editor-core
Version:
A browser based code editor
74 lines (73 loc) • 2.61 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';
import { URI } from '../../../base/common/uri.js';
import { isObject } from '../../../base/common/types.js';
export const IBulkEditService = createDecorator('IWorkspaceEditService');
export class ResourceEdit {
constructor(metadata) {
this.metadata = metadata;
}
static convert(edit) {
return edit.edits.map(edit => {
if (ResourceTextEdit.is(edit)) {
return ResourceTextEdit.lift(edit);
}
if (ResourceFileEdit.is(edit)) {
return ResourceFileEdit.lift(edit);
}
throw new Error('Unsupported edit');
});
}
}
export class ResourceTextEdit extends ResourceEdit {
static is(candidate) {
if (candidate instanceof ResourceTextEdit) {
return true;
}
return isObject(candidate)
&& URI.isUri(candidate.resource)
&& isObject(candidate.textEdit);
}
static lift(edit) {
if (edit instanceof ResourceTextEdit) {
return edit;
}
else {
return new ResourceTextEdit(edit.resource, edit.textEdit, edit.versionId, edit.metadata);
}
}
constructor(resource, textEdit, versionId = undefined, metadata) {
super(metadata);
this.resource = resource;
this.textEdit = textEdit;
this.versionId = versionId;
}
}
export class ResourceFileEdit extends ResourceEdit {
static is(candidate) {
if (candidate instanceof ResourceFileEdit) {
return true;
}
else {
return isObject(candidate)
&& (Boolean(candidate.newResource) || Boolean(candidate.oldResource));
}
}
static lift(edit) {
if (edit instanceof ResourceFileEdit) {
return edit;
}
else {
return new ResourceFileEdit(edit.oldResource, edit.newResource, edit.options, edit.metadata);
}
}
constructor(oldResource, newResource, options = {}, metadata) {
super(metadata);
this.oldResource = oldResource;
this.newResource = newResource;
this.options = options;
}
}