9f7a39c391fc31ee9aa01ba954cb33f05862a94defa9de4fa09dfa3408555f4f672a30629112589b8184407ce9b88079d50d76586bbad6100d628a8099a3d7 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. export class ResourceEdit {
  10. constructor(metadata) {
  11. this.metadata = metadata;
  12. }
  13. static convert(edit) {
  14. return edit.edits.map(edit => {
  15. if (ResourceTextEdit.is(edit)) {
  16. return ResourceTextEdit.lift(edit);
  17. }
  18. if (ResourceFileEdit.is(edit)) {
  19. return ResourceFileEdit.lift(edit);
  20. }
  21. throw new Error('Unsupported edit');
  22. });
  23. }
  24. }
  25. export class ResourceTextEdit extends ResourceEdit {
  26. constructor(resource, textEdit, versionId = undefined, metadata) {
  27. super(metadata);
  28. this.resource = resource;
  29. this.textEdit = textEdit;
  30. this.versionId = versionId;
  31. }
  32. static is(candidate) {
  33. if (candidate instanceof ResourceTextEdit) {
  34. return true;
  35. }
  36. return isObject(candidate)
  37. && URI.isUri(candidate.resource)
  38. && isObject(candidate.textEdit);
  39. }
  40. static lift(edit) {
  41. if (edit instanceof ResourceTextEdit) {
  42. return edit;
  43. }
  44. else {
  45. return new ResourceTextEdit(edit.resource, edit.textEdit, edit.versionId, edit.metadata);
  46. }
  47. }
  48. }
  49. export class ResourceFileEdit extends ResourceEdit {
  50. constructor(oldResource, newResource, options = {}, metadata) {
  51. super(metadata);
  52. this.oldResource = oldResource;
  53. this.newResource = newResource;
  54. this.options = options;
  55. }
  56. static is(candidate) {
  57. if (candidate instanceof ResourceFileEdit) {
  58. return true;
  59. }
  60. else {
  61. return isObject(candidate)
  62. && (Boolean(candidate.newResource) || Boolean(candidate.oldResource));
  63. }
  64. }
  65. static lift(edit) {
  66. if (edit instanceof ResourceFileEdit) {
  67. return edit;
  68. }
  69. else {
  70. return new ResourceFileEdit(edit.oldResource, edit.newResource, edit.options, edit.metadata);
  71. }
  72. }
  73. }