@pierre/diffs 1.4.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/components/CodeView.d.ts +2 -4
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +23 -12
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts +3 -0
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/File.js +10 -0
  8. package/dist/components/File.js.map +1 -1
  9. package/dist/components/FileDiff.d.ts +19 -1
  10. package/dist/components/FileDiff.d.ts.map +1 -1
  11. package/dist/components/FileDiff.js +51 -15
  12. package/dist/components/FileDiff.js.map +1 -1
  13. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  14. package/dist/components/VirtualizedFile.js +18 -19
  15. package/dist/components/VirtualizedFile.js.map +1 -1
  16. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  17. package/dist/components/VirtualizedFileDiff.js +25 -22
  18. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  19. package/dist/constants.d.ts +1 -3
  20. package/dist/constants.d.ts.map +1 -1
  21. package/dist/constants.js +1 -3
  22. package/dist/constants.js.map +1 -1
  23. package/dist/editor/editor.d.ts.map +1 -1
  24. package/dist/editor/editor.js +21 -10
  25. package/dist/editor/editor.js.map +1 -1
  26. package/dist/editor/textMeasure.d.ts.map +1 -1
  27. package/dist/editor/textMeasure.js +27 -3
  28. package/dist/editor/textMeasure.js.map +1 -1
  29. package/dist/highlighter/languages/attachResolvedLanguages.js +8 -1
  30. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  31. package/dist/highlighter/languages/registerCustomLanguage.d.ts +3 -1
  32. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  33. package/dist/highlighter/languages/registerCustomLanguage.js +3 -1
  34. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
  35. package/dist/index.d.ts +2 -2
  36. package/dist/index.js +2 -2
  37. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  38. package/dist/react/utils/useFileDiffInstance.js +47 -11
  39. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  40. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  41. package/dist/renderers/DiffHunksRenderer.js +20 -13
  42. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  43. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  44. package/dist/renderers/FileRenderer.js +30 -11
  45. package/dist/renderers/FileRenderer.js.map +1 -1
  46. package/dist/sprite.d.ts +2 -2
  47. package/dist/sprite.d.ts.map +1 -1
  48. package/dist/sprite.js +57 -0
  49. package/dist/sprite.js.map +1 -1
  50. package/dist/utils/editSessionHunks.d.ts +5 -4
  51. package/dist/utils/editSessionHunks.d.ts.map +1 -1
  52. package/dist/utils/editSessionHunks.js +32 -9
  53. package/dist/utils/editSessionHunks.js.map +1 -1
  54. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  55. package/dist/utils/parsePatchFiles.js +21 -13
  56. package/dist/utils/parsePatchFiles.js.map +1 -1
  57. package/dist/utils/parseQuotedDiffFileName.d.ts +8 -0
  58. package/dist/utils/parseQuotedDiffFileName.d.ts.map +1 -0
  59. package/dist/utils/parseQuotedDiffFileName.js +54 -0
  60. package/dist/utils/parseQuotedDiffFileName.js.map +1 -0
  61. package/dist/utils/realignChangeContent.d.ts +13 -10
  62. package/dist/utils/realignChangeContent.d.ts.map +1 -1
  63. package/dist/utils/realignChangeContent.js +23 -19
  64. package/dist/utils/realignChangeContent.js.map +1 -1
  65. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  66. package/dist/worker/WorkerPoolManager.js +40 -38
  67. package/dist/worker/WorkerPoolManager.js.map +1 -1
  68. package/dist/worker/worker-portable.js +8 -1
  69. package/dist/worker/worker-portable.js.map +1 -1
  70. package/dist/worker/worker.js +8 -1
  71. package/dist/worker/worker.js.map +1 -1
  72. package/package.json +1 -1
@@ -55,6 +55,7 @@ var DiffHunksRenderer = class {
55
55
  if (workerManager?.isWorkingPool() !== true) this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES) ? getHighlighterIfLoaded() : void 0;
56
56
  }
