@pierre/diffs 1.1.0-beta.6 → 1.1.0-beta.8

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 (291) hide show
  1. package/dist/components/AdvancedVirtualizedFileDiff.d.ts +40 -0
  2. package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -0
  3. package/dist/components/AdvancedVirtualizedFileDiff.js +145 -0
  4. package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -0
  5. package/dist/components/AdvancedVirtualizer.d.ts +38 -0
  6. package/dist/components/AdvancedVirtualizer.d.ts.map +1 -0
  7. package/dist/components/AdvancedVirtualizer.js +201 -0
  8. package/dist/components/AdvancedVirtualizer.js.map +1 -0
  9. package/dist/components/File.d.ts +58 -33
  10. package/dist/components/File.d.ts.map +1 -1
  11. package/dist/components/File.js +223 -22
  12. package/dist/components/File.js.map +1 -1
  13. package/dist/components/FileDiff.d.ts +42 -16
  14. package/dist/components/FileDiff.d.ts.map +1 -1
  15. package/dist/components/FileDiff.js +505 -65
  16. package/dist/components/FileDiff.js.map +1 -1
  17. package/dist/components/FileStream.d.ts +5 -0
  18. package/dist/components/FileStream.d.ts.map +1 -1
  19. package/dist/components/FileStream.js +66 -8
  20. package/dist/components/FileStream.js.map +1 -1
  21. package/dist/components/VirtualizedFile.d.ts +33 -0
  22. package/dist/components/VirtualizedFile.d.ts.map +1 -0
  23. package/dist/components/VirtualizedFile.js +227 -0
  24. package/dist/components/VirtualizedFile.js.map +1 -0
  25. package/dist/components/VirtualizedFileDiff.d.ts +39 -0
  26. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -0
  27. package/dist/components/VirtualizedFileDiff.js +316 -0
  28. package/dist/components/VirtualizedFileDiff.js.map +1 -0
  29. package/dist/components/Virtualizer.d.ts +63 -0
  30. package/dist/components/Virtualizer.d.ts.map +1 -0
  31. package/dist/components/Virtualizer.js +369 -0
  32. package/dist/components/Virtualizer.js.map +1 -0
  33. package/dist/components/VirtulizerDevelopment.d.ts +14 -0
  34. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -0
  35. package/dist/components/web-components.d.ts +1 -1
  36. package/dist/components/web-components.d.ts.map +1 -1
  37. package/dist/constants.d.ts +4 -7
  38. package/dist/constants.d.ts.map +1 -1
  39. package/dist/constants.js +14 -6
  40. package/dist/constants.js.map +1 -1
  41. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  42. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  43. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  44. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  45. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  46. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  47. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  48. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  49. package/dist/highlighter/languages/registerCustomLanguage.d.ts +11 -4
  50. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  51. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  52. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  53. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  54. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  55. package/dist/highlighter/shared_highlighter.js.map +1 -1
  56. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  57. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  58. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  59. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  60. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  61. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  62. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  63. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  64. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  65. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  66. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  67. package/dist/index.d.ts +13 -10
  68. package/dist/index.js +10 -7
  69. package/dist/managers/LineSelectionManager.d.ts +14 -15
  70. package/dist/managers/LineSelectionManager.d.ts.map +1 -1
  71. package/dist/managers/LineSelectionManager.js +60 -71
  72. package/dist/managers/LineSelectionManager.js.map +1 -1
  73. package/dist/managers/MouseEventManager.d.ts +13 -6
  74. package/dist/managers/MouseEventManager.d.ts.map +1 -1
  75. package/dist/managers/MouseEventManager.js +161 -47
  76. package/dist/managers/MouseEventManager.js.map +1 -1
  77. package/dist/managers/ResizeManager.d.ts +6 -1
  78. package/dist/managers/ResizeManager.d.ts.map +1 -1
  79. package/dist/managers/ResizeManager.js +114 -64
  80. package/dist/managers/ResizeManager.js.map +1 -1
  81. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  82. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  83. package/dist/react/File.d.ts +1 -0
  84. package/dist/react/File.d.ts.map +1 -1
  85. package/dist/react/File.js +2 -1
  86. package/dist/react/File.js.map +1 -1
  87. package/dist/react/FileDiff.d.ts +1 -0
  88. package/dist/react/FileDiff.d.ts.map +1 -1
  89. package/dist/react/FileDiff.js +2 -1
  90. package/dist/react/FileDiff.js.map +1 -1
  91. package/dist/react/MultiFileDiff.d.ts +1 -0
  92. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  93. package/dist/react/MultiFileDiff.js +2 -1
  94. package/dist/react/MultiFileDiff.js.map +1 -1
  95. package/dist/react/PatchDiff.d.ts +1 -0
  96. package/dist/react/PatchDiff.d.ts.map +1 -1
  97. package/dist/react/PatchDiff.js +3 -2
  98. package/dist/react/PatchDiff.js.map +1 -1
  99. package/dist/react/Virtualizer.d.ts +25 -0
  100. package/dist/react/Virtualizer.d.ts.map +1 -0
  101. package/dist/react/Virtualizer.js +38 -0
  102. package/dist/react/Virtualizer.js.map +1 -0
  103. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  104. package/dist/react/WorkerPoolContext.js +1 -1
  105. package/dist/react/WorkerPoolContext.js.map +1 -1
  106. package/dist/react/constants.d.ts.map +1 -1
  107. package/dist/react/index.d.ts +3 -2
  108. package/dist/react/index.js +2 -1
  109. package/dist/react/jsx.d.ts.map +1 -1
  110. package/dist/react/types.d.ts +5 -3
  111. package/dist/react/types.d.ts.map +1 -1
  112. package/dist/react/utils/renderDiffChildren.d.ts +5 -5
  113. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  114. package/dist/react/utils/renderFileChildren.d.ts +5 -5
  115. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  116. package/dist/react/utils/templateRender.d.ts.map +1 -1
  117. package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
  118. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  119. package/dist/react/utils/useFileDiffInstance.js +6 -2
  120. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  121. package/dist/react/utils/useFileInstance.d.ts +5 -3
  122. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  123. package/dist/react/utils/useFileInstance.js +6 -2
  124. package/dist/react/utils/useFileInstance.js.map +1 -1
  125. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  126. package/dist/react/utils/useStableCallback.js.map +1 -1
  127. package/dist/renderers/DiffHunksRenderer.d.ts +15 -10
  128. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  129. package/dist/renderers/DiffHunksRenderer.js +240 -136
  130. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  131. package/dist/renderers/FileRenderer.d.ts +12 -5
  132. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  133. package/dist/renderers/FileRenderer.js +90 -31
  134. package/dist/renderers/FileRenderer.js.map +1 -1
  135. package/dist/shiki-stream/stream.d.ts +2 -2
  136. package/dist/shiki-stream/stream.d.ts.map +1 -1
  137. package/dist/shiki-stream/stream.js.map +1 -1
  138. package/dist/shiki-stream/tokenizer.d.ts +2 -2
  139. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  140. package/dist/shiki-stream/tokenizer.js.map +1 -1
  141. package/dist/shiki-stream/types.d.ts +18 -18
  142. package/dist/shiki-stream/types.d.ts.map +1 -1
  143. package/dist/sprite.d.ts +1 -1
  144. package/dist/sprite.d.ts.map +1 -1
  145. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  146. package/dist/ssr/FileDiffReact.js +1 -1
  147. package/dist/ssr/index.d.ts +2 -2
  148. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  149. package/dist/ssr/preloadFile.d.ts.map +1 -1
  150. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  151. package/dist/ssr/preloadPatchFile.js.map +1 -1
  152. package/dist/ssr/renderHTML.d.ts.map +1 -1
  153. package/dist/style.js +1 -1
  154. package/dist/style.js.map +1 -1
  155. package/dist/types.d.ts +191 -172
  156. package/dist/types.d.ts.map +1 -1
  157. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  158. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  159. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  160. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  161. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  162. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  163. package/dist/utils/areOptionsEqual.d.ts +1 -1
  164. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  165. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  166. package/dist/utils/arePrePropertiesEqual.js +1 -1
  167. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  168. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  169. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  170. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  171. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  172. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  173. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  174. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  175. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  176. package/dist/utils/createContentColumn.d.ts +7 -0
  177. package/dist/utils/createContentColumn.d.ts.map +1 -0
  178. package/dist/utils/createContentColumn.js +17 -0
  179. package/dist/utils/createContentColumn.js.map +1 -0
  180. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  181. package/dist/utils/createEmptyRowBuffer.js +2 -1
  182. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  183. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  184. package/dist/utils/createHoverContentNode.d.ts.map +1 -1
  185. package/dist/utils/createNoNewlineElement.d.ts +2 -1
  186. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  187. package/dist/utils/createNoNewlineElement.js +3 -6
  188. package/dist/utils/createNoNewlineElement.js.map +1 -1
  189. package/dist/utils/createPreElement.d.ts +2 -1
  190. package/dist/utils/createPreElement.d.ts.map +1 -1
  191. package/dist/utils/createPreElement.js +4 -3
  192. package/dist/utils/createPreElement.js.map +1 -1
  193. package/dist/utils/createRowNodes.d.ts.map +1 -1
  194. package/dist/utils/createSeparator.d.ts.map +1 -1
  195. package/dist/utils/createSeparator.js +1 -1
  196. package/dist/utils/createSeparator.js.map +1 -1
  197. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  198. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  199. package/dist/utils/createStyleElement.d.ts.map +1 -1
  200. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  201. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  202. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  203. package/dist/utils/cssWrappers.d.ts.map +1 -1
  204. package/dist/utils/diffAcceptRejectHunk.d.ts +1 -1
  205. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  206. package/dist/utils/formatCSSVariablePrefix.d.ts +1 -1
  207. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  208. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  209. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  210. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  211. package/dist/utils/getHunkSeparatorSlotName.d.ts +3 -1
  212. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  213. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  214. package/dist/utils/getIconForType.d.ts +1 -1
  215. package/dist/utils/getIconForType.d.ts.map +1 -1
  216. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  217. package/dist/utils/getLineEndingType.d.ts +1 -1
  218. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  219. package/dist/utils/getLineNodes.d.ts.map +1 -1
  220. package/dist/utils/getOrCreateCodeNode.d.ts +4 -2
  221. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  222. package/dist/utils/getOrCreateCodeNode.js +9 -6
  223. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  224. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  225. package/dist/utils/getThemes.d.ts.map +1 -1
  226. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  227. package/dist/utils/hast_utils.d.ts +6 -3
  228. package/dist/utils/hast_utils.d.ts.map +1 -1
  229. package/dist/utils/hast_utils.js +28 -4
  230. package/dist/utils/hast_utils.js.map +1 -1
  231. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  232. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  233. package/dist/utils/iterateOverDiff.d.ts +26 -13
  234. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  235. package/dist/utils/iterateOverDiff.js +94 -55
  236. package/dist/utils/iterateOverDiff.js.map +1 -1
  237. package/dist/utils/iterateOverFile.d.ts +50 -0
  238. package/dist/utils/iterateOverFile.d.ts.map +1 -0
  239. package/dist/utils/iterateOverFile.js +49 -0
  240. package/dist/utils/iterateOverFile.js.map +1 -0
  241. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  242. package/dist/utils/parseDiffFromFile.d.ts +6 -6
  243. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  244. package/dist/utils/parseDiffFromFile.js +3 -2
  245. package/dist/utils/parseDiffFromFile.js.map +1 -1
  246. package/dist/utils/parseLineType.d.ts +1 -1
  247. package/dist/utils/parseLineType.d.ts.map +1 -1
  248. package/dist/utils/parsePatchFiles.d.ts +12 -10
  249. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  250. package/dist/utils/parsePatchFiles.js +16 -9
  251. package/dist/utils/parsePatchFiles.js.map +1 -1
  252. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  253. package/dist/utils/processLine.d.ts.map +1 -1
  254. package/dist/utils/processLine.js +7 -24
  255. package/dist/utils/processLine.js.map +1 -1
  256. package/dist/utils/renderDiffWithHighlighter.d.ts +2 -2
  257. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  258. package/dist/utils/renderDiffWithHighlighter.js +15 -14
  259. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  260. package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
  261. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  262. package/dist/utils/renderFileWithHighlighter.js +30 -4
  263. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  264. package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
  265. package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
  266. package/dist/utils/resolveVirtualFileMetrics.js +24 -0
  267. package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
  268. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  269. package/dist/utils/setWrapperNodeProps.d.ts +1 -0
  270. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  271. package/dist/utils/setWrapperNodeProps.js +19 -12
  272. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  273. package/dist/utils/splitFileContents.d.ts +12 -0
  274. package/dist/utils/splitFileContents.d.ts.map +1 -0
  275. package/dist/utils/splitFileContents.js +17 -0
  276. package/dist/utils/splitFileContents.js.map +1 -0
  277. package/dist/utils/trimPatchContext.d.ts +5 -5
  278. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  279. package/dist/worker/WorkerPoolManager.d.ts +2 -2
  280. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  281. package/dist/worker/WorkerPoolManager.js +36 -24
  282. package/dist/worker/WorkerPoolManager.js.map +1 -1
  283. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  284. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  285. package/dist/worker/types.d.ts +26 -26
  286. package/dist/worker/types.d.ts.map +1 -1
  287. package/dist/worker/worker-portable.js +323 -143
  288. package/dist/worker/worker-portable.js.map +1 -1
  289. package/dist/worker/worker.js +206 -106
  290. package/dist/worker/worker.js.map +1 -1
  291. package/package.json +52 -53
