@pierre/diffs 1.5.2 → 1.6.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 (359) hide show
  1. package/README.md +4 -3
  2. package/dist/components/CodeView.d.ts +3 -2
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +24 -19
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +31 -9
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +176 -90
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +32 -9
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +225 -131
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/FileStream.d.ts +6 -4
  15. package/dist/components/FileStream.d.ts.map +1 -1
  16. package/dist/components/FileStream.js +49 -36
  17. package/dist/components/FileStream.js.map +1 -1
  18. package/dist/components/UnresolvedFile.d.ts +14 -4
  19. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  20. package/dist/components/UnresolvedFile.js +35 -16
  21. package/dist/components/UnresolvedFile.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +3 -2
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  24. package/dist/components/VirtualizedFile.js +28 -20
  25. package/dist/components/VirtualizedFile.js.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.d.ts +3 -2
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  28. package/dist/components/VirtualizedFileDiff.js +31 -24
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  30. package/dist/constants.d.ts +4 -2
  31. package/dist/constants.d.ts.map +1 -1
  32. package/dist/constants.js +3 -1
  33. package/dist/constants.js.map +1 -1
  34. package/dist/editor/editor.d.ts +2 -1
  35. package/dist/editor/editor.d.ts.map +1 -1
  36. package/dist/editor/editor.js +5 -1
  37. package/dist/editor/editor.js.map +1 -1
  38. package/dist/editor/platform.d.ts +1 -1
  39. package/dist/editor/platform.js +5 -4
  40. package/dist/editor/platform.js.map +1 -1
  41. package/dist/editor/selection.d.ts +2 -2
  42. package/dist/editor/selection.d.ts.map +1 -1
  43. package/dist/editor/selection.js +31 -6
  44. package/dist/editor/selection.js.map +1 -1
  45. package/dist/editor/tokenizer.d.ts +6 -4
  46. package/dist/editor/tokenizer.d.ts.map +1 -1
  47. package/dist/editor/tokenizer.js +25 -470
  48. package/dist/editor/tokenizer.js.map +1 -1
  49. package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
  50. package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
  51. package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
  52. package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
  53. package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
  54. package/dist/highlighter/DiffsHighlighter.js +39 -0
  55. package/dist/highlighter/DiffsHighlighter.js.map +1 -0
  56. package/dist/highlighter/backends/highlights.d.ts +26 -0
  57. package/dist/highlighter/backends/highlights.d.ts.map +1 -0
  58. package/dist/highlighter/backends/highlights.js +71 -0
  59. package/dist/highlighter/backends/highlights.js.map +1 -0
  60. package/dist/highlighter/backends/shiki.d.ts +27 -0
  61. package/dist/highlighter/backends/shiki.d.ts.map +1 -0
  62. package/dist/highlighter/backends/shiki.js +107 -0
  63. package/dist/highlighter/backends/shiki.js.map +1 -0
  64. package/dist/highlighter/highlighterType.d.ts +13 -0
  65. package/dist/highlighter/highlighterType.d.ts.map +1 -0
  66. package/dist/highlighter/highlighterType.js +32 -0
  67. package/dist/highlighter/highlighterType.js.map +1 -0
  68. package/dist/highlighter/highlights-editor.d.ts +24 -0
  69. package/dist/highlighter/highlights-editor.d.ts.map +1 -0
  70. package/dist/highlighter/highlights-editor.js +166 -0
  71. package/dist/highlighter/highlights-editor.js.map +1 -0
  72. package/dist/highlighter/highlights-stream.d.ts +20 -0
  73. package/dist/highlighter/highlights-stream.d.ts.map +1 -0
  74. package/dist/highlighter/highlights-stream.js +93 -0
  75. package/dist/highlighter/highlights-stream.js.map +1 -0
  76. package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
  77. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  78. package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
  79. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  80. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
  81. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  82. package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
  83. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  84. package/dist/highlighter/languages/constants.d.ts +1 -1
  85. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
  86. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  87. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  88. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  89. package/dist/highlighter/languages/resolveLanguage.js +19 -16
  90. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  91. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
  92. package/dist/highlighter/shared_highlighter.d.ts +24 -9
  93. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  94. package/dist/highlighter/shared_highlighter.js +59 -47
  95. package/dist/highlighter/shared_highlighter.js.map +1 -1
  96. package/dist/highlighter/shiki-editor.d.ts +25 -0
  97. package/dist/highlighter/shiki-editor.d.ts.map +1 -0
  98. package/dist/highlighter/shiki-editor.js +483 -0
  99. package/dist/highlighter/shiki-editor.js.map +1 -0
  100. package/dist/highlighter/shiki-stream.d.ts +20 -0
  101. package/dist/highlighter/shiki-stream.d.ts.map +1 -0
  102. package/dist/highlighter/shiki-stream.js +60 -0
  103. package/dist/highlighter/shiki-stream.js.map +1 -0
  104. package/dist/highlighter/stream-tokenizer.d.ts +40 -0
  105. package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
  106. package/dist/highlighter/stream-tokenizer.js +70 -0
  107. package/dist/highlighter/stream-tokenizer.js.map +1 -0
  108. package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
  109. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  110. package/dist/highlighter/themes/areThemesAttached.js +5 -4
  111. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  112. package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
  113. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  114. package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
  115. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  116. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
  117. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  118. package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
  119. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  120. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
  121. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
  122. package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
  123. package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
  124. package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
  125. package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
  126. package/dist/highlighter/themes/createCachedLoader.js +15 -0
  127. package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
  128. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
  129. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  130. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
  131. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  132. package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
  133. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  134. package/dist/highlighter/themes/getResolvedThemes.js +4 -3
  135. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  136. package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
  137. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  138. package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
  139. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  140. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  141. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +3 -3
  142. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  143. package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
  144. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  145. package/dist/highlighter/themes/registerCustomTheme.js +8 -16
  146. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  147. package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
  148. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  149. package/dist/highlighter/themes/resolveTheme.js +4 -7
  150. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  151. package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
  152. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  153. package/dist/highlighter/themes/resolveThemes.js +4 -7
  154. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  155. package/dist/highlighter/themes/themeResolver.d.ts +10 -4
  156. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  157. package/dist/highlighter/themes/themeResolver.js +141 -2
  158. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  159. package/dist/highlighter/themes/types.d.ts +23 -0
  160. package/dist/highlighter/themes/types.d.ts.map +1 -0
  161. package/dist/highlighter/themes/types.js +0 -0
  162. package/dist/highlighter/tokenizer-types.d.ts +35 -0
  163. package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
  164. package/dist/highlighter/tokenizer-types.js +0 -0
  165. package/dist/highlighter/types.d.ts +55 -0
  166. package/dist/highlighter/types.d.ts.map +1 -0
  167. package/dist/highlighter/types.js +0 -0
  168. package/dist/index.d.ts +22 -13
  169. package/dist/index.js +21 -18
  170. package/dist/managers/InteractionManager.d.ts.map +1 -1
  171. package/dist/managers/InteractionManager.js +2 -2
  172. package/dist/managers/InteractionManager.js.map +1 -1
  173. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
  174. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  175. package/dist/react/CodeView.d.ts +4 -3
  176. package/dist/react/CodeView.d.ts.map +1 -1
  177. package/dist/react/CodeView.js +47 -38
  178. package/dist/react/CodeView.js.map +1 -1
  179. package/dist/react/File.js +3 -3
  180. package/dist/react/File.js.map +1 -1
  181. package/dist/react/FileDiff.js +3 -3
  182. package/dist/react/FileDiff.js.map +1 -1
  183. package/dist/react/MultiFileDiff.js +2 -2
  184. package/dist/react/MultiFileDiff.js.map +1 -1
  185. package/dist/react/PatchDiff.js +3 -3
  186. package/dist/react/PatchDiff.js.map +1 -1
  187. package/dist/react/UnresolvedFile.js +2 -2
  188. package/dist/react/UnresolvedFile.js.map +1 -1
  189. package/dist/react/index.d.ts +9 -4
  190. package/dist/react/types.d.ts +4 -2
  191. package/dist/react/types.d.ts.map +1 -1
  192. package/dist/react/utils/renderDiffChildren.js +1 -1
  193. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  194. package/dist/react/utils/renderFileChildren.js +1 -1
  195. package/dist/react/utils/renderFileChildren.js.map +1 -1
  196. package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
  197. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  198. package/dist/react/utils/useFileDiffInstance.js +29 -24
  199. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  200. package/dist/react/utils/useFileInstance.d.ts +2 -0
  201. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  202. package/dist/react/utils/useFileInstance.js +38 -28
  203. package/dist/react/utils/useFileInstance.js.map +1 -1
  204. package/dist/react/utils/useForceUpdate.d.ts +5 -0
  205. package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
  206. package/dist/react/utils/useForceUpdate.js +27 -0
  207. package/dist/react/utils/useForceUpdate.js.map +1 -0
  208. package/dist/react/utils/useNextRenderData.d.ts +9 -0
  209. package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
  210. package/dist/react/utils/useNextRenderData.js +9 -0
  211. package/dist/react/utils/useNextRenderData.js.map +1 -0
  212. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
  213. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  214. package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
  215. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  216. package/dist/renderers/DiffHunksRenderer.d.ts +4 -2
  217. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  218. package/dist/renderers/DiffHunksRenderer.js +82 -43
  219. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  220. package/dist/renderers/FileRenderer.d.ts +6 -2
  221. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  222. package/dist/renderers/FileRenderer.js +77 -43
  223. package/dist/renderers/FileRenderer.js.map +1 -1
  224. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  225. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
  226. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  227. package/dist/shiki-stream/index.d.ts +3 -3
  228. package/dist/shiki-stream/index.js +1 -2
  229. package/dist/shiki-stream/stream.d.ts +4 -4
  230. package/dist/shiki-stream/stream.d.ts.map +1 -1
  231. package/dist/shiki-stream/stream.js +20 -9
  232. package/dist/shiki-stream/stream.js.map +1 -1
  233. package/dist/shiki-stream/types.d.ts +7 -38
  234. package/dist/shiki-stream/types.d.ts.map +1 -1
  235. package/dist/ssr/index.d.ts +7 -2
  236. package/dist/ssr/renderHTML.js +2 -2
  237. package/dist/ssr/renderHTML.js.map +1 -1
  238. package/dist/style.js +1 -1
  239. package/dist/style.js.map +1 -1
  240. package/dist/types.d.ts +20 -11
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/utils/canUseWASM.d.ts +13 -0
  243. package/dist/utils/canUseWASM.d.ts.map +1 -0
  244. package/dist/utils/canUseWASM.js +59 -0
  245. package/dist/utils/canUseWASM.js.map +1 -0
  246. package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
  247. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  248. package/dist/utils/createSpanNodeFromToken.js +4 -5
  249. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  250. package/dist/utils/cssWrappers.d.ts.map +1 -1
  251. package/dist/utils/cssWrappers.js +12 -0
  252. package/dist/utils/cssWrappers.js.map +1 -1
  253. package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
  254. package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
  255. package/dist/utils/getCodeViewItemRenderData.js +19 -0
  256. package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
  257. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  258. package/dist/utils/getHighlighterOptions.js +3 -2
  259. package/dist/utils/getHighlighterOptions.js.map +1 -1
  260. package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
  261. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  262. package/dist/utils/getHighlighterThemeStyles.js +13 -3
  263. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  264. package/dist/utils/getTokenOptions.d.ts +7 -0
  265. package/dist/utils/getTokenOptions.d.ts.map +1 -0
  266. package/dist/utils/getTokenOptions.js +16 -0
  267. package/dist/utils/getTokenOptions.js.map +1 -0
  268. package/dist/utils/hastToHtml.d.ts +10 -0
  269. package/dist/utils/hastToHtml.d.ts.map +1 -0
  270. package/dist/utils/hastToHtml.js +125 -0
  271. package/dist/utils/hastToHtml.js.map +1 -0
  272. package/dist/utils/hydratePartialDiff.js +4 -0
  273. package/dist/utils/hydratePartialDiff.js.map +1 -1
  274. package/dist/utils/parseDiffDecorations.d.ts +2 -1
  275. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  276. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  277. package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
  278. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  279. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  280. package/dist/utils/parsePatchFiles.js +24 -4
  281. package/dist/utils/parsePatchFiles.js.map +1 -1
  282. package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
  283. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  284. package/dist/utils/renderDiffWithHighlighter.js +33 -48
  285. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  286. package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
  287. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  288. package/dist/utils/renderFileWithHighlighter.js +10 -26
  289. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  290. package/dist/utils/renderTokenLines.d.ts +22 -0
  291. package/dist/utils/renderTokenLines.d.ts.map +1 -0
  292. package/dist/utils/renderTokenLines.js +250 -0
  293. package/dist/utils/renderTokenLines.js.map +1 -0
  294. package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
  295. package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
  296. package/dist/utils/resolvePreferredHighlighter.js +11 -0
  297. package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
  298. package/dist/utils/resolveRegion.js +20 -10
  299. package/dist/utils/resolveRegion.js.map +1 -1
  300. package/dist/utils/setDeferredArrayItem.d.ts +5 -0
  301. package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
  302. package/dist/utils/setDeferredArrayItem.js +39 -0
  303. package/dist/utils/setDeferredArrayItem.js.map +1 -0
  304. package/dist/utils/tokenStyle.d.ts +11 -0
  305. package/dist/utils/tokenStyle.d.ts.map +1 -0
  306. package/dist/utils/tokenStyle.js +32 -0
  307. package/dist/utils/tokenStyle.js.map +1 -0
  308. package/dist/utils/tokensToHtml.d.ts +11 -0
  309. package/dist/utils/tokensToHtml.d.ts.map +1 -0
  310. package/dist/utils/tokensToHtml.js +48 -0
  311. package/dist/utils/tokensToHtml.js.map +1 -0
  312. package/dist/utils/updateDiffHunks.d.ts +2 -2
  313. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  314. package/dist/utils/updateDiffHunks.js +7 -3
  315. package/dist/utils/updateDiffHunks.js.map +1 -1
  316. package/dist/utils/wrapTokenFragments.js.map +1 -1
  317. package/dist/worker/WorkerPoolManager.d.ts +14 -2
  318. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  319. package/dist/worker/WorkerPoolManager.js +155 -67
  320. package/dist/worker/WorkerPoolManager.js.map +1 -1
  321. package/dist/worker/hastLinesTransport.d.ts +14 -0
  322. package/dist/worker/hastLinesTransport.d.ts.map +1 -0
  323. package/dist/worker/hastLinesTransport.js +156 -0
  324. package/dist/worker/hastLinesTransport.js.map +1 -0
  325. package/dist/worker/highlights-CpZm9DAR.js +317 -0
  326. package/dist/worker/highlights-CpZm9DAR.js.map +1 -0
  327. package/dist/worker/index.d.ts +1 -1
  328. package/dist/worker/shiki-Ci4cdHsM.js +697 -0
  329. package/dist/worker/shiki-Ci4cdHsM.js.map +1 -0
  330. package/dist/worker/stream-tokenizer-DK9xp5M5.js +427 -0
  331. package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
  332. package/dist/worker/types.d.ts +16 -3
  333. package/dist/worker/types.d.ts.map +1 -1
  334. package/dist/worker/worker-portable.js +41 -13337
  335. package/dist/worker/worker-portable.js.map +1 -1
  336. package/dist/worker/worker.js +681 -349
  337. package/dist/worker/worker.js.map +1 -1
  338. package/dist/worker/workerMessage.d.ts +24 -0
  339. package/dist/worker/workerMessage.d.ts.map +1 -0
  340. package/dist/worker/workerMessage.js +0 -0
  341. package/package.json +5 -3
  342. package/dist/highlighter/themes/constants.d.ts +0 -5
  343. package/dist/highlighter/themes/constants.d.ts.map +0 -1
  344. package/dist/highlighter/themes/constants.js +0 -6
  345. package/dist/highlighter/themes/constants.js.map +0 -1
  346. package/dist/highlighter/themes/themeResolution.d.ts +0 -7
  347. package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
  348. package/dist/highlighter/themes/themeResolution.js +0 -21
  349. package/dist/highlighter/themes/themeResolution.js.map +0 -1
  350. package/dist/shiki-stream/tokenizer.d.ts +0 -23
  351. package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
  352. package/dist/shiki-stream/tokenizer.js +0 -72
  353. package/dist/shiki-stream/tokenizer.js.map +0 -1
  354. package/dist/utils/createTransformerWithState.d.ts +0 -12
  355. package/dist/utils/createTransformerWithState.d.ts.map +0 -1
  356. package/dist/utils/createTransformerWithState.js +0 -89
  357. package/dist/utils/createTransformerWithState.js.map +0 -1
  358. package/dist/worker/wasm-B9ZqxnKj.js +0 -8
  359. package/dist/worker/wasm-B9ZqxnKj.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ //#region src/react/utils/useNextRenderData.ts
