@pierre/diffs 1.3.0-beta.2 → 1.3.0-beta.4

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 (158) hide show
  1. package/dist/components/CodeView.d.ts +4 -0
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +38 -0
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts +2 -2
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/File.js +13 -13
  8. package/dist/components/File.js.map +1 -1
  9. package/dist/components/FileDiff.d.ts +7 -4
  10. package/dist/components/FileDiff.d.ts.map +1 -1
  11. package/dist/components/FileDiff.js +57 -47
  12. package/dist/components/FileDiff.js.map +1 -1
  13. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  14. package/dist/components/UnresolvedFile.js +1 -1
  15. package/dist/components/VirtualizedFile.d.ts +1 -1
  16. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  17. package/dist/components/VirtualizedFile.js +13 -4
  18. package/dist/components/VirtualizedFile.js.map +1 -1
  19. package/dist/components/VirtualizedFileDiff.d.ts +2 -1
  20. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  21. package/dist/components/VirtualizedFileDiff.js +36 -42
  22. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  23. package/dist/components/Virtualizer.js +5 -3
  24. package/dist/components/Virtualizer.js.map +1 -1
  25. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  26. package/dist/editor/editStack.d.ts +1 -1
  27. package/dist/editor/editor.d.ts +14 -6
  28. package/dist/editor/editor.d.ts.map +1 -1
  29. package/dist/editor/editor.js +745 -553
  30. package/dist/editor/editor.js.map +1 -1
  31. package/dist/editor/editor2.js +6 -0
  32. package/dist/editor/editor2.js.map +1 -0
  33. package/dist/editor/lineAnnotations.d.ts +2 -1
  34. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  35. package/dist/editor/lineAnnotations.js +111 -1
  36. package/dist/editor/lineAnnotations.js.map +1 -1
  37. package/dist/editor/marker.d.ts +33 -0
  38. package/dist/editor/marker.d.ts.map +1 -0
  39. package/dist/editor/marker.js +185 -0
  40. package/dist/editor/marker.js.map +1 -0
  41. package/dist/editor/pieceTable.d.ts +3 -3
  42. package/dist/editor/pieceTable.d.ts.map +1 -1
  43. package/dist/editor/pieceTable.js +44 -33
  44. package/dist/editor/pieceTable.js.map +1 -1
  45. package/dist/editor/searchPanel.d.ts +6 -7
  46. package/dist/editor/searchPanel.d.ts.map +1 -1
  47. package/dist/editor/searchPanel.js +103 -138
  48. package/dist/editor/searchPanel.js.map +1 -1
  49. package/dist/editor/selection.d.ts +19 -3
  50. package/dist/editor/selection.d.ts.map +1 -1
  51. package/dist/editor/selection.js +196 -39
  52. package/dist/editor/selection.js.map +1 -1
  53. package/dist/editor/{quickEdit.d.ts → selectionAction.d.ts} +8 -8
  54. package/dist/editor/selectionAction.d.ts.map +1 -0
  55. package/dist/editor/{quickEdit.js → selectionAction.js} +19 -21
  56. package/dist/editor/selectionAction.js.map +1 -0
  57. package/dist/editor/sprite.d.ts +8 -0
  58. package/dist/editor/sprite.d.ts.map +1 -0
  59. package/dist/editor/sprite.js +45 -0
  60. package/dist/editor/sprite.js.map +1 -0
  61. package/dist/editor/textDocument.d.ts +5 -5
  62. package/dist/editor/textDocument.d.ts.map +1 -1
  63. package/dist/editor/textDocument.js +9 -9
  64. package/dist/editor/textDocument.js.map +1 -1
  65. package/dist/editor/textMeasure.js +3 -3
  66. package/dist/editor/textMeasure.js.map +1 -1
  67. package/dist/editor/tokenzier.d.ts +6 -2
  68. package/dist/editor/tokenzier.d.ts.map +1 -1
  69. package/dist/editor/tokenzier.js +135 -85
  70. package/dist/editor/tokenzier.js.map +1 -1
  71. package/dist/editor/utils.d.ts +3 -1
  72. package/dist/editor/utils.d.ts.map +1 -1
  73. package/dist/editor/utils.js +16 -1
  74. package/dist/editor/utils.js.map +1 -1
  75. package/dist/highlighter/shared_highlighter.js +3 -29
  76. package/dist/highlighter/shared_highlighter.js.map +1 -1
  77. package/dist/highlighter/themes/attachResolvedThemes.js +4 -3
  78. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  79. package/dist/highlighter/themes/cleanUpResolvedThemes.js +3 -2
  80. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  81. package/dist/highlighter/themes/constants.d.ts +1 -7
  82. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  83. package/dist/highlighter/themes/constants.js +1 -4
  84. package/dist/highlighter/themes/constants.js.map +1 -1
  85. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +2 -2
  86. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  87. package/dist/highlighter/themes/getResolvedThemes.js +2 -8
  88. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  89. package/dist/highlighter/themes/hasResolvedThemes.js +2 -3
  90. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  91. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +1 -1
  92. package/dist/highlighter/themes/registerCustomTheme.d.ts +5 -3
  93. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  94. package/dist/highlighter/themes/registerCustomTheme.js +15 -5
  95. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  96. package/dist/highlighter/themes/resolveTheme.js +6 -27
  97. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  98. package/dist/highlighter/themes/resolveThemes.js +5 -12
  99. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  100. package/dist/highlighter/themes/themeResolution.d.ts +8 -0
  101. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -0
  102. package/dist/highlighter/themes/themeResolution.js +22 -0
  103. package/dist/highlighter/themes/themeResolution.js.map +1 -0
  104. package/dist/highlighter/themes/themeResolver.d.ts +8 -0
  105. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -0
  106. package/dist/highlighter/themes/themeResolver.js +8 -0
  107. package/dist/highlighter/themes/themeResolver.js.map +1 -0
  108. package/dist/index.d.ts +4 -4
  109. package/dist/index.js +3 -3
  110. package/dist/react/index.d.ts +2 -2
  111. package/dist/react/jsx.d.ts.map +1 -1
  112. package/dist/react/utils/useFileDiffInstance.js +1 -0
  113. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  114. package/dist/renderers/DiffHunksRenderer.d.ts +4 -1
  115. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  116. package/dist/renderers/DiffHunksRenderer.js +139 -19
  117. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  118. package/dist/renderers/FileRenderer.d.ts +2 -2
  119. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  120. package/dist/renderers/FileRenderer.js +5 -5
  121. package/dist/renderers/FileRenderer.js.map +1 -1
  122. package/dist/ssr/index.d.ts +2 -2
  123. package/dist/style.js +1 -1
  124. package/dist/style.js.map +1 -1
  125. package/dist/types.d.ts +19 -16
  126. package/dist/types.d.ts.map +1 -1
  127. package/dist/utils/computeEstimatedDiffHeights.js +9 -20
  128. package/dist/utils/computeEstimatedDiffHeights.js.map +1 -1
  129. package/dist/utils/getHighlighterThemeStyles.js +16 -12
  130. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  131. package/dist/utils/iterateOverDiff.js +147 -182
  132. package/dist/utils/iterateOverDiff.js.map +1 -1
  133. package/dist/utils/parsePatchFiles.js +93 -4
  134. package/dist/utils/parsePatchFiles.js.map +1 -1
  135. package/dist/utils/updateDiffHunks.d.ts +13 -0
  136. package/dist/utils/updateDiffHunks.d.ts.map +1 -0
  137. package/dist/utils/updateDiffHunks.js +171 -0
  138. package/dist/utils/updateDiffHunks.js.map +1 -0
  139. package/dist/utils/virtualDiffLayout.d.ts +24 -2
  140. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  141. package/dist/utils/virtualDiffLayout.js +49 -1
  142. package/dist/utils/virtualDiffLayout.js.map +1 -1
  143. package/dist/worker/WorkerPoolManager.js +1 -1
  144. package/dist/worker/WorkerPoolManager.js.map +1 -1
  145. package/dist/worker/{wasm-D4DU5jgR.js → wasm-BaDzIkIn.js} +2 -2
  146. package/dist/worker/wasm-BaDzIkIn.js.map +1 -0
  147. package/dist/worker/worker-portable.js +1021 -314
  148. package/dist/worker/worker-portable.js.map +1 -1
  149. package/dist/worker/worker.js +202 -196
  150. package/dist/worker/worker.js.map +1 -1
  151. package/package.json +4 -2
  152. package/dist/editor/css.d.ts +0 -6
  153. package/dist/editor/css.d.ts.map +0 -1
  154. package/dist/editor/css.js +0 -218
  155. package/dist/editor/css.js.map +0 -1
  156. package/dist/editor/quickEdit.d.ts.map +0 -1
  157. package/dist/editor/quickEdit.js.map +0 -1
  158. package/dist/worker/wasm-D4DU5jgR.js.map +0 -1
