@pierre/diffs 1.1.0-beta.1 → 1.1.0-beta.11

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 (313) hide show
  1. package/README.md +7 -18
  2. package/dist/components/AdvancedVirtualizedFileDiff.d.ts +40 -0
  3. package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -0
  4. package/dist/components/AdvancedVirtualizedFileDiff.js +145 -0
  5. package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -0
  6. package/dist/components/AdvancedVirtualizer.d.ts +38 -0
  7. package/dist/components/AdvancedVirtualizer.d.ts.map +1 -0
  8. package/dist/components/AdvancedVirtualizer.js +201 -0
  9. package/dist/components/AdvancedVirtualizer.js.map +1 -0
  10. package/dist/components/File.d.ts +60 -29
  11. package/dist/components/File.d.ts.map +1 -1
  12. package/dist/components/File.js +226 -26
  13. package/dist/components/File.js.map +1 -1
  14. package/dist/components/FileDiff.d.ts +44 -12
  15. package/dist/components/FileDiff.d.ts.map +1 -1
  16. package/dist/components/FileDiff.js +510 -71
  17. package/dist/components/FileDiff.js.map +1 -1
  18. package/dist/components/FileStream.d.ts +5 -0
  19. package/dist/components/FileStream.d.ts.map +1 -1
  20. package/dist/components/FileStream.js +66 -8
  21. package/dist/components/FileStream.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +33 -0
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -0
  24. package/dist/components/VirtualizedFile.js +227 -0
  25. package/dist/components/VirtualizedFile.js.map +1 -0
  26. package/dist/components/VirtualizedFileDiff.d.ts +39 -0
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -0
  28. package/dist/components/VirtualizedFileDiff.js +316 -0
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -0
  30. package/dist/components/Virtualizer.d.ts +63 -0
  31. package/dist/components/Virtualizer.d.ts.map +1 -0
  32. package/dist/components/Virtualizer.js +369 -0
  33. package/dist/components/Virtualizer.js.map +1 -0
  34. package/dist/components/VirtulizerDevelopment.d.ts +14 -0
  35. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -0
  36. package/dist/components/web-components.d.ts +1 -1
  37. package/dist/components/web-components.d.ts.map +1 -1
  38. package/dist/constants.d.ts +6 -8
  39. package/dist/constants.d.ts.map +1 -1
  40. package/dist/constants.js +16 -7
  41. package/dist/constants.js.map +1 -1
  42. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  43. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  44. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  45. package/dist/highlighter/languages/constants.d.ts +3 -1
  46. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  47. package/dist/highlighter/languages/constants.js +2 -1
  48. package/dist/highlighter/languages/constants.js.map +1 -1
  49. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  50. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  51. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  52. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  53. package/dist/highlighter/languages/registerCustomLanguage.d.ts +19 -0
  54. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -0
  55. package/dist/highlighter/languages/registerCustomLanguage.js +21 -0
  56. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -0
  57. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  58. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  59. package/dist/highlighter/languages/resolveLanguage.js +4 -3
  60. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  61. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  62. package/dist/highlighter/shared_highlighter.d.ts +4 -2
  63. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  64. package/dist/highlighter/shared_highlighter.js +3 -3
  65. package/dist/highlighter/shared_highlighter.js.map +1 -1
  66. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  67. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  68. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  69. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  70. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  71. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  72. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  73. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  74. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  75. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  76. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  77. package/dist/index.d.ts +17 -12
  78. package/dist/index.js +14 -9
  79. package/dist/managers/LineSelectionManager.d.ts +14 -15
  80. package/dist/managers/LineSelectionManager.d.ts.map +1 -1
  81. package/dist/managers/LineSelectionManager.js +60 -71
  82. package/dist/managers/LineSelectionManager.js.map +1 -1
  83. package/dist/managers/MouseEventManager.d.ts +13 -6
  84. package/dist/managers/MouseEventManager.d.ts.map +1 -1
  85. package/dist/managers/MouseEventManager.js +161 -47
  86. package/dist/managers/MouseEventManager.js.map +1 -1
  87. package/dist/managers/ResizeManager.d.ts +6 -1
  88. package/dist/managers/ResizeManager.d.ts.map +1 -1
  89. package/dist/managers/ResizeManager.js +114 -64
  90. package/dist/managers/ResizeManager.js.map +1 -1
  91. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  92. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  93. package/dist/react/File.d.ts +1 -0
  94. package/dist/react/File.d.ts.map +1 -1
  95. package/dist/react/File.js +2 -1
  96. package/dist/react/File.js.map +1 -1
  97. package/dist/react/FileDiff.d.ts +1 -0
  98. package/dist/react/FileDiff.d.ts.map +1 -1
  99. package/dist/react/FileDiff.js +2 -1
  100. package/dist/react/FileDiff.js.map +1 -1
  101. package/dist/react/MultiFileDiff.d.ts +1 -0
  102. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  103. package/dist/react/MultiFileDiff.js +2 -1
  104. package/dist/react/MultiFileDiff.js.map +1 -1
  105. package/dist/react/PatchDiff.d.ts +1 -0
  106. package/dist/react/PatchDiff.d.ts.map +1 -1
  107. package/dist/react/PatchDiff.js +3 -2
  108. package/dist/react/PatchDiff.js.map +1 -1
  109. package/dist/react/Virtualizer.d.ts +25 -0
  110. package/dist/react/Virtualizer.d.ts.map +1 -0
  111. package/dist/react/Virtualizer.js +38 -0
  112. package/dist/react/Virtualizer.js.map +1 -0
  113. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  114. package/dist/react/WorkerPoolContext.js +1 -1
  115. package/dist/react/WorkerPoolContext.js.map +1 -1
  116. package/dist/react/constants.d.ts.map +1 -1
  117. package/dist/react/index.d.ts +3 -2
  118. package/dist/react/index.js +2 -1
  119. package/dist/react/jsx.d.ts.map +1 -1
  120. package/dist/react/types.d.ts +5 -3
  121. package/dist/react/types.d.ts.map +1 -1
  122. package/dist/react/utils/renderDiffChildren.d.ts +5 -5
  123. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  124. package/dist/react/utils/renderFileChildren.d.ts +5 -5
  125. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  126. package/dist/react/utils/templateRender.d.ts.map +1 -1
  127. package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
  128. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  129. package/dist/react/utils/useFileDiffInstance.js +6 -2
  130. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  131. package/dist/react/utils/useFileInstance.d.ts +5 -3
  132. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  133. package/dist/react/utils/useFileInstance.js +6 -2
  134. package/dist/react/utils/useFileInstance.js.map +1 -1
  135. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  136. package/dist/react/utils/useStableCallback.js.map +1 -1
  137. package/dist/renderers/DiffHunksRenderer.d.ts +15 -10
  138. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  139. package/dist/renderers/DiffHunksRenderer.js +249 -140
  140. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  141. package/dist/renderers/FileRenderer.d.ts +12 -5
  142. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  143. package/dist/renderers/FileRenderer.js +90 -31
  144. package/dist/renderers/FileRenderer.js.map +1 -1
  145. package/dist/shiki-stream/stream.d.ts +3 -3
  146. package/dist/shiki-stream/stream.d.ts.map +1 -1
  147. package/dist/shiki-stream/stream.js.map +1 -1
  148. package/dist/shiki-stream/tokenizer.d.ts +3 -3
  149. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  150. package/dist/shiki-stream/tokenizer.js.map +1 -1
  151. package/dist/shiki-stream/types.d.ts +19 -19
  152. package/dist/shiki-stream/types.d.ts.map +1 -1
  153. package/dist/sprite.d.ts +1 -1
  154. package/dist/sprite.d.ts.map +1 -1
  155. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  156. package/dist/ssr/FileDiffReact.js +1 -1
  157. package/dist/ssr/index.d.ts +2 -2
  158. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  159. package/dist/ssr/preloadFile.d.ts.map +1 -1
  160. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  161. package/dist/ssr/preloadPatchFile.js.map +1 -1
  162. package/dist/ssr/renderHTML.d.ts.map +1 -1
  163. package/dist/style.js +1 -1
  164. package/dist/style.js.map +1 -1
  165. package/dist/types.d.ts +200 -165
  166. package/dist/types.d.ts.map +1 -1
  167. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  168. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  169. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  170. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  171. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  172. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  173. package/dist/utils/areOptionsEqual.d.ts +1 -1
  174. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  175. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  176. package/dist/utils/arePrePropertiesEqual.js +1 -1
  177. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  178. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  179. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  180. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  181. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  182. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  183. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  184. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  185. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  186. package/dist/utils/createContentColumn.d.ts +7 -0
  187. package/dist/utils/createContentColumn.d.ts.map +1 -0
  188. package/dist/utils/createContentColumn.js +17 -0
  189. package/dist/utils/createContentColumn.js.map +1 -0
  190. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  191. package/dist/utils/createEmptyRowBuffer.js +2 -1
  192. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  193. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  194. package/dist/utils/createHoverContentNode.d.ts.map +1 -1
  195. package/dist/utils/createNoNewlineElement.d.ts +2 -1
  196. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  197. package/dist/utils/createNoNewlineElement.js +3 -6
  198. package/dist/utils/createNoNewlineElement.js.map +1 -1
  199. package/dist/utils/createPreElement.d.ts +2 -1
  200. package/dist/utils/createPreElement.d.ts.map +1 -1
  201. package/dist/utils/createPreElement.js +4 -3
  202. package/dist/utils/createPreElement.js.map +1 -1
  203. package/dist/utils/createRowNodes.d.ts.map +1 -1
  204. package/dist/utils/createSeparator.d.ts.map +1 -1
  205. package/dist/utils/createSeparator.js +2 -2
  206. package/dist/utils/createSeparator.js.map +1 -1
  207. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  208. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  209. package/dist/utils/createStyleElement.d.ts.map +1 -1
  210. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  211. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  212. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  213. package/dist/utils/cssWrappers.d.ts.map +1 -1
  214. package/dist/utils/diffAcceptRejectHunk.d.ts +1 -1
  215. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  216. package/dist/utils/formatCSSVariablePrefix.d.ts +1 -1
  217. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  218. package/dist/utils/getFiletypeFromFileName.d.ts +2 -1
  219. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  220. package/dist/utils/getFiletypeFromFileName.js +14 -4
  221. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  222. package/dist/utils/getHighlighterOptions.d.ts +7 -2
  223. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  224. package/dist/utils/getHighlighterOptions.js +3 -2
  225. package/dist/utils/getHighlighterOptions.js.map +1 -1
  226. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  227. package/dist/utils/getHunkSeparatorSlotName.d.ts +3 -1
  228. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  229. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  230. package/dist/utils/getIconForType.d.ts +1 -1
  231. package/dist/utils/getIconForType.d.ts.map +1 -1
  232. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  233. package/dist/utils/getLineEndingType.d.ts +1 -1
  234. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  235. package/dist/utils/getLineNodes.d.ts.map +1 -1
  236. package/dist/utils/getOrCreateCodeNode.d.ts +4 -2
  237. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  238. package/dist/utils/getOrCreateCodeNode.js +9 -6
  239. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  240. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  241. package/dist/utils/getThemes.d.ts.map +1 -1
  242. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  243. package/dist/utils/hast_utils.d.ts +6 -3
  244. package/dist/utils/hast_utils.d.ts.map +1 -1
  245. package/dist/utils/hast_utils.js +28 -4
  246. package/dist/utils/hast_utils.js.map +1 -1
  247. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  248. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  249. package/dist/utils/iterateOverDiff.d.ts +28 -13
  250. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  251. package/dist/utils/iterateOverDiff.js +101 -60
  252. package/dist/utils/iterateOverDiff.js.map +1 -1
  253. package/dist/utils/iterateOverFile.d.ts +50 -0
  254. package/dist/utils/iterateOverFile.d.ts.map +1 -0
  255. package/dist/utils/iterateOverFile.js +49 -0
  256. package/dist/utils/iterateOverFile.js.map +1 -0
  257. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  258. package/dist/utils/parseDiffFromFile.d.ts +6 -6
  259. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  260. package/dist/utils/parseDiffFromFile.js +3 -2
  261. package/dist/utils/parseDiffFromFile.js.map +1 -1
  262. package/dist/utils/parseLineType.d.ts +1 -1
  263. package/dist/utils/parseLineType.d.ts.map +1 -1
  264. package/dist/utils/parsePatchFiles.d.ts +12 -10
  265. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  266. package/dist/utils/parsePatchFiles.js +20 -11
  267. package/dist/utils/parsePatchFiles.js.map +1 -1
  268. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  269. package/dist/utils/processLine.d.ts.map +1 -1
  270. package/dist/utils/processLine.js +7 -24
  271. package/dist/utils/processLine.js.map +1 -1
  272. package/dist/utils/renderDiffWithHighlighter.d.ts +4 -3
  273. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  274. package/dist/utils/renderDiffWithHighlighter.js +18 -16
  275. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  276. package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
  277. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  278. package/dist/utils/renderFileWithHighlighter.js +30 -4
  279. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  280. package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
  281. package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
  282. package/dist/utils/resolveVirtualFileMetrics.js +25 -0
  283. package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
  284. package/dist/utils/setLanguageOverride.d.ts +2 -1
  285. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  286. package/dist/utils/setLanguageOverride.js.map +1 -1
  287. package/dist/utils/setWrapperNodeProps.d.ts +1 -0
  288. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  289. package/dist/utils/setWrapperNodeProps.js +19 -12
  290. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  291. package/dist/utils/splitFileContents.d.ts +12 -0
  292. package/dist/utils/splitFileContents.d.ts.map +1 -0
  293. package/dist/utils/splitFileContents.js +17 -0
  294. package/dist/utils/splitFileContents.js.map +1 -0
  295. package/dist/utils/trimPatchContext.d.ts +11 -0
  296. package/dist/utils/trimPatchContext.d.ts.map +1 -0
  297. package/dist/utils/trimPatchContext.js +99 -0
  298. package/dist/utils/trimPatchContext.js.map +1 -0
  299. package/dist/worker/WorkerPoolManager.d.ts +6 -4
  300. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  301. package/dist/worker/WorkerPoolManager.js +47 -29
  302. package/dist/worker/WorkerPoolManager.js.map +1 -1
  303. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  304. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  305. package/dist/worker/types.d.ts +29 -27
  306. package/dist/worker/types.d.ts.map +1 -1
  307. package/dist/worker/wasm-BlUZCxHM.js +10 -0
  308. package/dist/worker/wasm-BlUZCxHM.js.map +1 -0
  309. package/dist/worker/worker-portable.js +10887 -10257
  310. package/dist/worker/worker-portable.js.map +1 -1
  311. package/dist/worker/worker.js +249 -132
  312. package/dist/worker/worker.js.map +1 -1
  313. package/package.json +50 -53