2
+ function useNextRenderData(instanceRef, input) {
3
+ "use no memo";
4
+ return instanceRef.current?.__getNextRenderData(input);
5
+ }
6
+ //#endregion
7
+ export { useNextRenderData };
8
+
9
+ //# sourceMappingURL=useNextRenderData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNextRenderData.js","names":[],"sources":["../../../src/react/utils/useNextRenderData.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\ninterface NextRenderDataSource<TInput, TData> {\n __getNextRenderData(input: TInput): TData;\n}\n\n// Read the data the instance will display once render() receives this input.\n// The instance can change it without new props, so this must not be memoized.\n// Returns undefined before the instance exists.\nexport function useNextRenderData<TInput, TData>(\n instanceRef: RefObject<NextRenderDataSource<TInput, TData> | null>,\n input: TInput\n): TData | undefined {\n 'use no memo';\n // oxlint-disable-next-line react/refs -- the instance changes without new props\n return instanceRef.current?.__getNextRenderData(input);\n}\n"],"mappings":";AASA,SAAgB,kBACd,aACA,OACmB;CACnB;CAEA,OAAO,YAAY,SAAS,oBAAoB,KAAK;AACvD"}
@@ -16,6 +16,7 @@ interface UseUnresolvedFileInstanceProps<LAnnotation> {
16
16
  disableWorkerPool: boolean;
17
17
  }
