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

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 (625) hide show
  1. package/README.md +15 -15
  2. package/dist/components/CodeView.d.ts +10 -11
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +14 -14
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +4 -4
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +53 -24
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +19 -18
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +89 -58
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/FileStream.d.ts +0 -1
  15. package/dist/components/FileStream.d.ts.map +1 -1
  16. package/dist/components/FileStream.js +8 -6
  17. package/dist/components/FileStream.js.map +1 -1
  18. package/dist/components/UnresolvedFile.d.ts +1 -2
  19. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  20. package/dist/components/UnresolvedFile.js +3 -3
  21. package/dist/components/UnresolvedFile.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +5 -2
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  24. package/dist/components/VirtualizedFile.js +97 -35
  25. package/dist/components/VirtualizedFile.js.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.d.ts +8 -4
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  28. package/dist/components/VirtualizedFileDiff.js +91 -30
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  30. package/dist/components/Virtualizer.d.ts +1 -1
  31. package/dist/components/Virtualizer.d.ts.map +1 -1
  32. package/dist/components/Virtualizer.js +23 -24
  33. package/dist/components/Virtualizer.js.map +1 -1
  34. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  35. package/dist/components/web-components.d.ts.map +1 -1
  36. package/dist/components/web-components.js +2 -3
  37. package/dist/components/web-components.js.map +1 -1
  38. package/dist/constants.d.ts +3 -2
  39. package/dist/constants.d.ts.map +1 -1
  40. package/dist/constants.js +3 -2
  41. package/dist/constants.js.map +1 -1
  42. package/dist/editor/command.d.ts +3 -2
  43. package/dist/editor/command.d.ts.map +1 -1
  44. package/dist/editor/command.js +10 -6
  45. package/dist/editor/command.js.map +1 -1
  46. package/dist/editor/editStack.d.ts +7 -1
  47. package/dist/editor/editStack.d.ts.map +1 -1
  48. package/dist/editor/editStack.js +3 -3
  49. package/dist/editor/editStack.js.map +1 -1
  50. package/dist/editor/editor.d.ts +56 -6
  51. package/dist/editor/editor.d.ts.map +1 -1
  52. package/dist/editor/editor.js +758 -397
  53. package/dist/editor/editor.js.map +1 -1
  54. package/dist/editor/editor2.js +3 -3
  55. package/dist/editor/editor2.js.map +1 -1
  56. package/dist/editor/index.d.ts +2 -2
  57. package/dist/editor/index.js +1 -2
  58. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  59. package/dist/editor/lineAnnotations.js +2 -3
  60. package/dist/editor/lineAnnotations.js.map +1 -1
  61. package/dist/editor/marker.d.ts +4 -3
  62. package/dist/editor/marker.d.ts.map +1 -1
  63. package/dist/editor/marker.js +30 -13
  64. package/dist/editor/marker.js.map +1 -1
  65. package/dist/editor/pieceTable.d.ts +10 -3
  66. package/dist/editor/pieceTable.d.ts.map +1 -1
  67. package/dist/editor/pieceTable.js +170 -129
  68. package/dist/editor/pieceTable.js.map +1 -1
  69. package/dist/editor/platform.d.ts +8 -1
  70. package/dist/editor/platform.d.ts.map +1 -1
  71. package/dist/editor/platform.js +16 -5
  72. package/dist/editor/platform.js.map +1 -1
  73. package/dist/editor/searchPanel.d.ts +13 -3
  74. package/dist/editor/searchPanel.d.ts.map +1 -1
  75. package/dist/editor/searchPanel.js +194 -67
  76. package/dist/editor/searchPanel.js.map +1 -1
  77. package/dist/editor/selection.d.ts +41 -4
  78. package/dist/editor/selection.d.ts.map +1 -1
  79. package/dist/editor/selection.js +423 -83
  80. package/dist/editor/selection.js.map +1 -1
  81. package/dist/editor/selectionAction.d.ts +4 -5
  82. package/dist/editor/selectionAction.d.ts.map +1 -1
  83. package/dist/editor/selectionAction.js +14 -64
  84. package/dist/editor/selectionAction.js.map +1 -1
  85. package/dist/editor/sprite.d.ts +2 -2
  86. package/dist/editor/sprite.d.ts.map +1 -1
  87. package/dist/editor/sprite.js +8 -8
  88. package/dist/editor/sprite.js.map +1 -1
  89. package/dist/editor/textDocument.d.ts +5 -4
  90. package/dist/editor/textDocument.d.ts.map +1 -1
  91. package/dist/editor/textDocument.js +26 -15
  92. package/dist/editor/textDocument.js.map +1 -1
  93. package/dist/editor/textMeasure.d.ts +37 -3
  94. package/dist/editor/textMeasure.d.ts.map +1 -1
  95. package/dist/editor/textMeasure.js +85 -10
  96. package/dist/editor/textMeasure.js.map +1 -1
  97. package/dist/editor/tokenzier.d.ts +1 -0
  98. package/dist/editor/tokenzier.d.ts.map +1 -1
  99. package/dist/editor/tokenzier.js +25 -19
  100. package/dist/editor/tokenzier.js.map +1 -1
  101. package/dist/editor/utils.d.ts +2 -1
  102. package/dist/editor/utils.d.ts.map +1 -1
  103. package/dist/editor/utils.js +6 -3
  104. package/dist/editor/utils.js.map +1 -1
  105. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  106. package/dist/highlighter/languages/areLanguagesAttached.js +1 -2
  107. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  108. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +0 -2
  109. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  110. package/dist/highlighter/languages/attachResolvedLanguages.js +1 -2
  111. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  112. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  113. package/dist/highlighter/languages/cleanUpResolvedLanguages.js +1 -2
  114. package/dist/highlighter/languages/cleanUpResolvedLanguages.js.map +1 -1
  115. package/dist/highlighter/languages/constants.d.ts +0 -1
  116. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  117. package/dist/highlighter/languages/constants.js +1 -1
  118. package/dist/highlighter/languages/constants.js.map +1 -1
  119. package/dist/highlighter/languages/getResolvedLanguages.d.ts +0 -2
  120. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  121. package/dist/highlighter/languages/getResolvedLanguages.js +1 -2
  122. package/dist/highlighter/languages/getResolvedLanguages.js.map +1 -1
  123. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +0 -2
  124. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  125. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js +1 -2
  126. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js.map +1 -1
  127. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  128. package/dist/highlighter/languages/hasResolvedLanguages.js +1 -2
  129. package/dist/highlighter/languages/hasResolvedLanguages.js.map +1 -1
  130. package/dist/highlighter/languages/registerCustomLanguage.d.ts +0 -1
  131. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  132. package/dist/highlighter/languages/registerCustomLanguage.js +1 -2
  133. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
  134. package/dist/highlighter/languages/resolveLanguage.d.ts +0 -2
  135. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  136. package/dist/highlighter/languages/resolveLanguage.js +4 -5
  137. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  138. package/dist/highlighter/languages/resolveLanguages.d.ts +0 -2
  139. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  140. package/dist/highlighter/languages/resolveLanguages.js +1 -2
  141. package/dist/highlighter/languages/resolveLanguages.js.map +1 -1
  142. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  143. package/dist/highlighter/shared_highlighter.js +3 -4
  144. package/dist/highlighter/shared_highlighter.js.map +1 -1
  145. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  146. package/dist/highlighter/themes/areThemesAttached.js +1 -2
  147. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  148. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  149. package/dist/highlighter/themes/attachResolvedThemes.js +1 -2
  150. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  151. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  152. package/dist/highlighter/themes/cleanUpResolvedThemes.js +1 -2
  153. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  154. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  155. package/dist/highlighter/themes/constants.js +1 -1
  156. package/dist/highlighter/themes/constants.js.map +1 -1
  157. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  158. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +1 -2
  159. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  160. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  161. package/dist/highlighter/themes/getResolvedThemes.js +1 -2
  162. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  163. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  164. package/dist/highlighter/themes/hasResolvedThemes.js +1 -2
  165. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  166. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  167. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +1 -2
  168. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  169. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  170. package/dist/highlighter/themes/registerCustomTheme.js +1 -2
  171. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  172. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  173. package/dist/highlighter/themes/resolveTheme.js +1 -2
  174. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  175. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  176. package/dist/highlighter/themes/resolveThemes.js +1 -2
  177. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  178. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  179. package/dist/highlighter/themes/themeResolution.js +1 -2
  180. package/dist/highlighter/themes/themeResolution.js.map +1 -1
  181. package/dist/highlighter/themes/themeResolver.d.ts +2 -2
  182. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  183. package/dist/highlighter/themes/themeResolver.js +1 -2
  184. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  185. package/dist/index.d.ts +10 -10
  186. package/dist/index.js +2 -3
  187. package/dist/managers/InteractionManager.d.ts +7 -0
  188. package/dist/managers/InteractionManager.d.ts.map +1 -1
  189. package/dist/managers/InteractionManager.js +26 -4
  190. package/dist/managers/InteractionManager.js.map +1 -1
  191. package/dist/managers/ResizeManager.d.ts.map +1 -1
  192. package/dist/managers/ResizeManager.js +2 -2
  193. package/dist/managers/ResizeManager.js.map +1 -1
  194. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  195. package/dist/managers/ScrollSyncManager.js +1 -1
  196. package/dist/managers/ScrollSyncManager.js.map +1 -1
  197. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  198. package/dist/managers/UniversalRenderingManager.js +2 -2
  199. package/dist/managers/UniversalRenderingManager.js.map +1 -1
  200. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +228 -0
  201. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -0
  202. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts +84 -0
  203. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -0
  204. package/dist/react/CodeView.d.ts +1 -1
  205. package/dist/react/CodeView.d.ts.map +1 -1
  206. package/dist/react/CodeView.js +16 -15
  207. package/dist/react/CodeView.js.map +1 -1
  208. package/dist/react/EditorContext.d.ts +0 -1
  209. package/dist/react/EditorContext.d.ts.map +1 -1
  210. package/dist/react/EditorContext.js +2 -5
  211. package/dist/react/EditorContext.js.map +1 -1
  212. package/dist/react/File.d.ts +1 -0
  213. package/dist/react/File.d.ts.map +1 -1
  214. package/dist/react/File.js +4 -6
  215. package/dist/react/File.js.map +1 -1
  216. package/dist/react/FileDiff.d.ts +1 -0
  217. package/dist/react/FileDiff.d.ts.map +1 -1
  218. package/dist/react/FileDiff.js +4 -6
  219. package/dist/react/FileDiff.js.map +1 -1
  220. package/dist/react/MultiFileDiff.d.ts +1 -0
  221. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  222. package/dist/react/MultiFileDiff.js +4 -6
  223. package/dist/react/MultiFileDiff.js.map +1 -1
  224. package/dist/react/PatchDiff.d.ts +1 -0
  225. package/dist/react/PatchDiff.d.ts.map +1 -1
  226. package/dist/react/PatchDiff.js +4 -6
  227. package/dist/react/PatchDiff.js.map +1 -1
  228. package/dist/react/UnresolvedFile.d.ts +2 -1
  229. package/dist/react/UnresolvedFile.d.ts.map +1 -1
  230. package/dist/react/UnresolvedFile.js +4 -6
  231. package/dist/react/UnresolvedFile.js.map +1 -1
  232. package/dist/react/Virtualizer.d.ts.map +1 -1
  233. package/dist/react/Virtualizer.js +2 -5
  234. package/dist/react/Virtualizer.js.map +1 -1
  235. package/dist/react/WorkerPoolContext.d.ts +0 -1
  236. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  237. package/dist/react/WorkerPoolContext.js +2 -5
  238. package/dist/react/WorkerPoolContext.js.map +1 -1
  239. package/dist/react/constants.d.ts.map +1 -1
  240. package/dist/react/constants.js +1 -1
  241. package/dist/react/constants.js.map +1 -1
  242. package/dist/react/index.d.ts +2 -2
  243. package/dist/react/index.js +1 -2
  244. package/dist/react/jsx.d.ts +0 -2
  245. package/dist/react/jsx.d.ts.map +1 -1
  246. package/dist/react/types.d.ts +2 -0
  247. package/dist/react/types.d.ts.map +1 -1
  248. package/dist/react/utils/renderDiffChildren.d.ts +2 -0
  249. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  250. package/dist/react/utils/renderDiffChildren.js +18 -11
  251. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  252. package/dist/react/utils/renderFileChildren.d.ts +2 -0
  253. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  254. package/dist/react/utils/renderFileChildren.js +18 -11
  255. package/dist/react/utils/renderFileChildren.js.map +1 -1
  256. package/dist/react/utils/templateRender.d.ts.map +1 -1
  257. package/dist/react/utils/templateRender.js +1 -2
  258. package/dist/react/utils/templateRender.js.map +1 -1
  259. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  260. package/dist/react/utils/useFileDiffInstance.js +1 -3
  261. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  262. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  263. package/dist/react/utils/useFileInstance.js +1 -2
  264. package/dist/react/utils/useFileInstance.js.map +1 -1
  265. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  266. package/dist/react/utils/useStableCallback.js +1 -2
  267. package/dist/react/utils/useStableCallback.js.map +1 -1
  268. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  269. package/dist/react/utils/useUnresolvedFileInstance.js +10 -11
  270. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  271. package/dist/renderers/DiffHunksRenderer.d.ts +5 -5
  272. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  273. package/dist/renderers/DiffHunksRenderer.js +73 -20
  274. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  275. package/dist/renderers/FileRenderer.d.ts +1 -3
  276. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  277. package/dist/renderers/FileRenderer.js +23 -8
  278. package/dist/renderers/FileRenderer.js.map +1 -1
  279. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +1 -2
  280. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  281. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -2
  282. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  283. package/dist/shiki-stream/index.js +1 -2
  284. package/dist/shiki-stream/stream.d.ts +0 -1
  285. package/dist/shiki-stream/stream.d.ts.map +1 -1
  286. package/dist/shiki-stream/stream.js +1 -2
  287. package/dist/shiki-stream/stream.js.map +1 -1
  288. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  289. package/dist/shiki-stream/tokenizer.js +1 -1
  290. package/dist/shiki-stream/tokenizer.js.map +1 -1
  291. package/dist/shiki-stream/types.d.ts +0 -1
  292. package/dist/shiki-stream/types.d.ts.map +1 -1
  293. package/dist/sprite.d.ts.map +1 -1
  294. package/dist/sprite.js +1 -1
  295. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  296. package/dist/ssr/FileDiffReact.js +4 -7
  297. package/dist/ssr/FileDiffReact.js.map +1 -1
  298. package/dist/ssr/index.d.ts +2 -2
  299. package/dist/ssr/index.js +1 -2
  300. package/dist/ssr/preloadDiffs.d.ts +1 -1
  301. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  302. package/dist/ssr/preloadDiffs.js +1 -2
  303. package/dist/ssr/preloadDiffs.js.map +1 -1
  304. package/dist/ssr/preloadFile.d.ts.map +1 -1
  305. package/dist/ssr/preloadFile.js +1 -2
  306. package/dist/ssr/preloadFile.js.map +1 -1
  307. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  308. package/dist/ssr/preloadPatchFile.js +2 -3
  309. package/dist/ssr/preloadPatchFile.js.map +1 -1
  310. package/dist/ssr/renderHTML.d.ts +1 -1
  311. package/dist/ssr/renderHTML.d.ts.map +1 -1
  312. package/dist/ssr/renderHTML.js +1 -2
  313. package/dist/ssr/renderHTML.js.map +1 -1
  314. package/dist/string-import.d.ts +4 -0
  315. package/dist/string-import.d.ts.map +1 -1
  316. package/dist/style.js +3 -3
  317. package/dist/style.js.map +1 -1
  318. package/dist/types.d.ts +27 -6
  319. package/dist/types.d.ts.map +1 -1
  320. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  321. package/dist/utils/areDiffLineAnnotationsEqual.js +1 -1
  322. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  323. package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  324. package/dist/utils/areDiffRenderOptionsEqual.js +1 -2
  325. package/dist/utils/areDiffRenderOptionsEqual.js.map +1 -1
  326. package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  327. package/dist/utils/areDiffTargetsEqual.js +1 -1
  328. package/dist/utils/areDiffTargetsEqual.js.map +1 -1
  329. package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  330. package/dist/utils/areFileRenderOptionsEqual.js +1 -2
  331. package/dist/utils/areFileRenderOptionsEqual.js.map +1 -1
  332. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  333. package/dist/utils/areFilesEqual.js +1 -1
  334. package/dist/utils/areFilesEqual.js.map +1 -1
  335. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  336. package/dist/utils/areHunkDataEqual.js +1 -1
  337. package/dist/utils/areHunkDataEqual.js.map +1 -1
  338. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  339. package/dist/utils/areLineAnnotationsEqual.js +1 -1
  340. package/dist/utils/areLineAnnotationsEqual.js.map +1 -1
  341. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  342. package/dist/utils/areManagedSnapshotsEqual.js +1 -1
  343. package/dist/utils/areManagedSnapshotsEqual.js.map +1 -1
  344. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  345. package/dist/utils/areMergeConflictActionsEqual.js +1 -1
  346. package/dist/utils/areMergeConflictActionsEqual.js.map +1 -1
  347. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  348. package/dist/utils/areObjectsEqual.js +1 -1
  349. package/dist/utils/areObjectsEqual.js.map +1 -1
  350. package/dist/utils/areOptionsEqual.d.ts +0 -2
  351. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  352. package/dist/utils/areOptionsEqual.js +1 -2
  353. package/dist/utils/areOptionsEqual.js.map +1 -1
  354. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  355. package/dist/utils/arePrePropertiesEqual.js +1 -1
  356. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  357. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  358. package/dist/utils/areRenderRangesEqual.js +1 -1
  359. package/dist/utils/areRenderRangesEqual.js.map +1 -1
  360. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  361. package/dist/utils/areSelectionPointsEqual.js +1 -1
  362. package/dist/utils/areSelectionPointsEqual.js.map +1 -1
  363. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  364. package/dist/utils/areSelectionsEqual.js +1 -1
  365. package/dist/utils/areSelectionsEqual.js.map +1 -1
  366. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  367. package/dist/utils/areThemesEqual.js +1 -1
  368. package/dist/utils/areThemesEqual.js.map +1 -1
  369. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  370. package/dist/utils/areVirtualWindowSpecsEqual.js +1 -1
  371. package/dist/utils/areVirtualWindowSpecsEqual.js.map +1 -1
  372. package/dist/utils/areWorkerStatsEqual.d.ts +0 -2
  373. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  374. package/dist/utils/areWorkerStatsEqual.js +1 -1
  375. package/dist/utils/areWorkerStatsEqual.js.map +1 -1
  376. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  377. package/dist/utils/cleanLastNewline.js +1 -1
  378. package/dist/utils/cleanLastNewline.js.map +1 -1
  379. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  380. package/dist/utils/computeEstimatedDiffHeights.js +1 -2
  381. package/dist/utils/computeEstimatedDiffHeights.js.map +1 -1
  382. package/dist/utils/computeFileOffsets.d.ts +9 -1
  383. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  384. package/dist/utils/computeFileOffsets.js +20 -2
  385. package/dist/utils/computeFileOffsets.js.map +1 -1
  386. package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  387. package/dist/utils/computeVirtualFileMetrics.js +1 -2
  388. package/dist/utils/computeVirtualFileMetrics.js.map +1 -1
  389. package/dist/utils/createAnnotationElement.d.ts +1 -1
  390. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  391. package/dist/utils/createAnnotationElement.js +1 -2
  392. package/dist/utils/createAnnotationElement.js.map +1 -1
  393. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  394. package/dist/utils/createAnnotationWrapperNode.js +1 -1
  395. package/dist/utils/createAnnotationWrapperNode.js.map +1 -1
  396. package/dist/utils/createContentColumn.d.ts +1 -1
  397. package/dist/utils/createContentColumn.d.ts.map +1 -1
  398. package/dist/utils/createContentColumn.js +1 -2
  399. package/dist/utils/createContentColumn.js.map +1 -1
  400. package/dist/utils/createEmptyRowBuffer.d.ts +1 -1
  401. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  402. package/dist/utils/createEmptyRowBuffer.js +1 -2
  403. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  404. package/dist/utils/createFileHeaderElement.d.ts +1 -1
  405. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  406. package/dist/utils/createFileHeaderElement.js +6 -3
  407. package/dist/utils/createFileHeaderElement.js.map +1 -1
  408. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  409. package/dist/utils/createGutterUtilityContentNode.js +1 -1
  410. package/dist/utils/createGutterUtilityContentNode.js.map +1 -1
  411. package/dist/utils/createGutterUtilityElement.d.ts +1 -1
  412. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  413. package/dist/utils/createGutterUtilityElement.js +1 -2
  414. package/dist/utils/createGutterUtilityElement.js.map +1 -1
  415. package/dist/utils/createNoNewlineElement.d.ts +1 -1
  416. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  417. package/dist/utils/createNoNewlineElement.js +1 -2
  418. package/dist/utils/createNoNewlineElement.js.map +1 -1
  419. package/dist/utils/createPreElement.d.ts +1 -1
  420. package/dist/utils/createPreElement.d.ts.map +1 -1
  421. package/dist/utils/createPreElement.js +1 -2
  422. package/dist/utils/createPreElement.js.map +1 -1
  423. package/dist/utils/createRowNodes.d.ts.map +1 -1
  424. package/dist/utils/createRowNodes.js +1 -1
  425. package/dist/utils/createRowNodes.js.map +1 -1
  426. package/dist/utils/createSeparator.d.ts +1 -1
  427. package/dist/utils/createSeparator.d.ts.map +1 -1
  428. package/dist/utils/createSeparator.js +1 -2
  429. package/dist/utils/createSeparator.js.map +1 -1
  430. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  431. package/dist/utils/createSpanNodeFromToken.js +1 -2
  432. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  433. package/dist/utils/createStyleElement.d.ts +1 -1
  434. package/dist/utils/createStyleElement.d.ts.map +1 -1
  435. package/dist/utils/createStyleElement.js +1 -2
  436. package/dist/utils/createStyleElement.js.map +1 -1
  437. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  438. package/dist/utils/createTransformerWithState.js +1 -2
  439. package/dist/utils/createTransformerWithState.js.map +1 -1
  440. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  441. package/dist/utils/createUnsafeCSSStyleNode.js +1 -2
  442. package/dist/utils/createUnsafeCSSStyleNode.js.map +1 -1
  443. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  444. package/dist/utils/createWindowFromScrollPosition.js +5 -5
  445. package/dist/utils/createWindowFromScrollPosition.js.map +1 -1
  446. package/dist/utils/cssWrappers.d.ts.map +1 -1
  447. package/dist/utils/cssWrappers.js +2 -3
  448. package/dist/utils/cssWrappers.js.map +1 -1
  449. package/dist/utils/detachString.d.ts.map +1 -1
  450. package/dist/utils/detachString.js +1 -1
  451. package/dist/utils/detachString.js.map +1 -1
  452. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  453. package/dist/utils/diffAcceptRejectHunk.js +1 -2
  454. package/dist/utils/diffAcceptRejectHunk.js.map +1 -1
  455. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  456. package/dist/utils/formatCSSVariablePrefix.js +1 -1
  457. package/dist/utils/formatCSSVariablePrefix.js.map +1 -1
  458. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  459. package/dist/utils/getDiffHunksRendererOptions.js +1 -1
  460. package/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
  461. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  462. package/dist/utils/getFileRendererOptions.js +1 -1
  463. package/dist/utils/getFileRendererOptions.js.map +1 -1
  464. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  465. package/dist/utils/getFiletypeFromFileName.js +1 -1
  466. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  467. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  468. package/dist/utils/getHighlighterOptions.js +1 -2
  469. package/dist/utils/getHighlighterOptions.js.map +1 -1
  470. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  471. package/dist/utils/getHighlighterThemeStyles.js +1 -2
  472. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  473. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  474. package/dist/utils/getHunkSeparatorSlotName.js +1 -1
  475. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  476. package/dist/utils/getIconForType.d.ts.map +1 -1
  477. package/dist/utils/getIconForType.js +1 -1
  478. package/dist/utils/getIconForType.js.map +1 -1
  479. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  480. package/dist/utils/getLineAnnotationName.js +1 -1
  481. package/dist/utils/getLineAnnotationName.js.map +1 -1
  482. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  483. package/dist/utils/getLineEndingType.js +1 -1
  484. package/dist/utils/getLineEndingType.js.map +1 -1
  485. package/dist/utils/getLineNodes.d.ts +1 -1
  486. package/dist/utils/getLineNodes.d.ts.map +1 -1
  487. package/dist/utils/getLineNodes.js +1 -1
  488. package/dist/utils/getLineNodes.js.map +1 -1
  489. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  490. package/dist/utils/getMergeConflictActionSlotName.js +1 -1
  491. package/dist/utils/getMergeConflictActionSlotName.js.map +1 -1
  492. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  493. package/dist/utils/getMergeConflictLineTypes.js +1 -2
  494. package/dist/utils/getMergeConflictLineTypes.js.map +1 -1
  495. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  496. package/dist/utils/getOrCreateCodeNode.js +1 -1
  497. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  498. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  499. package/dist/utils/getSingularPatch.js +1 -2
  500. package/dist/utils/getSingularPatch.js.map +1 -1
  501. package/dist/utils/getThemes.d.ts.map +1 -1
  502. package/dist/utils/getThemes.js +1 -2
  503. package/dist/utils/getThemes.js.map +1 -1
  504. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  505. package/dist/utils/getTotalLineCountFromHunks.js +1 -1
  506. package/dist/utils/getTotalLineCountFromHunks.js.map +1 -1
  507. package/dist/utils/hast_utils.d.ts +1 -1
  508. package/dist/utils/hast_utils.d.ts.map +1 -1
  509. package/dist/utils/hast_utils.js +1 -1
  510. package/dist/utils/hast_utils.js.map +1 -1
  511. package/dist/utils/hostTheme.d.ts.map +1 -1
  512. package/dist/utils/hostTheme.js +1 -2
  513. package/dist/utils/hostTheme.js.map +1 -1
  514. package/dist/utils/includesFileAnnotations.d.ts +17 -0
  515. package/dist/utils/includesFileAnnotations.d.ts.map +1 -0
  516. package/dist/utils/includesFileAnnotations.js +19 -0
  517. package/dist/utils/includesFileAnnotations.js.map +1 -0
  518. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  519. package/dist/utils/isDefaultRenderRange.js +1 -1
  520. package/dist/utils/isDefaultRenderRange.js.map +1 -1
  521. package/dist/utils/isDiffPlainText.d.ts.map +1 -1
  522. package/dist/utils/isDiffPlainText.js +1 -2
  523. package/dist/utils/isDiffPlainText.js.map +1 -1
  524. package/dist/utils/isFilePlainText.d.ts.map +1 -1
  525. package/dist/utils/isFilePlainText.js +1 -2
  526. package/dist/utils/isFilePlainText.js.map +1 -1
  527. package/dist/utils/isStyleNode.d.ts.map +1 -1
  528. package/dist/utils/isStyleNode.js +1 -1
  529. package/dist/utils/isStyleNode.js.map +1 -1
  530. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  531. package/dist/utils/isWorkerContext.js +1 -1
  532. package/dist/utils/isWorkerContext.js.map +1 -1
  533. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  534. package/dist/utils/iterateOverDiff.js +44 -45
  535. package/dist/utils/iterateOverDiff.js.map +1 -1
  536. package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  537. package/dist/utils/normalizeDiffResolution.js +1 -1
  538. package/dist/utils/normalizeDiffResolution.js.map +1 -1
  539. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  540. package/dist/utils/parseDiffDecorations.js +1 -2
  541. package/dist/utils/parseDiffDecorations.js.map +1 -1
  542. package/dist/utils/parseDiffFromFile.d.ts +0 -1
  543. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  544. package/dist/utils/parseDiffFromFile.js +1 -2
  545. package/dist/utils/parseDiffFromFile.js.map +1 -1
  546. package/dist/utils/parseLineType.d.ts.map +1 -1
  547. package/dist/utils/parseLineType.js +1 -1
  548. package/dist/utils/parseLineType.js.map +1 -1
  549. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  550. package/dist/utils/parseMergeConflictDiffFromFile.js +5 -5
  551. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  552. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  553. package/dist/utils/parsePatchFiles.js +6 -7
  554. package/dist/utils/parsePatchFiles.js.map +1 -1
  555. package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  556. package/dist/utils/prefersReducedMotion.js +1 -1
  557. package/dist/utils/prefersReducedMotion.js.map +1 -1
  558. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  559. package/dist/utils/prerenderHTMLIfNecessary.js +1 -1
  560. package/dist/utils/prerenderHTMLIfNecessary.js.map +1 -1
  561. package/dist/utils/processLine.d.ts +1 -1
  562. package/dist/utils/processLine.d.ts.map +1 -1
  563. package/dist/utils/processLine.js +1 -2
  564. package/dist/utils/processLine.js.map +1 -1
  565. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  566. package/dist/utils/renderDiffWithHighlighter.js +8 -7
  567. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  568. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  569. package/dist/utils/renderFileWithHighlighter.js +5 -4
  570. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  571. package/dist/utils/resolveConflict.d.ts.map +1 -1
  572. package/dist/utils/resolveConflict.js +1 -2
  573. package/dist/utils/resolveConflict.js.map +1 -1
  574. package/dist/utils/resolveRegion.d.ts.map +1 -1
  575. package/dist/utils/resolveRegion.js +1 -1
  576. package/dist/utils/resolveRegion.js.map +1 -1
  577. package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  578. package/dist/utils/roundToDevicePixel.js +1 -1
  579. package/dist/utils/roundToDevicePixel.js.map +1 -1
  580. package/dist/utils/scrollbarGutter.d.ts.map +1 -1
  581. package/dist/utils/scrollbarGutter.js +1 -2
  582. package/dist/utils/scrollbarGutter.js.map +1 -1
  583. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  584. package/dist/utils/setLanguageOverride.js +1 -1
  585. package/dist/utils/setLanguageOverride.js.map +1 -1
  586. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  587. package/dist/utils/setWrapperNodeProps.js +1 -1
  588. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  589. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  590. package/dist/utils/shouldUseTokenTransformer.js +1 -1
  591. package/dist/utils/shouldUseTokenTransformer.js.map +1 -1
  592. package/dist/utils/splitFileContents.d.ts.map +1 -1
  593. package/dist/utils/splitFileContents.js +1 -2
  594. package/dist/utils/splitFileContents.js.map +1 -1
  595. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  596. package/dist/utils/trimPatchContext.js +1 -2
  597. package/dist/utils/trimPatchContext.js.map +1 -1
  598. package/dist/utils/updateDiffHunks.d.ts +2 -1
  599. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  600. package/dist/utils/updateDiffHunks.js +22 -3
  601. package/dist/utils/updateDiffHunks.js.map +1 -1
  602. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  603. package/dist/utils/virtualDiffLayout.js +1 -2
  604. package/dist/utils/virtualDiffLayout.js.map +1 -1
  605. package/dist/utils/wrapTokenFragments.d.ts +1 -1
  606. package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  607. package/dist/utils/wrapTokenFragments.js +1 -2
  608. package/dist/utils/wrapTokenFragments.js.map +1 -1
  609. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  610. package/dist/worker/WorkerPoolManager.js +5 -5
  611. package/dist/worker/WorkerPoolManager.js.map +1 -1
  612. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  613. package/dist/worker/getOrCreateWorkerPoolSingleton.js +1 -2
  614. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  615. package/dist/worker/index.js +1 -2
  616. package/dist/worker/types.d.ts.map +1 -1
  617. package/dist/worker/wasm-B9ZqxnKj.js +8 -0
  618. package/dist/worker/wasm-B9ZqxnKj.js.map +1 -0
  619. package/dist/worker/worker-portable.js +2989 -6577
  620. package/dist/worker/worker-portable.js.map +1 -1
  621. package/dist/worker/worker.js +97 -127
  622. package/dist/worker/worker.js.map +1 -1
  623. package/package.json +14 -21
  624. package/dist/worker/wasm-BaDzIkIn.js +0 -10
  625. package/dist/worker/wasm-BaDzIkIn.js.map +0 -1
