bulkEditService.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';
  6. import { URI } from '../../../base/common/uri.js';
  7. import { isObject } from '../../../base/common/types.js';
  8. export const IBulkEditService = createDecorator('IWorkspaceEditService');
  9. function isWorkspaceFileEdit(thing) {
  10. return isObject(thing) && (Boolean(thing.newUri) || Boolean(thing.oldUri));
  11. }
  12. function isWorkspaceTextEdit(thing) {
  13. return isObject(thing) && URI.isUri(thing.resource) && isObject(thing.edit);
  14. }
  15. export class ResourceEdit {
  16. constructor(metadata) {
  17. this.metadata = metadata;
  18. }
  19. static convert(edit) {
  20. return edit.edits.map(edit => {
  21. if (isWorkspaceTextEdit(edit)) {
  22. return new ResourceTextEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata);
  23. }
  24. if (isWorkspaceFileEdit(edit)) {
  25. return new ResourceFileEdit(edit.oldUri, edit.newUri, edit.options, edit.metadata);
  26. }
  27. throw new Error('Unsupported edit');
  28. });
  29. }
  30. }
  31. export class ResourceTextEdit extends ResourceEdit {
  32. constructor(resource, textEdit, versionId, metadata) {
  33. super(metadata);
  34. this.resource = resource;
  35. this.textEdit = textEdit;
  36. this.versionId = versionId;
  37. }
  38. }
  39. export class ResourceFileEdit extends ResourceEdit {
  40. constructor(oldResource, newResource, options, metadata) {
  41. super(metadata);
  42. this.oldResource = oldResource;
  43. this.newResource = newResource;
  44. this.options = options;
  45. }
  46. }