18
18
  interface UseUnresolvedFileInstanceReturn<LAnnotation> {
19
+ lineAnnotations: DiffLineAnnotation<LAnnotation>[];
19
20
  fileDiff: FileDiffMetadata;
20
21
  actions: (MergeConflictDiffAction | undefined)[];
21
22
  markerRows: MergeConflictMarkerRow[];
@@ -1 +1 @@
1
- {"version":3,"file":"useUnresolvedFileInstance.d.ts","names":[],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"mappings":";;;;;;UAoCU,+BAA+B;EACvC,MAAM;EACN,UAAU,2BAA2B;EACrC,iBAAiB,mBAAmB;EACpC,eAAe;EACf;EACA;EACA;EACA;EACA;;UAGQ,gCAAgC;EACxC,UAAU;EACV,UAAU;EACV,YAAY;EACZ,IAAI,MAAM;EACV,kBAAkB;EAClB,eAAe,eAAe;;iBAGhB,0BAA0B,eACxC,MACA,SACA,iBACA,eACA,iBACA,oBACA,wBACA,iBACA,qBACC,+BAA+B,eAAe,gCAAgC"}
1
+ {"version":3,"file":"useUnresolvedFileInstance.d.ts","names":[],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"mappings":";;;;;;UAuCU,+BAA+B;EACvC,MAAM;EACN,UAAU,2BAA2B;EACrC,iBAAiB,mBAAmB;EACpC,eAAe;EACf;EACA;EACA;EACA;EACA;;UAGQ,gCAAgC;EACxC,iBAAiB,mBAAmB;EACpC,UAAU;EACV,UAAU;EACV,YAAY;EACZ,IAAI,MAAM;EACV,kBAAkB;EAClB,eAAe,eAAe;;iBAGhB,0BAA0B,eACxC,MACA,SACA,iBACA,eACA,iBACA,oBACA,wBACA,iBACA,qBACC,+BAA+B,eAAe,gCAAgC"}
@@ -1,9 +1,12 @@
1
+ import { EMPTY_LINE_ANNOTATIONS } from "../../constants.js";
1
2
  import { areOptionsEqual } from "../../utils/areOptionsEqual.js";
2
3
  import { parseMergeConflictDiffFromFile } from "../../utils/parseMergeConflictDiffFromFile.js";
3
4
  import { UnresolvedFile } from "../../components/UnresolvedFile.js";
4
5
  import { useStableCallback } from "./useStableCallback.js";
5
6
  import { noopRender } from "../constants.js";
6
7
  import { WorkerPoolContext } from "../WorkerPoolContext.js";
8
+ import { useForceUpdate } from "./useForceUpdate.js";
9
+ import { useNextRenderData } from "./useNextRenderData.js";
7
10
  import { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from "react";
8
11
  //#region src/react/utils/useUnresolvedFileInstance.ts
9
12
  const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
@@ -30,6 +33,18 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
30
33
  const controlledSelection = selectedLines !== void 0;
31
34
  const poolManager = useContext(WorkerPoolContext);
32
35
  const instanceRef = useRef(null);
36
+ const forceUpdate = useForceUpdate();
37
+ const renderData = useNextRenderData(instanceRef, {
38
+ fileDiff,
39
+ actions,
40
+ markerRows,
41
+ lineAnnotations
42
+ }) ?? {
43
+ fileDiff,
44
+ actions,
45
+ markerRows,
46
+ lineAnnotations: lineAnnotations ?? EMPTY_LINE_ANNOTATIONS
47
+ };
33
48
  const ref = useStableCallback((fileContainer) => {
34
49
  if (fileContainer != null) {
35
50
  if (instanceRef.current != null) throw new Error("useUnresolvedFileInstance: An instance should not already exist when a node is created");
@@ -40,7 +55,7 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
40
55
  hasGutterRenderUtility,
41
56
  onMergeConflictAction,
42
57
  options
43
- }), !disableWorkerPool ? poolManager : void 0, true);
58
+ }), !disableWorkerPool ? poolManager : void 0, forceUpdate);
44
59
  instanceRef.current.hydrate({
45
60
  fileDiff,
46
61
  actions,
@@ -66,7 +81,7 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
66
81
  onMergeConflictAction,
67
82
  options
68
83
  });
69
- const forceRender = newOptions !== void 0 && !areOptionsEqual(instance.options, newOptions);
84
+ const forceRender = !areOptionsEqual(instance.options, newOptions);
70
85
  instance.setOptions(newOptions);
71
86
  instance.render({
72
87
  fileDiff,
@@ -77,17 +92,17 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
77
92
  });
78
93
  if (selectedLines !== void 0) instance.setSelectedLines(selectedLines);
79
94
  });
95
+ const getHoveredLine = useCallback(() => {
96
+ return instanceRef.current?.getHoveredLine();
97
+ }, []);
98
+ const getInstance = useCallback(() => {
99
+ return instanceRef.current ?? void 0;
100
+ }, []);
80
101
  return {
102
+ ...renderData,
81
103
  ref,
82
- getHoveredLine: useCallback(() => {
83
- return instanceRef.current?.getHoveredLine();
84
- }, []),
85
- fileDiff,
86
- actions,
87
- markerRows,
88
- getInstance: useCallback(() => {
89
- return instanceRef.current ?? void 0;
90
- }, [])
104
+ getHoveredLine,
105
+ getInstance
91
106
  };
92
107
  }