@@ -1,5 +1,4 @@
1
1
  import { createTextNodeElement } from "./hast_utils.js";
2
-
3
2
  //#region src/utils/processLine.ts
4
3
  function processLine(node, line, state) {
5
4
  const lineInfo = typeof state.lineInfo === "function" ? state.lineInfo(line) : state.lineInfo[line - 1];
@@ -20,7 +19,7 @@ function processLine(node, line, state) {
20
19
  if (node.children.length === 0) node.children.push(createTextNodeElement("\n"));
21
20
  return node;
22
21
  }
23
-
24
22
  //#endregion
25
23
  export { processLine };
24
+
26
25
  //# sourceMappingURL=processLine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processLine.js","names":[],"sources":["../../src/utils/processLine.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport type { SharedRenderState } from '../types';\nimport { createTextNodeElement } from './hast_utils';\n\nexport function processLine(\n node: HASTElement,\n line: number,\n state: SharedRenderState\n): ElementContent {\n const lineInfo =\n typeof state.lineInfo === 'function'\n ? state.lineInfo(line)\n : state.lineInfo[line - 1];\n if (lineInfo == null) {\n const errorMessage = `processLine: line ${line}, contains no state.lineInfo`;\n console.error(errorMessage, { node, line, state });\n throw new Error(errorMessage);\n }\n // We need to convert the current line to a div but keep all the decorations\n // that may be applied\n node.tagName = 'div';\n node.properties['data-line'] = lineInfo.lineNumber;\n node.properties['data-alt-line'] = lineInfo.altLineNumber;\n node.properties['data-line-type'] = lineInfo.type;\n node.properties['data-line-index'] = lineInfo.lineIndex;\n\n // NOTE(amadeus): We need to push newline characters into empty rows or else\n // copy/pasta will have issues\n if (node.children.length === 0) {\n node.children.push(createTextNodeElement('\\n'));\n }\n\n return node;\n}\n"],"mappings":";;;AAKA,SAAgB,YACd,MACA,MACA,OACgB;CAChB,MAAM,WACJ,OAAO,MAAM,aAAa,aACtB,MAAM,SAAS,KAAK,GACpB,MAAM,SAAS,OAAO;AAC5B,KAAI,YAAY,MAAM;EACpB,MAAM,eAAe,qBAAqB,KAAK;AAC/C,UAAQ,MAAM,cAAc;GAAE;GAAM;GAAM;GAAO,CAAC;AAClD,QAAM,IAAI,MAAM,aAAa;;AAI/B,MAAK,UAAU;AACf,MAAK,WAAW,eAAe,SAAS;AACxC,MAAK,WAAW,mBAAmB,SAAS;AAC5C,MAAK,WAAW,oBAAoB,SAAS;AAC7C,MAAK,WAAW,qBAAqB,SAAS;AAI9C,KAAI,KAAK,SAAS,WAAW,EAC3B,MAAK,SAAS,KAAK,sBAAsB,KAAK,CAAC;AAGjD,QAAO"}
1
+ {"version":3,"file":"processLine.js","names":[],"sources":["../../src/utils/processLine.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport type { SharedRenderState } from '../types';\nimport { createTextNodeElement } from './hast_utils';\n\nexport function processLine(\n node: HASTElement,\n line: number,\n state: SharedRenderState\n): ElementContent {\n const lineInfo =\n typeof state.lineInfo === 'function'\n ? state.lineInfo(line)\n : state.lineInfo[line - 1];\n if (lineInfo == null) {\n const errorMessage = `processLine: line ${line}, contains no state.lineInfo`;\n console.error(errorMessage, { node, line, state });\n throw new Error(errorMessage);\n }\n // We need to convert the current line to a div but keep all the decorations\n // that may be applied\n node.tagName = 'div';\n node.properties['data-line'] = lineInfo.lineNumber;\n node.properties['data-alt-line'] = lineInfo.altLineNumber;\n node.properties['data-line-type'] = lineInfo.type;\n node.properties['data-line-index'] = lineInfo.lineIndex;\n\n // NOTE(amadeus): We need to push newline characters into empty rows or else\n // copy/pasta will have issues\n if (node.children.length === 0) {\n node.children.push(createTextNodeElement('\\n'));\n }\n\n return node;\n}\n"],"mappings":";;AAKA,SAAgB,YACd,MACA,MACA,OACgB;CAChB,MAAM,WACJ,OAAO,MAAM,aAAa,aACtB,MAAM,SAAS,IAAI,IACnB,MAAM,SAAS,OAAO;CAC5B,IAAI,YAAY,MAAM;EACpB,MAAM,eAAe,qBAAqB,KAAK;EAC/C,QAAQ,MAAM,cAAc;GAAE;GAAM;GAAM;EAAM,CAAC;EACjD,MAAM,IAAI,MAAM,YAAY;CAC9B;CAGA,KAAK,UAAU;CACf,KAAK,WAAW,eAAe,SAAS;CACxC,KAAK,WAAW,mBAAmB,SAAS;CAC5C,KAAK,WAAW,oBAAoB,SAAS;CAC7C,KAAK,WAAW,qBAAqB,SAAS;CAI9C,IAAI,KAAK,SAAS,WAAW,GAC3B,KAAK,SAAS,KAAK,sBAAsB,IAAI,CAAC;CAGhD,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderDiffWithHighlighter.d.ts","names":["DiffsHighlighter","FileDiffMetadata","ForceDiffPlainTextOptions","RenderDiffOptions","ThemedDiffResult","renderDiffWithHighlighter","forcePlainText","startingLine","totalLines","expandedHunks","collapsedContextThreshold"],"sources":["../../src/utils/renderDiffWithHighlighter.d.ts"],"sourcesContent":["import type { DiffsHighlighter, FileDiffMetadata, ForceDiffPlainTextOptions, RenderDiffOptions, ThemedDiffResult } from '../types';\nexport declare function renderDiffWithHighlighter(diff: FileDiffMetadata, highlighter: DiffsHighlighter, options: RenderDiffOptions, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold }?: ForceDiffPlainTextOptions): ThemedDiffResult;\n//# sourceMappingURL=renderDiffWithHighlighter.d.ts.map"],"mappings":";;;iBACwBK,yBAAAA,OAAgCJ,+BAA+BD,2BAA2BG;;;;;;IAA4GD,4BAA4BE"}
1
+ {"version":3,"file":"renderDiffWithHighlighter.d.ts","names":[],"sources":["../../src/utils/renderDiffWithHighlighter.ts"],"mappings":";;;iBAqCgB,yBAAA,CACd,IAAA,EAAM,gBAAA,EACN,WAAA,EAAa,gBAAA,EACb,OAAA,EAAS,iBAAA;EAEP,cAAA;EACA,YAAA;EACA,UAAA;EACA,aAAA;EACA;AAAA,IACC,yBAAA,GACF,gBAAA"}
@@ -1,4 +1,4 @@
1
- import { DEFAULT_COLLAPSED_CONTEXT_THRESHOLD, DEFAULT_THEMES } from "../constants.js";
1
+ import { DEFAULT_THEMES } from "../constants.js";
2
2
  import { getFiletypeFromFileName } from "./getFiletypeFromFileName.js";
3
3
  import { createTransformerWithState } from "./createTransformerWithState.js";
4
4
  import { formatCSSVariablePrefix } from "./formatCSSVariablePrefix.js";
@@ -8,10 +8,9 @@ import { iterateOverDiff } from "./iterateOverDiff.js";
8
8
  import { cleanLastNewline } from "./cleanLastNewline.js";
9
9
  import { createDiffSpanDecoration, pushOrJoinSpan } from "./parseDiffDecorations.js";
10
10
  import { diffChars, diffWordsWithSpace } from "diff";
11
-
12
11
  //#region src/utils/renderDiffWithHighlighter.ts
13
12
  const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
14
- function renderDiffWithHighlighter(diff, highlighter, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS) {
13
+ function renderDiffWithHighlighter(diff, highlighter, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = 1 } = DEFAULT_PLAIN_TEXT_OPTIONS) {
15
14
  if (forcePlainText) {
16
15
  startingLine ??= 0;
17
16
  totalLines ??= Infinity;
@@ -217,7 +216,7 @@ function createBucket() {
217
216
  additionSegments: []
218
217
  };
219
218
  }
220
- function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo, highlighter, deletionDecorations, additionDecorations, languageOverride, options: { theme: themeOrThemes = DEFAULT_THEMES,...options } }) {
219
+ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo, highlighter, deletionDecorations, additionDecorations, languageOverride, options: { theme: themeOrThemes = DEFAULT_THEMES, ...options } }) {
221
220
  const deletionLang = languageOverride ?? getFiletypeFromFileName(deletionFile.name);
222
221
  const additionLang = languageOverride ?? getFiletypeFromFileName(additionFile.name);
223
222
  const { state, transformers } = createTransformerWithState(options.useTokenTransformer);
@@ -229,7 +228,8 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
229
228
  transformers,
230
229
  decorations: void 0,
231
230
  defaultColor: false,
232
- cssVariablePrefix: formatCSSVariablePrefix("token")
231
+ cssVariablePrefix: formatCSSVariablePrefix("token"),
232
+ tokenizeTimeLimit: 0
233
233
  } : {
234
234
  ...options,
235
235
  lang: "text",
@@ -237,7 +237,8 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
237
237
  transformers,
238
238
  decorations: void 0,
239
239
  defaultColor: false,
240
- cssVariablePrefix: formatCSSVariablePrefix("token")
240
+ cssVariablePrefix: formatCSSVariablePrefix("token"),
241
+ tokenizeTimeLimit: 0
241
242
  };
