UNPKG

monaco-editor-core

Version:

A browser based code editor

74 lines (73 loc) 2.61 kB
/*--------------------------------------------------------------------------------------------- * 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; } }