93
108
  function mergeUnresolvedOptions({ options, controlledSelection, onMergeConflictAction, hasConflictUtility, hasCustomHeader, hasGutterRenderUtility }) {
@@ -1 +1 @@
1
- {"version":3,"file":"useUnresolvedFileInstance.js","names":["UnresolvedFileClass"],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n UnresolvedFile,\n UnresolvedFile as UnresolvedFileClass,\n type UnresolvedFileOptions,\n} from '../../components/UnresolvedFile';\nimport type { GetHoveredLineResult } from '../../managers/InteractionManager';\nimport type {\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n MergeConflictActionPayload,\n MergeConflictMarkerRow,\n SelectedLineRange,\n} from '../../types';\nimport { areOptionsEqual } from '../../utils/areOptionsEqual';\nimport {\n type MergeConflictDiffAction,\n parseMergeConflictDiffFromFile,\n} from '../../utils/parseMergeConflictDiffFromFile';\nimport { noopRender } from '../constants';\nimport type { UnresolvedFileReactOptions } from '../UnresolvedFile';\nimport { WorkerPoolContext } from '../WorkerPoolContext';\nimport { useStableCallback } from './useStableCallback';\n\nconst useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface UseUnresolvedFileInstanceProps<LAnnotation> {\n file: FileContents;\n options?: UnresolvedFileReactOptions<LAnnotation>;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n selectedLines: SelectedLineRange | null | undefined;\n prerenderedHTML: string | undefined;\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n hasCustomHeader: boolean;\n disableWorkerPool: boolean;\n}\n\ninterface UseUnresolvedFileInstanceReturn<LAnnotation> {\n fileDiff: FileDiffMetadata;\n actions: (MergeConflictDiffAction | undefined)[];\n markerRows: MergeConflictMarkerRow[];\n ref(node: HTMLElement | null): void;\n getHoveredLine(): GetHoveredLineResult<'diff'> | undefined;\n getInstance(): UnresolvedFile<LAnnotation> | undefined;\n}\n\nexport function useUnresolvedFileInstance<LAnnotation>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility,\n hasGutterRenderUtility,\n hasCustomHeader,\n disableWorkerPool,\n}: UseUnresolvedFileInstanceProps<LAnnotation>): UseUnresolvedFileInstanceReturn<LAnnotation> {\n const [{ fileDiff, actions, markerRows }, setState] = useState(() => {\n const { fileDiff, actions, markerRows } = parseMergeConflictDiffFromFile(\n file,\n options?.maxContextLines\n );\n return { fileDiff, actions, markerRows };\n });\n // UnresolvedFile is intentionally uncontrolled in React. Keep an internal\n // source-of-truth file so sequential conflict actions apply to the latest\n // resolved contents rather than the initial prop value.\n const onMergeConflictAction = useStableCallback(\n (\n payload: MergeConflictActionPayload,\n instance: UnresolvedFile<LAnnotation>\n ) => {\n setState((prevState) => {\n const { fileDiff, actions, markerRows } =\n instance.resolveConflict(\n payload.conflict.conflictIndex,\n payload.resolution,\n prevState.fileDiff\n ) ?? {};\n if (fileDiff == null || actions == null || markerRows == null) {\n return prevState;\n } else {\n return { fileDiff, actions, markerRows };\n }\n });\n }\n );\n const controlledSelection = selectedLines !== undefined;\n const poolManager = useContext(WorkerPoolContext);\n const instanceRef = useRef<UnresolvedFileClass<LAnnotation> | null>(null);\n const ref = useStableCallback((fileContainer: HTMLElement | null) => {\n if (fileContainer != null) {\n if (instanceRef.current != null) {\n throw new Error(\n 'useUnresolvedFileInstance: An instance should not already exist when a node is created'\n );\n }\n instanceRef.current = new UnresolvedFileClass(\n mergeUnresolvedOptions({\n controlledSelection,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n onMergeConflictAction,\n options,\n }),\n !disableWorkerPool ? poolManager : undefined,\n true\n );\n void instanceRef.current.hydrate({\n fileDiff,\n actions,\n markerRows,\n fileContainer,\n lineAnnotations,\n prerenderedHTML,\n });\n } else {\n if (instanceRef.current == null) {\n throw new Error(\n 'useUnresolvedFileInstance: A UnresolvedFile instance should exist when unmounting'\n );\n }\n instanceRef.current.cleanUp();\n instanceRef.current = null;\n }\n });\n\n useIsomorphicLayoutEffect(() => {\n if (instanceRef.current == null) return;\n const instance = instanceRef.current;\n const newOptions = mergeUnresolvedOptions({\n controlledSelection,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n onMergeConflictAction,\n options,\n });\n // setOptions(undefined) is a no-op, so an undefined merge result never\n // requires a forced render — comparing it against the instance's\n // constructor-default options would force a full render on every commit.\n const forceRender =\n newOptions !== undefined &&\n !areOptionsEqual(instance.options, newOptions);\n instance.setOptions(newOptions);\n void instance.render({\n fileDiff,\n actions,\n markerRows,\n lineAnnotations,\n forceRender,\n });\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines);\n }\n });\n\n const getHoveredLine = useCallback(():\n | GetHoveredLineResult<'diff'>\n | undefined => {\n return instanceRef.current?.getHoveredLine();\n }, []);\n\n const getInstance = useCallback(() => {\n return instanceRef.current ?? undefined;\n }, []);\n\n return { ref, getHoveredLine, fileDiff, actions, markerRows, getInstance };\n}\n\ninterface MergeUnresolvedOptionsProps<LAnnotation> {\n options: UnresolvedFileReactOptions<LAnnotation> | undefined;\n controlledSelection: boolean;\n onMergeConflictAction: UnresolvedFileOptions<LAnnotation>['onMergeConflictAction'];\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n hasCustomHeader: boolean;\n}\n\nfunction mergeUnresolvedOptions<LAnnotation>({\n options,\n controlledSelection,\n onMergeConflictAction,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n}: MergeUnresolvedOptionsProps<LAnnotation>): UnresolvedFileOptions<LAnnotation> {\n return {\n ...options,\n controlledSelection,\n onMergeConflictAction,\n hunkSeparators:\n options?.hunkSeparators === 'custom'\n ? noopRender\n : options?.hunkSeparators,\n // Add a placeholder type for the custom render\n mergeConflictActionsType:\n hasConflictUtility || options?.mergeConflictActionsType === 'custom'\n ? noopRender\n : options?.mergeConflictActionsType,\n renderCustomHeader: hasCustomHeader ? noopRender : undefined,\n renderGutterUtility: hasGutterRenderUtility ? noopRender : undefined,\n };\n}\n"],"mappings":";;;;;;;;AAiCA,MAAM,4BACJ,OAAO,WAAW,cAAc,YAAY;AAuB9C,SAAgB,0BAAuC,EACrD,MACA,SACA,iBACA,eACA,iBACA,oBACA,wBACA,iBACA,qBAC4F;CAC5F,MAAM,CAAC,EAAE,UAAU,SAAS,cAAc,YAAY,eAAe;EACnE,MAAM,EAAE,UAAU,SAAS,eAAe,+BACxC,MACA,SAAS,eACX;EACA,OAAO;GAAE;GAAU;GAAS;EAAW;CACzC,CAAC;CAID,MAAM,wBAAwB,mBAE1B,SACA,aACG;EACH,UAAU,cAAc;GACtB,MAAM,EAAE,UAAU,SAAS,eACzB,SAAS,gBACP,QAAQ,SAAS,eACjB,QAAQ,YACR,UAAU,QACZ,KAAK,CAAC;GACR,IAAI,YAAY,QAAQ,WAAW,QAAQ,cAAc,MACvD,OAAO;QAEP,OAAO;IAAE;IAAU;IAAS;GAAW;EAE3C,CAAC;CACH,CACF;CACA,MAAM,sBAAsB,kBAAkB,KAAA;CAC9C,MAAM,cAAc,WAAW,iBAAiB;CAChD,MAAM,cAAc,OAAgD,IAAI;CACxE,MAAM,MAAM,mBAAmB,kBAAsC;EACnE,IAAI,iBAAiB,MAAM;GACzB,IAAI,YAAY,WAAW,MACzB,MAAM,IAAI,MACR,wFACF;GAEF,YAAY,UAAU,IAAIA,eACxB,uBAAuB;IACrB;IACA;IACA;IACA;IACA;IACA;GACF,CAAC,GACD,CAAC,oBAAoB,cAAc,KAAA,GACnC,IACF;GACA,YAAiB,QAAQ,QAAQ;IAC/B;IACA;IACA;IACA;IACA;IACA;GACF,CAAC;EACH,OAAO;GACL,IAAI,YAAY,WAAW,MACzB,MAAM,IAAI,MACR,mFACF;GAEF,YAAY,QAAQ,QAAQ;GAC5B,YAAY,UAAU;EACxB;CACF,CAAC;CAED,gCAAgC;EAC9B,IAAI,YAAY,WAAW,MAAM;EACjC,MAAM,WAAW,YAAY;EAC7B,MAAM,aAAa,uBAAuB;GACxC;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;EAID,MAAM,cACJ,eAAe,KAAA,KACf,CAAC,gBAAgB,SAAS,SAAS,UAAU;EAC/C,SAAS,WAAW,UAAU;EAC9B,SAAc,OAAO;GACnB;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,IAAI,kBAAkB,KAAA,GACpB,SAAS,iBAAiB,aAAa;CAE3C,CAAC;CAYD,OAAO;EAAE;EAAK,gBAVS,kBAEN;GACf,OAAO,YAAY,SAAS,eAAe;EAC7C,GAAG,CAAC,CAMuB;EAAG;EAAU;EAAS;EAAY,aAJzC,kBAAkB;GACpC,OAAO,YAAY,WAAW,KAAA;EAChC,GAAG,CAAC,CAEmE;CAAE;AAC3E;AAWA,SAAS,uBAAoC,EAC3C,SACA,qBACA,uBACA,oBACA,iBACA,0BAC+E;CAC/E,OAAO;EACL,GAAG;EACH;EACA;EACA,gBACE,SAAS,mBAAmB,WACxB,aACA,SAAS;EAEf,0BACE,sBAAsB,SAAS,6BAA6B,WACxD,aACA,SAAS;EACf,oBAAoB,kBAAkB,aAAa,KAAA;EACnD,qBAAqB,yBAAyB,aAAa,KAAA;CAC7D;AACF"}
1
+ {"version":3,"file":"useUnresolvedFileInstance.js","names":["UnresolvedFileClass"],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n UnresolvedFile,\n UnresolvedFile as UnresolvedFileClass,\n type UnresolvedFileOptions,\n} from '../../components/UnresolvedFile';\nimport { EMPTY_LINE_ANNOTATIONS } from '../../constants';\nimport type { GetHoveredLineResult } from '../../managers/InteractionManager';\nimport type {\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n MergeConflictActionPayload,\n MergeConflictMarkerRow,\n SelectedLineRange,\n} from '../../types';\nimport { areOptionsEqual } from '../../utils/areOptionsEqual';\nimport {\n type MergeConflictDiffAction,\n parseMergeConflictDiffFromFile,\n} from '../../utils/parseMergeConflictDiffFromFile';\nimport { noopRender } from '../constants';\nimport type { UnresolvedFileReactOptions } from '../UnresolvedFile';\nimport { WorkerPoolContext } from '../WorkerPoolContext';\nimport { useForceUpdate } from './useForceUpdate';\nimport { useNextRenderData } from './useNextRenderData';\nimport { useStableCallback } from './useStableCallback';\n\nconst useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface UseUnresolvedFileInstanceProps<LAnnotation> {\n file: FileContents;\n options?: UnresolvedFileReactOptions<LAnnotation>;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n selectedLines: SelectedLineRange | null | undefined;\n prerenderedHTML: string | undefined;\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n hasCustomHeader: boolean;\n disableWorkerPool: boolean;\n}\n\ninterface UseUnresolvedFileInstanceReturn<LAnnotation> {\n lineAnnotations: DiffLineAnnotation<LAnnotation>[];\n fileDiff: FileDiffMetadata;\n actions: (MergeConflictDiffAction | undefined)[];\n markerRows: MergeConflictMarkerRow[];\n ref(node: HTMLElement | null): void;\n getHoveredLine(): GetHoveredLineResult<'diff'> | undefined;\n getInstance(): UnresolvedFile<LAnnotation> | undefined;\n}\n\nexport function useUnresolvedFileInstance<LAnnotation>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility,\n hasGutterRenderUtility,\n hasCustomHeader,\n disableWorkerPool,\n}: UseUnresolvedFileInstanceProps<LAnnotation>): UseUnresolvedFileInstanceReturn<LAnnotation> {\n const [{ fileDiff, actions, markerRows }, setState] = useState(() => {\n const { fileDiff, actions, markerRows } = parseMergeConflictDiffFromFile(\n file,\n options?.maxContextLines\n );\n return { fileDiff, actions, markerRows };\n });\n // UnresolvedFile is intentionally uncontrolled in React. Keep an internal\n // source-of-truth file so sequential conflict actions apply to the latest\n // resolved contents rather than the initial prop value.\n const onMergeConflictAction = useStableCallback(\n (\n payload: MergeConflictActionPayload,\n instance: UnresolvedFile<LAnnotation>\n ) => {\n setState((prevState) => {\n const { fileDiff, actions, markerRows } =\n instance.resolveConflict(\n payload.conflict.conflictIndex,\n payload.resolution,\n prevState.fileDiff\n ) ?? {};\n if (fileDiff == null || actions == null || markerRows == null) {\n return prevState;\n } else {\n return { fileDiff, actions, markerRows };\n }\n });\n }\n );\n const controlledSelection = selectedLines !== undefined;\n const poolManager = useContext(WorkerPoolContext);\n const instanceRef = useRef<UnresolvedFileClass<LAnnotation> | null>(null);\n const forceUpdate = useForceUpdate();\n const renderData = useNextRenderData(instanceRef, {\n fileDiff,\n actions,\n markerRows,\n lineAnnotations,\n }) ?? {\n fileDiff,\n actions,\n markerRows,\n lineAnnotations: lineAnnotations ?? EMPTY_LINE_ANNOTATIONS,\n };\n const ref = useStableCallback((fileContainer: HTMLElement | null) => {\n if (fileContainer != null) {\n if (instanceRef.current != null) {\n throw new Error(\n 'useUnresolvedFileInstance: An instance should not already exist when a node is created'\n );\n }\n instanceRef.current = new UnresolvedFileClass(\n mergeUnresolvedOptions({\n controlledSelection,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n onMergeConflictAction,\n options,\n }),\n !disableWorkerPool ? poolManager : undefined,\n forceUpdate\n );\n void instanceRef.current.hydrate({\n fileDiff,\n actions,\n markerRows,\n fileContainer,\n lineAnnotations,\n prerenderedHTML,\n });\n } else {\n if (instanceRef.current == null) {\n throw new Error(\n 'useUnresolvedFileInstance: A UnresolvedFile instance should exist when unmounting'\n );\n }\n instanceRef.current.cleanUp();\n instanceRef.current = null;\n }\n });\n\n useIsomorphicLayoutEffect(() => {\n if (instanceRef.current == null) return;\n const instance = instanceRef.current;\n const newOptions = mergeUnresolvedOptions({\n controlledSelection,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n onMergeConflictAction,\n options,\n });\n const forceRender = !areOptionsEqual(instance.options, newOptions);\n instance.setOptions(newOptions);\n void instance.render({\n fileDiff,\n actions,\n markerRows,\n lineAnnotations,\n forceRender,\n });\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines);\n }\n });\n\n const getHoveredLine = useCallback(():\n | GetHoveredLineResult<'diff'>\n | undefined => {\n return instanceRef.current?.getHoveredLine();\n }, []);\n\n const getInstance = useCallback(() => {\n return instanceRef.current ?? undefined;\n }, []);\n\n return { ...renderData, ref, getHoveredLine, getInstance };\n}\n\ninterface MergeUnresolvedOptionsProps<LAnnotation> {\n options: UnresolvedFileReactOptions<LAnnotation> | undefined;\n controlledSelection: boolean;\n onMergeConflictAction: UnresolvedFileOptions<LAnnotation>['onMergeConflictAction'];\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n hasCustomHeader: boolean;\n}\n\nfunction mergeUnresolvedOptions<LAnnotation>({\n options,\n controlledSelection,\n onMergeConflictAction,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n}: MergeUnresolvedOptionsProps<LAnnotation>): UnresolvedFileOptions<LAnnotation> {\n return {\n ...options,\n controlledSelection,\n onMergeConflictAction,\n hunkSeparators:\n options?.hunkSeparators === 'custom'\n ? noopRender\n : options?.hunkSeparators,\n // Add a placeholder type for the custom render\n mergeConflictActionsType:\n hasConflictUtility || options?.mergeConflictActionsType === 'custom'\n ? noopRender\n : options?.mergeConflictActionsType,\n renderCustomHeader: hasCustomHeader ? noopRender : undefined,\n renderGutterUtility: hasGutterRenderUtility ? noopRender : undefined,\n };\n}\n"],"mappings":";;;;;;;;;;;AAoCA,MAAM,4BACJ,OAAO,WAAW,cAAc,YAAY;AAwB9C,SAAgB,0BAAuC,EACrD,MACA,SACA,iBACA,eACA,iBACA,oBACA,wBACA,iBACA,qBAC4F;CAC5F,MAAM,CAAC,EAAE,UAAU,SAAS,cAAc,YAAY,eAAe;EACnE,MAAM,EAAE,UAAU,SAAS,eAAe,+BACxC,MACA,SAAS,eACX;EACA,OAAO;GAAE;GAAU;GAAS;EAAW;CACzC,CAAC;CAID,MAAM,wBAAwB,mBAE1B,SACA,aACG;EACH,UAAU,cAAc;GACtB,MAAM,EAAE,UAAU,SAAS,eACzB,SAAS,gBACP,QAAQ,SAAS,eACjB,QAAQ,YACR,UAAU,QACZ,KAAK,CAAC;GACR,IAAI,YAAY,QAAQ,WAAW,QAAQ,cAAc,MACvD,OAAO;QAEP,OAAO;IAAE;IAAU;IAAS;GAAW;EAE3C,CAAC;CACH,CACF;CACA,MAAM,sBAAsB,kBAAkB,KAAA;CAC9C,MAAM,cAAc,WAAW,iBAAiB;CAChD,MAAM,cAAc,OAAgD,IAAI;CACxE,MAAM,cAAc,eAAe;CACnC,MAAM,aAAa,kBAAkB,aAAa;EAChD;EACA;EACA;EACA;CACF,CAAC,KAAK;EACJ;EACA;EACA;EACA,iBAAiB,mBAAmB;CACtC;CACA,MAAM,MAAM,mBAAmB,kBAAsC;EACnE,IAAI,iBAAiB,MAAM;GACzB,IAAI,YAAY,WAAW,MACzB,MAAM,IAAI,MACR,wFACF;GAEF,YAAY,UAAU,IAAIA,eACxB,uBAAuB;IACrB;IACA;IACA;IACA;IACA;IACA;GACF,CAAC,GACD,CAAC,oBAAoB,cAAc,KAAA,GACnC,WACF;GACA,YAAiB,QAAQ,QAAQ;IAC/B;IACA;IACA;IACA;IACA;IACA;GACF,CAAC;EACH,OAAO;GACL,IAAI,YAAY,WAAW,MACzB,MAAM,IAAI,MACR,mFACF;GAEF,YAAY,QAAQ,QAAQ;GAC5B,YAAY,UAAU;EACxB;CACF,CAAC;CAED,gCAAgC;EAC9B,IAAI,YAAY,WAAW,MAAM;EACjC,MAAM,WAAW,YAAY;EAC7B,MAAM,aAAa,uBAAuB;GACxC;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,MAAM,cAAc,CAAC,gBAAgB,SAAS,SAAS,UAAU;EACjE,SAAS,WAAW,UAAU;EAC9B,SAAc,OAAO;GACnB;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,IAAI,kBAAkB,KAAA,GACpB,SAAS,iBAAiB,aAAa;CAE3C,CAAC;CAED,MAAM,iBAAiB,kBAEN;EACf,OAAO,YAAY,SAAS,eAAe;CAC7C,GAAG,CAAC,CAAC;CAEL,MAAM,cAAc,kBAAkB;EACpC,OAAO,YAAY,WAAW,KAAA;CAChC,GAAG,CAAC,CAAC;CAEL,OAAO;EAAE,GAAG;EAAY;EAAK;EAAgB;CAAY;AAC3D;AAWA,SAAS,uBAAoC,EAC3C,SACA,qBACA,uBACA,oBACA,iBACA,0BAC+E;CAC/E,OAAO;EACL,GAAG;EACH;EACA;EACA,gBACE,SAAS,mBAAmB,WACxB,aACA,SAAS;EAEf,0BACE,sBAAsB,SAAS,6BAA6B,WACxD,aACA,SAAS;EACf,oBAAoB,kBAAkB,aAAa,KAAA;EACnD,qBAAqB,yBAAyB,aAAa,KAAA;CAC7D;AACF"}
@@ -1,5 +1,6 @@
1
1
  import { Element, ElementContent, Properties } from "../node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.js";
2
- import { BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, CustomPreProperties, DiffLineAnnotation, DiffsHighlighter, ExpansionDirections, FileDiffMetadata, FileHeaderRenderMode, HighlightedToken, HunkData, HunkExpansionRegion, LineTypes, RenderDiffOptions, RenderRange, ThemedDiffResult } from "../types.js";
2
+ import { DiffsHighlighter } from "../highlighter/DiffsHighlighter.js";
3
+ import { BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, CustomPreProperties, DiffLineAnnotation, ExpansionDirections, FileDiffMetadata, FileHeaderRenderMode, HighlightedToken, HunkData, HunkExpansionRegion, LineTypes, RenderDiffOptions, RenderRange, ThemedDiffResult } from "../types.js";
3
4
  import { TextDocument } from "../editor/textDocument.js";
4
5
  import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
5
6
  import "../worker/index.js";
@@ -77,7 +78,6 @@ declare class DiffHunksRenderer<LAnnotation = undefined> {
77
78
  private onRenderUpdate?;
78
79
  private workerManager?;
79
80
  readonly __id: string;
80
- private highlighter;
81
81
  private diff;
82
82
  private expandedHunks;
83
83
  private deletionAnnotations;
@@ -147,6 +147,8 @@ declare class DiffHunksRenderer<LAnnotation = undefined> {
147
147
  protected getOptionsWithDefaults(): DiffHunksRendererOptionsWithDefaults;
148
148
  initializeHighlighter(): Promise<DiffsHighlighter>;
149
149
  hydrate(diff: FileDiffMetadata | undefined): void;
150
+ private getHighlightWorkerManager;
151
+ private cacheHighlightResult;
150
152
  private getLocalHighlightTheme;
151
153
  getEffectiveCodeOptions(): Pick<BaseCodeOptions, 'theme' | 'tokenizeMaxLineLength'>;
152
154
  private getRenderOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"DiffHunksRenderer.d.ts","names":[],"sources":["../../src/renderers/DiffHunksRenderer.ts"],"mappings":";;;;;;;UAoJiB,iCAAiC;EAChD,mBAAmB;;UAGJ,6CAA6C,KAC5D;EAGA,kBAAkB;;UAGH;EACf;EACA,UAAU;EACV;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,oBAAoB;;UAUL;EACf;EACA;EACA;EACA;EACA;EACA,eAAe;EACf,eAAe;;UAGA;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,UAAU;EACV,UAAU;;UAGK;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,UAAU;EACV,kBAAkB;EAClB,mBAAmB;EACnB,oBAAoB;EACpB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;EACrB,UAAU;EACV;EACA,SAAS;EACT,eAAe;EACf;EACA;EACA;EACA;EACA;EACA;;cAKW,kBAAkB;EAgCpB,SAAS;UACR;UAGA;UACA;WApCD;UAED;UAIA;UAEA;UAEA;UACA;UAEA;UACA;UAGA;UAGA;UAQA;EAER,YACS,UAAS,0BACR,sBACN,YAAY,mBAAmB,yBAEzB,8CACA,gBAAgB;EASnB;EAQA;;;;;;;;;;EA4BA,iBACL,MAAM,kBACN,eAAe;;EA0EV;;;;EAWA;;;;;;;;;;EAiBA,4BAA4B;UAqC3B;MA4BG,aAAa;EAIjB;EAMA,WAAW,SAAS;EAIpB,aAAa,SAAS,QAAQ;EAI9B,WACL,eACA,WAAW,qBACX;EA0BK,gBAAgB,oBAAoB;EAIpC,uBAAuB,YAAY;;EAKnC,oBACL,eAAe,YAAY;EAKtB,mBACL,iBAAiB,mBAAmB;;;;;;;EAyB/B,kBACL,YAAY,YAAY,MAAM,oBAC9B,6BACA,mCACA,uBAAuB,6BACvB;UAoKM;EAWD,oBACL,cAAc,0BAA0B;UAkElC;UAwBA;UAaA;YAOE,2BACR,YACC,6BAA6B;YAStB,yBACR,MACA,QACC,2BAA2B;UAetB;YAKU,iCAChB,KAAK,wBACF;YAGa,+BAChB,KAAK,wBACF;YAEK,0BAA0B;EAiDvB,yBAAyB,QAAQ;EAYvC,QAAQ,MAAM;UAmCb;EAQD,2BAA2B,KAChC;UAeM;;;;;;EA2CD,qBAAqB,MAAM,mBAAmB;UAwB7C;EAiCD,WACL,OAAM,8BACN,cAAa,cACZ;EAiJU,YACX,MAAM,kBACN,cAAa,cACZ,QAAQ;YAMD,iBACR,gBACA,oBACA,mBAAmB,sBAClB;UAeW;UAuBN;EA2CD,mBACL,MAAM,kBACN,QAAQ,kBACR,SAAS,mBACT;UAQM;UAqCA;UAgBA;UAuBA;EAaD,iBAAiB;UAIhB;UAIA;EAgjBD,cACL,6CACA,QAAQ,oBACP;EAyBI,cACL,QAAQ,mBACR,WAAU,mBACT;EAkDI,eACL,QAAQ,mBACR,eAAc;EAKT,kBACL,UAAU,kBACV;UAqBM;UAiEA;UA+DA;UASA"}
1
+ {"version":3,"file":"DiffHunksRenderer.d.ts","names":[],"sources":["../../src/renderers/DiffHunksRenderer.ts"],"mappings":";;;;;;;;UAuJiB,iCAAiC;EAChD,mBAAmB;;UAGJ,6CAA6C,KAC5D;EAGA,kBAAkB;;UAGH;EACf;EACA,UAAU;EACV;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,oBAAoB;;UAUL;EACf;EACA;EACA;EACA;EACA;EACA,eAAe;EACf,eAAe;;UAGA;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,UAAU;EACV,UAAU;;UAGK;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,UAAU;EACV,kBAAkB;EAClB,mBAAmB;EACnB,oBAAoB;EACpB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;EACrB,UAAU;EACV;EACA,SAAS;EACT,eAAe;EACf;EACA;EACA;EACA;EACA;EACA;;cAKW,kBAAkB;EA+BpB,SAAS;UACR;UAGA;UACA;WAnCD;UAKD;UAEA;UAEA;UACA;UAEA;UACA;UAGA;UAGA;UAQA;EAER,YACS,UAAS,0BACR,sBACN,YAAY,mBAAmB,yBAEzB,8CACA,gBAAgB;EAGnB;EAQA;;;;;;;;;;EA2BA,iBACL,MAAM,kBACN,eAAe;;EA0EV;;;;EAWA;;;;;;;;;;EAiBA,4BAA4B;UA0C3B;MA4BG,aAAa;EAIjB;EAMA,WAAW,SAAS;EAIpB,aAAa,SAAS,QAAQ;EAI9B,WACL,eACA,WAAW,qBACX;EA0BK,gBAAgB,oBAAoB;EAIpC,uBAAuB,YAAY;;EAKnC,oBACL,eAAe,YAAY;EAKtB,mBACL,iBAAiB,mBAAmB;;;;;;;EAyB/B,kBACL,YAAY,YAAY,MAAM,oBAC9B,6BACA,mCACA,uBAAuB,6BACvB;UAwKM;EAWD,oBACL,cAAc,0BAA0B;UAoElC;UA6BA;UAaA;YAOE,2BACR,YACC,6BAA6B;YAStB,yBACR,MACA,QACC,2BAA2B;UAetB;YAKU,iCAChB,KAAK,wBACF;YAGa,+BAChB,KAAK,wBACF;YAEK,0BAA0B;EAiD7B,yBAAyB,QAAQ;EAYjC,QAAQ,MAAM;UAwCb;UAWA;UAUA;EAQD,2BAA2B,KAChC;UAeM;;;;;;EA2CD,qBAAqB,MAAM,mBAAmB;UAwB7C;EA+BD,WACL,OAAM,8BACN,cAAa,cACZ;EAuJU,YACX,MAAM,kBACN,cAAa,cACZ,QAAQ;YASD,iBACR,gBACA,oBACA,mBAAmB,sBAClB;UAeW;UA2BN;EA6CD,mBACL,MAAM,kBACN,QAAQ,kBACR,SAAS,mBACT;UAQM;UAqCA;UAgBA;UAuBA;EAaD,iBAAiB;UAIhB;UAIA;EAmjBD,cACL,6CACA,QAAQ,oBACP;EAyBI,cACL,QAAQ,mBACR,WAAU,mBACT;EAkDI,eACL,QAAQ,mBACR,eAAc;EAKT,kBACL,UAAU,kBACV;UAqBM;UAiEA;UA+DA;UASA"}
@@ -1,9 +1,12 @@
1
1
  import { DEFAULT_EXPANDED_REGION, DEFAULT_RENDER_RANGE, DEFAULT_THEMES, DEFAULT_TOKENIZE_MAX_LENGTH } from "../constants.js";
2
- import { areLanguagesAttached } from "../highlighter/languages/areLanguagesAttached.js";
2
+ import { HighlighterDisposedError } from "../highlighter/highlighterType.js";
3
3
  import { areThemesAttached } from "../highlighter/themes/areThemesAttached.js";
4
4
  import { getHighlighterIfLoaded, getSharedHighlighter } from "../highlighter/shared_highlighter.js";
5
+ import { resolvePreferredHighlighter } from "../utils/resolvePreferredHighlighter.js";
5
6
  import { getFileAnnotations, shouldRenderFileAnnotations } from "../utils/includesFileAnnotations.js";
6
7
  import { createGutterGap, createGutterItem, createGutterWrapper, createHastElement } from "../utils/hast_utils.js";
8
+ import { hastToHtml } from "../utils/hastToHtml.js";
9
+ import { areLanguagesAttached } from "../highlighter/languages/areLanguagesAttached.js";
7
10
  import { applyLineTextWithNewline } from "../utils/applyLineTextWithNewline.js";
8
11
  import { areRenderRangesEqual } from "../utils/areRenderRangesEqual.js";
9
12
  import { createAnnotationElement } from "../utils/createAnnotationElement.js";
@@ -14,6 +17,7 @@ import { getFiletypeFromFileName } from "../utils/getFiletypeFromFileName.js";
14
17
  import { getHighlighterOptions } from "../utils/getHighlighterOptions.js";
15
18
  import { getLineAnnotationName } from "../utils/getLineAnnotationName.js";
16
19
  import { isDefaultRenderRange } from "../utils/isDefaultRenderRange.js";
20
+ import { isHandledWorkerPoolError } from "../worker/errors.js";
17
21
  import { areDiffTargetsEqual } from "../utils/areDiffTargetsEqual.js";
18
22
  import { getTrailingContextRangeSize } from "../utils/virtualDiffLayout.js";
19
23
  import { iterateOverDiff } from "../utils/iterateOverDiff.js";
@@ -28,7 +32,6 @@ import { getHunkSeparatorSlotName } from "../utils/getHunkSeparatorSlotName.js";
28
32
  import { getTotalLineCountFromHunks } from "../utils/getTotalLineCountFromHunks.js";
29
33
  import { isDiffPlainText } from "../utils/isDiffPlainText.js";
30
34
  import { renderDiffWithHighlighter } from "../utils/renderDiffWithHighlighter.js";
31
- import { toHtml } from "hast-util-to-html";
32
35
  //#region src/renderers/DiffHunksRenderer.ts
33
36
  let instanceId = -1;
34
37
  var DiffHunksRenderer = class {
@@ -37,7 +40,6 @@ var DiffHunksRenderer = class {
37
40
  onRenderUpdate;
38
41
  workerManager;
39
42
  __id = `diff-hunks-renderer:${++instanceId}`;
40
- highlighter;
41
43
  diff;
42
44
  expandedHunks = /* @__PURE__ */ new Map();
43
45
  deletionAnnotations = {};
@@ -52,7 +54,6 @@ var DiffHunksRenderer = class {
52
54
  this.annotationSlotName = annotationSlotName;
53
55
  this.onRenderUpdate = onRenderUpdate;
54
56
  this.workerManager = workerManager;
55
- if (workerManager?.isWorkingPool() !== true) this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES) ? getHighlighterIfLoaded() : void 0;
56
57
  }
57
58
  cleanUp() {
58
59
  this.endEditSession();
@@ -62,7 +63,6 @@ var DiffHunksRenderer = class {
62
63
  this.onRenderUpdate = void 0;
63
64
  }
64
65
  recycle() {
65
- this.highlighter = void 0;
66
66
  this.diff = void 0;
67
67
  if (this.editSessionActive) {
68
68
  if (this.renderCache != null) this.renderCache.renderRange = void 0;
@@ -148,7 +148,9 @@ var DiffHunksRenderer = class {
148
148
  workerManager.evictDiffFromCache(diff.cacheKey);
149
149
  return workerManager.primeDiffHighlightCache(diff).then(() => {
150
150
  this.applyRefreshedResult(diff, workerManager.getDiffResultCache(diff));
151
- }).catch((error) => this.onHighlightError(error));
151
+ }).catch((error) => {
152
+ if (!isHandledWorkerPoolError(error)) this.onHighlightError(error);
153
+ });
152
154
  }
153
155
  return this.asyncHighlight(diff).then((fresh) => this.applyRefreshedResult(diff, fresh)).catch((error) => this.onHighlightError(error));
154
156
  }
@@ -242,6 +244,7 @@ var DiffHunksRenderer = class {
242
244
  const previous = diff.additionLines[line] ?? "";
243
245
  if (previous !== text) {
244
246
  diff.additionLines[line] = text;
247
+ diff.additionCharacterCount += text.length - previous.length;
245
248
  changedAdditionLines.push(line);
246
249
  previousAdditionLines.set(line, previous);
247
250
  if (!dirtyLines.has(line)) hastLines[line] = createPlainAdditionLineElement(line, cleanLastNewline(text));
@@ -255,7 +258,9 @@ var DiffHunksRenderer = class {
255
258
  const prevLine = canSyncDiffLine ? diff.additionLines[line] ?? "" : "";
256
259
  const prevText = cleanLastNewline(prevLine);
257
260
  if (pendingStructuralRows == null && canSyncDiffLine && changedDocumentLines?.has(line) !== true) {
258
- diff.additionLines[line] = applyLineTextWithNewline(prevLine, lineText);
261
+ const nextLine = applyLineTextWithNewline(prevLine, lineText);
262
+ diff.additionLines[line] = nextLine;
263
+ diff.additionCharacterCount += nextLine.length - prevLine.length;
259
264
  if (prevText !== lineText) {
260
265
  changedAdditionLines.push(line);
261
266
  previousAdditionLines.set(line, prevLine);
@@ -306,7 +311,7 @@ var DiffHunksRenderer = class {
306
311
  this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
307
312
  regionsChanged = true;
308
313
  } else if (shouldTopAlignAdditionRecompute(diff, diff.additionLines)) {
309
- this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, diff.additionLines, this.options.parseDiffOptions));
314
+ this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, diff.additionLines, diff.additionCharacterCount, this.options.parseDiffOptions));
310
315
  regionsChanged = true;
311
316
  } else {
312
317
  const change = applySessionChangedLines(diff, changedAdditionLines, this.options.parseDiffOptions, previousAdditionLines);
@@ -330,7 +335,9 @@ var DiffHunksRenderer = class {
330
335
  const result = renderCache?.result;
331
336
  if (diff.isPartial) throw new Error("Could not apply document change for partial diff");
332
337
  const { additionLines: previousAdditionLines } = diff;
333
- diff.additionLines = getEditorDocumentLines(textDocument);
338
+ const { lines, characterCount } = getEditorDocumentLines(textDocument);
339
+ diff.additionLines = lines;
340
+ diff.additionCharacterCount = characterCount;
334
341
  if (result != null) result.code.additionLines = realignAdditionHastLines(previousAdditionLines, diff.additionLines, result.code.additionLines, textDocument);
335
342
  if (diff.additionLines.length <= 1 && diff.additionLines.join("") === "") {
336
343
  this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
@@ -346,7 +353,7 @@ var DiffHunksRenderer = class {
346
353
  const { parseDiffOptions } = this.options;
347
354
  const rawLines = diff.additionLines;
348
355
  if (shouldTopAlignAdditionRecompute(diff, rawLines)) {
349
- this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, rawLines, parseDiffOptions));
356
+ this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, rawLines, diff.additionCharacterCount, parseDiffOptions));
350
357
  return;
351
358
  }
352
359
  this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions, (index) => previousAdditionLines[index]));
@@ -403,12 +410,11 @@ var DiffHunksRenderer = class {
403
410
  useCSSClasses
404
411
  };
405
412
  }
406
- async initializeHighlighter() {
407
- this.highlighter = await getSharedHighlighter(getHighlighterOptions(this.computedLangs, {
413
+ initializeHighlighter() {
414
+ return getSharedHighlighter(getHighlighterOptions(this.computedLangs, {
408
415
  theme: this.getLocalHighlightTheme(),
409
- preferredHighlighter: this.workerManager?.getPreferredHighlighter() ?? this.options.preferredHighlighter
416
+ preferredHighlighter: resolvePreferredHighlighter(this.workerManager, this.options)
410
417
  }));
411
- return this.highlighter;
412
418
  }
413
419
  hydrate(diff) {
414
420
  if (diff == null) return;
@@ -425,13 +431,24 @@ var DiffHunksRenderer = class {
425
431
  result: massiveDiff ? void 0 : cache?.result,
426
432
  renderRange: void 0
427
433
  };
428
- if (!this.editSessionActive && this.workerManager?.isWorkingPool() === true) {
429
- if (this.renderCache.result == null && !massiveDiff) this.workerManager.highlightDiffAST(this, this.diff);
430
- } else if (this.highlighter == null) {
434
+ const workerManager = this.getHighlightWorkerManager(diff);
435
+ if (workerManager != null) {
436
+ if (this.renderCache.result == null && !massiveDiff) workerManager.highlightDiffAST(this, this.diff);
437
+ } else if (getHighlighterIfLoaded({ theme: this.getLocalHighlightTheme() }) == null) {
431
438
  this.computedLangs = getDiffLanguages(diff);
432
- this.initializeHighlighter();
439
+ this.initializeHighlighter().catch((error) => {
440
+ if (!(error instanceof HighlighterDisposedError)) this.onHighlightError(error);
441
+ });
433
442
  }
434
443
  }
444
+ getHighlightWorkerManager(diff) {
445
+ const { editSessionActive, workerManager } = this;
446
+ return !editSessionActive && workerManager?.isWorkingPool() === true && !workerManager.shouldHighlightOnMainThread(diff) ? workerManager : void 0;
447
+ }
448
+ cacheHighlightResult(diff, renderResult) {
449
+ const { editSessionActive, workerManager } = this;
450
+ if (!editSessionActive && workerManager?.isWorkingPool() === true) workerManager.setDiffResultCache(diff.cacheKey, renderResult);
451
+ }
435
452
  getLocalHighlightTheme() {
436
453
  return this.workerManager?.getDiffRenderOptions().theme ?? this.options.theme ?? DEFAULT_THEMES;
437
454
  }
@@ -492,10 +509,10 @@ var DiffHunksRenderer = class {
492
509
  canRenderDiff(diff, options, forcePlainText) {
493
510
  const { renderCache } = this;
494
511
  if (renderCache == null || areDiffTargetsEqual(renderCache.diff, diff)) return true;
495
- if (forcePlainText) return renderCache.result == null && renderCache.hydrated !== true || this.workerManager?.isWorkingPool() === true || this.highlighter != null && areThemesAttached(options.theme);
512
+ if (forcePlainText) return renderCache.result == null && renderCache.hydrated !== true || this.workerManager?.isWorkingPool() === true && !this.workerManager.shouldHighlightOnMainThread(diff) || getHighlighterIfLoaded({ theme: options.theme }) != null;
496
513
  if (renderCache.result == null && renderCache.hydrated !== true) return true;
497
- if (!this.editSessionActive && this.workerManager?.isWorkingPool() === true) return !renderCache.highlighted;
498
- return this.highlighter != null && areThemesAttached(options.theme);
514
+ if (this.getHighlightWorkerManager(diff) != null) return !renderCache.highlighted;
515
+ return getHighlighterIfLoaded({ theme: options.theme }) != null;
499
516
  }
500
517
  renderDiff(diff = this.diff, renderRange = DEFAULT_RENDER_RANGE) {
501
518
  this.diff = diff;
@@ -527,24 +544,26 @@ var DiffHunksRenderer = class {
527
544
  const canRenderDiff = this.canRenderDiff(diff, options, forcePlainText);
528
545
  const newContent = !areDiffTargetsEqual(diff, this.renderCache.diff);
529
546
  const newRenderRange = !areRenderRangesEqual(this.renderCache.renderRange, renderRange);
530
- if (!this.editSessionActive && this.workerManager?.isWorkingPool() === true) {
547
+ const workerManager = this.getHighlightWorkerManager(diff);
548
+ if (workerManager != null) {
531
549
  const preserveHydratedContent = this.renderCache.result == null && this.renderCache.highlighted && !forcePlainText && !newContent && isDefaultRenderRange(renderRange);
532
550
  if (canRenderDiff && !preserveHydratedContent && (forcePlainText || this.renderCache.result == null || !this.renderCache.highlighted && (newContent || newRenderRange))) {
533
551
  this.renderCache.diff = diff;
534
552
  this.renderCache.options = options;
535
553
  this.renderCache.highlighted = false;
536
- if (this.renderCache.result == null || newContent || newRenderRange || forceHighlight) this.renderCache.result = this.workerManager.getPlainDiffAST(diff, renderRange.startingLine, renderRange.totalLines, isDefaultRenderRange(renderRange) ? true : expandUnchanged ? true : this.expandedHunks, collapsedContextThreshold);
554
+ if (this.renderCache.result == null || newContent || newRenderRange || forceHighlight) this.renderCache.result = workerManager.getPlainDiffAST(diff, renderRange.startingLine, renderRange.totalLines, isDefaultRenderRange(renderRange) ? true : expandUnchanged ? true : this.expandedHunks, collapsedContextThreshold);
537
555
  this.renderCache.renderRange = renderRange;
538
556
  }
539
- if (!forcePlainText && hasContent && (!this.renderCache.highlighted || forceHighlight)) this.workerManager.highlightDiffAST(this, diff);
557
+ if (!forcePlainText && hasContent && (!this.renderCache.highlighted || forceHighlight)) workerManager.highlightDiffAST(this, diff);
540
558
  } else {
541
559
  this.computedLangs = getDiffLanguages(diff);
542
- this.highlighter ??= getHighlighterIfLoaded();
543
- const hasThemes = this.highlighter != null && areThemesAttached(options.theme);
544
- const hasLangs = this.highlighter != null && areLanguagesAttached(this.computedLangs);
560
+ const highlighter = getHighlighterIfLoaded();
561
+ const hasThemes = highlighter != null && areThemesAttached(options.theme, highlighter);
562
+ const hasLangs = highlighter != null && areLanguagesAttached(this.computedLangs, highlighter);
545
563
  const canHighlight = !forcePlainText && hasLangs;
546
- if (canRenderDiff && this.highlighter != null && hasThemes && (forceHighlight || forcePlainText || !this.renderCache.highlighted && canHighlight || this.renderCache.result == null)) {
547
- const { result, options } = this.renderDiffWithHighlighter(diff, this.highlighter, forcePlainText || !hasLangs);
564
+ const lazyLineAST = Number.isFinite(renderRange.totalLines);
565
+ if (canRenderDiff && highlighter != null && hasThemes && (forceHighlight || forcePlainText || !this.renderCache.highlighted && canHighlight || this.renderCache.result == null)) {
566
+ const { result, options } = this.renderDiffWithHighlighter(diff, highlighter, forcePlainText || !hasLangs, lazyLineAST);
548
567
  this.renderCache = {
549
568
  diff,
550
569
  options,
@@ -552,16 +571,26 @@ var DiffHunksRenderer = class {
552
571
  result,
553
572
  renderRange: void 0
554
573
  };
574
+ if (canHighlight) this.cacheHighlightResult(diff, {
575
+ result,
576
+ options
577
+ });
555
578
  }
556
- if (!hasThemes || !forcePlainText && !hasLangs) this.asyncHighlight(diff).then(({ result, options }) => {
579
+ if (!hasThemes || !forcePlainText && !hasLangs) this.asyncHighlight(diff, lazyLineAST).then(({ result, options }) => {
580
+ if (!forcePlainText) this.cacheHighlightResult(diff, {
581
+ result,
582
+ options
583
+ });
557
584
  this.applyHighlightResult(diff, result, options, !forcePlainText);
585
+ }).catch((error) => {
586
+ if (!(error instanceof HighlighterDisposedError)) this.onHighlightError(error);
558
587
  });
559
588
  }
560
589
  return this.renderCache.result != null ? this.processDiffResult(this.renderCache.diff, renderRange, this.renderCache.result) : void 0;
561
590
  }
562
591
  async asyncRender(diff, renderRange = DEFAULT_RENDER_RANGE) {
563
592
  this.diff = diff;
564
- const { result } = await this.asyncHighlight(diff);
593
+ const { result } = await this.asyncHighlight(diff, Number.isFinite(renderRange.totalLines));
565
594
  return this.processDiffResult(diff, renderRange, result);
566
595
  }
567
596
  createPreElement(split, totalLines, customProperties) {
@@ -577,19 +606,21 @@ var DiffHunksRenderer = class {
577
606
  customProperties
578
607
  });
579
608
  }
580
- async asyncHighlight(diff) {
609
+ async asyncHighlight(diff, lazyLineAST = false) {
581
610
  const forcePlainText = isDiffMassive(diff, this.getTokenizeMaxLength());
582
611
  this.computedLangs = forcePlainText ? ["text"] : getDiffLanguages(diff);
583
- const hasThemes = this.highlighter != null && areThemesAttached(this.getLocalHighlightTheme());
584
- const hasLangs = forcePlainText || this.highlighter != null && areLanguagesAttached(this.computedLangs);
585
- if (this.highlighter == null || !hasThemes || !hasLangs) this.highlighter = await this.initializeHighlighter();
586
- return this.renderDiffWithHighlighter(diff, this.highlighter, forcePlainText);
612
+ let highlighter = getHighlighterIfLoaded();
613
+ const hasThemes = highlighter != null && areThemesAttached(this.getLocalHighlightTheme(), highlighter);
614
+ const hasLangs = forcePlainText || highlighter != null && areLanguagesAttached(this.computedLangs, highlighter);
615
+ if (highlighter == null || !hasThemes || !hasLangs) highlighter = await this.initializeHighlighter();
616
+ return this.renderDiffWithHighlighter(diff, highlighter, forcePlainText, lazyLineAST);
587
617
  }
588
- renderDiffWithHighlighter(diff, highlighter, forcePlainText = false) {
618
+ renderDiffWithHighlighter(diff, highlighter, forcePlainText = false, lazyLineAST = false) {
589
619
  const { options } = this.getRenderOptions(diff);
590
620
  const { collapsedContextThreshold } = this.getOptionsWithDefaults();
591
621
  const result = renderDiffWithHighlighter(diff, highlighter, options, {
592
622
  forcePlainText,
623
+ lazyLineAST,
593
624
  expandedHunks: forcePlainText ? true : void 0,
594
625
  collapsedContextThreshold
595
626
  });
@@ -882,7 +913,7 @@ var DiffHunksRenderer = class {
882
913
  }
883
914
  }
884
915
  }
885
- if (noEOFCRAddition) {
916
+ if (noEOFCRAddition && !(unified && noEOFCRDeletion && type !== "change")) {
886
917
  const noEOFType = type === "context" || type === "context-expanded" ? type : "change-addition";
887
918
  if (diffStyle === "unified") {
888
919
  context.unifiedContentAST.push(createNoNewlineElement(noEOFType));
@@ -992,11 +1023,11 @@ var DiffHunksRenderer = class {
992
1023
  };
993
1024
  }
994
1025
  renderFullHTML(result, tempChildren = []) {
995
- return toHtml(this.renderFullAST(result, tempChildren));
1026
+ return hastToHtml(this.renderFullAST(result, tempChildren));
996
1027
  }
997
1028
  renderPartialHTML(children, columnType) {
998
- if (columnType == null) return toHtml(children);
999
- return toHtml(createHastElement({
1029
+ if (columnType == null) return hastToHtml(children);
1030
+ return hastToHtml(createHastElement({
1000
1031
  tagName: "code",
1001
1032
  children,
1002
1033
  properties: {
@@ -1272,8 +1303,16 @@ function createPlainAdditionLineElement(lineIndex, lineText, unifiedLineIndex =
1272
1303
  }
1273
1304
  function getEditorDocumentLines(textDocument) {
1274
1305
  const lines = [];
1275
- for (let line = 0; line < textDocument.lineCount; line++) lines.push(textDocument.getLineText(line, true));
1276
- return lines;
1306
+ let characterCount = 0;
1307
+ for (let line = 0; line < textDocument.lineCount; line++) {
1308
+ const text = textDocument.getLineText(line, true);
1309
+ lines.push(text);
1310
+ characterCount += text.length;
1311
+ }
1312
+ return {
1313
+ lines,
1314
+ characterCount
1315
+ };
1277
1316
  }
1278
1317
  function getDiffLanguages(diff) {
1279
1318
  if (diff.lang != null) return [diff.lang];