242
243
  })();
243
244
  return {
@@ -257,7 +258,7 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
257
258
  })()
258
259
  };
259
260
  }
260
-
261
261
  //#endregion
262
262
  export { renderDiffWithHighlighter };
263
+
263
264
  //# sourceMappingURL=renderDiffWithHighlighter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderDiffWithHighlighter.js","names":["DEFAULT_PLAIN_TEXT_OPTIONS: ForceDiffPlainTextOptions","code: RenderDiffFilesResult","deletionSpans: [0 | 1, string][]","additionSpans: [0 | 1, string][]","hastConfig: CodeToHastOptions<DiffsThemeNames>"],"sources":["../../src/utils/renderDiffWithHighlighter.ts"],"sourcesContent":["import { diffChars, diffWordsWithSpace } from 'diff';\n\nimport {\n DEFAULT_COLLAPSED_CONTEXT_THRESHOLD,\n DEFAULT_THEMES,\n} from '../constants';\nimport type {\n CodeToHastOptions,\n DecorationItem,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n FileDiffMetadata,\n ForceDiffPlainTextOptions,\n LineDiffTypes,\n LineInfo,\n RenderDiffFilesResult,\n RenderDiffOptions,\n SupportedLanguages,\n ThemedDiffResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\nimport { iterateOverDiff } from './iterateOverDiff';\nimport {\n createDiffSpanDecoration,\n pushOrJoinSpan,\n} from './parseDiffDecorations';\n\nconst DEFAULT_PLAIN_TEXT_OPTIONS: ForceDiffPlainTextOptions = {\n forcePlainText: false,\n};\n\nexport function renderDiffWithHighlighter(\n diff: FileDiffMetadata,\n highlighter: DiffsHighlighter,\n options: RenderDiffOptions,\n {\n forcePlainText,\n startingLine,\n totalLines,\n expandedHunks,\n collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD,\n }: ForceDiffPlainTextOptions = DEFAULT_PLAIN_TEXT_OPTIONS\n): ThemedDiffResult {\n if (forcePlainText) {\n startingLine ??= 0;\n totalLines ??= Infinity;\n } else {\n // If we aren't forcing plain text, then we intentionally do not support\n // ranges for highlighting as that could break the syntax highlighting, we\n // we override any values that may have been passed in. Maybe one day we\n // warn about this?\n startingLine = 0;\n totalLines = Infinity;\n }\n const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;\n const baseThemeType =\n typeof options.theme === 'string'\n ? highlighter.getTheme(options.theme).type\n : undefined;\n const themeStyles = getHighlighterThemeStyles({\n theme: options.theme,\n highlighter,\n });\n\n // If we have a large file and we are rendering the WHOLE plain diff ast,\n // then we should remove the lineDiffType to make sure things render quickly.\n // For highlighted ASTs or windowed highlights, we should just inherit the\n // setting\n const lineDiffType =\n forcePlainText &&\n !isWindowedHighlight &&\n (diff.unifiedLineCount > 1000 || diff.splitLineCount > 1000)\n ? 'none'\n : options.lineDiffType;\n\n const code: RenderDiffFilesResult = {\n deletionLines: [],\n additionLines: [],\n };\n\n const { maxLineDiffLength } = options;\n const shouldGroupAll = !forcePlainText && !diff.isPartial;\n const expandedHunksForIteration = forcePlainText ? expandedHunks : undefined;\n const buckets = new Map<number, RenderBucket>();\n function getBucketForHunk(hunkIndex: number) {\n const index = shouldGroupAll ? 0 : hunkIndex;\n const bucket = buckets.get(index) ?? createBucket();\n buckets.set(index, bucket);\n return bucket;\n }\n\n function appendContent(\n lineContent: string,\n lineIndex: number,\n segments: HighlightSegment[],\n contentWrapper: FakeArrayType\n ) {\n if (isWindowedHighlight) {\n let segment = segments.at(-1);\n if (\n segment == null ||\n segment.targetIndex + segment.count !== lineIndex\n ) {\n segment = {\n targetIndex: lineIndex,\n originalOffset: contentWrapper.length,\n count: 0,\n };\n segments.push(segment);\n }\n segment.count++;\n }\n contentWrapper.push(lineContent);\n }\n\n iterateOverDiff({\n diff,\n diffStyle: 'both',\n startingLine,\n totalLines,\n expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,\n collapsedContextThreshold,\n callback: ({ hunkIndex, additionLine, deletionLine, type }) => {\n const bucket = getBucketForHunk(hunkIndex);\n const splitLineIndex =\n additionLine != null\n ? additionLine.splitLineIndex\n : deletionLine.splitLineIndex;\n\n if (type === 'change' && additionLine != null && deletionLine != null) {\n computeLineDiffDecorations({\n additionLine: diff.additionLines[additionLine.lineIndex],\n deletionLine: diff.deletionLines[deletionLine.lineIndex],\n deletionLineIndex: bucket.deletionContent.length,\n additionLineIndex: bucket.additionContent.length,\n deletionDecorations: bucket.deletionDecorations,\n additionDecorations: bucket.additionDecorations,\n lineDiffType,\n maxLineDiffLength,\n });\n }\n\n if (deletionLine != null) {\n appendContent(\n diff.deletionLines[deletionLine.lineIndex],\n deletionLine.lineIndex,\n bucket.deletionSegments,\n bucket.deletionContent\n );\n bucket.deletionInfo.push({\n type: type === 'change' ? 'change-deletion' : type,\n lineNumber: deletionLine.lineNumber,\n altLineNumber:\n type === 'change'\n ? undefined\n : (additionLine.lineNumber ?? undefined),\n lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`,\n });\n }\n\n if (additionLine != null) {\n appendContent(\n diff.additionLines[additionLine.lineIndex],\n additionLine.lineIndex,\n bucket.additionSegments,\n bucket.additionContent\n );\n bucket.additionInfo.push({\n type: type === 'change' ? 'change-addition' : type,\n lineNumber: additionLine.lineNumber,\n altLineNumber:\n type === 'change'\n ? undefined\n : (deletionLine.lineNumber ?? undefined),\n lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`,\n });\n }\n },\n });\n\n for (const bucket of buckets.values()) {\n if (\n bucket.deletionContent.length === 0 &&\n bucket.additionContent.length === 0\n ) {\n continue;\n }\n\n const deletionFile = {\n name: diff.prevName ?? diff.name,\n contents: bucket.deletionContent.value,\n };\n const additionFile = {\n name: diff.name,\n contents: bucket.additionContent.value,\n };\n const { deletionLines, additionLines } = renderTwoFiles({\n deletionFile,\n deletionInfo: bucket.deletionInfo,\n deletionDecorations: bucket.deletionDecorations,\n\n additionFile,\n additionInfo: bucket.additionInfo,\n additionDecorations: bucket.additionDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n });\n\n if (shouldGroupAll) {\n code.deletionLines = deletionLines;\n code.additionLines = additionLines;\n continue;\n }\n\n if (bucket.deletionSegments.length > 0) {\n for (const seg of bucket.deletionSegments) {\n for (let i = 0; i < seg.count; i++) {\n code.deletionLines[seg.targetIndex + i] =\n deletionLines[seg.originalOffset + i];\n }\n }\n } else {\n code.deletionLines.push(...deletionLines);\n }\n if (bucket.additionSegments.length > 0) {\n for (const seg of bucket.additionSegments) {\n for (let i = 0; i < seg.count; i++) {\n code.additionLines[seg.targetIndex + i] =\n additionLines[seg.originalOffset + i];\n }\n }\n } else {\n code.additionLines.push(...additionLines);\n }\n }\n\n return { code, themeStyles, baseThemeType };\n}\n\ninterface ProcessLineDiffProps {\n deletionLine: string | undefined;\n additionLine: string | undefined;\n deletionLineIndex: number;\n additionLineIndex: number;\n deletionDecorations: DecorationItem[];\n additionDecorations: DecorationItem[];\n lineDiffType: LineDiffTypes;\n maxLineDiffLength: number;\n}\n\nfunction computeLineDiffDecorations({\n deletionLine,\n additionLine,\n deletionLineIndex,\n additionLineIndex,\n deletionDecorations,\n additionDecorations,\n lineDiffType,\n maxLineDiffLength,\n}: ProcessLineDiffProps) {\n if (deletionLine == null || additionLine == null || lineDiffType === 'none') {\n return;\n }\n deletionLine = cleanLastNewline(deletionLine);\n additionLine = cleanLastNewline(additionLine);\n // If we have really long lines, we probably shouldn't compute diffs on them.\n if (\n deletionLine.length > maxLineDiffLength ||\n additionLine.length > maxLineDiffLength\n ) {\n return;\n }\n // NOTE(amadeus): Because we visually trim trailing newlines when rendering,\n // we also gotta make sure the diff parsing doesn't include the newline\n // character that could be there...\n const lineDiff =\n lineDiffType === 'char'\n ? diffChars(deletionLine, additionLine)\n : diffWordsWithSpace(deletionLine, additionLine);\n const deletionSpans: [0 | 1, string][] = [];\n const additionSpans: [0 | 1, string][] = [];\n const enableJoin = lineDiffType === 'word-alt';\n const lastItem = lineDiff.at(-1);\n for (const item of lineDiff) {\n const isLastItem = item === lastItem;\n if (!item.added && !item.removed) {\n pushOrJoinSpan({\n item,\n arr: deletionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n pushOrJoinSpan({\n item,\n arr: additionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n } else if (item.removed) {\n pushOrJoinSpan({ item, arr: deletionSpans, enableJoin, isLastItem });\n } else {\n pushOrJoinSpan({ item, arr: additionSpans, enableJoin, isLastItem });\n }\n }\n let spanIndex = 0;\n for (const span of deletionSpans) {\n if (span[0] === 1) {\n deletionDecorations.push(\n createDiffSpanDecoration({\n line: deletionLineIndex,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n spanIndex = 0;\n for (const span of additionSpans) {\n if (span[0] === 1) {\n additionDecorations.push(\n createDiffSpanDecoration({\n line: additionLineIndex,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n}\n\ninterface HighlightSegment {\n // The where the highlighted region starts\n originalOffset: number;\n // Where to place the highlighted line in RenderDiffFilesResult\n targetIndex: number;\n // Number of highlighted lines\n count: number;\n}\n\ninterface FakeArrayType {\n push(value: string): void;\n value: string;\n length: number;\n}\n\ninterface RenderBucket {\n deletionContent: FakeArrayType;\n additionContent: FakeArrayType;\n deletionInfo: (LineInfo | undefined)[];\n additionInfo: (LineInfo | undefined)[];\n deletionDecorations: DecorationItem[];\n additionDecorations: DecorationItem[];\n deletionSegments: HighlightSegment[];\n additionSegments: HighlightSegment[];\n}\n\nfunction createBucket(): RenderBucket {\n return {\n deletionContent: {\n push(value: string) {\n this.value += value;\n this.length++;\n },\n value: '',\n length: 0,\n },\n additionContent: {\n push(value: string) {\n this.value += value;\n this.length++;\n },\n value: '',\n length: 0,\n },\n deletionInfo: [],\n additionInfo: [],\n deletionDecorations: [],\n additionDecorations: [],\n deletionSegments: [],\n additionSegments: [],\n };\n}\n\ninterface RenderTwoFilesProps {\n deletionFile: FileContents;\n additionFile: FileContents;\n deletionInfo: (LineInfo | undefined)[];\n additionInfo: (LineInfo | undefined)[];\n deletionDecorations: DecorationItem[];\n additionDecorations: DecorationItem[];\n options: RenderDiffOptions;\n highlighter: DiffsHighlighter;\n languageOverride: SupportedLanguages | undefined;\n}\n\nfunction renderTwoFiles({\n deletionFile,\n additionFile,\n deletionInfo,\n additionInfo,\n highlighter,\n deletionDecorations,\n additionDecorations,\n languageOverride,\n options: { theme: themeOrThemes = DEFAULT_THEMES, ...options },\n}: RenderTwoFilesProps): RenderDiffFilesResult {\n const deletionLang =\n languageOverride ?? getFiletypeFromFileName(deletionFile.name);\n const additionLang =\n languageOverride ?? getFiletypeFromFileName(additionFile.name);\n const { state, transformers } = createTransformerWithState(\n options.useTokenTransformer\n );\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n return typeof themeOrThemes === 'string'\n ? {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n theme: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n }\n : {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n themes: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n };\n })();\n\n const deletionLines = (() => {\n if (deletionFile.contents === '') {\n return [];\n }\n hastConfig.lang = deletionLang;\n state.lineInfo = deletionInfo;\n hastConfig.decorations = deletionDecorations;\n return getLineNodes(\n highlighter.codeToHast(\n cleanLastNewline(deletionFile.contents),\n hastConfig\n )\n );\n })();\n const additionLines = (() => {\n if (additionFile.contents === '') {\n return [];\n }\n hastConfig.lang = additionLang;\n hastConfig.decorations = additionDecorations;\n state.lineInfo = additionInfo;\n return getLineNodes(\n highlighter.codeToHast(\n cleanLastNewline(additionFile.contents),\n hastConfig\n )\n );\n })();\n\n return { deletionLines, additionLines };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"renderDiffWithHighlighter.js","names":[],"sources":["../../src/utils/renderDiffWithHighlighter.ts"],"sourcesContent":["import { diffChars, diffWordsWithSpace } from 'diff';\n\nimport {\n DEFAULT_COLLAPSED_CONTEXT_THRESHOLD,\n DEFAULT_THEMES,\n} from '../constants';\nimport type {\n CodeToHastOptions,\n DecorationItem,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n FileDiffMetadata,\n ForceDiffPlainTextOptions,\n LineDiffTypes,\n LineInfo,\n RenderDiffFilesResult,\n RenderDiffOptions,\n SupportedLanguages,\n ThemedDiffResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\nimport { iterateOverDiff } from './iterateOverDiff';\nimport {\n createDiffSpanDecoration,\n pushOrJoinSpan,\n} from './parseDiffDecorations';\n\nconst DEFAULT_PLAIN_TEXT_OPTIONS: ForceDiffPlainTextOptions = {\n forcePlainText: false,\n};\n\nexport function renderDiffWithHighlighter(\n diff: FileDiffMetadata,\n highlighter: DiffsHighlighter,\n options: RenderDiffOptions,\n {\n forcePlainText,\n startingLine,\n totalLines,\n expandedHunks,\n collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD,\n }: ForceDiffPlainTextOptions = DEFAULT_PLAIN_TEXT_OPTIONS\n): ThemedDiffResult {\n if (forcePlainText) {\n startingLine ??= 0;\n totalLines ??= Infinity;\n } else {\n // If we aren't forcing plain text, then we intentionally do not support\n // ranges for highlighting as that could break the syntax highlighting, we\n // we override any values that may have been passed in. Maybe one day we\n // warn about this?\n startingLine = 0;\n totalLines = Infinity;\n }\n const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;\n const baseThemeType =\n typeof options.theme === 'string'\n ? highlighter.getTheme(options.theme).type\n : undefined;\n const themeStyles = getHighlighterThemeStyles({\n theme: options.theme,\n highlighter,\n });\n\n // If we have a large file and we are rendering the WHOLE plain diff ast,\n // then we should remove the lineDiffType to make sure things render quickly.\n // For highlighted ASTs or windowed highlights, we should just inherit the\n // setting\n const lineDiffType =\n forcePlainText &&\n !isWindowedHighlight &&\n (diff.unifiedLineCount > 1000 || diff.splitLineCount > 1000)\n ? 'none'\n : options.lineDiffType;\n\n const code: RenderDiffFilesResult = {\n deletionLines: [],\n additionLines: [],\n };\n\n const { maxLineDiffLength } = options;\n const shouldGroupAll = !forcePlainText && !diff.isPartial;\n const expandedHunksForIteration = forcePlainText ? expandedHunks : undefined;\n const buckets = new Map<number, RenderBucket>();\n function getBucketForHunk(hunkIndex: number) {\n const index = shouldGroupAll ? 0 : hunkIndex;\n const bucket = buckets.get(index) ?? createBucket();\n buckets.set(index, bucket);\n return bucket;\n }\n\n function appendContent(\n lineContent: string,\n lineIndex: number,\n segments: HighlightSegment[],\n contentWrapper: FakeArrayType\n ) {\n if (isWindowedHighlight) {\n let segment = segments.at(-1);\n if (\n segment == null ||\n segment.targetIndex + segment.count !== lineIndex\n ) {\n segment = {\n targetIndex: lineIndex,\n originalOffset: contentWrapper.length,\n count: 0,\n };\n segments.push(segment);\n }\n segment.count++;\n }\n contentWrapper.push(lineContent);\n }\n\n iterateOverDiff({\n diff,\n diffStyle: 'both',\n startingLine,\n totalLines,\n expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,\n collapsedContextThreshold,\n callback: ({ hunkIndex, additionLine, deletionLine, type }) => {\n const bucket = getBucketForHunk(hunkIndex);\n const splitLineIndex =\n additionLine != null\n ? additionLine.splitLineIndex\n : deletionLine.splitLineIndex;\n\n if (type === 'change' && additionLine != null && deletionLine != null) {\n computeLineDiffDecorations({\n additionLine: diff.additionLines[additionLine.lineIndex],\n deletionLine: diff.deletionLines[deletionLine.lineIndex],\n deletionLineIndex: bucket.deletionContent.length,\n additionLineIndex: bucket.additionContent.length,\n deletionDecorations: bucket.deletionDecorations,\n additionDecorations: bucket.additionDecorations,\n lineDiffType,\n maxLineDiffLength,\n });\n }\n\n if (deletionLine != null) {\n appendContent(\n diff.deletionLines[deletionLine.lineIndex],\n deletionLine.lineIndex,\n bucket.deletionSegments,\n bucket.deletionContent\n );\n bucket.deletionInfo.push({\n type: type === 'change' ? 'change-deletion' : type,\n lineNumber: deletionLine.lineNumber,\n altLineNumber:\n type === 'change'\n ? undefined\n : (additionLine.lineNumber ?? undefined),\n lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`,\n });\n }\n\n if (additionLine != null) {\n appendContent(\n diff.additionLines[additionLine.lineIndex],\n additionLine.lineIndex,\n bucket.additionSegments,\n bucket.additionContent\n );\n bucket.additionInfo.push({\n type: type === 'change' ? 'change-addition' : type,\n lineNumber: additionLine.lineNumber,\n altLineNumber:\n type === 'change'\n ? undefined\n : (deletionLine.lineNumber ?? undefined),\n lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`,\n });\n }\n },\n });\n\n for (const bucket of buckets.values()) {\n if (\n bucket.deletionContent.length === 0 &&\n bucket.additionContent.length === 0\n ) {\n continue;\n }\n\n const deletionFile = {\n name: diff.prevName ?? diff.name,\n contents: bucket.deletionContent.value,\n };\n const additionFile = {\n name: diff.name,\n contents: bucket.additionContent.value,\n };\n const { deletionLines, additionLines } = renderTwoFiles({\n deletionFile,\n deletionInfo: bucket.deletionInfo,\n deletionDecorations: bucket.deletionDecorations,\n\n additionFile,\n additionInfo: bucket.additionInfo,\n additionDecorations: bucket.additionDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n });\n\n if (shouldGroupAll) {\n code.deletionLines = deletionLines;\n code.additionLines = additionLines;\n continue;\n }\n\n if (bucket.deletionSegments.length > 0) {\n for (const seg of bucket.deletionSegments) {\n for (let i = 0; i < seg.count; i++) {\n code.deletionLines[seg.targetIndex + i] =\n deletionLines[seg.originalOffset + i];\n }\n }\n } else {\n code.deletionLines.push(...deletionLines);\n }\n if (bucket.additionSegments.length > 0) {\n for (const seg of bucket.additionSegments) {\n for (let i = 0; i < seg.count; i++) {\n code.additionLines[seg.targetIndex + i] =\n additionLines[seg.originalOffset + i];\n }\n }\n } else {\n code.additionLines.push(...additionLines);\n }\n }\n\n return { code, themeStyles, baseThemeType };\n}\n\ninterface ProcessLineDiffProps {\n deletionLine: string | undefined;\n additionLine: string | undefined;\n deletionLineIndex: number;\n additionLineIndex: number;\n deletionDecorations: DecorationItem[];\n additionDecorations: DecorationItem[];\n lineDiffType: LineDiffTypes;\n maxLineDiffLength: number;\n}\n\nfunction computeLineDiffDecorations({\n deletionLine,\n additionLine,\n deletionLineIndex,\n additionLineIndex,\n deletionDecorations,\n additionDecorations,\n lineDiffType,\n maxLineDiffLength,\n}: ProcessLineDiffProps) {\n if (deletionLine == null || additionLine == null || lineDiffType === 'none') {\n return;\n }\n deletionLine = cleanLastNewline(deletionLine);\n additionLine = cleanLastNewline(additionLine);\n // If we have really long lines, we probably shouldn't compute diffs on them.\n if (\n deletionLine.length > maxLineDiffLength ||\n additionLine.length > maxLineDiffLength\n ) {\n return;\n }\n // NOTE(amadeus): Because we visually trim trailing newlines when rendering,\n // we also gotta make sure the diff parsing doesn't include the newline\n // character that could be there...\n const lineDiff =\n lineDiffType === 'char'\n ? diffChars(deletionLine, additionLine)\n : diffWordsWithSpace(deletionLine, additionLine);\n const deletionSpans: [0 | 1, string][] = [];\n const additionSpans: [0 | 1, string][] = [];\n const enableJoin = lineDiffType === 'word-alt';\n const lastItem = lineDiff.at(-1);\n for (const item of lineDiff) {\n const isLastItem = item === lastItem;\n if (!item.added && !item.removed) {\n pushOrJoinSpan({\n item,\n arr: deletionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n pushOrJoinSpan({\n item,\n arr: additionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n } else if (item.removed) {\n pushOrJoinSpan({ item, arr: deletionSpans, enableJoin, isLastItem });\n } else {\n pushOrJoinSpan({ item, arr: additionSpans, enableJoin, isLastItem });\n }\n }\n let spanIndex = 0;\n for (const span of deletionSpans) {\n if (span[0] === 1) {\n deletionDecorations.push(\n createDiffSpanDecoration({\n line: deletionLineIndex,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n spanIndex = 0;\n for (const span of additionSpans) {\n if (span[0] === 1) {\n additionDecorations.push(\n createDiffSpanDecoration({\n line: additionLineIndex,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n}\n\ninterface HighlightSegment {\n // The where the highlighted region starts\n originalOffset: number;\n // Where to place the highlighted line in RenderDiffFilesResult\n targetIndex: number;\n // Number of highlighted lines\n count: number;\n}\n\ninterface FakeArrayType {\n push(value: string): void;\n value: string;\n length: number;\n}\n\ninterface RenderBucket {\n deletionContent: FakeArrayType;\n additionContent: FakeArrayType;\n deletionInfo: (LineInfo | undefined)[];\n additionInfo: (LineInfo | undefined)[];\n deletionDecorations: DecorationItem[];\n additionDecorations: DecorationItem[];\n deletionSegments: HighlightSegment[];\n additionSegments: HighlightSegment[];\n}\n\nfunction createBucket(): RenderBucket {\n return {\n deletionContent: {\n push(value: string) {\n this.value += value;\n this.length++;\n },\n value: '',\n length: 0,\n },\n additionContent: {\n push(value: string) {\n this.value += value;\n this.length++;\n },\n value: '',\n length: 0,\n },\n deletionInfo: [],\n additionInfo: [],\n deletionDecorations: [],\n additionDecorations: [],\n deletionSegments: [],\n additionSegments: [],\n };\n}\n\ninterface RenderTwoFilesProps {\n deletionFile: FileContents;\n additionFile: FileContents;\n deletionInfo: (LineInfo | undefined)[];\n additionInfo: (LineInfo | undefined)[];\n deletionDecorations: DecorationItem[];\n additionDecorations: DecorationItem[];\n options: RenderDiffOptions;\n highlighter: DiffsHighlighter;\n languageOverride: SupportedLanguages | undefined;\n}\n\nfunction renderTwoFiles({\n deletionFile,\n additionFile,\n deletionInfo,\n additionInfo,\n highlighter,\n deletionDecorations,\n additionDecorations,\n languageOverride,\n options: { theme: themeOrThemes = DEFAULT_THEMES, ...options },\n}: RenderTwoFilesProps): RenderDiffFilesResult {\n const deletionLang =\n languageOverride ?? getFiletypeFromFileName(deletionFile.name);\n const additionLang =\n languageOverride ?? getFiletypeFromFileName(additionFile.name);\n const { state, transformers } = createTransformerWithState(\n options.useTokenTransformer\n );\n // tokenizeTimeLimit: 0 — never trade silently-wrong token colors for\n // latency; see renderFileWithHighlighter for the full rationale.\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n return typeof themeOrThemes === 'string'\n ? {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n theme: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeTimeLimit: 0,\n }\n : {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n themes: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeTimeLimit: 0,\n };\n })();\n\n const deletionLines = (() => {\n if (deletionFile.contents === '') {\n return [];\n }\n hastConfig.lang = deletionLang;\n state.lineInfo = deletionInfo;\n hastConfig.decorations = deletionDecorations;\n return getLineNodes(\n highlighter.codeToHast(\n cleanLastNewline(deletionFile.contents),\n hastConfig\n )\n );\n })();\n const additionLines = (() => {\n if (additionFile.contents === '') {\n return [];\n }\n hastConfig.lang = additionLang;\n hastConfig.decorations = additionDecorations;\n state.lineInfo = additionInfo;\n return getLineNodes(\n highlighter.codeToHast(\n cleanLastNewline(additionFile.contents),\n hastConfig\n )\n );\n })();\n\n return { deletionLines, additionLines };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderFileWithHighlighter.d.ts","names":["DiffsHighlighter","FileContents","ForceFilePlainTextOptions","RenderFileOptions","ThemedFileResult","renderFileWithHighlighter","theme","tokenizeMaxLineLength","useTokenTransformer","forcePlainText","startingLine","totalLines","lines"],"sources":["../../src/utils/renderFileWithHighlighter.d.ts"],"sourcesContent":["import type { DiffsHighlighter, FileContents, ForceFilePlainTextOptions, RenderFileOptions, ThemedFileResult } from '../types';\nexport declare function renderFileWithHighlighter(file: FileContents, highlighter: DiffsHighlighter, { theme, tokenizeMaxLineLength, useTokenTransformer }: RenderFileOptions, { forcePlainText, startingLine, totalLines, lines }?: ForceFilePlainTextOptions): ThemedFileResult;\n//# sourceMappingURL=renderFileWithHighlighter.d.ts.map"],"mappings":";;;iBACwBK,yBAAAA,OAAgCJ,2BAA2BD;;;;GAAyEG;;;;;IAAyED,4BAA4BE"}