@@ -1 +1 @@
1
- {"version":3,"file":"renderFileWithHighlighter.js","names":["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 RenderFileOptions,\n ThemedFileResult,\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';\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n { theme = DEFAULT_THEMES, tokenizeMaxLineLength }: RenderFileOptions,\n forcePlainText = false\n): ThemedFileResult {\n const { state, transformers } = createTransformerWithState();\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType = (() => {\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme,\n highlighter,\n });\n state.lineInfo = (shikiLineNumber: number) => ({\n type: 'context',\n lineIndex: shikiLineNumber - 1,\n lineNumber: shikiLineNumber,\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 return {\n code: getLineNodes(\n highlighter.codeToHast(cleanLastNewline(file.contents), hastConfig)\n ),\n themeStyles,\n baseThemeType: baseThemeType,\n };\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,0BACd,MACA,aACA,EAAE,QAAQ,gBAAgB,yBAC1B,iBAAiB,OACC;CAClB,MAAM,EAAE,OAAO,iBAAiB,4BAA4B;CAC5D,MAAM,OAAO,iBACT,SACC,KAAK,QAAQ,wBAAwB,KAAK,KAAK;CACpD,MAAM,uBAAuB;AAC3B,MAAI,OAAO,UAAU,SACnB,QAAO,YAAY,SAAS,MAAM,CAAC;KAGnC;CACJ,MAAM,cAAc,0BAA0B;EAC5C;EACA;EACD,CAAC;AACF,OAAM,YAAY,qBAA6B;EAC7C,MAAM;EACN,WAAW,kBAAkB;EAC7B,YAAY;EACb;CACD,MAAMA,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;AACJ,QAAO;EACL,MAAM,aACJ,YAAY,WAAW,iBAAiB,KAAK,SAAS,EAAE,WAAW,CACpE;EACD;EACe;EAChB"}
1
+ {"version":3,"file":"renderFileWithHighlighter.js","names":["DEFAULT_PLAIN_TEXT_OPTIONS: ForceFilePlainTextOptions","hastConfig: CodeToHastOptions<DiffsThemeNames>","windowContent: string"],"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 { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\nimport { iterateOverFile } from './iterateOverFile';\nimport { splitFileContents } from './splitFileContents';\n\nconst DEFAULT_PLAIN_TEXT_OPTIONS: ForceFilePlainTextOptions = {\n forcePlainText: false,\n};\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n { theme = DEFAULT_THEMES, tokenizeMaxLineLength }: 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 } = createTransformerWithState();\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType = (() => {\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\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 ?? splitFileContents(file.contents),\n startingLine,\n totalLines\n )\n : cleanLastNewline(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 let windowContent: string = '';\n iterateOverFile({\n lines,\n startingLine,\n totalLines,\n callback({ content }) {\n windowContent += content;\n },\n });\n return windowContent;\n}\n"],"mappings":";;;;;;;;;;;AAmBA,MAAMA,6BAAwD,EAC5D,gBAAgB,OACjB;AAED,SAAgB,0BACd,MACA,aACA,EAAE,QAAQ,gBAAgB,yBAC1B,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,iBAAiB,4BAA4B;CAC5D,MAAM,OAAO,iBACT,SACC,KAAK,QAAQ,wBAAwB,KAAK,KAAK;CACpD,MAAM,uBAAuB;AAC3B,MAAI,OAAO,UAAU,SACnB,QAAO,YAAY,SAAS,MAAM,CAAC;KAGnC;CACJ,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,kBAAkB,KAAK,SAAS,EACzC,cACA,WACD,GACD,iBAAiB,KAAK,SAAS,EACnC,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;CACR,IAAIC,gBAAwB;AAC5B,iBAAgB;EACd;EACA;EACA;EACA,SAAS,EAAE,WAAW;AACpB,oBAAiB;;EAEpB,CAAC;AACF,QAAO"}
@@ -0,0 +1,7 @@
1
+ import { HunkSeparators, VirtualFileMetrics } from "../types.js";
2
+
3
+ //#region src/utils/resolveVirtualFileMetrics.d.ts
4
+ declare function resolveVirtualFileMetrics(hunkSeparators: HunkSeparators, metricsOverride?: Partial<VirtualFileMetrics>): VirtualFileMetrics;
5
+ //#endregion
6
+ export { resolveVirtualFileMetrics };
7
+ //# sourceMappingURL=resolveVirtualFileMetrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveVirtualFileMetrics.d.ts","names":["HunkSeparators","VirtualFileMetrics","resolveVirtualFileMetrics","Partial"],"sources":["../../src/utils/resolveVirtualFileMetrics.d.ts"],"sourcesContent":["import type { HunkSeparators, VirtualFileMetrics } from '../types';\nexport declare function resolveVirtualFileMetrics(hunkSeparators: HunkSeparators, metricsOverride?: Partial<VirtualFileMetrics>): VirtualFileMetrics;\n//# sourceMappingURL=resolveVirtualFileMetrics.d.ts.map"],"mappings":";;;iBACwBE,yBAAAA,iBAA0CF,kCAAkCG,QAAQF,sBAAsBA"}
@@ -0,0 +1,25 @@
1
+ import { DEFAULT_VIRTUAL_FILE_METRICS } from "../constants.js";
2
+
3
+ //#region src/utils/resolveVirtualFileMetrics.ts
4
+ function resolveVirtualFileMetrics(hunkSeparators, metricsOverride) {
5
+ const metrics = {
6
+ ...DEFAULT_VIRTUAL_FILE_METRICS,
7
+ ...metricsOverride
8
+ };
9
+ metrics.hunkSeparatorHeight = getHunkSeparatorHeight(hunkSeparators, metricsOverride?.hunkSeparatorHeight);
10
+ return metrics;
11
+ }
12
+ function getHunkSeparatorHeight(type, customHeight) {
13
+ if (customHeight != null) return customHeight;
14
+ switch (type) {
15
+ case "simple": return 4;
16
+ case "metadata":
17
+ case "line-info":
18
+ case "line-info-basic":
19
+ case "custom": return 32;
20
+ }
21
+ }
22
+
23
+ //#endregion
24
+ export { resolveVirtualFileMetrics };
25
+ //# sourceMappingURL=resolveVirtualFileMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveVirtualFileMetrics.js","names":["metrics: VirtualFileMetrics"],"sources":["../../src/utils/resolveVirtualFileMetrics.ts"],"sourcesContent":["import { DEFAULT_VIRTUAL_FILE_METRICS } from '../constants';\nimport type { HunkSeparators, VirtualFileMetrics } from '../types';\n\nexport function resolveVirtualFileMetrics(\n hunkSeparators: HunkSeparators,\n metricsOverride?: Partial<VirtualFileMetrics>\n): VirtualFileMetrics {\n const metrics: VirtualFileMetrics = {\n ...DEFAULT_VIRTUAL_FILE_METRICS,\n ...metricsOverride,\n };\n metrics.hunkSeparatorHeight = getHunkSeparatorHeight(\n hunkSeparators,\n metricsOverride?.hunkSeparatorHeight\n );\n return metrics;\n}\n\nfunction getHunkSeparatorHeight(\n type: HunkSeparators,\n customHeight: number | undefined\n): number {\n if (customHeight != null) {\n return customHeight;\n }\n switch (type) {\n case 'simple':\n return 4;\n case 'metadata':\n case 'line-info':\n case 'line-info-basic':\n case 'custom':\n return 32;\n }\n}\n"],"mappings":";;;AAGA,SAAgB,0BACd,gBACA,iBACoB;CACpB,MAAMA,UAA8B;EAClC,GAAG;EACH,GAAG;EACJ;AACD,SAAQ,sBAAsB,uBAC5B,gBACA,iBAAiB,oBAClB;AACD,QAAO;;AAGT,SAAS,uBACP,MACA,cACQ;AACR,KAAI,gBAAgB,KAClB,QAAO;AAET,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,SACH,QAAO"}
@@ -1,7 +1,8 @@
1
1
  import { FileContents, FileDiffMetadata, SupportedLanguages } from "../types.js";