@@ -11680,16 +11680,24 @@ const DEFAULT_THEMES = {
11680
11680
  };
11681
11681
  const UNSAFE_CSS_ATTRIBUTE = "data-unsafe-css";
11682
11682
  const CORE_CSS_ATTRIBUTE = "data-core-css";
11683
- const LINE_HUNK_COUNT = 10;
11684
- const LINE_HEIGHT = 20;
11685
- const DIFF_HEADER_HEIGHT = 44;
11686
- const HUNK_SEPARATOR_HEIGHT = 32;
11687
- const FILE_GAP = 8;
11688
11683
  const DEFAULT_COLLAPSED_CONTEXT_THRESHOLD = 1;
11684
+ const DEFAULT_VIRTUAL_FILE_METRICS = {
11685
+ hunkLineCount: 50,
11686
+ lineHeight: 20,
11687
+ diffHeaderHeight: 44,
11688
+ hunkSeparatorHeight: 32,
11689
+ fileGap: 8
11690
+ };
11689
11691
  const DEFAULT_EXPANDED_REGION = Object.freeze({
11690
11692
  fromStart: 0,
11691
11693
  fromEnd: 0
11692
11694
  });
11695
+ const DEFAULT_RENDER_RANGE = {
11696
+ startingLine: 0,
11697
+ totalLines: Infinity,
11698
+ bufferBefore: 0,
11699
+ bufferAfter: 0
11700
+ };
11693
11701
 