57
57
  cleanUp() {
58
+ this.endEditSession();
58
59
  this.recycle();
59
60
  this.expandedHunks.clear();
60
61
  this.workerManager = void 0;
@@ -63,11 +64,14 @@ var DiffHunksRenderer = class {
63
64
  recycle() {
64
65
  this.highlighter = void 0;
65
66
  this.diff = void 0;
66
- this.clearRenderCache();
67
+ if (this.editSessionActive) {
68
+ if (this.renderCache != null) this.renderCache.renderRange = void 0;
69
+ this.pendingHighlightResult = void 0;
70
+ this.pendingStructuralRows = void 0;
71
+ } else this.clearRenderCache();
67
72
  this.additionAnnotations = {};
68
73
  this.deletionAnnotations = {};
69
74
  this.workerManager?.cleanUpTasks(this);
70
- this.endEditSession();
71
75
  }
72
76
  /**
73
77
  * Enter edit-session mode: hunk updates preserve the current region
@@ -79,10 +83,12 @@ var DiffHunksRenderer = class {
79
83
  * empty additions document gets one row for the editor's caret.
80
84
  */
81
85
  beginEditSession(diff, externalDiff) {
82
- const { editSessionActive: wasAlreadyActive, renderCache } = this;
86
+ const { editSessionActive: wasAlreadyActive } = this;
83
87
  this.editSessionActive = true;
84
88
  if (!wasAlreadyActive) this.pendingHighlightResult = void 0;
85
89
  this.diff = diff;
90
+ if (wasAlreadyActive && this.renderCache != null && this.renderCache.diff !== diff) this.clearRenderCache();
91
+ const { renderCache } = this;
86
92
  if (!diff.isPartial && diff.additionLines.length === 0) {
87
93
  Object.assign(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
88
94
  this.markEditSessionPass(diff);
@@ -118,6 +124,7 @@ var DiffHunksRenderer = class {
118
124
  endEditSession() {
119
125
  this.editSessionActive = false;
120
126
  this.pendingHighlightResult = void 0;
127
+ if (this.diff == null) this.clearRenderCache();
121
128
  }
122
129
  /**
123
130
  * Ensures that the DOM is compatible with editor render updates
@@ -304,31 +311,31 @@ var DiffHunksRenderer = class {
304
311
  applyDocumentChange(textDocument) {
305
312
  const { pendingStructuralRows, renderCache } = this;
306
313
  this.pendingStructuralRows = void 0;
307
- if (renderCache == null) return;
308
- const { diff, result } = renderCache;
309
- if (result == null) return;
314
+ const diff = this.diff ?? renderCache?.diff;
315
+ if (diff == null) return;
316
+ const result = renderCache?.result;
310
317
  if (diff.isPartial) throw new Error("Could not apply document change for partial diff");
311
318
  const { additionLines: previousAdditionLines } = diff;
312
319
  diff.additionLines = getEditorDocumentLines(textDocument);
313
- result.code.additionLines = realignAdditionHastLines(previousAdditionLines, diff.additionLines, result.code.additionLines, textDocument);
320
+ if (result != null) result.code.additionLines = realignAdditionHastLines(previousAdditionLines, diff.additionLines, result.code.additionLines, textDocument);
314
321
  if (diff.additionLines.length <= 1 && diff.additionLines.join("") === "") {
315
322
  this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
316
- result.code.additionLines[0] = createPlainAdditionLineElement(0, textDocument.getLineText(0));
317
- } else if (this.editSessionActive) this.applySessionDocumentChange(diff);
323
+ if (result != null) result.code.additionLines[0] = createPlainAdditionLineElement(0, textDocument.getLineText(0));
324
+ } else if (this.editSessionActive) this.applySessionDocumentChange(diff, previousAdditionLines);
318
325
  else Object.assign(diff, recomputeDiffHunksForEdit(diff, this.options.parseDiffOptions));
319
- if (pendingStructuralRows != null) {
326
+ if (pendingStructuralRows != null && result != null) {
320
327
  for (const [line, row] of pendingStructuralRows) if (line < result.code.additionLines.length) result.code.additionLines[line] = row;
321
328
  }
322
- renderCache.isDirty = true;
329
+ if (renderCache != null) renderCache.isDirty = true;
323
330
  }
324
- applySessionDocumentChange(diff) {
331
+ applySessionDocumentChange(diff, previousAdditionLines) {
325
332
  const { parseDiffOptions } = this.options;
326
333
  const rawLines = diff.additionLines;
327
334
  if (shouldTopAlignAdditionRecompute(diff, rawLines)) {
328
335
  this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, rawLines, parseDiffOptions));
329
336
  return;
330
337
  }
331
- this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions));
338
+ this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions, (index) => previousAdditionLines[index]));
332
339
  }
333
340
  applyRecomputePreservingSessionType(diff, update) {
334
341
  const sessionType = this.editSessionActive ? diff.type : void 0;