2
2
 
3
3
  //#region src/utils/setLanguageOverride.d.ts
4
- declare function setLanguageOverride<T extends FileContents | FileDiffMetadata>(fileOrDiff: T, lang: SupportedLanguages): T;
4
+ declare function setLanguageOverride(fileOrDiff: FileContents, lang: SupportedLanguages): FileContents;
5
+ declare function setLanguageOverride(fileOrDiff: FileDiffMetadata, lang: SupportedLanguages): FileDiffMetadata;
5
6
  //#endregion
6
7
  export { setLanguageOverride };
7
8
  //# sourceMappingURL=setLanguageOverride.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setLanguageOverride.d.ts","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":[],"mappings":";;;iBAMgB,8BAA8B,eAAe,8BAC/C,SACN,qBACL"}
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 +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<T extends FileContents | FileDiffMetadata>(\n fileOrDiff: T,\n lang: SupportedLanguages\n): T {\n return { ...fileOrDiff, lang };\n}\n"],"mappings":";AAMA,SAAgB,oBACd,YACA,MACG;AACH,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;AACjC,QAAO;EAAE,GAAG;EAAY;EAAM"}
@@ -2,6 +2,7 @@ import { PrePropertiesConfig } from "../types.js";
2
2
 
3
3
  //#region src/utils/setWrapperNodeProps.d.ts