@@ -72,7 +72,6 @@ var FileDiff = class {
72
72
  mounted = false;
73
73
  enabled = true;
74
74
  editor;
75
- rerenderTimeout;
76
75
  constructor(options = { theme: DEFAULT_THEMES }, workerManager, isContainerManaged = false) {
77
76
  this.options = options;
78
77
  this.workerManager = workerManager;
@@ -94,11 +93,12 @@ var FileDiff = class {
94
93
  return new DiffHunksRenderer(this.getHunksRendererOptions(options), this.handleHighlightRender, this.workerManager);
95
94
  }
96
95
  getLineIndex = (lineNumber, side = "additions") => {
97
- if (this.fileDiff == null) return;
98
- const lastHunk = this.fileDiff.hunks.at(-1);
96
+ const fileDiff = this.hunksRenderer.getRenderDiff() ?? this.fileDiff;
97
+ if (fileDiff == null) return;
98
+ const lastHunk = fileDiff.hunks.at(-1);
99
99
  let targetUnifiedIndex;
100
100
  let targetSplitIndex;
101
- hunkIterator: for (const hunk of this.fileDiff.hunks) {
101
+ hunkIterator: for (const hunk of fileDiff.hunks) {
102
102
  let currentLineNumber = side === "deletions" ? hunk.deletionStart : hunk.additionStart;
103
103
  const hunkCount = side === "deletions" ? hunk.deletionCount : hunk.additionCount;
104
104
  let splitIndex = hunk.splitLineStart;
@@ -183,7 +183,8 @@ var FileDiff = class {
183
183
  setLineAnnotations(lineAnnotations) {
184
184
  this.lineAnnotations = lineAnnotations;
185
185
  }
186
- canPartiallyRender(forceRender, annotationsChanged, didContentChange) {
186
+ canPartiallyRender(forceRender, annotationsChanged, didContentChange, didEdit) {
187
+ if (didEdit) return true;
187
188
  if (forceRender || annotationsChanged || didContentChange || typeof this.options.hunkSeparators === "function") return false;
188
189
  return true;
189
190
  }
@@ -249,8 +250,6 @@ var FileDiff = class {
249
250
  this.enabled = false;
250
251
  this.editor?.cleanUp();
251
252
  this.editor = void 0;
252
- if (this.rerenderTimeout !== void 0) clearTimeout(this.rerenderTimeout);
253
- this.rerenderTimeout = void 0;
254
253
  }
255
254
  virtualizedSetup() {
256
255
  this.enabled = true;
@@ -351,15 +350,16 @@ var FileDiff = class {
351
350
  this.hunksRenderer.expandHunk(hunkIndex, direction, expansionLineCountOverride);
352
351
  this.rerender();
353
352
  };
354
- render({ oldFile, newFile, fileDiff, deferManagers = false, forceRender = false, preventEmit = false, lineAnnotations, fileContainer, containerWrapper, renderRange }) {
353
+ render({ oldFile, newFile, fileDiff, deferManagers = false, didEdit = false, forceRender = false, preventEmit = false, lineAnnotations, fileContainer, containerWrapper, renderRange }) {
355
354
  if (!this.enabled) throw new Error("FileDiff.render: attempting to call render after cleaned up");
355
+ this.editor?.postponeBackgroundTokenizeToNextFrame();
356
356
  const { collapsed = false, themeType = "system" } = this.options;
357
357
  const nextRenderRange = collapsed ? void 0 : renderRange;
358
358
  const themeChanged = this.hasThemeChanged();
359
359
  const filesDidChange = oldFile != null && newFile != null && (!areFilesEqual(oldFile, this.deletionFile) || !areFilesEqual(newFile, this.additionFile));
360
360
  let diffDidChange = fileDiff != null && fileDiff !== this.fileDiff;
361
361
  const annotationsChanged = lineAnnotations != null && (lineAnnotations.length > 0 || this.lineAnnotations.length > 0) ? lineAnnotations !== this.lineAnnotations : false;
362
- if (!collapsed && areRenderRangesEqual(nextRenderRange, this.renderRange) && !forceRender && !annotationsChanged && !themeChanged && (fileDiff != null && fileDiff === this.fileDiff || fileDiff == null && !filesDidChange)) return this.applyCachedThemeState(themeType);
362
+ if (!collapsed && areRenderRangesEqual(nextRenderRange, this.renderRange) && !didEdit && !forceRender && !annotationsChanged && !themeChanged && (fileDiff != null && fileDiff === this.fileDiff || fileDiff == null && !filesDidChange)) return this.applyCachedThemeState(themeType);
363
363
  const { renderRange: previousRenderRange } = this;
364
364
  this.renderRange = nextRenderRange;
365
365
  this.deletionFile = oldFile;
@@ -405,7 +405,7 @@ var FileDiff = class {
405
405
  }
406
406
  try {
407
407
  const pre = this.getOrCreatePreNode(fileContainer);
408
- if (!(this.canPartiallyRender(forceRender, annotationsChanged, filesDidChange || diffDidChange || themeChanged) && this.applyPartialRender({
408
+ if (!(this.canPartiallyRender(forceRender, annotationsChanged, filesDidChange || diffDidChange || themeChanged, didEdit) && this.applyPartialRender({
409
409
  previousRenderRange,
410
410
  renderRange: nextRenderRange
411
411
  }))) {
@@ -422,7 +422,7 @@ var FileDiff = class {
422
422
  this.pre = void 0;
423
423
  }
424
424
  this.renderSeparators(hunksResult.hunkData);
425
- }
425
+ } else if (didEdit && nextRenderRange != null) this.updateLineType(nextRenderRange);
426
426
  this.applyBuffers(pre, nextRenderRange);
427
427
  this.injectUnsafeCSS();
428
428
  this.renderAnnotations();
@@ -432,7 +432,7 @@ var FileDiff = class {
432
432
  const editor = this.editor;
433
433
  const file = this.getAdditionFile();
434
434
  if (editor != null && file != null) this.hunksRenderer.initializeHighlighter().then((highlighter) => {
435
- editor.syncWithRender(highlighter, fileContainer, file, this.lineAnnotations, this.renderRange, "advanced");
435
+ editor.syncToRenderedView(highlighter, fileContainer, file, diffDidChange, this.lineAnnotations, this.renderRange);
436
436
  });
437
437
  } catch (error) {
438
438
  if (disableErrorHandling) throw error;
@@ -456,53 +456,37 @@ var FileDiff = class {
456
456
  this.mounted = true;
457
457
  onPostRender?.(fileContainer, this, phase);
458
458
  }
459
- applyLayoutChange(textDocument, newLineAnnotations) {
460
- if (newLineAnnotations !== void 0 && newLineAnnotations !== this.lineAnnotations) {
461
- this.setLineAnnotations(newLineAnnotations);
462
- this.hunksRenderer.setLineAnnotations(this.lineAnnotations);
463
- }
464
- const deletionFile = this.getDeletionFile();
465
- if (deletionFile != null) {
466
- const { name, lang } = deletionFile;
467
- const newFile = {
468
- name,
469
- lang,
470
- cacheKey: name + "-" + Date.now()
471
- };
472
- Object.defineProperty(newFile, "contents", { get: () => textDocument.getText() });
473
- if (this.rerenderTimeout !== void 0) clearTimeout(this.rerenderTimeout);
474
- this.rerenderTimeout = setTimeout(() => {
475
- this.fileDiff = parseDiffFromFile(deletionFile, newFile, this.options.parseDiffOptions);
476
- this.hunksRenderer.renderDiff(this.fileDiff, this.renderRange);
477
- }, 500);
478
- }
479
- }
480
459
  attachEditor(editor) {
481
460
  this.editor?.cleanUp();
482
461
  const fileContainer = this.fileContainer;
483
462
  const file = this.getAdditionFile();
484
463
  if (fileContainer != null && file != null) this.hunksRenderer.initializeHighlighter().then((highlighter) => {
485
- editor.syncWithRender(highlighter, fileContainer, file, this.lineAnnotations, this.renderRange, "advanced");
464
+ editor.syncToRenderedView(highlighter, fileContainer, file, false, this.lineAnnotations, this.renderRange);
486
465
  });
487
466
  this.editor = editor;
488
467
  return () => {
489
468
  this.editor = void 0;
490
469
  };
491
470
  }
492
- getDeletionFile() {
493
- if (this.deletionFile != null) return this.deletionFile;
494
- const fileDiff = this.fileDiff;
495
- if (fileDiff != null && !fileDiff.isPartial) {
496
- const { name, lang, cacheKey } = fileDiff;
497
- const file = {
498
- name,
499
- lang,
500
- cacheKey
501
- };
502
- Object.defineProperty(file, "contents", { get: () => fileDiff.deletionLines.join("") });
503
- return file;
471
+ applyDocumentChange(textDocument, newLineAnnotations) {
472
+ this.hunksRenderer.applyDocumentChange(textDocument);
473
+ const renderDiff = this.hunksRenderer.getRenderDiff();
474
+ if (renderDiff != null) this.fileDiff = renderDiff;
475
+ this.rerender();
476
+ this.interactionManager.setSelectionDirty();
477
+ if (newLineAnnotations !== void 0 && newLineAnnotations !== this.lineAnnotations) {
478
+ this.setLineAnnotations(newLineAnnotations);
479
+ this.hunksRenderer.setLineAnnotations(this.lineAnnotations);
480
+ this.renderAnnotations();
504
481
  }
505
482
  }
483
+ updateRenderCache(dirtyLines, themeType, shouldRerender) {
484
+ this.hunksRenderer.updateRenderCache(dirtyLines, themeType);
485
+ if (shouldRerender === true) this.render({
486
+ didEdit: true,
487
+ renderRange: this.renderRange
488
+ });
489
+ }
506
490
  getAdditionFile() {
507
491
  if (this.additionFile != null) return this.additionFile;
508
492
  const fileDiff = this.fileDiff;
@@ -513,7 +497,10 @@ var FileDiff = class {
513
497
  lang,
514
498
  cacheKey
515
499
  };
516
- Object.defineProperty(file, "contents", { get: () => fileDiff.additionLines.join("") });
500
+ Object.defineProperty(file, "contents", {
501
+ enumerable: true,
502
+ get: () => fileDiff.additionLines.join("")
503
+ });
517
504
  return file;
518
505
  }
519
506
  }
@@ -1006,6 +993,26 @@ var FileDiff = class {
1006
993
  this.renderPartialColumn(columns[1], additionsAST, insertPosition);
1007
994
  } else throw new Error("FileDiff.insertPartialHTML: Invalid argument composition");
1008
995
  }
996
+ updateLineType(renderRange) {
997
+ if (this.options.diffStyle === "unified") return;
998
+ const hunksResult = this.hunksRenderer.renderDiff(this.fileDiff, renderRange);
999
+ if (hunksResult == null) return;
1000
+ const columns = this.getCodeColumns("split", this.codeUnified, this.codeDeletions, this.codeAdditions);
1001
+ if (columns == null || !Array.isArray(columns)) return;
1002
+ const applyLineType = (type, column) => {
1003
+ if (column == null) return;
1004
+ const ast = this.hunksRenderer.renderCodeAST(type, hunksResult);
1005
+ const gutterChildren = getElementChildren(ast?.[0]);
1006
+ const contentChildren = getElementChildren(ast?.[1]);
1007
+ for (const [el, astChildren] of [[column.gutter, gutterChildren], [column.content, contentChildren]]) if (astChildren != null && el.childElementCount === astChildren.length) for (let i = 0; i < astChildren.length; i++) {
1008
+ const gutterElement = el.children[i];
1009
+ const lineType = astChildren[i].properties["data-line-type"];
1010
+ if (lineType != null && gutterElement.dataset.lineType !== lineType) gutterElement.dataset.lineType = lineType;
1011
+ }
1012
+ };
1013
+ applyLineType("deletions", columns[0]);
1014
+ applyLineType("additions", columns[1]);
1015
+ }
1009
1016
  renderPartialColumn(column, ast, insertPosition) {
1010
1017
  if (column == null || ast == null) return;
1011
1018
  const gutterChildren = getElementChildren(ast[0]);
@@ -1205,6 +1212,9 @@ var FileDiff = class {
1205
1212
  return deletions != null || additions != null ? [deletions, additions] : void 0;
1206
1213
  }
1207
1214
  }
1215
+ updateBuffers(renderRange) {
1216
+ if (this.pre != null) this.applyBuffers(this.pre, renderRange);
1217
+ }
1208
1218
  applyBuffers(pre, renderRange) {
1209
1219
  if (renderRange == null || this.shouldDisableVirtualizationBuffers()) {
1210
1220
  if (this.bufferBefore != null) {