1
+ {"version":3,"file":"renderFileWithHighlighter.d.ts","names":[],"sources":["../../src/utils/renderFileWithHighlighter.ts"],"mappings":";;;iBAqBgB,yBAAA,CACd,IAAA,EAAM,YAAA,EACN,WAAA,EAAa,gBAAA;EAEX,KAAA;EACA,qBAAA;EACA;AAAA,GACC,iBAAA;EAED,cAAA;EACA,YAAA;EACA,UAAA;EACA;AAAA,IACC,yBAAA,GACF,gBAAA"}
@@ -5,7 +5,6 @@ import { createTransformerWithState } from "./createTransformerWithState.js";
5
5
  import { formatCSSVariablePrefix } from "./formatCSSVariablePrefix.js";
6
6
  import { getHighlighterThemeStyles } from "./getHighlighterThemeStyles.js";
7
7
  import { getLineNodes } from "./getLineNodes.js";
8
-
9
8
  //#region src/utils/renderFileWithHighlighter.ts
10
9
  const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
11
10
  function renderFileWithHighlighter(file, highlighter, { theme = DEFAULT_THEMES, tokenizeMaxLineLength, useTokenTransformer }, { forcePlainText, startingLine, totalLines, lines } = DEFAULT_PLAIN_TEXT_OPTIONS) {
@@ -36,7 +35,8 @@ function renderFileWithHighlighter(file, highlighter, { theme = DEFAULT_THEMES,
36
35
  transformers,
37
36
  defaultColor: false,
38
37
  cssVariablePrefix: formatCSSVariablePrefix("token"),
39
- tokenizeMaxLineLength
38
+ tokenizeMaxLineLength,
39
+ tokenizeTimeLimit: 0
40
40
  };
41
41
  return {
42
42
  lang,
@@ -44,7 +44,8 @@ function renderFileWithHighlighter(file, highlighter, { theme = DEFAULT_THEMES,
44
44
  transformers,
45
45
  defaultColor: false,
46
46
  cssVariablePrefix: formatCSSVariablePrefix("token"),
47
- tokenizeMaxLineLength
47
+ tokenizeMaxLineLength,
48
+ tokenizeTimeLimit: 0
48
49
  };
49
50
  })();
50
51
  const highlightedLines = getLineNodes(highlighter.codeToHast(isWindowedHighlight ? extractWindowedFileContent(lines ?? linesFromFileContents(file.contents), startingLine, totalLines) : file.contents, hastConfig));
@@ -61,7 +62,7 @@ function extractWindowedFileContent(lines, startingLine, totalLines) {
61
62
  const endLine = Math.min(startingLine + totalLines, lines.length);
62
63
  return lines.slice(startingLine, endLine).join("");
63
64
  }
64
-
65
65
  //#endregion
66
66
  export { renderFileWithHighlighter };
67
+
67
68
  //# sourceMappingURL=renderFileWithHighlighter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderFileWithHighlighter.js","names":["DEFAULT_PLAIN_TEXT_OPTIONS: ForceFilePlainTextOptions","hastConfig: CodeToHastOptions<DiffsThemeNames>"],"sources":["../../src/utils/renderFileWithHighlighter.ts"],"sourcesContent":["import { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n ForceFilePlainTextOptions,\n RenderFileOptions,\n ThemedFileResult,\n} from '../types';\nimport { linesFromFileContents } from './computeFileOffsets';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\n\nconst DEFAULT_PLAIN_TEXT_OPTIONS: ForceFilePlainTextOptions = {\n forcePlainText: false,\n};\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n {\n theme = DEFAULT_THEMES,\n tokenizeMaxLineLength,\n useTokenTransformer,\n }: RenderFileOptions,\n {\n forcePlainText,\n startingLine,\n totalLines,\n lines,\n }: ForceFilePlainTextOptions = DEFAULT_PLAIN_TEXT_OPTIONS\n): ThemedFileResult {\n if (forcePlainText) {\n startingLine ??= 0;\n totalLines ??= Infinity;\n } else {\n // If we aren't forcing plain text, then we intentionally do not support\n // ranges for highlighting as that could break the syntax highlighting, we\n // we override any values that may have been passed in. Maybe one day we\n // warn about this?\n startingLine = 0;\n totalLines = Infinity;\n }\n const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;\n const { state, transformers } =\n createTransformerWithState(useTokenTransformer);\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType =\n typeof theme === 'string' ? highlighter.getTheme(theme).type : undefined;\n const themeStyles = getHighlighterThemeStyles({\n theme,\n highlighter,\n });\n state.lineInfo = (shikiLineNumber: number) => ({\n type: 'context',\n lineIndex: shikiLineNumber - 1 + startingLine,\n lineNumber: shikiLineNumber + startingLine,\n });\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n if (typeof theme === 'string') {\n return {\n lang,\n theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeMaxLineLength,\n };\n }\n return {\n lang,\n themes: theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeMaxLineLength,\n };\n })();\n const highlightedLines = getLineNodes(\n highlighter.codeToHast(\n isWindowedHighlight\n ? extractWindowedFileContent(\n lines ?? linesFromFileContents(file.contents),\n startingLine,\n totalLines\n )\n : file.contents,\n hastConfig\n )\n );\n\n // Create sparse array for windowed rendering\n const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;\n if (isWindowedHighlight) {\n code.push(...highlightedLines);\n }\n\n return { code, themeStyles, baseThemeType };\n}\n\nfunction extractWindowedFileContent(\n lines: string[],\n startingLine: number,\n totalLines: number\n): string {\n if (lines.length === 0) {\n return '';\n }\n const endLine = Math.min(startingLine + totalLines, lines.length);\n return lines.slice(startingLine, endLine).join('');\n}\n"],"mappings":";;;;;;;;;AAiBA,MAAMA,6BAAwD,EAC5D,gBAAgB,OACjB;AAED,SAAgB,0BACd,MACA,aACA,EACE,QAAQ,gBACR,uBACA,uBAEF,EACE,gBACA,cACA,YACA,UAC6B,4BACb;AAClB,KAAI,gBAAgB;AAClB,mBAAiB;AACjB,iBAAe;QACV;AAKL,iBAAe;AACf,eAAa;;CAEf,MAAM,sBAAsB,eAAe,KAAK,aAAa;CAC7D,MAAM,EAAE,OAAO,iBACb,2BAA2B,oBAAoB;CACjD,MAAM,OAAO,iBACT,SACC,KAAK,QAAQ,wBAAwB,KAAK,KAAK;CACpD,MAAM,gBACJ,OAAO,UAAU,WAAW,YAAY,SAAS,MAAM,CAAC,OAAO;CACjE,MAAM,cAAc,0BAA0B;EAC5C;EACA;EACD,CAAC;AACF,OAAM,YAAY,qBAA6B;EAC7C,MAAM;EACN,WAAW,kBAAkB,IAAI;EACjC,YAAY,kBAAkB;EAC/B;CACD,MAAMC,oBAAwD;AAC5D,MAAI,OAAO,UAAU,SACnB,QAAO;GACL;GACA;GACA;GACA,cAAc;GACd,mBAAmB,wBAAwB,QAAQ;GACnD;GACD;AAEH,SAAO;GACL;GACA,QAAQ;GACR;GACA,cAAc;GACd,mBAAmB,wBAAwB,QAAQ;GACnD;GACD;KACC;CACJ,MAAM,mBAAmB,aACvB,YAAY,WACV,sBACI,2BACE,SAAS,sBAAsB,KAAK,SAAS,EAC7C,cACA,WACD,GACD,KAAK,UACT,WACD,CACF;CAGD,MAAM,OAAO,sBAAsB,IAAI,MAAM,aAAa,GAAG;AAC7D,KAAI,oBACF,MAAK,KAAK,GAAG,iBAAiB;AAGhC,QAAO;EAAE;EAAM;EAAa;EAAe;;AAG7C,SAAS,2BACP,OACA,cACA,YACQ;AACR,KAAI,MAAM,WAAW,EACnB,QAAO;CAET,MAAM,UAAU,KAAK,IAAI,eAAe,YAAY,MAAM,OAAO;AACjE,QAAO,MAAM,MAAM,cAAc,QAAQ,CAAC,KAAK,GAAG"}
1
+ {"version":3,"file":"renderFileWithHighlighter.js","names":[],"sources":["../../src/utils/renderFileWithHighlighter.ts"],"sourcesContent":["import { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n ForceFilePlainTextOptions,\n RenderFileOptions,\n ThemedFileResult,\n} from '../types';\nimport { linesFromFileContents } from './computeFileOffsets';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\n\nconst DEFAULT_PLAIN_TEXT_OPTIONS: ForceFilePlainTextOptions = {\n forcePlainText: false,\n};\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n {\n theme = DEFAULT_THEMES,\n tokenizeMaxLineLength,\n useTokenTransformer,\n }: RenderFileOptions,\n {\n forcePlainText,\n startingLine,\n totalLines,\n lines,\n }: ForceFilePlainTextOptions = DEFAULT_PLAIN_TEXT_OPTIONS\n): ThemedFileResult {\n if (forcePlainText) {\n startingLine ??= 0;\n totalLines ??= Infinity;\n } else {\n // If we aren't forcing plain text, then we intentionally do not support\n // ranges for highlighting as that could break the syntax highlighting, we\n // we override any values that may have been passed in. Maybe one day we\n // warn about this?\n startingLine = 0;\n totalLines = Infinity;\n }\n const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;\n const { state, transformers } =\n createTransformerWithState(useTokenTransformer);\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType =\n typeof theme === 'string' ? highlighter.getTheme(theme).type : undefined;\n const themeStyles = getHighlighterThemeStyles({\n theme,\n highlighter,\n });\n state.lineInfo = (shikiLineNumber: number) => ({\n type: 'context',\n lineIndex: shikiLineNumber - 1 + startingLine,\n lineNumber: shikiLineNumber + startingLine,\n });\n // tokenizeTimeLimit: 0 disables shiki's silent 500ms-per-line tokenization\n // abort. When it trips (slow devices, cold JS-regex-engine compile), the\n // rest of the line collapses to the enclosing scope's color — and since\n // dual-theme rendering tokenizes per theme, the first (dark) pass can smear\n // while the warm second (light) pass stays correct. Pathological content is\n // already guarded by tokenizeMaxLineLength, which renders long lines plain.\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n if (typeof theme === 'string') {\n return {\n lang,\n theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeMaxLineLength,\n tokenizeTimeLimit: 0,\n };\n }\n return {\n lang,\n themes: theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeMaxLineLength,\n tokenizeTimeLimit: 0,\n };\n })();\n const highlightedLines = getLineNodes(\n highlighter.codeToHast(\n isWindowedHighlight\n ? extractWindowedFileContent(\n lines ?? linesFromFileContents(file.contents),\n startingLine,\n totalLines\n )\n : file.contents,\n hastConfig\n )\n );\n\n // Create sparse array for windowed rendering\n const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;\n if (isWindowedHighlight) {\n code.push(...highlightedLines);\n }\n\n return { code, themeStyles, baseThemeType };\n}\n\nfunction extractWindowedFileContent(\n lines: string[],\n startingLine: number,\n totalLines: number\n): string {\n if (lines.length === 0) {\n return '';\n }\n const endLine = Math.min(startingLine + totalLines, lines.length);\n return lines.slice(startingLine, endLine).join('');\n}\n"],"mappings":";;;;;;;;AAiBA,MAAM,6BAAwD,EAC5D,gBAAgB,MAClB;AAEA,SAAgB,0BACd,MACA,aACA,EACE,QAAQ,gBACR,uBACA,uBAEF,EACE,gBACA,cACA,YACA,UAC6B,4BACb;CAClB,IAAI,gBAAgB;EAClB,iBAAiB;EACjB,eAAe;CACjB,OAAO;EAKL,eAAe;EACf,aAAa;CACf;CACA,MAAM,sBAAsB,eAAe,KAAK,aAAa;CAC7D,MAAM,EAAE,OAAO,iBACb,2BAA2B,mBAAmB;CAChD,MAAM,OAAO,iBACT,SACC,KAAK,QAAQ,wBAAwB,KAAK,IAAI;CACnD,MAAM,gBACJ,OAAO,UAAU,WAAW,YAAY,SAAS,KAAK,CAAC,CAAC,OAAO,KAAA;CACjE,MAAM,cAAc,0BAA0B;EAC5C;EACA;CACF,CAAC;CACD,MAAM,YAAY,qBAA6B;EAC7C,MAAM;EACN,WAAW,kBAAkB,IAAI;EACjC,YAAY,kBAAkB;CAChC;CAOA,MAAM,oBAAwD;EAC5D,IAAI,OAAO,UAAU,UACnB,OAAO;GACL;GACA;GACA;GACA,cAAc;GACd,mBAAmB,wBAAwB,OAAO;GAClD;GACA,mBAAmB;EACrB;EAEF,OAAO;GACL;GACA,QAAQ;GACR;GACA,cAAc;GACd,mBAAmB,wBAAwB,OAAO;GAClD;GACA,mBAAmB;EACrB;CACF,EAAA,CAAG;CACH,MAAM,mBAAmB,aACvB,YAAY,WACV,sBACI,2BACE,SAAS,sBAAsB,KAAK,QAAQ,GAC5C,cACA,UACF,IACA,KAAK,UACT,UACF,CACF;CAGA,MAAM,OAAO,sBAAsB,IAAI,MAAM,YAAY,IAAI;CAC7D,IAAI,qBACF,KAAK,KAAK,GAAG,gBAAgB;CAG/B,OAAO;EAAE;EAAM;EAAa;CAAc;AAC5C;AAEA,SAAS,2BACP,OACA,cACA,YACQ;CACR,IAAI,MAAM,WAAW,GACnB,OAAO;CAET,MAAM,UAAU,KAAK,IAAI,eAAe,YAAY,MAAM,MAAM;CAChE,OAAO,MAAM,MAAM,cAAc,OAAO,CAAC,CAAC,KAAK,EAAE;AACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveConflict.d.ts","names":["ConflictResolverTypes","FileDiffMetadata","ProcessFileConflictData","resolveConflict"],"sources":["../../src/utils/resolveConflict.d.ts"],"sourcesContent":["import type { ConflictResolverTypes, FileDiffMetadata, ProcessFileConflictData } from '../types';\nexport declare function resolveConflict(diff: FileDiffMetadata, conflict: ProcessFileConflictData, type: ConflictResolverTypes): FileDiffMetadata;\n//# sourceMappingURL=resolveConflict.d.ts.map"],"mappings":";;;iBACwBG,eAAAA,OAAsBF,4BAA4BC,+BAA+BF,wBAAwBC"}
1
+ {"version":3,"file":"resolveConflict.d.ts","names":[],"sources":["../../src/utils/resolveConflict.ts"],"mappings":";;;iBAQgB,eAAA,CACd,IAAA,EAAM,gBAAA,EACN,QAAA,EAAU,uBAAA,EACV,IAAA,EAAM,qBAAA,GACL,gBAAA"}
@@ -1,6 +1,5 @@
1
1
  import { normalizeDiffResolution } from "./normalizeDiffResolution.js";
2
2
  import { resolveRegion } from "./resolveRegion.js";
3
-
4
3
  //#region src/utils/resolveConflict.ts
5
4
  function resolveConflict(diff, conflict, type) {
6
5
  return resolveRegion(diff, {
@@ -17,7 +16,7 @@ function getConflictDeleteContentIndexes(conflict) {
17
16
  if (conflict.endMarkerContentIndex !== conflict.endContentIndex) indexes.add(conflict.endMarkerContentIndex);
18
17
  return indexes;
19
18
  }
20
-
21
19
  //#endregion
22
20
  export { resolveConflict };
21
+
23
22
  //# sourceMappingURL=resolveConflict.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveConflict.js","names":["indexes: Set<number>"],"sources":["../../src/utils/resolveConflict.ts"],"sourcesContent":["import type {\n ConflictResolverTypes,\n FileDiffMetadata,\n ProcessFileConflictData,\n} from '../types';\nimport { normalizeDiffResolution } from './normalizeDiffResolution';\nimport { resolveRegion } from './resolveRegion';\n\nexport function resolveConflict(\n diff: FileDiffMetadata,\n conflict: ProcessFileConflictData,\n type: ConflictResolverTypes\n): FileDiffMetadata {\n return resolveRegion(diff, {\n resolution: normalizeDiffResolution(type),\n hunkIndex: conflict.hunkIndex,\n startContentIndex: conflict.startContentIndex,\n endContentIndex: conflict.endContentIndex,\n indexesToDelete: getConflictDeleteContentIndexes(conflict),\n });\n}\n\nfunction getConflictDeleteContentIndexes(\n conflict: ProcessFileConflictData\n): Set<number> {\n const indexes: Set<number> = new Set();\n if (conflict.baseContentIndex != null) {\n indexes.add(conflict.baseContentIndex);\n }\n if (conflict.endMarkerContentIndex !== conflict.endContentIndex) {\n indexes.add(conflict.endMarkerContentIndex);\n }\n return indexes;\n}\n"],"mappings":";;;;AAQA,SAAgB,gBACd,MACA,UACA,MACkB;AAClB,QAAO,cAAc,MAAM;EACzB,YAAY,wBAAwB,KAAK;EACzC,WAAW,SAAS;EACpB,mBAAmB,SAAS;EAC5B,iBAAiB,SAAS;EAC1B,iBAAiB,gCAAgC,SAAS;EAC3D,CAAC;;AAGJ,SAAS,gCACP,UACa;CACb,MAAMA,0BAAuB,IAAI,KAAK;AACtC,KAAI,SAAS,oBAAoB,KAC/B,SAAQ,IAAI,SAAS,iBAAiB;AAExC,KAAI,SAAS,0BAA0B,SAAS,gBAC9C,SAAQ,IAAI,SAAS,sBAAsB;AAE7C,QAAO"}
1
+ {"version":3,"file":"resolveConflict.js","names":[],"sources":["../../src/utils/resolveConflict.ts"],"sourcesContent":["import type {\n ConflictResolverTypes,\n FileDiffMetadata,\n ProcessFileConflictData,\n} from '../types';\nimport { normalizeDiffResolution } from './normalizeDiffResolution';\nimport { resolveRegion } from './resolveRegion';\n\nexport function resolveConflict(\n diff: FileDiffMetadata,\n conflict: ProcessFileConflictData,\n type: ConflictResolverTypes\n): FileDiffMetadata {\n return resolveRegion(diff, {\n resolution: normalizeDiffResolution(type),\n hunkIndex: conflict.hunkIndex,\n startContentIndex: conflict.startContentIndex,\n endContentIndex: conflict.endContentIndex,\n indexesToDelete: getConflictDeleteContentIndexes(conflict),\n });\n}\n\nfunction getConflictDeleteContentIndexes(\n conflict: ProcessFileConflictData\n): Set<number> {\n const indexes: Set<number> = new Set();\n if (conflict.baseContentIndex != null) {\n indexes.add(conflict.baseContentIndex);\n }\n if (conflict.endMarkerContentIndex !== conflict.endContentIndex) {\n indexes.add(conflict.endMarkerContentIndex);\n }\n return indexes;\n}\n"],"mappings":";;;AAQA,SAAgB,gBACd,MACA,UACA,MACkB;CAClB,OAAO,cAAc,MAAM;EACzB,YAAY,wBAAwB,IAAI;EACxC,WAAW,SAAS;EACpB,mBAAmB,SAAS;EAC5B,iBAAiB,SAAS;EAC1B,iBAAiB,gCAAgC,QAAQ;CAC3D,CAAC;AACH;AAEA,SAAS,gCACP,UACa;CACb,MAAM,0BAAuB,IAAI,IAAI;CACrC,IAAI,SAAS,oBAAoB,MAC/B,QAAQ,IAAI,SAAS,gBAAgB;CAEvC,IAAI,SAAS,0BAA0B,SAAS,iBAC9C,QAAQ,IAAI,SAAS,qBAAqB;CAE5C,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveRegion.d.ts","names":["FileDiffMetadata","RegionResolutionTarget","Set","resolveRegion"],"sources":["../../src/utils/resolveRegion.d.ts"],"sourcesContent":["import type { FileDiffMetadata } from '../types';\ninterface RegionResolutionTarget {\n hunkIndex: number;\n startContentIndex: number;\n endContentIndex: number;\n resolution: 'deletions' | 'additions' | 'both';\n indexesToDelete?: Set<number>;\n}\nexport declare function resolveRegion(diff: FileDiffMetadata, target: RegionResolutionTarget): FileDiffMetadata;\nexport {};\n//# sourceMappingURL=resolveRegion.d.ts.map"],"mappings":";;;UACUC,sBAAAA;;EAAAA,iBAAAA,EAAAA,MAAsB;EAORE,eAAAA,EAAa,MAAA;EAAOH,UAAAA,EAAAA,WAAAA,GAAAA,WAAAA,GAAAA,MAAAA;EAA0BC,eAAAA,CAAAA,EAFhDC,GAEgDD,CAAAA,MAAAA,CAAAA;;AAAyC,iBAAvFE,aAAAA,CAAuF,IAAA,EAAnEH,gBAAmE,EAAA,MAAA,EAAzCC,sBAAyC,CAAA,EAAhBD,gBAAgB"}
1
+ {"version":3,"file":"resolveRegion.d.ts","names":[],"sources":["../../src/utils/resolveRegion.ts"],"mappings":";;;UAOU,sBAAA;EACR,SAAA;EACA,iBAAA;EACA,eAAA;EACA,UAAA;EACA,eAAA,GAAkB,GAAG;AAAA;AAAA,iBAYP,aAAA,CACd,IAAA,EAAM,gBAAA,EACN,MAAA,EAAQ,sBAAA,GACP,gBAAA"}
@@ -216,7 +216,7 @@ function advanceCursor(content, cursor, hunk) {
216
216
  hunk.unifiedLineCount += content.deletions + content.additions;
217
217
  }
218
218
  }
219
-
220
219
  //#endregion
221
220
  export { resolveRegion };
221
+
222
222
  //# sourceMappingURL=resolveRegion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveRegion.js","names":["resolvedDiff: FileDiffMetadata","cursor: CursorState","newHunk: Hunk","newContent: ContextContent"],"sources":["../../src/utils/resolveRegion.ts"],"sourcesContent":["import type {\n ChangeContent,\n ContextContent,\n FileDiffMetadata,\n Hunk,\n} from '../types';\n\ninterface RegionResolutionTarget {\n hunkIndex: number;\n startContentIndex: number;\n endContentIndex: number;\n resolution: 'deletions' | 'additions' | 'both';\n indexesToDelete?: Set<number>;\n}\n\ninterface CursorState {\n nextAdditionLineIndex: number;\n nextDeletionLineIndex: number;\n nextAdditionStart: number;\n nextDeletionStart: number;\n splitLineCount: number;\n unifiedLineCount: number;\n}\n\nexport function resolveRegion(\n diff: FileDiffMetadata,\n target: RegionResolutionTarget\n): FileDiffMetadata {\n const {\n resolution,\n hunkIndex,\n startContentIndex,\n endContentIndex,\n indexesToDelete = new Set(),\n } = target;\n const currentHunk = diff.hunks[hunkIndex];\n if (currentHunk == null) {\n console.error({ diff, hunkIndex });\n throw new Error(`resolveRegion: Invalid hunk index: ${hunkIndex}`);\n }\n\n if (\n startContentIndex < 0 ||\n endContentIndex >= currentHunk.hunkContent.length ||\n startContentIndex > endContentIndex\n ) {\n throw new Error(\n `resolveRegion: Invalid content range, ${startContentIndex}, ${endContentIndex}`\n );\n }\n\n const { hunks, additionLines, deletionLines } = diff;\n const resolvedDiff: FileDiffMetadata = {\n ...diff,\n hunks: [],\n deletionLines: [],\n additionLines: [],\n splitLineCount: 0,\n unifiedLineCount: 0,\n cacheKey:\n diff.cacheKey != null\n ? `${diff.cacheKey}:${resolution[0]}-${hunkIndex}:${startContentIndex}-${endContentIndex}`\n : undefined,\n };\n\n const cursor: CursorState = {\n nextAdditionLineIndex: 0,\n nextDeletionLineIndex: 0,\n nextAdditionStart: 1,\n nextDeletionStart: 1,\n splitLineCount: 0,\n unifiedLineCount: 0,\n };\n const updatesEOFState =\n hunkIndex === hunks.length - 1 &&\n endContentIndex === currentHunk.hunkContent.length - 1;\n const shouldProcessCollapsedContext = !diff.isPartial;\n\n for (const [index, hunk] of hunks.entries()) {\n processCollapsedContext(\n diff,\n resolvedDiff,\n cursor,\n hunk.deletionLineIndex - hunk.collapsedBefore,\n hunk.additionLineIndex - hunk.collapsedBefore,\n hunk.collapsedBefore,\n shouldProcessCollapsedContext\n );\n\n const newHunk: Hunk = {\n ...hunk,\n hunkContent: [],\n additionStart: cursor.nextAdditionStart,\n deletionStart: cursor.nextDeletionStart,\n additionLineIndex: cursor.nextAdditionLineIndex,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionCount: 0,\n deletionCount: 0,\n deletionLines: 0,\n additionLines: 0,\n splitLineStart: cursor.splitLineCount,\n unifiedLineStart: cursor.unifiedLineCount,\n splitLineCount: 0,\n unifiedLineCount: 0,\n };\n\n for (const [contentIndex, content] of hunk.hunkContent.entries()) {\n // If we are outside of the targeted hunk or content region\n if (\n index !== hunkIndex ||\n contentIndex < startContentIndex ||\n contentIndex > endContentIndex\n ) {\n pushContentLinesToDiff(\n content,\n resolvedDiff,\n deletionLines,\n additionLines\n );\n const newContent = {\n ...content,\n additionLineIndex: cursor.nextAdditionLineIndex,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n };\n newHunk.hunkContent.push(newContent);\n advanceCursor(newContent, cursor, newHunk);\n }\n // If we are at an index to delete, replace with an empty context node\n else if (indexesToDelete.has(contentIndex)) {\n newHunk.hunkContent.push({\n type: 'context',\n lines: 0,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionLineIndex: cursor.nextAdditionLineIndex,\n });\n }\n // There's nothing to `resolve` with context nodes, so just push them as\n // they are\n else if (content.type === 'context') {\n pushContentLinesToDiff(\n content,\n resolvedDiff,\n deletionLines,\n additionLines\n );\n const newContent: ContextContent = {\n ...content,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionLineIndex: cursor.nextAdditionLineIndex,\n };\n newHunk.hunkContent.push(newContent);\n advanceCursor(newContent, cursor, newHunk);\n }\n // Looks like we have a change to resolve and push\n else {\n pushResolveLinesToDiff(\n resolution,\n content,\n resolvedDiff,\n deletionLines,\n additionLines\n );\n const newContent: ContextContent = {\n type: 'context',\n lines:\n resolution === 'deletions'\n ? content.deletions\n : resolution === 'additions'\n ? content.additions\n : content.deletions + content.additions,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionLineIndex: cursor.nextAdditionLineIndex,\n };\n newHunk.hunkContent.push(newContent);\n advanceCursor(newContent, cursor, newHunk);\n }\n }\n\n if (index === hunkIndex && updatesEOFState) {\n const noEOFCR =\n resolution === 'deletions'\n ? hunk.noEOFCRDeletions\n : hunk.noEOFCRAdditions;\n newHunk.noEOFCRAdditions = noEOFCR;\n newHunk.noEOFCRDeletions = noEOFCR;\n }\n\n resolvedDiff.hunks.push(newHunk);\n }\n\n const finalHunk = hunks.at(-1);\n if (finalHunk != null && !diff.isPartial) {\n pushCollapsedContextLines(\n resolvedDiff,\n deletionLines,\n additionLines,\n finalHunk.deletionLineIndex + finalHunk.deletionCount,\n finalHunk.additionLineIndex + finalHunk.additionCount,\n Math.min(\n deletionLines.length -\n (finalHunk.deletionLineIndex + finalHunk.deletionCount),\n additionLines.length -\n (finalHunk.additionLineIndex + finalHunk.additionCount)\n )\n );\n }\n\n resolvedDiff.splitLineCount = cursor.splitLineCount;\n resolvedDiff.unifiedLineCount = cursor.unifiedLineCount;\n\n return resolvedDiff;\n}\n\nfunction pushCollapsedContextLines(\n diff: FileDiffMetadata,\n deletionLines: string[],\n additionLines: string[],\n deletionLineIndex: number,\n additionLineIndex: number,\n lineCount: number\n) {\n for (let index = 0; index < lineCount; index++) {\n const deletionLine = deletionLines[deletionLineIndex + index];\n const additionLine = additionLines[additionLineIndex + index];\n if (deletionLine == null || additionLine == null) {\n throw new Error(\n 'pushCollapsedContextLines: missing collapsed context line'\n );\n }\n diff.deletionLines.push(deletionLine);\n diff.additionLines.push(additionLine);\n }\n}\n\n// Partial patches track omitted context in `collapsedBefore`, but those lines do\n// not exist in the diff's line arrays. Keep the virtual row counts and file\n// positions in sync without inventing hidden lines.\nfunction processCollapsedContext(\n sourceDiff: FileDiffMetadata,\n resolvedDiff: FileDiffMetadata,\n cursor: CursorState,\n deletionLineIndex: number,\n additionLineIndex: number,\n lineCount: number,\n shouldProcessContent: boolean\n) {\n if (lineCount <= 0) {\n return;\n }\n\n if (shouldProcessContent) {\n pushCollapsedContextLines(\n resolvedDiff,\n sourceDiff.deletionLines,\n sourceDiff.additionLines,\n deletionLineIndex,\n additionLineIndex,\n lineCount\n );\n cursor.nextAdditionLineIndex += lineCount;\n cursor.nextDeletionLineIndex += lineCount;\n }\n\n cursor.nextAdditionStart += lineCount;\n cursor.nextDeletionStart += lineCount;\n cursor.splitLineCount += lineCount;\n cursor.unifiedLineCount += lineCount;\n}\n\nfunction pushContentLinesToDiff(\n content: ContextContent | ChangeContent,\n diff: FileDiffMetadata,\n deletionLines: string[],\n additionLines: string[]\n) {\n if (content.type === 'context') {\n for (let i = 0; i < content.lines; i++) {\n const line = additionLines[content.additionLineIndex + i];\n if (line == null) {\n console.error({ additionLines, content, i });\n throw new Error('pushContentLinesToDiff: Context line does not exist');\n }\n diff.deletionLines.push(line);\n diff.additionLines.push(line);\n }\n } else {\n const len = Math.max(content.deletions, content.additions);\n for (let i = 0; i < len; i++) {\n if (i < content.deletions) {\n const line = deletionLines[content.deletionLineIndex + i];\n if (line == null) {\n console.error({ deletionLines, content, i });\n throw new Error(\n 'pushContentLinesToDiff: Deletion line does not exist'\n );\n }\n diff.deletionLines.push(line);\n }\n if (i < content.additions) {\n const line = additionLines[content.additionLineIndex + i];\n if (line == null) {\n console.error({ additionLines, content, i });\n throw new Error(\n 'pushContentLinesToDiff: Addition line does not exist'\n );\n }\n diff.additionLines.push(line);\n }\n }\n }\n}\n\nfunction pushResolveLinesToDiff(\n resolution: 'deletions' | 'additions' | 'both',\n content: ChangeContent,\n diff: FileDiffMetadata,\n deletionLines: string[],\n additionLines: string[]\n) {\n if (resolution === 'deletions' || resolution === 'both') {\n for (let i = 0; i < content.deletions; i++) {\n const line = deletionLines[content.deletionLineIndex + i];\n if (line == null) {\n console.error({ deletionLines, content, i });\n throw new Error('pushResolveLinesToDiff: Deletion line does not exist');\n }\n diff.deletionLines.push(line);\n diff.additionLines.push(line);\n }\n }\n if (resolution === 'additions' || resolution === 'both') {\n for (let i = 0; i < content.additions; i++) {\n const line = additionLines[content.additionLineIndex + i];\n if (line == null) {\n console.error({ additionLines, content, i });\n throw new Error('pushResolveLinesToDiff: Addition line does not exist');\n }\n diff.deletionLines.push(line);\n diff.additionLines.push(line);\n }\n }\n}\n\nfunction advanceCursor(\n content: ChangeContent | ContextContent,\n cursor: CursorState,\n hunk: Hunk\n) {\n if (content.type === 'context') {\n cursor.nextAdditionLineIndex += content.lines;\n cursor.nextDeletionLineIndex += content.lines;\n cursor.nextAdditionStart += content.lines;\n cursor.nextDeletionStart += content.lines;\n cursor.splitLineCount += content.lines;\n cursor.unifiedLineCount += content.lines;\n\n hunk.additionCount += content.lines;\n hunk.deletionCount += content.lines;\n hunk.splitLineCount += content.lines;\n hunk.unifiedLineCount += content.lines;\n } else {\n cursor.nextAdditionLineIndex += content.additions;\n cursor.nextDeletionLineIndex += content.deletions;\n cursor.nextAdditionStart += content.additions;\n cursor.nextDeletionStart += content.deletions;\n cursor.splitLineCount += Math.max(content.deletions, content.additions);\n cursor.unifiedLineCount += content.deletions + content.additions;\n\n hunk.deletionCount += content.deletions;\n hunk.deletionLines += content.deletions;\n hunk.additionCount += content.additions;\n hunk.additionLines += content.additions;\n hunk.splitLineCount += Math.max(content.deletions, content.additions);\n hunk.unifiedLineCount += content.deletions + content.additions;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"resolveRegion.js","names":[],"sources":["../../src/utils/resolveRegion.ts"],"sourcesContent":["import type {\n ChangeContent,\n ContextContent,\n FileDiffMetadata,\n Hunk,\n} from '../types';\n\ninterface RegionResolutionTarget {\n hunkIndex: number;\n startContentIndex: number;\n endContentIndex: number;\n resolution: 'deletions' | 'additions' | 'both';\n indexesToDelete?: Set<number>;\n}\n\ninterface CursorState {\n nextAdditionLineIndex: number;\n nextDeletionLineIndex: number;\n nextAdditionStart: number;\n nextDeletionStart: number;\n splitLineCount: number;\n unifiedLineCount: number;\n}\n\nexport function resolveRegion(\n diff: FileDiffMetadata,\n target: RegionResolutionTarget\n): FileDiffMetadata {\n const {\n resolution,\n hunkIndex,\n startContentIndex,\n endContentIndex,\n indexesToDelete = new Set(),\n } = target;\n const currentHunk = diff.hunks[hunkIndex];\n if (currentHunk == null) {\n console.error({ diff, hunkIndex });\n throw new Error(`resolveRegion: Invalid hunk index: ${hunkIndex}`);\n }\n\n if (\n startContentIndex < 0 ||\n endContentIndex >= currentHunk.hunkContent.length ||\n startContentIndex > endContentIndex\n ) {\n throw new Error(\n `resolveRegion: Invalid content range, ${startContentIndex}, ${endContentIndex}`\n );\n }\n\n const { hunks, additionLines, deletionLines } = diff;\n const resolvedDiff: FileDiffMetadata = {\n ...diff,\n hunks: [],\n deletionLines: [],\n additionLines: [],\n splitLineCount: 0,\n unifiedLineCount: 0,\n cacheKey:\n diff.cacheKey != null\n ? `${diff.cacheKey}:${resolution[0]}-${hunkIndex}:${startContentIndex}-${endContentIndex}`\n : undefined,\n };\n\n const cursor: CursorState = {\n nextAdditionLineIndex: 0,\n nextDeletionLineIndex: 0,\n nextAdditionStart: 1,\n nextDeletionStart: 1,\n splitLineCount: 0,\n unifiedLineCount: 0,\n };\n const updatesEOFState =\n hunkIndex === hunks.length - 1 &&\n endContentIndex === currentHunk.hunkContent.length - 1;\n const shouldProcessCollapsedContext = !diff.isPartial;\n\n for (const [index, hunk] of hunks.entries()) {\n processCollapsedContext(\n diff,\n resolvedDiff,\n cursor,\n hunk.deletionLineIndex - hunk.collapsedBefore,\n hunk.additionLineIndex - hunk.collapsedBefore,\n hunk.collapsedBefore,\n shouldProcessCollapsedContext\n );\n\n const newHunk: Hunk = {\n ...hunk,\n hunkContent: [],\n additionStart: cursor.nextAdditionStart,\n deletionStart: cursor.nextDeletionStart,\n additionLineIndex: cursor.nextAdditionLineIndex,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionCount: 0,\n deletionCount: 0,\n deletionLines: 0,\n additionLines: 0,\n splitLineStart: cursor.splitLineCount,\n unifiedLineStart: cursor.unifiedLineCount,\n splitLineCount: 0,\n unifiedLineCount: 0,\n };\n\n for (const [contentIndex, content] of hunk.hunkContent.entries()) {\n // If we are outside of the targeted hunk or content region\n if (\n index !== hunkIndex ||\n contentIndex < startContentIndex ||\n contentIndex > endContentIndex\n ) {\n pushContentLinesToDiff(\n content,\n resolvedDiff,\n deletionLines,\n additionLines\n );\n const newContent = {\n ...content,\n additionLineIndex: cursor.nextAdditionLineIndex,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n };\n newHunk.hunkContent.push(newContent);\n advanceCursor(newContent, cursor, newHunk);\n }\n // If we are at an index to delete, replace with an empty context node\n else if (indexesToDelete.has(contentIndex)) {\n newHunk.hunkContent.push({\n type: 'context',\n lines: 0,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionLineIndex: cursor.nextAdditionLineIndex,\n });\n }\n // There's nothing to `resolve` with context nodes, so just push them as\n // they are\n else if (content.type === 'context') {\n pushContentLinesToDiff(\n content,\n resolvedDiff,\n deletionLines,\n additionLines\n );\n const newContent: ContextContent = {\n ...content,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionLineIndex: cursor.nextAdditionLineIndex,\n };\n newHunk.hunkContent.push(newContent);\n advanceCursor(newContent, cursor, newHunk);\n }\n // Looks like we have a change to resolve and push\n else {\n pushResolveLinesToDiff(\n resolution,\n content,\n resolvedDiff,\n deletionLines,\n additionLines\n );\n const newContent: ContextContent = {\n type: 'context',\n lines:\n resolution === 'deletions'\n ? content.deletions\n : resolution === 'additions'\n ? content.additions\n : content.deletions + content.additions,\n deletionLineIndex: cursor.nextDeletionLineIndex,\n additionLineIndex: cursor.nextAdditionLineIndex,\n };\n newHunk.hunkContent.push(newContent);\n advanceCursor(newContent, cursor, newHunk);\n }\n }\n\n if (index === hunkIndex && updatesEOFState) {\n const noEOFCR =\n resolution === 'deletions'\n ? hunk.noEOFCRDeletions\n : hunk.noEOFCRAdditions;\n newHunk.noEOFCRAdditions = noEOFCR;\n newHunk.noEOFCRDeletions = noEOFCR;\n }\n\n resolvedDiff.hunks.push(newHunk);\n }\n\n const finalHunk = hunks.at(-1);\n if (finalHunk != null && !diff.isPartial) {\n pushCollapsedContextLines(\n resolvedDiff,\n deletionLines,\n additionLines,\n finalHunk.deletionLineIndex + finalHunk.deletionCount,\n finalHunk.additionLineIndex + finalHunk.additionCount,\n Math.min(\n deletionLines.length -\n (finalHunk.deletionLineIndex + finalHunk.deletionCount),\n additionLines.length -\n (finalHunk.additionLineIndex + finalHunk.additionCount)\n )\n );\n }\n\n resolvedDiff.splitLineCount = cursor.splitLineCount;\n resolvedDiff.unifiedLineCount = cursor.unifiedLineCount;\n\n return resolvedDiff;\n}\n\nfunction pushCollapsedContextLines(\n diff: FileDiffMetadata,\n deletionLines: string[],\n additionLines: string[],\n deletionLineIndex: number,\n additionLineIndex: number,\n lineCount: number\n) {\n for (let index = 0; index < lineCount; index++) {\n const deletionLine = deletionLines[deletionLineIndex + index];\n const additionLine = additionLines[additionLineIndex + index];\n if (deletionLine == null || additionLine == null) {\n throw new Error(\n 'pushCollapsedContextLines: missing collapsed context line'\n );\n }\n diff.deletionLines.push(deletionLine);\n diff.additionLines.push(additionLine);\n }\n}\n\n// Partial patches track omitted context in `collapsedBefore`, but those lines do\n// not exist in the diff's line arrays. Keep the virtual row counts and file\n// positions in sync without inventing hidden lines.\nfunction processCollapsedContext(\n sourceDiff: FileDiffMetadata,\n resolvedDiff: FileDiffMetadata,\n cursor: CursorState,\n deletionLineIndex: number,\n additionLineIndex: number,\n lineCount: number,\n shouldProcessContent: boolean\n) {\n if (lineCount <= 0) {\n return;\n }\n\n if (shouldProcessContent) {\n pushCollapsedContextLines(\n resolvedDiff,\n sourceDiff.deletionLines,\n sourceDiff.additionLines,\n deletionLineIndex,\n additionLineIndex,\n lineCount\n );\n cursor.nextAdditionLineIndex += lineCount;\n cursor.nextDeletionLineIndex += lineCount;\n }\n\n cursor.nextAdditionStart += lineCount;\n cursor.nextDeletionStart += lineCount;\n cursor.splitLineCount += lineCount;\n cursor.unifiedLineCount += lineCount;\n}\n\nfunction pushContentLinesToDiff(\n content: ContextContent | ChangeContent,\n diff: FileDiffMetadata,\n deletionLines: string[],\n additionLines: string[]\n) {\n if (content.type === 'context') {\n for (let i = 0; i < content.lines; i++) {\n const line = additionLines[content.additionLineIndex + i];\n if (line == null) {\n console.error({ additionLines, content, i });\n throw new Error('pushContentLinesToDiff: Context line does not exist');\n }\n diff.deletionLines.push(line);\n diff.additionLines.push(line);\n }\n } else {\n const len = Math.max(content.deletions, content.additions);\n for (let i = 0; i < len; i++) {\n if (i < content.deletions) {\n const line = deletionLines[content.deletionLineIndex + i];\n if (line == null) {\n console.error({ deletionLines, content, i });\n throw new Error(\n 'pushContentLinesToDiff: Deletion line does not exist'\n );\n }\n diff.deletionLines.push(line);\n }\n if (i < content.additions) {\n const line = additionLines[content.additionLineIndex + i];\n if (line == null) {\n console.error({ additionLines, content, i });\n throw new Error(\n 'pushContentLinesToDiff: Addition line does not exist'\n );\n }\n diff.additionLines.push(line);\n }\n }\n }\n}\n\nfunction pushResolveLinesToDiff(\n resolution: 'deletions' | 'additions' | 'both',\n content: ChangeContent,\n diff: FileDiffMetadata,\n deletionLines: string[],\n additionLines: string[]\n) {\n if (resolution === 'deletions' || resolution === 'both') {\n for (let i = 0; i < content.deletions; i++) {\n const line = deletionLines[content.deletionLineIndex + i];\n if (line == null) {\n console.error({ deletionLines, content, i });\n throw new Error('pushResolveLinesToDiff: Deletion line does not exist');\n }\n diff.deletionLines.push(line);\n diff.additionLines.push(line);\n }\n }\n if (resolution === 'additions' || resolution === 'both') {\n for (let i = 0; i < content.additions; i++) {\n const line = additionLines[content.additionLineIndex + i];\n if (line == null) {\n console.error({ additionLines, content, i });\n throw new Error('pushResolveLinesToDiff: Addition line does not exist');\n }\n diff.deletionLines.push(line);\n diff.additionLines.push(line);\n }\n }\n}\n\nfunction advanceCursor(\n content: ChangeContent | ContextContent,\n cursor: CursorState,\n hunk: Hunk\n) {\n if (content.type === 'context') {\n cursor.nextAdditionLineIndex += content.lines;\n cursor.nextDeletionLineIndex += content.lines;\n cursor.nextAdditionStart += content.lines;\n cursor.nextDeletionStart += content.lines;\n cursor.splitLineCount += content.lines;\n cursor.unifiedLineCount += content.lines;\n\n hunk.additionCount += content.lines;\n hunk.deletionCount += content.lines;\n hunk.splitLineCount += content.lines;\n hunk.unifiedLineCount += content.lines;\n } else {\n cursor.nextAdditionLineIndex += content.additions;\n cursor.nextDeletionLineIndex += content.deletions;\n cursor.nextAdditionStart += content.additions;\n cursor.nextDeletionStart += content.deletions;\n cursor.splitLineCount += Math.max(content.deletions, content.additions);\n cursor.unifiedLineCount += content.deletions + content.additions;\n\n hunk.deletionCount += content.deletions;\n hunk.deletionLines += content.deletions;\n hunk.additionCount += content.additions;\n hunk.additionLines += content.additions;\n hunk.splitLineCount += Math.max(content.deletions, content.additions);\n hunk.unifiedLineCount += content.deletions + content.additions;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"roundToDevicePixel.d.ts","names":["roundToDevicePixel"],"sources":["../../src/utils/roundToDevicePixel.d.ts"],"sourcesContent":["/**\n * Snap a CSS-pixel value to the nearest device-pixel boundary. Browsers store\n * scrollTop on the device-pixel grid on fractional-DPR displays (1.25x, 1.5x,\n * etc.), so rounding computed scroll targets against that grid keeps delta\n * math settling cleanly instead of hovering around fractional residuals.\n *\n * Reads window.devicePixelRatio fresh on each call so monitor-switching and\n * zoom changes are picked up without needing to flush any cached value.\n */\nexport declare function roundToDevicePixel(value: number): number;\n//# sourceMappingURL=roundToDevicePixel.d.ts.map"],"mappings":";;AASA;;;;;;;;iBAAwBA,kBAAAA"}
1
+ {"version":3,"file":"roundToDevicePixel.d.ts","names":[],"sources":["../../src/utils/roundToDevicePixel.ts"],"mappings":";;AASA;;;;AAAgD;;;;iBAAhC,kBAAA,CAAmB,KAAa"}
@@ -12,7 +12,7 @@ function roundToDevicePixel(value) {
12
12
  const dpr = window.devicePixelRatio ?? 1;
13
13
  return Math.round(value * dpr) / dpr;
14
14
  }
15
-
16
15
  //#endregion
17
16
  export { roundToDevicePixel };
17
+
18
18
  //# sourceMappingURL=roundToDevicePixel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"roundToDevicePixel.js","names":[],"sources":["../../src/utils/roundToDevicePixel.ts"],"sourcesContent":["/**\n * Snap a CSS-pixel value to the nearest device-pixel boundary. Browsers store\n * scrollTop on the device-pixel grid on fractional-DPR displays (1.25x, 1.5x,\n * etc.), so rounding computed scroll targets against that grid keeps delta\n * math settling cleanly instead of hovering around fractional residuals.\n *\n * Reads window.devicePixelRatio fresh on each call so monitor-switching and\n * zoom changes are picked up without needing to flush any cached value.\n */\nexport function roundToDevicePixel(value: number): number {\n const dpr = window.devicePixelRatio ?? 1;\n return Math.round(value * dpr) / dpr;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,mBAAmB,OAAuB;CACxD,MAAM,MAAM,OAAO,oBAAoB;AACvC,QAAO,KAAK,MAAM,QAAQ,IAAI,GAAG"}
1
+ {"version":3,"file":"roundToDevicePixel.js","names":[],"sources":["../../src/utils/roundToDevicePixel.ts"],"sourcesContent":["/**\n * Snap a CSS-pixel value to the nearest device-pixel boundary. Browsers store\n * scrollTop on the device-pixel grid on fractional-DPR displays (1.25x, 1.5x,\n * etc.), so rounding computed scroll targets against that grid keeps delta\n * math settling cleanly instead of hovering around fractional residuals.\n *\n * Reads window.devicePixelRatio fresh on each call so monitor-switching and\n * zoom changes are picked up without needing to flush any cached value.\n */\nexport function roundToDevicePixel(value: number): number {\n const dpr = window.devicePixelRatio ?? 1;\n return Math.round(value * dpr) / dpr;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,mBAAmB,OAAuB;CACxD,MAAM,MAAM,OAAO,oBAAoB;CACvC,OAAO,KAAK,MAAM,QAAQ,GAAG,IAAI;AACnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbarGutter.d.ts","names":["getMeasuredScrollbarGutter","ShadowRoot","createMeasuredScrollbarGutterDeclaration"],"sources":["../../src/utils/scrollbarGutter.d.ts"],"sourcesContent":["export declare function getMeasuredScrollbarGutter(shadowRoot: ShadowRoot): number | undefined;\nexport declare function createMeasuredScrollbarGutterDeclaration(scrollbarGutter: number | undefined): string;\n//# sourceMappingURL=scrollbarGutter.d.ts.map"],"mappings":";iBAAwBA,0BAAAA,aAAuCC;AAAvCD,iBACAE,wCAAAA,CADiD,eAAA,EAAA,MAAA,GAAA,SAAA,CAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"scrollbarGutter.d.ts","names":[],"sources":["../../src/utils/scrollbarGutter.ts"],"mappings":";iBAUgB,0BAAA,CACd,UAAsB,EAAV,UAAU;AAAA,iBAkCR,wCAAA,CACd,eAAmC"}
@@ -1,5 +1,4 @@
1
1
  import { DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY, DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE } from "../constants.js";
2
-
3
2
  //#region src/utils/scrollbarGutter.ts
4
3
  let measuredScrollbarGutter;
5
4
  function getMeasuredScrollbarGutter(shadowRoot) {
@@ -22,7 +21,7 @@ function getMeasuredScrollbarGutter(shadowRoot) {
22
21
  function createMeasuredScrollbarGutterDeclaration(scrollbarGutter) {
23
22
  return `${DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY}: ${scrollbarGutter == null ? "var(--diffs-scrollbar-gutter-fallback)" : `${scrollbarGutter}px`};`;
24
23
  }
25
-
26
24
  //#endregion
27
25
  export { createMeasuredScrollbarGutterDeclaration, getMeasuredScrollbarGutter };
26
+
28
27
  //# sourceMappingURL=scrollbarGutter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbarGutter.js","names":["measuredScrollbarGutter: number | undefined"],"sources":["../../src/utils/scrollbarGutter.ts"],"sourcesContent":["import {\n DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY,\n DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE,\n} from '../constants';\n\nlet measuredScrollbarGutter: number | undefined;\n\n// Measures the horizontal scrollbar used by `[data-code]` once per page. The\n// hidden probe opts into the same selector as real code panes so custom\n// scrollbar CSS is reflected in the measured value.\nexport function getMeasuredScrollbarGutter(\n shadowRoot: ShadowRoot\n): number | undefined {\n if (measuredScrollbarGutter != null) {\n return measuredScrollbarGutter;\n }\n\n const host = shadowRoot.host;\n if (\n typeof HTMLElement !== 'undefined' &&\n host instanceof HTMLElement &&\n !host.isConnected\n ) {\n return undefined;\n }\n\n const wrapper = document.createElement('div');\n wrapper.setAttribute('data-code', '');\n wrapper.setAttribute(DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE, 'true');\n\n const child = document.createElement('div');\n child.style.position = 'relative';\n child.style.width = '200%';\n child.style.height = '200%';\n wrapper.appendChild(child);\n\n shadowRoot.appendChild(wrapper);\n measuredScrollbarGutter = Math.max(\n wrapper.offsetHeight - wrapper.clientHeight,\n 0\n );\n wrapper.remove();\n return measuredScrollbarGutter;\n}\n\nexport function createMeasuredScrollbarGutterDeclaration(\n scrollbarGutter: number | undefined\n): string {\n const value =\n scrollbarGutter == null\n ? 'var(--diffs-scrollbar-gutter-fallback)'\n : `${scrollbarGutter}px`;\n return `${DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY}: ${value};`;\n}\n"],"mappings":";;;AAKA,IAAIA;AAKJ,SAAgB,2BACd,YACoB;AACpB,KAAI,2BAA2B,KAC7B,QAAO;CAGT,MAAM,OAAO,WAAW;AACxB,KACE,OAAO,gBAAgB,eACvB,gBAAgB,eAChB,CAAC,KAAK,YAEN;CAGF,MAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,SAAQ,aAAa,aAAa,GAAG;AACrC,SAAQ,aAAa,mCAAmC,OAAO;CAE/D,MAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,OAAM,MAAM,WAAW;AACvB,OAAM,MAAM,QAAQ;AACpB,OAAM,MAAM,SAAS;AACrB,SAAQ,YAAY,MAAM;AAE1B,YAAW,YAAY,QAAQ;AAC/B,2BAA0B,KAAK,IAC7B,QAAQ,eAAe,QAAQ,cAC/B,EACD;AACD,SAAQ,QAAQ;AAChB,QAAO;;AAGT,SAAgB,yCACd,iBACQ;AAKR,QAAO,GAAG,yCAAyC,IAHjD,mBAAmB,OACf,2CACA,GAAG,gBAAgB,IACoC"}
1
+ {"version":3,"file":"scrollbarGutter.js","names":[],"sources":["../../src/utils/scrollbarGutter.ts"],"sourcesContent":["import {\n DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY,\n DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE,\n} from '../constants';\n\nlet measuredScrollbarGutter: number | undefined;\n\n// Measures the horizontal scrollbar used by `[data-code]` once per page. The\n// hidden probe opts into the same selector as real code panes so custom\n// scrollbar CSS is reflected in the measured value.\nexport function getMeasuredScrollbarGutter(\n shadowRoot: ShadowRoot\n): number | undefined {\n if (measuredScrollbarGutter != null) {\n return measuredScrollbarGutter;\n }\n\n const host = shadowRoot.host;\n if (\n typeof HTMLElement !== 'undefined' &&\n host instanceof HTMLElement &&\n !host.isConnected\n ) {\n return undefined;\n }\n\n const wrapper = document.createElement('div');\n wrapper.setAttribute('data-code', '');\n wrapper.setAttribute(DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE, 'true');\n\n const child = document.createElement('div');\n child.style.position = 'relative';\n child.style.width = '200%';\n child.style.height = '200%';\n wrapper.appendChild(child);\n\n shadowRoot.appendChild(wrapper);\n measuredScrollbarGutter = Math.max(\n wrapper.offsetHeight - wrapper.clientHeight,\n 0\n );\n wrapper.remove();\n return measuredScrollbarGutter;\n}\n\nexport function createMeasuredScrollbarGutterDeclaration(\n scrollbarGutter: number | undefined\n): string {\n const value =\n scrollbarGutter == null\n ? 'var(--diffs-scrollbar-gutter-fallback)'\n : `${scrollbarGutter}px`;\n return `${DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY}: ${value};`;\n}\n"],"mappings":";;AAKA,IAAI;AAKJ,SAAgB,2BACd,YACoB;CACpB,IAAI,2BAA2B,MAC7B,OAAO;CAGT,MAAM,OAAO,WAAW;CACxB,IACE,OAAO,gBAAgB,eACvB,gBAAgB,eAChB,CAAC,KAAK,aAEN;CAGF,MAAM,UAAU,SAAS,cAAc,KAAK;CAC5C,QAAQ,aAAa,aAAa,EAAE;CACpC,QAAQ,aAAa,mCAAmC,MAAM;CAE9D,MAAM,QAAQ,SAAS,cAAc,KAAK;CAC1C,MAAM,MAAM,WAAW;CACvB,MAAM,MAAM,QAAQ;CACpB,MAAM,MAAM,SAAS;CACrB,QAAQ,YAAY,KAAK;CAEzB,WAAW,YAAY,OAAO;CAC9B,0BAA0B,KAAK,IAC7B,QAAQ,eAAe,QAAQ,cAC/B,CACF;CACA,QAAQ,OAAO;CACf,OAAO;AACT;AAEA,SAAgB,yCACd,iBACQ;CAKR,OAAO,GAAG,yCAAyC,IAHjD,mBAAmB,OACf,2CACA,GAAG,gBAAgB,IACoC;AAC/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"setLanguageOverride.d.ts","names":["FileContents","FileDiffMetadata","SupportedLanguages","setLanguageOverride"],"sources":["../../src/utils/setLanguageOverride.d.ts"],"sourcesContent":["import type { FileContents, FileDiffMetadata, SupportedLanguages } from '../types';\nexport declare function setLanguageOverride(fileOrDiff: FileContents, lang: SupportedLanguages): FileContents;\nexport declare function setLanguageOverride(fileOrDiff: FileDiffMetadata, lang: SupportedLanguages): FileDiffMetadata;\n//# sourceMappingURL=setLanguageOverride.d.ts.map"],"mappings":";;;iBACwBG,mBAAAA,aAAgCH,oBAAoBE,qBAAqBF;iBACzEG,mBAAAA,aAAgCF,wBAAwBC,qBAAqBD"}
1
+ {"version":3,"file":"setLanguageOverride.d.ts","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"mappings":";;;iBAMgB,mBAAA,CACd,UAAA,EAAY,YAAA,EACZ,IAAA,EAAM,kBAAA,GACL,YAAA;AAAA,iBACa,mBAAA,CACd,UAAA,EAAY,gBAAA,EACZ,IAAA,EAAM,kBAAA,GACL,gBAAA"}
@@ -5,7 +5,7 @@ function setLanguageOverride(fileOrDiff, lang) {
5
5
  lang
6
6
  };
7
7
  }
8
-
9
8
  //#endregion
10
9
  export { setLanguageOverride };
10
+
11
11
  //# sourceMappingURL=setLanguageOverride.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setLanguageOverride.js","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":["import type {\n FileContents,\n FileDiffMetadata,\n SupportedLanguages,\n} from '../types';\n\nexport function setLanguageOverride(\n fileOrDiff: FileContents,\n lang: SupportedLanguages\n): FileContents;\nexport function setLanguageOverride(\n fileOrDiff: FileDiffMetadata,\n lang: SupportedLanguages\n): FileDiffMetadata;\nexport function setLanguageOverride(\n fileOrDiff: FileContents | FileDiffMetadata,\n lang: SupportedLanguages\n): FileContents | FileDiffMetadata {\n return { ...fileOrDiff, lang };\n}\n"],"mappings":";AAcA,SAAgB,oBACd,YACA,MACiC;AACjC,QAAO;EAAE,GAAG;EAAY;EAAM"}
1
+ {"version":3,"file":"setLanguageOverride.js","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":["import type {\n FileContents,\n FileDiffMetadata,\n SupportedLanguages,\n} from '../types';\n\nexport function setLanguageOverride(\n fileOrDiff: FileContents,\n lang: SupportedLanguages\n): FileContents;\nexport function setLanguageOverride(\n fileOrDiff: FileDiffMetadata,\n lang: SupportedLanguages\n): FileDiffMetadata;\nexport function setLanguageOverride(\n fileOrDiff: FileContents | FileDiffMetadata,\n lang: SupportedLanguages\n): FileContents | FileDiffMetadata {\n return { ...fileOrDiff, lang };\n}\n"],"mappings":";AAcA,SAAgB,oBACd,YACA,MACiC;CACjC,OAAO;EAAE,GAAG;EAAY;CAAK;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"setWrapperNodeProps.d.ts","names":["PrePropertiesConfig","setPreNodeProperties","HTMLPreElement","type","diffIndicators","disableBackground","disableLineNumbers","overflow","split","totalLines","customProperties"],"sources":["../../src/utils/setWrapperNodeProps.d.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\nexport declare function setPreNodeProperties(pre: HTMLPreElement, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, totalLines, customProperties }: PrePropertiesConfig): HTMLPreElement;\n//# sourceMappingURL=setWrapperNodeProps.d.ts.map"],"mappings":";;;iBACwBC,oBAAAA,MAA0BC;;;;;;;;;GAAgIF,sBAAsBE"}
1
+ {"version":3,"file":"setWrapperNodeProps.d.ts","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"mappings":";;;iBAEgB,oBAAA,CACd,GAAA,EAAK,cAAA;EAEH,IAAA;EACA,cAAA;EACA,iBAAA;EACA,kBAAA;EACA,QAAA;EACA,KAAA;EACA,UAAA;EACA;AAAA,GACC,mBAAA,GACF,cAAA"}
@@ -31,7 +31,7 @@ function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, di
31
31
  pre.style.setProperty("--diffs-min-number-column-width-default", `${`${totalLines}`.length}ch`);
32
32
  return pre;
33
33
  }
34
-
35
34
  //#endregion
36
35
  export { setPreNodeProperties };
36
+
37
37
  //# sourceMappingURL=setWrapperNodeProps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setWrapperNodeProps.js","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\n\nexport function setPreNodeProperties(\n pre: HTMLPreElement,\n {\n type,\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n totalLines,\n customProperties,\n }: PrePropertiesConfig\n): HTMLPreElement {\n // NOTE: We always apply custom properties first so the important properties\n // cannot be overridden.\n if (customProperties != null) {\n for (const key in customProperties) {\n const value = customProperties[key];\n if (value != null) {\n pre.setAttribute(key, `${value}`);\n }\n }\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff', '');\n pre.removeAttribute('data-file');\n } else {\n pre.setAttribute('data-file', '');\n pre.removeAttribute('data-diff');\n }\n switch (diffIndicators) {\n case 'bars':\n case 'classic':\n pre.setAttribute('data-indicators', diffIndicators);\n break;\n case 'none':\n pre.removeAttribute('data-indicators');\n break;\n }\n if (disableLineNumbers) {\n pre.setAttribute('data-disable-line-numbers', '');\n } else {\n pre.removeAttribute('data-disable-line-numbers');\n }\n if (disableBackground) {\n pre.removeAttribute('data-background');\n } else {\n pre.setAttribute('data-background', '');\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff-type', split ? 'split' : 'single');\n } else {\n pre.removeAttribute('data-diff-type');\n }\n pre.setAttribute('data-overflow', overflow);\n pre.tabIndex = 0;\n // Set CSS custom property for line number column width\n pre.style.setProperty(\n '--diffs-min-number-column-width-default',\n `${`${totalLines}`.length}ch`\n );\n return pre;\n}\n"],"mappings":";AAEA,SAAgB,qBACd,KACA,EACE,MACA,gBACA,mBACA,oBACA,UACA,OACA,YACA,oBAEc;AAGhB,KAAI,oBAAoB,KACtB,MAAK,MAAM,OAAO,kBAAkB;EAClC,MAAM,QAAQ,iBAAiB;AAC/B,MAAI,SAAS,KACX,KAAI,aAAa,KAAK,GAAG,QAAQ;;AAIvC,KAAI,SAAS,QAAQ;AACnB,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;QAC3B;AACL,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;;AAElC,SAAQ,gBAAR;EACE,KAAK;EACL,KAAK;AACH,OAAI,aAAa,mBAAmB,eAAe;AACnD;EACF,KAAK;AACH,OAAI,gBAAgB,kBAAkB;AACtC;;AAEJ,KAAI,mBACF,KAAI,aAAa,6BAA6B,GAAG;KAEjD,KAAI,gBAAgB,4BAA4B;AAElD,KAAI,kBACF,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,GAAG;AAEzC,KAAI,SAAS,OACX,KAAI,aAAa,kBAAkB,QAAQ,UAAU,SAAS;KAE9D,KAAI,gBAAgB,iBAAiB;AAEvC,KAAI,aAAa,iBAAiB,SAAS;AAC3C,KAAI,WAAW;AAEf,KAAI,MAAM,YACR,2CACA,GAAG,GAAG,aAAa,OAAO,IAC3B;AACD,QAAO"}
1
+ {"version":3,"file":"setWrapperNodeProps.js","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\n\nexport function setPreNodeProperties(\n pre: HTMLPreElement,\n {\n type,\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n totalLines,\n customProperties,\n }: PrePropertiesConfig\n): HTMLPreElement {\n // NOTE: We always apply custom properties first so the important properties\n // cannot be overridden.\n if (customProperties != null) {\n for (const key in customProperties) {\n const value = customProperties[key];\n if (value != null) {\n pre.setAttribute(key, `${value}`);\n }\n }\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff', '');\n pre.removeAttribute('data-file');\n } else {\n pre.setAttribute('data-file', '');\n pre.removeAttribute('data-diff');\n }\n switch (diffIndicators) {\n case 'bars':\n case 'classic':\n pre.setAttribute('data-indicators', diffIndicators);\n break;\n case 'none':\n pre.removeAttribute('data-indicators');\n break;\n }\n if (disableLineNumbers) {\n pre.setAttribute('data-disable-line-numbers', '');\n } else {\n pre.removeAttribute('data-disable-line-numbers');\n }\n if (disableBackground) {\n pre.removeAttribute('data-background');\n } else {\n pre.setAttribute('data-background', '');\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff-type', split ? 'split' : 'single');\n } else {\n pre.removeAttribute('data-diff-type');\n }\n pre.setAttribute('data-overflow', overflow);\n pre.tabIndex = 0;\n // Set CSS custom property for line number column width\n pre.style.setProperty(\n '--diffs-min-number-column-width-default',\n `${`${totalLines}`.length}ch`\n );\n return pre;\n}\n"],"mappings":";AAEA,SAAgB,qBACd,KACA,EACE,MACA,gBACA,mBACA,oBACA,UACA,OACA,YACA,oBAEc;CAGhB,IAAI,oBAAoB,MACtB,KAAK,MAAM,OAAO,kBAAkB;EAClC,MAAM,QAAQ,iBAAiB;EAC/B,IAAI,SAAS,MACX,IAAI,aAAa,KAAK,GAAG,OAAO;CAEpC;CAEF,IAAI,SAAS,QAAQ;EACnB,IAAI,aAAa,aAAa,EAAE;EAChC,IAAI,gBAAgB,WAAW;CACjC,OAAO;EACL,IAAI,aAAa,aAAa,EAAE;EAChC,IAAI,gBAAgB,WAAW;CACjC;CACA,QAAQ,gBAAR;EACE,KAAK;EACL,KAAK;GACH,IAAI,aAAa,mBAAmB,cAAc;GAClD;EACF,KAAK;GACH,IAAI,gBAAgB,iBAAiB;GACrC;CACJ;CACA,IAAI,oBACF,IAAI,aAAa,6BAA6B,EAAE;MAEhD,IAAI,gBAAgB,2BAA2B;CAEjD,IAAI,mBACF,IAAI,gBAAgB,iBAAiB;MAErC,IAAI,aAAa,mBAAmB,EAAE;CAExC,IAAI,SAAS,QACX,IAAI,aAAa,kBAAkB,QAAQ,UAAU,QAAQ;MAE7D,IAAI,gBAAgB,gBAAgB;CAEtC,IAAI,aAAa,iBAAiB,QAAQ;CAC1C,IAAI,WAAW;CAEf,IAAI,MAAM,YACR,2CACA,GAAG,GAAG,aAAa,OAAO,GAC5B;CACA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"shouldUseTokenTransformer.d.ts","names":["InteractionManagerBaseOptions","shouldUseTokenTransformer","TMode"],"sources":["../../src/utils/shouldUseTokenTransformer.d.ts"],"sourcesContent":["import type { InteractionManagerBaseOptions } from '../managers/InteractionManager';\nexport declare function shouldUseTokenTransformer<TMode extends 'file' | 'diff'>(options: InteractionManagerBaseOptions<TMode> & {\n useTokenTransformer?: boolean;\n}): boolean;\n//# sourceMappingURL=shouldUseTokenTransformer.d.ts.map"],"mappings":";;;iBACwBC,kEAAkED,8BAA8BE;;AAAxH,CAAA,CAAA,EAAwBD,OAAAA"}
1
+ {"version":3,"file":"shouldUseTokenTransformer.d.ts","names":[],"sources":["../../src/utils/shouldUseTokenTransformer.ts"],"mappings":";;;iBAGgB,yBAAA,gCACd,OAAA,EAAS,6BAA6B,CAAC,KAAA;EACrC,mBAAA;AAAA"}
@@ -2,7 +2,7 @@
2
2
  function shouldUseTokenTransformer(options) {
3
3
  return options.useTokenTransformer === true || options.onTokenClick != null || options.onTokenEnter != null || options.onTokenLeave != null;
4
4
  }
5
-
6
5
  //#endregion
7
6
  export { shouldUseTokenTransformer };
7
+
8
8
  //# sourceMappingURL=shouldUseTokenTransformer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shouldUseTokenTransformer.js","names":[],"sources":["../../src/utils/shouldUseTokenTransformer.ts"],"sourcesContent":["import type { InteractionManagerBaseOptions } from '../managers/InteractionManager';\n\n// Token metadata is only needed when token-level interactions are enabled.\nexport function shouldUseTokenTransformer<TMode extends 'file' | 'diff'>(\n options: InteractionManagerBaseOptions<TMode> & {\n useTokenTransformer?: boolean;\n }\n): boolean {\n return (\n options.useTokenTransformer === true ||\n options.onTokenClick != null ||\n options.onTokenEnter != null ||\n options.onTokenLeave != null\n );\n}\n"],"mappings":";AAGA,SAAgB,0BACd,SAGS;AACT,QACE,QAAQ,wBAAwB,QAChC,QAAQ,gBAAgB,QACxB,QAAQ,gBAAgB,QACxB,QAAQ,gBAAgB"}
1
+ {"version":3,"file":"shouldUseTokenTransformer.js","names":[],"sources":["../../src/utils/shouldUseTokenTransformer.ts"],"sourcesContent":["import type { InteractionManagerBaseOptions } from '../managers/InteractionManager';\n\n// Token metadata is only needed when token-level interactions are enabled.\nexport function shouldUseTokenTransformer<TMode extends 'file' | 'diff'>(\n options: InteractionManagerBaseOptions<TMode> & {\n useTokenTransformer?: boolean;\n }\n): boolean {\n return (\n options.useTokenTransformer === true ||\n options.onTokenClick != null ||\n options.onTokenEnter != null ||\n options.onTokenLeave != null\n );\n}\n"],"mappings":";AAGA,SAAgB,0BACd,SAGS;CACT,OACE,QAAQ,wBAAwB,QAChC,QAAQ,gBAAgB,QACxB,QAAQ,gBAAgB,QACxB,QAAQ,gBAAgB;AAE5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"splitFileContents.d.ts","names":["splitFileContents"],"sources":["../../src/utils/splitFileContents.d.ts"],"sourcesContent":["/**\n * Splits file contents into lines using the same logic as diff parsing.\n * - Preserves trailing newlines on each line\n *\n * @param contents - The raw file contents string\n * @returns Array of lines with newlines preserved\n */\nexport declare function splitFileContents(contents: string): string[];\n//# sourceMappingURL=splitFileContents.d.ts.map"],"mappings":";;AAOA;;;;;;iBAAwBA,iBAAAA"}
1
+ {"version":3,"file":"splitFileContents.d.ts","names":[],"sources":["../../src/utils/splitFileContents.ts"],"mappings":";;AASA;;;;AAAkD;;iBAAlC,iBAAA,CAAkB,QAAgB"}
@@ -1,5 +1,4 @@
1
1
  import { SPLIT_WITH_NEWLINES } from "../constants.js";
2
-
3
2
  //#region src/utils/splitFileContents.ts
4
3
  /**
5
4
  * Splits file contents into lines using the same logic as diff parsing.
@@ -11,7 +10,7 @@ import { SPLIT_WITH_NEWLINES } from "../constants.js";
11
10
  function splitFileContents(contents) {
12
11
  return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
13
12
  }
14
-
15
13
  //#endregion
16
14
  export { splitFileContents };
15
+
17
16
  //# sourceMappingURL=splitFileContents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"splitFileContents.js","names":[],"sources":["../../src/utils/splitFileContents.ts"],"sourcesContent":["import { SPLIT_WITH_NEWLINES } from '../constants';\n\n/**\n * Splits file contents into lines using the same logic as diff parsing.\n * - Preserves trailing newlines on each line\n *\n * @param contents - The raw file contents string\n * @returns Array of lines with newlines preserved\n */\nexport function splitFileContents(contents: string): string[] {\n return contents !== '' ? contents.split(SPLIT_WITH_NEWLINES) : [];\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,kBAAkB,UAA4B;AAC5D,QAAO,aAAa,KAAK,SAAS,MAAM,oBAAoB,GAAG,EAAE"}
1
+ {"version":3,"file":"splitFileContents.js","names":[],"sources":["../../src/utils/splitFileContents.ts"],"sourcesContent":["import { SPLIT_WITH_NEWLINES } from '../constants';\n\n/**\n * Splits file contents into lines using the same logic as diff parsing.\n * - Preserves trailing newlines on each line\n *\n * @param contents - The raw file contents string\n * @returns Array of lines with newlines preserved\n */\nexport function splitFileContents(contents: string): string[] {\n return contents !== '' ? contents.split(SPLIT_WITH_NEWLINES) : [];\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,aAAa,KAAK,SAAS,MAAM,mBAAmB,IAAI,CAAC;AAClE"}
@@ -1 +1 @@
1
- {"version":3,"file":"trimPatchContext.d.ts","names":["trimPatchContext"],"sources":["../../src/utils/trimPatchContext.d.ts"],"sourcesContent":["/**\n * A utility function to trim out excess context lines from a patch file. It\n * will maintain line numbers, and properly update the hunk context markers, as\n * well as be able to create new hunks where necessary if there's excessive\n * context between changes\n */\nexport declare function trimPatchContext(patch: string, contextSize?: number): string;\n//# sourceMappingURL=trimPatchContext.d.ts.map"],"mappings":";;AAMA;;;;;iBAAwBA,gBAAAA"}
1
+ {"version":3,"file":"trimPatchContext.d.ts","names":[],"sources":["../../src/utils/trimPatchContext.ts"],"mappings":";;AAmBA;;;;AAAgE;iBAAhD,gBAAA,CAAiB,KAAA,UAAe,WAAgB"}