4
4
  declare function setPreNodeProperties(pre: HTMLPreElement, {
5
+ type,
5
6
  diffIndicators,
6
7
  disableBackground,
7
8
  disableLineNumbers,
@@ -1 +1 @@
1
- {"version":3,"file":"setWrapperNodeProps.d.ts","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":[],"mappings":";;;iBAEgB,oBAAA,MACT;;;;;;;;;GAUF,sBACF"}
1
+ {"version":3,"file":"setWrapperNodeProps.d.ts","names":["PrePropertiesConfig","setPreNodeProperties","HTMLPreElement","type","diffIndicators","disableBackground","disableLineNumbers","overflow","split","themeStyles","themeType","totalLines"],"sources":["../../src/utils/setWrapperNodeProps.d.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\nexport declare function setPreNodeProperties(pre: HTMLPreElement, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }: PrePropertiesConfig): HTMLPreElement;\n//# sourceMappingURL=setWrapperNodeProps.d.ts.map"],"mappings":";;;iBACwBC,oBAAAA,MAA0BC;;;;;;;;;;GAAsIF,sBAAsBE"}
@@ -1,23 +1,30 @@
1
1
  //#region src/utils/setWrapperNodeProps.ts
2
- function setPreNodeProperties(pre, { diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }) {
3
- if (themeType === "system") delete pre.dataset.themeType;
4
- else pre.dataset.themeType = themeType;
2
+ function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }) {
3
+ if (type === "diff") {
4
+ pre.setAttribute("data-diff", "");
5
+ pre.removeAttribute("data-file");
6
+ } else {
7
+ pre.setAttribute("data-file", "");
8
+ pre.removeAttribute("data-diff");
9
+ }
10
+ if (themeType === "system") pre.removeAttribute("data-theme-type");
11
+ else pre.setAttribute("data-theme-type", themeType);
5
12
  switch (diffIndicators) {
6
13
  case "bars":
7
14
  case "classic":
8
- pre.dataset.indicators = diffIndicators;
15
+ pre.setAttribute("data-indicators", diffIndicators);
9
16
  break;
10
17
  case "none":
11
- delete pre.dataset.indicators;
18
+ pre.removeAttribute("data-indicators");
12
19
  break;
13
20
  }
14
- if (disableLineNumbers) pre.dataset.disableLineNumbers = "";
15
- else delete pre.dataset.disableLineNumbers;
16
- if (disableBackground) delete pre.dataset.background;
17
- else pre.dataset.background = "";
18
- pre.dataset.type = split ? "split" : "file";
19
- pre.dataset.overflow = overflow;
20
- pre.dataset.diffs = "";
21
+ if (disableLineNumbers) pre.setAttribute("data-disable-line-numbers", "");
22
+ else pre.removeAttribute("data-disable-line-numbers");
23
+ if (disableBackground) pre.removeAttribute("data-background");
24
+ else pre.setAttribute("data-background", "");
25
+ if (type === "diff") pre.setAttribute("data-diff-type", split ? "split" : "single");
26
+ else pre.removeAttribute("data-diff-type");
27
+ pre.setAttribute("data-overflow", overflow);
21
28
  pre.tabIndex = 0;
22
29
  pre.style = themeStyles;
23
30
  pre.style.setProperty("--diffs-min-number-column-width-default", `${`${totalLines}`.length}ch`);
@@ -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 diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n themeStyles,\n themeType,\n totalLines,\n }: PrePropertiesConfig\n): HTMLPreElement {\n if (themeType === 'system') {\n delete pre.dataset.themeType;\n } else {\n pre.dataset.themeType = themeType;\n }\n switch (diffIndicators) {\n case 'bars':\n case 'classic':\n pre.dataset.indicators = diffIndicators;\n break;\n case 'none':\n delete pre.dataset.indicators;\n break;\n }\n if (disableLineNumbers) {\n pre.dataset.disableLineNumbers = '';\n } else {\n delete pre.dataset.disableLineNumbers;\n }\n if (disableBackground) {\n delete pre.dataset.background;\n } else {\n pre.dataset.background = '';\n }\n pre.dataset.type = split ? 'split' : 'file';\n pre.dataset.overflow = overflow;\n pre.dataset.diffs = '';\n pre.tabIndex = 0;\n // Set theme color custom properties as inline styles on pre element\n pre.style = themeStyles;\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,gBACA,mBACA,oBACA,UACA,OACA,aACA,WACA,cAEc;AAChB,KAAI,cAAc,SAChB,QAAO,IAAI,QAAQ;KAEnB,KAAI,QAAQ,YAAY;AAE1B,SAAQ,gBAAR;EACE,KAAK;EACL,KAAK;AACH,OAAI,QAAQ,aAAa;AACzB;EACF,KAAK;AACH,UAAO,IAAI,QAAQ;AACnB;;AAEJ,KAAI,mBACF,KAAI,QAAQ,qBAAqB;KAEjC,QAAO,IAAI,QAAQ;AAErB,KAAI,kBACF,QAAO,IAAI,QAAQ;KAEnB,KAAI,QAAQ,aAAa;AAE3B,KAAI,QAAQ,OAAO,QAAQ,UAAU;AACrC,KAAI,QAAQ,WAAW;AACvB,KAAI,QAAQ,QAAQ;AACpB,KAAI,WAAW;AAEf,KAAI,QAAQ;AAEZ,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 themeStyles,\n themeType,\n totalLines,\n }: PrePropertiesConfig\n): HTMLPreElement {\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 if (themeType === 'system') {\n pre.removeAttribute('data-theme-type');\n } else {\n pre.setAttribute('data-theme-type', themeType);\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 theme color custom properties as inline styles on pre element\n pre.style = themeStyles;\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,aACA,WACA,cAEc;AAChB,KAAI,SAAS,QAAQ;AACnB,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;QAC3B;AACL,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;;AAElC,KAAI,cAAc,SAChB,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,UAAU;AAEhD,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,QAAQ;AAEZ,KAAI,MAAM,YACR,2CACA,GAAG,GAAG,aAAa,OAAO,IAC3B;AACD,QAAO"}
@@ -0,0 +1,12 @@
1
+ //#region src/utils/splitFileContents.d.ts
2
+ /**
3
+ * Splits file contents into lines using the same logic as diff parsing.
4
+ * - Preserves trailing newlines on each line
5
+ *
6
+ * @param contents - The raw file contents string
7
+ * @returns Array of lines with newlines preserved
8
+ */
9
+ declare function splitFileContents(contents: string): string[];
10
+ //#endregion
11
+ export { splitFileContents };
12
+ //# sourceMappingURL=splitFileContents.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,17 @@
1
+ import { SPLIT_WITH_NEWLINES } from "../constants.js";
2
+
3
+ //#region src/utils/splitFileContents.ts
4
+ /**
5
+ * Splits file contents into lines using the same logic as diff parsing.
6
+ * - Preserves trailing newlines on each line
7
+ *
8
+ * @param contents - The raw file contents string
9
+ * @returns Array of lines with newlines preserved
10
+ */
11
+ function splitFileContents(contents) {
12
+ return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
13
+ }
14
+
15
+ //#endregion
16
+ export { splitFileContents };
17
+ //# sourceMappingURL=splitFileContents.js.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ //#region src/utils/trimPatchContext.d.ts
2
+ /**
3
+ * A utility function to trim out excess context lines from a patch file. It
4
+ * will maintain line numbers, and properly update the hunk context markers, as
5
+ * well as be able to create new hunks where necessary if there's excessive
6
+ * context between changes
7
+ */
8
+ declare function trimPatchContext(patch: string, contextSize?: number): string;
9
+ //#endregion
10
+ export { trimPatchContext };
11
+ //# sourceMappingURL=trimPatchContext.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,99 @@
1
+ import { HUNK_HEADER } from "../constants.js";
2
+
3
+ //#region src/utils/trimPatchContext.ts
4
+ /**
5
+ * A utility function to trim out excess context lines from a patch file. It
6
+ * will maintain line numbers, and properly update the hunk context markers, as
7
+ * well as be able to create new hunks where necessary if there's excessive
8
+ * context between changes
9
+ */
10
+ function trimPatchContext(patch, contextSize = 10) {
11
+ const lines = [];
12
+ let currentHunk;
13
+ for (const line of patch.split("\n")) {
14
+ const parsedHunkHeader = line.match(HUNK_HEADER);
15
+ if (parsedHunkHeader != null) {
16
+ if (currentHunk != null) {
17
+ if (currentHunk.hunkLines.length > 0) {
18
+ flushContextLines(currentHunk, contextSize);
19
+ flushHunk(currentHunk, lines);
20
+ }
21
+ currentHunk = void 0;
22
+ }
23
+ const additionStart = parseInt(parsedHunkHeader[3]);
24
+ const deletionStart = parseInt(parsedHunkHeader[1]);
25
+ const additionCount = parseInt(parsedHunkHeader[4] ?? "1");
26
+ const deletionCount = parseInt(parsedHunkHeader[2] ?? "1");
27
+ if (isNaN(additionStart) || isNaN(deletionStart) || isNaN(additionCount) || isNaN(deletionCount)) lines.push(line);
28
+ else currentHunk = {
29
+ hunkContextString: parsedHunkHeader[5] ?? "",
30
+ additionStart,
31
+ deletionStart,
32
+ additionCount: 0,
33
+ deletionCount: 0,
34
+ hunkLines: [],
35
+ contextLines: []
36
+ };
37
+ continue;
38
+ }
39
+ if (currentHunk == null) {
40
+ lines.push(line);
41
+ continue;
42
+ }
43
+ if (line.startsWith(" ")) {
44
+ currentHunk.contextLines.push(line);
45
+ if (currentHunk.hunkLines.length > 0 && currentHunk.contextLines.length === contextSize * 2 + 1) {
46
+ const removedItems = currentHunk.contextLines.slice(contextSize);
47
+ flushContextLines(currentHunk, contextSize);
48
+ const { additionCount: emittedAdditionCount, deletionCount: emittedDeletionCount } = currentHunk;
49
+ flushHunk(currentHunk, lines);
50
+ removedItems.shift();
51
+ currentHunk = {
52
+ hunkContextString: "",
53
+ additionStart: currentHunk.additionStart + emittedAdditionCount + 1,
54
+ deletionStart: currentHunk.deletionStart + emittedDeletionCount + 1,
55
+ deletionCount: 0,
56
+ additionCount: 0,
57
+ contextLines: removedItems,
58
+ hunkLines: []
59
+ };
60
+ }
61
+ } else if (line !== "") {
62
+ flushContextLines(currentHunk, contextSize);
63
+ currentHunk.hunkLines.push(line);
64
+ if (line.startsWith("+")) currentHunk.additionCount += 1;
65
+ else if (line.startsWith("-")) currentHunk.deletionCount += 1;
66
+ }
67
+ }
68
+ if (currentHunk != null && currentHunk.hunkLines.length > 0) {
69
+ flushContextLines(currentHunk, contextSize);
70
+ flushHunk(currentHunk, lines);
71
+ }
72
+ return lines.join("\n");
73
+ }
74
+ function flushContextLines(hunk, contextSize) {
75
+ if (hunk.contextLines.length > contextSize) if (hunk.hunkLines.length === 0) {
76
+ const difference = hunk.contextLines.length - contextSize;
77
+ hunk.contextLines.splice(0, difference);
78
+ hunk.additionStart += difference;
79
+ hunk.deletionStart += difference;
80
+ } else hunk.contextLines.length = contextSize;
81
+ if (hunk.contextLines.length > 0) {
82
+ hunk.hunkLines.push(...hunk.contextLines);
83
+ hunk.additionCount += hunk.contextLines.length;
84
+ hunk.deletionCount += hunk.contextLines.length;
85
+ hunk.contextLines.length = 0;
86
+ }
87
+ return hunk;
88
+ }
89
+ function flushHunk(hunk, lines) {
90
+ lines.push(`@@ -${formatHunkRange(hunk.deletionStart, hunk.deletionCount)} +${formatHunkRange(hunk.additionStart, hunk.additionCount)} @@${hunk.hunkContextString !== "" ? ` ${hunk.hunkContextString}` : ""}`);
91
+ lines.push(...hunk.hunkLines);
92
+ }
93
+ function formatHunkRange(start, count) {
94
+ return count === 1 ? `${start}` : `${start},${count}`;
95
+ }
96
+
97
+ //#endregion
98
+ export { trimPatchContext };
99
+ //# sourceMappingURL=trimPatchContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trimPatchContext.js","names":["lines: string[]","currentHunk: CurrentHunk | undefined"],"sources":["../../src/utils/trimPatchContext.ts"],"sourcesContent":["import { HUNK_HEADER } from '../constants';\n\ninterface CurrentHunk {\n hunkContextString: string;\n additionStart: number;\n deletionStart: number;\n additionCount: number;\n deletionCount: number;\n hunkLines: string[];\n contextLines: string[];\n}\n\n/**\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 function trimPatchContext(patch: string, contextSize = 10): string {\n const lines: string[] = [];\n\n let currentHunk: CurrentHunk | undefined;\n for (const line of patch.split('\\n')) {\n const parsedHunkHeader = line.match(HUNK_HEADER);\n // If we've come across a new hunk boundary, then we should close out the\n // current hunk and setup a new one\n if (parsedHunkHeader != null) {\n if (currentHunk != null) {\n if (currentHunk.hunkLines.length > 0) {\n flushContextLines(currentHunk, contextSize);\n flushHunk(currentHunk, lines);\n }\n currentHunk = undefined;\n }\n\n const additionStart = parseInt(parsedHunkHeader[3]);\n const deletionStart = parseInt(parsedHunkHeader[1]);\n const additionCount = parseInt(parsedHunkHeader[4] ?? '1');\n const deletionCount = parseInt(parsedHunkHeader[2] ?? '1');\n\n // If we can't parse valid numbers out of the hunk header\n // lets just skip the hunk altogether\n if (\n isNaN(additionStart) ||\n isNaN(deletionStart) ||\n isNaN(additionCount) ||\n isNaN(deletionCount)\n ) {\n lines.push(line);\n } else {\n currentHunk = {\n hunkContextString: parsedHunkHeader[5] ?? '',\n additionStart,\n deletionStart,\n additionCount: 0,\n deletionCount: 0,\n hunkLines: [],\n contextLines: [],\n };\n }\n continue;\n }\n\n // If we don't have a current hunk, then we should just assume this is\n // general metadata\n if (currentHunk == null) {\n lines.push(line);\n continue;\n }\n\n // If we are dealing with a context line...\n if (line.startsWith(' ')) {\n currentHunk.contextLines.push(line);\n // If we've exceeded double our context window size + 1, that means we\n // should create a new hunk...\n if (\n currentHunk.hunkLines.length > 0 &&\n currentHunk.contextLines.length === contextSize * 2 + 1\n ) {\n const removedItems = currentHunk.contextLines.slice(contextSize);\n flushContextLines(currentHunk, contextSize);\n const {\n additionCount: emittedAdditionCount,\n deletionCount: emittedDeletionCount,\n } = currentHunk;\n flushHunk(currentHunk, lines);\n\n removedItems.shift();\n currentHunk = {\n // NOTE(amadeus): Not sure there's an easy way to manage this context\n // string stuff, so lets just remove it from auto generated hunks\n hunkContextString: '',\n additionStart: currentHunk.additionStart + emittedAdditionCount + 1,\n deletionStart: currentHunk.deletionStart + emittedDeletionCount + 1,\n deletionCount: 0,\n additionCount: 0,\n contextLines: removedItems,\n hunkLines: [],\n };\n }\n } else if (line !== '') {\n flushContextLines(currentHunk, contextSize);\n currentHunk.hunkLines.push(line);\n if (line.startsWith('+')) {\n currentHunk.additionCount += 1;\n } else if (line.startsWith('-')) {\n currentHunk.deletionCount += 1;\n }\n }\n }\n\n if (currentHunk != null && currentHunk.hunkLines.length > 0) {\n flushContextLines(currentHunk, contextSize);\n flushHunk(currentHunk, lines);\n }\n\n return lines.join('\\n');\n}\n\nfunction flushContextLines(hunk: CurrentHunk, contextSize: number) {\n if (hunk.contextLines.length > contextSize) {\n // If this context group is at the beginning of the hunk, truncate from the\n // beginning\n if (hunk.hunkLines.length === 0) {\n const difference = hunk.contextLines.length - contextSize;\n hunk.contextLines.splice(0, difference);\n hunk.additionStart += difference;\n hunk.deletionStart += difference;\n }\n // Otherwise truncate from the end\n else {\n hunk.contextLines.length = contextSize;\n }\n }\n if (hunk.contextLines.length > 0) {\n hunk.hunkLines.push(...hunk.contextLines);\n hunk.additionCount += hunk.contextLines.length;\n hunk.deletionCount += hunk.contextLines.length;\n hunk.contextLines.length = 0;\n }\n return hunk;\n}\n\nfunction flushHunk(hunk: CurrentHunk, lines: string[]) {\n lines.push(\n `@@ -${formatHunkRange(hunk.deletionStart, hunk.deletionCount)} +${formatHunkRange(hunk.additionStart, hunk.additionCount)} @@${hunk.hunkContextString !== '' ? ` ${hunk.hunkContextString}` : ''}`\n );\n lines.push(...hunk.hunkLines);\n}\n\nfunction formatHunkRange(start: number, count: number): string {\n return count === 1 ? `${start}` : `${start},${count}`;\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgB,iBAAiB,OAAe,cAAc,IAAY;CACxE,MAAMA,QAAkB,EAAE;CAE1B,IAAIC;AACJ,MAAK,MAAM,QAAQ,MAAM,MAAM,KAAK,EAAE;EACpC,MAAM,mBAAmB,KAAK,MAAM,YAAY;AAGhD,MAAI,oBAAoB,MAAM;AAC5B,OAAI,eAAe,MAAM;AACvB,QAAI,YAAY,UAAU,SAAS,GAAG;AACpC,uBAAkB,aAAa,YAAY;AAC3C,eAAU,aAAa,MAAM;;AAE/B,kBAAc;;GAGhB,MAAM,gBAAgB,SAAS,iBAAiB,GAAG;GACnD,MAAM,gBAAgB,SAAS,iBAAiB,GAAG;GACnD,MAAM,gBAAgB,SAAS,iBAAiB,MAAM,IAAI;GAC1D,MAAM,gBAAgB,SAAS,iBAAiB,MAAM,IAAI;AAI1D,OACE,MAAM,cAAc,IACpB,MAAM,cAAc,IACpB,MAAM,cAAc,IACpB,MAAM,cAAc,CAEpB,OAAM,KAAK,KAAK;OAEhB,eAAc;IACZ,mBAAmB,iBAAiB,MAAM;IAC1C;IACA;IACA,eAAe;IACf,eAAe;IACf,WAAW,EAAE;IACb,cAAc,EAAE;IACjB;AAEH;;AAKF,MAAI,eAAe,MAAM;AACvB,SAAM,KAAK,KAAK;AAChB;;AAIF,MAAI,KAAK,WAAW,IAAI,EAAE;AACxB,eAAY,aAAa,KAAK,KAAK;AAGnC,OACE,YAAY,UAAU,SAAS,KAC/B,YAAY,aAAa,WAAW,cAAc,IAAI,GACtD;IACA,MAAM,eAAe,YAAY,aAAa,MAAM,YAAY;AAChE,sBAAkB,aAAa,YAAY;IAC3C,MAAM,EACJ,eAAe,sBACf,eAAe,yBACb;AACJ,cAAU,aAAa,MAAM;AAE7B,iBAAa,OAAO;AACpB,kBAAc;KAGZ,mBAAmB;KACnB,eAAe,YAAY,gBAAgB,uBAAuB;KAClE,eAAe,YAAY,gBAAgB,uBAAuB;KAClE,eAAe;KACf,eAAe;KACf,cAAc;KACd,WAAW,EAAE;KACd;;aAEM,SAAS,IAAI;AACtB,qBAAkB,aAAa,YAAY;AAC3C,eAAY,UAAU,KAAK,KAAK;AAChC,OAAI,KAAK,WAAW,IAAI,CACtB,aAAY,iBAAiB;YACpB,KAAK,WAAW,IAAI,CAC7B,aAAY,iBAAiB;;;AAKnC,KAAI,eAAe,QAAQ,YAAY,UAAU,SAAS,GAAG;AAC3D,oBAAkB,aAAa,YAAY;AAC3C,YAAU,aAAa,MAAM;;AAG/B,QAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,kBAAkB,MAAmB,aAAqB;AACjE,KAAI,KAAK,aAAa,SAAS,YAG7B,KAAI,KAAK,UAAU,WAAW,GAAG;EAC/B,MAAM,aAAa,KAAK,aAAa,SAAS;AAC9C,OAAK,aAAa,OAAO,GAAG,WAAW;AACvC,OAAK,iBAAiB;AACtB,OAAK,iBAAiB;OAItB,MAAK,aAAa,SAAS;AAG/B,KAAI,KAAK,aAAa,SAAS,GAAG;AAChC,OAAK,UAAU,KAAK,GAAG,KAAK,aAAa;AACzC,OAAK,iBAAiB,KAAK,aAAa;AACxC,OAAK,iBAAiB,KAAK,aAAa;AACxC,OAAK,aAAa,SAAS;;AAE7B,QAAO;;AAGT,SAAS,UAAU,MAAmB,OAAiB;AACrD,OAAM,KACJ,OAAO,gBAAgB,KAAK,eAAe,KAAK,cAAc,CAAC,IAAI,gBAAgB,KAAK,eAAe,KAAK,cAAc,CAAC,KAAK,KAAK,sBAAsB,KAAK,IAAI,KAAK,sBAAsB,KAChM;AACD,OAAM,KAAK,GAAG,KAAK,UAAU;;AAG/B,SAAS,gBAAgB,OAAe,OAAuB;AAC7D,QAAO,UAAU,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG"}
@@ -13,6 +13,7 @@ interface ThemeSubscriber {
13
13
  declare class WorkerPoolManager {
14
14
  private options;
15
15
  private highlighter;
16
+ private readonly preferredHighlighter;
16
17
  private renderOptions;
17
18
  private initialized;
18
19
  private workers;
@@ -30,7 +31,8 @@ declare class WorkerPoolManager {
30
31
  langs,
31
32
  theme,
32
33
  lineDiffType,
33
- tokenizeMaxLineLength
34
+ tokenizeMaxLineLength,
35
+ preferredHighlighter
34
36
  }: WorkerInitializationRenderOptions);
35
37
  isWorkingPool(): boolean;
36
38
  getFileResultCache(file: FileContents): RenderFileResult | undefined;
@@ -57,19 +59,19 @@ declare class WorkerPoolManager {
57
59
  private initializeWorkers;
58
60
  private drainQueue;
59
61
  highlightFileAST(instance: FileRendererInstance, file: FileContents): void;
60
- getPlainFileAST(file: FileContents): ThemedFileResult | undefined;
62
+ getPlainFileAST(file: FileContents, startingLine: number, totalLines: number, lines?: string[]): ThemedFileResult | undefined;
61
63
  highlightDiffAST(instance: DiffRendererInstance, diff: FileDiffMetadata): void;
62
- getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true): ThemedDiffResult | undefined;
64
+ getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true, collapsedContextThreshold?: number): ThemedDiffResult | undefined;
63
65
  terminate(): void;
64
66
  private terminateWorkers;
65
67
  getStats(): WorkerStats;
66
68
  private submitTask;
67
- private submitTask;
68
69
  private resolveLanguagesAndExecuteTask;
69
70
  private handleWorkerMessage;
70
71
  private _queuedDrain;
71
72
  private queueDrain;
72
73
  private assignWorkerToTask;
74
+ private clearWorkerTask;
73
75
  private executeTask;
74
76
  private getAvailableWorker;
75
77
  private generateRequestId;
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerPoolManager.d.ts","names":["options: WorkerPoolOptions"],"sources":["../../src/worker/WorkerPoolManager.ts"],"sourcesContent":[],"mappings":";;;;;UAqDU,eAAA;aACG,SAAA,CAAU,eAAe;EAL/B,SAIG,EAEG,SAAA,CAAU,MAFb,CAAA,MAAA,EAE4B,gBAF5B,CAAA;;UAYA,eAAA,CAXa;EACe,QAAA,EAAA,EAAA,IAAA;;AAAf,cAcV,iBAAA,CAdU;EAAA,QAUb,OAAA;EAIV,QAAa,WAAA;EAoBQ,QAAA,aAAA;EAEf,QAAA,WAAA;EACA,QAAA,OAAA;EACA,QAAA,SAAA;EACA,QAAA,YAAA;EACC,QAAA,aAAA;EAYoB,QAAA,gBAAA;EAAe,QAAA,aAAA;EAMf,QAAA,kBAAA;EAAmB,QAAA,eAAA;EAM3B,QAAA,SAAA;EAsBf,QAAA,SAAA;EACA,QAAA,gBAAA;EACA,WAAA,CAAA,OAAA,EAtDiB,iBAsDjB,EAAA;IAAA,KAAA;IAAA,KAAA;IAAA,YAAA;IAAA;EAAA,CAAA,EAhDG,iCAgDH;EACS,aAAA,CAAA,CAAA,EAAA,OAAA;EAAR,kBAAA,CAAA,IAAA,EArCsB,YAqCtB,CAAA,EArCqC,gBAqCrC,GAAA,SAAA;EAAkC,kBAAA,CAAA,IAAA,EA/BZ,gBA+BY,CAAA,EA/BO,gBA+BP,GAAA,SAAA;EAoDb,aAAA,CAAA,CAAA,EA7EP,eA6EO;EAKA,kBAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAiDU,kBAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EASE,gBAAA,CAAA;IAAA,KAAA;IAAA,YAAA;IAAA;EAAA,CAAA,EAnHjC,OAmHiC,CAnHzB,sBAmHyB,CAAA,CAAA,EAnHC,OAmHD,CAAA,IAAA,CAAA;EAMhB,oBAAA,CAAA,CAAA,EArEI,iBAqEJ;EA0BR,oBAAA,CAAA,CAAA,EA1FY,iBA0FZ;EAAuB,QAAA,yBAAA;EAoBP,uBAAA,CAAA,QAAA,EA7DM,eA6DN,CAAA,EAAA,GAAA,GAAA,IAAA;EAA4B,yBAAA,CAAA,QAAA,EApDpB,eAoDoB,CAAA,EAAA,IAAA;EAoI7B,sBAAA,CAAA,QAAA,EAAA,CAAA,KAAA,EAlLP,WAkLO,EAAA,GAAA,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAA4B,QAAA,0BAAA;EAoBjC,QAAA,sBAAA;EAAe,mBAAA,CAAA,QAAA,EA5KzB,oBA4KyB,GA5KF,oBA4KE,CAAA,EAAA,IAAA;EAczB,aAAA,CAAA,CAAA,EAAA,OAAA;EACJ,UAAA,CAAA,SAAA,CAAA,EAvKoB,kBAuKpB,EAAA,CAAA,EAvKgD,OAuKhD,CAAA,IAAA,CAAA;EAsBA,QAAA,iBAAA;EAGsB,QAAA,UAAA;EAAZ,gBAAA,CAAA,QAAA,EA5DS,oBA4DT,EAAA,IAAA,EA5DqC,YA4DrC,CAAA,EAAA,IAAA;EACf,eAAA,CAAA,IAAA,EAzCmB,YAyCnB,CAAA,EAzCkC,gBAyClC,GAAA,SAAA;EA+BS,gBAAA,CAAA,QAAA,EA1DA,oBA0DA,EAAA,IAAA,EAzDJ,gBAyDI,CAAA,EAAA,IAAA;EAAA,eAAA,CAAA,IAAA,EAnCJ,gBAmCI,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAhCM,GAgCN,CAAA,MAAA,EAhCkB,mBAgClB,CAAA,GAAA,IAAA,CAAA,EA/BT,gBA+BS,GAAA,SAAA;;;cAAA"}
1
+ {"version":3,"file":"WorkerPoolManager.d.ts","names":["LRUMapPkg","FileContents","FileDiffMetadata","HunkExpansionRegion","RenderDiffOptions","RenderDiffResult","RenderFileOptions","RenderFileResult","SupportedLanguages","ThemedDiffResult","ThemedFileResult","DiffRendererInstance","FileRendererInstance","WorkerInitializationRenderOptions","WorkerPoolOptions","WorkerRenderingOptions","WorkerStats","GetCachesResult","LRUMap","ThemeSubscriber","WorkerPoolManager","langs","theme","lineDiffType","tokenizeMaxLineLength","preferredHighlighter","Partial","Promise","Map"],"sources":["../../src/worker/WorkerPoolManager.d.ts"],"sourcesContent":["import LRUMapPkg from 'lru_map';\nimport type { FileContents, FileDiffMetadata, HunkExpansionRegion, RenderDiffOptions, RenderDiffResult, RenderFileOptions, RenderFileResult, SupportedLanguages, ThemedDiffResult, ThemedFileResult } from '../types';\nimport type { DiffRendererInstance, FileRendererInstance, WorkerInitializationRenderOptions, WorkerPoolOptions, WorkerRenderingOptions, WorkerStats } from './types';\ninterface GetCachesResult {\n fileCache: LRUMapPkg.LRUMap<string, RenderFileResult>;\n diffCache: LRUMapPkg.LRUMap<string, RenderDiffResult>;\n}\ninterface ThemeSubscriber {\n rerender(): void;\n}\nexport declare class WorkerPoolManager {\n private options;\n private highlighter;\n private readonly preferredHighlighter;\n private renderOptions;\n private initialized;\n private workers;\n private taskQueue;\n private pendingTasks;\n private nextRequestId;\n private themeSubscribers;\n private workersFailed;\n private instanceRequestMap;\n private statSubscribers;\n private fileCache;\n private diffCache;\n private _queuedBroadcast;\n constructor(options: WorkerPoolOptions, { langs, theme, lineDiffType, tokenizeMaxLineLength, preferredHighlighter }: WorkerInitializationRenderOptions);\n isWorkingPool(): boolean;\n getFileResultCache(file: FileContents): RenderFileResult | undefined;\n getDiffResultCache(diff: FileDiffMetadata): RenderDiffResult | undefined;\n inspectCaches(): GetCachesResult;\n evictFileFromCache(cacheKey: string): boolean;\n evictDiffFromCache(cacheKey: string): boolean;\n setRenderOptions({ theme, lineDiffType, tokenizeMaxLineLength }: Partial<WorkerRenderingOptions>): Promise<void>;\n getFileRenderOptions(): RenderFileOptions;\n getDiffRenderOptions(): RenderDiffOptions;\n private setRenderOptionsOnWorkers;\n subscribeToThemeChanges(instance: ThemeSubscriber): () => void;\n unsubscribeToThemeChanges(instance: ThemeSubscriber): void;\n subscribeToStatChanges(callback: (stats: WorkerStats) => unknown): () => void;\n private queueBroadcastStateChanges;\n private _broadcastStateChanges;\n cleanUpPendingTasks(instance: FileRendererInstance | DiffRendererInstance): void;\n isInitialized(): boolean;\n initialize(languages?: SupportedLanguages[]): Promise<void>;\n private initializeWorkers;\n private drainQueue;\n highlightFileAST(instance: FileRendererInstance, file: FileContents): void;\n getPlainFileAST(file: FileContents, startingLine: number, totalLines: number, lines?: string[]): ThemedFileResult | undefined;\n highlightDiffAST(instance: DiffRendererInstance, diff: FileDiffMetadata): void;\n getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true, collapsedContextThreshold?: number): ThemedDiffResult | undefined;\n terminate(): void;\n private terminateWorkers;\n getStats(): WorkerStats;\n private submitTask;\n private resolveLanguagesAndExecuteTask;\n private handleWorkerMessage;\n private _queuedDrain;\n private queueDrain;\n private assignWorkerToTask;\n private clearWorkerTask;\n private executeTask;\n private getAvailableWorker;\n private generateRequestId;\n}\nexport {};\n//# sourceMappingURL=WorkerPoolManager.d.ts.map"],"mappings":";;;;;UAGUiB,eAAAA;aACKjB,SAAAA,CAAUkB,eAAeX;EAD9BU,SAAAA,EAEKjB,SAAAA,CAAUkB,MAFA,CAAA,MAAA,EAEeb,gBAFf,CAAA;;UAIfc,eAAAA,CAHeD;EACeb,QAAAA,EAAAA,EAAAA,IAAAA;;AAAT,cAKVe,iBAAAA,CALU;EAErBD,QAAAA,OAAAA;EAGWC,QAAAA,WAAAA;EAiBIN,iBAAAA,oBAAAA;EAAqBO,QAAAA,aAAAA;EAAOC,QAAAA,WAAAA;EAAOC,QAAAA,OAAAA;EAAcC,QAAAA,SAAAA;EAAuBC,QAAAA,YAAAA;EAAwBZ,QAAAA,aAAAA;EAE5FZ,QAAAA,gBAAAA;EAAeM,QAAAA,aAAAA;EACfL,QAAAA,kBAAAA;EAAmBG,QAAAA,eAAAA;EAC3BY,QAAAA,SAAAA;EAGEK,QAAAA,SAAAA;EAAOC,QAAAA,gBAAAA;EAAcC,WAAAA,CAAAA,OAAAA,EAPnBV,iBAOmBU,EAAAA;IAAAA,KAAAA;IAAAA,KAAAA;IAAAA,YAAAA;IAAAA,qBAAAA;IAAAA;EAAAA,CAAAA,EAP6EX,iCAO7EW;EAAiCT,aAAAA,CAAAA,CAAAA,EAAAA,OAAAA;EAARW,kBAAAA,CAAAA,IAAAA,EALxCzB,YAKwCyB,CAAAA,EALzBnB,gBAKyBmB,GAAAA,SAAAA;EAAkCC,kBAAAA,CAAAA,IAAAA,EAJ1EzB,gBAI0EyB,CAAAA,EAJvDtB,gBAIuDsB,GAAAA,SAAAA;EAC3ErB,aAAAA,CAAAA,CAAAA,EAJPW,eAIOX;EACAF,kBAAAA,CAAAA,QAAAA,EAAAA,MAAAA,CAAAA,EAAAA,OAAAA;EAEUe,kBAAAA,CAAAA,QAAAA,EAAAA,MAAAA,CAAAA,EAAAA,OAAAA;EACEA,gBAAAA,CAAAA;IAAAA,KAAAA;IAAAA,YAAAA;IAAAA;EAAAA,CAAAA,EAL6BO,OAK7BP,CALqCJ,sBAKrCI,CAAAA,CAAAA,EAL+DQ,OAK/DR,CAAAA,IAAAA,CAAAA;EACKH,oBAAAA,CAAAA,CAAAA,EALjBV,iBAKiBU;EAGXJ,oBAAAA,CAAAA,CAAAA,EAPNR,iBAOMQ;EAAuBD,QAAAA,yBAAAA;EAE9BH,uBAAAA,CAAAA,QAAAA,EAPWW,eAOXX,CAAAA,EAAAA,GAAAA,GAAAA,IAAAA;EAAuBmB,yBAAAA,CAAAA,QAAAA,EANVR,eAMUQ,CAAAA,EAAAA,IAAAA;EAGnBf,sBAAAA,CAAAA,QAAAA,EAAAA,CAAAA,KAAAA,EARcI,WAQdJ,EAAAA,GAAAA,OAAAA,CAAAA,EAAAA,GAAAA,GAAAA,IAAAA;EAA4BX,QAAAA,0BAAAA;EACjCA,QAAAA,sBAAAA;EAA2ES,mBAAAA,CAAAA,QAAAA,EANnEE,oBAMmEF,GAN5CC,oBAM4CD,CAAAA,EAAAA,IAAAA;EACtEC,aAAAA,CAAAA,CAAAA,EAAAA,OAAAA;EAA4BT,UAAAA,CAAAA,SAAAA,CAAAA,EALhCM,kBAKgCN,EAAAA,CAAAA,EALTyB,OAKSzB,CAAAA,IAAAA,CAAAA;EACjCA,QAAAA,iBAAAA;EAAwFC,QAAAA,UAAAA;EAAZyB,gBAAAA,CAAAA,QAAAA,EAHvEhB,oBAGuEgB,EAAAA,IAAAA,EAH3C3B,YAG2C2B,CAAAA,EAAAA,IAAAA;EAA8EnB,eAAAA,CAAAA,IAAAA,EAF1JR,YAE0JQ,EAAAA,YAAAA,EAAAA,MAAAA,EAAAA,UAAAA,EAAAA,MAAAA,EAAAA,KAAAA,CAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EAF/EC,gBAE+ED,GAAAA,SAAAA;EAGpKO,gBAAAA,CAAAA,QAAAA,EAJeL,oBAIfK,EAAAA,IAAAA,EAJ2Cd,gBAI3Cc,CAAAA,EAAAA,IAAAA;EAAW,eAAA,CAAA,IAAA,EAHDd,gBAGC,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAH2E0B,GAG3E,CAAA,MAAA,EAHuFzB,mBAGvF,CAAA,GAAA,IAAA,EAAA,yBAAA,CAAA,EAAA,MAAA,CAAA,EAHyJM,gBAGzJ,GAAA,SAAA;;;cAAXO"}
@@ -19,10 +19,11 @@ import LRUMapPkg from "lru_map";
19
19
  const IGNORE_RESPONSE = Symbol("IGNORE_RESPONSE");
20
20
  var WorkerPoolManager = class {
21
21
  highlighter;
22
+ preferredHighlighter;
22
23
  renderOptions;
23
24
  initialized = false;
24
25
  workers = [];
25
- taskQueue = [];
26
+ taskQueue = /* @__PURE__ */ new Map();
26
27
  pendingTasks = /* @__PURE__ */ new Map();
27
28
  nextRequestId = 0;
28
29
  themeSubscribers = /* @__PURE__ */ new Set();
@@ -32,8 +33,9 @@ var WorkerPoolManager = class {
32
33
  fileCache;
33
34
  diffCache;
34
35
  _queuedBroadcast;
35
- constructor(options, { langs, theme = DEFAULT_THEMES, lineDiffType = "word-alt", tokenizeMaxLineLength = 1e3 }) {
36
+ constructor(options, { langs, theme = DEFAULT_THEMES, lineDiffType = "word-alt", tokenizeMaxLineLength = 1e3, preferredHighlighter = "shiki-js" }) {
36
37
  this.options = options;
38
+ this.preferredHighlighter = preferredHighlighter;
37
39
  this.renderOptions = {
38
40
  theme,
39
41
  lineDiffType,
@@ -92,7 +94,8 @@ var WorkerPoolManager = class {
92
94
  } else {
93
95
  const [highlighter] = await Promise.all([getSharedHighlighter({
94
96
  themes: themeNames,
95
- langs: ["text"]
97
+ langs: ["text"],
98
+ preferredHighlighter: this.preferredHighlighter
96
99
  }), this.setRenderOptionsOnWorkers(newRenderOptions, resolvedThemes)]);
97
100
  this.highlighter = highlighter;
98
101
  }
@@ -173,11 +176,12 @@ var WorkerPoolManager = class {
173
176
  for (const callback of this.statSubscribers) callback(stats);
174
177
  };
175
178
  cleanUpPendingTasks(instance) {
176
- this.taskQueue = this.taskQueue.filter((task) => {
177
- if ("instance" in task) return task.instance !== instance;
178
- return true;
179
- });
180
- for (const [id, task] of Array.from(this.pendingTasks)) if ("instance" in task && task.instance === instance) this.pendingTasks.delete(id);
179
+ this.taskQueue.delete(instance);
180
+ const requestId = this.instanceRequestMap.get(instance);
181
+ if (requestId != null) {
182
+ this.pendingTasks.delete(requestId);
183
+ this.instanceRequestMap.delete(instance);
184
+ }
181
185
  this.queueBroadcastStateChanges();
182
186
  }
183
187
  isInitialized() {
@@ -198,7 +202,8 @@ var WorkerPoolManager = class {
198
202
  else resolvedLanguages = await resolveLanguages(languages);
199
203
  const [highlighter] = await Promise.all([getSharedHighlighter({
200
204
  themes,
201
- langs: ["text", ...languages]
205
+ langs: ["text", ...languages],
206
+ preferredHighlighter: this.preferredHighlighter
202
207
  }), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
203
208
  if (this.initialized === false) {
204
209
  this.terminateWorkers();
@@ -248,6 +253,7 @@ var WorkerPoolManager = class {
248
253
  type: "initialize",
249
254
  id,
250
255
  renderOptions: this.renderOptions,
256
+ preferredHighlighter: this.preferredHighlighter,
251
257
  resolvedThemes,
252
258
  resolvedLanguages
253
259
  },
@@ -266,14 +272,13 @@ var WorkerPoolManager = class {
266
272
  }
267
273
  drainQueue = () => {
268
274
  this._queuedDrain = void 0;
269
- if (this.initialized !== true || this.taskQueue.length === 0) return;
270
- while (this.taskQueue.length > 0) {
271
- const task = this.taskQueue[0];
275
+ if (this.initialized !== true || this.taskQueue.size === 0) return;
276
+ for (const [instance, task] of this.taskQueue) {
277
+ if (this.instanceRequestMap.has(instance)) continue;
272
278
  const langs = getLangsFromTask(task);
273
279
  const availableWorker = this.getAvailableWorker(langs);
274
280
  if (availableWorker == null) break;
275
281
  this.assignWorkerToTask(task, availableWorker);
276
- this.taskQueue.shift();
277
282
  this.resolveLanguagesAndExecuteTask(availableWorker, task, langs);
278
283
  }
279
284
  this.queueBroadcastStateChanges();
@@ -286,12 +291,17 @@ var WorkerPoolManager = class {
286
291
  file
287
292
  });
288
293
  }
289
- getPlainFileAST(file) {
294
+ getPlainFileAST(file, startingLine, totalLines, lines) {
290
295
  if (this.highlighter == null) {
291
296
  this.initialize();
292
297
  return;
293
298
  }
294
- return renderFileWithHighlighter(file, this.highlighter, this.renderOptions, true);
299
+ return renderFileWithHighlighter(file, this.highlighter, this.renderOptions, {
300
+ forcePlainText: true,
301
+ startingLine,
302
+ totalLines,
303
+ lines
304
+ });
295
305
  }
296
306
  highlightDiffAST(instance, diff) {
297
307
  if ((diff.lang ?? getFiletypeFromFileName(diff.name)) === "text") return;
@@ -301,12 +311,13 @@ var WorkerPoolManager = class {
301
311
  diff
302
312
  });
303
313
  }
304
- getPlainDiffAST(diff, startingLine, totalLines, expandedHunks) {
314
+ getPlainDiffAST(diff, startingLine, totalLines, expandedHunks, collapsedContextThreshold) {
305
315
  return this.highlighter != null ? renderDiffWithHighlighter(diff, this.highlighter, this.renderOptions, {
306
316
  forcePlainText: true,
307
317
  startingLine,
308
318
  totalLines,
309
- expandedHunks
319
+ expandedHunks,
320
+ collapsedContextThreshold
310
321
  }) : void 0;
311
322
  }
312
323
  terminate() {
@@ -314,7 +325,7 @@ var WorkerPoolManager = class {
314
325
  this.fileCache.clear();
315
326
  this.diffCache.clear();
316
327
  this.instanceRequestMap.clear();
317
- this.taskQueue.length = 0;
328
+ this.taskQueue.clear();
318
329
  this.pendingTasks.clear();
319
330
  this.highlighter = void 0;
320
331
  this.initialized = false;
@@ -335,7 +346,7 @@ var WorkerPoolManager = class {
335
346
  totalWorkers: this.workers.length,
336
347
  workersFailed: this.workersFailed,
337
348
  busyWorkers: this.workers.filter((w) => w.request_id != null).length,
338
- queuedTasks: this.taskQueue.length,
349
+ queuedTasks: this.taskQueue.size,
339
350
  pendingTasks: this.pendingTasks.size,
340
351
  themeSubscribers: this.themeSubscribers.size,
341
352
  fileCacheSize: this.fileCache.size,
@@ -370,17 +381,18 @@ var WorkerPoolManager = class {
370
381
  };
371
382
  }
372
383
  })();
373
- this.instanceRequestMap.set(instance, id);
374
- this.taskQueue.push(task);
384
+ this.taskQueue.set(instance, task);
375
385
  this.queueDrain();
376
386
  }
377
387
  async resolveLanguagesAndExecuteTask(availableWorker, task, langs) {
378
- if (task.type === "file" || task.type === "diff") {
388
+ try {
379
389
  const workerMissingLangs = langs.filter((lang) => !availableWorker.langs.has(lang));
380
390
  if (workerMissingLangs.length > 0) if (hasResolvedLanguages(workerMissingLangs)) task.request.resolvedLanguages = getResolvedLanguages(workerMissingLangs);
381
391
  else task.request.resolvedLanguages = await resolveLanguages(workerMissingLangs);
392
+ this.executeTask(availableWorker, task);
393
+ } catch {
394
+ this.clearWorkerTask(task, availableWorker);
382
395
  }
383
- this.executeTask(availableWorker, task);
384
396
  }
385
397
  handleWorkerMessage(managedWorker, response) {
386
398
  const task = this.pendingTasks.get(response.id);
@@ -430,11 +442,9 @@ var WorkerPoolManager = class {
430
442
  } catch (error) {
431
443
  if (error !== IGNORE_RESPONSE) console.error(error, task, response);
432
444
  }
433
- if (task != null && "instance" in task && this.instanceRequestMap.get(task.instance) === response.id) this.instanceRequestMap.delete(task.instance);
434
- this.pendingTasks.delete(response.id);
435
- managedWorker.request_id = void 0;
445
+ if (task != null) this.clearWorkerTask(task, managedWorker);
436
446
  this.queueBroadcastStateChanges();
437
- if (this.taskQueue.length > 0) this.queueDrain();
447
+ if (this.taskQueue.size > 0) this.queueDrain();
438
448
  }
439
449
  _queuedDrain;
440
450
  queueDrain() {
@@ -444,16 +454,24 @@ var WorkerPoolManager = class {
444
454
  }
445
455
  assignWorkerToTask(task, managedWorker) {
446
456
  managedWorker.request_id = task.id;
457
+ if ("instance" in task) {
458
+ this.taskQueue.delete(task.instance);
459
+ this.instanceRequestMap.set(task.instance, task.id);
460
+ }
447
461
  this.pendingTasks.set(task.id, task);
448
462
  }
463
+ clearWorkerTask(task, managedWorker) {
464
+ managedWorker.request_id = void 0;
465
+ if ("instance" in task) this.instanceRequestMap.delete(task.instance);
466
+ this.pendingTasks.delete(task.id);
467
+ }
449
468
  executeTask(managedWorker, task) {
450
469
  this.assignWorkerToTask(task, managedWorker);
451
470
  for (const lang of getLangsFromTask(task)) managedWorker.langs.add(lang);
452
471
  try {
453
472
  managedWorker.worker.postMessage(task.request);
454
473
  } catch (error) {
455
- managedWorker.request_id = void 0;
456
- this.pendingTasks.delete(task.id);
474
+ this.clearWorkerTask(task, managedWorker);
457
475
  console.error("Failed to post message to worker:", error);
458
476
  if ("instance" in task) task.instance.onHighlightError(error);
459
477
  else if ("reject" in task) task.reject(error);