11694
11702
  //#endregion
11695
11703
  //#region src/highlighter/languages/constants.ts
@@ -11746,7 +11754,7 @@ function attachResolvedThemes(themes, highlighter$1) {
11746
11754
  }
11747
11755
 
11748
11756
  //#endregion
11749
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/base.js
11757
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/base.js
11750
11758
  var Diff = class {
11751
11759
  diff(oldStr, newStr, options = {}) {
11752
11760
  let callback;
@@ -11970,7 +11978,7 @@ var Diff = class {
11970
11978
  };
11971
11979
 
11972
11980
  //#endregion
11973
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/character.js
11981
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/character.js
11974
11982
  var CharacterDiff = class extends Diff {};
11975
11983
  const characterDiff = new CharacterDiff();
11976
11984
  function diffChars(oldStr, newStr, options) {
@@ -11978,7 +11986,7 @@ function diffChars(oldStr, newStr, options) {
11978
11986
  }
11979
11987
 
11980
11988
  //#endregion
11981
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/string.js
11989
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/util/string.js
11982
11990
  function longestCommonPrefix(str1, str2) {
11983
11991
  let i$2;
11984
11992
  for (i$2 = 0; i$2 < str1.length && i$2 < str2.length; i$2++) {
@@ -12087,8 +12095,8 @@ function leadingWs(string) {
12087
12095
  }
12088
12096
 
12089
12097
  //#endregion
12090
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/word.js
12091
- const extendedWordChars = "a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}";
12098
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/word.js
12099
+ const extendedWordChars = "a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}";
12092
12100
  const tokenizeIncludingWhitespace = new RegExp(`[${extendedWordChars}]+|\\s+|[^${extendedWordChars}]`, "ug");
12093
12101
  var WordDiff = class extends Diff {
12094
12102
  equals(left, right, options) {
@@ -12105,7 +12113,15 @@ var WordDiff = class extends Diff {
12105
12113
  if (segmenter.resolvedOptions().granularity != "word") {
12106
12114
  throw new Error("The segmenter passed must have a granularity of \"word\"");
12107
12115
  }
12108
- parts = Array.from(segmenter.segment(value), (segment) => segment.segment);
12116
+ parts = [];
12117
+ for (const segmentObj of Array.from(segmenter.segment(value))) {
12118
+ const segment = segmentObj.segment;
12119
+ if (parts.length && /\s/.test(parts[parts.length - 1]) && /\s/.test(segment)) {
12120
+ parts[parts.length - 1] += segment;
12121
+ } else {
12122
+ parts.push(segment);
12123
+ }
12124
+ }
12109
12125
  } else {
12110
12126
  parts = value.match(tokenizeIncludingWhitespace) || [];
12111
12127
  }
@@ -12233,7 +12249,7 @@ function diffWordsWithSpace(oldStr, newStr, options) {
12233
12249
  }
12234
12250
 
12235
12251
  //#endregion
12236
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/params.js
12252
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/util/params.js
12237
12253
  function generateOptions(options, defaults) {
12238
12254
  if (typeof options === "function") {
12239
12255
  defaults.callback = options;
@@ -12249,7 +12265,7 @@ function generateOptions(options, defaults) {
12249
12265
  }
12250
12266
 
12251
12267
  //#endregion
12252
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/line.js
12268
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/line.js
12253
12269
  var LineDiff = class extends Diff {
12254
12270
  constructor() {
12255
12271
  super(...arguments);
@@ -12302,7 +12318,7 @@ function tokenize(value, options) {
12302
12318
  }
12303
12319
 
12304
12320
  //#endregion
12305
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/sentence.js
12321
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js
12306
12322
  function isSentenceEndPunct(char) {
12307
12323
  return char == "." || char == "!" || char == "?";
12308
12324
  }
@@ -12335,7 +12351,7 @@ function diffSentences(oldStr, newStr, options) {
12335
12351
  }
12336
12352
 
12337
12353
  //#endregion
12338
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/css.js
12354
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/css.js
12339
12355
  var CssDiff = class extends Diff {
12340
12356
  tokenize(value) {
12341
12357
  return value.split(/([{}:;,]|\s+)/);
@@ -12347,7 +12363,7 @@ function diffCss(oldStr, newStr, options) {
12347
12363
  }
12348
12364
 
12349
12365
  //#endregion
12350
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/json.js
12366
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/json.js
12351
12367
  var JsonDiff = class extends Diff {
12352
12368
  constructor() {
12353
12369
  super(...arguments);
@@ -12421,7 +12437,7 @@ function canonicalize(obj, stack, replacementStack, replacer, key$1) {
12421
12437
  }
12422
12438
 
12423
12439
  //#endregion
12424
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/array.js
12440
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/array.js
12425
12441
  var ArrayDiff = class extends Diff {
12426
12442
  tokenize(value) {
12427
12443
  return value.slice();
@@ -12439,7 +12455,7 @@ function diffArrays(oldArr, newArr, options) {
12439
12455
  }
12440
12456
 
12441
12457
  //#endregion
12442
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/line-endings.js
12458
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/line-endings.js
12443
12459
  function unixToWin(patch) {
12444
12460
  if (Array.isArray(patch)) {
12445
12461
  return patch.map((p$1) => unixToWin(p$1));
@@ -12479,7 +12495,7 @@ function isWin(patch) {
12479
12495
  }
12480
12496
 
12481
12497
  //#endregion
12482
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/parse.js
12498
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/parse.js
12483
12499
  /**
12484
12500
  * Parses a patch into structured data, in the same structure returned by `structuredPatch`.
12485
12501
  *
@@ -12496,9 +12512,9 @@ function parsePatch(uniDiff) {
12496
12512
  if (/^(---|\+\+\+|@@)\s/.test(line)) {
12497
12513
  break;
12498
12514
  }
12499
- const header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
12500
- if (header) {
12501
- index.index = header[1];
12515
+ const headerMatch = /^(?:Index:|diff(?: -r \w+)+)\s+/.exec(line);
12516
+ if (headerMatch) {
12517
+ index.index = line.substring(headerMatch[0].length).trim();
12502
12518
  }
12503
12519
  i$2++;
12504
12520
  }
@@ -12519,14 +12535,14 @@ function parsePatch(uniDiff) {
12519
12535
  }
12520
12536
  }
12521
12537
  function parseFileHeader(index) {
12522
- const fileHeader = /^(---|\+\+\+)\s+(.*)\r?$/.exec(diffstr[i$2]);
12523
- if (fileHeader) {
12524
- const data = fileHeader[2].split(" ", 2), header = (data[1] || "").trim();
12538
+ const fileHeaderMatch = /^(---|\+\+\+)\s+/.exec(diffstr[i$2]);
12539
+ if (fileHeaderMatch) {
12540
+ const prefix = fileHeaderMatch[1], data = diffstr[i$2].substring(3).trim().split(" ", 2), header = (data[1] || "").trim();
12525
12541
  let fileName = data[0].replace(/\\\\/g, "\\");
12526
- if (/^".*"$/.test(fileName)) {
12542
+ if (fileName.startsWith("\"") && fileName.endsWith("\"")) {
12527
12543
  fileName = fileName.substr(1, fileName.length - 2);
12528
12544
  }
12529
- if (fileHeader[1] === "---") {
12545
+ if (prefix === "---") {
12530
12546
  index.oldFileName = fileName;
12531
12547
  index.oldHeader = header;
12532
12548
  } else {
@@ -12590,7 +12606,7 @@ function parsePatch(uniDiff) {
12590
12606
  }
12591
12607
 
12592
12608
  //#endregion
12593
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/distance-iterator.js
12609
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/util/distance-iterator.js
12594
12610
  function distance_iterator_default(start, minLine, maxLine) {
12595
12611
  let wantForward = true, backwardExhausted = false, forwardExhausted = false, localOffset = 1;
12596
12612
  return function iterator() {
@@ -12620,7 +12636,7 @@ function distance_iterator_default(start, minLine, maxLine) {
12620
12636
  }
12621
12637
 
12622
12638
  //#endregion
12623
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/apply.js
12639
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/apply.js
12624
12640
  /**
12625
12641
  * attempts to apply a unified diff patch.
12626
12642
  *
@@ -12839,7 +12855,7 @@ function applyPatches(uniDiff, options) {
12839
12855
  }
12840
12856
 
12841
12857
  //#endregion
12842
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/reverse.js
12858
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/reverse.js
12843
12859
  function reversePatch(structuredPatch$1) {
12844
12860
  if (Array.isArray(structuredPatch$1)) {
12845
12861
  return structuredPatch$1.map((patch) => reversePatch(patch)).reverse();
@@ -12870,7 +12886,22 @@ function reversePatch(structuredPatch$1) {
12870
12886
  }
12871
12887
 
12872
12888
  //#endregion
12873
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/create.js
12889
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/create.js
12890
+ const INCLUDE_HEADERS = {
12891
+ includeIndex: true,
12892
+ includeUnderline: true,
12893
+ includeFileHeaders: true
12894
+ };
12895
+ const FILE_HEADERS_ONLY = {
12896
+ includeIndex: false,
12897
+ includeUnderline: false,
12898
+ includeFileHeaders: true
12899
+ };
12900
+ const OMIT_HEADERS = {
12901
+ includeIndex: false,
12902
+ includeUnderline: false,
12903
+ includeFileHeaders: false
12904
+ };
12874
12905
  function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
12875
12906
  let optionsObj;
12876
12907
  if (!options) {
@@ -12984,17 +13015,27 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne
12984
13015
  * creates a unified diff patch.
12985
13016
  * @param patch either a single structured patch object (as returned by `structuredPatch`) or an array of them (as returned by `parsePatch`)
12986
13017
  */
12987
- function formatPatch(patch) {
13018
+ function formatPatch(patch, headerOptions) {
13019
+ if (!headerOptions) {
13020
+ headerOptions = INCLUDE_HEADERS;
13021
+ }
12988
13022
  if (Array.isArray(patch)) {
12989
- return patch.map(formatPatch).join("\n");
13023
+ if (patch.length > 1 && !headerOptions.includeFileHeaders) {
13024
+ throw new Error("Cannot omit file headers on a multi-file patch. " + "(The result would be unparseable; how would a tool trying to apply " + "the patch know which changes are to which file?)");
13025
+ }
13026
+ return patch.map((p$1) => formatPatch(p$1, headerOptions)).join("\n");
12990
13027
  }
12991
13028
  const ret = [];
12992
- if (patch.oldFileName == patch.newFileName) {
13029
+ if (headerOptions.includeIndex && patch.oldFileName == patch.newFileName) {
12993
13030
  ret.push("Index: " + patch.oldFileName);
12994
13031
  }
12995
- ret.push("===================================================================");
12996
- ret.push("--- " + patch.oldFileName + (typeof patch.oldHeader === "undefined" ? "" : " " + patch.oldHeader));
12997
- ret.push("+++ " + patch.newFileName + (typeof patch.newHeader === "undefined" ? "" : " " + patch.newHeader));
13032
+ if (headerOptions.includeUnderline) {
13033
+ ret.push("===================================================================");
13034
+ }
13035
+ if (headerOptions.includeFileHeaders) {
13036
+ ret.push("--- " + patch.oldFileName + (typeof patch.oldHeader === "undefined" ? "" : " " + patch.oldHeader));
13037
+ ret.push("+++ " + patch.newFileName + (typeof patch.newHeader === "undefined" ? "" : " " + patch.newHeader));
13038
+ }
12998
13039
  for (let i$2 = 0; i$2 < patch.hunks.length; i$2++) {
12999
13040
  const hunk = patch.hunks[i$2];
13000
13041
  if (hunk.oldLines === 0) {
@@ -13019,14 +13060,14 @@ function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader
13019
13060
  if (!patchObj) {
13020
13061
  return;
13021
13062
  }
13022
- return formatPatch(patchObj);
13063
+ return formatPatch(patchObj, options === null || options === void 0 ? void 0 : options.headerOptions);
13023
13064
  } else {
13024
13065
  const { callback } = options;
13025
13066
  structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, Object.assign(Object.assign({}, options), { callback: (patchObj) => {
13026
13067
  if (!patchObj) {
13027
13068
  callback(undefined);
13028
13069
  } else {
13029
- callback(formatPatch(patchObj));
13070
+ callback(formatPatch(patchObj, options.headerOptions));
13030
13071
  }
13031
13072
  } }));
13032
13073
  }
@@ -13049,7 +13090,7 @@ function splitLines(text$1) {
13049
13090
  }
13050
13091
 
13051
13092
  //#endregion
13052
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/dmp.js
13093
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/convert/dmp.js
13053
13094
  /**
13054
13095
  * converts a list of change objects to the format returned by Google's [diff-match-patch](https://github.com/google/diff-match-patch) library
13055
13096
  */
@@ -13071,7 +13112,7 @@ function convertChangesToDMP(changes) {
13071
13112
  }
13072
13113
 
13073
13114
  //#endregion
13074
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/xml.js
13115
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/convert/xml.js
13075
13116
  /**
13076
13117
  * converts a list of change objects to a serialized XML format
13077
13118
  */
@@ -13824,12 +13865,36 @@ function findCodeElement(nodes) {
13824
13865
  }
13825
13866
  return undefined;
13826
13867
  }
13827
- function createBufferElement(type, height) {
13868
+ function createGutterWrapper(children) {
13869
+ return createHastElement({
13870
+ tagName: "div",
13871
+ properties: { "data-gutter": "" },
13872
+ children
13873
+ });
13874
+ }
13875
+ function createGutterItem(lineType, lineNumber, lineIndex) {
13876
+ return createHastElement({
13877
+ tagName: "div",
13878
+ properties: {
13879
+ "data-line-type": lineType,
13880
+ "data-column-number": lineNumber,
13881
+ "data-line-index": lineIndex
13882
+ },
13883
+ children: lineNumber != null ? [createHastElement({
13884
+ tagName: "span",
13885
+ properties: { "data-line-number-content": "" },
13886
+ children: [createTextNodeElement(`${lineNumber}`)]
13887
+ })] : undefined
13888
+ });
13889
+ }
13890
+ function createGutterGap(type, bufferType, size) {
13828
13891
  return createHastElement({
13829
13892
  tagName: "div",
13830
13893
  properties: {
13831
- "data-virtualized-buffer": type,
13832
- style: `height: ${height}px`
13894
+ "data-gutter-buffer": bufferType,
13895
+ "data-buffer-size": size,
13896
+ "data-line-type": bufferType === "annotation" ? undefined : type,
13897
+ style: bufferType === "annotation" ? `grid-row: span ${size};` : `grid-row: span ${size};min-height:calc(${size} * 1lh);`
13833
13898
  }
13834
13899
  });
13835
13900
  }
@@ -13847,33 +13912,15 @@ function processLine(node, line, state) {
13847
13912
  });
13848
13913
  throw new Error(errorMessage);
13849
13914
  }
13850
- node.tagName = "span";
13851
- node.properties["data-column-content"] = "";
13915
+ node.tagName = "div";
13916
+ node.properties["data-line"] = lineInfo.lineNumber;
13917
+ node.properties["data-alt-line"] = lineInfo.altLineNumber;
13918
+ node.properties["data-line-type"] = lineInfo.type;
13919
+ node.properties["data-line-index"] = lineInfo.lineIndex;
13852
13920
  if (node.children.length === 0) {
13853
13921
  node.children.push(createTextNodeElement("\n"));
13854
13922
  }
13855
- const children = [createHastElement({
13856
- tagName: "span",
13857
- children: [createHastElement({
13858
- tagName: "span",
13859
- children: [{
13860
- type: "text",
13861
- value: `${lineInfo.lineNumber}`
13862
- }],
13863
- properties: { "data-line-number-content": "" }
13864
- })],
13865
- properties: { "data-column-number": "" }
13866
- }), node];
13867
- return createHastElement({
13868
- tagName: "div",
13869
- children,
13870
- properties: {
13871
- "data-line": lineInfo.lineNumber,
13872
- "data-alt-line": lineInfo.altLineNumber,
13873
- "data-line-type": lineInfo.type,
13874
- "data-line-index": lineInfo.lineIndex
13875
- }
13876
- });
13923
+ return node;
13877
13924
  }
13878
13925
 
13879
13926
  //#endregion
@@ -14499,16 +14546,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14499
14546
  hunk,
14500
14547
  collapsedBefore: 0,
14501
14548
  collapsedAfter: 0,
14502
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
14503
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
14504
- splitLineIndex: splitLineIndex$1 + index,
14505
- deletionLineIndex: deletionLineIndex$1 + index,
14506
- additionLineIndex: additionLineIndex$1 + index,
14507
- deletionLineNumber: deletionLineNumber$1 + index,
14508
- additionLineNumber: additionLineNumber$1 + index,
14509
14549
  type: "context-expanded",
14510
- noEOFCRAddition: false,
14511
- noEOFCRDeletion: false
14550
+ deletionLine: {
14551
+ lineNumber: deletionLineNumber$1 + index,
14552
+ lineIndex: deletionLineIndex$1 + index,
14553
+ noEOFCR: false,
14554
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14555
+ splitLineIndex: splitLineIndex$1 + index
14556
+ },
14557
+ additionLine: {
14558
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14559
+ splitLineIndex: splitLineIndex$1 + index,
14560
+ lineIndex: additionLineIndex$1 + index,
14561
+ lineNumber: additionLineNumber$1 + index,
14562
+ noEOFCR: false
14563
+ }
14512
14564
  })) {
14513
14565
  break hunkIterator;
14514
14566
  }
@@ -14531,16 +14583,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14531
14583
  hunk,
14532
14584
  collapsedBefore: getPendingCollapsed(),
14533
14585
  collapsedAfter: 0,
14534
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
14535
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
14536
- splitLineIndex: splitLineIndex$1 + index,
14537
- deletionLineIndex: deletionLineIndex$1 + index,
14538
- additionLineIndex: additionLineIndex$1 + index,
14539
- deletionLineNumber: deletionLineNumber$1 + index,
14540
- additionLineNumber: additionLineNumber$1 + index,
14541
14586
  type: "context-expanded",
14542
- noEOFCRAddition: false,
14543
- noEOFCRDeletion: false
14587
+ deletionLine: {
14588
+ lineNumber: deletionLineNumber$1 + index,
14589
+ lineIndex: deletionLineIndex$1 + index,
14590
+ noEOFCR: false,
14591
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14592
+ splitLineIndex: splitLineIndex$1 + index
14593
+ },
14594
+ additionLine: {
14595
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14596
+ splitLineIndex: splitLineIndex$1 + index,
14597
+ lineIndex: additionLineIndex$1 + index,
14598
+ lineNumber: additionLineNumber$1 + index,
14599
+ noEOFCR: false
14600
+ }
14544
14601
  })) {
14545
14602
  break hunkIterator;
14546
14603
  }
@@ -14578,16 +14635,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14578
14635
  hunk,
14579
14636
  collapsedBefore: getPendingCollapsed(),
14580
14637
  collapsedAfter: getTrailingCollapsedAfter(unifiedRowIndex, splitRowIndex),
14581
- unifiedDeletionLineIndex: unifiedRowIndex,
14582
- unifiedAdditionLineIndex: unifiedRowIndex,
14583
- splitLineIndex: splitRowIndex,
14584
- deletionLineIndex: deletionLineIndex + index,
14585
- additionLineIndex: additionLineIndex + index,
14586
- deletionLineNumber: deletionLineNumber + index,
14587
- additionLineNumber: additionLineNumber + index,
14588
14638
  type: "context",
14589
- noEOFCRAddition: isLastLine && hunk.noEOFCRAdditions,
14590
- noEOFCRDeletion: isLastLine && hunk.noEOFCRDeletions
14639
+ deletionLine: {
14640
+ lineNumber: deletionLineNumber + index,
14641
+ lineIndex: deletionLineIndex + index,
14642
+ noEOFCR: isLastLine && hunk.noEOFCRDeletions,
14643
+ unifiedLineIndex: unifiedRowIndex,
14644
+ splitLineIndex: splitRowIndex
14645
+ },
14646
+ additionLine: {
14647
+ unifiedLineIndex: unifiedRowIndex,
14648
+ splitLineIndex: splitRowIndex,
14649
+ lineIndex: additionLineIndex + index,
14650
+ lineNumber: additionLineNumber + index,
14651
+ noEOFCR: isLastLine && hunk.noEOFCRAdditions
14652
+ }
14591
14653
  })) {
14592
14654
  break hunkIterator;
14593
14655
  }
@@ -14665,16 +14727,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14665
14727
  hunk: undefined,
14666
14728
  collapsedBefore: 0,
14667
14729
  collapsedAfter: isLastLine ? collapsedLines : 0,
14668
- unifiedDeletionLineIndex: unifiedLineIndex + index,
14669
- unifiedAdditionLineIndex: unifiedLineIndex + index,
14670
- splitLineIndex: splitLineIndex + index,
14671
- additionLineIndex: additionLineIndex + index,
14672
- deletionLineIndex: deletionLineIndex + index,
14673
- additionLineNumber: additionLineNumber + index,
14674
- deletionLineNumber: deletionLineNumber + index,
14675
14730
  type: "context-expanded",
14676
- noEOFCRAddition: false,
14677
- noEOFCRDeletion: false
14731
+ deletionLine: {
14732
+ lineNumber: deletionLineNumber + index,
14733
+ lineIndex: deletionLineIndex + index,
14734
+ noEOFCR: false,
14735
+ unifiedLineIndex: unifiedLineIndex + index,
14736
+ splitLineIndex: splitLineIndex + index
14737
+ },
14738
+ additionLine: {
14739
+ unifiedLineIndex: unifiedLineIndex + index,
14740
+ splitLineIndex: splitLineIndex + index,
14741
+ lineIndex: additionLineIndex + index,
14742
+ lineNumber: additionLineNumber + index,
14743
+ noEOFCR: false
14744
+ }
14678
14745
  })) {
14679
14746
  break hunkIterator;
14680
14747
  }
@@ -14779,39 +14846,61 @@ function getChangeIterationRanges(state, content, diffStyle) {
14779
14846
  return merged;
14780
14847
  }
14781
14848
  function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, diffStyle, index, unifiedLineIndex, splitLineIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, content, isLastContent, unifiedCount, splitCount }) {
14782
- if (diffStyle === "unified") {
14849
+ const unifiedDeletionLineIndex = index < content.deletions ? unifiedLineIndex + index : undefined;
14850
+ const unifiedAdditionLineIndex = diffStyle === "unified" ? index >= content.deletions ? unifiedLineIndex + index : undefined : index < content.additions ? unifiedLineIndex + content.deletions + index : undefined;
14851
+ const resolvedSplitLineIndex = diffStyle === "unified" ? splitLineIndex + (index < content.deletions ? index : index - content.deletions) : splitLineIndex + index;
14852
+ const deletionLineIndexValue = index < content.deletions ? deletionLineIndex + index : undefined;
14853
+ const deletionLineNumberValue = index < content.deletions ? deletionLineNumber + index : undefined;
14854
+ const additionLineIndexValue = diffStyle === "unified" ? index >= content.deletions ? additionLineIndex + (index - content.deletions) : undefined : index < content.additions ? additionLineIndex + index : undefined;
14855
+ const additionLineNumberValue = diffStyle === "unified" ? index >= content.deletions ? additionLineNumber + (index - content.deletions) : undefined : index < content.additions ? additionLineNumber + index : undefined;
14856
+ const noEOFCRDeletion = diffStyle === "unified" ? isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions : isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions;
14857
+ const noEOFCRAddition = diffStyle === "unified" ? isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions : isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions;
14858
+ const deletionLine = deletionLineIndexValue != null && deletionLineNumberValue != null && unifiedDeletionLineIndex != null ? {
14859
+ lineNumber: deletionLineNumberValue,
14860
+ lineIndex: deletionLineIndexValue,
14861
+ noEOFCR: noEOFCRDeletion,
14862
+ unifiedLineIndex: unifiedDeletionLineIndex,
14863
+ splitLineIndex: resolvedSplitLineIndex
14864
+ } : undefined;
14865
+ const additionLine = additionLineIndexValue != null && additionLineNumberValue != null && unifiedAdditionLineIndex != null ? {
14866
+ unifiedLineIndex: unifiedAdditionLineIndex,
14867
+ splitLineIndex: resolvedSplitLineIndex,
14868
+ lineIndex: additionLineIndexValue,
14869
+ lineNumber: additionLineNumberValue,
14870
+ noEOFCR: noEOFCRAddition
14871
+ } : undefined;
14872
+ if (deletionLine == null && additionLine != null) {
14873
+ return {
14874
+ type: "change",
14875
+ hunkIndex,
14876
+ hunk,
14877
+ collapsedAfter,
14878
+ collapsedBefore,
14879
+ deletionLine: undefined,
14880
+ additionLine
14881
+ };
14882
+ } else if (deletionLine != null && additionLine == null) {
14783
14883
  return {
14784
14884
  type: "change",
14785
14885
  hunkIndex,
14786
14886
  hunk,
14787
14887
  collapsedAfter,
14788
14888
  collapsedBefore,
14789
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : undefined,
14790
- unifiedAdditionLineIndex: index >= content.deletions ? unifiedLineIndex + index : undefined,
14791
- splitLineIndex: splitLineIndex + (index < content.deletions ? index : index - content.deletions),
14792
- additionLineIndex: index >= content.deletions ? additionLineIndex + (index - content.deletions) : undefined,
14793
- additionLineNumber: index >= content.deletions ? additionLineNumber + (index - content.deletions) : undefined,
14794
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : undefined,
14795
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : undefined,
14796
- noEOFCRDeletion: isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions,
14797
- noEOFCRAddition: isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions
14889
+ deletionLine,
14890
+ additionLine: undefined
14798
14891
  };
14799
14892
  }
14893
+ if (deletionLine == null || additionLine == null) {
14894
+ throw new Error("iterateOverDiff: missing change line data");
14895
+ }
14800
14896
  return {
14801
14897
  type: "change",
14802
14898
  hunkIndex,
14803
14899
  hunk,
14804
14900
  collapsedAfter,
14805
14901
  collapsedBefore,
14806
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : undefined,
14807
- unifiedAdditionLineIndex: index < content.additions ? unifiedLineIndex + content.deletions + index : undefined,
14808
- splitLineIndex: splitLineIndex + index,
14809
- additionLineIndex: index < content.additions ? additionLineIndex + index : undefined,
14810
- additionLineNumber: index < content.additions ? additionLineNumber + index : undefined,
14811
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : undefined,
14812
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : undefined,
14813
- noEOFCRDeletion: isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions,
14814
- noEOFCRAddition: isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions
14902
+ deletionLine,
14903
+ additionLine
14815
14904
  };
14816
14905
  }
14817
14906
 
@@ -14847,8 +14936,8 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
14847
14936
 
14848
14937
  //#endregion
14849
14938
  //#region src/utils/renderDiffWithHighlighter.ts
14850
- const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
14851
- function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS) {
14939
+ const DEFAULT_PLAIN_TEXT_OPTIONS$1 = { forcePlainText: false };
14940
+ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS$1) {
14852
14941
  if (forcePlainText) {
14853
14942
  startingLine ??= 0;
14854
14943
  totalLines ??= Infinity;
@@ -14904,12 +14993,13 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
14904
14993
  totalLines,
14905
14994
  expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,
14906
14995
  collapsedContextThreshold,
14907
- callback: ({ hunkIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, unifiedAdditionLineIndex, unifiedDeletionLineIndex, splitLineIndex, type }) => {
14996
+ callback: ({ hunkIndex, additionLine, deletionLine, type }) => {
14908
14997
  const bucket = getBucketForHunk(hunkIndex);
14909
- if (type === "change" && lineDiffType !== "none" && additionLineIndex != null && deletionLineIndex != null) {
14998
+ const splitLineIndex = additionLine != null ? additionLine.splitLineIndex : deletionLine.splitLineIndex;
14999
+ if (type === "change" && additionLine != null && deletionLine != null) {
14910
15000
  computeLineDiffDecorations({
14911
- additionLine: diff.additionLines[additionLineIndex],
14912
- deletionLine: diff.deletionLines[deletionLineIndex],
15001
+ additionLine: diff.additionLines[additionLine.lineIndex],
15002
+ deletionLine: diff.deletionLines[deletionLine.lineIndex],
14913
15003
  deletionLineIndex: bucket.deletionContent.length,
14914
15004
  additionLineIndex: bucket.additionContent.length,
14915
15005
  deletionDecorations: bucket.deletionDecorations,
@@ -14917,22 +15007,22 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
14917
15007
  lineDiffType
14918
15008
  });
14919
15009
  }
14920
- if (deletionLineIndex != null && deletionLineNumber != null && unifiedDeletionLineIndex != null) {
14921
- appendContent(diff.deletionLines[deletionLineIndex], deletionLineIndex, bucket.deletionSegments, bucket.deletionContent);
15010
+ if (deletionLine != null) {
15011
+ appendContent(diff.deletionLines[deletionLine.lineIndex], deletionLine.lineIndex, bucket.deletionSegments, bucket.deletionContent);
14922
15012
  bucket.deletionInfo.push({
14923
15013
  type: type === "change" ? "change-deletion" : type,
14924
- lineNumber: deletionLineNumber,
14925
- altLineNumber: type === "change" ? undefined : additionLineNumber ?? undefined,
14926
- lineIndex: `${unifiedDeletionLineIndex},${splitLineIndex}`
15014
+ lineNumber: deletionLine.lineNumber,
15015
+ altLineNumber: type === "change" ? undefined : additionLine.lineNumber ?? undefined,
15016
+ lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`
14927
15017
  });
14928
15018
  }
14929
- if (additionLineIndex != null && additionLineNumber != null && unifiedAdditionLineIndex != null) {
14930
- appendContent(diff.additionLines[additionLineIndex], additionLineIndex, bucket.additionSegments, bucket.additionContent);
15019
+ if (additionLine != null) {
15020
+ appendContent(diff.additionLines[additionLine.lineIndex], additionLine.lineIndex, bucket.additionSegments, bucket.additionContent);
14931
15021
  bucket.additionInfo.push({
14932
15022
  type: type === "change" ? "change-addition" : type,
14933
- lineNumber: additionLineNumber,
14934
- altLineNumber: type === "change" ? undefined : deletionLineNumber ?? undefined,
14935
- lineIndex: `${unifiedAdditionLineIndex},${splitLineIndex}`
15023
+ lineNumber: additionLine.lineNumber,
15024
+ altLineNumber: type === "change" ? undefined : deletionLine.lineNumber ?? undefined,
15025
+ lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`
14936
15026
  });
14937
15027
  }
14938
15028
  }
@@ -15130,9 +15220,82 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
15130
15220
  };
15131
15221
  }
15132
15222
 
15223
+ //#endregion
15224
+ //#region src/utils/iterateOverFile.ts
15225
+ /**
15226
+ * Iterates over lines in a file with optional windowing support.
15227
+ *
15228
+ * Similar to `iterateOverDiff` but simplified for linear file content.
15229
+ * Supports viewport windowing for virtualization scenarios.
15230
+ *
15231
+ * @param props - Configuration for iteration
15232
+ * @param props.lines - Pre-split array of lines (use splitFileContents() to create from string)
15233
+ * @param props.startingLine - Optional starting line index (0-based, default: 0)
15234
+ * @param props.totalLines - Optional max lines to iterate (default: Infinity)
15235
+ * @param props.callback - Callback invoked for each line in the window.
15236
+ * Return `true` to stop iteration early.
15237
+ *
15238
+ * @example
15239
+ * ```typescript
15240
+ * const lines = splitFileContents('line1\nline2\nline3');
15241
+ * iterateOverFile({
15242
+ * lines,
15243
+ * startingLine: 0,
15244
+ * totalLines: 10,
15245
+ * callback: ({ lineIndex, lineNumber, content, isLastLine }) => {
15246
+ * console.log(`Line ${lineNumber}: ${content}`);
15247
+ * if (content.includes('stop')) return true; // Stop iteration
15248
+ * }
15249
+ * });
15250
+ * ```
15251
+ */
15252
+ function iterateOverFile({ lines, startingLine = 0, totalLines = Infinity, callback }) {
15253
+ const len = Math.min(startingLine + totalLines, lines.length);
15254
+ const lastLineIndex = (() => {
15255
+ const lastLine = lines.at(-1);
15256
+ if (lastLine === "" || lastLine === "\n" || lastLine === "\r\n" || lastLine === "\r") {
15257
+ return Math.max(0, lines.length - 2);
15258
+ }
15259
+ return lines.length - 1;
15260
+ })();
15261
+ for (let lineIndex = startingLine; lineIndex < len; lineIndex++) {
15262
+ const isLastLine = lineIndex === lastLineIndex;
15263
+ if (callback({
15264
+ lineIndex,
15265
+ lineNumber: lineIndex + 1,
15266
+ content: lines[lineIndex],
15267
+ isLastLine
15268
+ }) === true || isLastLine) {
15269
+ break;
15270
+ }
15271
+ }
15272
+ }
15273
+
15274
+ //#endregion
15275
+ //#region src/utils/splitFileContents.ts
15276
+ /**
15277
+ * Splits file contents into lines using the same logic as diff parsing.
15278
+ * - Preserves trailing newlines on each line
15279
+ *
15280
+ * @param contents - The raw file contents string
15281
+ * @returns Array of lines with newlines preserved
15282
+ */
15283
+ function splitFileContents(contents) {
15284
+ return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
15285
+ }
15286
+
15133
15287
  //#endregion
15134
15288
  //#region src/utils/renderFileWithHighlighter.ts
15135
- function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, forcePlainText = false) {
15289
+ const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
15290
+ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, { forcePlainText, startingLine, totalLines, lines } = DEFAULT_PLAIN_TEXT_OPTIONS) {
15291
+ if (forcePlainText) {
15292
+ startingLine ??= 0;
15293
+ totalLines ??= Infinity;
15294
+ } else {
15295
+ startingLine = 0;
15296
+ totalLines = Infinity;
15297
+ }
15298
+ const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;
15136
15299
  const { state, transformers } = createTransformerWithState();
15137
15300
  const lang = forcePlainText ? "text" : file.lang ?? getFiletypeFromFileName(file.name);
15138
15301
  const baseThemeType = (() => {
@@ -15147,8 +15310,8 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
15147
15310
  });
15148
15311
  state.lineInfo = (shikiLineNumber) => ({
15149
15312
  type: "context",
15150
- lineIndex: shikiLineNumber - 1,
15151
- lineNumber: shikiLineNumber
15313
+ lineIndex: shikiLineNumber - 1 + startingLine,
15314
+ lineNumber: shikiLineNumber + startingLine
15152
15315
  });
15153
15316
  const hastConfig = (() => {
15154
15317
  if (typeof theme === "string") {
@@ -15170,12 +15333,29 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
15170
15333
  tokenizeMaxLineLength
15171
15334
  };
15172
15335
  })();
15336
+ const highlightedLines = getLineNodes(highlighter$1.codeToHast(isWindowedHighlight ? extractWindowedFileContent(lines ?? splitFileContents(file.contents), startingLine, totalLines) : cleanLastNewline(file.contents), hastConfig));
15337
+ const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;
15338
+ if (isWindowedHighlight) {
15339
+ code.push(...highlightedLines);
15340
+ }
15173
15341
  return {
15174
- code: getLineNodes(highlighter$1.codeToHast(cleanLastNewline(file.contents), hastConfig)),
15342
+ code,
15175
15343
  themeStyles,
15176
15344
  baseThemeType
15177
15345
  };
15178
15346
  }
15347
+ function extractWindowedFileContent(lines, startingLine, totalLines) {
15348
+ let windowContent = "";
15349
+ iterateOverFile({
15350
+ lines,
15351
+ startingLine,
15352
+ totalLines,
15353
+ callback({ content }) {
15354
+ windowContent += content;
15355
+ }
15356
+ });
15357
+ return windowContent;
15358
+ }
15179
15359
 
15180
15360
  //#endregion
15181
15361
  //#region src/worker/worker.ts